B站就是下面賬號(hào)
視頻可能更有感覺(jué)哦
面試的答案在本文章
建議大家先看視頻,然后看自己能否回答上
回答不上的回頭看看本文章效果更好哦
面試的日子里有程序汪的面試視頻和文章,面試不慌了(這廣告打的)
這也算模擬面試吧,謝謝大家支持,你沒(méi)看到視頻可能在審批中稍等下下
面試官:String,StringBuffer,StringBuilder的區(qū)別
這個(gè)面試題有考記性的味道
如果不刷題,你很容易把StringBuffer和StringBuilder搞混
單詞比較類(lèi)似嘛
沒(méi)辦法大家必須背啊
程序汪下樓梯回答:分別從
線程安全
執(zhí)行效率
存儲(chǔ)空間
使用場(chǎng)景
線程安全性:
線程安全 String 、StringBuffer
非線程安全 StringBuilder
執(zhí)行效率:
StringBuilder > StringBuffer > String
存儲(chǔ)空間:
String 的值是不可變的,每次對(duì)String的操作都會(huì)生成新的String對(duì)象,
效率低耗費(fèi)大量?jī)?nèi)存空間,從而引起GC。
StringBuffer和StringBuilder都是可變。
使用場(chǎng)景:
1如果要操作少量的數(shù)據(jù)用 String
2.單線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuilder
3.多線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuffer
面試官:HashMap的考察
這個(gè)面試題很多面試官喜歡問(wèn),不管你是什么級(jí)別的程序員,都喜歡問(wèn)
記住不同級(jí)別的程序員回答的深度都是不一樣的
請(qǐng)不要說(shuō)這么簡(jiǎn)單啊,你看看HashMap的源碼就知道沒(méi)那么簡(jiǎn)單
還是那個(gè)原則,把知道的盡量告訴面試官
程序汪下樓梯大法
存儲(chǔ)結(jié)構(gòu)
默認(rèn)容量
裝載因子
hashcode/equals
1.7和1.8版本變化
1.內(nèi)部存儲(chǔ)結(jié)構(gòu):數(shù)組+鏈表+紅黑樹(shù)(JDK8)
2.默認(rèn)容量16,默認(rèn)裝載因子0.75。
3.key和value對(duì)數(shù)據(jù)類(lèi)型的要求都是泛型。
4.key可以為null,放在table[0]中。
5.hashcode:計(jì)算鍵的hashcode作為存儲(chǔ)鍵信息的數(shù)組下標(biāo)用于查找鍵對(duì)象的存儲(chǔ)位置。equals:HashMap使用equals()判斷當(dāng)前的鍵是否與表中存在的鍵相同。
面試官:為什么要設(shè)計(jì)出迭代器
1.迭代器本質(zhì)是一種設(shè)計(jì)模式,為了解決為不同的集合類(lèi)提供統(tǒng)一的遍歷操作接口。
面試官:java單機(jī)并發(fā)控制
最基礎(chǔ)的:
1.同步方法synchronized
2.同步塊synchronized
進(jìn)階的:
重入鎖ReentrantLock
這里不說(shuō)緩存鎖
面試官:多線程創(chuàng)建的方式
1、繼承Thread類(lèi)創(chuàng)建線程
2、實(shí)現(xiàn)Runnable接口創(chuàng)建線程
3、實(shí)現(xiàn)Callable接口通過(guò)FutureTask包裝器來(lái)創(chuàng)建Thread線程
4、使用ExecutorService、Callable、Future實(shí)現(xiàn)有返回結(jié)果的線程
一般說(shuō)出這3種,并把區(qū)別說(shuō)下即可
Thread
Runnable
Callable
面試官:怎么防止前端重復(fù)提交?
提交按鈕后屏蔽提交按鈕(前端js控制)
前端生產(chǎn)唯一id,后端通過(guò)唯一索引(簡(jiǎn)單粗暴,我喜歡)
利用Session防止表單重復(fù)提交
程序汪推薦 方法1+方案2 組合套餐萬(wàn)無(wú)一失
面試官:SpringAOP的原理
spring實(shí)現(xiàn)AOP的思路很簡(jiǎn)單,
通過(guò)預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理方式實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)
主要功能:日志記錄、性能統(tǒng)計(jì)、安全控制、事務(wù)處理、異常處理等等
AOP實(shí)現(xiàn)方式
預(yù)編譯:AspectJ
運(yùn)行期動(dòng)態(tài)代理(JDK動(dòng)態(tài)代理、CGLib動(dòng)態(tài)代理):SpringAOP、JbossAOP
AOP幾個(gè)相關(guān)概念
面向切面的核心思想就是,讓核心的業(yè)務(wù)邏輯代碼,不需要去管理一些通用的邏輯,比如說(shuō)事務(wù),安全等這方面的共同邏輯,解耦業(yè)務(wù)邏輯和通用邏輯
程序汪建議把 理論+實(shí)際應(yīng)用方式 告訴面試官,雖然你可能沒(méi)開(kāi)發(fā)過(guò)但你一定要把核心概念思想表達(dá)出來(lái)
SpringAOP后面我專(zhuān)門(mén)出篇文章講,這里簡(jiǎn)單說(shuō)下
面試官:批量往mysql導(dǎo)入1000萬(wàn)數(shù)據(jù)有什么方法?
這個(gè)面試題比較高級(jí),面試者沒(méi)刷過(guò)相關(guān)面試題或沒(méi)實(shí)際互聯(lián)網(wǎng)大數(shù)據(jù)處理經(jīng)驗(yàn)肯定回答不好
如果1千萬(wàn)條數(shù)據(jù)一條條插入,肯定會(huì)長(zhǎng)達(dá)幾個(gè)小時(shí)非常慢,
優(yōu)化數(shù)據(jù)庫(kù)插入性能是很有意義的
先不談什么分庫(kù)分表設(shè)置數(shù)據(jù)庫(kù)什么緩存參數(shù)
僅僅針對(duì)開(kāi)發(fā)層面優(yōu)化
程序汪的樓梯學(xué)習(xí)大法
減少I(mǎi)O次數(shù)
SQL寫(xiě)法優(yōu)化
合理設(shè)置批量大小
盡量順序插入
一條SQL語(yǔ)句插入多條數(shù)據(jù)
在事務(wù)中進(jìn)行插入處理,切記不要1條數(shù)據(jù)提交一下,肯定要分批處理
數(shù)據(jù)有序插入,是為了減少索引的維護(hù)壓力
批量插入SQL例子,Ibatis的小demo
<!-- 批量插入流量模塊 -->
<insert id='XXX_表-BATCH-INSERT' parameterClass='java.util.List'>
INSERT INTO
XXX_表(gmt_create,gmt_modified,字段A,字段B,字段C)
VALUES
<iterate conjunction=','>
<![CDATA[
(NOW(),NOW(),#vals[].字段A#,#vals[].字段B#,#vals[].字段C#)
]]>
</iterate>
</insert>
事務(wù)
START TRANSACTION; INSERT INTO XXX_表(gmt_create,gmt_modified,字段A,字段B,字段C) VALUES (NOW(),NOW(),#vals[].字段A#,#字段B[].字段C#)... COMMIT;
總結(jié)
合并數(shù)據(jù)+事務(wù)+有序數(shù)據(jù)的優(yōu)化插入方式
注意SQL批量插入的大小必須合理
事務(wù)執(zhí)行時(shí)間不要太長(zhǎng)了
實(shí)際開(kāi)發(fā)時(shí)需要合理設(shè)置MYSQL相應(yīng)配置參數(shù),增加緩存或減少不必要日志磁盤(pán)讀寫(xiě)
聯(lián)系客服