国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

大學應該更偏向技術還是算法和數據結構這類?

算法與數據結構 ? 來源:編程指北 ? 作者:編程指北 ? 2021-07-04 15:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

經常有學妹問我(其實學弟也愛問):

大學應該更偏向技術還是算法和數據結構這類。

大家都是成年人了,這還用選嗎?

當然是兩者都要重點啃下來呀,算法和技術相輔相成的,一定不要有二選一的想法!

算法和數據結構可以說是技術(包括MySQL、Java、Redis、操作系統這些)的基石:

5d29ea2c-d96e-11eb-9e57-12bb97331649.png

我當時大一也是覺得數據結構沒啥用,哪有學個 JS、CSS 寫個漂亮的網頁炫酷?

什么算法,明明有 qsort 還要學快排、堆排?

這玩意有 qsort 快嗎?

我直接一行就排好序了,你還要寫十幾行,真菜呀!

那時候以為的技術就是使用各種組件、調API,比如 Map:

但是越學到后面心里越沒底,因為這些東西對自己都是黑盒子。

所以如果數據結構與算法掌握不好,那么這些 API 對于我們就是一堆的黑黑子,連什么時候用 Map(紅黑樹實現)、什么時候用 HashMap 都分不清。

Redis 這種組件,難道只需要了解如何get、set 就是算是掌握了嗎?

