1. 程式人生 > >如何成為一名程式設計師麵霸

如何成為一名程式設計師麵霸

640.gif?wxfrom=5&wx_lazy=1

本文來自作者默默 在 GitChat 上分享「Python 的 C 擴充套件開發慣例」,閱讀原文」檢視交流實錄

文末高能

編輯 | 嘉仔

程式設計師面試,這對於不同程度的程式設計師或程式媛來講都會有對應層級的問題,如何將自己想說的明白地表達出來,把自己已經很熟練的技術說得很理所當然,把自己會一點兒的技術如何理性客觀地表達出來,這是一門技術。

程式設計師,大家似乎都公認的一個事實就是,程式設計師寡言少語,且有時候詞不達意,因此造成了很多的大小悲劇。

面試找工作,這是一件特別神聖的事情,如何做好面試準備,如何合理地用程式設計師這個身份去應對面試官,如何站在心理角度去思考自己的表現以及面試官的反應,其實,很多時候,都是有套路的。

面試不是百分百中的,但我們若是做好準備,提高通過率確是百分百的事實。

所以我們做好面試準備是十分有必要的,面試準備主要有三點,心態、簡歷、技術知識。

心態,關鍵是要自信

心態決定一切,當然這並不是說,你心態好,你就一定能面試通過。我們去面試前,一定要做好相關準備,若是時間來不及,可以抓緊時間做一些面試題,因為只有硬體條件足夠了,我們才有足夠的底氣。

當然,保持良好的精神風貌也是必須的,面試官若是看到一個萎靡不正的求職者,那我想,這場面試多半會黃了。

在面試之前也要做好一些調查工作,準備充足,在戰場上才不會沒有安全感。去面試前,要事先了解一下公司的主營產品和專案架構,這樣會讓面試官覺得你是一個有心的人,當我們昂首挺胸地走進面試場地,和麵試官來一場意氣風發的面試會談,我想,面試官會給你加分不少。

面試的時候,誰都會緊張,這個時候,我們需要給自己足夠的心理暗示,不斷地告訴自己,我可以,我要加油。

當然不要過度自信,要儘量保持平和、平靜的心態,更不要把面試失敗當成是天塌下來的大事情。畢竟失敗多了,總結出了經驗教訓,後面面試的成功率就大了不少,這裡也涉及到面試機會的安排問題。一般一天最好安排兩個面試,上午下午各一個,最好把自己最想去的那個機會放在靠後的時間安排裡,因為若前面的面試通過了,給後面的面試增加了信心,若前面沒過,那也積累了一些經驗,然後據此做好準備,後面的面試就容易多了。

面試中有很多的確定因素,但是也有很多不確定因素。對於確定因素,你會的,穩紮穩打地回答,不會的,也不要緊張,金無足赤,人無完人,保持平和的心態,搜尋大腦裡的知識,若覺得有探討的必要,可以提出來,若無,則直接告知對方,若對方明確地表示他沒有時間或者不願意回答,你不能表現出一些怪異的臉色;當然,在面試中也會出現很多意外,面對意外,不要慌了神,理性地對待這個意外,控制自己害怕的心理,不斷地告知自己,這種意外會有很多,要習慣,因為我們不能總是要求生活是一帆風順的。

自信可以通過我們掌握紮實的基礎知識來提高,也需要我們做好一些外在準備來排除影響我們自信的因素。時間安排好,例如,不要遲到,遲到了的話,不僅面試官會給你減分,而且自己心裡也會因為遲到而害怕或緊張,從而影響自己的發揮。穿著得體,程式設計師的著裝不需要華麗,當然肯定是不能邋遢的。合適的裝扮不僅能讓面試官覺察到你是一個樸實、踏實的人,也能提高自己自信心。穿著太暴露,爆人眼球,面試官肯定在第一眼就給你一個差評;穿著太邋遢,會讓人覺得一個對自己生活都如此不傷心的人怎麼會在工作中盡心盡力呢。程式設計師一般短袖或襯衫套外套,至於具體搭配,大家可以去網上諮詢下。

