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