秋招面試經驗總結
2018.7.19
遠算科技
一面:
手撕LRU演算法
二面:
1、快取替換演算法有哪幾種,指標是什麼?
2、FTL層是什麼,作用是什麼,為什麼要這麼做?
3、現在有人說要去掉FTL層,為什麼要去掉,有什麼好處?還有什麼弊端
4、簡單的說下專利的思想
5、什麼是預取,預取的大小如何控制,何時預取,預取的大小?預取操作效能指標是什麼?
6、對於一個順序讀的操作,預取的大小怎麼控制?是否可以建立相應的模型?
7、聽說過檔案預取嗎?
————————————————————————————————————————————
2018.7.20
CVTE筆試
1、struct和union對於記憶體優化的區別
2、任意字串,通過插入,刪除,替換操作,求最小運算元讓兩個字串相等
————————————————————————————————————————————
2018.8.4
順豐一面:
1.函式指標,指標函式的區別
——函式指標是指向函式的指標,用在巨集裡面較多
——指標函式是返回值為指標的函式
——一個是函式,一個是指標
2.vector容器的講解
3.timewait狀態發生在哪些
——發生在主動斷開連線方,可以在服務端也可以在客戶端
4.KVM和docker的區別,在底層系統結構上的區別
——????這個回去得仔細看看,吸取經驗
5.queue和stack的區別和應用場景
——bfs,dfs
2018.8.5
thoughtwork一面
1.迷宮程式設計
2018.8.7
百度一面:
1、專案
2、網路
——tcp三次握手
——三次握手第二次沒有收到回信,然後客戶端又重新發送,這個時候又收到回信了怎麼辦?
——拒絕這一次的報文
——udp頭部是怎麼樣的,udp和ip層不一樣,封裝了哪些
——源埠號,目的埠號,資料長度,資料CRC校驗
3、作業系統
——程序和執行緒的區別
——程序之間的通訊方式
——執行緒之間共享哪些資源
——除了自身的堆疊和暫存器之外的一些資源
空指標NULL,如果對它解引用,核心會發生什麼??會丟擲段錯誤,段錯誤如何丟擲的?
空地址,會去檢視頁表
——
對於每個程序,作業系統養了的頁表的,這就決定了地址的對映方式對於這種情況發生在每次儲存器訪問時,CPU根據頁錶轉換它。如果翻譯成功,則執行相應的讀/寫到物理儲存器位置
有趣的事情時,地址轉換失敗發生。不是所有的地址是有效的,如果有任何記憶體訪問產生的無效地址,處理器引發的頁故障異常的。這將觸發從一個過渡的使用者模式的轉換成的核心模式的(即CPL 0)在核心中的code特定的位置,由中斷描述符表定義的(IDT)。核心重新獲得控制,並且基於從異常和程序的頁表中的資訊,計算出發生了什麼。在這種情況下,認識到,使用者級程序訪問一個無效的記憶體位置,然後將其相應的反應。在Windows中,它會呼叫結構化異常處理允許使用者code來處理異常。在POSIX系統,作業系統將提供一個 SIGSEGV 訊號的過程。
——實際上NULL就是0,代表了數值編號為0的一個記憶體地址,那麼解引用就是0號地址,那不是可以給0號地址寫資料,這就說明NULL是可以作為一個正常的地址來使用的,如此一來就出現了一個漏洞,其實按照理論上講除非你把NULL地址的記憶體的訪問許可權完全封死,要不然這個漏洞就是無法彌補的,只能通過程式設計師自己來負責了。而完全封死NULL又不符合設計規範,使用者空間的程序記憶體是可以被該程序自由訪問的,任何機構都沒有權力封死一塊記憶體的訪問許可權,既然不能封死NULL,那麼按照規則和編譯器的特性核心中的指標在初始化的時候都被初始化成了 NULL,如果後面沒有再被賦予正確的值,那麼它將一直是NULL,如果此時有一個執行緒沒有檢查NULL指標直接呼叫了一個可能是NULL的回撥函式,那麼只要在NULL地址處對映著的程式碼都將被執行,而對映什麼程式碼全部是使用者程序說了算的。
—— NULL指標解引用漏洞 NULL指標解引用是最常見的漏洞之一。指標即包含記憶體中某一變數的地址值,當指標解引用時,即可獲取記憶體地址中存放的變數值。一個靜態未初始化的指標,其內容為 NULL即(0x0).在核心程式碼中NULL值常在變數初始化、設定為預設值或者作為一個錯誤返回值時使用。在系統中,虛擬地址空間分為兩個部分,分別稱為核心空間和使用者程序空間,當核心嘗試解引用一個NULL指標時,若使用者又允許對映NULL地址(如首個頁面包含0地址),則可直接或間接控制核心程式碼路徑。(注:NULL指標引用BUG主要是因程序在執行指標解引用時,沒有檢查其合法性造成的,若待解引用的地址為NULL,則在核心態訪問NULL指標時會引發Oops,此時若黑客在使用者態將NULL地址設定為可執行並注入惡意程式碼,則核心程式碼將會執行NULL地址的惡意指令。
——於是乎在核心空間為了安全起見一般都將函式指標初始化為一個 stub函式,然後在該stub中直接返回一個出錯碼,還有一種初始化方式就是初始化為一個0xc0000000指標,使用者空間是無法訪問核心空間的,因此就不能往這個地址對映任何東西,核心空間和使用者空間完全分治。
現在的核心普遍採用了stub函式的初始化方式
——如果程序取找磁碟上的資料,這個時候會發生什麼??先檢視頁表,再去觸發中斷
——在程式的執行過程中,因某種原因使CPU無法訪問到相應的實體記憶體單元,即無法完成從虛擬地址到實體地址對映時,CPU會產生一次缺頁異常,從而進行相應的缺頁異常處理,如目標頁面不存在(頁表項全 0,即該線性地址與實體地址尚未建立對映或者已經撤銷)或者相應的物理頁面不在記憶體中(如在swap分割槽或磁碟檔案上)等。當CPU捕獲到這個異常的時候就會引發一次缺頁異常中斷,並呼叫do_page_fault()函式來判斷和處理這些異常。當把資料從磁碟讀到記憶體的時候,cpu再去指定的記憶體地址取資料,最後返回給指定的程序。
注意:在查詢頁表的時候,頁表上邏輯地址會有對應的標誌,有些標誌是在記憶體,有些標誌在磁碟,有些0地址標誌為只讀
4、演算法
——ip地址去掉.號之後,然後增加點號,能組成有效ip地址的個數
——這是個有限的次數,最多就是c11 3,就是三個點的放置,實際可以看成一個多叉樹,然後多叉樹形成的時候去判斷剪枝的條件。一個是不能超過255,一個是不能超過三位數。
——從左到右,從上到下有效的陣列怎麼樣搜尋某一個值,複雜度多少
——降低複雜度,可以用二分來完成,複雜度多少
————————————————————————————————————————————
2018.8.8
金山wps一面
1.構造和解構函式的內容考察
class a;
class b:public a
new b物件的時候的構造順序,先構造a在構造b,
a有一個虛擬函式funa,b裡面的funb對a進行修改了。
a* p = new b(); 這個時候呼叫的是b的虛擬函式,因為b的虛擬函式重寫了。
如果 a的建構函式裡面有個虛擬函式,b重寫了這個虛擬函式,
同樣a* p = new b();,這個時候p呼叫的是a的虛擬函式,為什麼,因為先構造的a,這個時候虛擬函式表指標指向的a,並沒有找到b,這個位置需要好好了解!!!!!
a a1 = new b(),這個時候delete a1,析構釋放的是a物件的值,因為指向的b裡面繼承的a
2、全域性變數和靜態全域性變數的區別
靜態全域性變數有疊加的性質,全域性變數沒有
3、sizeof和strlen的區別
char a[10] = {0}
sizeof(a) = 10;
strlen(a) = 4;
4、const和define的區別
5、函式傳引數,一個是普通引數,一個是const的傳引數,兩者的區別是什麼?
6、STL的相關問題
vector和list的區別
hashmap和map的區別
vector和list不斷的pushback哪個耗時
7、演算法:
求樹的深度(depth(root) = max(depth(left),depth(right))+1)
求刪除重複陣列中的數字(陣列對映刪除)
海量資料查詢(點陣圖的位運算)
————————————————————————————————————————————
2018.8.9
百度一面:
演算法:
1、堆排序
2、連續最大子陣列
3、LRU
專案:
分散式儲存框架
分散式儲存的io流的寫入寫出
網路:
三次握手四次揮手
簡單描述下send資料出現的一個完整過程
網路出現擁塞tcp是如何解決的
作業系統
記憶體的分配,連續和非連續
置換演算法
程序在記憶體中的分佈
區域性變數和非區域性變數呼叫記憶體堆疊位置
為什麼資料段要和程式碼段分開,從編譯角度去分析
cpp
繼承類構造和析構的順序
簡單講下cpp裡面的虛擬函式
多型是什麼
演算法:
排序演算法是哪幾類
堆排和快排時間複雜度一樣,兩者有什麼區別
能描述下堆排的過程嗎
————————————————————————————————————————————
百度二面:
分散式場景題:
1、分散式中多副本的寫入,出現異常的情況怎麼解決
異常一:副本機器直接宕掉,心跳機制解決
異常二:副本有較大延遲,怎麼解決,客戶端向每個副本傳送包
異常三:副本直接網路有較大延遲,怎麼解決?客戶端向a b返回,客戶端向b c返回,迴圈測試網路環路是不是正確的
2、分散式中副本寫入有兩種方式,一種是鏈式結構,一種分發的結構,這兩種結構誰好誰壞,吞吐量和延時比較
鏈式結構:吞吐量較大,但是延時較高,吞吐量達是因為可以連續的處理
分發結構:吞吐量小,但是延時較低,因為分發結構是並行結構,所有可以並行處理請求,請求延時小
3、作業系統
——作業系統中鎖有了解嗎,自旋鎖和互斥鎖的區別,分別適用於哪些場景
——自旋鎖:輪詢等待,適用於等待時間較小的場景
——互斥鎖:沒拿到鎖的時候會睡眠,釋放鎖在去喚醒,適用於等待時間較長的場景
4、演算法題:
——0的概率為p,1的概率為1-p,請問怎麼能產生概率為50%的數
——怎麼判斷兩個連結串列是否相交
——給你多個集合,這集合中的數是有序的,但是這個集合數字大小是不確定的,集合是有限的,怎麼判斷多個集合的數字存在或者不存在。
——給你三個佇列,這三個佇列的權重是1,3,5,怎麼樣進行排程,讓佇列的資料按照1/9,3/9,5/9進行
5、分散式檔案系統的場景
——檔案系統中客戶端建立一個目錄,伺服器端收到了,建立的目錄,這個時候返回確認訊號丟失,這個時候客戶端重發了,但是伺服器這個時候發現自己已經建立的目錄,這個時候返回存在的訊號,而客戶端需要的是ok訊號,這種情況怎麼處理
——答:通過建立一個會話,這個會話是當前傳送的唯一性,會話id主要有客戶端傳送的時間,伺服器端的ip地址,和伺服器端的當前程序,伺服器端收到會話的時候,會去檢查是不是當前的會話,是不是第一次建立的時間,判斷是不是建立同一個目錄,如果是這種情況下就直接回復ok,不是這種情況下就回復存在。
6、時間問題
在檔案系統中會有多個時間,如果讓分散式系統的時間相同,同時時間是一個遞增的狀態。
——答:需要去了解下百度的rpc的開源框架
————————————————————————————————————————————
2018.8.11
順豐hr面:
1、簡歷介紹
2、簡歷上每個專案的負責
3、專案帶領的時候,出現了哪些問題
4、出現的問題你是如何協調的
5、對順豐科技的瞭解
6、未來從事的發展方向
7、女朋友
8、獨生子女
9、薪水
10、工作地的旋轉
11、順豐的業務
————————————————————————————————————————————
2018.8.13
遠算三面:
1、專案遇到的難點是什麼
2、pgsql科研專案遇到的難道
3、公司的業務
————————————————————————————————————————————
2018.8.14
遠算四面:
1、對公司的瞭解
2、個人最大的特點
3、公司的介紹
————————————————————————————————————————————
百度二面:
1、專案,資料庫,io延時告警的設定
2、兩個演算法,一個是二叉樹的深度,一個是旋轉陣列的大小
————————————————————————————————————————————
2018.8.15
百度三面:
1、實習經驗
2、專案中遇到的問題
3、團隊合作
4、自己怎麼學習
5、SSD的相關問題
6、有面試過其他公司嗎
7、有面試百度的其他部門嗎
————————————————————————————————————————————
2018.8.17
阿里一面:
1、專案相關經驗
2、cpp中什麼情況下迭代器會失效
3、分散式的一致性是什麼?說一下原理
4、互斥鎖和自旋鎖的區別與聯絡
5、ext4檔案系統相關知識
————————————————————————————————————————————
2018.8.20
遠算hr面:
1、薪資
2、團隊中遇到的困難
3、女朋友
4、為人性格
5、入職時間
6、能不能來實習
————————————————————————————————————————————
2018.8.21
依圖科技一面:
1、專案的基本架構
2、分散式儲存系統的效能評估
3、瞭解kv儲存,舉個例子
4、memecached的基本框架
5、memcached的效能瓶頸,效能瓶頸在網路上,網路的頻寬小於記憶體的頻寬
6、網路瓶頸還是記憶體的瓶頸
7、給你20個OSD,每個上面的HDD,網路頻寬是萬兆網,4KB的隨機IOPS是多少
8、HDD的iops的大小,1.5TB的HDD最多200出頭,一般4KB都是100多左右
9、linux知識,有用過linux裡面一些抓包工具嗎
10、演算法題:給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。
11、智力題:在房裡有三盞燈,房外有三個開關,在房外看不見房內的情況,你只能進門一次,你用什麼方法來區分那個開關控制那一盞燈?
12、專案裡面監控哪些引數,監控的引數用什麼形式展現的?
13、用哪種資料庫存放這一類監控資料,多長時間清理一次?
14、程序執行緒的資源如何監控?
————————————————————————————————————————————
2018.8.21
多益網路一面:
1、實習專案
2、cpp裡面物件的生命週期
——分為堆和棧兩種情況
3、cpp裡面記憶體洩漏如何預防和監測
——vargrid
4、記憶體洩漏監測工具是如何完成的
5、團隊合作上又遇到問題嗎
6、目前有沒有其他的offer
7、基本薪資期望是多少
8、如何看待加班這個問題
9、演算法:由於某種原因一個二叉排序樹的兩個節點的元素被交換,在不改變樹的結構的情況下恢復這棵二叉排序樹
————————————————————————————————————————————
2018.8.21
拼多多一面
1、分散式儲存的專案
2、資料庫快取替換演算法的專案
3、作業系統中程序,執行緒,協程的區別
——執行緒的切換一般收作業系統核心的管理機制進行,而協程則完完全全由使用者來完成。
——協程是一種使用者態的輕量級執行緒,協程的排程完全由使用者控制。協程擁有自己的暫存器上下文和棧。協程排程切換時,將暫存器上下文和棧儲存到其他地方,在切回來的時候,恢復先前儲存的暫存器上下文和棧,直接操作棧則基本沒有核心切換的開銷,可以不加鎖的訪問全域性變數,所以上下文的切換非常快。
——1) 一個執行緒可以多個協程,一個程序也可以單獨擁有多個協程,這樣python中則能使用多核CPU。
2) 執行緒程序都是同步機制,而協程則是非同步
3) 協程能保留上一次呼叫時的狀態,每次過程重入時,就相當於進入上一次呼叫的狀態
4、說一下執行緒切換的過程
5、作業系統中記憶體的分配
6、作業系統中的置換頁
7、網路的滑動視窗
8、tcp中的慢啟動
9、演算法:給你一個數組,有子id和父id,構造一個多叉樹
struct input_node {
int id;
int parent_id;
}
struct tree_node{
int tree_id;
int child_size;
vector<struct tree_node*> children;
}
tree_node* build(vector<input_node> inputs) {
if(inpus.size()<0)
return NULL;
tree_node* rootnode = NULL;
unordered_map<int,struct tree_node*> mpp;
unordered_map<int,int> mp;
for(int i=0;i<inpus.size();i++){
mp[inpus[i].id] = inpus[i].parent_id;
tree_node* node= new tree_node();
node->tree_id= inpus[i].id;
mpp[inpus[i].id] = node;
}
for(int i=0;i<inpus.size();i++){
if(mp.find(inpus[i].parent_id)==mp.end())
{
rootnode = mpp[inpus[i].id];
}
}
for(int i=0;i<inpus.size();i++){
if(inpus[i].id!=rootnode->tree_id)
{
auto i = mpp.find(inpus[i].parent_id);
if(i!=mpp.end()){
(*i)->children.push_back(mpp[inpus[i].id]);
(*i)->child_size++;
}
}
}
return rootnode;
}
————————————————————————————————————————————
2018.8.22
360一面
1、專案
2、資料庫的專案
3、專案中監控模組的監控項
4、遇到的困難,難點
5、網路中的擁塞控制
6、滑動視窗
7、演算法題,有序陣列的去重
——通過前後比較,並維護一個當前不重複的計數即可
8.網路tcpip 流量控制擁塞控制
9.分散式:一致性的協議 pxaos協議,兩段式提交協議
——pxaos協議,paxos就是解決多個節點寫入的問題,即多個節點寫入一個同一個值,且被寫入之後不再更改
——pxaos兩個操作,一個是提議的值,一個是提議的操作
——三個角色,proposer提議的發起者,proposer提出value
——acceptors,提議的接受者,有N個proposer提出的value必須獲得超過半數的acceptors批准後通過
——learner,提議學習者,將通過的value同步給其他的未確定的acceptors
——協議過程,pxaos將發起的提案value給所有的accpetors,超過半數的accpetor獲得批准後,proposer將填下入acceptors,acceptors或得一致性確定的寫入值,且後序不能修改
——準備階段:proposer首先選擇一個提議的編號n,向所有的acceptors進行廣播,acceptors接到廣播之後,如果n比之前acceptors接受到的編號都要大,那麼承諾不會接受比n小的提議,
——接受階段:如果沒有超過半數的proposer接收到響應,那麼轉換為提議失敗
——如果接收到了超過半數的承諾,又分為不同情況
——如果當前所有的acceptors都沒有接收過值,那麼發起自己的value值
——如果當前有部分acceptors接受過值,從所有接收過的值中選取對應提議編號最大的值最為value,但是這個時候proposer不能提議自己的值,智慧信任acceptors接收的值。
——如果acceptors接收到提議之後,如果提議的版本號不等於準備階段的版本號,就不接受請求,重新發起新的pxaos,否則接收持久化寫入
————————————————————————————————————————————
2018.8.23
wps二面
1、c++裡面多型是什麼樣的,哪些函式可以不能設定成為虛擬函式(建構函式,靜態函式)
——(建構函式,靜態函式)
2、靜態函式一般用在哪些場景,靜態函式可以呼叫類的普通函式嗎
——不能,類的普通函式需要物件的this指標來引用,但是靜態函式屬於這個類,不屬於這個物件,是沒有對應的this指標的。
3、虛擬函式可以為建構函式嗎,虛擬函式可以是解構函式嗎
——建構函式不能為虛擬函式,但是解構函式是虛擬函式
4、建構函式裡面呼叫虛擬函式,這個時候會如何執行動態繫結
——建構函式裡面呼叫虛擬函式,則這個函式失去了動態繫結,只能被當前類繫結
——不要在建構函式中呼叫虛擬函式的原因:因為父類物件會在子類之前進行構造,此時子類部分的資料成員還未初始化, 因此呼叫子類的虛擬函式是不安全的,故而C++不會進行動態聯編。
5、解構函式裡面呼叫虛擬函式,這個時候會如何執行動態繫結
——解構函式裡面呼叫虛擬函式,則這個函式失去了動態繫結,只能被當前類繫結
——不要在解構函式中呼叫虛擬函式的原因:解構函式是用來銷燬一個物件的,在銷燬一個物件時,先呼叫子類的解構函式,然後再呼叫基類的解構函式。所以在呼叫基類的解構函式時,派生類物件的資料成員已經“銷燬”,這個時再呼叫子類的虛擬函式已經沒有意義了。
6、靜態函式一般作用是什麼
——提供一個全域性的靜態訪問點
7、演算法題,影象用RGB表示,那麼給定字型顏色,求相差最大的背景顏色,通過求字型顏色和背景顏色相差最大的選定顏色
8、演算法題,多叉樹的遍歷,多叉樹的平均深度,最大深度和最小深度的平均值
9、演算法題,計算機裡面i++,操作變成指令一共有幾條(讀取,加法,寫會)
——一般是有讀,自加,寫回,需要考慮寫回的問題,寫回的時候會發生覆蓋操作。
10、演算法題,初始值為0,兩個執行緒同時執行i++,可能出現的情況,一個執行緒i++ 50次,一個執行緒i++100次,最後可能出現的結果。
——50~150次
————————————————————————————————————————————
2018.8.23
拼多多二面
1、網路攻擊知道哪些
——ARP欺騙、DNS欺騙,DDOS攻擊
2、半連線攻擊瞭解過嗎,有用過對應網路攻擊的工具嗎
——SYN攻擊屬於DOS攻擊的一種,它利用TCP協議缺陷,通過傳送大量的半連線請求,耗費CPU和記憶體資源。
——客戶端在短時間內偽造大量不存在的IP地址,向伺服器不斷地傳送syn包,伺服器回覆確認包,並等待客戶的確認,由於源地址是不存在的,伺服器需要不斷的重發直至超時,這些偽造的SYN包將長時間佔用未連線佇列,正常的SYN請求被丟棄,目標系統執行緩慢,嚴重者引起網路堵塞甚至系統癱瘓。
3、MD5瞭解過嗎,有哪些應用場景
——MD5方法: 一個任意長度的資料,經過MD5計算後就會得到一個長度固定的十六進位制字串
——MD5常常作為檔案的簽名出現,我們在下載檔案的時候,常常會看到檔案頁面上附帶一個副檔名為.MD5的文字或者一行字元,這行字元就是就是把整個檔案當作原資料通過MD5計算後的值,我們下載檔案後,可以用檢查檔案MD5資訊的軟體對下載到的檔案在進行一次計算。兩次結果對比就可以確保下載到檔案的準確性。
——另一種常見用途就是網站敏感資訊加密,比如使用者名稱密碼,支付簽名等等。隨著https技術的普及,現在的網站廣泛採用前臺明文傳輸到後臺,MD5加密(使用偏移量)的方式保護敏感資料保護站點和資料安全。
4、數字簽名裡面會用到md5嗎
——MD5還廣泛用於作業系統的登陸認證上,如Unix、各類BSD系統登入密碼、數字簽名等諸多方。如在UNIX系統中使用者的密碼是以MD5(或其它類似的演算法)經Hash運算後儲存在檔案系統中。當用戶登入的時候,系統把使用者輸入的密碼進行MD5
Hash運算,然後再去和儲存在檔案系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道使用者密碼的明碼的情況下就可以確定使用者登入系統的合法性。這可以避免使用者的密碼被具有系統管理員許可權的使用者知道。
5、瞭解過加密碼,說下常見的對稱加密和非對稱加密
——一個是公鑰,一個是公鑰+私鑰
6、http協議裡面的頭部包含哪些資訊
——Request請求的方法:OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT、PATCH
——Http協議Request請求頭結構:
——Http協議Reponse應答頭結構:
7、有用過ngnix嗎,Nginx裡面欄位怎麼儲存的
8、用過mysql吧,列舉下mysql的儲存引擎
——innodb,MyISAM,前者支援事務,後者不支援事務
9、innodb裡面儲存的欄位是怎麼樣的,用的那樣的資料結構
???
10、redis可以儲存哪些欄位,是用什麼樣的資料結構
——string:可以是字串,整數或者浮點數,對整個字串或者字串中的一部分執行操作,對整個整數或者浮點執行自增(increment)或者自減(decrement)操作。
——string: 一個連結串列,連結串列上的每個節點都包含了一個字串,蟲連結串列的兩端推入或者彈出元素,根據偏移量對連結串列進行修剪(trim),讀取單個或者多個元素,根據值查詢或者移除元素。
列表命令:
①rpush、將給定值推入列表的右端
②lrange、獲取列表在指定範圍上的所有值
③lindex、獲取列表在指定範圍上的單個元素
④lpop、從列表的左端彈出一個值,並返回被彈出的值
——string:包含字串的無序收集器(unordered collection)、並且被包含的每個字串都是獨一無二的。新增,獲取,移除單個元素,檢查一個元素是否存在於集合中,計算交集,並集,差集,從集合裡面隨機獲取元素。
集合命令:
①sadd、將給定元素新增到集合
②smembers、返回集合包含的所有元素
③sismember、檢查指定元素是否存在於集合中
④srem、檢查指定元素是否存在於集合中,那麼移除這個元素
——string:包含鍵值對無序散列表,新增,獲取,移除當鍵值對,獲取所有鍵值對。
雜湊命令:
①hset、在雜湊裡面關聯起指定的鍵值對
②hget、獲取指定雜湊鍵的值
③hgetall、獲取雜湊包含的所有鍵值對
④hdel、如果給定鍵存在於雜湊裡面,那麼移除這個鍵
——string:
字串成員(member)與浮點數分值(score)之間的有序對映,元素的排列順序由分值的大小決定。新增,獲取,刪除單個元素,根據分值範圍(range)或者成員來獲取元素。
有序集合命令:
①zadd、將一個帶有給定分值的成員新增到有序集合裡面
②zrange、根據元素在有序排列中所處的位置,從有序集合裡面獲取多個元素
③zrangebyscore、獲取有序集合在給定分值範圍內的所有元素
④zrem、如果指定成員存在於有序集合中,那麼移除這個成員
11、memcached和redis有哪些區別
12、redis持久化是怎麼做到的
——redis 需要經常將記憶體中的資料同步到磁碟來保證持久化。redis支援兩種持久化方式,一種是 Snapshotting(快照)也是預設方式,另一種是Append-only file(縮寫aof)的方式
——快照是預設的持久化方式。這種方式是就是將記憶體中資料以快照的方式寫入到二進位制檔案中,預設的檔名為dump.rdb。可以通過配置設定自動做快照持久 化的方式。我們可以配置redis在n秒內如果超過m個key被修改就自動做快照,下面是預設的快照儲存配置
——aof 比快照方式有更好的持久化性,是由於在使用aof持久化方式時,redis會將每一個收到的寫命令都通過write函式追加到檔案中(預設是 appendonly.aof)。當redis重啟時會通過重新執行檔案中儲存的寫命令來在記憶體中重建整個資料庫的內容。當然由於os會在核心中快取 write做的修改,所以可能不是立即寫到磁碟上。這樣aof方式的持久化也還是有可能會丟失部分修改。不過我們可以通過配置檔案告訴redis我們想要 通過fsync函式強制os寫入到磁碟的時機。
13、瞭解常見一致性協議嗎
——二段式提交,三段式提交,paxos
14、paxos一般包含哪些元件
——zk
15、zk主要完成哪些功能
——能提供主從協調、伺服器節點控制、統一配置管理、分散式共享鎖、統一名稱服務等功能
16、zk持久化資料,是以什麼樣的資料結構儲存資料的
——樹的資料結構,具體是什麼不清楚
17、瞭解RPC嗎,基本元件是怎麼樣的,哪些功能
——
1.RPC——遠端過程呼叫協議,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通訊程式之間攜帶資訊資料。在OSI網路通訊模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網路分散式多程式在內的應用程式更加容易。
2.RPC採用客戶機/伺服器模式。請求程式就是一個客戶機,而服務提供程式就是一個伺服器。首先,客戶機呼叫程序傳送一個有程序引數的呼叫資訊到服務程序,然後等待應答資訊。在伺服器端,程序保持睡眠狀態直到呼叫資訊的到達為止。當一個呼叫資訊到達,伺服器獲得程序引數,計算結果,傳送答覆資訊,然後等待下一個呼叫資訊,最後,客戶端呼叫程序接收答覆資訊,獲得程序結果,然後呼叫執行繼續進行。
18、一致性雜湊原理講解下
19、為什麼會用一致性雜湊而不用其他的
——因為一致性雜湊能保證資料均衡,同時能夠儘可能較少宕機導致的資料遷移
20、一致性雜湊發生遷移時候,節點瞬間流量壓力變大時如何解決的
——因為引入了虛擬節點,虛擬節點對應的物理機發生了宕機,可以將對應的資料分佈到其他的機器上,而不是單獨的一個機器上來實現瞬間流量壓力大的情況
————————————————————————————————————————————
2018.8.24
Dellemc一面:
1、專案
2、快閃記憶體資料庫快取替換演算法的專案
3、hdd和ssd的區別聯絡
4、常見的kv儲存主要有哪些
——memecached,redis,leveldb,tail, dynamo
5、memcached的簡答介紹
6、memcached和redis的區別與聯絡
——redis支援事務操作,支援資料持久化,支援多副本操作,儲存的資料型別較多,
7、作業系統程序的記憶體空間
8、在shell上執行一個命令是如何載入的
——shell會派生一個新的子程序,通過這個子程序執行的。
9、如果訪問到額外虛擬的記憶體空間是如何訪問的
——資料定義的虛擬地址空間的元素,在程序訪問對應的虛擬邏輯空間地址的時候,這個時候在頁表上沒有找到,這個時候會觸發缺頁中斷,缺頁中斷會去磁碟上找到對應的資料,然後放置到記憶體中,並更新頁表對應的對映。
10、程序的載入過程是怎麼樣的
——當一個程式載入到記憶體時,剛開始只加載0號塊,剩下的塊暫時不會訪問到,不用載入到記憶體,放在虛擬記憶體上就可以。因此上圖記憶體可以同時載入20塊,即20個程式。假如系統有3G的記憶體,第一個程序只佔4k,其他剩餘的3G-4k的記憶體可以載入其他程式。
但是當去記憶體訪問0號塊完畢時,如果要訪問1號塊,但此時1號塊不在記憶體上而在虛擬記憶體上,此時就會發生頁中斷(頁錯誤)。此時CPU無法執行,中斷處理程式會掃描虛擬記憶體,然後找到1號塊所在的虛擬記憶體的空間,將其載入到記憶體,CPU再次掃描,程式正常執行。
使用虛擬記憶體這種管理方式的缺點是浪費時間,中斷處理程式執行時,CPU需要等待,會浪費時間。
11、lls | grep 通過管道連線一共有多少個程序
——lls是一個程序,管道會建立一個子程序用來根lls通訊,最後grep又是單獨的程序完成篩選操作。
12、是不是所有程序都可以用管道來連線(父子關係)
——不能管道是父子程序
13、管道和命令管道有什麼區別
——一個是全雙工,一個半雙工
14、shell終端輸入一行命令,會fork一個子程序嗎
——會
15、cpp裡面STL的一些知識考察
16、說下map和unordermap的不同點
17、unordermap主要有哪些缺點
18、介紹一下智慧指標,
19、智慧共享指標裡面迴圈引用是如何解決的
————————————————————————————————————————————
2018.8.26
網易一面:
1、手撕演算法,單向連結串列的翻轉,遞迴非遞迴,
2、手撕演算法,字串的反轉,hello world變成world hello,原地反轉和非原地反轉
——原地反轉主要是通過字串的交換和切割單詞,單詞的交換
——非原地反轉,主要是通過一個map來實現,索引是單詞切割的序號,值是對應的單詞,通過對索引進行反轉,對映到對應的連結串列上,進行反轉。
3、tcp的三次握手,具體的狀態畫出來,分別處於哪些狀態
——首先需要了解幾個名詞:tcp標誌位,有6種分別為:SYN(synchronous建立聯機) 、ACK(acknowledgement 確認) 、PSH(push傳送) 、FIN(finish結束)、 RST(reset重置) 、URG(urgent緊急);
URG 緊急指標,告訴接收TCP模組緊要指標域指著緊要資料。
ACK 置1時表示確認號(為合法,為0的時候表示資料段不包含確認資訊,確認號被忽略。
PSH 置1時請求的資料段在接收方得到後就可直接送到應用程式,而不必等到緩衝區滿時才傳送。
RST 置1時重建連線。如果接收到RST位時候,通常發生了某些錯誤。
SYN 置1時用來發起一個連線。
FIN 置1時表示發端完成傳送任務。用來釋放連線,表明傳送方已經沒有資料傳送了。
另外還有 Sequence number(順序號碼) 、Acknowledge number(確認號碼)在建立握手過程中傳送的序列號。
首先開始建立連線開始之前,客戶端處於closed狀態,伺服器同樣處於listen狀態,客戶端傳送連線請求,請求內容是傳送連線請求syn,以及當前連線的順序編號seq_number,此時客戶端由closed狀態變成syn_send狀態,
然後伺服器端此時接受到傳送過來的訊號,發現裡面有syn=1,這個時候狀態從listen狀態變成syn_recv狀態,然後返回狀態資訊,包括有syn和ack確認訊號,以及確認順序號碼(這個號碼是傳送確認號+1),同時隨機在產生另外一個順序號(seq_number)。
客戶端這個時候收到服務端的響應ack=1,並且發現ack_number是之前傳送的seq_number+1,這個時候認為是自己上一次傳送連線請求的確認訊號,這個時候從syn_send狀態變成establish狀態,表示連線建立,這個時候返回給服務端確認訊號,其中包含的內容是ack=1,ack_number = seq_number+1。
伺服器端接受到確認訊號,判斷ack_number和ack的狀態,這個時候狀態從syn_recv變成establish狀態
三次握手結束。
——SYN攻擊
在三次握手過程中,伺服器傳送SYN-ACK之後,收到客戶端的ACK之前的TCP連線稱為半連線(half-open connect).此時伺服器處於Syn_RECV狀態.當收到ACK後,伺服器轉入ESTABLISHED狀態.
Syn攻擊就是 攻擊客戶端 在短時間內偽造大量不存在的IP地址,向伺服器不斷地傳送syn包,伺服器回覆確認包,並等待客戶的確認,由於源地址是不存在的,伺服器需要不斷的重發直 至超時,這些偽造的SYN包將長時間佔用未連線佇列,正常的SYN請求被丟棄,目標系統執行緩慢,嚴重者引起網路堵塞甚至系統癱瘓。
Syn攻擊是一個典型的DDOS攻擊。檢測SYN攻擊非常的方便,當你在伺服器上看到大量的半連線狀態時,特別是源IP地址是隨機的,基本上可以斷定這是一次SYN攻擊.在Linux下可以如下命令檢測是否被Syn攻擊:
#netstat -n -p TCP | grep SYN_RECV
一般較新的TCP/IP協議棧都對這一過程進行修正來防範Syn攻擊,修改tcp協議實現。主要方法有SynAttackProtect保護機制、SYN cookies技術、增加最大半連線和縮短超時時間等,但是不能完全防範syn攻擊。
4、tcp的四次揮手,具體的狀態畫出來,分別處理哪些狀態
四次揮手的過程客戶端和伺服器都是從establish狀態轉換到closed狀態。需要說明的是客戶端和服務端都可以主動的傳送關閉請求。這裡也客戶端來說明。
首先說明的,客戶端主動傳送關閉請求,請求訊號包括FIN=1,seq_number = 10000(序列號隨機,只是為了標記當前這個連線動作),傳送關閉請求後,從establish變成fin_wait1狀態
伺服器端接受到關閉請求fin=1,這個時候伺服器首先通知上層應用,客戶端主動進行關閉,此時回覆確認訊號,依然按照之前的,確認訊號包括ack=1,seq_number = 20000,ack_number = 10001,然後服務端從establish變成close_wait狀態,
客戶端收到伺服器的訊號,確認訊號中的ack和ack_number是上次連線的確認訊號,這個時候狀態從fin_wait1變成fin_wait2狀態,
這個時候客戶端已經關閉了傳送埠,但是仍然能夠接受,接受伺服器的資料。
伺服器在close_wait狀態下,等待上層應用傳送關閉訊號,此時伺服器主動向客戶端傳送關閉訊號,訊號組成是fin=1,seq_number = 30000,ack = 20000+1,此時等待客戶端的確認訊號,從close_wait變成last_ack狀態。
客戶端這個時候接受到了確認訊號,同樣確認ack和ack_number是否正確,然後從fin_wait2狀態變成time_wait狀態,time_wait狀態即等待2MSL延時(2倍的網路傳輸延時)即可關閉。然後回覆關閉確認訊號給服務端,確認訊號為ack = 1,ack_number = 30001
伺服器這個時候收到了這個確認訊號,首先確認收到的確定訊號,然後從last_ack狀態變成closed狀態。
客戶端等待2MSL狀態之後,此時沒有收到伺服器的重關閉訊號,這個時候會從timewait狀態變成closed狀態。
5、四次揮手裡面timewait是做什麼用的,為什麼要這麼做
——因為雖然雙方都同意關閉連線了,而且握手的4個報文也都發送完畢,按理可以直接回到CLOSED 狀態(就好比從SYN_SENT 狀態到ESTABLISH 狀態那樣),但是我們必須假想網路是不可靠的,你無法保證你(客戶端)最後傳送的ACK報文一定會被對方收到,就是說對方處於LAST_ACK 狀態下的SOCKET可能會因為超時未收到ACK報文,而重發FIN報文,所以這個TIME_WAIT 狀態的作用就是用來重發可能丟失的ACK報文。
相同的問題還有以下兩個:
1、 為什麼建立連線協議是三次握手,而關閉連線卻是四次握手呢?
這 是因為服務端的LISTEN狀態下的SOCKET當收到SYN報文的建連請求後,它可以把ACK和SYN(ACK起應答作用,而SYN起同步作用)放在一 個報文裡來發送。但關閉連線時,當收到對方的FIN報文通知時,它僅僅表示對方沒有資料傳送給你了;但未必你所有的資料都全部發送給對方了,所以你可以未 必會馬上會關閉SOCKET,也即你可能還需要傳送一些資料給對方之後,再發送FIN報文給對方來表示你同意現在可以關閉連線了,所以它這裡的ACK報文 和FIN報文多數情況下都是分開發送的。
2、關閉TCP連線一定需要4次揮手嗎?
不一定,4次揮手關閉TCP連線是最安全的做法。但在有些時候,我們不喜歡TIME_WAIT 狀態(如當MSL數值設定過大導致伺服器端有太多TIME_WAIT狀態的TCP連線,減少這些條目數可以更快地關閉連線,為新連線釋放更多資源),這時我們可以通過設定SOCKET變數的SO_LINGER標誌來避免SOCKET在close()之後進入TIME_WAIT狀態,這時將通過傳送RST強制終止TCP連線(取代正常的TCP四次握手的終止方式)。但這並不是一個很好的主意,TIME_WAIT 對於我們來說往往是有利的
——這裡就是面試官一直想讓我說的,也就是說TCP關閉連線不一定需要4次揮手,可以通過設定一些引數來避免socket進入到time_wait狀態,那麼沒有進入到time_wait狀態的時候,系統會發送RST的訊號強制中止當前的tcp連線,當然這種也是可以的。
那麼如何設定避免進入time_wait狀態呢?
在建立當前套接字的時候,設定其中的引數SO_LINGER標誌,這樣在對這個套接字進行close的時候,不會產生大量的timewait狀態。
6、listen裡面有哪些引數,分別是什麼作用
——#include<sys/socket.h>
int listen(int sockfd, int backlog)
返回:0──成功, -1──失敗
——
首先要明白三次握手的。當然能點進來的應該都知道什麼是三次握手,這裡就不廢話了。
當有多個客戶端一起請求的時候,服務端不可能來多少就處理多少,這樣如果併發太多,就會因為效能的因素髮生擁塞,然後造成雪崩。所有就搞了一個佇列,先將請求放在佇列裡面,一個個來。socket_listen裡面的第二個引數backlog就是設定這個佇列的長度。如果將佇列長度設定成10,那麼如果有20個請求一起過來,服務端就會先放10個請求進入這個佇列,因為長度只有10。然後其他的就直接拒絕。tcp協議這時候不會發送rst給客戶端,這樣的話客戶端就會重新發送SYN,以便能進入這個佇列。
如果三次握手完成了,就會將完成三次握手的請求取出來,放入另一個佇列中,這樣佇列就空出一個位置,其他重發SYN的請求就可以進入佇列中。
——所有tcp的連線實際是有兩個佇列,一個是未連線佇列,表示當前等待連線的最大深度,還有一個已連線佇列,當每成功完成一次tcp連線,就會把未連線佇列上的一個連線放入到已連線佇列上,對於超過未連線佇列的連線,將直接拒絕連線。
7、tcp傳輸的訊號有哪些
——主要有fin,syn,ack,sys_number,ack_number,fin_number
8、網路通訊的套接字是怎麼樣的
——主要的連線如下:
(1) 建立TCP伺服器的各個系統呼叫
——建立一個TCP伺服器需要涉及到以下的幾個系統呼叫:
——socket():開啟一個套接字
——bind():繫結IP地址和埠號,注意繫結的時候,伺服器一般是要主動繫結IP地址和埠號的,但是客戶端一般是不需要的,因為客戶端傳送連線的時候,核心會自動分配一個埠號給它。
——listen():監聽是否有客戶端請求
——accept():阻塞程序,等待客戶端的接入,接入之後產生收發的另外一個套接字,注意客戶端的地址和埠號是在accept接收到的引數中找到的
——send():有客戶端的接入之後,傳送資料
——receive():有客戶端接入之後,接收資料
——close():關閉套接字
9、分散式一致性協議用過哪些,
——
分散式一致性協議
- 二階段提交協議(2pc)
- 三階段提交協議(3pc)
- paxos
- zab
10、簡單講述一下paxos
——pxaos協議,paxos就是解決多個節點寫入的問題,即多個節點寫入一個同一個值,且被寫入之後不再更改
——pxaos兩個操作,一個是提議的值,一個是提議的操作
——三個角色,proposer提議的發起者,proposer提出value
——acceptors,提議的接受者,有N個proposer提出的value必須獲得超過半數的acceptors批准後通過
——learner,提議學習者,將通過的value同步給其他的未確定的acceptors
——協議過程,pxaos將發起的提案value給所有的accpetors,超過半數的accpetor獲得批准後,proposer將填下入acceptors,acceptors或得一致性確定的寫入值,且後序不能修改
——準備階段:proposer首先選擇一個提議的編號n,向所有的acceptors進行廣播,acceptors接到廣播之後,如果n比之前acceptors接受到的編號都要大,那麼承諾不會接受比n小的提議,
——接受階段:如果沒有超過半數的proposer接收到響應,那麼轉換為提議失敗
——如果接收到了超過半數的承諾,又分為不同情況
——如果當前所有的acceptors都沒有接收過值,那麼發起自己的value值
——如果當前有部分acceptors接受過值,從所有接收過的值中選取對應提議編號最大的值最為value,但是這個時候proposer不能提議自己的值,智慧信任acceptors接收的值。
——如果acceptors接收到提議之後,如果提議的版本號不等於準備階段的版本號,就不接受請求,重新發起新的pxaos,否則接收持久化寫入
11、SSD內部演算法,怎麼保證順序寫變成隨機寫的
——有人疑問,在SSD內部會把隨機的資料改寫順序的資料,這樣的說法正確嗎?
——不正確,如果是全新的資料,那麼在SSD上可以按照隨機的請求順序寫入,當然也是不對的,因為SSD內部存在有多通道,資料寫入要考慮到損耗均衡的問題
12、講解一下互斥鎖和自旋鎖
——互斥鎖沒獲得鎖會掛起,自旋鎖則是原地輪詢
13、作業系統裡面原子操作是什麼樣的,需要硬體支援嗎
——原子操作指的是不可再分的指令操作,即在執行原子操作時不可能被打斷,要麼原子操作沒有執行,要麼已經執行完畢。
——原子操作的實現必須需要硬體的支援,作業系統僅僅是在硬體指令的基礎之上進行一次封裝。對於沒有實現原子操作的硬體,則需要作業系統從軟體演算法層面進行支援。
————————————————————————————————————————————
網易二面:
1、linux c++中記憶體是怎麼檢測的
——現在一般使用的工具是valgrind
2、用過記憶體檢測工具valgrind這個工具嗎
——
是不是說沒有一種記憶體檢查工具能夠在Linux使用呢,也不是,像開源的valgrind工具還是相當不錯的
Memcheck。這是valgrind應用最廣泛的工具,一個重量級的記憶體檢查器,能夠發現開發中絕大多數記憶體錯誤使用情況,比如:使用未初始化的記憶體,使用已經釋放了的記憶體,記憶體訪問越界等。這也是本文將重點介紹的部分。
Callgrind。它主要用來檢查程式中函式呼叫過程中出現的問題。
Cachegrind。它主要用來檢查程式中快取使用出現的問題。
Helgrind。它主要用來檢查多執行緒程式中出現的競爭問題。
Massif。它主要用來檢查程式中堆疊使用中出現的問題。
Extension。可以利用core提供的功能,自己編寫特定的記憶體除錯工具
Memcheck
最常用的工具,用來檢測程式中出現的記憶體問題,所有對記憶體的讀寫都會被檢測到,一切對malloc()/free()/new/delete的呼叫都會被捕獲。所以,Memcheck 工具主要檢查下面的程式錯誤
內容 | 描述 |
---|---|
使用未初始化的記憶體 | Use of uninitialised memory |
使用已經釋放了的記憶體 | Reading/writing memory after it has been free’d |
使用超過 malloc分配的記憶體空間 | Reading/writing off the end of malloc’d blocks |
對堆疊的非法訪問 | Reading/writing inappropriate areas on the stack |
申請的空間是否有釋放 | Memory leaks – where pointers to malloc’d blocks are lost forever |
malloc/free/new/delete申請和釋放記憶體的匹配 | Mismatched use of malloc/new/new [] vs free/delete/delete [] |
src和dst的重疊 | Overlapping src and dst pointers in memcpy() and related functions |
3、瞭解作業系統的常見io棧嗎
相關推薦
秋招面試經驗總結
2018.7.19 遠算科技 一面: 手撕LRU演算法 二面: 1、快取替換演算法有哪幾種,指標是什麼? 2、FTL層是什麼,作用是什麼,為什麼要這麼做? 3、現在有人說要去掉FTL層,為什麼要去掉,有什麼好處?還有什麼弊端 4、簡單的說下專利的思想 5、什麼是預取,預取
2018微軟秋招面試經驗(軟體工程師崗位)
秋招去了微軟面試,拿到了offer。經驗分享給大家,希望有幫助。 先說我自身的情況。國內不知名雙非院校本科,計算機專業。參加過ACM,最高China-Final金獎;參加過數學建模,最高國一;做過一年深度學習科研;做過大半年遊戲開發;在騰訊實習四個月,做遊戲客戶端開發。 投
秋招面試經驗(百度+華為+京東+美圖+51+頭條+招銀科技+美團+騰訊+阿里+網易面試經驗)&部分建議 (研發崗:java研發,大資料研發,研發,雲端計算研發)
18年9月底結束秋招, 本來說是要寫秋招經驗的。 結果被我拖到了現在, 今天是我在某BAT之一實習的倒數第二天,馬上就要回去做畢設了,正在總結,正好得空。 本人某工科985碩,8月底參加秋招,9月底結束秋招, 之所以那麼遲秋招只是因為當時在旅
秋招面試經驗分享-阿里,cvte,迅雷,網龍,美團,已拿Offer
什麼是秋招 針對秋招一般是在9-10月份,到11月份後還在招聘的公司就很少了,在7-8月份一般都會有秋招內推。 關於秋招內推可以找自己認識的學長學姐或論壇上的某公司的職員進行內推,這個其實牛客網上在7-8月份會有很多的內推。 關於正式秋招主要在9-10月份
2018年春招實習面試經驗總結
傳統 簡單 經歷 ron 一段時間 改進 咨詢 pass 做人 原文 一、前言 最近一直在參加各種面試,感覺自己面試表現很弱雞,雖然已經有了點offer,但跟那些offer收割機比起來,差得太遠。本篇文章記錄了自己在面試過程中被問到的各種問題以及一些經驗之談。對於後續碰到的
非985/211面試大廠校招經歷經驗總結(安全工程師/滲透工程師)
以下是我認識的一個剛畢業小朋友的面試經歷,面試的崗位是“安全工程師”。首先我要誇誇他!並非985,211的他,因為個人經歷和對安全行業的與熱愛,受到了阿里雲師傅的青睞,得到了實習的機會,今年畢業就能順利進大廠了!鼓掌୧(๑•̀◡•́๑)૭“ 崇拜他,才不是因為他本人長得高大帥氣”
2018年秋招面試常見資料庫知識總結
MYAQL: 事務:事務是併發控制的基本單元,事務是一個操作序列,要麼都執行,要麼都不執行, 他是一個不可分割的工作單位,事務是維護資料庫一致性的單位。 四個ACID基本性質: 1.原子性:要麼都執行,要麼都不執行。 2.一致性:合法的資料才可以被寫入。 3.
2018年秋招面試常見Linux運維知識點總結
Linux中常見命令: ping命令:可測試網路是否通暢。ping命令使用的是網路層的ICMP協議,但從命令本身來看是屬於第七層應用層。 traceroute:電腦網路工具,可顯示資料包在IP網路經過的路由器的IP地址。 iostat命令可以檢視磁碟IO狀態。
2018年秋招面試常見python和資料結構知識點總結
python中的深拷貝和淺拷貝的定義: 在python中物件的賦值就是物件的引用,當建立一個物件把他賦值給另一個變數時,Python只是拷貝了物件的引用而已。 淺拷貝:拷貝了最外圍物件本身,內部的元素只是拷貝了一個引用而已,也就是隻複製物件,物件的引用不復制。
2019校招提前批面試經驗總結
個人面試經驗總結 針對找開發工作的經驗貼 1、自我介紹 面試開始,是自我介紹部分,所以要提前準備好相關崗位的自我介紹,將自己的亮點,能勝任此崗位的優點介紹出來,臺上一分鐘,臺下十年功。提前準備 2、專案介紹 後續問題一般由專案引出,所以將
去BAT,你應該要看一看的面試經驗總結
沖突 編譯器 地方 源碼 也會 ive l數據庫 udp 做的 我去年12月份從上一家公司離職,一直到今年3月份,基本上都在面試中度過來的。 先交代下背景:坐標上海,做技術開發,我本人面試的職位是linux服務器開發,最傾向的職位是服務器開發主程或技術經理。我本人也是上幾家
虎牙直播面試經驗總結
現在 哪些 簽字筆 小時 黑白 電話 發的 思考 經驗 1、虎牙直播黑盒測試面試經驗總結 (1)首先,自己打印簡歷,最好是彩色版的(簽到交簡歷時,有人是黑白色簡歷打眼一看很不舒服,尤其是有證件照的,黑白?呵呵,我們好像不缺這一塊錢吧),郵件上寫自帶簡歷和黑色簽字筆(意識大意
BAT求職專題大總結:BAT技術面試範圍+現場面試題目+面試經驗總結
金九銀十,希望這份分享能對你的BAT求職之路有所幫助。 01 — BAT技術面試範圍 演算法 java基礎 java高階 框架 多執行緒 網路 資料庫 架構 02 — BAT技術面試題目 java基礎很重要,特別是集合類:List、
華為2018校園優招面試經驗
時間:20170825 地點:大鐘寺京儀大酒店 早上10:30的批次,簽到後11點開始一面。 面試官讓我自我介紹之後,看著我的簡歷問我最有成就感的專案是什麼。我選擇了自己的碩士畢設專案一個移動端商城專案來介紹,可是我犯了一個嚴重的錯誤,雖然我之前有隊華為做過調研,而且結合實習最後簽約
秋招的小小總結
快要國慶了,秋天又要結束了呢。 渣碩一枚,出去面試才發現自己有多渣。。 總結一下面試中遇到的一些問題,希望自己有所成長。 1.華為 綜合面: a.做專案過程中遇到問題是怎麼解決的?舉一個具體的例子。 &nb
2019秋招知識盲點總結
開始 儘管秋招還沒有拿到offer(好難過),但是一些知識點還是要總結的,既然自己選了這條路,那就一定要堅定不移的走下去...... 注意 new 運算子的優先順序 function Foo() { return this; } Foo.getName =
2018秋招之路總結-java後臺開發
這篇文章我將大體分為兩個部分,第一部分為秋招心得感想之類的。第二部分為我總結的乾貨。 我是一個普通一本計算機專業的一名大四學生,在大一大二時不清楚自己的方向,只是保證自己學校的科目不掛科,但是也沒有學的很深,就這樣一直到了大三下半年時的3、4月份。找
去京東面試經驗總結
前情提要 其實收到jd的面試邀請的時候,我真心有點小激動。因為在地理位置上,jd應該是最合適我也是最想去的。但是我在看到方向的時候其實心裡有很多的問題,也做好了被拒的準備。(方向是安全方向) 在底層方向上我對於JVM原理解析+分散式架構+微服務架構+多執行緒併發原理或者Spring原始碼其實我是沒有那
我的java面試經驗總結
&nb
2018秋招面試問題(二、C++基礎問題)
目錄 智慧指標 c語言的程式碼段、資料段、bss段 編譯器在編譯程式的時候,將程式中的所有的元素分成了一些組成部分,各部分構成一個段,所以說段是可執行程式的組成部分。 程式碼段:程式碼段就是程式的可執行部分,