這一個面試流程,簡簡單單,但是卻牽扯出來好多真實的問題,可能有一些就是我們在日常的工作中并沒有特別注意的知識點,但是沒想到在面試官這里還成為了一個重點的情況,或者通過一個剛跟簡單的點延申引出了很多底層的知識點,不信,看一下吧,如果是你,你該怎么回答?
01基礎(chǔ)部分
linux 使用情景
有沒有用過linux,你能用它做什么?
Linux是一個長時間運行比較穩(wěn)定的操作系統(tǒng),一般把它。作為服務(wù)器。
Linux本身具有c的編譯環(huán)境,我們的一些軟件是沒有(redis,Nginx)軟件包的,需要在linux上編譯得到軟件包。
說一下linux常用命令
pwd:獲取當前路徑。
cd:切換目錄/跳轉(zhuǎn)目錄。
su -u:切換到管理員。
ls,ll:列舉目錄。
文件操作命令:
tail:查看
rm -rf:刪除文件。
vi:修改
mkdir:創(chuàng)建文件夾。
你是使用什么來連接遠程服務(wù)器的?
需要依賴于linux服務(wù)器安裝ssh服務(wù)端的,一般這個ssh服務(wù)端口為22。Putty,xshell,securtcrt。使用sftp客戶端來來凝結(jié)sftp服務(wù)端,來上傳,下載文件。Winscp,xftp,fz等。
你有沒有做過一些關(guān)于數(shù)據(jù)庫的優(yōu)化?
定位慢查詢優(yōu)化方案:數(shù)據(jù)表設(shè)計時遵循范式,選擇合適的存儲引擎,選擇合適的引擎,分表,分區(qū),讀寫分離,緩存,語句優(yōu)化
02高階部分
什么是jvm,jvm底層原理,調(diào)優(yōu)
內(nèi)存模型棧堆程序計數(shù)器方法區(qū)。,Jvm堆中jvm對象分配規(guī)則。
線上環(huán)境jvm排查實戰(zhàn)與dump日志排查,Jvm自帶visualvm
復制,標記整理,標記清除分代等回收算法,Gc中minor GC與full Gc差異。帥杰大概回答了這些,而且都是從底層來說的。這些由于篇幅太多,會在以后的文章中更新。
談?wù)凬io的架構(gòu)
Osi七層 :應(yīng)用,表示,會話,傳輸,網(wǎng)絡(luò),數(shù)據(jù)鏈路,物理。
tcp:應(yīng)用,傳輸,網(wǎng)絡(luò),鏈路。
Tcp/ip協(xié)議組:應(yīng)用層:tftp,http,snmp,ftp,smtp,DNS,telnet。
傳輸層:tcp/udp
網(wǎng)絡(luò)層:IP,ICMP,RIP,OSPF,BCP,IGMP
鏈路層:SLIP,CSLIP,PPP,ARP,RARP,MTU
物理層:iso02110,IEEE802,IEE802.2
阻塞io /bio,非阻塞io/nio io多路復用/mio 信號驅(qū)動/driven
/io 異步io/aio。帥杰當時全部把這些說出來了,并且還給面試官畫了各個的模型草圖,從應(yīng)用,內(nèi)核,網(wǎng)卡層級講了一下。
Tcc分布式事務(wù)
這里面試者畫了他公司的架構(gòu)圖,
Try:預留業(yè)務(wù)資源/數(shù)據(jù)效驗
Confirm:確認執(zhí)行業(yè)務(wù)操作
Cancel:取消執(zhí)行業(yè)務(wù)操作
基于netty實現(xiàn)的im聊天室
在BIO模型中,服務(wù)器通過ServerSocket來開啟監(jiān)聽,每當有請求的時候開啟一個線程來接受處理和維持狀態(tài)。這種思想在低并發(fā),小吞吐的應(yīng)用還可以應(yīng)付,一旦遇到大并發(fā),大吞吐的請求,必然歇菜。線程和客戶端保持著1:1的對應(yīng)關(guān)系,維持著線程。維持那么的多的線程,JVM必然不堪重負,服務(wù)器必然崩潰,宕機。
而在非阻塞的Netty中,卻可以應(yīng)付自如。從容應(yīng)對。Tomcat就是基于BIO的網(wǎng)絡(luò)通信模式(Tomcat可以通過一定配置,改成非阻塞模式),而JBoss卻是基于非阻塞的NIO實現(xiàn)。
NIO的網(wǎng)絡(luò)通信模式很強勁,但是上手卻一點都不容易。其中解決和牽扯到好多網(wǎng)絡(luò)問題。如:網(wǎng)絡(luò)延時,TCP的粘包/拆包,網(wǎng)絡(luò)故障等一堆一堆的問題。而Netty呢,針對nio復雜的編程難題而進行一系列的封裝實現(xiàn),提供給廣大開發(fā)者一套開源簡單,方便使用的API類庫,甚至青出于藍而勝于藍,甚至幾乎完美的解決CPU突然飆升到100%的bug 。
03總結(jié)
由于時間有限,面試者還被問道了分庫分表,源碼解析,分布式數(shù)據(jù)庫中間件sharding-sphere,底層索引原理及實現(xiàn),并發(fā)編程,dubbo的spi機制的源碼剖析,zk的分布式鎖,紅黑樹的剖析,jdk底層的一些排序算法,怎么優(yōu)雅的寫代碼等。
看到我們程序員要想拿高工資,技術(shù)這一塊還是最關(guān)鍵的一塊。我們在平時的工作學習中,要深入的去理解這些技術(shù)棧。而不是到了面試時間抱佛腳似的去背面試題。
而在學習和日常工作中,我個人比較喜歡總結(jié),像什么linux命令啊,大數(shù)據(jù)組件安裝啊甚至是jdk 的安裝步驟,只要是接觸到的相關(guān)技術(shù),我就會進行相應(yīng)的整理然后封存,天知道什么時候會有用呢?對吧(整理的比較亂,不要笑話啊)
就像上面說的,這樣整理相當?shù)膩y套,所以呢?我還有一個習慣就是每個星期,我會進行一次大整理,整理成下面的樣子,看著文件夾中分類的知識圖譜越來越多,每一個知識點的內(nèi)容越來越多,也是一種很不錯的成績感,這不,最近身邊親戚家的孩子,受我影響踏入計算機這一行的,找工作面試,我就把這些圖給他們,讓他們作為參考,效果還不錯






