大厂C++面试经验
大廠C++面經(jīng)
文章目錄
- 大廠C++面經(jīng)
- 前言
- 一、字節(jié)跳動一面(90min):
- 二、華為一面(60min):
- 三、華為二面(80min):
- 四、上海立芯(120min):
前言
本科雙非,已拿20k的offer,特來分享一波面經(jīng)
一、字節(jié)跳動一面(90min):
1、自我介紹
2、項目介紹:
- 因為我的項目是基于人臉識別的,所以面試官問了具體的人臉?biāo)惴?#xff0c;我大致講了一下算法思路和算法流程
- 有沒有做過并發(fā)測試?(沒。。)
- 項目中遇到哪些問題,如何去解決的?
- 人臉檢測的時間復(fù)雜度是多少?
- 然后面試官和我探討了一下算法優(yōu)化問題,閑聊了不少人臉的東西(面試官知識面是真的碾壓我這個菜雞。。)
- 最后面試官評價說:你這個項目有點意思(有點小開心)
3、八股文:
- 和我說一下進程和線程的區(qū)別吧?
- 你說進程擁有資源,那你能說一下具體有哪些資源嗎?
- 你提到了PCB,那和具體我說一下PCB的內(nèi)部組成和實現(xiàn)吧(懵了一下,硬著頭皮說了個七七八八)
- 你還提了一個進程有多個線程,那問題來了,你有沒有做過多線程并發(fā)?(只知道理論,沒怎么實際操作過)
- 如何去解決多線程安全問題?(回答:用加鎖機制、互斥信號量等)
- 如果用信號量的話,該如何去實現(xiàn)?(回答:PV操作)
- 那PV操作為什么可以實現(xiàn)互斥呢?(回答:因為他們是原子操作)
- 那能具體說一下如何實現(xiàn)原子操作嗎?(然后我就把PV的具體實現(xiàn)代碼說了一下,主要是有個阻塞隊列和喚醒操作)
- 說一下http協(xié)議吧
- http包的構(gòu)成是什么樣子的?
- 你提到的發(fā)送報文和回復(fù)報文的具體有哪些組成或者字段呢?
- 說一下你知道的常見的http的狀態(tài)碼(說了200、301、302、304、404)
4、算法:
給一個m*n的二維整型數(shù)組,各行之間可能有重復(fù)出現(xiàn)的數(shù)字,要求輸出所有在每
一行都出現(xiàn)的數(shù)(可能有多個):
我的想法是先每一行排序,然后用m個指針去找重復(fù)的數(shù)
面試官說思路沒問題,然后讓我手撕代碼,我沒撕出來。。不知道怎么去同時處理m個指針,最后結(jié)束時面試官和我說了一下我才反應(yīng)過來,我太菜了。。
5、反問:
- 我哪里需要提升?(讓我多敲代碼。。我哭了)
- 我的項目講解的怎么樣?(沒什么大毛病)
二、華為一面(60min):
1、自我介紹
2、項目:
- 你在項目中的角色?(負責(zé)人)
- 如何協(xié)調(diào)各個成員的工作分配?
- 項目有沒有遇到什么問題,怎么解決的?
- 我看你做了不少項目,你哪來的項目資源?(我說我大二時開始在老師工作室打工。。)
- 項目并發(fā)量有沒有測過?
3、八股文:
- 說一下你對linux的理解
- 說一下多線程
- 死鎖的原理是怎樣的
- 死鎖的必要條件
- 說一下你了解的數(shù)據(jù)結(jié)構(gòu)
- 常見的排序算法你說一下吧
- 快排什么時候用比較好?(說了一下快排的最好情況和最快情況,說了一下遞歸劃分子問題,然后準(zhǔn)備說一下快排的優(yōu)化問題,被打斷了。。)
4、算法
(算法我真的有點委屈,和我聯(lián)系的hr說最多機考前兩題的難度,問我行不行,我拍著胸脯說沒問題,結(jié)果一面的面試官看了一下我的簡歷,突然來一句:你搞過競賽對吧?那我們來一道難點的吧?。。我瞬間懵逼了。。)
我想了五分鐘,大致說了一下算法思路:先看所有數(shù)加和是否是4的整數(shù)倍,如果不是直接就false,如果是的話,先算出邊長,然后我們就不斷選取當(dāng)前木棍分別嘗試放在四條邊上,用分治的思想,劃分的子問題就是當(dāng)前剩余長度減去當(dāng)前選取的木棍長度,邊界就是當(dāng)木棍只剩下一根且正好能放入時則退出。
面試官說我的算法思路很好,然后又讓我手撕代碼,我又沒撕出來,只能和面試官說我太久沒碰過代碼了,手太生了,最后面試官讓我寫了個偽代碼,然后記錄下來交差了。。
5、反問:
我表現(xiàn)的怎么樣?(整體不錯,就是linux和多線程的東西要去了解一下,代碼的話,能看出來你的底子不錯,手生的話建議去LeetCode刷幾題撿起來。。)
我還有二面嘛?(這個我們得具體評估一下才能決定的)
PS:剛剛收到了二面邀請,后續(xù)面經(jīng)繼續(xù)補充。。
三、華為二面(80min):
1、自我介紹
2、項目:
- 項目介紹
- 人臉?biāo)惴ㄈ绾螌崿F(xiàn)的?(大致說了一下算法的思路和流程)
- 用的什么語言?
3、八股文:
- linux熟悉嗎?說一下
- 多任務(wù)調(diào)度算法說一下
- 堆和棧的區(qū)別
- 你提到棧效率更高點,那為什么棧效率更高的?
- 那如果兩個任務(wù)調(diào)用一同個代碼,它們的任務(wù)棧是什么樣的?
- 匯編學(xué)過么?給一段代碼你知道它內(nèi)存怎么分配的嗎?
- 計算機網(wǎng)絡(luò)了解不?說一下你了解的知識點。(說了rip、ospf、tcp三次握手四次揮手、tcp擁塞控制、滑動窗口機制,還準(zhǔn)備繼續(xù)說來著,然后面試官說夠了夠了。。)
4、算法題:
這題直接秒殺,大整數(shù)加法,注意進位變化就好了(最后一位可能也有進位)
但手撕代碼時頭結(jié)點和邊界內(nèi)存沒處理好,被面試官說了一通。。
大致代碼如下,不保證沒bug哈。。
ListNode* add(ListNode* l1,ListNode* l2) {if(l1==nullptr&&l2)return l2;else if(l2==nullptr&&l1)return l1;else if(l1==nullptr&&l2==nullptr)return nullptr;ListNode* l3=nullptr,*p=l1,*q=l2;ListNode* x=l3;int flag=0;while(p||q){ListNode* node=new ListNode;int t1,t2;if(!p)t1=0;else{t1=p->val;p=p->next;}if(!q)t2=0;else{t2=q->val;q=q->next;}node->val=(t1+t2)%10+flag;flag=(t1+t2)/10;if(!x)l3=node;else x->next=node;x=node;}return l3;}4、反問:
- 我哪里薄弱?(linux和內(nèi)存不太清楚,要多看多學(xué)多練)
四、上海立芯(120min):
(因為是偏算法方向的,兩輪技術(shù)面都是全程手撕算法,無任何前戲和八股文,但題目難度倒不是很難)
1、一道改編的二分查找,給一個數(shù)組,找到給定的元素位置,若該元素不存在則插入到數(shù)組的正確位置。
2、簡單dp,爬樓梯問題,LeetCode上有這題。(寫了遞歸和非遞歸,然后優(yōu)化成了計劃搜索)
3、改編的LCA問題,差點沒寫出來。。
4、手撕冒泡排序算法。
5、合并兩個鏈表。
6、二叉樹非遞歸的中序遍歷。
7、刪除鏈表的重復(fù)節(jié)點,注意有頭結(jié)點,并且頭結(jié)點也有數(shù)據(jù)(這題主要考察有沒有考慮頭結(jié)點以及如何去處理它)
(還有兩題我忘了。。全程手撕,還好基本都寫出來了。后面還問了一下項目,和前面兩個問的差不多,就不多寫了)
總結(jié)
- 上一篇: css3旋转木马轮播图,超酷jQuery
- 下一篇: 宁愿写两遍代码,也不用C++跨iOS、A