萌新面试经,赶紧来看看!
點(diǎn)擊上方 "后端架構(gòu)師"關(guān)注,?星標(biāo)或置頂一起成長
后臺回復(fù)“大禮包”有驚喜禮包!
關(guān)注訂閱號「后端架構(gòu)師」,收看更多精彩內(nèi)容每日英文
As we grow up, we realize it becomes less important to have a tons of friends, and more important to have real ones。
長大了之后,我們發(fā)現(xiàn),擁有幾個(gè)真心朋友比找一大堆朋友要更重要。
每日掏心話
每年四月流疏樹就開出白色小花,佈滿整棵樹,看起來就像下了一場大雪,讓人看著發(fā)呆,也讓人產(chǎn)生錯(cuò)亂,就像人生中充滿著各種錯(cuò)覺,身在其中很容易就被迷惑了。
來自:Omooo?|?責(zé)編:樂樂
鏈接:juejin.im/user/2647279728079432
后端架構(gòu)師(ID:study_tech)第 1062 次推文
往日回顧:給IDEA換個(gè)酷炫的主題,這個(gè)有點(diǎn)哇塞啊!
??? ?
? ?正文? ?
/???前言? ?/
19年雙非本科畢業(yè),洋洋灑灑的寫了一年多業(yè)務(wù),九月份開始面試,將一些面試題分享給大家,希望對大家有所幫助?;旧蠁柕亩疾畈欢?#xff0c;我就不按公司分類了,面了得物、閱文、B站、京東、攜程、百度、觸寶、騰訊、拼多多,最后掛了兩個(gè)(某訊是真的氣,基本上不按簡歷問)。
關(guān)于我的簡歷以及這些題的具體該怎么回答,我都放在GitHub了。
GitHub地址:
https://github.com/Omooo/Android-Notes
寫的不是博客,而是口水話。何為口水話呢?就是面試官問你相關(guān)問題的時(shí)候,你應(yīng)該如何說的話。有沒有遇到這樣的場景,明明面試官問我的問題我會,我也看過甚至我自己也寫過相關(guān)博客,但是在回答的時(shí)候還是支支吾吾說不清楚,或者不分輕重想到啥就說啥。口水話專門用來解決這個(gè)問題,它不同于一般博客語言瑣碎,而是語言精煉,突出重點(diǎn),以溝通的方式而非說教的形式去闡述問題。
/???正文? ?/
下面是一些我印象中的面試題。
Java
反射、注解、泛型、異常了解嗎?
基本上都會被問到,回答的時(shí)候只是回答基本使用是不夠的,可以說一下它們在 JVM 里面的實(shí)現(xiàn)原理。比如反射的性能損耗在哪,怎么優(yōu)化?注解的信息存放在哪?注解的兩種處理方式(反射和APT)。泛型擦除怎么理解?泛型的PECS原則如何理解(典型的一個(gè)例子就是Collections.copy方法)?異常的兩種方式(Exception和Error)分別簡單說一下?異常實(shí)例的構(gòu)造?異常表?final 為啥總是會執(zhí)行?
Java集合源碼
問的最多的莫過于HashMap了。HashMap的擴(kuò)容機(jī)制、hash沖突的解決、負(fù)載因子為什么是0.75,為什么鏈表長度的邊界值是 8,取索引的過程?非線程安全,所以就牽扯到了 ConcurrentHashmap、然后又牽扯到 CAS 等等。
在公眾號后端架構(gòu)師后臺回復(fù)“Java”,獲取Java面試題和答案。
最后也可以說一下Android中推薦的使用的SparseArray、ArrayMap(里面存在兩個(gè)緩存隊(duì)列)的優(yōu)化,源碼也要看一下。
ArrayList比較簡單,有一家讓我直接手寫實(shí)現(xiàn),可以練習(xí)一下。然后又可以牽扯到線程安全的Vector、CopyOnWriteArrayList。
JVM
問的最多的就是內(nèi)存區(qū)域的劃分以及GC。回答的時(shí)候需要注意,標(biāo)記清除是清除未被標(biāo)記的對象;還有GCRoots對象是哪些?CMS就別說了,已經(jīng)被廢棄了,可以說一下G1、ZGC這些。然后就是引用計(jì)數(shù)法和可達(dá)性分析,這個(gè)可以擴(kuò)展說一下Android Framework層使用到的智能指針,它就是使用的引用計(jì)數(shù),然后說一下它是怎么解決循環(huán)引用問題的。
類加載機(jī)制問的也不少,除了Java中的,還可以說一下Android中的DexClassLoader,Android 8的改動?然后就可以引申到了插件化和熱修復(fù)了。
還有一些問到虛擬機(jī)的。這時(shí)候先從Java的HotSpot(解釋執(zhí)行和編譯執(zhí)行,分層編譯)說起,然后到Dalvik,最后到ART。期間涉及JIT、AOT編譯,什么區(qū)別?profile性能分析?對垃圾回收的改進(jìn),如果優(yōu)化GC停頓(可以參考G1回收流程)?
并發(fā)
問的最多的也就是synchronized和volatile的實(shí)現(xiàn)原理了。synchronized的基本使用?1.6 的改進(jìn)(無鎖、偏向鎖、輕量級鎖、重量級鎖)?Java對象頭?實(shí)現(xiàn)原理(ACC_SYNCHRONIZED、monitorenter/monitorexit 指令)?volatile 的可見性(lock 前綴+緩存一致性協(xié)議)和有序性(內(nèi)存屏障)的實(shí)現(xiàn)原理?CAS的實(shí)現(xiàn)(ABA問題、循環(huán)時(shí)間長開銷大問題、只能保證單個(gè)共享變量的原子性)?UnSafe類的理解?
線程池,問的也很多,但是基本上都是問線程池的那幾個(gè)參數(shù)的意思。
Android
基礎(chǔ)
基本上都大差不差,Activity和Fragment的數(shù)據(jù)傳遞,生命周期、啟動模式;動畫的使用,估值器、插值器(其實(shí)就是三角函數(shù))都比較簡單。
View的繪制流程(從Activity的attach到onResume),然后延伸到如何自定義View,為什么要重寫onMeasure、MeasureSpec的理解?
View事件分發(fā),需要注意onCancel的觸發(fā)時(shí)機(jī)(典型的就是RecyclerView的點(diǎn)擊滑動)?除了一般博客上面寫的Activity -> ViewGroup -> View 的流程。還可以說一下事件從哪里來的(InputManagerService)?事件最先是分發(fā)給Activity的嗎(其實(shí)是ViewRootImpl里面的mView,也就是DecorView)?IMS是如何分別處理KeyEvent和TouchEvent的?
再講View的繪制流程,在scheduleTraversal時(shí)可以延伸到View的刷新機(jī)制。Vsync信號的處理?四種回調(diào)前三種都比較好理解,Commit回調(diào)是怎么觸發(fā)的(onTrimMemory)?Vsync計(jì)算掉幀,如何監(jiān)聽線上的卡頓情況,一種就是利用Vsync,還一種就是BlockCanary的利用Handler回調(diào)。
然后就是Handler機(jī)制,這個(gè)基本上大家都懂,不過可以說一下內(nèi)存屏障、為什么沒有卡死、IdleHandler在實(shí)際項(xiàng)目中怎么用到的?
Framework
其實(shí)前面我們在回答Android基礎(chǔ)時(shí)就已經(jīng)講到不少Framework的東西了。所以這一塊直接問的比較多的就是Activity啟動流程和Binder機(jī)制。在講Activity流程的時(shí)候,可以說一下插件化hook式的hook點(diǎn),以及Android 8、10啟動Activity的流程改動。
Binder機(jī)制,先說一下Linux下的IPC通信方式(管道、Socket、信號量、共享內(nèi)存,其實(shí)這些在Framework層都有使用到,可以簡單講一下)。然后就是著重講Binder的通信模型,Binder在驅(qū)動層是如何表示的(binder_node、binder_ref 數(shù)據(jù)結(jié)構(gòu))?ServiceManager的代理對象的獲取(getStrongProxyForHandle(0))、Service的注冊?打開Binder機(jī)制的三大流程?
插件化和熱修復(fù),插件化的靜態(tài)代理式(這個(gè)很好寫,就是剛哥的dynamic-load-apk)和Hook式;熱修復(fù)我也只了解騰訊系的類加載機(jī)制的dex插樁,如果熟悉阿里系的底層替換方案也可以說一下。
性能優(yōu)化
這個(gè)就可以根據(jù)實(shí)際在項(xiàng)目中做了哪些來說了。我是寫了包體積優(yōu)化(減少 8M+)、布局優(yōu)化(過度繪制和布局嵌套)、內(nèi)存優(yōu)化(LeakCanary + Android Profile)。
在公眾號后端架構(gòu)師后臺回復(fù)“offer”,獲取算法面試題和答案。
Gradle
因?yàn)槲液啔v上的個(gè)人技能和項(xiàng)目經(jīng)歷都寫了Gradle,所以這一塊問的也比較多。主要是問了編譯打包流程(AAPT和AAPT2的區(qū)別)以及一些項(xiàng)目中做了哪些事(構(gòu)建優(yōu)化、寫了一個(gè)Gradle插件)。
計(jì)算機(jī)網(wǎng)絡(luò)
TCP
必問,一定要回答全哦。TCP的面向連接(三次握手、四次揮手)、基于字節(jié)流、全雙工、可靠性(流量控制、擁塞控制、重傳機(jī)制等)。TCP的缺陷(隊(duì)頭阻塞),以及HTTP3的怎么解決的?TIME_WAIT狀態(tài)的理解?
HTTP/1.x、HTTPS、HTTP2、HTTP3
必問,這個(gè)只要成體系了,就很好回答了。
先從目前使用最廣泛的HTTP/1.1(二十多年前的版本)開始回答,長連接、如果傳輸大數(shù)據(jù)、現(xiàn)在有什么優(yōu)化措施(每個(gè)域名六個(gè)并發(fā)連接、域名分片、精靈圖等等),HTTP 1.x的問題(應(yīng)用層的隊(duì)頭阻塞、未壓縮Header、明文傳輸),HTTP2是如何解決的(多路復(fù)用、HPACK算法、二進(jìn)制數(shù)據(jù))?HTTP的不安全性(機(jī)密性、問完整性、身份校驗(yàn))由HTTPS保證(TLS_ECDHE_RSA_AES_128_GCM_SHA_256 + PKI)?
HTTP2(基于SPDY協(xié)議)只解決了應(yīng)用層的隊(duì)頭阻塞問題,但是并沒有解決傳輸層的隊(duì)頭阻塞,所以可以說一下HTTP3是如何解決的(基于QUIC協(xié)議,使用UDP)?連接遷移、前向冗余糾錯(cuò)?
算法
某度:判斷合法的IP地址。
某多:樹的最大深度(遞歸和迭代都要寫),加面算法判斷是否是同花順:
花色:R :?紅色,B:?黑色,M:?梅花,F:?方塊;牌大小:A、2、3、4?... K; 輸入:["RA",?"R2",?"R3",?"R4",?"R5",?"B4",?"M2",?"F1"]? 返回?true,可以構(gòu)成一個(gè)同花順。 輸入:["FJ",?"FQ",?"FK",?"FA",?"F2"] 返回?false。某訊:島嶼問題
某寶:對稱二叉樹(遞歸和迭代都要寫)
PS:歡迎在留言區(qū)留????下你的觀點(diǎn),一起討論提高。如果今天的文章讓你有新的啟發(fā),歡迎轉(zhuǎn)發(fā)分享給更多人。
歡迎加入后端架構(gòu)師交流群,在后臺回復(fù)“007”即可。
猜你還想看
阿里、騰訊、百度、華為、京東最新面試題匯集
微軟將從12月開始暫停Windows 10更新!
如何設(shè)計(jì)一個(gè)通用的權(quán)限管理系統(tǒng)
技術(shù)無罪!開發(fā)者強(qiáng)烈抗議后,這款被封殺的下載神器恢復(fù)了
嘿,你在看嗎?
總結(jié)
以上是生活随笔為你收集整理的萌新面试经,赶紧来看看!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql后门_运用Mysql语句生成后
- 下一篇: Arista发布容器化、开放EOS版本