回覆列表
  • 1 # 門窗玻璃圈

    那麼,一個優秀的演算法工程師必須具備哪些素質?我們給出的答案是這樣的:

    數學知識

    程式設計能力

    機器學習與深度學習的知識

    應用方向的知識

    對自己所做的問題的思考和經驗

    除去教育背景,邏輯思維,學習能力,溝通能力等其他方面的因素,大多數公司在考察演算法工程師的技術水平時都會考慮上面這幾個因素。接下來我們將按照這幾個方面進行展開,詳細的說明如何學習這些方面的知識以及積累經驗。

    數學知識

    與其它工作方向如app、伺服器開發相比,以及與計算機科學的其他方向如網路,資料庫,分散式計算等相比,人工智慧尤其是機器學習屬於數學知識密集的方向。在各種書籍,論文,演算法中都充斥著大量的數學公式,這讓很多打算入門的人或者開始學習的人感到明顯的壓力。因此我們應該要考慮的最核心的問題是:機器學習和深度學習究竟需要哪些數學知識?先看下面這張表:

    機器學習演算法和數學知識關聯表

    上面的表給出了各種典型的機器學習演算法所用到的數學知識點。我們之前已經總結過,理解絕大多數演算法和理論,有微積分/高等數學,線性代數,機率論,最最佳化方法的知識就夠了。除流形學習需要簡單的微分幾何概念之外,深層次的數學知識如實變函式,泛函分析等主要用在一些基礎理論結果的證明上,即使不能看懂證明過程,也不影響我們使用具體的機器學習演算法。機率圖模型、流形學習中基於圖的模型會用到圖論的一些基本知識,如果學習過離散數學或者資料結構,這些概念很容易理解。除此之外,某些演算法會用到離散數學中的樹的概念,但很容易理解。

  • 2 # 每天長點知識

    第一。 Java語法的學習。

    3天 你需要會這些:

    1. String,Integer,Long,Array,List,Map會用就夠了。

    2. Interface和Impl能分得清就夠了,永遠不要去用繼承。

    3.Model,也是Bean,記著Model裡只有Get和Set方法。貧血模型。

    4.try-catch,Throwable, Error

    5.函式,引數,返回值

    你一定不要現在去看這些:

    1.NIO,Thread,Extend,Abstract,GUI,GC

    2.各種JDK的原始碼,各種演算法的實現

    第二。面向物件概念的理解和學習 3天

    你需要會這些:

    1.屬性和方法

    2.private/public

    3.static final

    4.ArrayList,Set,Map,Array的取值,長度,遍歷。StringBuffer

    5.null物件,Null指標

    6.建構函式

    7.this

    8.泛型

    你一定不要這個時候去看這些:

    1.protect

    2.過載

    3.多型

    4.內部類

    5.socket

    6.file

    7.stream

    第三。常用的Util 3天

    你需要會這些:

    1.StringUtils

    2.CollectionUtils

    3.log4j

    4.httpClient

    5.calendar

    你一定不要去看這些:

    第四。資料庫 9天

    你需要會這些:

    1.JDBC

    2.Mybatis

    3.Hibernate

    4.增刪改查一個表,排序,分頁,簡單的聯表查詢

    5.索引,思考一下什麼樣的表建索引,什麼是索引

    別擔心,以上三種都是一理通而百理融

    第五。 單元測試 3天

    你需要會這些

    1.Junit @Test,@Ignore 2.log4j info,warning,error 3.Eclispe debug,Step,Step in ,Step Out,run

    你一定不要學這些

    第六。 Spring 3天

    你需要會這些

    1.Spring Bean,Property,Map,List初始化值

    2.Autowired

    3.Annonation&配置檔案

    4.Spring Version

    5.Spring MVC,@Method @Controller

    你一定不要學這些

    第七。Maven 5天

    你需要會這些

    1.clean,install,deploy,assembly

    2.snapshot/release

    3.module

    4.subeclipse

    5.jetty:run

    第八 Jsp 3天

    用到Jsp主要有兩個方面,一種是傳統的後臺程式設計師套頁面的方式,一種是直接生成Json格式的資料。 受限於Json無法提供SEO,所以在需要SEO的時候還是得提供套頁面的方式。 生成Json的方式有很多種,我還是喜歡用Json tag-lib.

    你需要了解的是:

    1.C標籤 2.自定義Tag 3.include 4.給靜態資源加版本號 5.WEB容器未更新Jsp的時候,Touch一下

    你一定不要去學這些:

    1.在Jsp裡寫任何Java程式碼,包括但不限於是Mysql

    第九 WEB 10天

    馬丹這裡的WEB我寫的是什麼意思,我忘記了。 大概是SpringMVC的意思?

    反正 你需要了解這些:

    1.web.xml 2.spring的配置檔案 3.統一設定成utf8的編碼 4.filter 5.攔截器

    6.Controller 7.http協議 8.Http-head content-type application/json x-www-form-urlencoded 9.file的上傳 10.圖片的上傳

    你一定不要去了解這些:

    1.Struts 2 2.play 3.webService 4.servlet

    第十 Tomcat/Jetty 5天

    你需要了解這些:

    1.記憶體和JDK引數的配置 2.指定配置檔案的方式部署,docBase

    3.日誌的配置 acces.log stdout.log.catalina.out之類的 stderr.log 4.寫指令碼,找出慢查詢,cat|awk

    5.理解一個請求分過來之後,怎麼分解響應時間,怎麼去查詢效能瓶頸

    你不需要了解這些:

    1.一個Tomcat或者是Jetty下部署多個專案 2.Jetty的嵌入執行方式

    第十一 Cookie 3天

    關於Cookie啊,最常用的有兩個地方,一個是統計,一個是登入。

    所以你需要了解的是這些:

    1.Cookie的大小 2.Cookie的傳輸方式

    3.如何獲取到Cookie,如果Cookie中有同名的引數,會接收到什麼。

    4.為什麼要用Cookie來代替Session做使用者的登入標記

    5.Cookie的失效時間 6.清除Cookie

    你不需要了解這些:

    第十二 Shell 10天

    Shell的概念很大,所以這裡只列出來現階段你最應該會的東西

    你需要了解的是:

    2.cat | more 這種是最覺見的日誌瀏覽方式,cat|grep 用來定位Bug的時候最常用的

    3.grep -A -B 等,以及如果Cat+Grep定位多個檔案,怎麼去查詢他們是在哪個資料夾下。

    4.ls,cd,mkdir,mv,cp,scp,chown,chmod 5.top,free,vmstat,ps,iostat,netstat

    你不需要了解的是:

    1.馬丹,不知道哪些不該瞭解,Shell的東西只要跟實用的都可以多瞭解

    第十三 SVN/Git 5天

    對於後端程式設計師來講,我還是喜歡SVN。 Git使用與否,完全看個人喜好。有很多原因,這裡不說。

    你需要了解這些:

    1.SVN的標準目錄:trunk/tags/branches

    2.commit,update,revert,history

    3.Maven的Release外掛 release:prepare release:perform, release:rollback

    4.Tag的管理 always tag/always trunk的開發方式

    5.Bug出現後,如果和當前開發的專案有衝突,該如何去打Tag,怎麼合併程式碼

    6.釋出失敗後怎麼回滾。

    7.svn版本號怎麼生成的 8.clean

    你一定不要去了解這些:

    1.不知道哪些不該瞭解,不過clock這種操作我建議永遠不要用

    2.還有合併程式碼這種事,我也覺得永遠不要用,儘量保證你的程式碼結構很好,而不是想辦法讓合併程式碼更簡單。

    第十四 Json/Gson/JsonTag-lib 5天

    終於到了Json,過了300贊更新的內容就完工了~~ Json是一個神器,現在是有yaml? 無所謂了,不太影響。Json統治網際網路已經快7年了。

    你應該瞭解這些:

    1.json的 string,number,object,array 2.json的轉義

    3.怎麼樣定義出來一個合理的結構,是用array裡包含一個Object,還是用一個大的Object,裡面的Key是ID,Value是一個Object?是直接用 sex:male 還是用 name:sex, value:male?

    4.Gson在Java和Json中的基本型別轉換 fromjson和tojson

    5. Gson怎麼轉換自定義的物件,和巢狀的物件(這就是Java最煩人的地方,如果是Groovy或者是Python哪用得著這麼麻煩)

    6.Json-taglib裡的常用標籤,怎麼將一個ID轉換成Number,怎麼轉換成String

    7.編碼

    你不應該去了解:

    1.fastjson?我忘記了。用Gson就很好了

    2.JSONObject還是什麼來著?不記得了。 其實這段有點扯,因為你愛用什麼我管不著,我也分不清具體哪個好,哪個壞,但是我自己的偏好就是這樣的。所以跟著我的必須只能用Gson來寫。除非哪天能夠說服我說,老大,有一個XXX比Gson更好學。

    這個其實是工程師的天性,完全不必覺得你的領導在打壓你的積極性。我見過的優秀的工程師,從來都是主動要求在專案中嘗試各種新的激進的技術,而Leader往往都是要權衡N多內容。

    第十五 REST

    第十六 Jenkins

    第十七 nexus

    第十八 Tiles

    第十九 Nginx

    第二十 Memcache/Redis

    第二十一 Refact

    第二十二 響應時間分析

    第二十三 記憶體,CPU,硬碟,IO,網路 佔用,Zabbix

    第二十四 Top,Vmstat,Free,iostat

    第二十五 慢Sql

    第二十六 快取命中率/失效策略

    第二十七 TPS,Jmeter/load runner

    第二十八 敏捷開發

    第二十九 bug修復流程

    第三十 上線釋出流程

    第三十一 釋出中心/ansible

    第三十二 RMI,RPC,Thrift 第三十三 GC 第三十四 JMS 第三十五 Groovy 第三十六 一致性雜湊,BigTable,Cassandra 第三十七 MongoDB 第三十八 NIO 第三十九 Socket/WEBSocket 第四十 Tuscany/Dubbo

    第四十一 馬丹我編不下去了。

    開玩笑啦,然而還是少了不少的內容,特別是一些業務上的知識。

    以及怎麼重構,什麼時候重構,怎麼預判斷需求的變化。

    還有更多的演算法相關的內容,zookeeper,paxos,md5,https等等等等。

    以上的步驟不算完全精準,分類也不算完全仔細,嗯。

  • 中秋節和大豐收的關聯?
  • 仔豬嘔吐,眼睛出血是什麼病?