自信不是自負,我們一定要對自己有一個清晰的認知,不要好高騖遠、眼高手低,以為自己是211或985就了不起,畢竟人家招的是要會做實事的程式設計師,而不是隻會說大話的人。知之為知之,不知為不知,是知也,千萬不能不懂裝懂,面試官都是工作很多年的,而且肯定也經歷過很多求職者的面試,你的回答支支吾吾,或者你自以為是地亂說一通,面試官用“胡攪蠻纏”就給你定位了,程式設計師的標配是:邏輯清晰,基礎紮實,經驗豐富,而不是,所有雜亂的知識點混搭在一起。

自信也不是你高談闊論薪資的資本,薪資是個敏感話題,卻也是不可避免的,畢竟,我們最終的目的都是賺錢,但是若你在面試過程中處處都提薪資待遇,這會讓面試官覺得你是一個無心工作,只關心工資的人,這樣的人肯定在工作中也不會全心全力的。

一個剛畢業的大學生,開口就要一萬,專案經理問他一些問題,根本答不上來,最後專案經理說,我們這裡還差一個前端的,他立馬就把自己的前端簡歷拿出來,告訴對方說,其實我也在找前端的工作。

事先你理所當然地要價一萬,你確定你做過自我評估了嗎,覺得自己值得起這個價位嗎,在經不住專案經理面試之後,又把自己的另一份簡歷拿來,給人的感覺是怕人家不要你,硬是貼上去,白白地把自己的身價降低了不少。

在回答薪資類的問題時,要注意禮貌,切不可給人獅子大開口的感覺,也最好不要說一個具體的數字。

比較自卑的人,一般會說,我更關注的是技術,薪資這塊,你們就看著給吧,既然這樣,我想,給你個實習生工資,他們還覺得虧了。

比較自信的人,應該會說,我調查了該地的生活水平,再加上這個工作性質,我覺得差不多在一萬二到一萬差不多。

比較自負的人,多半會說,我要兩萬。

簡歷,關鍵是要簡單明瞭

程式設計師不需要在簡歷上多花功夫,關鍵是簡歷的內容,畢竟大家公認的事實是程式設計師就是簡單明瞭、樸實無華。

面試官一般會在求職者做自我介紹的時候大致瀏覽完簡歷上的內容,所以求職者在做自我介紹的時候,要語速適宜,心態平和,關注面試官大致把簡歷瀏覽到哪一塊,然後自己做適當調整,切不可在做自我介紹的時候把很多不相關的一些經歷說出來。

我們的簡歷,一般應有這樣幾個內容:

  • 基本資訊:我們是誰,聯絡方式是什麼,專業,學歷等。

  • 技能驗證:我們會什麼,會搭建什麼框架,會用什麼技術。

  • 工作經驗:我們做什麼,在哪些地方做過什麼樣的專案。

  • 成果:專案最終達到了什麼樣的效果。

在簡歷上說自己會什麼的時候,切忌說精通,你若是精通了,就不會是別人來面試你了。我想,沒有多少人可以真正地拍著胸膛說,自己精通Java技術。

我們在寫技能這一塊兒的時候,多與即將要去面試的公司的要求搭勾,這樣會提高通過率。

在簡歷上描述專案經驗的時候,通常寫上專案名字、專案的功能有哪些、專案所涉及到的框架或技術、你的職責、專案成果。

重點說一下你自己做過的自認為很不錯的專案,你在專案中的職責,完成的主要模組,以及用到了那些亮點技術,效果怎麼樣,得到怎樣的反響。

如果在專案中遇到了一些有價值的問題,也可以在描述該專案的時候告訴面試官自己是如何解決的。若是獨立解決的,可以體現出自己是一個喜歡探究的程式設計師,有獨立解決問題的能力,若是和團隊成員一起解決的,也可以體現自己的團隊合作意識,這些都是開發人員必備的能力。

如果是應屆生,若有企業實習經驗就更好了,描述清楚。若是沒有實習經驗,把自己平時在學校做的一些專案,也可以寫上去,抓住重點和亮點,不要把雞毛蒜皮的小事也掛上去,若是有加分項,那就很不錯了,例如全國GIS大賽、ACM大賽、美國大學生數學建模大賽、全國大學生數學建模大賽等等都可以。

