在今年春招這麼嚴峻的情況下,我的一個朋友居然免筆試直接進入位元組面試環節,收到面試邀請的當晚,他興奮了一晚上沒睡着!
前言
巴拉巴拉一大堆有的沒的,說說自己在學校寫了啥代碼、獲得了啥獎、有沒有得過獎學金之類的,
可能是我沒有項目、比賽的獎項也不是ACM那種含金量高的,是以面試官就沒有問我關于履歷的
内容,就直接開始問我問題了。
當時腦抽,隻記起來extern C,還是第一個問題,面試官就一臉茫然。
1.全局變量
全局變量在外部使用聲明時,extern關鍵詞是必須的,如果變量無extern修飾且沒有顯式的初始化,同樣成為變量的定義,是以此時必須加extern,而編譯器在此标記存儲空間在執行時加載如記憶體并初始化為0。
2.extern “C”
extern “C” 既可以修飾一句 C++ 代碼,也可以修飾一段 C++ 代碼,它的功能是讓編譯器以處理 C 語言代碼的方式來處理修飾的 C++ 代碼。
3.static關鍵字的作用
面試的時候隻講了個大概,很多細節當時腦袋瓜子嗡嗡的沒說出來。
static修飾不同對象時的作用:
局部變量:
局部變量就是在函數内定義的變量,普通的局部變量,生存周期是随着函數的結束而結束,每次函數重新執行,局部變量都是新的值,不會保留上次的值。當用static修飾後,局部變量的生存周期就是當程式結束才會結束。再次調用函數時,用static修飾的變量會保留上一次的值。
應用:在函數内,我們想保留某些變量上一次的值,就可以用static去修飾該變量。比如:想統計該函數被執行的次數時,就可以定義被static修飾的int型變量,每執行一次該變量就++。
總結:用static修飾的局部變量,改變了生存周期,但是沒有改變其作用域。改變其生存周期的原因是被static修飾的局部變量被存放在.bss段或者.data段,而普通的局部變量是存放在棧上的。
全局變量:
全局變量用static修飾改變了作用域,沒有改變生存周期。普通的全局變量是可以被其他的.c檔案引用的,一旦被static修飾,就隻能被定義該全局變量的.c檔案引用,使得該全局變量的作用範圍減小。
作用:當一個全局變量不想被其他.c檔案引用時,可以用static修飾,這樣其他的檔案就不能通過extern的方式去通路,這樣主要是為了資料安全。
總結:改變其作用域,沒有改變生存周期。
函數:
函數用static修飾,改變了作用域。普通的函數是可以通過頭檔案聲名的方式被其他檔案調用,被static修飾後就隻能在本檔案裡被調用,這樣是為了資料的安全。
作用:有些函數并不想對外提供,隻需要在本檔案裡調用,這時候就可以用static去修飾。
總結:改變了作用域,沒有改變其生存周期。
他居然沒問智能指針、右值引用、對象
繼承
講了一下繼承的public、proteed、private、多繼承、菱形繼承
虛函數
從虛函數扯到了多态的定義,再到多态的動靜态,再到虛表。
七層模型與五層模型
直接口述了一下七層模型的内容,最頂上的一層的名字一時沒想起來。
tcp與udp
其實他問的是tcp/ip協定是什麼,然後恰好我中午看了tcp和udp的差別,我就和面試管說我知道這個,然後他就讓我答了一下好,還是說了4到5點内容的。
TCP與UDP基本差別:
1.基于連接配接與無連接配接
2.TCP要求系統資源較多,UDP較少;
3.UDP程式結構較簡單
4.流模式(TCP)與資料報模式(UDP);
5.TCP保證資料正确性,UDP可能丢包
6.TCP保證資料順序,UDP不保證
具體程式設計時的差別:
1.socket()的參數不同
2.UDP Server不需要調用listen和accept
3.UDP收發資料用sendto/recvfrom函數
4.TCP:位址資訊在connect/accept時确定
5.UDP:在sendto/recvfrom函數中每次均需指定位址資訊
6.UDP:shutdown函數無效
基于上述不同,UDP和TCP程式設計步驟也有些不同
TCP和UDP是OSI模型中的運輸層中的協定。TCP提供可靠的通信傳輸,而UDP則常被用于讓廣播和細節控制交給應用的通信傳輸。
添加圖檔注釋,不超過 140 字(可選)
程序
講了一下程序和程式的差別,PCB,程序的排程算法的名字,上下文切換。
程序間通信
隻講了匿名管道相關,然後列舉了其他通信的名字如消息隊列。
常見測試方法
經典黑盒白盒、單元、內建、系統
黑盒測試與白盒測試
說了一下兩者的定義
添加圖檔注釋,不超過 140 字(可選)
有兩個沒有刻度的杯子,一個水龍頭,一個5L,一個6L,問怎麼得到3L
很久之前看過,但忘了,好歹面試時想出來了。
我是這麼說的:
先給5L的杯子裝滿,然後倒入6L,兩個杯子同時放水,這樣5L裡就有1L,再把6L倒空,在同時放水,6L就有4L,
再把5倒空,同時放水,5L裡就有2L,再把6L倒空,同時放水,這樣當5L滿時,6L裡就恰好3L。
我以為我答的很不錯,面試官來了句隻有一個水龍頭,你再好好想想。
然後我腦子又抽了,說把5L杯子放到6L裡,當6L滿把5L拿出來,重複三次,一聽完,面試官就笑了,委婉的說了一下(真實意思:你腦洞真夠大的)。
面試結束我才反應過來,什麼同時放水,改一下放水順序不就OK了嗎,整個面試,我最大的遺憾!!!
劍指 Offer II 119. 最長連續序列
當時的思路是直接sort()然後周遊記錄len然後更新max,就直接寫了,畢竟之前沒做過
面試官:目前算法的時間複雜度是多少呢
我:忽略排序的話是O(N),
面試官:那到底是多少
我:O(N*LOG N)+ O(N),然後取最大
面試官:有沒有O(N)的算法呢?
想了一下沒出來
面試官:優化時間複雜度的方法有哪些
我:減少循環次數和層數
面試官:其實還有空間換時間
我:對對對。
面試官:你在想一想
其實我想到了哈希,去找-1的和+1的
他又問:什麼可以減少比較次數
我直接蒙了。
最後哈希沒搞出來,面試就結束了
這次面試簡直就像天上掉餡餅一般,雖然我可能并沒有把握住
這次面試可以說是我的第一次正式面試,面了一小時十五分鐘,就當漲經驗了。
是以說,鐵子們,履歷一定要海投,萬一餡餅真砸到你身上呢!!!
劍指offer一定要全部過一遍,最好每一題都知道最優解!!!
多看面經總是有好處的!!!
經過這次面試,我發現得自己把知識點串起來講一遍,不然面試時腦瓜子嗡嗡的!!!
面試時可以适當的引導面試官,讓他問你你想讓他問的,親測,真的好用!!!
但願能過(滿懷希望,雖然不大),過了我能開心的睡不着的!