面經原文和解答
40min
自己介紹
作業系統
1.程序和線程的概念?
程序是指一次程式運作的過程,線程是程序中執行運算的最小的機關,是程序中的一個實體。
程序是cpu資源配置設定的最小機關,線程是cpu排程執行的最小機關,一個程序至少包含一個線程,程序與程序互相隔離互不影響,同一個程序内的線程共享程序資源,一個線程崩潰可能導緻程序崩潰,但程序崩潰不會導緻其他正在運作的程序崩潰
2.為什麼程序上下文切換慢?
程序切換分為切換頁目錄以使用新的位址空間,切換核心棧和硬體上下文。線程上下文切換不需要切換虛拟記憶體空間,是以相對切換較快;
3.什麼時候用多線程
多線程的使用主要是用來處理程式“在一部分上會阻塞”,“在另一部分上需要持續運作”的場合。多線程提高效率主要原因是多CPU和IO等待,多個CPU使得可以同時執行多個任務,每個線程相當于一個任務;
4.如果多個線程同時修改一個變量怎麼辦?
可通過加鎖的方式,保證變量修改符合預期。
5.你了解哪些鎖?
公平和非公平鎖,可重入鎖,自旋鎖,獨占鎖(寫鎖),共享鎖(讀鎖)
6.如何實作一個讀寫鎖?
java-讀寫鎖的實作原理計網
1.syn的含義
同步序列編号
2.為什麼要随機産生seq
出于網絡安全的因素着想,防止僞造序列号進行攻擊
3.SYN泛洪攻擊
SYN泛洪攻擊4.http傳輸過程
1.建立TCP連接配接
2.Web浏覽器向Web伺服器發送請求指令
3.Web浏覽器發送請求頭資訊,送出請求體。
4.Web伺服器應答
5.Web伺服器發送應答頭資訊
6.Web伺服器向浏覽器發送資料
7.Web伺服器關閉TCP連接配接
5.7層結構,應用層有哪些協定
應用層:HTTP,FTP,SNMP
表示層,會話層,傳輸層,網絡層,資料鍊路層,實體層
6. tcp有哪些可靠手段
1.将資料截斷為合理的長度
2.逾時重發
3.對于收到的請求,給出确認響應
4.校驗出包有錯,丢棄封包段,不給出響應。
5.對失序資料進行重排序,然後交給應用層
6.丢棄重複資料
7.TCP提供流量控制
7. 丢包了怎麼辦
對Send發送失敗進行處理,常用解決方法有拆包、加標頭、發送組合包。(在網上沒有找到具體解釋)
8.什麼時候會産生ack備援
封包亂序和丢包造成的
MySQL
1.索引知道嗎?為什麼索引能夠查詢的快?
索引是幫助mysql高效擷取資料的資料結構;
InnoDB的索引結構為矮胖的B+樹,可以很快地找到索引對應的資料
2.B+樹結構是什麼樣的
n叉B+樹
(1)B+樹一個節點最多含有n個key
(2)B+樹葉子節點保留所有key的資訊,依照key大小排序
(3)所有非葉子節點看做key的索引
(4)資料對象的插入和删除僅僅在葉子節點進行
3.為什麼葉子節點用到連結清單
使用範圍查找的時候,隻要找到那個邊界值就可以通過指針去查找其他所需要的資料就不用再從根結點開始周遊,減少了所消耗的時間,增加了效率.
4.事務知道嗎?acid什麼含義
事務是邏輯上的一組操作,要麼都執行,要麼都不執行;
資料庫事務可以保證多個對資料庫的操作構成邏輯上的整體,要麼全部執行成功,要麼全部不執行。
原子性(Atomicity) : 事務是最小的執行機關,不允許分割。事務的原子性確定動作要麼全部完成,要麼完全不起作用;
一緻性(Consistency): 執行事務前後,資料保持一緻,例如轉賬業務中,無論事務是否成功,轉賬者和收款人的總額應該是不變的;
隔離性(Isolation): 并發通路資料庫時,一個使用者的事務不被其他事務所幹擾,各并發事務之間資料庫是獨立的;
持久性(Durability): 一個事務被送出之後。它對資料庫中資料的改變是持久的,即使資料庫發生故障也不應該對其有任何影響。
5.原子性怎麼實作的
undo log稱之為復原日志,每條資料的變化(insert/update/delete)都會産生一條記錄,并且日志持久化到磁盤,undo log用來記錄資料修改前的資訊,比如說要插入一條記錄,那麼undo log就會記錄一條删除該資訊的語句,這樣你需要復原的時候那麼undo log就會執行删除你之前插入的那條記錄,達到沒有修改前的狀态,更新一個記錄也會生成一條sql記錄你更新前的字段狀态,進而實作了原子性。
6.持久性怎麼實作的
redo log叫重做日志,當事務送出的時候會把所有的修改資訊存放在redo log中,并且會把redo log持久化到磁盤,當電腦重新開機後就會重新執行redo log的修改資訊來恢複資料,這樣就能夠達到持久化的目的。
程式設計題
topK問題