小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

我的編程之路:知識(shí)管理與知識(shí)體系

 長(zhǎng)沙7喜 2018-01-09

本文的資料放到了Github Repohttps://github.com/wxyyxc1992/Coder-Knowledge-Graph)(本文介紹的這種筆記排布方式不一定適合于初學(xué)者理解)

六年前筆者開(kāi)始接觸到C語(yǔ)言,寫(xiě)了第一行HelloWorld。三年前開(kāi)始進(jìn)入工作崗位進(jìn)行實(shí)踐,前前后后參與了公司里、學(xué)校里也有十來(lái)個(gè)項(xiàng)目,自己也有多次自主創(chuàng)業(yè)的經(jīng)歷。在不懂事的時(shí)候,筆者自詡“全棧架構(gòu)師”,從前端的Android、iOS、Web,到中間件的Apache、Nginx,再到后端的Laravel、Spring、Rails、NodeJs,還有MySQL、Redis、Mongodb,有時(shí)候還要做些CI,用用Hadoop、Docker、Spark做做云計(jì)算環(huán)境,再實(shí)踐實(shí)踐機(jī)器學(xué)習(xí)的算法。呵呵,每當(dāng)想起這些,筆者腦中就閃過(guò)了孔乙己一字排開(kāi)八個(gè)大錢(qián)的畫(huà)面,只懂些名詞,真是連民科都不如。作為一個(gè)有底線的程序猿,知之為知之,不知為不知,雖然筆者在不長(zhǎng)的實(shí)踐生涯中“被迫”著了解了計(jì)算機(jī)軟件行業(yè)的許多方面,但是筆者在這里描述這個(gè)背景并不是自夸或者裝逼,只是想陳述一個(gè)事實(shí):如果你還沒(méi)有感到知識(shí)管理、知識(shí)歸檔的痛苦,那說(shuō)明你還了解的不夠多。如果你還只是停留在一字排開(kāi)數(shù)個(gè)名詞的階段,那說(shuō)明你了解的還不夠深。

技術(shù)分為術(shù)與道兩者,術(shù)即是具體的做事的方法,而道則是做事的邏輯抽象的原則與原理。一味地追求術(shù)的人往往都是希望走捷徑,不求甚解的。而道之所求也是符合一萬(wàn)小時(shí)原理,需要大量的付出與總結(jié)。借用數(shù)學(xué)之美中的例子,如果你想要去建立一個(gè)搜索引擎,直接拿來(lái)主義,用上Solr、ElasticSearch之類的,是術(shù)。而根據(jù)下載、索引與排序這三個(gè)抽象步驟來(lái)進(jìn)行提煉與升華,這就是道。計(jì)算機(jī)科學(xué)有兩類根本問(wèn)題。一類是理論:算法,數(shù)據(jù)結(jié)構(gòu),復(fù)雜度,機(jī)器學(xué)習(xí),模式識(shí)別,等等等。一類是系統(tǒng):操作系統(tǒng),網(wǎng)絡(luò)系統(tǒng),分布式系統(tǒng),存儲(chǔ)系統(tǒng),游戲引擎,等等等等。粗淺的說(shuō),學(xué)界會(huì)偏向前者,產(chǎn)界偏向后者,筆者作為一只一直讀書(shū)的從本科到碩士,見(jiàn)多了二者相互嫌棄。但是這二者相輔相成,筆者自己數(shù)學(xué)一直不好,對(duì)于那些公式啊推導(dǎo)畏如猛虎,但是用心看了之后,甚多樂(lè)趣啊。所謂舉一反三,見(jiàn)微知著,這都是需要在一個(gè)廣博的知識(shí)的基礎(chǔ)上才行,所以對(duì)于知識(shí),還是應(yīng)該拿來(lái)主義,來(lái)者不拒。

筆者回顧自己這幾年的風(fēng)雨歷程,老實(shí)說(shuō),談到絕望或者無(wú)奈的場(chǎng)景往往不是某個(gè)具體的問(wèn)題,能解決的問(wèn)題是一定可以解決的,而是在知識(shí)海洋面前,感受到了宇宙的浩瀚與人類的渺小。莊子有云:吾生也有涯,而知也無(wú)涯。以有涯隨無(wú)涯,殆已!筆者最常感覺(jué)痛苦的事情有二:

(1)學(xué)過(guò)的知識(shí)都忘了。筆者算來(lái)開(kāi)始用Java也有五年了吧,但是你現(xiàn)在要筆者立馬說(shuō)出JVM的架構(gòu)組成,筆者也是心有戚戚,吶吶不能言。我能夠記得的就是我系統(tǒng)的學(xué)習(xí)過(guò)五次,但是都忘了。再舉個(gè)例子,筆者之前學(xué)習(xí)語(yǔ)言的時(shí)候,因?yàn)楣ぷ麝P(guān)系同時(shí)在用Python、Java、Ruby、JavaScript,不談學(xué)的多深,當(dāng)時(shí)感覺(jué)最痛苦的就是老把每個(gè)語(yǔ)言怎么求取數(shù)組長(zhǎng)度給忘了或者搞混了,是不是覺(jué)得很傻比?或者每次寫(xiě)Java的時(shí)候,筆者都會(huì)覺(jué)得讀取文件好難好難,但是至少也寫(xiě)過(guò)上萬(wàn)行各種各樣的讀取文件的代碼了吧。我們構(gòu)建一個(gè)完備的知識(shí)體系,不是為了讓我們不會(huì)去忘記,而是讓我們忘了之后能以最快的速度學(xué)會(huì)。我們寶貴的時(shí)間不應(yīng)該浪費(fèi)在對(duì)于知識(shí)的重復(fù)學(xué)習(xí),Learn Once,Know Forever。