有經驗的程式設計師也可以把自己的簡歷豐富一下,抓住加分項,例如:一些很好的專案,進入過很牛逼的公司,例如BAT等。

若是有自己維護的網站或系統就更好了,實現自我品牌效應,會給人眼前一亮的感覺,例如自己的書在哪裡出版了,自己的部落格有多少粉絲了,自己的網站有多少流量了……

除了這些內容,簡歷上還應有一些與工作相關的證書,例如英語四六級,軟體設計師,資訊系統專案管理師等。

一般成體系的公司的面試官都是很有禮貌的,很尊重人,而且也會綜合考察求職者能力,所以,一般會在最後問一些看起來與專案技術無關的問題,例如,你還有問題問我嗎,你平常幹什麼之類的。

對於這類問題,一定要在腦海裡快速想一想,面試官可能會考察你什麼能力,是團隊合作,還是隨機應變能力,還是看你是否主動積極。

技術知識,關鍵是要牢記

這是硬性條件了,不可避免的。

但是要在短時間內記住大學幾年的知識,著實有點難,所以藉著有效的方法才能事半功倍。

花些時間,把所有的知識搭成一根線,從邏輯上連起來,這樣有條理,有邏輯因果關係,記憶起來也會方便些,而且在答題的時候也會由此及彼,不會陷入無話可說的尷尬地步。

Java中涉及到很多知識點,不能把它們放在每個都獨立的小空間中去記憶,這樣死記硬背是很痛苦的,而且刻在腦海中的時間也很短暫。

由一個知識點,引發一條線的知識點,記憶起來絲毫不費力,因為給人的感覺是順其自然,因為這件事情發生,所以那件事情就應該是那樣。

例如,面試官問ajax的工作原理,你可以從ajax的背景、誕生的意義、它的影響力、再到它的原理、它的用法、它的用處,最後來一句:所以它有簡單、方便、減輕伺服器的壓力、區域性重新整理、提高客戶體驗之類的好處。

我們在回答面試官的問題的時候,切忌吐字不清晰,要不緊不慢、勻速地把自己的答案說出來。

技能考核,關鍵是知識框架

1. 初級知識

  • 面向物件和麵向過程的區別和聯絡。

  • 物件和類的關係。

  • Java的記憶體佈局是怎樣的。

  • Java中的工作記憶體之間是怎樣進行通訊的。

  • 堆和棧是什麼關係,主要放什麼東西。

  • Java中安全機制是什麼。

  • 在Java中的執行時的四級安全性保障機制什麼。

  • Java中的異常機制框架圖是怎樣的。

  • String類的修飾符是什麼,為什麼是它。

  • 重寫和過載的區別和意義。

  • Final、Finally和Finalize的區別。

  • Static程式碼塊、普通程式碼塊和構造程式碼塊之間的呼叫順序,以及一些常用場景。

  • StringBudiler和StringBuffer的區別和聯絡。

  • 檔案的增刪改查是否熟練。

  • 繪製容器繼承關係圖。

  • Collections和Collection的區別和聯絡。

  • MySql資料庫索引是怎麼實現的。

  • ArrayList和Vector的區別和聯絡。

  • Set和Map有聯絡嗎。

  • HashMap和HashTable的區別和聯絡。

  • 型別擦除是什麼意思。

  • HashSet和TreeSet的原理。

  • 陣列和字串誰有Length方法,誰有Length屬性。

  • JDK1.5新增了哪些常用的概念或功能。

  • 能比較清楚地簡述各個集合類的特點及適用場合。

  • IO操作(多媒體、物件、檔案、文字)。

  • 多執行緒和程序的概念。

  • 執行緒的幾個狀態。

  • 擴充套件知識:

  • POI、文件API、PDFAPI等。

  • TCP、UDP如何實現。

    • Java網路通訊。

  • Socket程式設計。

  • Java加密和解密。

