機務?演算法工程師!轉職筆記(四)

小機務要做演算法工程師!第三個月,依舊樂在其中,加油哈!

2017年過的好快,8月過後,今年的餘額已經不足100天了,這個月的學習內容依然分為機器學習,數據結構和演算法,編程語言三方面。除此之外,學霸開始帶著我開始了一個機器學習類小項目的製作,自己做出一些東西來,確實還是挺有成就感的。下面是這個月學習過程的分享。

機器學習方面

《機器學習基石》第8章,總共4小節的內容,總共的視頻時長大概為60分鐘。我共用了大概3倍的視頻時長,約3小時來進行學習加複習。這個月這方面的學習內容比較少。因為下一章的內容開始涉及邏輯斯蒂回歸,學霸說非常重要,與面試相關度很大,準備下個月重點學習下。

一.我學了哪些資料?

1.林軒田老師的《機器學習基石》課程8章的視頻

  • 這一章主要涉及的是機器學習中涉及的兩個概念:Noise (雜訊)和 Error(錯誤)。其中第一節涉及了雜訊和目標分布。其首先介紹了雜訊的概念,然後討論了噪音存在情況下VC維的效用。其第二節涉及了錯誤衡量的方法,其包括面向分類問題的0/1錯誤衡量方法和面向回歸的平方錯誤衡量方法。第三節的內容主要介紹了更為複雜一些的成本矩陣的錯誤衡量方法,第四節的主要介紹了加權分類的衡量方法。

二.學霸指點:難點/重點分析和面試高頻問題

1.難點分析

  • 學霸說者章節的內容相對還是比較簡單易懂的,但在實際應用中這兩個概念還是應用很廣泛的。

2.面試高頻問題

  • 與錯誤衡量相關的很多度量機器學習演算法好壞的方法(如F1值,AUC,ROC曲線等),是在面試中經常被問到的問題。

三.我遇到的問題及解決辦法

  • 不得不說,這個月我遇到的主要問題是太忙了。。各種事情太多,這個月又進行了一些工程方面的練習,還是有一些挑戰的。這章的內容整體上還是比較輕鬆的,與前幾章學習的VC維理論相比,難度還是較低的。

編程語言

之前的兩個月的學習偏重簡單的基礎和理論,編程知識方面我也按照學霸的安排把C語言系統的學習了一遍。因為我們考慮到也要加強實踐能力的提升,這個月我開始學Java了!!!也開始在學霸的指導下,開始一個小項目的製作。最終能夠自己通過編程實現一些功能,還是挺激動人心的。JAVA方面學霸給我的參考資料是「畢向東Java基礎視頻(35天版本)」,另外以《JAVA編程思想》這本書輔助,以菜鳥教程-Java教程為快速索引。因為之前系統學習過C語言,現在針對JAVA我主要使用探索式的學習方式,即不再單純以之前從第一章開始到最後一章結束的系統式學習的套路,而是採用開發中遇到不會的知識點,再去資料中對涉及到的新知識點進行探索式的學習,在碎片時間看視頻學習進行掃盲,從而減少在與C語言重疊內容上的時間浪費。

一.我學了哪些資料

1.這部分我主要快速瀏覽了菜鳥教程-Java教程的Java基礎和面向對象部分。

  • 詳情見鏈接菜鳥教程-Java教程,重點問題我會在下文總結下。

2.「畢向東Java基礎視頻(35天版本)」視頻只推進了很少的一部分-基礎視頻01。主要是有關Java語言最基礎的部分。

  • Java語言的跨平台原理,JDK,JRE等。
  • 環境配置。
  • Hello World。

3.項目部分

