2021-04-14
注解名字 | 作用 |
---|---|
@RequestMapping |
处理浏览器通用请求? |
@ResponseBody |
将返回值交给浏览器处理? |
@SpringBootApplication |
自动配置主类? |
-
SpringBoot
使用组合注解替代Spring中的复杂配置工作,-> 优点缺点?
那我个人理解这其中的好处是方便,坏处是项目庞大冗杂
-
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n149" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 0px; width: inherit;">SpringBootApplication->自动配置主类?
->@SpringBootConfiguration -> 申明为SpringBoot 的配置类
-> @Configuration
->@EnableAutoConfiguration -> 开启自动配置?
->@Inherited
->@AutoConfigurationPackage
->@Import({Registrar.class})
->@Import({AutoConfigurationImportSelector.class})
->@ComponentScan -> 定义扫描的Component定义域
-></pre> -
如果一个类中的所有方法都需要
@ResponseBody
注解,那么这个注解直接使用在类名只上。如果一个类或者方法有多个注解的话,可以查询是否有组合注解可用- Spring 常用静态模板thymeleaf、JSP(Java Server Pages)、JSTL(JSP Standard TagLibrary)、FreeMarker、Velocity
-
Thread start方法和run方法的区别 run
run()方法只是调用了Thread实例的run()方法而已,它仍然运行在主线程(原来调用者线程)上
start()方法会开辟一个新的线程,在新的线程上调用run()方法,此时它运行在新的线程上
-
synchronized和Lock对比
类型 synchronized Lock 存在层次 Java的关键字,在jvm层面上 是一个类 锁的释放 1、以获取锁的线程执行完同步代码,释放锁 2、线程执行发生异常,jvm会让线程释放锁 在finally中必须释放锁,不然容易造成线程死锁 锁状态 无法判断 可以判断 性能 少量同步 大量同步
5.Lock和synchronized的选择
总结来说,Lock和synchronized有以下几点不同:
1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;
2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;
3)Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;
4)通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。
5)Lock可以提高多个线程进行读操作的效率。
在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。所以说,在具体使用时要根据适当情况选择。
Java并发编程-入门篇 -> 非常全面
常用的设计模式
-
单例模式
-
观察者模式
-
工厂模式
-
设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
-
看看前辈的代码:你去个公司难道都是新项目让你接手?很有可能是接盘的,前辈的开发难道不用设计模式?
-
什么是单例
- 保证一个类只有一个实例,并且提供一个访问该全局访问点
2.那些地方用到了单例模式
-
Windows的(任务管理器)就是很典型的单例模式,他不能打开俩个
-
网站的计数器,一般也是采用单例模式实现,否则难以同步。
-
应用程序的日志应用,一般都是单例模式实现,只有一个实例去操作才好,否则内容不好追加显示。
-
多线程的线程池的设计一般也是采用单例模式,因为线程池要方便对池中的线程进行控制
-
windows的(回收站)也是典型的单例应用。在整个系统运行过程中,回收站只维护一个实例。
5.单例防止反射漏洞攻击
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="java" cid="n230" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">private static boolean flag = false;
private Singleton() {
if (flag == false) { // if (instance != null) 实例不为空的话,直接抛异常
flag = !flag;
} else {
throw new RuntimeException("单例模式被侵犯!");
}
}
public static void main(String[] args) {
}</pre>
设计分层
Service生命周期管理、其他Service交互的初始化、Mgr初始化和管理、消息队列(生产者消费者模式?)、TTS模块封装提供、免唤醒场景切换、
语义解析、状态机管理进行机能支持与否的控制、状态监听和通知啊、UT、IT、FT测试case设计实施、DRBFM
DRBFM、基本设计、详细设计、Coding,ttt
BlinkReset
项目源码二进制化:android makefile 转写的套路,
防抖?消息缓存去重?
https://blog.csdn.net/clhcowboy/article/details/112571235
https://zhuanlan.zhihu.com/p/104878641
http://www.woshipm.com/ai/2620327.html
GC
GC 是一种内存管理方式,不止Java在使用,Python也有同样的内存管理方式,不需要开发者显式的进行内存回收管理,
在Java语言中,是由JVM自动进行的,垃圾回收线程是低优先级,平时不出发,一般在虚拟机空闲或者堆内存不足时出发GC
GC的方式?
1. 引用计数法?
2. 可达性分析法?->主流,从GCRoot开始进行引用链路的分析,在引用链上的对象都是可达的,不可达的就可以进行回收</pre>
Android原生TTS的基本使用以及配合中文语音包实现中文TTS
AIDL 客户
网友评论