談談一個程序員本該具有的素質

前言

  去年的這個時候,我正值大四上學期末,忙於找工做,10月份11月份就開始在某些招聘網站上投簡歷,可是面試了幾家,都直接回絕了,緣由很簡單,不少直接說不要沒有經驗的應屆生,可是筆者在投的時候實際上是篩選過的,基本投的都是沒有經驗要求以及實習生崗位,基本上一輪pass了,可是也讓我看清了現實,就是社招若是沒有經驗,除非特別優秀,否則公司是不會花時間去培養的。後面去了校招,校招就太多經驗要求了,基本上就是純技術的競爭了,說實話,那個時候技術競爭我是毫無優點的,論計算機基礎,個人功底很是薄弱,論java基礎,熟悉的也就是經常使用的API,可是涉及到源碼,實現原理,JVM等部分就不能應對了,還有多線程以及網絡編程這一塊也不夠深刻。幸運的是,校招看中的第一家公司錄用了本身,如今想一想也是緣分啊,投了六家,還有一家人事也通知我過去上班了,我權衡了一下,回絕了,選擇了第一家更大的公司。前端

面試總結

  實習前到畢業那段時間,大概面試了十多家公司。筆者如今僅能憑記憶總結一下當初面試問過的問題以及一些筆試題。有些問題比較深入,不少記不清了。簡單羅列一下。java

面試

  • 你能說說Mybatis與Hibernate的區別嗎?
  • 說說你對Spring的認識?AOP的底層原理?
  • Servlet的生命週期?
  • 談談線程的生命週期?
  • 什麼狀況下線程不安全?如何解決安全問題?
  • 簡單說說HashMap的底層實現?
  • 我看你的商城項目中有支付功能,用的是第三方的支付接口嗎?
  • 你在項目中遇到過的最大困難是什麼?
  • 你用過Nginx是吧,講講Nginx是怎麼實現反向代理,負載均衡的呢?
  • 用過Redis嗎?用過壓測工具嗎?知道Linux如何查看系統的負載嗎?瞭解過緩存穿透,緩存雪崩,緩存擊穿嗎?知道如何優化sql嗎?講講你以前的項目數據庫索引使用的具體業務場景(一看就是互聯網公司,用的技術都比較新,注重系統性能,用戶體驗)

筆試

  • 給定一個場景,設計表結構以及關聯關係,書寫相關的sql
  • 二叉樹的前序遍歷,中序遍歷,後序遍歷,層序遍歷。或者選擇題根據前中遍歷結果,推導出後序遍歷。
  • 冒泡算法(比較常考)
  • 轉發與重定向的區別?
  • volidate的做用?
  • 列出十多個異常,表述下面異常一般發生在什麼狀況下?
  • hashCode與equal的做用?

一個程序員本該具有的素質

  接下來纔是我要說的重點,就是一個程序員本該具有的素質。說實話,對於我這種非科班又是自學的人來講,走了很多彎路。抓不住重點學,就會很是迷茫。彎路惟一的價值就是不斷買教訓,不斷從新認識領悟。
計算機與科學技術這個專業中,有幾門課程是很是重要的:程序員

  • 計算機組成原理angularjs

  • 計算機操做系統面試

  • 計算機網絡(惟一學過的)算法

  • 數據結構與算法sql

  • 編譯原理數據庫

  • 離散數學編程

      我的認爲前面四項是重點。而後掌握一門編程語言,這就是一個程序員的本該具有的素質。
      萬丈高樓平地起,再好的技術實現都逃不過這些底層的東西。之前常常吐槽大學教的東西是沒有用的,別的專業我不敢說,可是對於IT這一行來講,計算機課程是很是有用的。但是這種重要性咱們在大學裏是體會不到的,爲何呢?第一,大學教的純理論,真正實踐的機會不多,固然沒有真切的體會。第二,這些課程很是枯燥,可以沉下心來學好的人很少。第三,大學老師大部分教學一套PPT用幾年,教學模式固定化,也不能結合實踐講出太多趣味性的東西。固然啦,教學只是輔助,學好必須得靠本身。
      即使是科班的學生,真正學好這些課程的人其實並很少,因此一個程序員本應該具有的素質許多人也不能達到。筆者本身更是不具有這種素質。固然啦,這並不影響咱們完成基本的開發任務,並不影響完成增刪改查。那爲何我還要強調這些素質呢?
      靠技術吃飯的人,多多少少都會有危機意識,技術更新那麼快,如何讓本身多年後依舊屹立不倒,那就是這些底層的東西,若是不利用業餘時間彌補底層的東西,可能過不了兩三年就會遇到瓶頸。固然,學習是有時間成本的,你只能慢慢去彌補這些知識領域,保持學習,量變終究會質變。那個時候,你會站在另外一個新的高度。小程序