(2)寫(xiě)過(guò)的代碼都沒(méi)了。舉兩個(gè)例子吧,還是以Java為例,我們很多項(xiàng)目都會(huì)用到一些字符串輔助的方法,譬如加密或者編碼,然后筆者就發(fā)現(xiàn)每次做項(xiàng)目的時(shí)候都要把這些重寫(xiě)一遍。另一個(gè)呢,筆者學(xué)習(xí)Spark的時(shí)候,80%的時(shí)間都用來(lái)重復(fù)搭建虛擬機(jī)環(huán)境了,啪啪的。后來(lái)使用Docker之后才好一點(diǎn)。

授人以魚(yú)不如授人以漁,筆者一直覺(jué)得我這幾年磕磕碰碰精華所在就是這完整的知識(shí)體系架構(gòu),它給了我莫大的信心與勇氣去遨游在璀璨的知識(shí)長(zhǎng)河中。不積跬步無(wú)以至千里,編程之路亦如一場(chǎng)游戲,隨時(shí)學(xué)點(diǎn)知識(shí)拿個(gè)EXP,或者打個(gè)大魔王爆個(gè)裝備啥的,一個(gè)完備的知識(shí)體系或者知識(shí)圖譜,就是你的背囊,也是你行走在知識(shí)海洋里的一葉扁舟。當(dāng)然,本文所講也只是一家之言,做不得準(zhǔn),大家見(jiàn)仁見(jiàn)智。順便說(shuō)一句,筆者很感謝為知筆記為我提供了非常好用的工具,這里友情推廣一波。

知識(shí)應(yīng)該放在它應(yīng)該在的地方。

當(dāng)我要學(xué)習(xí)一門(mén)編程語(yǔ)言:C++/Java/PHP/Swift/Rust/Go…

筆者從學(xué)習(xí)第一門(mén)語(yǔ)言開(kāi)始,就被教導(dǎo)一個(gè)概念,學(xué)習(xí)一門(mén)語(yǔ)言的基礎(chǔ),也就是語(yǔ)法本身,不代表你掌握了這門(mén)語(yǔ)言。學(xué)習(xí)一門(mén)語(yǔ)言應(yīng)該是學(xué)習(xí)它所代表的完整的生態(tài)環(huán)境和在各個(gè)應(yīng)用場(chǎng)景下最合適的組合。同樣的,筆者大大小小算是用過(guò)七八門(mén)語(yǔ)言,當(dāng)然,你為了學(xué)習(xí)而去學(xué)習(xí),用語(yǔ)言的數(shù)量標(biāo)榜自己是毫無(wú)意義的。但是,每個(gè)語(yǔ)言都有其特性,就像才接觸Python時(shí)候它的弱類型、快速開(kāi)發(fā)的便捷以及后面應(yīng)用到大型程序開(kāi)發(fā)時(shí)候的代碼混亂都給我留下了深刻的印象。往往說(shuō)一門(mén)語(yǔ)言不好是因?yàn)槟銢](méi)學(xué)到家,但是就所處的技能水準(zhǔn)和應(yīng)用場(chǎng)景而言各個(gè)語(yǔ)言還是各有其優(yōu)勢(shì)的。筆者看現(xiàn)有的很多教程,以Java為例,它的講解方式以及應(yīng)用示例都是基于JDK本身和Java語(yǔ)言本身的特點(diǎn)的。那么筆者自己總結(jié)的這份所謂的編程語(yǔ)言的知識(shí)結(jié)構(gòu)圖或者拓?fù)鋱D,是會(huì)抽象了各個(gè)語(yǔ)言的特性而形成。唔,譬如筆者最早是在JavaScript中,在用jQuery的時(shí)候接觸到了Promise的概念,后來(lái)在Java、在Swift中都發(fā)現(xiàn)了類似的,但不一定叫這個(gè)名字的用法或者第三方類庫(kù),那么我們?cè)谧龉P記時(shí),首先要知道,你現(xiàn)在所學(xué)的,是應(yīng)該放在哪一部分。

語(yǔ)法基礎(chǔ)

學(xué)習(xí)一門(mén)語(yǔ)言呢,肯定首先要去學(xué)習(xí)它的語(yǔ)法基礎(chǔ),那學(xué)習(xí)語(yǔ)法基礎(chǔ)的時(shí)候,我們要掌握哪幾個(gè)方面呢,筆者大概歸類到入門(mén)概述、Quick Start、數(shù)據(jù)結(jié)構(gòu)、流程控制與異常處理、函數(shù)、模塊與組件、類與對(duì)象以及IO這幾個(gè)部分。

入門(mén)概述

在這里你要了解這門(mén)語(yǔ)言的由來(lái),它的特點(diǎn),它的基本面貌。譬如你要了解下它各個(gè)版本迭代的特點(diǎn)。就像Java 8提出之后,你需要專門(mén)的對(duì)于Java8的語(yǔ)法特性進(jìn)行一些了解,但是對(duì)于某個(gè)具體的語(yǔ)法知識(shí)點(diǎn)還是應(yīng)該放到對(duì)應(yīng)的語(yǔ)法講解的位置。譬如Java8里面提出了函數(shù)式接口,那這部分具體的講解還是應(yīng)該放置到接口那一部分。

其次呢,你還要在這邊了解基本的注釋與代碼分割的規(guī)范,就好像筆者初學(xué)Python的時(shí)候,這貨沒(méi)有大括號(hào),用的是縮進(jìn)分割的方法,讓才從C++/Java走過(guò)來(lái)的筆者一頓酸爽。

接下來(lái),在入門(mén)概述這邊,你還要放外部資料的鏈接。你不可能把全部的你看到的資料轉(zhuǎn)化為自己的筆記,那么你需要把所有的你看到的有價(jià)值的參考資料地址存放在這里。筆者大概分為了:

  • Tutorial & Docs:入門(mén)教程和指導(dǎo)相關(guān)

  • Practice&Tips:實(shí)踐、小貼士相關(guān),就好像Github上流行的awesome-系列,就要把鏈接放這

  • Forum&Lessons:一些論壇和在線的視頻教程地址

  • Blog&News:博客和資訊

  • Book&Resources:參考的書(shū)籍啊、資源啊放這里