這個項目的目標是實現一個演算法工程師面經抓取分析引擎,其主要目標是通過數據抓取引擎自動抓取網路上的演算法工程師面經,使用一些演算法對這些面經進行特徵提取,最終實現演算法工程師面經分析和打分的效果。我們做的項目現階段的狀態為能夠從牛客網的演算法工程師的筆試面經的討論區抓取每一個面經分享鏈接的內容,以鏈接標題為題目,以鏈接的文本為內容保存為文本文件。我們的項目GitHub在此:rrdssfgcs/interview-cheatsheet:這個項目我們分別大概做了如下工作:

  • 項目準備:學會使用GitHub,IntelliJ IDEA,Maven等工具,了解jsoup這一網頁解析工具,學習JUnit單元測試。
  • 學霸負責搭建了主體框架:例如數據抓取,資料庫存儲,以及一些簡單的能夠復用的工具類。
  • 可能大家一臉問號?感覺項目需要的東西學霸都已經做了,那你tm做了什麼???學霸很聰明的,怎麼可能全部讓我看著他做,那我能學到個鳥啊!其實除了資料庫存儲的部分是學霸全權包辦,其他的部分學霸搭建好框架後,就會對我提出要求,然後給我限定時間讓我實現,其實就是讓我自己去探索,先從CTRL+C,V做起,去實現功能。為了實現面經抓取的功能,我主要在進行了以下幾步的嘗試。
    • 第一步:先學會把特定網頁的源碼抓下來,然後存儲為.txt文件。
      • 第一步對於我來說還是比較好實現的,直接搜索關鍵詞「Java抓取網頁」,「Java網頁爬蟲」等類似關鍵詞,會發現很多人分享了自己的代碼,仔細閱讀下,修改一下可以分別完成抓取網頁和存儲文件的功能。(這個實現方法有很多種,無論哪種先實現出來試試)
    • 第二步:我嘗試去除網頁源碼中標籤等不需要的內容,實現特定內容(例入標題和面經正文)的抓取和保存。
      • 利用jsoup工具包中不同的工具可以將網頁進行解析,獲取文本等等內容,再進行存儲。
    • 第三步:我試著在一個有鏈接的網頁中,抓取鏈接中的內容,並進行解析,存儲。

二.學霸指點:難點/重點分析和面試高頻問題?

學霸說一涉及到Java語言和項目的時候,重點肯定是很多的,但是對於我還是要從基礎開始,先把一些最基礎的問題搞清很重要。

  • 類和對象。
    • :類是一個模板,它描述一類對象的行為和狀態,是抽象的,是一系列共性對象的總結。譬如哈士奇,沙皮狗,田園犬各種狗可以抽象成一個類叫做「狗」,狀態有出生地,性別等等,行為有吃,喝,跑,叫等等。
    • 對象:對象是類的一個實例,有狀態和行為。例如,一條哈士奇就是「狗」這一類的一個對象,它的狀態是哈士奇的:出生地,性別;具體行為有:吃,喝,跑,叫。
  • 面向過程和面向對象。
    • 面向過程是步驟式的,自頂向下的,由函數模塊組成的,是以功能函數為主體的,可擴展性不強。面向對象是以對象為主體,可復用。繼承,多態和封裝是它的主要特點。貼幾個我覺得講的很好的鏈接,供大家進一步理解。1.什麼是面向對象編程?2.如何通俗易懂地舉例說明「面向對象」和「面向過程」有什麼區別?

三.我遇到的問題及解決辦法

