哈爾濱中軟卓越分享:你必須理解的計算機核心概念
計算機學科中有很多概念, 例如編碼(原碼,補碼,反碼), 虛擬內存, 文件, IO, 編譯,鏈接,分組交換,關係, 事務,範式, Hash, 加密。。。等等,本文試圖講一下最重要的核心集合,從這個集合當中就可以變換出計算機編程的各種魔法。
1 馮·諾依曼結構計算機的原理
所有的計算機語言,不管是Java, Python, Go, C, C++, PHP...... , 無論你在TIOBE上是排行第一還是排行第100, 無論看起來多麼花哨,功能多麼強大,用起來多麼舒服, 最終都要變成基本的二進位指令,老老實實地在馮·諾依曼結構計算機上按規矩執行。
這裡是根, 我們看到的、用到的都是這棵樹上的花和枝葉。
作為志向遠大的、有著強烈好奇心的年輕人, 難道你不想到根部來看一看?
作為最基本的要求, 必須要了解CPU和內存這倆哥們是怎麼親密無間工作的: CPU從內存取出指令,進行解碼和執行,執行時從內存中取出數據放到寄存器中, 進行計算, 然後把結果寫回到內存。如果是跳轉指令, CPU則取出跳轉目的地的指令繼續執行。
如此簡單的過程,竟然組成了多姿多彩的電腦世界: 你可以聽音樂,玩遊戲、上網聊天、用Word來寫文檔..... 當然看起來微不足道的一個操作,進入到CPU和內存中都可能需要成千上萬條指令來完成。
這些基本的指令組成了順序、循環、分支等基本的程序結構,形成了更為強大的編程語言的基礎。
CPU和內存、硬碟等設備的速度不匹配,是馮·諾依曼結構計算機的一個核心問題,為了解決這個問題,科學家們絞盡腦汁,想盡了辦法, 又引出了一堆概念: 緩存,DMA, 同步,非同步,阻塞....
2 進程和線程
這倆傢伙的重要性不言而喻,因為你寫的所有的程序要麼會成為一個獨立的進程去執行,要麼是被一個進程中的線程收編,沒有例外 。
幾乎所有的編程語言都會涉及到對多進程或者多線程編程的支持, 特別是多線程的並發編程, 所以你必須得搞明白它的本質是什麼。
進程是對一個運行中的程序的抽象,沒有這個概念,我們是無法實現一邊聽歌、一邊上網的愜意生活。
對於CPU來講, 它只是「渾渾噩噩」地從某個地方取指令,解碼執行,但是它不會意識到在某一刻整個世界已經變了天, 它執行的程序已經發生了切換,另外一個程序(準確地講叫進程)已經成功地搶班奪權。
每個進程都有一個被操作系統老大維護的進程式控制制塊, 裡邊保存了這個進程在運行時的重要信息,是進程能來回切換的重要保證。
而線程則寄居於進程之內 , 共享進程提供福利(代碼和數據)的同時, 還擁有自己的一畝三分地。
線程的出現,提升了系統的性能、吞吐量和響應性,通信,鎖, 死鎖。。。
3 虛擬內存
有了物理內存, 為啥還有虛擬內存?
一個重要的原因就是給各位進程先生提供一個由虛擬地址組成的獨立王國, 給他們造成一種假象: 我最重要,我是獨佔內存的!
每個人在自己的獨立王國里鬧騰,就不會互相打架, 治安也就有了保證。
但是在虛擬地址王國里做不了什麼事情,指令必須在物理內存中才能被執行, 操作系統老大用盡渾身解數,把每個進程的虛擬地址映射到實際地址上去,表面上不動聲色,背後絕對驚心動魄,分段,分頁,頁表,還要動用CPU的TLB來加速。
程序並不是像你想像的那樣,一下子全部裝載到內存的, 而是慢慢地, 用到的時候才進行裝載。
進程一條普通指令的執行, 其實有一大家子在鞍前馬後地忙碌著, 而進程幾乎渾然不覺,真是太幸福了。
4 網路的核心概念
上面所說的都局限於一台計算機, 然而一張大網早已經把這些孤島聯繫在一起。
這張大網就你我的周圍, 我們都變成了它的一個節點。
大網的設計非常有趣,沒有一個中心的節點,某幾個甚至某一片節點陣亡都沒有關係,大網繼續生存,提供服務。
作為碼農我們要理解的核心概念是: 分組交換, socket , http(s)。
你也許沒有想到,你上網玩遊戲,聽音樂,看這篇文章,其中的數據並不是一下子全發給你的, 而是被切分成適合網路傳輸的小塊,給每個小塊編上號, 每個小塊都獨立地走相同甚至不同的網路路徑, 到達你這裡,重新排序,組合,然後才展示給你, 這就是分組交換。
使用分組交換可以充分的利用網路帶寬: 在你不使用的間隙,別人也可以利用。
但是一個很明顯的問題就是分組數據丟失了怎麼辦? 如何檢測, 怎麼重發,如何緩存已經收到分組數據等一系列煩人的問題接踵而來。 這就是TCP要乾的事情。
如果你能體會到TCP是在端系統實現的,中間節點一無所知,我想你就Get到了分組交換和分層的真諦。
傳輸層,網路層,鏈路層,物理層。你一定得理解所謂的分層只不過是把你的數據層層包裝而已,在傳輸的過程層中每到一個節點都會拆開某一層的包裝,查看一下數據, 然後再次包裝,轉發出去,直到終點。
也許你不願意了解底層煩人的細節, 但是一定要理解socket和http(s) , 這哥倆最貼近我們碼農的日常生活,我們經常直接和他們對話,利用他們收發數據, 所以花點經歷好好學學吧。
5 Hash 和 RSA
如果說Https是網路安全通信的一大基石, 那Hash和RSA 則是基石的基石。
為了保證消息在傳輸過程中的私密性, 完整性,不可偽造性,這哥倆可以說是功不可沒。
其實不僅僅是Https , 在各種軟硬體平台上都能看到他們勤奮的身影, 例如SSO, SSH, JWT ..... 所以非常值得你投入精力去學習。
RSA最為美妙之處就是有一對兒鑰匙, 一個是私有的、保密的, 另外一個是公有的, 誰都可以知道, 這對於之前的對稱密鑰是個極大的顛覆, 誰能想到原先需要保密的密鑰竟然可以公開呢!
更有意思的是私鑰加密的數據只有相應的公鑰才能解開, 反之亦然,這確實是很漂亮的概念。
RSA的概念很簡單, 但是為了實現真正的安全消息傳輸,作為第一步必須得有數據簽名做保證, 你需要理解如何對消息用Hash形成摘要,然後用私鑰簽名,又是如何驗證這個簽名的, 理解了這一點,很多東西都迎刃而解。
哈爾濱中軟卓越具有完善的IT職業教育體系,提供基於崗位的項目實戰訓練,投重金研發了專門針對大學生的准員工。「5R(5Real)」實訓課程體系,5R即:真實的工作環境、真實的項目經理、真實的項目案例、真實的工作壓力、真實的工作機會。課程設計主要培養學員的動手操作能力,通過實際項目讓學生熟知軟體開發的流程,每年有無數學子從哈爾濱中軟卓越走向IT行業,選擇通過正規培訓的職業教育進入IT行業。哈爾濱中軟卓越助您走近夢想,走進輝煌人生。
※哈爾濱中軟卓越分享:保留IT員工需留意
※哈爾濱中軟卓越分享:濟南成功試驗量子通信網路
※哈爾濱中軟卓越分享:3D列印創造出「第三根拇指」
※哈中軟分享:世界首台以光為驅動的清潔機器人誕生
※哈爾濱中軟卓越分享:吉尼斯最大真人相機誕生
TAG:中軟卓越哈爾濱 |
※哈爾濱中軟卓越分享:物聯網不是你理解的那樣
※奧尼爾:懷特塞德需要理解什麼是策略
※概念解析:深入理解人工智慧和機器學習
※斯波爾斯特拉:理解理查德森為什麼情緒失控
※想和前男友成功複合,你要先理解否定心理
※量子計算機:更擅長理解「倒放的電影」!
※詳解最大似然估計、最大後驗概率估計,以及貝葉斯公式的理解
※不懂量子也不懂計算機,那麼你能理解量子計算機嗎?
※看了天工開物·匠意心傳,我總算理解了雷克薩斯的匠心之道
※霍華德終於理解了科比的苦心 哈登能理解保羅嗎
※不懂量子也不懂計算機,那麼,你能理解量子計算機嗎?
※你理解的靈魂是什麼?
※我理解的真愛
※特里:穆帥批評你是想讓你變得更好!曼聯球員必須理解他的苦心!
※奈克賽斯奧特曼,一部很難讓人理解的奧特曼,你理解了嗎?
※如何理解心理健康?
※理解別人,也理解自己
※尼克斯總裁:波神不會因沒續約不高興 他理解我們
※讀塗爾干:理解與超越
※深度好奇:深挖語義理解,助力打造機器版「福爾摩斯」