摘要:在平時(shí)實(shí)際開發(fā)中,我通常使用向上轉(zhuǎn)型的對(duì)象完成業(yè)務(wù)邏輯,這樣我覺得能使對(duì)象中的耦合度降低,而且在代碼重構(gòu)的時(shí)候能夠輕易切換實(shí)現(xiàn)類。
????本文首發(fā)于cartoon的博客
????轉(zhuǎn)載請(qǐng)注明出處:https://cartoonyu.github.io/c...
對(duì)synchronized的了解
java的一個(gè)關(guān)鍵字,用于重量級(jí)鎖的設(shè)定
利用synchronized關(guān)鍵字,可以實(shí)現(xiàn)對(duì)互斥資源的訪問
作用范圍
普通方法,鎖的粒度為當(dāng)前對(duì)象
靜態(tài)方法,鎖的粒度為當(dāng)前類的class對(duì)象
代碼塊,鎖的粒度為括號(hào)內(nèi)使用的對(duì)象
多線程的同步機(jī)制
使用同步代碼塊synchronized
通過標(biāo)志位輪詢?cè)L問臨界資源
通過Condition以及l(fā)ock對(duì)資源的鎖定以及釋放
通過阻塞隊(duì)列BlockQueue(生產(chǎn)者/消費(fèi)者)
threadLocal的概念以及使用場(chǎng)景
每個(gè)線程都能擁有該變量的獨(dú)立副本
內(nèi)部通過ThreadLocalMap進(jìn)行值的存儲(chǔ)以及讀取
初始容量為16
負(fù)載因子為2/3
通過再hash法解決hash沖突
final,finally,finalize的區(qū)別
final為不可變修飾詞,用于聲明屬性,方法或類不可變
finally為異常捕獲機(jī)制一部分,總是會(huì)被執(zhí)行。若try或catch有return語句,finally早于此return語句執(zhí)行
finalize為Object方法,調(diào)用此方法可以實(shí)現(xiàn)資源的回收,但是回收時(shí)間由JVM決定
java注解的作用
生成文檔
完成特定的標(biāo)識(shí)(@Service等)
在編譯時(shí)進(jìn)行格式檢查(@Override)
java集合間的區(qū)別
set與list都只含單個(gè)元素,而Map含有key-value對(duì)
Map將entry數(shù)組置為null,就是set,所以set內(nèi)元素是無序的,list元素是有序的
BIO NIO AIO的區(qū)別
BIO
同步阻塞
線程阻塞進(jìn)行運(yùn)算后返回結(jié)果
NIO
同步非阻塞
請(qǐng)求共用一個(gè)線程進(jìn)行處理
線程會(huì)直接返回結(jié)果到請(qǐng)求
AIO
異步非阻塞
線程處理后會(huì)通過回調(diào)返回結(jié)果
java反射機(jī)制的理解
作用
在程序運(yùn)行中,動(dòng)態(tài)獲取對(duì)象所屬類,屬性以及方法等信息
在程序運(yùn)行時(shí),動(dòng)態(tài)改變對(duì)象屬性
動(dòng)態(tài)代理以及靜態(tài)代理
jvm
怎么判斷對(duì)象是否可回收?
引用計(jì)數(shù)法
可達(dá)性分析算法(GC ROOT)
java內(nèi)存區(qū)域劃分
運(yùn)行時(shí)數(shù)據(jù)區(qū)域
線程共享
方法區(qū)
棧
線程隔離區(qū)
虛擬機(jī)棧
本地方法棧
程序計(jì)數(shù)器
數(shù)據(jù)庫
MyBatis分頁方式以及區(qū)別
邏輯分頁
數(shù)組分頁
RowBounds分頁
物理分頁
sql分頁
攔截器分頁
數(shù)據(jù)庫事務(wù)特性以及隔離級(jí)別
特性
原子性(Atomicity)
事務(wù)執(zhí)行結(jié)果是一致的,成功或者回滾
一致性(Consistency)
事務(wù)執(zhí)行前后數(shù)據(jù)庫狀態(tài)不受影響
隔離性(Isolation)
事務(wù)間操作相互獨(dú)立
持久性
事務(wù)執(zhí)行產(chǎn)生的結(jié)果是永久存儲(chǔ)下來的
隔離級(jí)別
read uncommitted
讀取事務(wù)未提交的數(shù)據(jù)
read commited
多次查詢某一數(shù)據(jù)結(jié)果不一致
repeatable
同時(shí)修改同一元素造成事務(wù)提交結(jié)果發(fā)生偏差
serializable
事務(wù)的順序執(zhí)行
redis的數(shù)據(jù)類型以及底層數(shù)據(jù)結(jié)構(gòu)
string
通過DDS(簡(jiǎn)單的動(dòng)態(tài)字符串)實(shí)現(xiàn)
DDS的實(shí)現(xiàn)通過雙端鏈表實(shí)現(xiàn)
hash
壓縮列表(數(shù)據(jù)量較小)
key-value對(duì)少于512個(gè)且所有鍵對(duì)大小都要小于64字節(jié)
散列表
鏈地址法解決沖突
set
有序數(shù)組
數(shù)據(jù)都是整數(shù)
元素個(gè)數(shù)不超過512個(gè)
散列表
list
壓縮列表
雙循環(huán)鏈表
所有數(shù)據(jù)大小小于64字節(jié)
數(shù)據(jù)個(gè)數(shù)小于128個(gè)
有序集合
壓縮列表
類似于數(shù)組,存儲(chǔ)空間是連續(xù)的,但是元素所占空間不唯一
雙循環(huán)鏈表
緩存穿透的概念,解決方法
緩存穿透是指請(qǐng)求訪問不存在的key,請(qǐng)求穿透到DB,流量大會(huì)造成DB崩潰
解決方法
采用布隆過濾器或者BitMap對(duì)請(qǐng)求進(jìn)行過濾
緩存雪崩的概念,解決方法
大量key設(shè)置統(tǒng)一過期時(shí)間,造成瞬間DB訪問量過大
解決方法
key的過期時(shí)間用隨機(jī)數(shù)進(jìn)行設(shè)置
緩存擊穿的概念,解決方法
存在key在緩存失效的瞬間被大量請(qǐng)求訪問,造成DB請(qǐng)求量大
解決方法
設(shè)置短期key替代原始key
key再生成后刪除短期key
spring
AOP,IOC的概念
AOP
AOP面向切面編程,它將原本縱向的程序看作成一個(gè)個(gè)切面的組合,是OOP的補(bǔ)充
動(dòng)態(tài)插入執(zhí)行邏輯到原有執(zhí)行流程中
通知(Advice):具體實(shí)現(xiàn)邏輯
連接點(diǎn)(JoinPoint):使用通知的位置
切入點(diǎn)(PointCut):指定使用通知的連接點(diǎn)位置
切面(Aspect):通知與切入點(diǎn)集合
引入(introduction):添加新方法屬性到現(xiàn)有類中
目標(biāo)(target):被通知的對(duì)象
代理(proxy)
靜態(tài)代理
動(dòng)態(tài)代理
織入(weaving):將切面引用到目標(biāo)對(duì)象生成代理對(duì)象的過程
IOC
我把IOC稱作為控制反轉(zhuǎn)或者依賴注入,IOC是Spring的核心思想,它使調(diào)用者不用管理對(duì)象的生存周期以及具體實(shí)現(xiàn),能夠更加注重于業(yè)務(wù)邏輯的實(shí)現(xiàn)。
在平時(shí)實(shí)際開發(fā)中,我通常使用向上轉(zhuǎn)型的對(duì)象完成業(yè)務(wù)邏輯,這樣我覺得能使對(duì)象中的耦合度降低,而且在代碼重構(gòu)的時(shí)候能夠輕易切換實(shí)現(xiàn)類。
Spring bean的作用域
singleton
prototype
session
request
global session
Spring bean是線程安全嗎?
prototype,request每次被調(diào)用都會(huì)創(chuàng)建新對(duì)象,不存在線程問題
singleton,session,globalSession會(huì)造成線程間競(jìng)爭(zhēng),無狀態(tài)bean是線程安全的,有狀態(tài)beanSpring通過ThreadLocal進(jìn)行解決
spring mvc的執(zhí)行流程
請(qǐng)求通過http到達(dá)后端,由DispatcherServlet進(jìn)行分發(fā)
DispatchServlet通過HandlerMapping查找處理的Controller,中間或者會(huì)有過濾器等進(jìn)行處理
如果在查找過程中發(fā)生錯(cuò)誤,HandlerExceptionResolver會(huì)返回一個(gè)HandlerExecutionChain對(duì)象到DispathchServlet
請(qǐng)求正確分發(fā)到Controller,Controller調(diào)用Service以及Repository等進(jìn)行處理,調(diào)用RequestAndViewNameResolver處理后返回ModelAndView對(duì)象到DispatchServlet
DispatchServlet根據(jù)返回的ModelAndView對(duì)象,將對(duì)象交給ViewResolver組件進(jìn)行視圖的渲染,如果在語言上有特殊要求,渲染會(huì)調(diào)用LocaleResolver以及ThemeResolver進(jìn)行國(guó)際化的適配
網(wǎng)絡(luò)
Session與cookie的區(qū)別
cookie存儲(chǔ)在客戶端,session存儲(chǔ)在服務(wù)器
cookie只能存儲(chǔ)字符串,session可以存儲(chǔ)任意對(duì)象
cookie的存儲(chǔ)大小受客戶端影響,大小為4KB,session存儲(chǔ)大小不受影響
后端獲取cookie通過http報(bào)文中的cookie字段獲取,session則通過cookie中的sessionId標(biāo)識(shí)尋找
session的工作原理
session是存儲(chǔ)在服務(wù)器端的一種標(biāo)識(shí)客戶端的數(shù)據(jù)結(jié)構(gòu)
用戶請(qǐng)求到達(dá)后臺(tái),后臺(tái)檢測(cè)是否有sessionId字段的存在
有的話,校驗(yàn)字段是否合法
沒有的話,創(chuàng)建新session并返回對(duì)應(yīng)sessionId到客戶端
TCP與UDP區(qū)別
TCP面向連接,UDP不面向連接
TCP有擁塞控制,UDP沒有擁塞控制
TCP資源開銷大,UDP資源開銷小
TCP只支持一對(duì)一,UDP支持一對(duì)多
TCP提供可靠傳輸,UDP盡可能交付
TCP面向字節(jié)流,UDP面向報(bào)文
tcp粘包的原因以及解決辦法
原因
不同數(shù)據(jù)包在到達(dá)接收方時(shí)首尾部粘在一起
解決方法
在每個(gè)tcp報(bào)文首部添加報(bào)文長(zhǎng)度
在報(bào)文的首部或者尾部設(shè)置特殊的符號(hào)位標(biāo)識(shí)
tcp的三次握手與四次揮手
三次握手(連接過程)
一次握手(客戶端發(fā)起)
創(chuàng)建TCB
發(fā)送SYN=1,seq=x
進(jìn)入SYN-SENT
二次握手(服務(wù)器發(fā)起)
發(fā)送ACK=1,syn=1,ack=y+1,seq=x+1
進(jìn)入SYN-RCVD
三次握手(客戶端發(fā)起)
發(fā)送ACK=1,seq=x+1,ack=x+1
進(jìn)入ESTABLISHED
四次揮手(結(jié)束連接過程)
一次揮手
客戶端發(fā)送FIN=1,seq=u為內(nèi)容的請(qǐng)求報(bào)文
客戶端進(jìn)入FIN-SENT-1狀態(tài)
二次揮手
服務(wù)器端發(fā)送ACK=1,seq=v,ack=u+1為內(nèi)容的確認(rèn)報(bào)文
服務(wù)器端進(jìn)入CLOSE_WAIT
客戶端進(jìn)入FIN-SENT-2狀態(tài)
三次揮手
服務(wù)器端發(fā)送FIN=1,seq=w,ACK=1,ack=u+1為內(nèi)容的釋放報(bào)文
服務(wù)器端進(jìn)入LAST_ACK狀態(tài)
四次揮手
客戶端發(fā)送ACK=1,ack=w+1,seq=u+1為內(nèi)容的確認(rèn)報(bào)文
客戶端進(jìn)入TIME_WAIT狀態(tài),等待2MSL后關(guān)閉連接
服務(wù)器端接受報(bào)文后關(guān)閉連接
設(shè)計(jì)模式
抽象工廠與簡(jiǎn)單工廠的區(qū)別
抽象工廠定義創(chuàng)建產(chǎn)品的大概流程,子工廠通過繼承抽象工廠負(fù)責(zé)具體產(chǎn)品的創(chuàng)建,產(chǎn)品種類的增加不需要改變抽象工廠的代碼邏輯
簡(jiǎn)單工廠負(fù)責(zé)具體產(chǎn)品的創(chuàng)建,產(chǎn)品種類的增加需要改變創(chuàng)建的邏輯
算法
快速排序?qū)崿F(xiàn)
主要采用分治的思想
定義左右指針遍歷元素(左右指針的初始值為邊界)
循環(huán)遍歷數(shù)組(左指針小于右指針)
循環(huán)遍歷左指針直到元素大于右指針指向的元素
交換左右指針的元素值
循環(huán)遍歷右指針直到元素小于小指針指向的元素
交換左右指針的元素值
返回左指針的值作為中線
分別遞歸中線左右,依據(jù)2,3的步驟進(jìn)行處理
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/75496.html
摘要:導(dǎo)讀這兩天的被一個(gè)名叫的項(xiàng)目霸榜了,項(xiàng)目中記錄了一些題目。建議大家也花半個(gè)小時(shí)來做一做,以便查漏補(bǔ)缺。為方便大家能夠更快的做題,而不把時(shí)間浪費(fèi)在翻譯上,我又花了幾個(gè)小時(shí)把它們翻譯成了中文,當(dāng)然已經(jīng)獲得了作者授權(quán)。 導(dǎo)讀 showImg(https://segmentfault.com/img/remote/1460000019496110?w=1514&h=452); 這兩天的GitH...
摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開發(fā)和面試問題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...
摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開發(fā)和面試問題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...
摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開發(fā)和面試問題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...
閱讀 3437·2021-11-22 09:34
閱讀 2991·2021-10-09 09:43
閱讀 1525·2021-09-24 09:47
閱讀 2260·2019-08-30 12:53
閱讀 1063·2019-08-29 14:00
閱讀 3495·2019-08-29 13:17
閱讀 2338·2019-08-28 18:00
閱讀 1352·2019-08-26 12:00