2. 中級知識

  • Http協議的基本原理。

  • Http的輪詢是用什麼辦法解決的。

  • URL重定向如何實現。

  • 請求頭和響應頭怎麼新增。

  • Servlet容器的概念。

  • JSP和Servlet的區別和聯絡。

  • JSP的9個內建物件。

  • 在JSP中的幾個註釋有和意義。

  • Servlet在哪裡被解析,能否閱讀解析器的原始碼。

  • JSP引擎在哪裡,通過閱讀原始碼瞭解其原理。

  • Web應用中的web.xml的常用配置有哪些,配置順序大致是怎樣的。

  • POST和GET的區別和聯絡,哪個有快取,為什麼。

  • 前後臺數據通訊方式。

  • Ajax的原理。

  • JQuery和操作原生DOM元素之間的關係。

  • 瀏覽器物件框架圖。

  • 常用設計模式有哪些。

  • 常用的元件開發,例如:檔案上傳、文件解析都有哪些技術。

3. 高階知識

  • MVC思想是怎樣的。

  • Struts框架圖能否描述清楚。

  • Struts框架搭建是否熟練。

  • OGNL與Struts的關係。

  • Strus中的值棧是如何工作的。

  • Struts.xml中的一般配置有哪些。

  • Struts是如何實現執行緒安全的,能否真正意義上實現執行緒安全。

  • 為什麼Struts2逐漸沒落。

  • 如果讓你對Struts2進行開源開發,讓它重新走入市場,你會如何哪裡入手。

  • ThreadLocal在Struts中的關鍵是什麼。

  • Hibernate的二級快取。

  • Hibernate一般和那些外掛快取組合

  • HIbernate的工作流程

  • HIbernate的配置過程

  • Hibernate與MyBatis的對比 Hibernate的特點

  • 連線池

  • 一對多和多對多關聯關係

  • Hibernate的優化機制

  • Hibernate中的物件都有哪些狀態,以及狀態之間如何轉

  • Hibernate與Spring,Struts整合原理

  • SSH究竟指的什麼

  • Hibernate中如何管理事務

  • Hibernate的五個核心類是什麼

  • Hibernate的資料抓取策略

  • Hibernate中的資料操作方式有幾種

  • 快照機制是什麼意思

  • Hibernate中的物件與表如何轉化,用到的原理是什麼

  • Hibernate用到了哪些設計模式

  • 事務的特點

  • 事務的併發性

  • 事務的隔離級別

  • Hibernate中的主鍵策略有哪些

  • MyBatis與Hibernate、DButils的聯絡與區別。

  • Mybatis中用到一個很重要的思想是什麼(面向介面程式設計)。

  • MyBatis中的逆向工程是什麼概念。

  • MyBatis中的快取方式有哪些。

  • MyBatis如何實現關聯查詢。

  • 在MyBatis中一對一、一對多、多對多如何實現。

  • 在MyBatis中是否存在延遲載入的概念,如何實現。

  • MyBatis中的Sql語句與物件引數、物件返回值如何繫結。

  • MyBatis如何實現事務管理。

  • MyBatis如何實現session的管理。

  • Spring的框架圖。

  • Spring的實現原理。

  • Spring如何給bean賦值,有哪些方式。

  • Spring如何管理事物。

  • Spring註解存在的意義和原理。

  • Spring的AOP的概念是什麼,如何實現。

  • 向上委託機制是什麼原理。

  • SpringMVC如何實現檔案上傳等。

  • 過濾器、攔截器、監聽器、連線池的原理分別是什麼,如何實現。

  • SSH流程。

  • SSM整合原理。

  • 爬蟲:可以有Java爬蟲,Python爬蟲,自己可以簡述爬蟲的原理、背景和意義、爬蟲的流程,做過的爬蟲專案。

  • POI、word的API、PDF的API,這些工具類的使用,可以很方面我們在專案中擴充套件功能,若能熟悉其核心API,也可以讓面試官覺得我們是一個喜歡探索的人,閱讀原始碼,喜歡探究。

  • XML解析方法有哪些,DOM、SAX、JDOM、DOM4J幾種方法的優點和缺點,以及適用的場景

