字節(jié)抖音客戶端開發(fā)面經(jīng)(一面)
10月18號面的,部門是抖音iOS客戶端基架,面試官說是不怎么涉及業(yè)務實現(xiàn)的,主要語言是OC和Swift。
時長是一個半小時,被狠狠拷打了
本人技術棧是游戲客戶端,屬于是完全不匹配,所以面試官也主要圍繞C++以及408方面的問題(也不知道為啥HR要把我撈起來面這個崗位)
頭半個小時:項目拷打,主要問了在微眾銀行和騰訊的兩段實習都干了些什么,但因為之前實習的都是游戲客戶端,所以感覺有點雞同鴨講,我講我的面試官就一直哦哦哦。
一些和簡歷上相關的問題:
- Protobuf的編碼、原理
- 在微眾銀行的實習里面做的iOS端的插件都干了什么,怎么做的
可能是看我是游戲方向的所以也問了一些渲染相關的八股:
- 介紹一下渲染管線
- 如何渲染一張圖片到屏幕上
中間半個小時:計網(wǎng)+編譯原理八股拷打,下面是還記得的題目
- 為什么TCP斷開連接要設計為四次揮手
- 在TCP斷開后如何保證真的斷開了?會不會出現(xiàn)某一方發(fā)送了FIN數(shù)據(jù)包結果在路上丟失的的情況?(不會)
- 一個網(wǎng)址輸入到瀏覽器到最后渲染出來的全過程
- 詳細介紹DNS協(xié)議
- C++編譯的幾個步驟(預編譯、編譯、匯編、鏈接)
- 編譯這個步驟中間發(fā)生了什么?
- 介紹一下靜態(tài)鏈接和動態(tài)鏈接
- 你覺得靜態(tài)庫和動態(tài)庫編譯出來哪個大,為什么?(問的不是最終的exe誰大,而是同樣的庫,lib文件和dll文件哪個大,大致猜了一下)
- 編譯器在編譯過程中會對程序做一些怎樣的優(yōu)化?
- 知道SSA(Static Single Assignment)嗎?
- 這個SSA和編譯器的什么優(yōu)化技術有關系
最后半個小時是兩道手撕+兩道看代碼題,兩道手撕分別是:
- 實現(xiàn)一個shared_ptr,要求包含控制塊(用于實現(xiàn)引用計數(shù))、構造、移動構造、復制構造、=復制重載、=移動重載
- 給一個n * n的矩陣,0表示海洋,1表示島嶼,其中上下左右相鄰的1視作是同一個島嶼,求最大的島嶼面積(洪水算法)
兩個看代碼題分別是:
- 問會打印出什么(3321)
class A { public: virtual void F() { std::cout << "1" << '\n'; } void CallF() { F(); } virtual ~A() { std::cout << "1" << '\n'; } }; class B : public A { public: void F() { std::cout << "2" << '\n'; } void CallF() { F(); } ~B() { std::cout << "2" << '\n'; } }; class C : public B { public: void F() { std::cout << "3" << '\n'; } void CallF() { F(); } ~C() { std::cout << "3" << '\n'; } }; int main() { A* p = new C(); p->CallF(); delete p; return 0; }
問是否會存在死鎖的可能性
個人認為不會出現(xiàn)死鎖,就假設這個mutex是可以被復制的(std::mutex是沒有復制構造函數(shù)的所以不能被復制,但我沒用過pthread,所以不太確定),我認為m和mutex本身就不是同一把鎖,希望有大佬來解答。
class Test { pthread_mutex mutex; public: void test() { pthread_mutex m = mutex; m.lock(); // do something m.unlock(); } void test1() { mutex.lock(); // do something mutex.unlock(); } };
純屬為了查漏補缺面的這個崗位,畢竟網(wǎng)上都說客戶端死路一條況且已經(jīng)接了騰訊游戲客戶端的意向,所以面前說實話也沒太復習,有無二面都無所謂。
希望這個帖子能幫面這個崗位的小伙伴一點忙,順便求個小花花啦