C++面試題目及面試經驗
秋招歷程
-
終於,在跑了這麼多場宣講會之後,總算拿到了一個心儀的offer,故此寫一篇經驗分享,紀念一下秋招歷程:
-
lz 方向是C++開發,雙非本科生,靠著隊友,水了一個CCPC的銅,省賽什麼的就不說了,到手的offer五六個的樣子,但是都不是些什麼大公司,福利待遇也一般,前期也是各種被大公司打擊,面試體驗賊差,不是說面試官不好,是面試所遇到的問題,真的是感覺大學白讀了,不過好在,慢慢積累下來的經驗,讓自己在後面的筆面試中少走了一些彎路。
-
廢話說了那麼多,現在呈上乾貨,題目太多有些問題我就沒有寫答案了,網上一般都能搜到,技術大佬請忽視:
C++ 基礎篇:
- 宣告與定義的區別。
- extern 和 static 的區別,什麼情況用前者什麼情況用後者
- x=x+1,x+=1,x++哪個效率高
- const 和#define 的優缺點
- strcpy和memcpy的區別,現場要求手撕程式碼
- new 和malloc 的區別
- C++的記憶體分配
- 建構函式和解構函式可不可以為虛擬函式,為什麼?
- 如何限制一個類物件只能在堆(棧)上分配空間
- strcpy 有什麼危險?
- 拷貝建構函式如果用值傳遞會有什麼影響?
- DLLHELL 聽說過嗎?(lz 還沒去補)
- 夥伴記憶體管理?(一臉懵逼)
- struct的位元組對齊
- 智慧指標,共享指標(短板。。。)
- 繼承和多型區別與聯絡?(0.0 剛剛想到的)
- strcpy為什麼需要返回值char *?
- struct 和 class 區別
資料結構與演算法篇:
- stl 相關容器,底層用什麼實現的?
- map 和 vector 的迭代器有什麼區別?(不懂。。)
- 1億個數取前k大的數。
- 堆排序,快速排序的原理與時間複雜度
- 一次可以跳一個或者兩個樓梯,跳到第n 層的走法有多少種?
- 一次可以跳任意個樓梯,跳到第n 層的走法有多少種?
- 八皇后問題
- A*演算法
- 影象畫素#RGBV 如何取到固定位的值
- 棧和佇列
- 平衡樹,紅黑樹,B樹,B+樹
- 兩個非降序的有序陣列,找出他們相同的元素
計網與作業系統篇 :
- TCP 三次握手與四次揮手,各狀態解釋,time_wait原因
- OSI七層模型以及各層的協議
- IP地址的正則表示式
- 擁塞控制的方法
- 程序間的通訊方式
- 如何實現虛擬地址到實體地址的轉換
- TCP 與UDP 的區別
- 程序與執行緒的區別,多程序與多執行緒的區別
- epoll poll select 的區別
- recv 的錯誤處理
- linux 的基本指令
遊戲技術篇:
- cocos 2d (lz沒玩過遊戲引擎)
- unity 3d (同上)
- Lua 與C++ 的互動原理
邏輯思維篇:
1.老鼠喝藥的問題:
-
就是告訴你,有n瓶藥,裡面有一瓶是毒藥,老鼠喝了就會死,讓你用最少的老鼠測出來,到底哪一瓶是毒藥。
-
答:利用二進位制的思想,將所有的藥水按照1-n的編號,對應的老鼠喝下二進位制上對應位為1 的藥水,觀察老鼠死的狀態,得到答案,比如說 3瓶藥水,1號藥水 01 2號藥水 10 三號藥水 11,那麼最少需要2^2=4>3 ,兩隻老鼠就可以了,一號老鼠喝下2和3 號藥水,二號老鼠喝下 1 和 3 號藥水,要是一號老鼠掛掉了,二號老鼠沒掛,證明毒藥水是 10=2 號藥水,以此類推。
2.100大小的陣列放了1-99 100個數,只有一個數重複了,找出重複的那個數。
- 答:解法很簡單,把這100個數加起來,然後逐一剪掉1-99 剩下的那個數就是重複的數。
3.單向連結串列如何判斷是否成環?
- 答:兩個指標p1,p2 , 其中p1 每次指向下一個節點,p2每次指向下兩個節點(p2=p2->next->next),這樣若連結串列有環,那麼p1p2必定在某一點指向同一個節點。
3.1 擴充套件:並指出成環的點在哪裡?
- 答:這個lz 也是在網上看了人家的部落格才知道的,當p1p2 指向同一個節點的時候,讓p1 指向第一個節點,p2 不動,然後讓兩個節點以同樣的速度指向下一個節點,最後p1p2相遇的地方就是成環的點。
3.2 再擴充套件: 這個連結串列的長度是多少?
- 答:上一個問題我們自然可以得到起點到成環點的距離,那麼再回到第一個問題的情況,p1p2相遇了,那麼再讓他們繼續走下去,再次相遇所經過的運算元就是這個環的長度了,這兩者相加就得到了整個連結串列的長度。
4.單向連結串列怎麼取到倒數第k個元素?
- 答:設定兩個指標p1p2,讓p2 先走k步,然後再讓p1p2同時走,最後若p2 指向的節點的下一個節點是NULL ,那麼輸出p1即可。(畫個圖就明白了)
5.怎麼判斷兩個連結串列是否有交點?
- 答:假設一個連結串列長為n,另一個連結串列長為m,讓長的連結串列的指標先走|n-m|個長度,再讓兩個連結串列的指標一起走,最後兩個指標相遇的地方就是交點了(畫圖!畫圖!)
面試經驗:
-
LZ 本人比較外向,所以一般還是能跟面試官對上話的,但是對話的前提就是技術要達標,一旦面試官問到你不會的題目了,就有點尬聊了,儘量往自己熟悉的方向走,不會的就說不會,或者引導到自己會的方向上去。
-
還有一點。。。。hr 面還是會刷人的,所以記住一點,沒有收到電話offer或者郵件offer 前,一切都是假的,樂極生悲!技術宅們也要多開口,冷場的時候適當的說點話,個人感覺,如果面試過程中經常性的冷場就有點涼了。。。。所以,儘量和麵試官對上話,但是不要不懂裝懂,畢竟面試官也知道你才是個畢業生,很多東西不知道是肯定的,主要是看你的個人基本能力。
-
最後,不管結果是什麼,如果公司給你任何回覆,你都還是要禮貌的回覆一下過去。。LZ 收到好多拒信,都一一回復了。。有些公司可能拒信都給你發幾份。
-
自信!自信!自信! 不管咋樣,想去的公司就投,不要擔心這擔心那的,投了才有機會,不然連個筆面試機會都沒有,面試筆試過程中遇到的題,儘量記下來,但是千萬別作弊!,筆試不允許截圖就別截圖,筆試完就自己回想,沒做出來的題上網搜一下題解,問大佬,後續可能還會問到的,所以就算你作弊沒被抓,面試問到的時候打不出來,基本就是黑名單了,面試的時候也是,面試完立馬把面試遇到的題目記下來,回去補,一面的題目,可能二面還會問。
-
面試的時候多笑笑