加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 數(shù)據(jù)結(jié)構(gòu)和算法
    • 計算機(jī)網(wǎng)絡(luò)
    • 操作系統(tǒng)
    • 設(shè)計模式
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

必須掌握的編程基礎(chǔ)“四大件”詳解

11/26 15:30
1592
閱讀需 20 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

先說結(jié)論,基礎(chǔ)四大件包括:數(shù)據(jù)結(jié)構(gòu)和算法、計算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)、設(shè)計模式

這幾個技術(shù)和什么語言無關(guān),但是如果是做偏軟件的工作,即使是嵌入式軟件,都是非常重要的,可以大大拓寬自己的職業(yè)生涯和技術(shù)深度。

正文

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

如果想去大廠的同學(xué),這是必備的技能,不然最后的算法題部分肯定是過不去的。

基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)包括:

數(shù)組(Array):

一組具有相同數(shù)據(jù)類型的元素按連續(xù)內(nèi)存空間存儲。

可以通過索引快速訪問元素。

鏈表(Linked List):

一組元素,其中每個元素包含數(shù)據(jù)和一個指向下一個元素的指針。

常見的類型有單向鏈表、雙向鏈表和循環(huán)鏈表。

棧(Stack):

一種遵循后進(jìn)先出(LIFO, Last In First Out)原則的數(shù)據(jù)結(jié)構(gòu)。

常用于遞歸和表達(dá)式求值。

隊列(Queue):

一種遵循先進(jìn)先出(FIFO, First In First Out)原則的數(shù)據(jù)結(jié)構(gòu)。

常用于任務(wù)調(diào)度和廣度優(yōu)先搜索(BFS)。

哈希表(Hash Table):

使用哈希函數(shù)將鍵映射到值的數(shù)據(jù)結(jié)構(gòu)。

提供快速的插入、刪除和查找操作。

樹(Tree):

一種由節(jié)點組成的分層數(shù)據(jù)結(jié)構(gòu),其中每個節(jié)點可以有零個或多個子節(jié)點。

常見的類型有二叉樹、二叉搜索樹(BST)、平衡二叉樹(如AVL樹)、紅黑樹等。

圖(Graph):

一組節(jié)點和連接這些節(jié)點的邊的集合。

可以表示對象之間的關(guān)系,常用于路徑搜索、網(wǎng)絡(luò)流問題等。

基礎(chǔ)的算法包括:

排序算法:

冒泡排序(Bubble Sort):通過重復(fù)遍歷要排序的數(shù)列,比較每對相鄰元素,如果它們的順序錯誤就把它們交換過來。

選擇排序(Selection Sort):每次從待排序的數(shù)據(jù)元素中選出最?。ɑ蜃畲螅┑囊粋€元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。

插入排序(Insertion Sort):通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。

歸并排序(Merge Sort):采用分治法,將問題分成一些小的問題然后遞歸解決,最后再將各個已排序的小段合并起來。

快速排序(Quick Sort):通過一趟排序?qū)⒋庞涗浄指舫瑟毩⒌膬刹糠?,其中一部分記錄的關(guān)鍵字均比另一部分的關(guān)鍵字小,然后再按此方法對這兩部分分別進(jìn)行快速排序。

搜索算法:

線性搜索(Linear Search):從數(shù)組的第一個元素開始,依次將當(dāng)前元素與目標(biāo)值進(jìn)行比較,直到找到目標(biāo)值或搜索完整個數(shù)組。

二分搜索(Binary Search):在有序數(shù)組中查找某一特定元素的搜索算法,搜索過程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結(jié)束;如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。

動態(tài)規(guī)劃算法(Dynamic Programming):

用于解決最優(yōu)化問題,通過將問題分解為更小的子問題,并存儲子問題的解決方案以避免重復(fù)計算。

貪心算法(Greedy Algorithm):

在每一步選擇中都采取在當(dāng)前狀態(tài)下最好或最優(yōu)(即最有利)的選擇,從而希望導(dǎo)致結(jié)果是全局最好或最優(yōu)的算法。

回溯算法(Backtracking):

一種通過探索所有可能的候選解來找出所有解的算法,如果候選解被確認(rèn)不是一個解(或者至少不是最后一個解),回溯算法會通過在上一步進(jìn)行一些變化來丟棄該解,即“回溯”并嘗試另一個可能的候選解。