Quick Start

學(xué)習(xí)一門(mén)語(yǔ)言的時(shí)候,你肯定會(huì)寫(xiě)HelloWorld,筆者在上面強(qiáng)調(diào)過(guò),做筆記的一個(gè)目的就是在未來(lái)某天你可能全部忘記的時(shí)候能夠以最快的速度學(xué)會(huì),那么你再次學(xué)習(xí)的時(shí)候肯定會(huì)去繼續(xù)寫(xiě)HelloWorld。在這一部門(mén),你需要知道怎么搭建開(kāi)發(fā)環(huán)境,特別推薦是也要學(xué)下怎么使用Docker去搭建開(kāi)發(fā)環(huán)境。接下來(lái)呢,你要學(xué)下構(gòu)建工具和依賴管理工具。在早年,筆者才學(xué)Java,還不知道用Maven的時(shí)候,那個(gè)時(shí)候根本分不清什么構(gòu)建啊、依賴管理的概念,每次要用jar包了只能手動(dòng)拖拽,真心呵呵噠。當(dāng)然,一門(mén)優(yōu)秀的編程語(yǔ)言一定要有其對(duì)應(yīng)的構(gòu)建與依賴管理工具,這樣才能促進(jìn)整個(gè)社區(qū)的活躍與交流。然后你要看看怎么進(jìn)行代碼部署,就好像Python的Notebook、Swift的PlayGround這些個(gè)神奇的東西,還是非常好用的。

最后呢,還要看看常用的IDE,不過(guò)筆者目前基本上就用的是Atom加上Jetbrains(感恩)這一個(gè)系列。唔,之前看到很多大牛喜歡用Sublime啊Vim來(lái)寫(xiě)代碼,我表示,這個(gè)逼還是不要裝的好。

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

學(xué)完了HelloWorld,我們就要來(lái)看看數(shù)據(jù)結(jié)構(gòu)了,這是一個(gè)編程語(yǔ)言的基石所在。那么不論哪一種語(yǔ)言,它會(huì)提供給我們哪些知識(shí)呢。

(1)首先是知道怎么去定義變量與常量。就好像JavaScript里面的var、let,以及未來(lái)Java里面會(huì)加入的val,變量定義的方式也是有很多種的。還有就是要了解下系統(tǒng)的內(nèi)置的常量,這個(gè)在使用PHP進(jìn)行開(kāi)發(fā)的時(shí)候比較用得上。接下來(lái),要看看這個(gè)變量是怎么賦值的,是必須單個(gè)賦值還是能夠鏈?zhǔn)劫x值,或者是像JavaScript這樣還能支持解構(gòu)賦值。最后呢,這一部分還要看看你怎么進(jìn)行類型、格式判斷的,好比 instanceoftypeof這些操作符,都是在這里介紹的。

(2)然后呢要看看一些基本的數(shù)據(jù)類型。首先是數(shù)值類型,是分為了整型、浮點(diǎn)型還是像OJC這樣的全是NSNumber,還要看看原始類型和非原始類型的區(qū)別。如果是數(shù)值的話,還要看看怎么獲取隨機(jī)數(shù)、怎么進(jìn)行科學(xué)計(jì)算、怎么進(jìn)行類型轉(zhuǎn)換。接下來(lái),還要看看空類型、布爾類型、可選類型和枚舉類型是怎么定義的。

(3)接下來(lái)呢,看看字符串類型是怎么用的。字符串也是每個(gè)語(yǔ)言必備的,說(shuō)難不難,說(shuō)簡(jiǎn)單吧,那么多用法呢?;旧暇鸵纯此窃趺磩?chuàng)建增刪、怎么索引遍歷、怎么進(jìn)行類型編碼還有些像反向啊之類的基本操作。這里面也會(huì)有很多小的知識(shí)點(diǎn),譬如Java里面字符串是不可變類型,譬如PHP里面你連接字符串不能用加號(hào)。

(4)然后呢,就要看看結(jié)構(gòu)體是怎么定義的了,這個(gè)在Swift里面還是挺重要的,不過(guò)在有些語(yǔ)言里就沒(méi)有。

(5)下面就要看看基本的時(shí)間日期類型,這里還會(huì)涉及到時(shí)區(qū)轉(zhuǎn)換啊、日歷啊等等方面。基本上各個(gè)語(yǔ)言的時(shí)間日期,要么是原生提供的不錯(cuò),要么就會(huì)有第三方類庫(kù)支持,譬如JavaScript中的Moment.js,還是很不錯(cuò)的。

(6)上面講的幾個(gè)數(shù)據(jù)類型都還好,現(xiàn)在開(kāi)始就要了解高級(jí)復(fù)雜數(shù)據(jù)類型,也就是所謂的集合了。筆者把集合分為了序列類型與鍵值索引兩大部分,譬如分別對(duì)應(yīng)Java中的List和Map。這邊也是要了解集合的創(chuàng)建增刪、索引遍歷、類型轉(zhuǎn)換還有排序啊、查找啊等等高級(jí)用法。

(7)最后在這里還要學(xué)學(xué)不可變數(shù)據(jù),這一點(diǎn)在函數(shù)式編程里面很流行,就好像Facebook提供的Immutable.js這個(gè)類庫(kù),還是很不錯(cuò)的。

流程控制與異常處理

