2021-04-14
| 注解名字 | 作用 |
|---|---|
@RequestMapping |
處理瀏覽器通用請(qǐng)求? |
@ResponseBody |
將返回值交給瀏覽器處理? |
@SpringBootApplication |
自動(dòng)配置主類(lèi)? |
-
SpringBoot使用組合注解替代Spring中的復(fù)雜配置工作,-> 優(yōu)點(diǎn)缺點(diǎn)?
那我個(gè)人理解這其中的好處是方便,壞處是項(xiàng)目龐大冗雜
<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->自動(dòng)配置主類(lèi)?
->@SpringBootConfiguration -> 申明為SpringBoot 的配置類(lèi)
-> @Configuration
->@EnableAutoConfiguration -> 開(kāi)啟自動(dòng)配置?
->@Inherited
->@AutoConfigurationPackage
->@Import({Registrar.class})
->@Import({AutoConfigurationImportSelector.class})
->@ComponentScan -> 定義掃描的Component定義域
-></pre>-
如果一個(gè)類(lèi)中的所有方法都需要
@ResponseBody注解,那么這個(gè)注解直接使用在類(lèi)名只上。如果一個(gè)類(lèi)或者方法有多個(gè)注解的話(huà),可以查詢(xún)是否有組合注解可用- Spring 常用靜態(tài)模板thymeleaf、JSP(Java Server Pages)、JSTL(JSP Standard TagLibrary)、FreeMarker、Velocity
-
Thread start方法和run方法的區(qū)別 run
run()方法只是調(diào)用了Thread實(shí)例的run()方法而已,它仍然運(yùn)行在主線(xiàn)程(原來(lái)調(diào)用者線(xiàn)程)上
start()方法會(huì)開(kāi)辟一個(gè)新的線(xiàn)程,在新的線(xiàn)程上調(diào)用run()方法,此時(shí)它運(yùn)行在新的線(xiàn)程上
-
synchronized和Lock對(duì)比
類(lèi)型 synchronized Lock 存在層次 Java的關(guān)鍵字,在jvm層面上 是一個(gè)類(lèi) 鎖的釋放 1、以獲取鎖的線(xiàn)程執(zhí)行完同步代碼,釋放鎖 2、線(xiàn)程執(zhí)行發(fā)生異常,jvm會(huì)讓線(xiàn)程釋放鎖 在finally中必須釋放鎖,不然容易造成線(xiàn)程死鎖 鎖狀態(tài) 無(wú)法判斷 可以判斷 性能 少量同步 大量同步
5.Lock和synchronized的選擇
總結(jié)來(lái)說(shuō),Lock和synchronized有以下幾點(diǎn)不同:
1)Lock是一個(gè)接口,而synchronized是Java中的關(guān)鍵字,synchronized是內(nèi)置的語(yǔ)言實(shí)現(xiàn);
2)synchronized在發(fā)生異常時(shí),會(huì)自動(dòng)釋放線(xiàn)程占有的鎖,因此不會(huì)導(dǎo)致死鎖現(xiàn)象發(fā)生;而Lock在發(fā)生異常時(shí),如果沒(méi)有主動(dòng)通過(guò)unLock()去釋放鎖,則很可能造成死鎖現(xiàn)象,因此使用Lock時(shí)需要在finally塊中釋放鎖;
3)Lock可以讓等待鎖的線(xiàn)程響應(yīng)中斷,而synchronized卻不行,使用synchronized時(shí),等待的線(xiàn)程會(huì)一直等待下去,不能夠響應(yīng)中斷;
4)通過(guò)Lock可以知道有沒(méi)有成功獲取鎖,而synchronized卻無(wú)法辦到。
5)Lock可以提高多個(gè)線(xiàn)程進(jìn)行讀操作的效率。
在性能上來(lái)說(shuō),如果競(jìng)爭(zhēng)資源不激烈,兩者的性能是差不多的,而當(dāng)競(jìng)爭(zhēng)資源非常激烈時(shí)(即有大量線(xiàn)程同時(shí)競(jìng)爭(zhēng)),此時(shí)Lock的性能要遠(yuǎn)遠(yuǎn)優(yōu)于synchronized。所以說(shuō),在具體使用時(shí)要根據(jù)適當(dāng)情況選擇。
Java并發(fā)編程-入門(mén)篇 -> 非常全面
常用的設(shè)計(jì)模式
單例模式
觀(guān)察者模式
工廠(chǎng)模式
設(shè)計(jì)模式,是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類(lèi)編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。
看看前輩的代碼:你去個(gè)公司難道都是新項(xiàng)目讓你接手?很有可能是接盤(pán)的,前輩的開(kāi)發(fā)難道不用設(shè)計(jì)模式?
-
什么是單例
- 保證一個(gè)類(lèi)只有一個(gè)實(shí)例,并且提供一個(gè)訪(fǎng)問(wèn)該全局訪(fǎng)問(wèn)點(diǎn)
2.那些地方用到了單例模式
Windows的(任務(wù)管理器)就是很典型的單例模式,他不能打開(kāi)倆個(gè)
網(wǎng)站的計(jì)數(shù)器,一般也是采用單例模式實(shí)現(xiàn),否則難以同步。
應(yīng)用程序的日志應(yīng)用,一般都是單例模式實(shí)現(xiàn),只有一個(gè)實(shí)例去操作才好,否則內(nèi)容不好追加顯示。
多線(xiàn)程的線(xiàn)程池的設(shè)計(jì)一般也是采用單例模式,因?yàn)榫€(xiàn)程池要方便對(duì)池中的線(xiàn)程進(jìn)行控制
windows的(回收站)也是典型的單例應(yīng)用。在整個(gè)系統(tǒng)運(yùn)行過(guò)程中,回收站只維護(hù)一個(gè)實(shí)例。
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) 實(shí)例不為空的話(huà),直接拋異常
flag = !flag;
} else {
throw new RuntimeException("單例模式被侵犯!");
}
}
public static void main(String[] args) {
}</pre>
設(shè)計(jì)分層
Service生命周期管理、其他Service交互的初始化、Mgr初始化和管理、消息隊(duì)列(生產(chǎn)者消費(fèi)者模式?)、TTS模塊封裝提供、免喚醒場(chǎng)景切換、
語(yǔ)義解析、狀態(tài)機(jī)管理進(jìn)行機(jī)能支持與否的控制、狀態(tài)監(jiān)聽(tīng)和通知啊、UT、IT、FT測(cè)試case設(shè)計(jì)實(shí)施、DRBFM
DRBFM、基本設(shè)計(jì)、詳細(xì)設(shè)計(jì)、Coding,ttt
BlinkReset
項(xiàng)目源碼二進(jìn)制化:android makefile 轉(zhuǎn)寫(xiě)的套路,
防抖?消息緩存去重?
https://blog.csdn.net/clhcowboy/article/details/112571235
https://zhuanlan.zhihu.com/p/104878641
http://www.woshipm.com/ai/2620327.html
GC
GC 是一種內(nèi)存管理方式,不止Java在使用,Python也有同樣的內(nèi)存管理方式,不需要開(kāi)發(fā)者顯式的進(jìn)行內(nèi)存回收管理,
在Java語(yǔ)言中,是由JVM自動(dòng)進(jìn)行的,垃圾回收線(xiàn)程是低優(yōu)先級(jí),平時(shí)不出發(fā),一般在虛擬機(jī)空閑或者堆內(nèi)存不足時(shí)出發(fā)GC
GC的方式?
1. 引用計(jì)數(shù)法?
2. 可達(dá)性分析法?->主流,從GCRoot開(kāi)始進(jìn)行引用鏈路的分析,在引用鏈上的對(duì)象都是可達(dá)的,不可達(dá)的就可以進(jìn)行回收</pre>
Android原生TTS的基本使用以及配合中文語(yǔ)音包實(shí)現(xiàn)中文TTS
死亡代理和onServiceDisconnected的區(qū)別
AIDL 客戶(hù)