個人書籍推薦

  除了上面的課程對應書籍外,我下面推薦主要是java程序員的看的書籍:

  • 《Java編程思想》
  • 《阿里巴巴Java開發手冊》
  • 《深刻理解Java虛擬機 JVM高級特性與最佳實踐》
  • 《圖解TCP_IP》
  • 《圖解HTTP》
  • 《Java併發編程的藝術》
  • 《Netty實戰》
  • 《Spring實戰》
  • 《Redis實戰》
  • 《設計模式》
  • 《Spring Cloud微服務實戰》
  • 《鳥哥的Linux私房菜》
  • 《MySQL技術內幕》
      
      其實,官方文檔以及源碼也是很好的教材。另外,其實看視頻也是很好的學習方式,能夠下載一些分佈式微服務架構的課程來看,筆者本身買了幾套視頻,知識付費時代,想學點真東西仍是得出錢啊,固然啦,如今不少公衆號會很良心的免費提供一些資源。市面上公開的資源大可能是基礎的課程,若是想深刻,那就得去買一些中高階的課程。

我常去的網站社區

  • GitHub(全球最大的同性交流網站,這是程序員必須上的網站,裏面開源項目特別多)

  • CSDN

  • 知乎

  • 博客園

  • SegmentFault

  • 慕課網

  • 掘金

  • 伯樂在線

      固然,除了這些網站以外還有一些其餘一些網站,由於不太主流,就不做推薦了。
      最近筆者在掘金髮表了一篇文章:多線程併發篇——三件兵器

https://juejin.im/post/5bfcb99cf265da613e21edd5

  讓我意外的是這篇文章得到了一千多的閱讀量,並且發表不久就登上了後端熱門欄目,真的是有點驚喜。

這一年,我學到了什麼?

  工做一年,我在公司學到了什麼呢?
  實習的時候,進入了研發部門,項目經理剛開始並無安排項目,只是讓咱們研究一下單點登錄系統以及權限系統,那個時候實際上是最頭疼的,一個工程那麼多代碼,不知道從何看起,也不知道怎麼跟其餘系統進行對接。後面,終於能夠開始參與一個項目,設計表結構的時候還用了外鍵約束,其實外鍵會影響數據庫性能,最好在程序中自行維護表的關聯關係。那個時候,複雜的子查詢不會寫,不懂添加索引,maven不太會用,SVN不熟悉,寫的代碼不規範,Linux命令不熟悉,不會部署應用,這些東西其實都是在項目中才真正熟悉起來的。說實話,個人代碼水平可能更多的是在課外提升的,可是對於業務流程以及開發的各類開發工具是在項目中提升上來的。寫小程序服務接口的時候,常常要測試接口,才學會了Postman這個工具。包括與前端對接的時候因爲寫的接口文檔不清晰,常常把時間浪費在討論接口的字段含義上。
  大四下學期中期,我被調到了別的項目組,參與政府部門的項目。因爲以前寫的是後端代碼,來到這個項目組卻寫了前端,就以爲本身是否是偏離軌道了。還好剛開始項目組的技術負責人並無安排什麼任務給我,只是讓我熟悉一下這個項目組的項目,而後學學angularjs,說是學,可是因爲沒什麼任務,上班效率並非過高,自己本身JavaScript就不太好,也沒怎麼深刻去學過,angularjs更是不懂,只是跟着網上的教程看看,敲一些簡單的代碼。後面新需求來了,沒辦法了,安排我作一個模塊,只能硬着頭皮作了,還好有以前一些樣例能夠參考,那就一頓複製黏貼,根據需求改一改代碼,而後不斷測試調試代碼,雖然不知道怎麼來的,但終歸實現了功能,就這樣,在不斷的複製黏貼修改代碼中,我慢慢了解的angularjs,也大概懂得怎麼去用。這期間,我學會了前端代碼的調試,對JavaScript也熟悉了很多,寫sql的能力也有了必定的進步,由於有些時候須要些一些複雜的sql,特殊狀況,須要寫數據庫的存儲過程和函數實現。
  固然,對於後端的學習,只能工做之餘學了。

最後

  筆者當初誤打誤撞走進了IT,只但願熱愛工做,熱愛學習,作好本身手頭的每一件事,心裏裏不樂意加班(慶幸如今沒怎麼加班,但願之後即便加班都在本身能接受的範圍),但願保留一份生活的空間。感謝你們的支持!!

相關文章
相關標籤/搜索