一面:
1.activity和service怎么通信
(回答了啟動service的方式横浑。屉更。但是面試官說讓我說怎么通信不是問啟動瑰谜。萨脑。。我就從兩種啟動方式說了一下不同的啟動方式怎么通信了职车,但是面試官問我還有嗎答不出了悴灵,扯了一下activity和service的跨進程的通信)
2.因為扯到了跨進程通信积瞒,就讓我說一下安卓上有什么跨進程的通信方式
(答了廣播登下,socket,基于binder那些缰贝,剪貼板揩瞪,文件,管道壹将。诽俯。暴区。都是下意識說的,沒答全)
3.說到了管道房交,讓我說一下在Android的時候會用到管道嗎
(我說了平時沒有用到候味,但是linux下敲命令行的時候會用到"|",這個實際上會用到管道硬霍,后面還補充說Android的Handler機制是用到管道的唯卖。。面試官說平時基本不怎么用到的)
4.Java 兩個整型相加怎么知道有沒有溢出
(我說如果是int相加密幔,就用long保存結(jié)果撩轰,然后與Integer.MAX_VALUE和Integer.MIN_VALUE比較胯甩。然后如果long都存不下的話,可以用Java提供的一些數(shù)值類來表示數(shù)字堪嫂,進行運算(回來查了一下偎箫,BigInteger和BigDecimal可以提供這種大數(shù)字的運算)。面試官說如果不用這些呢皆串,如果是兩個正數(shù)相加呢淹办,我沒答上來,但我說了一下正數(shù)相加溢出的話符號位會改變恶复。怜森。。問了面試官谤牡,也是這個答案副硅,他正數(shù)相加溢出會變成負數(shù))
5.Java怎么停止線程
(這是我之前面試沒回答上來的問題似乎恐疲,但那時問的是安全地停止一個線程。。愕乎。我就答了捕獲InterruptException和isInterrupt()標志位那些。。(跑題)然后面試官說不是這個芳绩,就說怎么停止線程就好遏片。。许师。于是回答了線程池的shutdownAll()方法那些;還說了一下設置標志位,作為循環(huán)停止的條件;然后還說如果是有l(wèi)ooper的線程,可以停止looper。善已。宫蛆。感覺不是答得很好)
(1.標記位想虎;2.Thread類的interrupt()方法(stop()已廢棄)忿薇;3.線程池使用shutDownAll()骇陈;4.Looper的quit方法或quitSafely方法)
6.假如有4個線程同步開始婿崭,其中第4個線程要等前面三個線程執(zhí)行完進行些統(tǒng)計操作婿着,要怎么操作呢形纺。
(說了CountDownLatch和那個柵欄CyclicBarriy(不會拼)?但是說得不太好粗梭,因為我用得少不是特別理解,面試官看出來我回答得不好酷宵,讓我說說它們的區(qū)別男韧,這個應該回答得沒什么大問題口锭?(后來發(fā)現(xiàn)問題大了荆隘!我把countDownLatch說成信號量了凰荚,給記串了憨颠,但是面試官看起來也沒發(fā)現(xiàn)?))
7.如果不通過使用Java的并發(fā)包的現(xiàn)成類庫來實現(xiàn)一個CountDownLatch箫爷,怎么實現(xiàn)?
((嗯這個也是描述信號量的,所以是錯誤回答)我回答是(感覺基本是下意識回答的护侮,沒有腦子了)凳忙,維護一個volatile的數(shù)字,然后通過++和--操作來控制數(shù)字的大小热幔,并用sychronized塊保證++和--操作的原子性歼跟;然后當一個線程要調(diào)用countdown操作的時候骚秦,發(fā)現(xiàn)這個值為0靶溜,那么就主動調(diào)用wait()方法个扰;如果一個線程調(diào)用++的操作烘绽,那么當從0加到1的時候胡野,就調(diào)用鎖上的notifyAll()熊响,來通知沉睡的線程耘眨。因為使用notifyAll喚醒的線程可能有多個奥喻,所以被喚醒的線程還需要再次檢查數(shù)字是不是為0,應該需要一個循環(huán)檢查的邏輯)
8.那么使用你這個CountDownLatch的這3+1個線程西剥,一共需要幾個鎖呢南捂?
(一個呀潮秘,因為只有在同一個鎖上才能保證互斥呀)
9.知道大頂堆和小頂堆嗎矗烛,一個數(shù)組建堆,時間復雜度是多少呢箩溃?
(原地建堆O(n)瞭吃,但是數(shù)學證明沒搞懂,如果逐個插入涣旨,則是O(nlogn)(這個回答的時候不是很清晰歪架,這個答案不太自信))
10.在堆中找指定的一個元素復雜度是多少?
(答了O(n)霹陡。和蚪。。我說又不是二叉搜索樹這種更加有序的結(jié)構(gòu)烹棉,如果找的不是根元素攒霹,那么也只有遍歷查找了)
11.看你簡歷上也有寫網(wǎng)絡方面的知識,https的過程說一下
(這是我之前面試跪過的題目浆洗。剔蹋。。但是我這次不怕了辅髓。泣崩。給他說了一下ssl層的握手過程,然后面試官有問我ssl握手生成的這幾個隨機數(shù)有什么用洛口,我說了這幾個隨機數(shù)是用來生成真正的對稱密鑰的矫付,還可以防止重放攻擊,并且三個偽隨機數(shù)更接近真正的隨機)
二面:
1.Unicode和ASCII的區(qū)別
(說實話這個我不記得第焰,我就說了一下Java是Unicode編碼买优,然后占用16bits,然后說ASCII編碼范圍應該比Unicode要小)
2.Unicode有哪些種類杀赢?Java是哪種烘跺?
(不知道。脂崔。面試官說是utf-8就是一個滤淳。。(我知道Java不是標準的UTF砌左,但是我沒說))
3.json這種格式知道嗎脖咐,是怎樣的,有什么用汇歹?
(存儲一些鍵值對(屬性)吧屁擅,可以用花括號表示一個json對象,還有方括號表示json數(shù)組产弹;json這種格式可以用來表示一個序列化的對象)
4.序列化除了json還有什么可以使用派歌?
(xml格式也可以吧)
5.說說Android上的序列化?
(serializable和Parcelable痰哨,使用方式講了一下)
6.Java的serializable有個Id胶果,你知道是有啥用的嗎?
(類的版本吧作谭,定義之后可以最大限度恢復對象,說了一下serializable可以用于深拷貝)
7.深拷貝淺拷貝說說奄毡?
(描述了一下定義吧)
8.Object的hashcode()用來干嘛折欠,怎么自己實現(xiàn)hashcode?
(頭條之前問過我這個問題吼过,但是我沒講好(所以才會掛嘛)锐秦。
這次的話,我說了一下
hashcode的作用(用在hashmap這種數(shù)據(jù)結(jié)構(gòu)中的散列和查找)盗忱;
-
我認為一個好的hashcode定義的要求:(
(1)不能經(jīng)常改變酱床,因為改變會導致無法找到原本的key對象;
(2)最好跟對象的一些數(shù)據(jù)相關(guān)趟佃,能夠唯一標識一個對象(比如你每個對象都有不會改變的名字的話扇谣,就可以根據(jù)對象名字生成);
(3)在一個整型中0和1分布盡可能均勻闲昭,不能前面都是000后面才有幾個數(shù)字罐寨,這樣比較容易產(chǎn)生碰撞)
-
談談根據(jù)以上要求怎么生成hashcode)
(復盤:個人感覺可以吹吹哈希洪范攻擊?還有怎么解決哈希洪范攻擊)
9.JNI講講序矩?
(講了一下System.load之類的加載.so庫的兩個方法鸯绿,還有Java方法和cpp方法的簽名匹配)
10.一個a包里的B類的c方法,cpp代碼中的方法一定要a_B_c()這樣嗎
(也可以自定義映射,我有看到別人的代碼中有這樣的映射)
11.Java的泛型講講瓶蝴,有啥用毒返?咋實現(xiàn)的
(有泛型方法和泛型類;實現(xiàn)就是編譯期的時候進行了轉(zhuǎn)型舷手,有對應的虛擬機指令拧簸;一般來說運行時不可以獲取泛型參數(shù)的類型,但是有一種情況可以)
12.在什么情況下可以在運行時獲取泛型參數(shù)
(在父類是一個泛型類聚霜,子類繼承這個父類并實現(xiàn)這個泛型參數(shù)的時候狡恬,可以通過反射getGenxxxType()的方法獲取泛型參數(shù)列表具體的泛型)
13.上界通配符和下界通配符講講
(這個講得不太好,就是說了一下寫法蝎宇,還有每個寫法表示的是什么)
(List<? extends T>:get:T弟劲;put :任何都不行;List<? super T>:get:Object姥芥;put:T)
14.兩個方法兔乞,一個方法的參數(shù)是泛型的,一個參數(shù)是正常的類(如String)凉唐,會怎么樣庸追?
(我認為不會報錯吧,因為泛型參數(shù)可以匹配所有類型參數(shù)台囱,應該會優(yōu)先調(diào)用更準確的方法……面試官覺得會報錯淡溯,因為編譯器會分不清應該調(diào)用哪個方法;我還是認為不會報錯……他們是包含與被包含的關(guān)系簿训,就像一個方法有Object參數(shù)和String參數(shù)咱娶,調(diào)用的時候如果傳入一個String類型的參數(shù),靜態(tài)委派也是優(yōu)先調(diào)用String的那個方法)
(回到宿舍實測强品,不會報錯)
15.輸入網(wǎng)址到返回ip的過程
(講了一下DNS服務的請求過程)
16.假設你你緩存的ip地址過時了膘侮,怎么辦
(我猜測說,要是ip過期的話的榛,會無法響應請求琼了,那客戶端就可以再走一次DNS請求的流程(這個答案不好哈哈哈哈))
17.你認為DNS機制是怎么解決這個問題的,你可以嘗試參考http的緩存機制想想
(每次使用之前與DNS服務器對比一下夫晌?(is_modify_since?)或者定義一個過期時間雕薪,過期之前都可以直接使用這個ip地址)
18.廣播有幾種,有序和粘性講講
(粘性不記得了晓淀,有序講了一下優(yōu)先級)
19.注冊廣播的方式蹦哼,你覺得靜態(tài)注冊廣播這個是什么時候執(zhí)行的呢
(靜態(tài)注冊和動態(tài)注冊?執(zhí)行應該是開機之后相關(guān)服務啟動之后吧(猜測))
20.本地廣播
(只能在進程內(nèi)傳播消息要糊,使用handler實現(xiàn)纲熏,工作機制就是……說了一下廣播過濾那些吧妆丘,然后再發(fā)消息到指定的廣播接收器去處理)
21.線程進程區(qū)別
(1.進程是系統(tǒng)分配資源的單位;2.線程是系統(tǒng)分配和調(diào)度cpu資源的單位局劲;3.線程獨立性沒有進程高勺拣;4.一個進程可以有多個線程……等等)
22.講到內(nèi)存資源,線程有什么數(shù)據(jù)是私有的
(虛擬機棧鱼填,以及上面的方法參數(shù)药有?還有ThreadLocal的話可以定義一個線程私有的對象,之后說我知道ThreadLocal的實現(xiàn)方式苹丸,然后就跟他說了一下ThreadLocal以及它的ThreadLocalMap那些……以及它不會內(nèi)存泄漏的原因)
(面后復盤補充愤惰,jvm中虛擬機棧、程序計數(shù)器赘理、本地方法棧都是線程私有的)
23.算法:二叉樹的右視圖
(思路是層次遍歷最后一個宦言,但是連層次遍歷都寫錯了)
24.算法:兩個棧實現(xiàn)隊列
(寫出來了,但是面試官說可以優(yōu)化商模,沒說好)
25.講講實習項目遇到的問題
(項目的長時間運行崩潰的問題:
1.描述程序的整個結(jié)構(gòu)運作過程奠旺;
2.問題處理思路:
(1)如何探究原因;
(2)找到原因后嘗試解決施流,嘗試提出解決方案响疚;
(3)無法解決,寫好日志分析報告交給leader瞪醋;
面試官:那最后這個問題解決了嗎忿晕?
我:我離職了不知道情況了。
面試官:這個問題你可以問問他們解決了沒有银受。
我:那我想問一下您認為有什么解決辦法嗎践盼?
面試官:沒有接觸這一類的問題,我也不清楚蚓土。)
26.有什么想問我的:
工作氛圍(哪方面的氛圍宏侍?學習氛圍赖淤、加班情況)蜀漆;
程序員職業(yè)發(fā)展建議以及如何快速融入工作。
三面:(記不全)
自我介紹
內(nèi)核態(tài)用戶態(tài)的區(qū)別
用戶態(tài)可以訪問內(nèi)核態(tài)的內(nèi)存嗎咱旱,你說的一些有風險的指令确丢,具體是怎么阻止用戶態(tài)程序去執(zhí)行有風險的指令的
既然用戶態(tài)不可以訪問內(nèi)核態(tài)的內(nèi)存,那么在做一些比如網(wǎng)絡連接的操作的時候肯定需要內(nèi)核態(tài)內(nèi)存吐限,用戶態(tài)程序怎么做到使用內(nèi)核態(tài)內(nèi)存的
說到跨進程通信方式鲜侥,你知道有什么跨進程通信方式嗎?
你說到的共享內(nèi)存诸典,管道描函,消息隊列,binder他們之間有什么區(qū)別嗎?
你說到廣播舀寓、內(nèi)容提供器也有使用binder與AMS通信胆数,那他們與binder之間有什么區(qū)別嗎(廣播、內(nèi)容提供器的實質(zhì)是不是就是binder)互墓?
為什么要寫這樣一個測速的程序必尼?
兩個Activity,一個顯示商品列表篡撵,一個實現(xiàn)商品詳情頁判莉,在商品詳情頁點了關(guān)注之后,怎么使得返回商品列表之后也更新了關(guān)注狀態(tài)呢育谬?
你說的發(fā)布訂閱模式券盅,你知道有什么框架使用了這個設計模式嗎?
假如兩個Activity數(shù)據(jù)量比較大呢斑司,要更新相當多的東西呢渗饮?
你把model層設置為單例的話,那這個列表不斷下滑宿刮,加載更多內(nèi)容互站,最后導致占用相當多的內(nèi)存怎么辦?liveData僵缺、ViewModel你可以了解下
算法題:"www.toutiao.cn"轉(zhuǎn)成"cn.toutiao.www"
有什么想問我的胡桃?(在頭條工作的體驗?這個你可以問hr)
四面:(記不全)
你是哪里人磕潮?為什么選擇投上海的崗位翠胰?除了上海,還有什么意向的城市嗎自脯?為什么不喜歡北京之景?上海也是這樣啊膏潮?
問專業(yè)锻狗。與程序相關(guān)的課程有多少?有學計算機組成原理焕参、計算機網(wǎng)絡嗎轻纪?
除了看書以外學習途徑?你在安卓的群上一般討論什么東西叠纷?印象深刻的是什么刻帚?
你在wifi是上海的實習嗎?你這個在wifi的部門不是專門做安卓的吧涩嚣?有沒有安卓方面導師崇众?都是靠你自己摸索的嗎掂僵?項目有幾個人在負責,都是你在負責嗎顷歌?
因為什么而接觸安卓看峻?你在這個團隊里負責什么角色?貢獻了多少代碼比如有多少頁面是你寫的衙吩?
有沒有什么社團之類的讓你接觸安卓互妓?
有什么想問我的?(問了對應屆生的期望)
hr面:(記不全)
你認為你前面的面試表現(xiàn)怎么樣坤塞?
你是女生為什么要來上海這么遠工作冯勉?
你覺得抖音(還是字節(jié)跳動來著)怎么樣?
你提到技術(shù)驅(qū)動型摹芙,你認為怎么樣才是技術(shù)驅(qū)動型公司灼狰?
你提到你是抖音的用戶,但是使用頻率不高浮禾,是因為什么交胚,因為抖音的內(nèi)容質(zhì)量不好嗎?
你提到抖音是音視頻相關(guān)盈电,你對音視頻開發(fā)是比較感興趣嗎蝴簇?
實習工作中有沒有遇到什么較大的問題?這個問題是什么原因有沒有探究匆帚?
大學期間有沒有遇到什么比較大的挫折熬词?
你提前批有投過頭條沒有通過,是因為沒有準備好嗎吸重?
如果通過了面試互拾,你會提前來實習嗎?
有什么想問我的嚎幸?(在頭條工作的體驗颜矿?我這個崗位的發(fā)展空間?)