接下來(lái)就要看看流程控制與異常處理方面的知識(shí)了,首先要知道運(yùn)算符相關(guān),像邏輯運(yùn)算符啊、加減運(yùn)算符啊還有運(yùn)算符重載(運(yùn)算符重載是能用于數(shù)據(jù)分析計(jì)算的語(yǔ)言的一個(gè)重要優(yōu)勢(shì))。然后要看看怎么進(jìn)行分支選擇的,也就是常見(jiàn)的if、switch語(yǔ)句,在Swift中還有g(shù)uarantee這樣好用的語(yǔ)句。接下來(lái)就要看看怎么進(jìn)行常見(jiàn)的循環(huán)了,最經(jīng)典的肯定就是for循環(huán),之后各個(gè)語(yǔ)言也都各有擴(kuò)充,像什么for-in、for-of、forEach循環(huán),它們都是屬于循環(huán)遍歷。還有就是while以及do-while這種變種。

看完了循環(huán)下面繼續(xù)看看流程控制,就像break、continue這種,還有g(shù)oto這樣可以隨便亂跳的語(yǔ)句。下面要繼續(xù)了解些作用域相關(guān)的知識(shí),像JavaScript里面,一不小心就全局作用域了。然后還有關(guān)于迭代器的知識(shí),在很多語(yǔ)言里迭代器和生成器是密不可分的,而在Java里面迭代器是一個(gè)接口。迭代器放在流程控制里也是因?yàn)橐话銇?lái)說(shuō)迭代器也是用于循環(huán)的。

最后,我們要來(lái)看看異常處理,包括怎么定義異常、怎么拋出異常,還有怎么用try-catch-finally這種形式來(lái)捕獲和處理異常。Swift里面提供了try?的用法,也是非常Sweet。

函數(shù)

接下來(lái)我們繼續(xù)學(xué)習(xí)函數(shù)的概念,唔,像Java這種完全的OO的語(yǔ)言,是沒(méi)有函數(shù)的,里面只有方法,這也是它經(jīng)常被詬病的地方,老說(shuō)別的語(yǔ)言HelloWorld就一行,但是Java里面要寫(xiě)好多行。在這里筆者是把包括方法啊、函數(shù)都放在這邊介紹。

(1)函數(shù)定義首先呢要來(lái)看看函數(shù)是怎么定義的,不同的語(yǔ)言里定義方式有區(qū)別有交集。像有什么func、function、define等等N多不同的關(guān)鍵字。要注意下這個(gè)函數(shù)是不是需要返回值的,像Java里面沒(méi)有返回值就是void,而Swift里面可以寫(xiě)可以不寫(xiě),還有很多弱類型語(yǔ)言里沒(méi)有返回值。另外還要看看怎么定義函數(shù)變量,這個(gè)和閉包經(jīng)常放在一起使用。

(2)參數(shù)調(diào)用看完了定義再看看參數(shù)定義和調(diào)用方式。參數(shù)的話需要了解下有沒(méi)有默認(rèn)參數(shù)和外部參數(shù)。筆者剛接觸OJC的時(shí)候,它的外部參數(shù)確實(shí)大大提高了可讀性,后來(lái)Swift繼承并且發(fā)揚(yáng)光大了。下面就要看看不定參數(shù),譬如怎么在Java里面定義不定參數(shù)。最后,要看看引用傳值和復(fù)制傳值的區(qū)別,在有些語(yǔ)言里還存在有in-out這樣的關(guān)鍵字。

(3)匿名函數(shù)/Lambda/閉包Java8里面引入了Lambda的用法,Lambda本身也是函數(shù)式編程的一枚標(biāo)桿,是一種設(shè)計(jì)模式吧。這里要看看Lambda怎么用,像有的語(yǔ)言里是->,有的是=>,這個(gè)要區(qū)分下。還有就是看看閉包怎么定義,Swift里面提供了一個(gè)尾隨閉包的調(diào)用方式,非常方便。

(4)生成器生成器、yield,最早筆者是在Python中接觸到的,現(xiàn)在看ES里面也引入了這個(gè)概念。生成器一般和迭代器搭配在一起使用,不過(guò)也可以用來(lái)編寫(xiě)異步代碼。

(5)裝飾器裝飾器感覺(jué)有點(diǎn)像AOP的概念,筆者也是在Python和Angular2中接觸到的。

(6)函數(shù)柯里化和反柯里化在計(jì)算機(jī)科學(xué)中,柯里化(英語(yǔ):Currying),又譯為卡瑞化或加里化,是把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)(最初函數(shù)的第一個(gè)參數(shù))的函 數(shù),并且返回接受余下的參數(shù)而且返回結(jié)果的新函數(shù)的技術(shù)。這個(gè)技術(shù)由 Christopher Strachey 以邏輯學(xué)家哈斯凱爾·加里命名的,盡管它是 Moses Sch?nfinkel 和 Gottlob Frege 發(fā)明的。這是來(lái)自維基百科的名詞解釋。顧名思義,柯里化其實(shí)本身是固定一個(gè)可以預(yù)期的參數(shù),并返回一個(gè)特定的函數(shù),處理批特定的需求。這增加了函數(shù)的適用 性,但同時(shí)也降低了函數(shù)的適用范圍。筆者在JavaScript與Scala會(huì)比較常用這個(gè)特性,這里以JavaScript為例說(shuō)明柯里化的核心思想。

模塊與組件

這里主要學(xué)習(xí)下模塊化的概念,譬如Java、C#里面都會(huì)存在有命名空間,而Swift里是全局命名空間。還有像ES6里,這個(gè)export、import關(guān)鍵字到底是咋用的。

類與對(duì)象

筆者還真沒(méi)接觸過(guò)Lisp、Haskell這樣純函數(shù)式語(yǔ)言,基本上都是OO的吧。那么類與對(duì)象也就是非常重要的一個(gè)部分。

(1)類的定義怎么定義類、怎么用public、private、protected或者類似的方法來(lái)劃分可見(jiàn)域、怎么來(lái)劃分屬性。像Swift里面還有延遲加載啊、屬性監(jiān)控啊等等。怎么來(lái)定義方法(和上面的函數(shù)一起看)。

