摘要:本文首發于的博客轉載請注明出處基礎抽象類和接口的區別類層面上抽象類與接口都不能被實例化抽象類只能繼承一個直接父類,實現多個接口接口能繼承多個接口抽象類大多用作模板類使用,接口用于規范模塊間的行為方法抽象類可以用有抽象方法,靜態方法以及普通方
????本文首發于cartoon的博客
????轉載請注明出處:https://cartoonyu.github.io/c...
抽象類和接口的區別
類層面上
抽象類與接口都不能被實例化
抽象類只能繼承一個直接父類,實現多個接口;接口能繼承多個接口
抽象類大多用作模板類使用,接口用于規范模塊間的行為
方法
抽象類可以用有抽象方法,靜態方法以及普通方法;接口只能是抽象方法
抽象類中方法作用域跟普通類沒有區別;接口方法只能是公共的
抽象類中可以通過方法間的相互引用實現自身邏輯,接口只能通過子類實現邏輯
抽象類可以擁有構造器,接口沒有構造器
變量
抽象類可以有成員變量與靜態變量,接口只能有final的靜態變量
Object類有哪些成員方法
wait/notify
clone
hashCode/equals
getClass
finalize
克隆有哪些方法
實現Cloneable重寫clone方法
實現Serialize接口
Collections有哪些方法
返回線程安全類
synchronizedXxx
返回不可變集合
emptyXxx
singletonXxx
unmotifitableXxx
集合間的轉換
對集合內元素進行操作
添加元素到集合中
addAll
copy
查找元素
binarySearch
frequency
indexOfSubList
shuffle
替換
fill
replaceAll
改變元素位置
sort
swap
rotate
reverse
元素對比
min/max
disJoint
java常見異常類
系統級
IllegalAccessException
OutOfMemoryException
類級
ClassNotFoundException
ClassDefFoundException
對象級
NullPointerException
ClassCastException
CloneNotSupportedException
NoSuchFieldException
InstantiationException
方法級
IllegalArgumentException
NoSuchMethodException
操作級
數字
ArithmeticException
NumberFormatException
數組
ArrayStoreException
IndexOutOfBoundException
IO
IOException
FileNotFoundException
EOFException
數據庫
SQLException
線程
InterruptedException
類加載機制是怎么樣的
步驟
加載
校驗
準備
解析
初始化
使用
卸載
雙親委派模型工作原理
類加載器
BootstrapClassLoader
ExtensionClassLoader
ApplicationClassLoader
UserClassLoader
當類被加載到內存時,逐層向上詢問父加載器是否能加載,如果所有父加載器都不能加載,則由當前類加載器負責加載
這樣做的原因能有效保證類的唯一性
HashMap的擴容機制
HashMap的擴容機制主要依賴于三個元素:capacity(默認為16),loadFactory負載因子,size當前元素個數
當前元素個數大于8時,內部數組自動轉換為紅黑樹進行存儲
當前元素個數大于初始容量x負載因子時,數組擴容兩倍,且內部元素的位置重新進行哈希
當前元素個數小于初始容量的0.1倍時,數組縮小一半,同樣元素位置需要重新哈希
ArrayList擴容機制
ArrayList擴容主要依賴于size(當前元素個數)以及capacity(默認10)的對比
當元素填滿當前數組(capacity=size),將capacity擴容到現在的1.5倍,若計算后元素大于Integer.MAX_VALUE時,拋出OOM
ArrayList與LinkedList區別
ArrayList內部為數組,LinkedList內部為雙向鏈表
新增元素
ArrayList涉及到數組擴容(或者伴隨著arrayCopy)
LinkedList修改指針指向(或者伴隨著遍歷操作)
刪除元素
ArrayList需要進行arrayCopy
LinkedList遍歷鏈表并修改指針指向
ArrayList大小受Integer.MAX_VALUE影響,LinkedList大小理論上無限(受JVM調用最大內存影響)
ArrayList在插入元素時需要考慮當前容量以及進行arrayCopy操作,LinkedList插入不需要有額外操作
Array與ArrayList區別
存儲類型
Array:基本數據類型以及對象
ArrayList:只能對象
大小限制
Array:在定義時指定,無法增大或縮小
ArrayList:定義時可不指定(初始為10),可以擴容
插入元素
Array:插入基本數據類型元素不涉及裝拆箱操作
ArrayList:涉及裝拆箱操作
Queue中poll與remove區別
poll與remove都是取出隊頭元素
隊列不為空時,兩個方法結果是一樣的
隊列為空
poll返回null
remove拋出NoSuchElementException
線程不同步集合如何轉換成線程同步集合
通過Collections工具類返回
鎖為讀寫鎖,鎖的粒度為對象級
通過java.util.Concurrent進行包裝
鎖為寫鎖,鎖的粒度為元素級
通常都是用Concurrent進行包裝
JVM
垃圾回收算法
標記-清除
標記不清理對象,清理未標記對象
速度快,但是會造成內存碎片
復制
將內存劃分兩塊區域:清理區與存活區
將不清理對象移到存活區,刪除清理區的所有對象
空間浪費大
標記-整理
標記不清理對象,清理未標記對象
移動整理存活對象
成本高,但是有效解決內存碎片問題
G1工作流程
初始標記(停頓線程)
標記GC Root直接關聯對象
并發標記
從GC Root對堆中對象進行可達性分析
最終標記(停頓線程)
并行將Remembered Set Logs的數據合并到Remembered Set中
篩選回收
根據各Region的回收價值和成本進行回收計劃的制定
Spring
Spring中有哪些模塊
Spring Core(Spring 核心庫)
Spring AOP
Spring ORM
Spring Dao
Spring Web
Spring Context
Spring Web MVC
Spring MVC的處理流程
請求通過DispatchServlet處理
普通邏輯處理交由Controller處理,Controller處理后返回model
視圖處理,DispatchServlet調用View temlate進行視圖返回
AOP概念
AOP面向切面編程,它將原本縱向的程序看作成一個個切面的組合,是OOP的補充
動態插入執行邏輯到原有執行流程中
通知(Advice):具體實現邏輯
連接點(JoinPoint):使用通知的位置
切入點(PointCut):指定使用通知的連接點位置
切面(Aspect):通知與切入點集合
引入(introduction):添加新方法屬性到現有類中
目標(target):被通知的對象
代理(proxy)
靜態代理
動態代理
織入(weaving):將切面引用到目標對象生成代理對象的過程
Spring bean的作用域
singleton(默認)
prototype
request
session
globalSession
數據庫
MyBatis中#與$區別
傳入數據
:當作字符串傳入sql,相當于PrepareStatement
$:直接將參數傳入sql,相當于Statement
安全性
可以防止sql注入,$不能
事務的四個特性
一致性
事務執行前后都是一致的
原子性
事務中操作結果都是一樣的
隔離性
事務間的操作是相互隔離的
持久性
事務的執行結果是永久性的
char與varchar區別
char的長度是固定的,varchar的長度是不固定的
char會用空格填充到指定長度,varchar不會
char類型數據后面空格會被刪除,varchar不會
char的檢索效率比varchar高
邏輯分頁與物理分頁
邏輯分頁會將全部數據加載到內存中,再利用代碼邏輯返回分頁結果
物理分頁是在數據庫層面進行分頁
MyBatis的分頁方式
數組分頁
sql分頁
攔截器分頁
RowBounds分頁
數據庫三范式
第一范式
屬性已經是不能分割的數據單位
第二范式
所有非主屬性完全依賴于候選屬性
第三范式
不存在傳遞依賴候選屬性
內連接外連接區別
內連接只返回符合條件的共有記錄
外連接會返回表的所有記錄,插入符合條件的列
操作系統
線程與進程的區別
進程是操作系統分配資源時間的最小單位,線程是進程內部調用的實體
不同進程擁有操作系統分配的不同地址空間,同一進程的不同線程共享父進程的內存地址
進程的資源與空間由操作系統分配,線程資源與空間由進程分配
進程切換開銷比線程大
進程崩潰不會造成對其他進程的影響;線程崩潰造成父進程的死亡
進程擁有一個程序運行的入口,線程依附進程生存
網絡
http方法有哪些
方法
get
post
delete
put
options
connect
trace
link
unline
head
get與post的區別
冪等
get為冪等操作,post為非冪等操作
數據傳輸
get的數據通過url進行傳輸,post數據通過http報文傳輸
get數據大小受url長度限制,post不受限制
可緩存
get數據可緩存,post數據不可緩存
http報文
get的報文沒有實體,post的報文有實體
forward與redirect區別
行為方
forward是瀏覽器行為
redirect是服務器行為
url是否改變
forward url不變
redirect url改變
資源消耗
forward的資源消耗比redirect小
數據共享
redirect不共享數據,forward可以共享request數據
效率
forward高
redirect低
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
UDP與TCP區別
TCP面向連接,UDP不面向連接
TCP有擁塞控制,UDP沒有擁塞控制
TCP資源開銷大,UDP資源開銷小
TCP只支持一對一,UDP支持一對多
TCP提供可靠傳輸,UDP盡可能交付
TCP面向字節流,UDP面向報文
設計模式
單例模式實現的三種方法
https://www.cnblogs.com/ngy02...
靜態內部類
懶漢式
雙重檢查式
BIO NIO AIO
BIO
同步阻塞
線程阻塞進行運算后返回結果
NIO
同步非阻塞
請求共用一個線程進行處理
線程會直接返回結果到請求
AIO
異步非阻塞
線程處理后會通過回調返回結果
反射
JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;
動態代理以及靜態代理
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/75464.html
摘要:然而,異步函數不會立即被推入調用堆棧,而是會被推入任務隊列,并在調用堆棧為空后執行。將事件從任務隊列傳輸到調用堆棧稱為事件循環。我們調用接受和或返回另一個函數稱為高階函數的函數。 為了保證可讀性,本文采用意譯而非直譯 想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等著你! 1.如何理解 JS 中的this關鍵字? JS 初學者總是對 this 關鍵字感到困惑,因為與其他現...
摘要:并總結經典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快速搭建項目。 本文是關注微信小程序的開發和面試問題,由基礎到困難循序漸進,適合面試和開發小程序。并總結vue React html css js 經典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快...
摘要:并總結經典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快速搭建項目。 本文是關注微信小程序的開發和面試問題,由基礎到困難循序漸進,適合面試和開發小程序。并總結vue React html css js 經典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快...
摘要:并總結經典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快速搭建項目。 本文是關注微信小程序的開發和面試問題,由基礎到困難循序漸進,適合面試和開發小程序。并總結vue React html css js 經典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快...
閱讀 1055·2021-11-22 15:35
閱讀 1694·2021-10-26 09:49
閱讀 3238·2021-09-02 15:11
閱讀 2083·2019-08-30 15:53
閱讀 2639·2019-08-30 15:53
閱讀 2925·2019-08-30 14:11
閱讀 3533·2019-08-30 12:59
閱讀 3244·2019-08-30 12:53