我發現在做項目的過程中,語言基礎是一部分,要想實現功能更多的是靠很多工具哈,開始的時候很多工具不會用,做這個項目過程中學霸給的很多指導我自己也進行了一些摸索,對這些基礎的知識或者工具總算有了一個大概的了解,並且能夠操作使用,分享給大家一些可以快速上手的的乾貨。建議大家要最自己了解一下各個工具有什麼優點,為什麼要使用這些工具,從而選擇使用。

  • 環境配置等基礎
    • 搜索關鍵詞或者去看畢向東關於環境變數的配置的視頻。
  • intellij
    • IntelliJ IDEA 使用教程_極客學院
    • IntelliJ IDEA 快速入門指南
  • github
    • 怎樣使用 GitHub?_來自知乎er 姍姍是個小太陽
    • 關於windows的客戶端,我試了一些,SourceTree啥的,感覺不是太好用,最後我發現就用GitHub自己的客戶端就挺不錯,簡單,乾淨。Download for Windows(64bit)
  • maven
    • 這個用得還不是很好哈,Maven安裝
    • maven的使用教程
  • 關於jsoup
    • 這個工具是我們最終決定用來解析網頁的,一開始我對解析網頁沒啥了解,總想著把抓到的源碼用正則表達式去匹配出文本,後來發現真是幼稚啊!實現難度極大,倒是發現了一個很好的學習正則表達式的帖子,灰常棒!正則表達式30分鐘入門教程。最後學霸指點讓用jsoup,我才發現這個工具真是強大,它的使用教程寫的也很簡單易懂:jsoup Cookbook(中文版),還有一個帖子寫了簡單的使用實例,也寫的很好。java爬取網頁內容 簡單例子(2)——附jsoup的select用法詳解

數據結構和演算法

複習鏈表相關題目。

一.我學了哪些資料?

1.《劍指offer》的鏈表相關題目(二),主要是複習,題目的答案大家都很容易找到,但是給一張紙我們能馬上手撕么???這是來自靈魂的拷問。

  • 鏈表倒數第k個結點
  • 從尾到頭列印鏈表
  • 刪除鏈表節點
  • 刪除鏈表中的重複節點
  • 反轉鏈表
  • 兩個鏈表的第一個公共節點

二.學霸指點:難點分析和面試高頻問題?

  • 沒啥好說的,盡量手撕吧,學霸說要是寫一個題目寫20分鐘那就有點尷尬了。。。

三.我遇到的問題及解決辦法

  • 最大的問題就是處理種種的挫敗感——面對上個月剛學的內容,手寫還是有點困難的,學霸說,不要管,有空就寫寫,寫不上來就看兩眼,實在不行就抄一遍也是有效果的。

Share學習經驗---他山之石,可以攻玉

搜索是一門學問。

不可否認學霸是挺吊的,之前我一直覺得學霸就是那種無論你問他什麼問題,他稍微思考下拿過來就巴拉巴拉給你講的,但是隨著學習的深入,我發現學霸貌似也不是什麼都懂,但是你給他提出的問題,過一會他也總能答起。學霸說,在這個行業,並不是每個知識點都要完全記在腦子裡,也並不是每個工具都能用得很熟練,新知識和工具是無窮無盡的,但是當你需要的時候,你就需要快速搜索,匹配到到答案,找到解決問題的方法,他說大學四年,他就覺得自己搜索的能力和學習新知識的能力有很大提高,一定要學會搜索,很有可能很多問題和需求其他人也有過,並且有人做了解答。然後我後來嘗試了一段時間,自己總結了些小技巧:多用客觀的搜索引擎,盡量把自己的問題和需求明確,用準確的關鍵詞去搜索,搜索出來的內容的出處也很重要,譬如來自博客園,CSDN等等網站的內容往往就很契合問題,總比某某吧,某某知道要靠譜點,以至於後來有啥問題我就先去CSDN搜一遍,往往就能解決。是不是只有我才這麼晚醒悟啊。哈哈。

學霸很忙,北京的天氣真的開始冷了,但是要時刻提醒自己追求的激情不要down,11月見!


推薦閱讀:

優秀的演算法工程師都是不用深度學習的
一年半時間如何拿到演算法offer?
學習演算法時,思考和看答案的界限在哪裡,我很想知道!是要一直思考出問題的答案還是看答案學習方法和思想?
演算法工程師大致是做什麼的?
ACM/TOPCODER類程序設計能力對於想成為機器學習、數據挖掘類演算法工程師的學生來說的意義是什麼?

TAG:算法工程师 | 转行 | 机器学习 |