【雜談】研究生最后一年學習計划


研究生最后一年學習計划

前言

又是一年畢業季的到來,想想研究生真是過的飛快。最近忙着實習與校招,目前還沒有正式收到offer但是問題也不是很大,前段時間在菜鳥網絡基礎架構部門實習時經歷了很多,與一群比我牛逼很多的人共事也學到了很多(盡管也被批評了很多),接下來我將會一邊總結實習過程中的感受、遇到的問題,一邊規划一下未來一年的學習計划。

實習總結

主要工作

1、參與了菜鳥基礎架構組的彈性擴縮容項目,主要完成的是對系統的監控數據獲取、聚合等功能

其實這塊業務並沒有什么技術含量,簡單點說就是離線拉取數據,並對數據進行CURD。其中,比較有意思的是全程使用Java8的stream類庫,這個知識點我找時間總結一下(包括foreach、map、reduce、paralleStream等等)。另外需要考慮很多額外的東西,例如數據其實每天只更新一次,所以為了提速接口rt采用了redis來做緩存;同時HTTP接口拉取監控數據不穩定,很容易超時或者連接失敗,導致改次請求無法獲取數據,這時需要對代碼進行良好的異常處理,還需要考慮數據拉取失敗時的重試策略(這塊還沒來得及完善,基本思路是設置最大重試次數,在異常捕獲處重新拉取)。

另外一個點,由於是對ip維度進行統計、聚合,那么ip數量很大時如果還是串行執行就很慢了,所以需要使用多線程來提速。

2、參加黑客馬拉松比賽,完成類隔離容器項目

這塊我打算專門寫一篇博客來細講,就不在這多說了,屆時會把鏈接更新過來。先甩一張架構圖鎮樓。

我理解的企業的用人要求

最近也參加了很多家公司的面試,有如意也有被虐的很慘的,以下是一些知識點的總結(實際上下面的很多都沒有涉及到,畢竟校招還是考察基礎更多一些)。

  • 算法及數據結構:重要性就不用說了,面試中很多公司(絕大部分外企,百度、頭條、快手等)都會非常看重這塊,如果想去以上公司那就必須要投入很多時間和精力去刷題了。
  • MySQL原理:互聯網最常用的關系型數據庫,面試幾乎都會問到,考察點如存儲引擎比較、視圖、索引、花式join等,我認為索引尤為重要,應該多多去學習和理解原理(之后計划寫一篇關於索引的總結)。
  • Redis原理:互聯網非常常用的內存型Key Value數據庫,單線程,支持持久化,速度非常快,面試常被問到Redis支持的數據結構,深入的可能會問實現原理(准備學一下)。
  • Nginx原理:性能高、吞吐量大的服務器,適合做靜態資源服務器和后台的負載均衡入口,同樣也是單線程,基本配置和原理值得學習。
  • Tomcat原理:Tomcat是Javaer最常用的服務器,其本身也是一個Java進程,作為一個容器運行webapps目錄下的war包項目。我認為經常會考察的點在於Tomcat的常用配置、內部的類加載器等。
  • Spring原理:搞Java的應該沒誰不知道Spring,常見面試題有Spring bean初始化流程,IOC和AOP原理,Spring上下文管理等。目前來說SpringBoot應該要比SpringMVC更火一點了,必須學習。
  • RPC原理:分布式系統中不同服務之間調用的一種方式,我理解的是類似於HTTP的一種暴露服務的方式(可能有誤),Java中常見的如Dubbo,其他的有gRpc,值得深入學習。
  • MQ原理:消息隊列在互聯網中也是有着非常重要的地位,是一個同步轉異步的好方式,相關框架特別多,比如Kafka、RocketMQ、RabbitMQ等,那就必須要了解各個框架之間的優劣勢和特點。
  • 分布式基礎知識:稍微大點規模的系統都需要用到分布式,因為單機所提供的資源是有限的,互聯網中分布式自然是家常便飯了。分布式系統中需要考慮數據一致性問題,這里面水非常深,任重道遠。
  • Linux:Linux是最常用的服務器系統,現在Docker(容器)又是新潮技術,特點是易部署、擴展性強。研發工程師不僅要懂得開發,也要懂一些運維的基本功。比如我在面試中就遇到了很多直接問Linux命令的問題,也包括一些shell腳本的使用。至於操作系統本身,那就更是基本功了。多使用多記錄,慢慢來吧。

以上是零零散散的知識點,另外語言的基本功、系統設計能力、設計模式等也是后台開發者必備良葯。私以為,上面這些點掌握80%,去面阿里拿個P6應該沒問題了(不知道會不會被噴哈哈)~

學習計划

上面說的這些知識點,其實我都只是略懂一二甚至很多都只是了解的層面,所以在接下來的空閑時間里我決定盡可能地去學習和整理這些內容,並以博客的形式記錄下來。

分布式系統

這塊東西其實很多,我覺得沒有必要把所有的東西都看一遍,一來不現實二來其實也用不到那么多。分布式系統的原理性包括分布式一致性、分布式事務等核心原理是必須要理解透的,能滔滔不絕的扯個2、3個小時的程度我覺得就可以了。常用的分布式工具比如zookeeper、Kafka、Hadoop這類系統,也是必須去學會使用及了解原理的,師兄給我的建議是拿Hadoop去從源碼級別看起,能學到很多書本上沒有的東西,我會盡量朝這個方向去努力的。

為了強迫自己去學習,開啟了一個系列博客寫作計划,目前已經有第一篇產出:ZooKeeper學習之一:安裝及命令行使用,后續我會繼續加油。

刷LeetCode

有人可能想說研三不都已經結束找工作了嗎怎么還要刷題?稍微考慮遠一點,正式工作了一般來說都是沒時間去刷題了,萬一要跳槽去一些外企或者喜歡面算法的公司(快手等)的時候,就非常尷尬了,所以還是要把以后的壓力分攤到現在來。

刷題是一種好習慣,應當堅持。

機器學習

機器學習、深度學習、AI等名詞幾乎是近兩年來IT圈內最熱的詞匯,如果只是說熱度高,那么並不是每個人都需要去學習,而是說這門技術你是否能夠用得上、能否產生價值。

我在研究生期間更多的是彌補本科落下的代碼量、實習經歷,自己也不夠勤學去追趕新潮技術,所以對於機器學習這方面只是停留在“聽過”的層面。而在阿里實習的過程中,我發現即使是后台研發人員也可能遇到需要使用到機器學習、統計學習等方法來解決的問題。例如在進行彈性擴縮容項目開發時,就需要對服務的流量進行預測,這塊實際上是時間序列的數據的預測,自然涉及到了統計和機器學習相關知識(將推薦轉換成分類問題)。

沐神(李沐)最近開啟了一個深度學習教程,看了第一節課感覺很親民,有時間的話可以追一追:動手學深度學習

總結

總體上說,做技術開發還是多敲代碼多采坑多記錄多積累的過程,所以還猶豫什么,just do IT~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM