<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          帥地吐血整理:那些讓你起飛的計算機基礎知識

          共 4124字,需瀏覽 9分鐘

           ·

          2021-09-02 16:46

          我公眾號里的文章,寫的大部分都是與計算機基礎知識相關的,這些基礎知識,就像我們的內(nèi)功,如果在未來想要走的更遠,這些內(nèi)功是必須要修煉的。


          框架千變?nèi)f化,而這些通用的底層知識,卻是幾乎不變的,了解了這些知識,可以幫助我們更快著學習一門知識,更加懂得計算機的運行機制。


          當然,在面試中也經(jīng)常會被問到,特別是對于應屆生,對于春秋招,也可以看看我前陣子寫過的文章歷經(jīng)兩個月,我的秋招之路結(jié)束了!。


          也有讀者經(jīng)常問的計算機基礎知識究竟是指啥?學習順序?推薦書籍?

          我公眾號的讀者學生以及非科班的應該挺多的,所以我今天這篇文章就寫一寫,我學過的計算機基礎知識,看過的書以及我學過的順序

          當然,以下是我個人的一些經(jīng)驗,并且學過的一些知識,僅供參考,也歡迎大家進行補充,文章涉及的資料文末都會提供。

          一、計算機網(wǎng)絡

          在我們用的程序中,99% 都離不開網(wǎng)絡,作為一個程序員,我覺得了解計算機網(wǎng)絡是必須的,在大學的課程中,一般也都會開設這一門課。

          在我學習這門課之前,我就特別好奇,一臺電腦是怎么把消息發(fā)給另外一臺電腦的呢?例如:

          1、兩臺電腦啥線路也沒有相連,怎么就能把消息發(fā)送給他呢?

          2、世界上的電腦那么多,咋就能找到那臺特點的電腦呢?有人說我們可以 MAC 或者 IP 來唯一標識啊,可是,我就有點疑惑了,世界那么大,電腦那么多,有了這個標識,我們該怎么找到他呢?遍歷所有電腦?

          3、多個程序同時發(fā)消息給一臺電腦,電腦是如何準確把這些消息拿給這些不同程序的呢?

          4、發(fā)送的消息丟失了怎么辦?

          總之,一大堆疑問,看了計算機網(wǎng)絡之后,才豁然開朗。自己也寫了一篇評價不錯的文章:一文讀懂一臺計算機是如何把數(shù)據(jù)發(fā)送給另一臺計算機的

          所以這里,我是強烈建議大家學一下的,在面試中,計算機網(wǎng)絡也是高頻考點,這里我大致總結(jié)一下一些必學協(xié)議以及面試高頻考點:

          物理層、鏈路層

          1. MTU,MAC地址,以太網(wǎng)協(xié)議。

          2. 廣播與 ARP 協(xié)議

          網(wǎng)絡層

          1. ip 地址分類

          2. IP 地址與 MAC 地址區(qū)別

          3. 子網(wǎng)劃分,子網(wǎng)掩碼

          4. ICMP 協(xié)議及其應用

          5. 路由尋址

          6. 局域網(wǎng),廣域網(wǎng)區(qū)別

          傳輸層(主要就是 TCP)

          1. TCP首部報文格式(SYN、ACK、FIN、RST必須知道)

          2. TCP滑動窗口原理,TCP 超時重傳時間選擇

          3. TCP 擁塞控制,TCP 流量控制

          4. TCP 三次握手與四次揮手以及狀態(tài)碼的變化

          5. TCP連接釋放中TIME_WAIT狀態(tài)的作用

          6. SYN 泛洪攻擊

          7. TCP 粘包,心跳包

          8. UDP 如何實現(xiàn)可靠傳輸

          9. UDP 與 TCP 的區(qū)別

          10. UDP 以及 TCP 的應用場景

          應用層

          1. DNS 原理以及應用

          2. HTTP 報文格式,HTTP1.0、HTTP1.1、HTTP2.0 之間的區(qū)別

          3. HTTP 請求方法的區(qū)別:GET、HEAD、POST、PUT、DELETE

          4. HTTP 狀態(tài)碼

          5. HTTP 與 HTTPS 的區(qū)別

          6. 數(shù)字證書,對稱加密與非對稱加密

          7. cookie與session區(qū)別

          8. 輸入一個URL到顯示頁面的流程(越詳細越好,搞明白這個,網(wǎng)絡這塊就差不多了)

          上面寫的這些協(xié)議,我覺得是比較重要的,特別是在面試中。之前寫過一個計算機網(wǎng)絡入門教程:別看教材了,帥地熬夜肝了一份計算機網(wǎng)絡極簡入門教程

          對于新手推薦視頻:可以看韓老師講的視頻,在嗶哩嗶哩搜索韓老師就可以找到 韓老師講高?!队嬎銠C網(wǎng)絡原理》

          推薦書籍:《計算機網(wǎng)絡:自頂向下》、《圖解http》

          我是先看了視頻,在看這兩本書的(文末我會給出電子版)。

          二、操作系統(tǒng)

          操作系統(tǒng)也是一門非常重要的知識,在面試中也是問的非常多(當然,看公司,有些公司技術(shù)棧是 Java 的,可能問的比較少)。對于操作系統(tǒng),要學的也挺多,例如:

          啥是進程,啥是線程,他們的本質(zhì)區(qū)別?我們運行一個程序時,數(shù)據(jù)放在哪里?代碼放在哪里?咋就還要分堆和棧?線程切換時是上下文是啥意思?

          虛擬地址是什么鬼東西?線程需要那么多種狀態(tài)干啥子?什么是樂觀鎖、悲觀鎖?死鎖是怎么造成的?解決死鎖的策略有哪些?等等

          大致就是如下知識

          1. 進程與線程區(qū)別
          2. 線程同步的方式:互斥鎖、自旋鎖、讀寫鎖、條件變量
          3. 互斥鎖與自旋鎖的底層區(qū)別
          4. 孤兒進程與僵尸進程
          5. 死鎖及避免
          6. 多線程與多進程比較
          7. 進程間通信:PIPE、FIFO、消息隊列、信號量、共享內(nèi)存、socket

          8. 管道與消息隊列對比

          9. fork進程的底層:讀時共享,寫時復制

          10. 線程上下文切換的流程

          11. 進程上下文切換的流程

          12. 進程的調(diào)度算法

          13. 阻塞IO與非阻塞IO

          14. 同步與異步的概念

          15. 靜態(tài)鏈接與動態(tài)鏈接的過程

          16. 虛擬內(nèi)存概念(非常重要)

          17. MMU地址翻譯的具體流程

          18. 缺頁處理過程

          19. 缺頁置換算法:最久未使用算法、先進先出算法、最佳置換算法

          推薦視頻:這個我沒看過視頻,所以想學的,我推薦去中國mooc大學找各大高校的課,也可以去國外找對應的課。

          推薦書籍:我看過的書籍是《操作系統(tǒng)—精髓與設計原理(第八版)》,不過大佬們都推薦《深入理解計算機操作系統(tǒng)(原書第三版)》,我看過目錄,感覺還不錯,這里也推薦這一本。不過對于零基礎的,我建議可以先看一本專門給小白看的書:《程序是如何跑起來的》。

          操作系統(tǒng)的學習,還是挺枯燥的,不過,只有把最難的啃過去,才能變的更加強大。

          三、數(shù)據(jù)庫(這里我用 MySQL)

          在大學的課程里,一般都會開設一門數(shù)據(jù)庫的課程,不過這門數(shù)據(jù)庫是沒有針對某一種數(shù)據(jù)庫語言的(例如 MySQL、Oracle)。不過我這里只講 MySQL的學習,別問為什么,問就是我逃了二十分之十九的課。

          把MySQL學好,還是特別重要的,千萬不能停留在會用的層面上,而是應該要了解一下原理,特別是對于要面試的同學,會問挺多原理,我每次被問到 MySQL 我都會信心大增。

          記得騰訊、shopee面試時,面完 MySQL,面試官好像對我刮目相看了。好了,不吹了,說這些也是強大 MySQL 的重要性。下面就說我學過的一些知識以及推薦的學習資料吧。

          對于 MySQL,需要學的還挺多的,例如,

          1、一條 sql 語句是如何執(zhí)行的?也就是說,從客戶端執(zhí)行了一條 sql 命令,服務端會進行哪些處理?(例如驗證身份,是否啟用緩存啥的)。

          2、索引相關:索引是如何實現(xiàn)的?多種引擎的實現(xiàn)區(qū)別?聚族索引,非聚族索引,二級索引,唯一索引、最左匹配原則等等(非常重要)。

          3、事務相關:例如事務的隔離是如何實現(xiàn)的?事務是如何保證原子性?不同的事務看到的數(shù)據(jù)怎么就不一樣了?難道每個事務都拷貝一份視圖?MVCC 的實現(xiàn)原理(重要)等等。

          4、各種鎖相關:例如表鎖,行鎖,間隙鎖,共享鎖,排他鎖。這些鎖的出現(xiàn)主要是用來解決哪些問題?(重要)

          5、日志相關:redolog,binlog,undolog,這些日志的實現(xiàn)原理,為了解決怎么問題?日志也是非常重要的吧,面試也問的挺多。

          6、數(shù)據(jù)庫的主從備份、如何保證數(shù)據(jù)不丟失、如何保證高可用等等。

          7、一些故障排查的命令,例如慢查詢,sql 的執(zhí)行計劃,索引統(tǒng)計的刷新等等。

          推薦書籍:連 sql 都不會寫的,推薦《SQL必知必會》,接著推薦《MySQL技術(shù)內(nèi)幕:InnoDB存儲引擎》。

          四、數(shù)據(jù)結(jié)構(gòu)與算法

          數(shù)據(jù)結(jié)構(gòu)與算法,我就不想多說了,看我文章的都知道,,重要性不用說。我秋招最大的優(yōu)勢估計就是數(shù)據(jù)結(jié)構(gòu)與算法的掌握了。

          上面三門課程的學習,基本也都是離不開數(shù)據(jù)結(jié)構(gòu)的,對于如何學習數(shù)據(jù)結(jié)構(gòu)與算法,可以看這篇:【方法篇】帥地也學過幾年算法,談一談「如何學好算法」。

          五、匯編

          我覺得,如何有時間,學習下匯編是必須的,學習了匯編,能夠更好著幫助我們知道計算機是如何處理程序代碼的,例如寄存器和內(nèi)存是如何使用的?循環(huán)、函數(shù)調(diào)用、數(shù)組是如何實現(xiàn)的?地址是怎么一回事?等等。

          很多二進制代碼是可以反編譯成匯編的,如何你會匯編,那么可以幫助我們更好著去理解一些東西。所以這里建議大家學習下匯編,并且要動手寫一些程序。

          對于匯編的資料,我可能沒啥好推薦的,自己看的不多??催^兩本書,對于入門的,我建議看 王爽的那本書《匯編語言(第三版)》,不過這本只適合入門,如果想繼續(xù),可以看《匯編程序設計》。

          六、編譯原理

          說實話,編譯原理還挺難,反正我覺得很難,不過有時間我覺得可以學學,學了這個你可以知道我們的編譯器如何分析我們的代碼的,例如詞法分析,語法分析,語義分析等等。當然,你未來可能會自己寫個特定分析代碼的編譯器也不一定,這個時候,就更加需要學了。

          對于學習的資料,我覺得可以看視頻 + 書。視頻的話中國 mooc 大學搜索即可,書的話,說時候,我也看的不多,只看過學校指定的教材,所以這里給不了多少建議,自己當當自行搜索,哪本熱門賣哪本勒。

          七、計算機組成原理

          其實組成原理我覺得也是挺難的,如果你數(shù)字電路學的比較好,可能會稍微簡單一些,記得當時這門課的最后一個任務就是自己做一個 8 位的 CPU,通過做這個 CPU,真的漲了 很多知識。

          對于這門課的學習,我覺得重點就是要弄明白整數(shù)啊,浮點數(shù)啊,這些在計算機是如何存儲的,兩個數(shù)相加是如何通過電路的與或門操作的。

          個人覺得,跟著學校的課本來就行,不用學的太深入,面試問的也不多。

          八、學習順序

          個人覺得算法,計算機網(wǎng)絡,操作系統(tǒng)和 MySQL 是剛需,這幾門要先學,如果是大一大二,推薦優(yōu)先學算法,然后計算機網(wǎng)絡,操作系統(tǒng)和數(shù)據(jù)庫這些,也可以并行學習。

          至于匯編,編譯原理和計算機組成原理,其實面試考的不多,可以有時間再學,沒時間就先放一放。

          總結(jié)

          暫時先介紹這么多吧,說實話,學了這些,不單單是多學了一門知識,更重要的是可以提升你的羅輯思維,給你帶來更多的 idea。

          然后上面的書籍我也整理好了,但是書籍經(jīng)常百度云失效 + 版權(quán)風險,大家如果需要,可以加我的企業(yè)微信,通過好友請求后,發(fā)送「資源」,會自動拉你進群,之后群公告文檔領取。

          記住,好友請求通過后,發(fā)送「資源」兩個字,一定要按照要求來,否則不會拉,為了節(jié)省帥地的時間,大家進去記得看公告,資源都在公告里。

          一定要看公告,資料在公告文檔

          一定要看公告,資料在公告文檔

          一定要看公告,資料在公告文檔

          瀏覽 92
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  18 网站视频 | 狠狠狠狠狠狠狠狠操 | 日本a在线观看 | 黄色视频图片免费看 | 少妇人妻无码AV片在线蜜芽 |