那肯定不行,實際上想要要用得好,得要了解 Redis 底層的那些數據結構,比如簡單動態字符串(SDS、鏈表、字典、跳躍表、整數集合、壓縮列表,才能選擇適當的存儲結構。

如果要問我大學什么最后悔?那肯定是沒有從大一就開始好好學算法,去打 ACM。

現在還在大一、大二的同學還不抓緊機會,別給自己留下遺憾。當然,不打 ACM,我們也是能夠學好數據結構和算法的。

數據結構和算法你能在任何計算機領域里看到,比如在編譯原理中寄存器的分配會用到貪心,死代碼檢測與消除會用到圖論里不可達的知識;操作系統進程、線程調度會用到多級隊列和調度算法;組成原理中 Cache 的替換會用到 LRU、FIFO 等算法;開發必備的數據庫也離不開B+樹、LSM 等數據結構和查找算法。

很多時候我們需要的算法都被封裝到編程語言的基礎庫里了,以至于很多同學會覺得算法離我們太遠,其實不是的。

所以學習算法有助于我們根據應用場景選擇最合適的數據結構。

日常開發中也一定離不開算法,比如小北最近工作中涉及的某種嵌套 TLV(Tag-Length-Value)結構編碼的解析,就需要用到遞歸、多叉樹等知識。如果不學習算法,那么程序中只能見到大量的 if/else、while/for。。。

可以說不學算法的工程師一定不是一個優秀的工程師。

再來說操作系統、編譯原理,這些里面也是蘊含著各種數據結構與算法的,就拿編譯原理來說。

一、編譯原理遇見算法

當你學完有限狀態機以后,你會發現以前覺得很牛逼正則表達式似乎自己也能用 DFA、NFA 實現一下了。狀態機的思想在編程中很多地方都用得上。

比如解析 HTTP 協議,如果沒學過狀態機思想,你可能會一行行的 if/else 去做解析,這里最麻煩的地方在于,if/else 需要提前將 HTTP 頭部字段都接收到再來判斷,而我們知道 HTTP 基于 TCP,而 TCP 是流式傳輸,所以你很有可能是幾個字符一組組接收到的,這個時候用 if/else 寫出來就很難看了。

而用狀態機編寫起來代碼就會非常優雅。狀態的轉移是由規則驅動的,接收到一個字符就判斷一個,非常的方便。

繼續學完語法分析,你會掌握遞歸下降分析這樣非常重要的思想,你可以使用遞歸下降快速的實現四則運算計算器。

如果不用遞歸下降你可能需要先中綴表達式轉后綴,然后求值,這是我們大一數據結構課寫的,當時用棧寫的,有點麻煩。后來學完編譯原理,又用遞歸下降重寫了一遍,區區幾十行代碼遍搞定。

還有一類場景在實際開發中的用的很多,比如淘寶、京東這樣的電商,它們的營銷規則有很多,比如滿減、直減、跨店等等,這樣的規則是不可能寫死在代碼里的。

那是怎么做的呢?

一般會實現一個配置系統,并設計一個DSL(領域特定語言)來表達這些規則,將規則直接配置到系統中,這樣可以非常方便的修改,那么如何在代碼里去解析 DSL 定義的規則呢?這就需要為 DSL 寫一個語法解析器,這里就會用到語法分析的方法。

DSL(Domain Specific Language),它是一種用于某個特定領域的程序設計語言。這種特定于某個領域是相對于 C、C++Python 這種通用語言而言的,通用語言可以在各個領域使用,我們熟悉的大多數程序設計語言都是通用語言,它們都是圖靈完備的。

像我們平常經常使用的 JSON、SQL、HTML 這些都算是一種 DSL,你甚至可以嘗試用遞歸下降去寫一個 JSON、XML 解析器,這比寫電商網站更有價值的。

繼續往下學你會了解到抽象語法樹 AST 如何生成、如何轉化為中間代碼、如何對中間代碼優化、最終又是怎么生成機器指令的。

你會看到貪心算法在寄存器分配中的應用,也會看到圖論中的可達性分析又是如何實現死代碼消除。

二、CS 基礎課

所以無論是操作系統、計算機網絡、編譯原理這些基礎CS課程,還是MySQL、Redis這些中間件,都是構建在各種精妙的數據結構與算法之上的,數據結構與算法必學,一定要重視!

如果你有 ACM 獲獎經歷,那 BAT 是很容易進的,但是也一定要掌握基本的CS基礎課程知識,不能只重算法不重基礎。

國外可能把題刷好就能拿到offer,但是國內不懂 OS、網絡這些基礎和一些語言八股文也是很難的!

三、CS 學習路線

很多大一大二的同學其實是不太清楚到底該計算機專業該如何自學,在這分享下我的學習路線吧:

我大學專業學計算機的,對 CS 本科課程還算了解,也經常了解學習國外 CS 課程。

CS 專業區別于其它專業很大特點就是:

工作后的內容是和專業所學的內容強相關的

比如你學了數據結構、編譯原理、操作系統、計算機網絡,如果你從事的是研發崗,那一定離不開這些知識。

主要靠自學

不管是科班還是非科班,想要快速持續的提高技術水平,就得靠自己去鉆,尤其離不開自學。

知乎上其實很多問科班和非科班的差別在哪,其實我一直想說,你給自己充足時間去把科班的內容學習一遍,到底還能差在哪呢?

可能唯一差別就是少了一個 計算機學士學位。

也有人把這種自學出家的叫做民科,當然沒有任何的諷刺意思哈。

四、那么計算機專業該如何自學呢?

最簡單的方式就是參考 CS 科班同學的課程,比如下面這個:

很多,概況起來就是(下面只涉及CS專業課):

計算機導論 + 一門編程入門語言

算法與數據結構

操作系統

計算機網絡

數據庫系統

特定領域,如:計算機圖形學、信息安全、System方向、分布式

學習的途徑就是:

多看國外/國外的 CS 名校的一些開放課程 + 看經典的書 + 多寫代碼!!!

畢竟現在MOOC、Udemy、B站上學習的資源都是很豐富的。

唯一要做的就是篩選一些比較好的課程進行學習,在這里我主要推薦一些國外的計算機課程,他們很明顯的一個特征就是注重實踐。

一門課,除了理論以外,還會有配套的 Lab、assignment,而且這些老師設計 Lab 都很用心的,看視頻/書 + 做 Lab,這應該算計算機科班同學一個比較好的學習方式了,有理論也有實踐。

下面開始上干貨:

一、計算機導論

首先建議從計算機導論課程開始,推薦下面這些課程:

Harvard的CS50 CS50: Introduction to Computer Science

Berkeley的CS61A CS 61A: Structure and Interpretation of Computer Programs

MIT的6.001 mit-6.001

隨后建議學習一門語言,可以是C、Java、或Python,我推薦 C語言(當然,也可以是Python!這不是重點,重點是要多去寫,入門時提高對編程的興趣)。

提到C語言,我這里推薦國內浙大翁凱老師的課,看過的都說好,分為兩門:

第一門是面向高考結束想提前自學一點編程的,叫大學先修課:C語言程序設計CAP-大學先修課

雖然叫先修課,但是覆蓋了C語言的主要知識點,也適合大一新生~

第二門是C語言程序設計進階:C語言程序設計進階

會帶你用C語言完成一些有趣的項目,比如一些圖形界面小游戲,先修課學習C語言語法基礎,進階課帶你項目實操,搭配使用,你就是同學中的大神!

有了語言基礎之后建議學數據結構與算法:

數據結構推薦:

Stanford CS106系列

CS106A: Programming Methodologies

算法推薦:

6.046(進階) Design and Analysis of Algorithms - MIT

MIT的6.006 Introduction to Algorithms

Coursera上的Princeton課程

Berkeley的CS61A 和 CS61B

學習完經典的數據結構和算法之后就可以去刷題了。

操作系統推薦:

CMU的15-213

Berkeley的CS162,

這兩個都是有視頻有lab的好課

還有一個非常經典的 MIT 6.828,附帶一個xv6 lab

課程:6.828: Operating System Engineering

組成原理、體系結構:

MIT的6.004,

CMU的15-213

Berkeley的CS61C

計算機網絡:

Stanford的CS144,lab 很有意思

五、新手快速自學的方法

一個原則,來自翁凱老師:

學計算機一定要有一個非常強大的心理狀態,計算機的所有東西都是人做出來的,別人能想的出來,我也一定能想得出來,在計算機的世界里沒有任何的黑魔法,所有的東西只不過是我現在不知道而已,總有一天我會把所有的細節、所有的內部的東西全搞明白的

建立抽象層,我自己的感悟

計算機里,幾乎都是人造的概念,大部分的東西,只要你一直深挖下去,幾乎都可以搞明白。

但是要注意時間成本,軟件行業已經不是一般的復雜和巨大,任何一個領域的知識的復雜性都足夠耗費掉我們一生的時間,所以一定要抓住主線,對于技術和知識,要學通用的、流行的,可以嘗試面向面試學習。

“打破砂鍋問到底”式的學習雖然精神可敬,但性價比并不劃算。

一定要學會在適當的層次上抽象出一層,并且認可這一層提供的接口,不去深究內部實現,了解原理即可,不必深究內部實現。

比如學習 HTTP,那么就先認可 TCP 提供的穩定可靠傳輸,而不繼續深挖 TCP 的內容,等到學習傳輸層的時候再去深入挖掘 TCP 具體實現。

也就是我們常說的面向接口/抽象編程。

視頻為主,看書為輔

新手,一定不要一直看書,保持看書的時間不超過 50%,按照下面的流程:

看書學習基本的理論

編程練習、實踐

有了新領悟,繼續看書

如此反復的循環。

責任編輯:lq6

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4784

    瀏覽量

    98073
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    41592

原文標題:學妹:大學四年以算法為重還是技術為重?

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【社區之星】向愨——通過文檔來梳理自己的思路,讓自己思維細致,規范

    嘉賓介紹 論壇ID:@川楠,研發工程師,社區試用達人 我記得我應該是上大學的加入發燒友,我當時就覺得發燒友這名字特別貼切。這個專業學習面特別寬,從模電到數電,從信號到編碼,從單片機到FPGA,從
    發表于 12-19 10:35

    typedef結構體使用

    雖然結構體的出現能夠讓我們有一個科學的數據結構來管理數據,但是每次使用結構體都需要struct...,未免顯得有些冗長和麻煩。有了type
    發表于 12-08 07:04

    通過優化代碼來提高MCU運行效率

    最高。 避免在32位MCU上頻繁使用8位char類型進行算術運算,因為可能需要符號擴展和截斷。 謹慎使用浮點數,如果必須用,盡量用float而非double,并考慮使用定點數運算替代。 算法數據結構
    發表于 11-12 08:21

    國密系列算法簡介及SM4算法原理介紹

    使用了Feistel結構(分組密碼中的一種對稱結構),其中密鑰擴展部分也使用了Feistel結構,所以對數據和密鑰的處理流程極為相似。下面對SM4加密過程進行闡述: 對于密鑰擴展部分
    發表于 10-24 08:25

    加密算法的應用

    ,加密和解密速度相對較慢,適用于數據量較小的場景,所以常用來傳輸對稱加密的密鑰。常見的非對稱加密算法包括RSA、ECC等。 4. 加密算法的應用場景 加密技術的應用場景非常廣
    發表于 10-24 08:03

    25年11月上海FPGA算法實現與應用技術高級研修分享

    下變頻、NCO等算法,還包括CFR、DPD等為提高功放效率的而設計的性很強的算法。   因此,本課程的目標,不僅是簡單的技術交流,更重要的是培養更多有能力參與數據流設計或者有能力深入解
    發表于 10-11 11:55

    AI的核心操控:從算法到硬件的協同進化

    ? ? ? ?人工智能(AI)的核心操控涉及算法、算力和數據三大要素的深度融合,其技術本質是通過硬件與軟件的協同優化實現對復雜任務的自主決策與執行。這一過程依賴多層技術棧的精密配合,從
    的頭像 發表于 09-08 17:51 ?989次閱讀

    離軸技術:賦能無人機精準配送的核心芯片應用

    的 “感知觸角”,能清晰捕捉空間磁場信號。 算法層面,動態干擾補償算法堪稱 “糾錯高手”。自適應磁場濾波會實時盯著電機電流和加速度數據,像天氣預報一樣預測本體干擾磁場,及時抵消誤差;
    發表于 09-05 16:32

    【HZ-T536開發板免費體驗】6、使用protoc-gen-gorm生成標準化的數據結構

    使用,網絡上的資料也是比較少的,所以,寫成腳本測試會簡單一些(也方便記錄,萬一以后忘記了就麻煩了)。 生成的文件如截圖 gorm的存儲數據結構 常規的數據結構和序列化、解序列方法 然后使用這些,就可以簡單寫一些保存espnow
    發表于 08-26 00:32

    電子發燒友工程師看!電子領域評職稱,技術之路扎實

    ,正是對這份技術積累的官方認可,更是咱們職業進階的 “硬核跳板”。今天結合平臺核心內容,聊聊評職稱對電子人的實在意義。? 對電子工程師而言,職稱是技術深度的 “通行證”。無論是 “中級電子工程師” 還是
    發表于 08-20 13:53

    盤點嵌入式就業所需要的技能有哪些?

    電路和數字電路的基本知識,了解智能硬件的工作原理。 - 具備良好的數據結構算法基礎,能夠進行高性能計算和數據處理。 - 了解物聯網技術原理
    發表于 08-11 15:43

    VirtualLab Fusion:精確的物理和數值控制

    速度vs.精度面板包含了不同的與采樣相關工具的選擇,例如奈奎斯特采樣,包括使用易于控制的滑塊來指定偏向速度或偏向精度。 傍軸假設面板允許用戶對系統應用近似值,從而加快傍軸系統的模擬
    發表于 05-15 10:33

    程序設計與數據結構

    的地址)出發,采用推導的方式,深入淺出的分析了廣大C程序員學習和開發中遇到的難點。 2. 從方法論的高度對C語言在數據結構算法方面的應用進行了深入講解和闡述。 3. 講解了絕大多數C程序員開發
    發表于 05-13 16:45

    模擬地和數字地混合PCB布局探討

    路徑過長,地環路過大。 圖2,模擬地和數字地分開,使用6層板單獨用一整層作為公共地,在ADC和DAC出將模擬地和數字地連接在公共地上然后公共地和電源入口地連接。 問題1、模擬地的DCDC應該歸為模擬地
    發表于 04-29 22:35

    學硬件好還是學軟件好?

    、計算機硬件等領域相關。 學習軟件則側重于編程、算法數據結構等方面。軟件工程師負責開發、測試和維護各種軟件應用程序,如操作系統、辦公軟件、游戲等。如果你對編程、數學、邏輯或解決復雜問題感興趣,那么
    發表于 04-07 15:27