(2)對(duì)象怎么初始化對(duì)象,有的語(yǔ)言里有new,有的沒(méi)有。怎么實(shí)踐單例模式。還有就是this或者self這樣類似的用法到底干啥的,像JavaScript里面,因?yàn)樽钤绲臅r(shí)候沒(méi)有OO的概念,各種自定義的對(duì)象,這時(shí)候this的用法也就非常的雜亂。還有就是對(duì)象屬于哪個(gè)類型進(jìn)行的判斷,這一點(diǎn)和變量章節(jié)有所重復(fù)。

(3)繼承怎么繼承一個(gè)對(duì)象,還有就是繼承之后的方法對(duì)于訪問(wèn)的父類中的屬性啊、重載啊咋搞的,這個(gè)在Java面試題里面經(jīng)常碰到。

(4)抽象類、接口/協(xié)議與委托怎么定義抽象類或者接口,在Swift和OJC中是協(xié)議的概念,還有就是譬如Java中的怎么定義一個(gè)注解。

(5)內(nèi)部類這個(gè)在Java中用的比較多,又分為靜態(tài)內(nèi)部類、成員內(nèi)部類、局部?jī)?nèi)部類以及匿名內(nèi)部類。

(6)反射與類裝載

IO

這里介紹基本的輸入輸出的方法,包括控制臺(tái)的輸入輸出、參數(shù)的處理、文件基本的讀寫(xiě),還有像Java里面繁多的什么字節(jié)流、字符流啊進(jìn)行介紹。

語(yǔ)法應(yīng)用

學(xué)完了語(yǔ)法基礎(chǔ),那我們的筆記就要進(jìn)入其他的具體的應(yīng)用了,這里又分為Advanced、Storage、TestRelease、SysProc這幾個(gè)部分。

Advanced

在這里就要進(jìn)行泛型編程、內(nèi)存管理、序列化和反序列化、編程規(guī)范和代碼風(fēng)格以及由該語(yǔ)言實(shí)現(xiàn)的算法的學(xué)習(xí)。

Network

本部分主要介紹網(wǎng)絡(luò)訪問(wèn)、網(wǎng)絡(luò)調(diào)用相關(guān)。包括了NetworkManagement(網(wǎng)絡(luò)管理)、Socket、HttpClient(網(wǎng)絡(luò)客戶端)、RPC/RMI(遠(yuǎn)程調(diào)用)

Storage

在這里存放文件系統(tǒng)、數(shù)據(jù)庫(kù)存儲(chǔ)等等相關(guān)的內(nèi)容。包括了緩存,像Java里緩存又會(huì)分為on-heap和off-heap兩種。然后就要看看常見(jiàn)的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)包括了KeyValue數(shù)據(jù)庫(kù),最常見(jiàn)的就是Redis。還有文檔型數(shù)據(jù)庫(kù),最常見(jiàn)的就是Mongodb,還有關(guān)系型數(shù)據(jù)庫(kù)。關(guān)系型數(shù)據(jù)庫(kù)的使用中又要注意ORM和數(shù)據(jù)庫(kù)分區(qū)分表等等插件。

TestRelease

這里主要是測(cè)試啊、發(fā)布啊相關(guān)的內(nèi)容。包括了單元測(cè)試,像JUnit、Debug,像在PHP里面用XDebug實(shí)現(xiàn)單步調(diào)試,還有Log 日志,像著名的log4j,還有就是運(yùn)行狀態(tài)監(jiān)控。

SysProc

這里主要存放系統(tǒng)進(jìn)程相關(guān)的內(nèi)容,包括了切面編程和最重要的并發(fā)、同步相關(guān)的知識(shí)。

(1)并發(fā)并發(fā)這部分要了解多線程的基本概念、線程通信的基本概念?;镜漠惒侥J?,像Promise、Callback啊等等,還有就是異步的數(shù)據(jù)流,也就是消息總線,還有就是響應(yīng)式開(kāi)發(fā)。

(2)同步與線程安全這邊要了解鎖的基本概念,譬如Java中的synchronized和Lock。然后還要了解一些內(nèi)建的線程安全的數(shù)據(jù)結(jié)構(gòu)。

當(dāng)我要學(xué)習(xí)客戶端開(kāi)發(fā):iOS/Android/Hybrid/WebAPP

隨著前后端分離的概念日漸流行,實(shí)際上現(xiàn)在包括Web領(lǐng)域都可以認(rèn)為是一個(gè)客戶端。筆者閱讀REST這篇論文的時(shí)候,最大的感受就是徹底的C/S化與無(wú)狀態(tài)化。那么,在這一部分,筆者要解決的問(wèn)題同樣是,當(dāng)我要學(xué)習(xí)Android/iOS/WebAPP的時(shí)候,我應(yīng)該學(xué)些什么。這一部分會(huì)比上面的更加復(fù)雜,全部的列表可以看這里。

Language

此部分主要介紹用于開(kāi)發(fā)對(duì)應(yīng)程序的語(yǔ)言詳情,基本上和上面的編程語(yǔ)言知識(shí)體系結(jié)構(gòu)相一致。

UI:界面呈現(xiàn)

這一部分基本上是整個(gè)客戶端開(kāi)發(fā)的最重要的地方,首先在UI.md中介紹界面呈現(xiàn)的基本原理,什么Screen、坐標(biāo)系之類的。

Components(基本組件)

本部分要介紹系統(tǒng)自帶的基本組件,譬如Android里面的Activity、Fragment,iOS里面的UIView、UIViewController等等。此外,還需要介紹:

