夸克Android一面涼經(jīng)(2024)
筆者作為一名雙非二本畢業(yè)7年老Android, 最近面試了不少公司, 目前已告一段落, 整理一下各家的面試問(wèn)題, 打算陸續(xù)發(fā)布出來(lái), 供有緣人參考。今天給大家?guī)?lái)的是《夸克Android一面涼經(jīng)(2024)》。
面試職位: 智能信息-客戶端開(kāi)發(fā)工程師-夸克小說(shuō)
技術(shù)一面
- 面試形式:視頻面試
- 面試時(shí)長(zhǎng): 60min(提問(wèn)55min + 反問(wèn)5min)
- 代碼考核: 無(wú)
- 崗位地點(diǎn): 廣州
面試問(wèn)題(55min)
- 自我介紹
- RN頁(yè)面打開(kāi)速度優(yōu)化
- 為什么工程中使用ReactNative, 而不是選擇其他跨端的方案?
- 看中了跨端的能力還是只是為了免發(fā)版
- 優(yōu)化方案是否同步到iOS端?
- RN的缺點(diǎn)?
- RN底層還是用原生UI控件增炭,那它慢是慢在哪里?
- 怎么優(yōu)化疏橄?
- 所有的優(yōu)化效果最有效果是什么措施闰集?
- 內(nèi)置Bundle包對(duì)包體積的影響桨螺?
- 除了Bundle體積, RN本身的體積是多大恰梢?
- 你在用RN過(guò)程中有沒(méi)有踩過(guò)什么坑?
- RN本身是用原生的View去渲染的, 跨端一致性會(huì)不會(huì)有什么問(wèn)題佛南?比如在Android調(diào)好了, 在iOS上看上去樣子不太對(duì)。
- 有一些東西改完是兩端都要測(cè), 還是只測(cè)一端嵌言?
- 這個(gè)是怎么接入到工程中使用嗅回?單獨(dú)RN倉(cāng)庫(kù)打包進(jìn)apk, 還是源碼依賴到Android和iOS的主工程中?
- 在真正上線后動(dòng)態(tài)話能力用得多不多?
- 動(dòng)態(tài)能力的跨版本兼容性如何呀页?之前發(fā)的一些App的舊版本, 后面升級(jí)了很多版本妈拌。會(huì)不會(huì)有一些重新打包出來(lái)的產(chǎn)物, 下發(fā)下去不兼容, 導(dǎo)致頁(yè)面渲染會(huì)出問(wèn)題拥坛?
- 會(huì)升級(jí)RN的版本嗎蓬蝶?
- 切引擎是會(huì)有兼容的問(wèn)題對(duì)吧尘分? 不切引擎之前是不是也有兼容問(wèn)題?
- 下發(fā)的時(shí)候, 是針對(duì)不同的版本下發(fā), 還是針對(duì)所有的版本下發(fā)丸氛?
- 是否可以針對(duì)不用app版本下發(fā)不同的RNBundle版本培愁?
- 你們App的版本覆蓋速度有多快?
- 為什么選擇針對(duì)所有App版本下發(fā)相同的RNBundle的方案缓窜?
- 播放優(yōu)化
- 跟播放性能相關(guān)的定续?
- 那你主要在里面做的是什么事情?
- 為什么進(jìn)程通信數(shù)據(jù)這么大, 超過(guò)了Binder通信上限,我理解應(yīng)該是一個(gè)非常精簡(jiǎn)的數(shù)據(jù)集合禾锤?
- 所以說(shuō)是有一些極端情況私股。剛說(shuō)到的共享內(nèi)存, 共享fd, 這個(gè)大概是怎么樣做到的?
- 先把這些內(nèi)存寫(xiě)到文件里面?zhèn)鬟^(guò)去, 還是寫(xiě)到什么地方傳過(guò)去恩掷?
- 存在內(nèi)存的數(shù)據(jù)怎么讓它可以生成一個(gè)fd?我們new了一個(gè)對(duì)象, 我們?cè)趺从盟兂梢粋€(gè)fd可以引用它的東西, 然后傳給另外一個(gè)進(jìn)程倡鲸?
- 待傳輸?shù)臄?shù)據(jù)據(jù)是存在DVM的虛擬機(jī)里面, heap的內(nèi)存嘛, 那它怎么又能調(diào)用到另外一個(gè)進(jìn)程呢?它內(nèi)存之間本來(lái)就是內(nèi)存隔絕的黄娘。
- Android基礎(chǔ)
- HandlerThread
- HandlerThread用過(guò)嗎?
- 它和普通的new Thread()有什么區(qū)別峭状?什么時(shí)候用HandlerThread, 什么時(shí)候用new Thread就可以了?
- 線程池
- 平常寫(xiě)異步操作的話, 是用new Thread()還是線程池去做?
- 創(chuàng)建線程池的參數(shù)作用逼争?
- 線程池的參數(shù)是怎么配合起來(lái)使用的优床?他的流程是怎么樣?
- 我們要設(shè)計(jì)一個(gè)IO的線程池, 它的參數(shù)可以怎么設(shè)計(jì)誓焦?多個(gè)線程并發(fā)掃描文件胆敞。掃描文件, 統(tǒng)計(jì)行號(hào)。開(kāi)一個(gè)線程池, 并發(fā)去讀, 把數(shù)據(jù)加起來(lái)杂伟。
- 參數(shù)設(shè)置上怎么考慮竿秆?最好給出個(gè)數(shù)值。比如設(shè)備CPU是8核稿壁。
- 隊(duì)列的容量大小怎么設(shè)計(jì)幽钢?有界or無(wú)界?
- 文件的數(shù)量級(jí)非常大, 上層的業(yè)務(wù)可以控制它同時(shí)的并發(fā)量。
- 如果是一個(gè)有界隊(duì)列會(huì)怎么樣傅是?它一定會(huì)進(jìn)拒絕策略嗎匪燕?還是會(huì)怎么樣?
- 最大線程數(shù)的作用是什么喧笔?跟workqueue是什么關(guān)系帽驯?
- equals和hashcode
- 寫(xiě)JavaBean的時(shí)候, 什么時(shí)候需要重寫(xiě)equals和hashcode方法
- 只是作為hMap中的value而不是key, 也需要復(fù)寫(xiě)嗎?
- hashCode默認(rèn)是用什么生成的?
- 多線程方面
- 多線程并發(fā), 數(shù)據(jù)安全要加鎖, 常見(jiàn)的加鎖方式有哪些书闸?
- synchronized修飾同步塊和修飾普通方法有什么區(qū)別尼变?
- 網(wǎng)絡(luò)
- HTTP實(shí)現(xiàn)一個(gè)文件的分片下載, 客戶端怎么跟服務(wù)端交互?大文件分成多段去下載, 客戶端和服務(wù)端要發(fā)一些什么協(xié)議?
- HandlerThread
反問(wèn)問(wèn)題(5min)
夸克小說(shuō)可以展開(kāi)介紹一下嗎嫌术?
夸克小說(shuō)目前是在夸克app里面比較重要的業(yè)務(wù)哀澈。目前它在夸克里面是底部工具欄里有一個(gè)Tab, 第二個(gè)Tab就是小說(shuō)。 小說(shuō)里面有兩種版權(quán)來(lái)源度气。一種是正版的, 自己購(gòu)買的版權(quán), 這種是跟書(shū)旗共用同一套版權(quán)割按。整個(gè)阿里里面有一個(gè)叫書(shū)旗小說(shuō)。 另外一些沒(méi)有版權(quán)的磷籍。就是普通網(wǎng)頁(yè)适荣,我們正常搜書(shū)會(huì)搜出來(lái)一些盜版網(wǎng)站, 我們會(huì)對(duì)這些盜版網(wǎng)站的頁(yè)面做了一些去廣告, 轉(zhuǎn)碼, 提升一些用戶的閱讀體驗(yàn)。
我了解到夸克是一個(gè)瀏覽器, 對(duì)吧院领。你說(shuō)的小說(shuō)的功能相當(dāng)于是這個(gè)瀏覽器功能的一部分弛矛?它也是native實(shí)現(xiàn)的?
是瀏覽器比然。是一部分汪诉。是native實(shí)現(xiàn)的。
我應(yīng)聘的這個(gè)崗位, 你們對(duì)候選有什么要求嗎谈秫?需要加強(qiáng)哪方面的技能扒寄?比方在用什么新的技術(shù), 或者跨端方案等等?
小說(shuō)業(yè)務(wù)還是用Native原生開(kāi)發(fā)比較多拟烫。有一些書(shū)架頁(yè)面是用flutter寫(xiě)的该编。flutter頁(yè)面后續(xù)會(huì)有其他同學(xué)去做, 不一定由這個(gè)崗位的候選人來(lái)做。 但native一定要會(huì)硕淑。我們還有一個(gè)加載本地小說(shuō)的渲染引擎, 我們平常丟進(jìn)去的一些epub,mobi,txt文件, 這些是要一個(gè)小說(shuō)的閱讀器的, 這個(gè)小說(shuō)的閱讀器使我們自研的课竣。這一方面是用c++寫(xiě)的。所以對(duì)這塊還是有一定的要求置媳。主要還是Android原生的比較多于樟。
除了技術(shù)技能這方面, 你們對(duì)候選人有軟性素質(zhì)上的要求?比如說(shuō)資深程度, 職級(jí)拇囊?
目前職級(jí)不太限制迂曲。我們只是找到有熱情的人, 然后加進(jìn)來(lái)一起做事情。如果是P6進(jìn)來(lái)我們會(huì)有P6適合的承擔(dān)的責(zé)任, 他能勝任的任務(wù)分派給他寥袭。 P7的話也會(huì)招, 但是要求的話會(huì)更高, 他進(jìn)來(lái)以后要承擔(dān)的任務(wù)就會(huì)更P6的同學(xué)要求更高路捧。不同層級(jí)的都會(huì)招, 只是進(jìn)來(lái)以后我們對(duì)他的要求會(huì)不太一樣。
P7是屬于一個(gè)主力開(kāi)發(fā), 還不是帶人的小組長(zhǎng)這樣的是嗎传黄?
P7是主力開(kāi)發(fā)為多杰扫。
面試流程幾輪?
共4輪膘掰。3輪技術(shù)+1輪HR章姓。
總結(jié)
- 這個(gè)崗位主要負(fù)責(zé)的是夸克小說(shuō)的開(kāi)發(fā), 技術(shù)棧主要是Native, 有一部分flutter, 還有一個(gè)自研小說(shuō)的閱讀器(渲染引擎), 閱讀器涉及C/C++開(kāi)發(fā)。
- p6p7都要, 但是p7也是大頭兵, 只是要求更高。這也符合預(yù)期, 目前各家公司現(xiàn)狀皆是如此, 對(duì)標(biāo)p7職級(jí)的崗位也都是大頭兵, 甚至還有不帶人的P8凡伊。
- 從面試問(wèn)題來(lái)看, 項(xiàng)目經(jīng)歷和八股文各占一半零渐。八股文以多線程、線程池窗声、鎖相關(guān)為主。