分治算法(Divide and Conquer):

將一個復(fù)雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最后子問題可以簡單的直接求解,原問題的解即子問題的解的合并。

計算機(jī)網(wǎng)絡(luò)

這里說的計網(wǎng)主要是指TCP/IP協(xié)議棧,這是當(dāng)今互聯(lián)網(wǎng)通信的基礎(chǔ),很多面試都會涉及這部分考察,另外這部分也是做很多通信開發(fā)的基礎(chǔ)。

TCP/IP主要協(xié)議包括:

TCP/IP協(xié)議模型由四個層次組成,分別是應(yīng)用層、傳輸層、網(wǎng)絡(luò)層網(wǎng)絡(luò)接口層。以下是TCP/IP協(xié)議族中的主要協(xié)議及其作用:

一、應(yīng)用層協(xié)議

應(yīng)用層是TCP/IP協(xié)議集的最高層,負(fù)責(zé)處理特定的網(wǎng)絡(luò)應(yīng)用程序,如電子郵件、文件傳輸和網(wǎng)頁瀏覽。應(yīng)用層協(xié)議包括HTTP、FTP、SMTP、DNS等。這些協(xié)議定義了應(yīng)用程序如何使用網(wǎng)絡(luò)資源進(jìn)行通信。

HTTP(HyperText Transfer Protocol):用于在萬維網(wǎng)(WWW)上傳輸超文本的協(xié)議。它是無狀態(tài)的、面向?qū)ο蟮膮f(xié)議,基于請求/響應(yīng)模型工作??蛻舳耍ㄍǔJ菫g覽器)向服務(wù)器發(fā)送HTTP請求,服務(wù)器處理請求并返回HTTP響應(yīng)。

HTTPS(HyperText Transfer Protocol Secure):HTTP的安全版本,通過TLS/SSL協(xié)議加密數(shù)據(jù)傳輸,確保數(shù)據(jù)的機(jī)密性和完整性。

FTP(File Transfer Protocol):用于在網(wǎng)絡(luò)上傳輸文件的協(xié)議。它支持文件的上傳、下載和管理。

SFTP(Secure File Transfer Protocol):通過SSH(Secure Shell)加密傳輸文件的協(xié)議,確保文件傳輸?shù)陌踩浴?/p>

SMTP(Simple Mail Transfer Protocol):用于發(fā)送電子郵件的協(xié)議。它定義了郵件如何從發(fā)件人傳輸?shù)绞占说泥]件服務(wù)器。

IMAP(Internet Message Access Protocol):用于從郵件服務(wù)器讀取電子郵件的協(xié)議。與POP3不同,IMAP支持在服務(wù)器上管理郵件。

POP3(Post Office Protocol version 3):另一種從郵件服務(wù)器讀取電子郵件的協(xié)議。與IMAP不同,POP3通常將郵件下載到本地設(shè)備并從服務(wù)器上刪除。

DNS(Domain Name System):用于將域名解析為IP地址的系統(tǒng),是互聯(lián)網(wǎng)的重要基礎(chǔ)設(shè)施之一。

DHCP(Dynamic Host Configuration Protocol):用于動態(tài)分配IP地址和其他網(wǎng)絡(luò)配置的協(xié)議。

二、傳輸層協(xié)議

傳輸層負(fù)責(zé)提供端到端的通信服務(wù)。傳輸層協(xié)議包括傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報協(xié)議(UDP)。

TCP(Transmission Control Protocol):提供可靠的、面向連接的服務(wù)。它確保數(shù)據(jù)完整、無損并且按順序到達(dá)。TCP盡量連續(xù)不斷地測試網(wǎng)絡(luò)的負(fù)載并且控制發(fā)送數(shù)據(jù)的速度以避免網(wǎng)絡(luò)過載。

UDP(User Datagram Protocol):提供不可靠的、無連接的服務(wù)。UDP不對數(shù)據(jù)包是否已經(jīng)到達(dá)目的地進(jìn)行檢查,并且不保證數(shù)據(jù)包按順序到達(dá)。UDP協(xié)議傳輸效率高,但可靠性略低,適用于傳輸可靠性要求不高、體量小的數(shù)據(jù)。

三、網(wǎng)絡(luò)層協(xié)議

網(wǎng)絡(luò)層負(fù)責(zé)數(shù)據(jù)包的路由和轉(zhuǎn)發(fā)。網(wǎng)絡(luò)層協(xié)議包括因特網(wǎng)協(xié)議(IP)、地址解析協(xié)議ARP)、互聯(lián)網(wǎng)控制報文協(xié)議(ICMP)等。

IP(Internet Protocol):最重要的網(wǎng)絡(luò)層協(xié)議,它定義了數(shù)據(jù)包的格式和地址結(jié)構(gòu),并負(fù)責(zé)數(shù)據(jù)包的路由。IP協(xié)議是一種無連接、不可靠的分組傳送服務(wù)的協(xié)議。

ARP(Address Resolution Protocol):用于將IP地址解析為物理地址(如MAC地址),以便在局域網(wǎng)中進(jìn)行數(shù)據(jù)通信。

ICMP(Internet Control Message Protocol):用于發(fā)送錯誤和狀態(tài)信息,如網(wǎng)絡(luò)不可達(dá)、主機(jī)不可達(dá)等。

四、網(wǎng)絡(luò)接口層協(xié)議

網(wǎng)絡(luò)接口層負(fù)責(zé)與物理網(wǎng)絡(luò)的接口,包括以太網(wǎng)、Wi-Fi等。網(wǎng)絡(luò)接口層協(xié)議定義了如何在物理網(wǎng)絡(luò)上傳輸數(shù)據(jù)幀,以及如何處理鏈路層的錯誤和沖突。網(wǎng)絡(luò)接口層協(xié)議包括以太網(wǎng)協(xié)議、PPP協(xié)議等。

綜上所述,TCP/IP協(xié)議族中的各個協(xié)議共同協(xié)作,確保了數(shù)據(jù)在網(wǎng)絡(luò)中的高效、可靠傳輸。

操作系統(tǒng)

操作系統(tǒng)更是軟件開發(fā)的重中之重,尤其是對于嵌入式開發(fā)者來說,如果你還不會操作系統(tǒng),那務(wù)必得下功夫了。

操作系統(tǒng)開發(fā)重點(這里重點說下Linux系統(tǒng)):(重點我標(biāo)出來了)

一、Linux操作系統(tǒng)基礎(chǔ)

基本概念:理解Linux操作系統(tǒng)的內(nèi)核、文件系統(tǒng)、進(jìn)程管理、權(quán)限和用戶管理等基本概念。

命令行操作:熟悉Linux命令行接口(CLI),掌握常用的命令,如文件操作、進(jìn)程管理、網(wǎng)絡(luò)配置等。

Shell編程:學(xué)習(xí)Shell腳本語言(如Bash、Zsh、Ksh等),掌握腳本語法和邏輯,能夠編寫腳本來自動化日常任務(wù)和系統(tǒng)管理操作。

二、Linux系統(tǒng)編程

系統(tǒng)編程接口:理解并掌握Linux系統(tǒng)編程接口,包括標(biāo)準(zhǔn)庫函數(shù)和系統(tǒng)調(diào)用。

進(jìn)程與線程:深入理解Linux多任務(wù)編程中的多進(jìn)程和多線程,以及進(jìn)程間通信(如pipe、FIFO、消息隊列、共享內(nèi)存、signal、信號量等)。

同步與互斥:學(xué)習(xí)同步與互斥對共享資源訪問控制的重要性,確保多個進(jìn)程或線程能夠安全地訪問共享資源。

三、Linux網(wǎng)絡(luò)編程

TCP/IP協(xié)議:理解TCP/IP協(xié)議棧的工作原理,掌握socket編程接口。

網(wǎng)絡(luò)編程API:熟悉Linux網(wǎng)絡(luò)編程相關(guān)API,如TCP/UDP網(wǎng)絡(luò)編程、Web編程開發(fā)等。

并發(fā)服務(wù)器:學(xué)習(xí)如何實現(xiàn)TCP協(xié)議服務(wù)器的編程方法和并發(fā)服務(wù)器的設(shè)計。

四、Linux內(nèi)核開發(fā)

內(nèi)核原理:深入理解Linux內(nèi)核的工作原理,包括進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、網(wǎng)絡(luò)子系統(tǒng)等。

內(nèi)核模塊編程:學(xué)習(xí)如何編寫和加載內(nèi)核模塊,以便在內(nèi)核空間運(yùn)行自定義代碼。

