秋招運氣比較好,拿到百度、阿里、騰訊、華爲、360、美團、小米的(準)offer,不過都是意向書。。。。非正式。攢波人品,等以後的結果吧。java
本人本科211,碩士末流985。實力很渣,實驗室項目也不行。全靠研二的時候,研三的師兄帶路(他們工做確實找的好),他們分享他們的招聘經驗、學習資料和方法等,還有就是研二的同實驗室的同窗的幫助也相當重要,因此研二這一年時間還算沒有浪費,基本都花在學習、項目。算是給咱們一個很大的指導做用,在這裏真的很感謝他們。node
我我的的簡歷、筆試、面試狀況:(時間順序 7-9月,我全是提早批,除了騰訊、美團)mysql
一、多益網絡(一面) offer (確實出乎意料,有點略水,就一面。。。)react
二、oppo (一面、二面) hr面掛(估計跟着前面的人吼價格 吼高了, 跪了。。因此談薪仍是要慎重)linux
三、阿里巴巴(釘釘團隊) (終面、附加編程面、交叉面、hr面) offer (以前拿到實習offer,人太慫沒去。這裏給後面投阿里的同窗一個建議,必定要投實習,由於阿里秋招很喜歡從實習批的人錄取,走綠色通道)c++
四、百度(企業雲團隊) (一面、二面、三面、性格測試、hr面) offer (這個挺看運氣,面試官人不錯)程序員
五、網易(雲音樂) 筆試掛 (投網易的雲音樂要慎重,頭的人太多,不夠出彩就別去嘗試,浪費機會,我的見解)面試
六、網易互娛 筆試掛 (雖然三道所有AC了,可是估計全AC的也比較多,雙非等限制,後面就沒有面試的邀請了。。)算法
七、奇虎360(安全衛士後臺團隊) (一面、二面、hr面) (面試官人挺好的,我以爲我挺多的都不會,可是還讓我過了。。。可能c++那一塊答得不錯,這個確實看運氣)sql
八、華爲(cloudbu團隊,優招批)(業務面、技術加面、總裁面)(華爲玄學面試,全看運氣)
九、拼多多(基礎平臺,提早批掛) 校招批筆試經過,至今沒面試,算掛了吧
十、小米(java的一個電商後臺,作訂單系統的) (一面、二面)(筆試沒作,仍是發意向了。。小米和頭條差很少,強調手撕代碼,我撕了4道,有道算法不會作的,面試官把算法和數據結構都給我說了,,,還好我寫出來了。。這個面試官真的不錯,我就喜歡這樣的)
十一、頭條(筆試4.3AC) 一面掛 (一輪遊,仍是太菜,手撕了一個比較通常的題,寫了25分鐘,雖然跑過了全部測試用例,面試官仍是把我掛了。。其餘基礎都沒問題,因此。頭條仍是重code。若是想進頭條,刷leetcode、劍指offer吧,這個是面試官給個人惟一的建議)
十二、美團(餐飲鏈 java團隊 一面、二面、三面、hr面,這個是校招批) 口頭offer (一面code差點沒寫出來,估計沒寫出來就涼了。。。運氣。美團主要是看我的思惟、技術等,不限語言,因此是c++的夥伴也能夠考慮美團)
1三、騰訊(sng數據中心團隊 一面、二面、hr面今天走完了 這是校招批) 等結果(hr給我說 每輪評價都很好,應該沒問題) (以前騰訊提早批掛了,算上實習面試,我騰訊的面試記錄都有四、5個了,大部分差評價,因此根據個人狀況,有的小夥伴不用擔憂面試評價的問題,仍是要簡歷要作好)
後面就沒有面其餘公司了。但願我今天的分享能給騰訊攢波人品,我最想進的就是tencent。。。。騰訊情結 -.-現已經在實習了。
下面是我我的的一些建議和麪經吧,分爲幾個板塊:(可能也不適用於一些人,當看着玩吧)
一、書籍推薦 二、學習氛圍 三、簡歷修改 四、面試技巧 五、面經分享
c++ : 《effictive C++》、《SGI STL源碼解析》(侯捷)、《effictive STL》、《深刻探索C++對象模型》、《c++ primer》等
網絡:《計算機網絡》、《圖解tcp/ip》 、《tcp/ip詳解》、《UNIX 網絡編程》(想進騰訊的小夥伴最好看看這個)
做系統:《深刻理解計算機系統》、《***做系統-精髓與設計原理》、《UNIX 高級環境編程》
數據庫:《高性能MySQL》、《Redis實戰》(我沒讀)、《數據庫原理及設計》
數據結構和算法:《劍指offer》、《數據結構及算法實現》(名字我可能記不太清)、leetcode(我就只刷了100道,算是咱們實驗室刷的最少的了)
實戰:《Linux多線程服務器編程-使用muduo C++網絡庫》(陳碩) (這本書強烈推薦,從實戰的角度分析處理問題,咱們實驗室都看了這本書的)
其餘。。。。
主要說說個人狀況吧,導師這邊要作項目,個人項目比較少,因此有更多時間看書,看視頻;其餘同窗有項目,可是他們也抽空閒時間看書,看視頻。基本晚上9點半才從實驗室回寢室吧。這裏仍是強調不要單兵做戰,咱們這屆實驗室的同窗跟上屆師兄同樣,抱的比較緊,有什麼問題能夠互相問,解決的過程當中就能夠相互提升了,每本書和視頻的學習,每一個人的理解程度都不同,理解的角度也不同,咱們通常都會進行交流,使得學到的知識更加全面吧,學習效率也比較高。在招聘這一塊,咱們通常有什麼招聘信息出來了都相互傳播一哈,你們可以第一時間瞭解到招聘信息,筆試面試都有同窗一塊兒去,沒那麼孤單。
我我的的觀點吧,看看就行。我以爲簡歷主要仍是一頁就好,簡單明瞭,最好是第一時間就能讓面試官知道你會什麼。整個頁面乾淨、有條理就行,不用彩色的條紋那些(儘可能別在外觀上浪費太多時間)。除了通常要寫的我的基本信息、榮譽、學歷、項目之外,作技術的同窗,建議就是再弄一個 技術棧的模塊出來,好比c++會哪些、網絡會哪些、數據庫會哪些。這樣簡單明瞭,我騰訊和美團現場面的,我看到的就是面試官其實就是一條一條的對着個人技術棧一個一個問的。此外在字眼的使用上,好好注意把握 「瞭解」、「熟悉」、「精通」,通常建議寫「熟悉」,不太穩的寫「瞭解」,高手都不建議寫精通,一旦有一個不會,面試官的印象大打折扣,以爲不夠謙虛。照片的話可貼可不貼。我就沒貼,主要人太醜。。。很尷尬。
說實話,我我的的技術實力真的很通常,在實驗室我都算排在後面的,實驗室大佬太多,在技術上我就跟着學,偷學一波技能。我以爲個人優點在於面試技巧上,在面試的時候,我以爲要善於引導面試官,俗稱「帶節奏」,其實就是與人相處交流的一些方式方法了。
首先是自我介紹,我以爲自我介紹我的信息不用太詳細,就說個名字 學校 專業 便可。其餘信息面試官也看的到,不必說。若是是計算機專業的 好學校的 建議說出來,突出一下,給面試官一個好印象。 而後下面應該直接簡單明瞭的告訴面試官 我的的技術棧,給面試指方向。否則面試官真的有可能瞎問,問到會的還好,不會的就容易涼涼。在下面能夠說你的項目,大概提一下便可。
技術棧介紹:首先主動引導面試官問那方面的問題,在回答問題的時候,故意帶一點其餘的你會的知識點,可能有的面試官就會心血來潮問你那個引子。好比我給面試官介紹個人項目框架的時候,提到了epoll,他就問我epoll 和select區別、lt et區別,這些都是準備好的,天然你也就會答得出來。這算是套路面試官吧。若是遇到面試官問道的問題不會答,也不要慌,能夠用這樣的語句:「很差意思,這個我沒太瞭解,不過我知道與這個相近的xxx,你看我給你分享這個xxx的我的體會能夠嗎」,有的面試官就會贊成的,這樣不容易題目被帶偏。 還有就是若是就是真的不知道的,就直接說不知道,這個沒什麼的。好比 面試官問我 你數據庫怎麼樣? 我通常都說,不太會。 通常面試官就不會問了。若是你掌握的很差,你說還能夠,那他問你結果都不會,就是一直吃 暴擊傷害。。。面試官印象不好,還不如直接說不會。
項目:主要要分析清楚,條理清晰,面試官並不關心你的項目如何如何渣 如何如何叼,在於的是你對項目的思考和理解吧。
面經分享(內容不全,後面也沒時間寫面經了。格式不太好弄,筆記上copy過來的,將就看吧-。-)
可能也有些有錯的地方。
一、項目部分(彷佛對muduo更感興趣)
介紹了項目功能、架構
muduo有哪些精彩的地方,說一下。 吹了一下異步日誌的雙buf的實現、buf自己的readv 的性能
二、基礎知識
linux IO模型(5種) 記不太清,說了幾種,應該沒說完。(應該是:同步阻塞、同步非阻塞、多路複用、信號驅動、異步IO)應該還要說細節
靜態連接庫和動態連接庫的區別
什麼是線程不安全
c++ 繼承和組合 ,爲什麼優先使用組合(這個我不知道理由)
ps:應該是組合能實現和繼承同樣的功能,可是對於父類對象,在組合中是不會暴露細節的,至關因而黑盒,而繼承是「白盒」。
何時使用鏈表或者隊列?(增長、刪除頻率較高的場景)
c++ const的做用? (變量和函數兩方面 mutable)
百度地圖如何實現實時路況
快排算法 穩定性
函數指針的使用場景、好處。使用於回調函數 虛表指針就是例子
你會用什麼結構來查詢?(hash表、map、 set這些)
tcp udp的區別 使用場景
什麼是緩衝區溢出
三、編程
數組循環右移 將一個長度爲n的數組A的元素循環右移k位
好比 數組 1, 2, 3, 4, 5 循環右移3位以後變成 3, 4, 5, 1, 2
四、其餘
如何看待加班?
你的愛好是什麼?玩什麼遊戲?
你最近在看什麼書?
你還有什麼要問個人嗎?
一、畫出tcp頭部的協議格式。
擴展: udp頭部、ip頭部、http頭部
二、Http的報文頭部
三、數組和指針的區別
數組自己體現出來的就是一個 指針常量的 「特性」,即不能對數組的首地址進行修改,內存上的地址就已是肯定了的。而指針自己是一個變量,他指向了一個地址,這個是能夠變化的,也就說他能夠從新賦值指向新的地址;
當調用sizeof函數時,對於數組,獲得的是數組元素個數*數據類型的大小,而對於指針,獲得的是指針類型的大小,這個取決於機器的位數,好比32位機,對應的指針就是4字節的大小;
指針相比數組更加靈活。
相同之處:好比看成爲形參的時候,定義成 指針仍是數組都是同樣的,由於這個時候傳入的都是數組的首地址,也就是這個數組名,反映出來的就等因而一個指針。
四、參數傳遞的方式
值傳遞、引用傳遞、指針傳
五、c++種struct和class的區別
若是不申明訪問權限,class的默認權限是private,而struct是public
對於繼承,若是也沒有明確是public繼承仍是private繼承或者是protected繼承,class 默認是private的繼承,而struct是public繼承。
從抽象上來講,class更像是對象的實現體,而struct更像是數據結構的實現體。
六、構造函數能不能是虛函數?
不能,由於類對象中佔前4個字節的虛表指針 須要在構造函數完成以後纔會生成,經過 虛表指針才能找到虛函數表,訪問調用對應的虛函數。若是構造函數是虛函數,那麼就只能經過虛表指針才能訪問到,關鍵是此時就須要讓構造函數產生出虛表指針。陷入了先有蛋仍是現有雞的問題
七、析構函數可不能夠是虛函數?
能夠,並且若是說這個類不是final的,也就是說他是某一個類的父類,那麼該類的析構函數必須是虛函數,由於若是不是虛函數,那麼其子類對象的父類組成部分將沒法獲得釋放,形成資源泄露。
八、析構函數可不能夠是純虛函數?
我以爲不建議是,由於咱們知道純虛函數是沒有實現體的,那麼子類對象在析構的時候,父類組成部分就沒辦法釋放,顯然不行。可是對於大部分編譯器來講,能夠將析構函數申明爲純虛函數,而後在類外寫純虛函數的實現體,從語法上不會報錯。
九、舉例一種STL中的容器
答:好比vector(當時答得是這個),vector的的實現其實就是封裝了一個動態數組,裏面有3個內部迭代器,分別是start、finnish、end_of_storage。若是經過push_back或者insert插入元素形成超過容量,此時容量會擴展至2倍,這個過程分爲:從新配置、移動拷貝元素、釋放原空間,這3個大部,支持隨機訪問等
十、舉例STL的一種算法
答:好比find、accumulate、next_permutation、unique、position等等
十一、如何防止c++頭文件被重複引用
答:可使用ifndef或者program once,均可以。可是二者有一些區別。從兼容性上說,ifndfe更好,有些老的編譯器可能不支持program once;此外,對於2個名字不一樣的頭文件,但內容相同,ifndef仍是能夠鑑別出來,防止重複,program once 不行。
十二、內聯函數和宏的區別
答:內聯函數的展開發生在編譯期,而宏是在預處理階段;內聯函數自己是函數,而宏不是;最重要的一點:內聯函數會對參數進行類型檢查,而宏只是簡單的替換,因此內聯函數更加安全,因此每每宏須要對參數加括號,可是也不必定安全, 內聯函數有本身明確的做用域或者訪問權限,好比放在類裏面的private,而宏是沒有的。
1三、linux下經常使用命令
1四、linux下進程管理的相關命令
1五、linux下如何查看內存、磁盤狀況
1六、什麼叫軟鏈接和硬連接,他們的區別是什麼
硬連接是以文件副本引用的形式存在的,他跟源文件擁有同一個inode節點;軟鏈接是以路徑的形式存在的,他的inode節點所對應的數據塊存儲的是源文件的路徑。他們的區別的是:軟鏈接能夠跨文件系統建立,並且能夠對目錄進行建立,硬連接都不行,因此,相對來講,軟鏈接更加靈活,刪除軟鏈接不會產生任何影響,可是若是源文件被刪除了,那麼全部的軟鏈接就失效了,因此很像windows下的快捷方式。
1七、什麼叫相對路徑什麼叫絕對路徑?
答:以/開頭的就是絕對路徑,由於他表明了從根目錄出發的路徑,反之就是相對路徑
1八、進程間通訊的方式?
答:無名管道、有名管道FIFO,消息隊列、共享內存、信號量、socket等,(應該進行簡略闡述
1九、c++下如何調用C的包?
答:extern 「C」,通知編譯器其所包含的代碼用c的方式進行編譯,這樣鏈接的時候不會報錯,不然會找不到函數符號。
20、找出去重後的數字的命令
$ sort test.txt | uniq
2一、socket編程tcp客戶端鏈接過程
創建套接字對象,connect、read/wirte
22\socket編程tcp服務器端鏈接過程
創建套接字對象、bind、listen、 accept、read/wirte
2三、epoll和select的區別?
答:select能支持的文件描述符數是有限的,最大1024個,而且每次調用前都須要將其監聽的讀集、寫集、錯誤集從用戶態向內核態拷貝,返回後又拷貝回去,並且,select返回的時候是將全部的文件描述符返回,也就意味着一旦有個事件觸發,只能經過遍歷的方式才能找到具體是哪個事件,效率比較低、開銷也比較大,可是也有好處,就是他的超時的單位是微秒級別;
epoll能支持的文件描述符數很大,能夠上萬,他的高效由3個部分組成:紅黑樹、雙向鏈表、回調函數,每次將監聽事件拷貝到內核後就存放在紅黑樹種,以EventPoll的結構體存在,若是有相應的事件發生,對應的回調函數就會觸發,進而就會將該事件拷貝至雙向鏈表中返回,並且,epoll每次返回的都是有事件發生的事件,不是全部時間,因此比較高效,總的來講epoll適用於鏈接數較多,活躍數較少的場景、而select適用於鏈接數很少,但大多都活躍的場景。
2四、同一個IP同一個端口能夠同時創建tcp和udp的鏈接嗎
答能夠,同一個端口雖然udp和tcp的端口數字是同樣的,但實質他們是不一樣的端口,因此是沒有影響的,從底層實質分析,對於每個鏈接內核維護了一個五元組,包含了源ip,目的ip、源端口目的端口、以及傳輸協議,在這裏儘管前4項都同樣,可是傳輸協議是不同的,因此內核會認爲是2個不一樣的鏈接,在ip層就會進行開始分流,tcp的走tcp,udp走udp。
2五、mysql的建表、刪除表、更新表、查詢表用什麼命令
答:Create|Drop|Update|Select TABLE [表名]
2六、mysql的索引有哪幾種?
2七、索引的優缺點,索引是否是越多越好?
答:主要就是能夠有效的縮短數據的檢索時間,創建索引的列能夠保證行的惟一性,能夠加快表與表的鏈接;可是建立索引、維護索引須要時間和空間成本,每條索引都要佔據數據庫的存儲空間,此外,每次的增刪改都須要對索引進行動態的維護,也會致使時間變長。
2八、索引的適用場景
2九、索引的原理
答:以空間換時間,創建索引以後,會將索引的KEY值放在一個BTree上,這個方式是一種n分法,btree適合在磁盤上動態查找表,每次以索引進行查找的時候,會根據key值進行搜索,logn級別的。
一、hash表使用開鏈,裏面的鏈表過長說明了什麼?
答:hash函數設計的很差,致使衝突嚴重,進而致使同一個「桶」內的鏈表數目增多。
二、c++不能被繼承的類
能夠將構造函數放入到private裏面,這樣是沒法構造出子類對象的,同時增長一個static的 get instance的函數,來調用構造函數。(可是這樣得不到一個棧上的對象)
讓該類去虛繼承一個模板類,傳人的模板類型就是該類,使得該類成爲模板類的友元,這樣子類在構造時,他直接先構造祖先類的成分,顯然他不是友元,因此失敗。
使用c++11新增的final關鍵字,使得申明的類是一個最終類,沒法被繼承。
三、什麼叫字長?
答:計算機在同一個時間能處理的一組二進制數稱爲計算機的一個字,這組二進制數的位數就是字長,因此如今計算機有16位、32位、64位等。
四、計算機的存儲系統?
答:分爲內存和外存,其中內存有主存、cache、寄存器等,外存分爲磁盤、光盤等
五、static關鍵字的做用,存放位置
答:static關鍵字有隔離隱藏做用,好比多個cpp文件,若是將全局變量聲明爲static,那麼該變量只對該文件可見;變量聲明爲static,可使得這個值的生命期是整個程序結束;此外,c++類中的staitic 申明的變量和函數表示都是屬於類的屬性,而不是對象的成員。未初始化的放在bss段,初始化的放在data段中。
六、堆和棧的區別
從管理方式上:棧是由編譯器自動管理,無需咱們手動控制; 對於堆,開闢和釋放工做由程序員控制,因此有內存泄漏等狀況的發生。
從申請大小上:棧是有高地址向低地址擴展的,是一塊連續的內存區域,因此棧的棧頂地址或者大小 是一開始就分配好的。在使用過程當中,好比遞歸調用層數過多,那麼就有可能形成棧溢出,因此棧能得到的空間比較少; 堆是向高地址擴展的,是鏈表組織的方式,因此有多是不連續的,他的大小隻受限於有效的虛擬內存大小,因此堆能開闢的空間較大。
從碎片問題上:棧是沒有碎片的狀況,由於他有嚴格的出棧入棧,不會存在一個內存塊從棧的中間位置彈出; 堆有碎片的狀況,頻繁的調用new/delete分配釋放內存,必然會形成內存碎片。
從分配方式上:堆都是動態分配的 棧大可能是靜態分配的,也能夠動態分配,能夠由alloc函數分配。
從分配效率上:計算機會在底層對棧提供支持,好比有專門的寄存器分配,用來存放棧的地址,壓棧出棧的指令等; 堆是由c/c++函數庫提供的,機制比較複雜(未了解)
七、struct和class的區別
答:這個在OMG面試中也出現過。
八、malloc和new的區別
答:最大的區別在於malloc只是簡單的分配了內存空間,而new在分配了內存空間以後調用了對象的構造函數。詳細的見:new和malloc的區別,或者delete和free.note
九、引用和指針的區別
答:引用是一個已有對象的別稱,指針是一個地址,從非空性上說,引用不能爲空,指針自己是個值,能夠爲空;在編碼的時候,對引用咱們不須要判斷,可是對於指針,咱們必須對其非空性進行判斷;當指向的對象可能在發生變化的時候,每每使用指針,而引用必定固定的。
十、map的底層實現
答底層是紅黑樹實現的,它是一個比較平衡的搜索二叉樹,內部有序,因此在查找和刪除的時候比較高效,時間複雜度是logn
十一、tcp的三次握手過程和四次揮手過程
答:這個建議將函數調用的狀況添加進去說明。詳細:TCP創建鏈接三次握手和釋放鏈接四次握手.note
十二、c++多態的實現原理
答:c++多態主要是經過虛函數表實現的,c++多態的體現,主要是經過父類指針指向一個子類對象,此時調用的函數就是子類的函數,體現了多態性,由於在調用過程當中,經過錢4個字節的虛表指針找到了虛函數表,此時因爲實際對象是子類對象,那麼其虛函數表是子類的虛函數表,對於同一個虛函數,子類的虛函數將會覆蓋掉父類的虛函數,構建出本身的虛函數表,因此此時經過虛表指針訪問放的虛函數就是子類的虛函數,這就是c++的多態的體現。
1三、c++對象的內存模型
答:在內存中,前4個字節表明了其虛表指針,指向的是子類的虛函數表,接下來存放的是父類的對象的成員,再是子類成員部分。
14c++的內存模型
答:內存分爲5個段,從低地址往高地址,一次是代碼段、數據段、bss段、堆、棧。而後balabala。。。。
1五、滑動窗口的做用
答:主要就是爲了實現流量控制,控制了發送包的速率,每次發送方只能發送滑動窗口內部的數據包,才能保證接收方不會由於發送過快形成流量淹沒,數據包的丟失。他的大小是 擁塞窗口和通告窗口 二者的最小值。
項目
算法
只持續了20分鐘,彷佛面試官很忙。
一、系統調用和庫函數有什麼區別和聯繫
二、epoll和select的區別
三、epoll的高效,有幾種工做模式( LT、ET)
四、TCP 和 UDP的區別
五、TIMEWAIT是什麼,爲何要設置TIMEWAIT狀態
六、TCP的可靠性是如何實現的?(流量控制、擁塞控制、確認序號、校驗???)
暫時記不起來了。
首先介紹項目,我給他介紹了一下這個項目的架構,功能。
一、你以爲這個項目的難點在於哪裏?(懵逼了)
答:難點到不太多,能夠說一下學到了什麼,優化了什麼,好比數據傳輸協議用到了protobuf,更快,更安全、數據量更小。
二、io複用和異步io有什麼區別?
答:IO複用其實一種同步IO,他只是將事件通知統一交給了select或者epoll,因此,對於IO複用,其實Select或者epoll在檢測可用時是阻塞的,裏面的讀寫通常也是阻塞的,而異步IO是不會阻塞的,數據從內核態拷貝到用戶態緩衝區完成後,***做系統會發送信號,通知進程處理,這個過程進程是能夠繼續執行的,這個就是異步io。
三、多進程和多線程有什麼區別?若是給你一個業務場景,你是如何選擇多進程仍是多線程?
答:多線程共享同一個地址空間,帶來的好處就是他們進行通訊比較方便,能夠經過全局變量等,可是也有隱患,須要處理好競爭問題,並且一旦一個線程崩掉了,整個進程就死了,影響其餘進程。多進程相反。。此外,線程的建立開銷更小。多進程的場景舉例:好比你要進行主機遷移,多進程的話,你能夠將某個進程遷移到另外的主機,不受影響,可是多線程無法遷移。
四、講一講c++的虛函數表呢?
答:c++的多態就是經過虛函數表來實現的,該表是在編譯期生成,存放在rodata段,咱們知道一個類的對象的內存結構是前4個字節是其虛表指針,即vptr,指向了其虛表,虛表中裝的就是該類的虛函數。c++多態的體現,每每是經過父類指針,指向子類對象,咱們發現調用的虛函數是子類的虛函數,而不是父類的就是由於此時的對象是子類對象,其虛表是子類的虛表,其中的同名虛函數早在編譯期就已經被覆蓋成子類的虛函數了,因此此時調用的是子類的虛函數,多態就是這麼體現的。
五、構造函數、析構函數的順序,爲何析構函數是反向的?
答:構造:先父類再子類; 析構:先子類再父類。 這是c++的規則。
中間 作了一套筆試題,各類各樣的都有。
編程/算法
一、一個文件無序存放了1w個數字,每行1個。數字範圍1-1w,如今隨機刪除2個數字。請把他們2個找出來。
答:使用hash數組,遍歷文件,每遍歷到一個數字,就以該數字爲下標的數組元素置1,不用加1,由於數字不重複的。最後再遍歷一遍數組,值爲0的元素的下標就是所求數字。
二、如何對你申請的內存進行優化?
答:可使用bitmap,每一bit能夠表明一個數字,這樣能夠壓縮內存。
三、壓縮率是多少?
答:每一個bit一個數字,而以前數組一個元素是int類型的,佔32位,因此壓縮率是32倍。
四、什麼場景用bitmap?
答:我說數據較爲密集,並且你這裏數據是連續不重複,就符合,並且你的數據是有範圍的。
五、若是數據有重複呢?
答:可使用2-bitmap,00表明不出現,01表明出現1次,10表明出現2次,11表示無定義,這樣遍歷一遍就能夠找到是哪幾個數字
他回答:不是,好比數字3,具體有多少出現,這個這須要知道的。 我說:10bit能夠表示的數是1024,而你每一個數字不可能超過1w次。因此要記錄次數的話,就仍是用bitmap可是不是1位,大概1個數用14bit吧,但相比32位一個數要好些。
一、自我介紹
二、介紹usb的項目、功能、架構
三、這個io複用模型跟普通多線程、多進程的區別
答: io複用,多個連接複用一個線程,而普通多線程是一個連接一個線程,因此必然建立線程的數目就多,現成的建立是有開銷的,因此io複用這種開銷小。
四、網絡傳輸的數據協議
主要有3個段,前8bit是數據type,中間是length,最後是具體的data。
五、若是協議是這樣。若是兩個數據包連在一塊兒,怎麼分開?
答:在首部再加幾個bit,做爲隔離位。
六、如何實現你的fd是負載均衡的
答:分類處理
七、多個用戶訪問同一個資源,如何加鎖
答:不太明白他的意思,epoll內部處理事件是同步依次執行的,並且這裏的鎖是線程資源
八、tcp是如何處理粘包?
九、tcp是如何關閉的?就是說4次揮手過程
十、若是tcp關閉的第四個分節沒有被收到,那麼怎麼辦?
十一、tcp的擁塞控制過程
十二、delete和free的區別
1三、STL的出現是爲了什麼
1四、STL的迭代器的類型有哪幾種?
1五、STL hashmap的實現?
1六、線程間同步的手段
1七、進程間通訊的方式
1八、如何使用信號量製做出一個互斥鎖
1九、系統調用的返回有什麼變化?
20、描述一下系統中斷的過程
2一、c++多態是如何實現的?
2二、c++多繼承是如何實現?如何處理同名變量
2三、怎麼實現無鎖做*
2四、你評價一下你本身。
2五、你以爲你同窗朋友如何評價你?
2六、你對哪些技術感興趣?
2七、參加過哪些社團
2八、你怎麼協調與他人的關係的?
2九、你有什麼要問個人嗎?
一、C++多態的實現
二、多重繼承下,多個父類含有同一同名函數,子類對象調用會有問題嗎?
答:首先 AB2個父類中的函數假設就是普通成員函數f(),那麼子類C沒有本身的f函數,其對象c.f()的時候就會報錯,編譯報錯,存在二義性。若是C有本身的f函數,此時不會報錯,調用的是本身c類的f()函數,也就是說此時父類的函數就被隱藏了。若是AB中的f()是虛函數,那麼也不受影響,仍是調c的。若是2個f的參數類型也不同,也會報二義性錯誤。(爲何呢?)
三、static變量
四、tcp三次握手 、2次、4次?
五、tcp可靠性的實現緣由
六、滑動窗口的做用
七、原子*做如何實現(鎖、cas*做)
八、如何實現一個互斥鎖,互斥鎖的實現原理
想不起來了
筆試:
特殊鏈表(每一個節點帶一個隨機指針),對該鏈表進行復制,輸出複製後的新鏈表。(劍指offer原題)
一、socket和epoll的關係區別?(不太懂他意思,反正對epoll的底層進行了闡述)
二、紅黑樹是線程安全的嗎
三、有哪些同步手段
四、用過哪一種鎖(mutex)
五、讀寫鎖瞭解過嗎,本身實現一下,提出思路便可(對讀做進行計數)*
六、計數如何保證線程安全?(cas*做、*做系統底層指令支持)
七、vector的插入pushback的時間複雜度是多少(O(n))
八、若是vectorpushback的時候擴容了,好比pushback n個數,時間複雜度是多少?(我給他闡述了內存拷貝的過程,可是不知道怎麼求,他回答說:實際上是一個等差數列,最後求得仍是O(n))
九、vector底層是幾個指針實現的(3個 start、finish、end_of_storage)
十、vector擴容幾倍 (SGI STL的vector是2倍)
十一、c++多態的實現(run time的多態:指針或者引用 結合 虛函數表實現)
十二、c++11 move語意解釋一下
1三、 move除了用於指針,還能夠用於哪些?好比哪些數據結構 (vector)
1四、拿過哪些offer
想不起來了。。。
一、使用stl如何保證線程安全(除了鎖之外)
二、交給sub 線程的文件描述符如何回收的?
三、tcp粘包
四、linux下查看網絡鏈接
五、linux下查看內存cpu (top)
六、linux下查看內核版本 uname-a
七、linux下查看發行版本 cat /etc/issue
八、IO和reactor模式 (吹的select和epoll)
九、linux下 進程cpu佔用是怎麼計算的(大體是:經過/proc/stat 讀取CPU總的時間,再經過/proc/pid/stat下讀取進程的佔用時間,作除法。(比較粗略的闡述))
十、linux下 tmp目錄裏面的內容會被清除嗎(會,系統會執行tmpwatch腳本,通常傳入參數是時間,好比 tmpwatch 10 /tmp/ 表示的就是會刪除10天內沒有修改、訪問的文件。)
十一、怎麼查動態依賴的庫有哪些?(readelf -a [程序名] |grep library)
一、tcp udp 遊戲
二、容器線程安全
三、hashmap實現
四、新連接 什麼時候註冊寫事件
五、主線程如何將fd交給sub線程?
六、爲何這個回調函數在本函數執行,是線程安全的?
七、rehash
八、多線程,多進程區別
九、切換的性能損耗
十、strncpy