(1)Layout & Position此部分介紹基本的布局與定位的知識(shí)。包括基本的布局約束,譬如左邊距、右邊距、居中等等。然后是基本的定位方式,包括絕對(duì)布局、相對(duì)布局、彈性布局和線性布局等等。接下來(lái)是基本的布局管理器,Android開(kāi)發(fā)的同學(xué)應(yīng)該對(duì)這個(gè)概念不陌生。然后就是自動(dòng)布局或者所謂的響應(yīng)式布局,對(duì)應(yīng)了iOS中的AutoLayout和Web里面的響應(yīng)式開(kāi)發(fā)。

(2)Container此部分主要介紹經(jīng)常的作為容器的View,一個(gè)是頁(yè)卡視圖,就是常說(shuō)的TabBar,譬如Android中的Tab、iOS中的TabbarController等等。還有導(dǎo)航視圖,就是NavigationView,譬如iOS中的UINavigationController。最后是最常用的滾動(dòng)視圖,ScrollView,譬如Web中的Swiper等等。滾動(dòng)視圖還要解決幾個(gè)問(wèn)題:Infinite Scroll、上拉下拉刷新以及像ViewPager這樣的基于頁(yè)面的滑頁(yè)式滾動(dòng)。

(3)Router:頁(yè)面路由譬如ui-router等等。

Interaction(用戶交互)

本部分主要介紹用戶交互相關(guān)知識(shí)。

(1)Event&Gesture(事件與手勢(shì)操作) 這里對(duì)于用戶常見(jiàn)的點(diǎn)擊、拖拽等事件進(jìn)行響應(yīng)處理,包括了基本事件的綁定與監(jiān)聽(tīng)、事件捕獲傳遞與分發(fā)機(jī)制以及復(fù)雜手勢(shì)的監(jiān)聽(tīng)與識(shí)別,譬如多點(diǎn)觸控、拖拽、滾動(dòng)】縮放和搖晃等。

(2)Media(音視頻播放、錄制與相關(guān)操作)主要包括了對(duì)于相機(jī)的基本操作、對(duì)于Audio的基本操作以及對(duì)于Video的播放。還包括譬如語(yǔ)音輸入啊、直播啊等等。

(3)Sensor本部分主要包括對(duì)于各種傳感器,包括陀螺儀、重力傳感器等的使用,譬如iOS的HealthKit就是放在這里的。

(4)Notification這里記錄對(duì)于通知欄的操作,包括本地通知與遠(yuǎn)程推送的通知。

DVisual(繪圖以及數(shù)據(jù)可視化)

本部分主要對(duì)于基本的繪圖與數(shù)據(jù)可視化進(jìn)行了記錄,包括但不限于:

(1)Graphics 這里記錄了基本的繪圖、畫(huà)筆的使用,包括了像顏色與取色、頭像啊、表情啊之類的處理。

(2)Style&Theme 樣式與主題的處理,在Android中就會(huì)經(jīng)常涉及到樣式與主題的概念,還有什么夜間模式、日間模式之類的。

(3)Filter 這里進(jìn)行基本的濾鏡與過(guò)濾的處理,注意,這里與圖片部分的濾鏡區(qū)別在于這里的濾鏡是面向于某個(gè)View,而不僅僅是圖片進(jìn)行的。

(4)Chart 這里記錄各種圖表,什么折線圖、餅狀圖等等。

(5)Map 這里記錄地圖相關(guān),像對(duì)于百度地圖的使用就放在這里。

(6)Barcode 這里記錄二維碼、條形碼相關(guān)的內(nèi)容。

Animation(動(dòng)畫(huà)與變換)

本部分主要記錄動(dòng)畫(huà)以及常見(jiàn)的變換的內(nèi)容,包括了動(dòng)畫(huà)構(gòu)造庫(kù)以及常見(jiàn)的動(dòng)畫(huà)集合。動(dòng)畫(huà)構(gòu)造庫(kù)的話又會(huì)分為幀動(dòng)畫(huà)與屬性控制這兩種。

Widgets(界面插件)

這里存放各式各樣的插件,算是最復(fù)雜的一塊。全部的列表可以看這里。

(1)Dialog:對(duì)話框插件 包括了模態(tài)對(duì)話框、彈出層與提示層、覆蓋層、Action Sheet等等。

(2)Indicator:指示器包括了介紹或者引導(dǎo)頁(yè)、時(shí)間顯示、進(jìn)度顯示、文本顯示以及效果、標(biāo)簽顯示以及效果等等。

(3)Picker:輸入器包括了按鈕、菜單、狀態(tài)欄/工具欄、選擇器、文本輸入、時(shí)間與日期輸入等等。

(4)TableGrid:網(wǎng)格與表單包括了基本的列表的使用、網(wǎng)格的使用以及卡片式界面的使用。譬如iOS 的 UITableView、Android的CardView、RecycleView都要放在這里。

(5)Gallery:畫(huà)廊包括了圖片的基本操作,譬如圖片的加載、懶加載、緩存、動(dòng)圖的播放與控制、圖片濾鏡、圖片標(biāo)簽、圖片貼紙、圖片裁剪與美化等等。還有圖片相冊(cè)的瀏覽、圖片輪播、瀑布流方式圖片展示、焦點(diǎn)圖瀏覽等等。

(6)WebView包括了WebView的基本使用、本地交互以及Cordova的集成等等。

Network:網(wǎng)絡(luò)調(diào)用

本部分主要講解網(wǎng)絡(luò)調(diào)用,包括了:

(1)網(wǎng)絡(luò)管理譬如網(wǎng)絡(luò)可達(dá)性判斷、打開(kāi)網(wǎng)絡(luò)等等放在這。

(2)Socket

(3)HttpClient常見(jiàn)的網(wǎng)絡(luò)客戶端的使用,譬如Android中的okHttp、iOS中的AFNetwork等等的基本使用都放在這,基本的請(qǐng)求管理、并發(fā)請(qǐng)求等等。注意,這里還有一個(gè)叫HTTPStubs或者M(jìn)ockServer,是方便開(kāi)發(fā)或者測(cè)試進(jìn)行的本地偽裝網(wǎng)絡(luò)請(qǐng)求。