若能清晰明瞭地講清楚這幾種方式中的核心方法,在面試過程中,流暢地回答可以提高我們的信心。

4. 高階研發

Log4j架構: Log4j將寫日誌功能抽象成7個核心類或者介面:Logger、LoggerRepository、Level、LoggingEvent、Appendar、Layout、ObjectRender。這幾個類或介面分別在什麼時候用,怎麼用,若能很明白地講清楚,那麼將能在面試中提高我們自身的技術價值。

Maven、Linux、Git或SVN等作為一些工具或管理方法,對它們的使用程度也將與面試官對你的階級評判息息相關。

基於記憶體儲存的資料庫Redis、請求分發的Nginx、企業級搜尋Solr、基於RESTful web介面的ElasticSearch等等,都是進軍高階程式設計師的必備知識。

Zookeeper分散式系統和服務叢集搭建、JFinal敏捷快速開發、shiro安全框架、RBAC許可權管理技術、Linux系統、Nginx伺服器、vsftp伺服器、dubbo、HTTPClient原理等。

程式設計師的成長體系

人生有三個階段。

  1. 昨夜西風凋碧樹,獨上高樓望盡天涯路

  2. 衣帶漸寬終不悔,為伊消得人憔悴

  3. 眾裡尋他千百度,驀然回首,那人卻在燈火闌珊處

在網上看到有人關於在閱讀原始碼這一塊對程式設計師的成長做了總結

  1. 只關注專案本身,不懂就baidu一下

  2. 除了做好專案,還會閱讀和專案有關的技術書籍,看weikipedia

  3. 除了閱讀和專案相關的書外,還會閱讀IT行業的書,比如學Java時,還會去了解函式語言,如LISP

  4. 找一些開源專案看看,大量試用第三方框架,還會寫寫demo

  5. 閱讀基礎框架、J2EE規範、Debug伺服器核心。

在菜鳥階段,有人總結到程式設計師成長曆程的四個階段

  1. 不知道自己不知道(Unconscious incompetence)。
    表現:假自信、過度承諾、滿口我能行沒問題、看不起其他程式設計師…。

  2. 知道自己不知道(Conscious incompetence)。
    表現:有點心虛、虛心學習、偷偷努力、羨慕牛人…。

  3. 知道自己知道(Conscious competence)。
    表現:自信、比較客觀、真正承諾、有點自我…。

  4. 不知道自己知道(Unconscious competence)
    表現:開放、主動、好學、謙虛…。

當我們對自身職業的成長體系有了大致的瞭解,接著對號入座,看自己在哪一個階段,如何能達到更高的階段,當自己到了一個新的階段,是否有新的體會。

有了自我認知,程式設計師的知識體系網路就起到了承上啟下的作用。

針對從上面提到的面試題集,然後再做適當擴充,遇到問題,學習新的技術,掌握新的技能,逐步提升自己的能力。

程式設計師的自我修養

IT行業是個技術更新較為頻繁的行業,所以我們要隨時保持一顆積極上進的心,多給自己充電,不要讓自己永遠待在自己的舒適區。

IT的高薪也不是憑空來的,任何回報都是當初付出的等價替換。

擁抱原始碼,從原始碼中汲取思想,學會舉一反三,我們剛開始學習 JDBC 的時候,自己會封裝一個 DBUtil 的工具類,當自己封裝好了,是否去 Apache 中尋找類似的工具進行對比,看權威是如何實現的,連線池底層究竟是如何實現的,快取又怎樣實現的,當我們站在三界之外的時候,會覺得一切都是那麼地神祕,但是當我們走進來看到底層,不過感嘆原來如此。

學會總結反思,孔子云,學而不思則罔,思而不學則殆,學無止境,新的東西之所以新不是因為它多麼地高大上,關鍵在於,它利用平凡普通的基石能夠實現非一般的功能。

寫技術部落格、維護個人網站系統、做技術 demo 分享,實現自我品牌效應。

 近期熱文

福利

0?wx_fmt=png

「閱讀原文」看交流實錄,你想知道的都在這裡