設(shè)備驅(qū)動開發(fā):掌握Linux設(shè)備驅(qū)動的原理和框架,熟悉字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備等驅(qū)動的開發(fā)。

五、Linux開發(fā)工具與環(huán)境

編輯器與IDE:熟悉Linux下的文本編輯器(如Vim、Emacs)和集成開發(fā)環(huán)境(IDE,如Eclipse、Visual Studio Code)。

編譯器調(diào)試器:掌握GCC編譯器和GDB調(diào)試器的使用,以便進(jìn)行高效的代碼編寫和調(diào)試。

版本控制:熟悉Git等版本控制系統(tǒng)的使用,以便進(jìn)行代碼管理和團(tuán)隊協(xié)作。

六、Linux系統(tǒng)安全與優(yōu)化

系統(tǒng)安全機(jī)制:了解Linux系統(tǒng)的安全機(jī)制,如SELinux、AppArmor等,確保系統(tǒng)的安全性。

性能優(yōu)化:學(xué)習(xí)性能分析工具(如gprof、valgrind、perf等)的使用,掌握代碼優(yōu)化技巧,提高程序性能。

穩(wěn)定性與可靠性:通過充分的測試(如單元測試、集成測試、系統(tǒng)測試等)來確保軟件的穩(wěn)定性和可靠性。

設(shè)計模式

設(shè)計模式可以提高代碼的可復(fù)用性、靈活性、可擴(kuò)展性。

最經(jīng)典的教材就是23種設(shè)計模式,這里也不用全部記住,掌握最常見的幾種就可以,其他可以用到再說。

23種設(shè)計模式有哪些:

23種設(shè)計模式是由Gang of Four(GoF)在《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書中提出的經(jīng)典設(shè)計模式,它們分為三大類:創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式。以下是這23種設(shè)計模式的詳細(xì)分類及介紹:

一、創(chuàng)建型模式(5種)

單例模式(Singleton):確保一個類只有一個實例,并提供一個全局訪問點。

工廠方法模式(Factory Method):定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。

抽象工廠模式(Abstract Factory):提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。

建造者模式(Builder):將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

原型模式(Prototype):用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型來創(chuàng)建新的對象。

二、結(jié)構(gòu)型模式(7種)

適配器模式(Adapter):將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。適配器模式讓原本由于接口不兼容而不能一起工作的那些類可以一起工作。

橋接模式(Bridge):將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化。

組合模式(Composite):將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。它使得客戶對單個對象和組合對象的使用具有一致性。

裝飾器模式(Decorator):動態(tài)地給一個對象添加一些額外的職責(zé)。就擴(kuò)展功能而言,裝飾器模式比生成子類方式更為靈活。

外觀模式(Facade):為子系統(tǒng)中的一組接口提供一個一致的界面,定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。

享元模式(Flyweight):運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對象。

代理模式(Proxy):為其他對象提供一個代理或占位符,以控制對這個對象的訪問。

三、行為型模式(11種)

模板方法模式(Template Method):定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

策略模式(Strategy):定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換。本模式使得算法的變化可獨立于使用它的客戶。

命令模式(Command):將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進(jìn)行參數(shù)化;對請求排隊或記錄請求日志,以及支持可取消的操作。

責(zé)任鏈模式(Chain of Responsibility):為解除請求的發(fā)送者和接收者之間耦合,而使多個對象都有機(jī)會處理這個請求。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它。

狀態(tài)模式(State):允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為。對象看起來似乎修改了它所屬的類。

觀察者模式(Observer):定義對象間的一種一對多的依賴關(guān)系,以便當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動刷新。

中介者模式(Mediator):用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。

迭代器模式(Iterator):提供一種方法順序訪問一個聚合對象中各個元素,而又不需暴露該對象的內(nèi)部表示。

訪問者模式(Visitor):表示一個作用于某對象結(jié)構(gòu)中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。

備忘錄模式(Memento):在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可將該對象恢復(fù)到保存的狀態(tài)。

解釋器模式(Interpreter):給定一個語言,定義它的文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中的句子。

今天先梳理了這“四大件”的概念,后續(xù)會分開說下學(xué)習(xí)的資料和路徑,歡迎關(guān)注。

未完待續(xù),持續(xù)更新!以防后邊找不到可以點贊收藏下!

相關(guān)推薦

電子產(chǎn)業(yè)圖譜