(4)Push本部分進(jìn)行推送與長(zhǎng)連接實(shí)現(xiàn)的內(nèi)容。

(5)FileTransfer本部分進(jìn)行基本的文件傳輸,上傳和下載的記錄。

(6)Serialization本部分進(jìn)行常見(jiàn)的譬如JSON、FlatBuffer以及MsgPack序列化的研究。

Storage:存儲(chǔ)

本部分主要對(duì)于存儲(chǔ)相關(guān)的內(nèi)容進(jìn)行記錄,包括:

(1)DataBase(數(shù)據(jù)庫(kù)) 像iOS的CoreData、SQLite的使用,以及最近比較火的Realm的使用。

(2)File(文件) 這里記錄了基本的文件瀏覽與訪問(wèn),還有對(duì)于配置文件、資源文件的使用等等。

(3)Cache(緩存系統(tǒng))

SysProc:系統(tǒng)與進(jìn)程

(1)組件之間的通信 像Android中利用AIDL進(jìn)行通信、利用ContentProvider進(jìn)行通信等等。

(2)并發(fā)與異步

(3)服務(wù)

(4)RPC:遠(yuǎn)程服務(wù)調(diào)用

TestRelease

本部分主要記錄測(cè)試與發(fā)布相關(guān)的內(nèi)容:

(1)Debug(調(diào)試與記錄) 包括日志、線程與Crash的監(jiān)控等等

(2)Test 包括了單元測(cè)試、界面測(cè)試以及第三方測(cè)試等等。

(3)Release 包括了Android中的簽名、iOS里面的提交到AppStore的流程還有類似于云測(cè)這樣的第三方測(cè)試。

(4)Optimization 優(yōu)化

(5)Plugin & Dynamic Patch(插件化與動(dòng)態(tài)更新) 這個(gè)在Android中用的比較多,像阿里的那個(gè)可以動(dòng)態(tài)更新的工具。

(6)APM:應(yīng)用狀態(tài)追蹤與評(píng)分

當(dāng)我要學(xué)習(xí)服務(wù)端開(kāi)發(fā):SpringMVC/Laravel/Rails

  • Introduction

  • Quick Start

  • Installation

  • Generator

  • Dependence Managent:依賴管理與自定義模塊導(dǎo)入

  • Deployment

  • Application

  • LifeCycle

  • Configuration

    • Multiple Modules

  • Route

  • Controller

  • Request

  • Session

  • Response

    • Pagination

  • Model

  • Relational DataBase

    • ORM

    • MySQL

    • Oracle

    • SQLServer

    • PostgreSQL

  • NoSQL

    • MongoDB

  • Cache

    • Redis

    • Memcache

  • View

  • Template

  • Middleware

  • Auth

  • Service

  • IoC/DI

  • Log

  • Test

  • Concurrence

  • Queue

筆者在這里打個(gè)廣告,介紹下筆者自己借鑒了微服務(wù)、Redux等等雜七雜八東西之后對(duì)于RESTful深入理解提出的一些構(gòu)想:Reactive Abstract Resource Flow(https://segmentfault.com/a/1190000004600730

當(dāng)我要學(xué)習(xí)數(shù)據(jù)科學(xué):MachineLearning/NLP/DeepLearning/Statistic

這是筆者自己的一個(gè)數(shù)據(jù)科學(xué)的Gitbook

對(duì)于數(shù)據(jù)科學(xué)這部分,筆者自己也正在完善中,只能是大概如下:

  • Methodology:方法理論

    • PatternMatch:模式識(shí)別

    • SentimentAnalysis:情感分析

    • TopicModel:主題模型

    • Word2Vec:詞向量

    • ANN:人工神經(jīng)網(wǎng)絡(luò)

    • Clustering:聚類

    • Regression:回歸

    • SVM

    • DataProcess:數(shù)據(jù)處理

    • MachineLearning:機(jī)器學(xué)習(xí)的計(jì)算算法

    • NLP:自然語(yǔ)言處理

  • Library:開(kāi)發(fā)庫(kù)

    • Scikit

    • Tensorflow

    • Weka

    • Deeplearning4j

    • MLib

    • Madout

    • ClusterComputing

    • Java

    • MATLAB

    • Python

    • R

  • Application:應(yīng)用

    • Classification:分類

    • CommunityDetection:社團(tuán)發(fā)現(xiàn)

    • Personas:用戶標(biāo)簽畫(huà)像

    • Recognition:模式識(shí)別

    • RecommendSystem:推薦系統(tǒng)

當(dāng)我要學(xué)習(xí)云計(jì)算與大數(shù)據(jù)的基礎(chǔ)架構(gòu):分布式計(jì)算/運(yùn)維/存儲(chǔ)/虛擬化

云計(jì)算和大數(shù)據(jù)的概念很火啊,作為一個(gè)程序狗,筆者也是算是從四年前就開(kāi)始接觸到這方面的技術(shù),不過(guò)講真,因?yàn)闆](méi)去過(guò)大公司,只能看著啥阿里、美團(tuán)在InfoQ、程序員雜志上分享自己的高可用平臺(tái)眼饞。很多技術(shù)筆者在自己的電腦上用過(guò),也一直保持關(guān)注,但還真沒(méi)投入過(guò)實(shí)戰(zhàn)。這一部分在筆者筆記內(nèi)的代號(hào)是Infrastructure,就是基礎(chǔ)架構(gòu),主要包括了DCE(分布式計(jì)算環(huán)境)、Distributed(分布式)、OM(運(yùn)維)、Storage(存儲(chǔ))以及Virtualization(虛擬化)這幾個(gè)方面。

DCE:分布式計(jì)算環(huán)境

分布式計(jì)算環(huán)境主要會(huì)介紹基于批式計(jì)算和流式計(jì)算的常見(jiàn)的框架和原理,這里推薦一波筆者翻譯的:Apache流計(jì)算框架對(duì)比。常見(jiàn)的批處理框架就是Hadoop的MapReduce和Spark(不知道有沒(méi)有理解錯(cuò)) ,而流處理框架包括但不限于Flink、Storm還有Spark Streaming 。

Distributed:分布式系統(tǒng)

分布式系統(tǒng)這部分,一方面要了解分布式系統(tǒng)的基本的知識(shí)原理,另一方面就是應(yīng)用了,筆者主要分為了以下幾個(gè)部分:

  • JobSchedule:任務(wù)調(diào)度與管理,譬如Disque

  • MOM:消息中間件,像Kafka、RabbitMQ、ZeroMQ這些

  • ProgramModel:編程模型

  • ResManager:資源管理,典型的就是Yarn和Mesos

  • ServiceCoordination:服務(wù)發(fā)現(xiàn)和服務(wù)調(diào)度,典型的就是Zookeeper和Etcd,話說(shuō)阿里的Dubbo我也放在這了,確實(shí)不錯(cuò)的。

OM:運(yùn)維管理

這部分是運(yùn)維管理,也包含了DevOps的很多理念在這邊,主要就是:

  • ContinuousDelivery:持續(xù)交付,也包括了CI的概念,像Jenkins這樣的工具介紹

  • Log:日志

    • ELK

    • Flume

  • MonitorAnalytic:應(yīng)用追蹤與分析

Storage:存儲(chǔ)

這部分就是介紹各種各樣的存儲(chǔ)系統(tǒng):

  • Cache:緩存,著名的Memcache就放在這

  • DataBase:數(shù)據(jù)庫(kù)系統(tǒng)

    • MySQL

    • Oracle

    • SQLServer

    • ColumnOriented:列數(shù)據(jù)庫(kù),譬如HBase

    • Document:文檔型數(shù)據(jù)庫(kù),譬如Mongodb、Cassandra

    • Graph:圖數(shù)據(jù)庫(kù)

    • KeyValue:鍵值數(shù)據(jù)庫(kù),譬如Redis

    • Relational:關(guān)系型數(shù)據(jù)庫(kù)

  • DataWareHouse:數(shù)據(jù)倉(cāng)庫(kù),譬如Hive

  • ETL:數(shù)據(jù)存儲(chǔ)過(guò)程,譬如Kettle

  • FileSystem:文件系統(tǒng)

    • NTFS

    • ext4

    • RAMFS:譬如Taycon

Virtualization:虛擬化

這部分主要介紹虛擬化的相關(guān)知識(shí)和原理,大概如下:

  • Container:容器技術(shù),很火的,不多說(shuō)

    • Docker

    • Rocket

  • OpenStack

  • SandBox:傳統(tǒng)的沙箱的技術(shù)

  • Hypervisor

    • Xen

    • VShpere

當(dāng)我要學(xué)習(xí)信息安全:移動(dòng)安全/計(jì)算機(jī)取證/滲透測(cè)試/逆向工程/加固

筆者本科里學(xué)習(xí)的是信息安全,當(dāng)時(shí)做Windows驅(qū)動(dòng)開(kāi)發(fā)的,每天扒MSDN的文檔,當(dāng)時(shí)是以越向下為榮,現(xiàn)在想想就覺(jué)得好凄慘。后來(lái)筆者的第一份兼職也是和信息安全相關(guān),也搞過(guò)站抓過(guò)雞,不過(guò)后來(lái)覺(jué)得唔至少在自己淺薄的認(rèn)知里,做安全很大程度上是去發(fā)現(xiàn)現(xiàn)有系統(tǒng)的問(wèn)題,不能說(shuō)無(wú)聊,只能說(shuō)沒(méi)有做工程開(kāi)發(fā)那樣讓我來(lái)的有興趣。筆者在自己的信息安全相關(guān)的學(xué)習(xí)中,大概進(jìn)行了如下歸類:

  • ComputerForensics:計(jì)算機(jī)取證相關(guān)

  • Cryptology:密碼學(xué)與編碼相關(guān)

  • MobileSecurity:移動(dòng)安全,包括像應(yīng)用程序的逆向還有木馬啊、系統(tǒng)破解啊之類的,筆者當(dāng)年也研究過(guò)Xposed,還弄了個(gè)Android-AppMonitorDroid

  • Reinforce:主機(jī)加固啊之類的

  • ReverseEngineering:逆向工程,就是傳統(tǒng)的用OD、IDA進(jìn)行破解的,還有免殺也屬于這一塊

  • PenetrationTesting:滲透測(cè)試,這波就比較大了

    • 踩點(diǎn)掃描,啥社會(huì)工程啊之類的

    • 漏洞利用,DDOS之類的

    • 內(nèi)網(wǎng)滲透,內(nèi)網(wǎng)監(jiān)聽(tīng)、DNS投毒之類的

    • 前端安全,啥SQL注入、XSS、CSRF屬于這一塊

    • 無(wú)線安全

    • Application:應(yīng)用程序的漏洞,像什么ECShop之類的

    • DataBase:數(shù)據(jù)庫(kù)漏洞

    • Middleware:中間件漏洞

    • OS:操作系統(tǒng)漏洞

    • Tools:常見(jiàn)的滲透測(cè)試工具的介紹,像Kali、Backtrack、MSF之類的

    • Vulns:漏洞和0Day的總結(jié)

    • Tech

覺(jué)得本文對(duì)你有幫助?請(qǐng)分享給更多人。

關(guān)注「程序員寶庫(kù)」公眾號(hào),直接獲取各種編程資料!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多