導航:首頁 > 程序命令 > 程序員最難得到的秘籍

程序員最難得到的秘籍

發布時間:2022-10-06 14:09:18

『壹』 程序員,如何少走彎路,成為一名技術專家或者架構師

#1 專業技能

@首先當然基礎知識要扎實,一些經典的專業書籍一定要看。比如,設計模式,演算法,數據結構,所在領域的編程語言的專業書籍等.關於不同的能力階段,需要讀取什麼類型的書籍,請參考ThoughtWorks(中國)程序員讀書雷達,每年都有更新。
@作為架構師,review別人的代碼並給出合理的建議是基本功,比如變數或者方法命名的規則;所以代碼大全,重構,改善既有代碼的設計,Clean code 等等肯定需要看。
@ 對於某一個技術領域或者業務領域,一定要有一門技術是精通的,因為這樣你才能體會到以後遇到自己不懂的技術的時候,如何能夠快速成為這一方面的行家。
@ 平常有時間一定要多多進行代碼的訓練,也就是Martin Flower常說的Kata練習,這個比喻來自於跆拳道,跆拳道選手一般每天都會找一些基本的招式,進行反復的練習,從而訓練肌肉的條件發射,那麼對於我們程序員來說,一定也要進行持續的編程訓練,比如上面提到的那位同事,給的建議是,雖然把大部分時間花在了溝通和協調上面,沒有機會寫代碼,但是自己一定要利用業余時間,自己找一些例子來聯系,比如,參與開源項目,或者到網上去搜索一些大師的經典Kata聯系的例子;或者看工作裡面是否有一些小工具,是否能夠提升自己的溝通效率,當然已經天天寫代碼的童鞋們除外。請參考我轉發的另外一篇文章和另外一篇介紹能在線練習Kata code的文章.
@ 最好能夠在精通一門語言的基礎之上,學習其他的語言,從而站在一個更高的角度,對於程序語言有一個更高層次的抽象認識,比如,學了java之後,可以學學Ruby,Groovy,C#等等,其實語言之間都是相互借鑒的,比如Lamba表達式,連java也慢慢的向函數式編程方向靠攏。
@ 如果有時間,一定要自己維護一個博客,既然選擇了架構師,就決定了自己以後不僅僅是一個技術專家,同時也要成為一個佈道師,為企業組織或者社會上的其他IT同行們貢獻自己的一些微薄之力。
@ 多參加一些社會上舉辦的軟體專業會議或者活動,了解當前比較流行的技術和框架。
@ 這條不提倡,我以前有一個同事,幾乎每年都要更新簡歷1~2次,目的不是真正的換工作,而是通過面試得到當前市場上大部分公司正在使用什麼技術和框架。對於這條,請慎用!!!!
@如果有結對編程的機會一定要好好珍惜,特別是和高手大拿一起結對的時候。
@如果大家上面都已經做的非常的好了,這個時候可以看看架構設計方面的書籍,比如企業應用架構模式,架構之美等等。
@ 去51Job上搜索架構師這個職位標簽,看看不同行業的企業對於架構師的技術要求和標准,然後結合自己當前所處的行業和你自己的技術特點,比如擅長前段或者後端,有選擇性的學習一些自己感興趣的技術或者方法。
@ 關於常用的網站,沒有定論,筆者主要是根據搜索的結果去發現適合自己的網站,所以需要讀者掌握一定的搜索的技巧,筆者一般喜歡用英文搜索,這樣的話資料比較全也比較新;如果下載電子書的話或者查看博客的話 一般會首選CSDN;如果是解決工作中的問題的話,在StackOverFlow上面被解答的概率是最大的,此外平常自己也需要去積累一些自己感興趣的技術的人氣比較旺的網站列表,比如一般和Window相關的就是MSDN;如果對Java入門比較感興趣,可以看看這個網站。對於一些開源的框架,一般都會有想對應的社區,google一搜索,很快就能找到。另外一個德國人寫的博客的非常的精緻,如果對Eclipse插件開發特別感興趣的朋友們可以去參考它。
@大家如果時間和精煉允許,最好能在Github開源和分享自己平常寫的代碼。這樣一方面可以熟悉git用法,另外一方面也可以把自己平常練手的代碼免費保存,何樂而不為呢?
@如果大家平常遇到什麼問題,可以到StackOverFlow上面去尋找答案;當然,如果你能自己注冊一個StackOverFlow賬號那是最好不過的,這樣不但可以提問,還可以幫助別人,同時上面還有很多工作簽證的工作機會。
#2 軟技能(現代社會,一個合格科學家不僅僅是某一個行業的技術專家同時也是一名專業的社會活動家)

@遇到問題,一定要多想,遇到一個問題,如果解決了,就要反思為什麼能夠解決,如果以後遇到類似的問題,
如何更快速的解決。
@英語的重要性,不言而喻,因為現在很多新技術的框架的中文文檔非常的少,即使翻譯成中文,也是二手的了(國內自己的開發的一些開源框架除外)
@ 有時間的話,看一些溝通方面的書籍,如果有參與溝通的機會的時候,一定要想如何把溝通做的更好更舒暢。
@ 如果有機會的話,可以參加PMP的考試,關於如何備考PMP,請大家參閱另外一篇文章:如何備考PMP,但是如果不想參加的話,也沒有關系,至少要涉獵到項目管理方面的書籍,否則以後如果成為架構師之後,客戶或者管理者給你說一些項目管理上一些專業術語時,到時候就會一頭霧水。
@架構師其實從某種意義上就是一種角色,而不是一種職位。一定要時時刻刻保持空杯心態。
@一定要有一顆保持飢渴學習和耐得住寂寞的赤子之心。
@當前的技術節湊是非常快的,特別是結婚以後又有小孩了。一定要好好的利用自己碎片時間,對於一些技術,當時讀不懂不要緊,但是一定要記住和了解其關鍵詞,這個主要是為了拓寬自己的視野。比如,當前你想自己開發一個系統,結果已經有一個開源框架實現了,而且還很穩定,這個時候,自己就沒有必要重復發明輪子了。
@與不同的技術、編程語言、設計模式和結構等(甚至是它並沒有在日常中給予你直接的幫助)打交道。你永遠都不知道這些知識是否會在未來派上用場,但是對你絕對是有益無害。
@在工作中,能夠幫助到別人解決技術難題,一定要盡量全力以赴,因為這不但可以贏得同事的好感和口碑,同時也能增長你解決問題的經驗和提高你的技術思維能力
@ 一定要掌控好自己的時間,對工作沒有幫助的會議,能不參加盡量不要參加,當然,企業安全,公司規章制度如果是強制性的,該參加還得參加,但是如果沒有工作效率和扯皮的會議,盡量避免參加。
@程序員要耐得住寂寞,要在自己的領域深挖,不能看啥火,就學啥,一定要有自己的想法和判定,如果決定不了,可以向資深的同事或者朋友溝通。
@盡量參與到項目中的編碼,因為架構師不能與項目脫離。
@ 如果有機會可以鍛煉一下自己在大眾環境下的演講和PTT的能力。
@有機會多做知識分享,因為你一旦分享了知識,你就會對這門技術有深刻的印象,同時也能樹立在同事中的良好的技術形象,從而贏得更多的專家影響力而不是職位影響力。
上面只是我當前能想到的,知易行難,知道了上面的一些經驗,並不代表年輕程序員們就能馬上成功,畢竟這需要一個鳳凰涅槃和實踐的過程,但是肯定能幫助有志於於此的年輕程序員們少走一些彎路,限於筆者水平,如有總結不恰當或者不到位的地方,還望批評指正。

『貳』 作為一個程序員,有哪些常用的演算法

常用的演算法有:遞推法、貪心法、列舉法、遞歸法、分治法和模擬法
原則:1. 扎實的基礎。數據結構、離散數學、編譯原理,這些是所有計算機科學的基礎,如果不掌握他們,很難寫出高水平的程序。據我的觀察,學計算機專業的人比學其他專業的人更能寫出高質量的軟體。程序人人都會寫,但當你發現寫到一定程度很難再提高的時候,就應該想想是不是要回過頭來學學這些最基本的理論。不要一開始就去學OOP,即使你再精通OOP,遇到一些基本演算法的時候可能也會束手無策。

2. 豐富的想像力。不要拘泥於固定的思維方式,遇到問題的時候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想像力是建立在豐富的知識的基礎上,除計算機以外,多涉獵其他的學科,比如天文、物理、數學等等。另外,多看科幻電影也是一個很好的途徑。

3. 最簡單的是最好的。這也許是所有科學都遵循的一條准則,如此復雜的質能互換原理在愛因斯坦眼裡不過是一個簡單得不能再簡單的公式:E=mc2。簡單的方法更容易被人理解,更容易實現,也更容易維護。遇到問題時要優先考慮最簡單的方案,只有簡單方案不能滿足要求時再考慮復雜的方案。

4. 不鑽牛角尖。當你遇到障礙的時候,不妨暫時遠離電腦,看看窗外的風景,聽聽輕音樂,和朋友聊聊天。當我遇到難題的時候會去玩游戲,而且是那種極暴力的打鬥類游戲,當負責游戲的那部分大腦細胞極度亢奮的時候,負責編程的那部分大腦細胞就得到了充分的休息。當重新開始工作的時候,我會發現那些難題現在竟然可以迎刃而解。

5. 對答案的渴求。人類自然科學的發展史就是一個渴求得到答案的過程,即使只能知道答案的一小部分也值得我們去付出。只要你堅定信念,一定要找到問題的答案,你才會付出精力去探索,即使最後沒有得到答案,在過程中你也會學到很多東西。

6. 多與別人交流。三人行必有我師,也許在一次和別人不經意的談話中,就可以迸出靈感的火花。多上上網,看看別人對同一問題的看法,會給你很大的啟發。

7. 良好的編程風格。注意養成良好的習慣,代碼的縮進編排,變數的命名規則要始終保持一致。大家都知道如何排除代碼中錯誤,卻往往忽視了對注釋的排錯。注釋是程序的一個重要組成部分,它可以使你的代碼更容易理解,而如果代碼已經清楚地表達了你的思想,就不必再加註釋了,如果注釋和代碼不一致,那就更加糟糕。

8. 韌性和毅力。這也許是"高手"和一般程序員最大的區別。A good programming is 99 weat and 1 ffee。高手們並不是天才,他們是在無數個日日夜夜中磨練出來的。成功能給我們帶來無比的喜悅,但過程卻是無比的枯燥乏味。你不妨做個測試,找個10000以內的素數表,把它們全都抄下來,然後再檢查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這一條。

希望對你有幫助

『叄』 如果,我想當一名程序員,如何從零開始

1、 程序員意味著要編程序。(如果你僅僅想得到一份高薪水的工作,喝喝咖啡就等老闆發薪水,我奉勸你還是另找一份更合適的工作,譬如練攤,真的,兄弟,這份工作不適合你)
2、你是學文的還是學理的,編程序也許需要浪漫,但更需要邏輯和嚴謹。(說坦白點就是,在你沒有找到樂趣以前,它很枯燥)
3、你有對新技術追求的熱情嗎?你有刨根問底的探索精神嗎?(熱情絕對是最重要的!你仔細思考一下自己的性格適合當程序員嗎?)
4、當程序員決不是什麼好差事,時刻需要學習,需要思考。(直到你成為那個可以引導別人去學習和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)
5、程序員的未來很迷茫。(但我認為關鍵看你自己!我希望你是一個有追求的人,不僅僅是混碗飯吃。因為真正的樂趣在於創造;如果你能改變軟體業的歷史,那才是英雄;不想成為Bill Gates,不想成為Dennis Ritchie和 Bjarne Stroustrup,我會說你沒有追求。有個關於程序員未來的笑話,也許你還沒聽過,你該聽一聽,摘抄如下:
一個程序員對自己的未來很迷茫,於是去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝說「我的孩子,你去問Lippman,他現在領導的程序員的隊伍可能是地球上最大的」
於是他去問Lippman。
Lippman說「程序員的未來就是駕馭程序員」
這個程序員對這個未來不滿意,於是他又去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝說「我的孩子,你去問Gates,他現在所擁有的財產可能是地球上最多的」
於是他去問Gates。
Gates說「程序員的未來就是榨取程序員」
這個程序員對這個未來不滿意,於是他又去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝說「我的孩子,你去問侯捷,他寫的計算機書的讀者可能是地球上最多的」
於是他去問侯捷。
侯捷說「程序員的未來就是誘惑程序員」
這個程序員對這個未來不滿意,於是他又去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝搖搖頭「唉,我的孩子,你還是別當程序員了」)
6、當程序員還是很有樂趣的。(當你學到新知識時,當你有新的思想見解時,當你有新的產品問世時,和知己探討你的成果時…我問你,覺得這些是樂趣嗎?)
7、當程序員不易也不難。(世間事有難易乎?為之…;不為…。你有決心和信心嗎?)
8、你真的要當程序員?是你自己的想法?
9、你捨得花錢買書嗎?(讀好書絕對是學習編程的最佳捷徑。你一定會說,現在電腦書籍真他XX的貴,沒法子,誰讓知識和技術在人家的腦袋,在人家的書里呢;等你寫書時可以把價格定低一點,記著還有好多沒錢但想買書的兄弟很困難呀。要捨得買書,買好書,不好的的書不如不讀,其害大於其益,關於買什麼書,你可以問高手或看候捷的書評;准備一個小本子記錄你想買的書的名字,逛書店時看看,如果好就買下,記住要讀,別光買不看。) 10、我告訴你,程序就是:任何有目的的、預想好的動作序列,它是一種軟體。
11、編程序就是編寫程序。
12、你想好了嗎?(如果你想好了還是決定要當程序員,可以繼續往下讀;否則,你可以繼續尋找別的出路了。)
(三) 一個程序員應該具備的基礎知識和概念
1、計算機是有什麼組成的,CPU是什麼東西,其工作原理是什麼。(對於這些以及下面將要提到的概念我不會告訴你什麼答案,你可以看相應的教材,關於教材我會在下一部分詳述,記住理解最重要!)
2、機器語言和微指令集的概念。
3、程序的概念。
4、匯編語言是低級語言但不是機器語言。
5、高級語言主要有那些?(C,C++,Basic,Pascal,Fortran,C#,Java等等;如果你是中國軟體業的英雄,你也寫一門語言,最好不用英語) 6、編譯程序和解釋程序的概念和其原理。(編譯器是高手和專家編寫的)
7、HTML、XML等是標識性語言。
8、Prolog是人工智慧語言。
9、操作系統OS的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,還有一些實時OS,嵌入OS,編這些的絕對是高手)
10、Windows編程說白了就是Windows API的調用。(中國的程序員很多隻是會編windows程序,用的是VB,我的建議是這些程序員頂多隻是低級編碼員,我稱其是coder)
11、VC++、VB、BC、BCB、Delphi、VF等都只是編程的工具和環境,不是編程語言。
12、面向結構的設計概念。
13、面向對象的概念。(好好理解,兄弟,這個東西還是很重要的)
14、軟體工程的概念和原理。(如果你想當老總就需要好好研究了,系統分析員比編碼員要高一個等級,薪水也高喲)
15、資料庫的概念。(要熟悉一些著名的資料庫系統和語言的名字,如Orcle,SQL,DB2,DyBase等)
16、了解網路概念。
17、了解多媒體概念。
18、熟悉和掌握數據結構和基本演算法。
19、是不是要求太高了,別著急慢慢來,進步在不知不覺之中。(一旦開始學習,一個月以後你就會有一個基本的概念;兩個月以後你就會感覺自己有了全面的基礎知識;當你知道編程序是怎麼回事時,說明你已經入門了。也有很多人編了很多年程序還沒有入門呢,你不會希望自己步其後塵吧。要有信心和耐心。沉不住氣怎麼能成大事?!)
(四) 教材推薦
――-推薦的教材主要還是針對概念來的,最好選用名校的教學用書。
1、《計算機組成原理》(熟悉)
2、《數據結構》(掌握)
3、《操作系統》(了解->熟悉)
4、《The C language》(掌握)
5、《編譯原理》(了解原理)
6、《匯編語言》(了解)
7、《計算機網路》(了解)
8、《軟體工程》(了解)
9、《關系資料庫》(熟悉)
10、《The C++Languege 》(掌握)
11、《面向對象設計》(掌握;結合C++學習)
(五)一些經驗和體會
1、真正的程序員用C++;(一位專家說的)
2、動手去編程序;
3、動腦去思考;
4、要有良好的編程風格;
5、讀書,讀好書,盡量讀原版書!(我反復強調這一點,讀書要有選擇,堅持讀好書,名家出的經典書,不要浪費實踐在一些粗製濫造的書上面;堅持博覽群書)
6、有自己的學習計劃;
7、總結自己的經驗教訓;(准備一個筆記本,記錄錯誤和心得)
8、不要怕學新東西;
9、要有軟體工程的思想;
10、善於發現問題,然後去尋找答案;
11、向高手請教;(要虛心直到你成為高手)
12、和同行交流;(不善於交流肯定不行)
13、懂得軟體的實質,不要被千變萬化的表象所迷惑;
14、真正要學慣用的是編程語言和方法,不是什麼庫,什麼類,什麼工具;(學用那些什麼庫都比較簡單,但光會這些庫,我覺得還遠遠不夠)
15、學習wiodows編程主要是學習windows OS和win32 API;
16、有空了解一下嵌入式開發;
17、有空了解一下PDA軟體開發;
18、了解一下.NET框架和C#語言,也許它是你新的衣食父母;
19、要有耐心,不要作浮躁的人; 20、對程序加註釋,並保留你的老程序;
21、學到的東西越多,了解的越多,你就越接近專家;
22、有空去逛逛CSDN,那裡有你很多知己;
23、要有信心成為一個優秀的程序;
(六)一些好書的推薦
1、《The C Programming language》 (Keinighan & Dennis Ritchie 1988)
2、《The C++ Programming Languague》(Bjarne Stroustrup 1997)
3、《Inside The C++ Object Model》 (lippmans)
4、《Effective C++》 (同上)
5、《More Effective C++》 (同上)
6、《Exceptional c++》
7、《C++面向對象高效編程》
8、《設計模式》
9、《Thinking In C++》
10、《The Standard C++ Bible》(一般推薦)
11、《The Art of Computer Programming 》
12、《Programming Windows》 (Charles Petzold)
13、《VC++5.0技術內幕》
14、《MFC 深入淺出》
15、《軟體需求》
16、《Advanced Windows》
17、《C++ primer》
18、《win32程序員參考手冊》
19、《用TCP/IP進行網際互連》
20、《COM 本質論》
(七)學習計劃
――-這個學習計劃是我個人定的,也共享給大家參考一下,共同進步吧。 1、《計算機組成原理》
2、《操作系統》
3、《數據結構》
4、《匯編語言》
5、《 C 》
6、《 C++ 》
7、《VC 技術內幕》
8、《Programming Windows》
9、《深入淺出MFC》
10、《Advanced Windows》
11、《Inside The C++ Object Model》
12、《Thinking in C++》
13、《Effective C++》
14、資料庫
15、網路
16、嵌入式OS和編程
17、硬體單片機
18、.NET和C#
19、軟體工程
20、UNIX和Linux

『肆』 洛陽北大青鳥分享Java程序員學習應該掌握的技巧

每個人都在知道,知識改變命運,無論在任何時候知識都是非常重要的。
在IT行業中,知識是不斷更新變化的,對於Java程序員來說,在技術不斷更新的同時,自己也是需要不斷的充電,這樣才能在行業裡面站穩腳跟。
程序員想要進步是離不開學習的,在學習過程中應該掌握哪些小技巧呢?下面洛陽電腦培訓為大傢具體介紹。
一、一定要看書學習Java,前期學習和後期學習的情況是不同的,後期學習會變得更加容易一下。
在學習的過程中,很多人發現能夠選擇的學習方法是非常多的,視頻學習、培訓學習和看書學習等多種方法,每個人適合的學習方法是不同的,應該如何把Java學習變得越來越簡單呢?Java程序開發學習的不只是皮毛,想要成為高手,任何一點細節的內容都不能錯過。
其實書籍的學習才是最好的載體,書籍裡面蘊含的知識是非常豐富的,IT培訓認為通過看書能讓自己變得更加聰明,並且編寫代碼更加流暢。
二、編程學會獨立思考在這個網路發達的時代中,很多人都知道不會的可以問網路,對網路的依賴性是非常大的。
但是在查網路的過程中,要知道如何把查看的東西變成自己的,比如一個簡單的JBDC的初級問題,在編程的過程中是經常使用的,如果每一次使用都需要去網路查找,那麼想要掌握編程是不可能的。
一般情況下,經常使用的東西應該銘記於心,並且能夠做到信手拈來的效果,這才是一個高手應該具備的能力。
三、了解演算法,不斷優化程序想要快速掌握Java開發,最重要的就是不斷的練習和學習,在學習過程中無論自己學到那個程度,都需要不斷的優化自己編寫的程序,程序的優化對後期的使用有很大的幫助。
並且洛陽北大青鳥認為在進入後期時,應該注重演算法的了解,根據演算法進行優化,這能讓程序更加完美。
四、任何一個程序都需要進行改進學習是一個非常漫長的過程,在開始學習的時候,每個人都會編寫一些簡單的程序,前期編寫的小程序是非常簡單的,僅僅能夠實現一些簡單的功能。
隨著自己技術的不斷加深,我們可以在這個程序上面實現更多的內容,知道程序達到完善,這樣程序的性能才能達到最佳。
五、在學習過程中積累經驗,學會總結在學習的時候,最忌諱的就是一把抓,最後可能什麼都抓不到。
在學習過程中,最重要的就是學會總結,把自己學習的思路、遇到的問題和解決的方法記錄下來,並且還需要記下在整個學習過程中自己積累的經驗和技巧。
在北大青鳥洛陽計算機學院學習的過程中,你會發現這樣的積累能夠讓你得到很快的成長。

『伍』 程序員早下班的秘訣是什麼,可以分享下嗎

之前不懂事,跟著公司的老員工一起內卷,半年後發現勞心勞累。後來轉變思路,想藉助「神器」的力量,無意中用了SoFlu軟體機器人感覺打開了新天地。它能覆蓋後端開發、前端開發、測試運維一體化的全流程全自動開發,效率杠杠的。網路下有很多相關信息。

『陸』 程序員的必備技能有哪些

數組、字元串與哈希表
任何受過專業訓練的程序員,對「數據結構」這門課程中涉及到的各種數據結構都不會陌生,但是在實際的編程工作中,大部分的數據結構都不會用到,而且也永遠都不會用到。雖然如此,深入地理解基本數據結構的概念和實現細節,仍然是每個程序員的任務。這不僅僅是因為,掌握這些知識將有利於更加正確和靈活地應用它們,而且也是因為,對於語言背後的實現細節的求知慾是一個優秀程序員的素質。
正則表達式
在程序員日常工作中,數據處理占據了相當的比重。而所有的數據之中文本又占據了相當的比重。文本能夠被人理解、具有良好的透明性,利於系統開發、測試和維護等就必需要有一定規律遵循一種規則,當你掌握一門正則表達式語言,就能夠培養你編程的直覺本能,達到較高水平,也能夠在實踐中提供更高的開發和執行效率。
調試
軟體調試是軟體工程的一個重要部分,其過程出現在軟體工程的各個階段,從最初的可行性分析、原型驗證、到開發和測試階段、再到發布後的維護與支持,都有軟體調試過程參與。學習和靈活運用軟體調試技術,不僅可以提高程序員工作效率,而且有利於對代碼的感知力和控制力,加深對軟體和系統的理解。此外,調試技術是解決各種軟體難題的一種有效武器,它直擊要害、銳不可擋,相對其它間接方法具有明顯的優勢。軟體有大美,調試見真功!
兩門語言
任何一位職業化的軟體技術人員都會將編程語言當成自己的利器。它們代表了開發人員對計算機本身的理解與對軟體開發工作的執著。同時,建立在編程語言之上的基礎也標志著程序員的職業化道路發展到了一個新的階段,而單一語言又有一定的局限性,軟體開發的本質就是處理信息以及數據。一種專門用來處理數據的腳本語言常常是走向更加職業化的必備武器之一。所以精通兩種語言,對於任何一個開發人員來說,並非必須,但是對於一個專業化程度較高的開發人員來說,又常常是必要的。
一個開發環境
隨著技術的進步,IDE已經越來越強大,遠遠超出我們心目中的最初形象,越來越多的內容被涵蓋到IDE中,從需求分析、業務建摸大批軟體發布,IDE已經逐漸覆蓋了軟體開發的整個生命周期。
SQL語言
說起SQL,絕大多數程序員對其作用都瞭然於胸--用來訪問資料庫嘛。確實,數據是信息系統的核心,沒有數據的計算機應用沒有任何意義。信息系統中,大量數據本質上就以實體--關系的模式存在,而RDBMS支持SQL這么簡單但表達能力豐富的訪問介面,同時還提供了內建的事務ACID特性保證和故障恢復能力--因此,RDBMS理所當然地成為了大部分信息系統的標准數據存儲介質。於是,無論使用何種語言開發信息系統,從C、C++,Delphi到Java,從Perl、Python到Ruby,使用SQL訪問RDBMS都是我們必須修煉的武功秘籍。
編寫軟體的思想
說起程序員的武器自然少不了技術書籍,它們就像是拳譜、劍經、雖然不能馬上轉化為巨大的傷害輸出,但假以時日勤以研讀,有朝一日成為傍身絕學也是說不定。不過雖然各類技術書籍汗牛充棟,除去入門時淺顯易用的參考和復雜深奧的學術專著,能夠讓所有程序員常看常新的心法秘籍還是不多。

『柒』 程序員需要學些什麼

程序員的崗位需求很多,例如大型網路公司、軟體開發公司等等都需要程序員。

程序員需要學習:

1、掌握數據及其轉換、數據的機內表示、算術和邏輯運算,以及相關的應用數學基礎知識;

2、理解計算機的組成以及各主要部件的性能指標;

3、掌握操作系統、程序設計語言的基礎知識;

4、熟練掌握計算機常用辦公軟體的基本操作方法;

5、熟練掌握基本數據結構和常用演算法;

6、熟練掌握C程序設計語言,以及C++、Java、Visual Basic中的一種程序設計語言;

7、熟悉資料庫、網路和多媒體的基礎知識;

8、掌握軟體工程的基礎知識,了解軟體過程基本知識、軟體開發項目管理的常識;

9、了解常用信息技術標准、安全性,以及有關法律、法規的基本知識;

10、了解信息化、計算機應用的基礎知識;

11、正確閱讀和理解計算機領域的簡單英文資料。

程序員必備技能:

1、熟練開發工具

做為一名程序員至少熟練掌握兩到三種開發工具的使用,這是程序員的立身之本,其中C/C++和JAVA是重點推薦的開發工具,C/C++以其高效率和高度的靈活性成為開發工具中的利器,很多系統級的軟體還是用C/C++編寫。

而JAVA的跨平台和與WEB很好的結合是JAVA的優勢所在,而JAVA即其相關的技術集JAVAOne很可能會成為未來的主流開發工具之一。

其次,能掌握一種簡便的可視化開發工具,如VB,PowerBuilder,Delphi,CBuilder,則更好,這些開發工具減小了開發難度,並能夠強化程序員對象模型的概念。

另外,需要掌握基本的腳本語言,如shell,perl等,至少能讀懂這些腳本代碼。

2、熟知資料庫

作為程序員,他們自然有自己的理由:很多應用程序都是以資料庫的數據為中心,而資料庫的產品也有不少,其中關系型資料庫仍是主流形式,所以程序員至少熟練掌握一兩種資料庫,對關系型資料庫的關鍵元素要非常清楚,要熟練掌握SQL的基本語法。

雖然很多資料庫產品提供了可視化的資料庫管理工具,但SQL是基礎,是通用的資料庫操作方法。如果沒有機會接觸商業資料庫系統,可以使用免費的資料庫產品是一個不錯的選擇,如mySQL,Postgres等。

3、了解操作系統

當前主流的操作系統是Windows,Linux/Unix,熟練地使用這些操作系統是必須的,但只有這些還遠遠不夠。

要想成為一個真正的編程高手,需要深入了解操作系統,了解它的內存管理機制、進程/線程調度、信號、內核對象、系統調用、協議棧實現等。

Linux作為開發源碼的操作系統,是一個很好的學習平台,Linux幾乎具備了所有現代操作系統的特徵。雖然Windows系統的內核實現機制的資料較少,但通過互聯網還是能獲取不少資料。懂得網路協議TCP/IP。

在互聯網如此普及的今天,如果您還沒有對互聯網的支撐協議TCP/IP協議棧有很好的掌握,就需要迅速補上這一課,網路技術已改變了軟體運行的模式。

從最早的客戶/伺服器結構,到今天的WEBServices,再到未來的網格計算,這一切都離不開以TCP/IP協議棧為基礎的網路協議支持,深入掌握TCP/IP協議是非常必要的。

至少,需要了解ISO七層協議模型,IP/UDP/TCP/HTTP等常用協議的原理和三次握手機制。

4、明白DCOM/CORBA/XML/WEBServices存在的意義

隨著技術的發展,軟體與網路的無縫結合是必然趨勢,軟體系統的位置無關性是未來計算模式的重要特徵之一,DCOM/CORBA是當前兩大主流的分布計算的中間平台,DCOM是微軟COM(組件對象模型)的擴展,而CORBA是OMG支持的規范。

XML/WebServices重要性不言而喻,XML以其結構化的表示方法和超強的表達能力被喻為互聯網上的「世界語」,是分布式計算的基石之一。

5、不要將軟體工程與CMM分開

大型軟體系統的開發中,工程化的開發控製取代個人英雄主義,成為軟體系統成功的保證,一個編程高手並不一定是一個優秀的程序員。

一個優秀的程序員是將出色的編程能力和開發技巧同嚴格的軟體工程思想有機結合,編程只是軟體生命周期中的其中一環,優秀的程序員應該掌握軟體開發各個階段的基本技能。

如市場分析,可行性分析,需求分析,結構設計,詳細設計,軟體測試等。

6、需求理解能力

程序員要能正確理解任務單中描述的需求。在這里要明確一點,程序員不僅僅要注意到軟體的功能需求,還應注意軟體的性能需求。

要能正確評估自己的模塊對整個項目中的影響及潛在的威脅,如果有著兩到三年項目經驗的熟練程序員對這一點沒有體會的話,只能說明他或許是認真工作過,但是沒有用心工作。

7、模塊化思維能力

作為一個優秀的程序員,他的思想不能局限在當前的工作任務裡面,要想想看自己寫的模塊是否可以脫離當前系統存在,通過簡單的封裝在其他系統中或其他模塊中直接使用。

這樣做可以使代碼能重復利用,減少重復的勞動,也能使系統結構越趨合理。模塊化思維能力的提高是一個程序員的技術水平提高的一項重要指標。

就業方向:

1、網路開發

現在網路已經成為世界通訊的一座橋梁,好像Javascript、PHP、Ruby這幾類開發語言大部分是用作網路開發方面。

2、企業軟體開發

JAVA、C#、VB這幾類開發語言都實現了面向對象開發的目標,更多時候用於企業系統的開發。

3、系統軟體

C語言、C++、Object-C這些軟體更多是用在系統軟體開發,嵌入式開發的方面。

當然,這分類不是絕對,像JAVA、C#、VB很多時候也用於動態網站的開發。在很開發項目都會使用集成開發的方式,同一個項目裡面使用多種開發語言,各展所長,同步開發。

但所以在剛入門的時候,建議先為自己選擇一種合適的開發工具,「專注地投入學習,全力一擊」。


(7)程序員最難得到的秘籍擴展閱讀:

會編程、會計算機語言就能加入互聯網發展大潮中,享受數字經濟發展的紅利,一時間社會上的程序員培訓機構都變得格外火爆。

但是現在,專家的數據分析結果告訴你:若想跟上數字經濟發展的步伐,光會編程可不行,這個行業現在緊缺高端的、綜合型人才。

11月22日下午,清華大學經管學院互聯網發展與治理研究中心與領英聯合發布《中國經濟的數字化轉型:人才與就業》,揭示我國數字人才現狀與趨勢。

報告顯示我國數字經濟發展面臨人才短缺的挑戰,但這種短缺主要體現在擁有中高級專業技能數字人才的比例不高,擁有人工智慧、智能製造等前沿技術的人才更是少之又少。

與美國、英國、加拿大等國家相比,中國的數字人才儲備尚有很大差距。

此外,報告根據對人才需求的數據分析,結果顯示我國數字人才的技能需求不再強調單一編程技能,更加看重技術、管理和領導力等綜合技能。

2015年,我國從事信息傳輸、軟體和信息技術服務相關工作的人數約350萬,但其中中高端人才,特別是前沿技術的數字人才並不多。根據領英中國智庫的研究,在人工智慧領域,美國的從業者數量在85萬人以上,印度15萬,英國14萬,中國只有5萬多人。

報告負責人、清華大學經濟管理學院副院長陳煜波教授表示,我國目前在大數據與人工智慧領域人才缺口明顯。

他解釋說,目前中國85%以上的數字人才分布在產品研發類,而深度分析、先進製造、數字營銷等職能的人才加起來只有不到5%,存在較大缺口,新興技術人才和創新型人才培養方面存在滯後和不足。

這份研究報告的基礎數據來自領英在中國的3600萬個人用戶,這些用戶畢業於1.5萬多所國內外院校,分布在36.4萬家企業,擁有超過2.3萬項技能。

陳煜波研究團隊從中篩選了72萬數字人才,多維度提取用戶畫像並跟蹤其職業軌跡,以此預測不同地區的人才流向、僱傭率、受僱主歡迎的技能等人才趨勢層面的信息。

陳煜波說,根據數據分析結果,整體來看,雖然編程技能和數據分析技能需求占據主導,然而隨著數字產業走向成熟,企業除了強調編程技能,也逐步更加看重人才的技術、管理和領導力等綜合技能。

近年間,項目管理、產品運營等「技術+管理」類技能的需求呈現出明顯的上升趨勢,懂技術、懂管理的人才被認為是「一將難求」。

領英中國代理總裁曾志恆也提醒,如果你有興趣向數字職能轉型,不能僅僅專注於自己的技術能力,溝通和領導力等軟性技能將成為你脫穎而出的關鍵。

陳煜波希望這些研究結果能為教育行業和政府部門提供借鑒。他說,教育行業可根據職位的供需趨勢更好地規劃人才培養的方向,政府也可更好地了解人才流動方向、技術缺口等,以此制定有針對性的引才策略。

程序員崗位職責:

1、對項目經理負責,負責軟體項目的詳細設計、編碼和內部測試的組織實施,對小型軟體項目兼任系統分析工作,完成分配項目的實施和技術支持工作。

2、協助項目經理和相關人員同客戶進行溝通,保持良好的客戶關系。

3、參與需求調研、項目可行性分析、技術可行性分析和需求分析。

4、熟悉並熟練掌握交付軟體部開發的軟體項目的相關軟體技術。

5、負責向項目經理及時反饋軟體開發中的情況,並根據實際情況提出改進建議。

6、參與軟體開發和維護過程中重大技術問題的解決,參與軟體首次安裝調試、數據割接、用戶培訓和項目推廣。

7、負責相關技術文檔的擬訂。

8、負責對業務領域內的技術發展動態進行分析研究。

相關書籍:

很多程序員響應,他們在推薦時也寫下自己的評語。 以前就有國內網友介紹這個程序員書單,不過都是推薦數 Top 9的書。

其實除了前9本之外,推薦數前30左右的書籍都算經典,筆者整理編譯這個問答貼,同時摘譯部分推薦人的評語。

下面就按照各本書的推薦數排列。

1、《代碼大全》 史蒂夫·邁克康奈爾

2、《程序員修煉之道》

3、《計算機程序的構造和解釋》

4、《演算法導論》

5、《重構:改善既有代碼的設計》

6、《設計模式》

7、《人月神話》

8、《計算機程序設計藝術》

9、《編譯原理》(龍書)

10、《活著》

『捌』 如何才能修煉成一名不可替代的程序員,避免裁員危機

程序員,就是從事程序開發、程序設計、程序維護的專業人士。

作為一種專業性極強的技術性專業,程序員的工作難度非常高,只有專業技能水平高超的人才能在這個領域獲得良好的發展前景。……那些實力不足的人,只能被最終淘汰。

因此,要想在程序員這一行里成為不可替代的人,避免自己被淘汰出局的情況,就必須具備以下幾方面能力:

1,高人一籌的專業技能。

在職場上,要想確保自身生存,就必須具備一項專業技能。……要想確保自己不被淘汰,就必須具備高人一籌的專業技能水平。

因此,要想讓自己成為不可替代的程序員,要想讓自己避免被淘汰的情況,就必須確保自己的專業技能水平高人一籌。

2,強大的羅輯思維能力。

程序,是一個邏輯性極強的系統。

一個程序的各個部分之間、各項功能之間,都存在著極強的關聯,也擁有著非常強的邏輯關系。

因此,要想編寫出性能優異的程序,就必須擁有極強的邏輯思維能力。……這是確保自己擁有更強實力、確保自己不被淘汰的重要能力。

3,高超的數學水平。

程序的表象,是一段代碼。而其核心,則是數學模型,是具體的演算法。……只有具備高超的數學水平,才有能力編寫出演算法精妙、邏輯嚴謹的程序來。……這是自己具備更高水準的關鍵因素。也是自己高人一籌,不可替代的關鍵因素。

4,精通至少一門編程語言。

編程語言是程序員在編程時所用的工具。……只有熟練掌握手中的工具,才能讓自己編寫出優秀的軟體。……編程語言有很多種,一個程序員不可能面面俱到。……但是一個合格的程序員必須掌握至少一門編程語言,這就是自己工作時最得力的工具。……運用這個工具,自己就可以編寫出優秀的軟體,就可以獲得更好的業績,最終成為不可替代的優秀人才了。……自己也就不可能被淘汰了……

『玖』 3年工作經驗程序員應有的技能

因為和同事有約定再加上LZ自己也喜歡做完一件事之後進行總結,因此有了這篇文章。這篇文章大部分內容都是面向整個程序員群體的,當然因為LZ本身是做Java開發的,因此有一部分內容也是專門面向咱們Java程序員的。


簡單先說一下,LZ坐標杭州,13屆本科畢業,算上年前在阿里巴巴B2B事業部的面試,一共有面試了有6家公司(因為LZ不想請假,因此只是每個晚上去其他公司面試,所以面試的公司比較少),其中成功的有4家,另外兩家失敗的原因在於:


1、阿里巴巴B2B事業部的面試,兩輪技術面試都過了,最後一輪面試是對方的主管,由於聽說技術面試過了基本上90%都面試成功了,所以LZ在和主管的交談中也是毫無顧忌,說得天花亂墜,很多自己介於知道和不知道的東西都直接脫口而出了,結果多次被對方一反問就問得啞口無言。事後想來,模稜兩可的答案是面試中最忌諱的,這次的失敗也讓LZ認真地對待後面的每一次面試


2、另外一家失敗的是一家小公司,也就20來個人吧,整個團隊是支付寶出來創業的,非常厲害。面試完LZ多方了解了一下,對方認為我基本功什麼的都不錯,但是實際項目經驗還是欠缺一些,因為對方是創業型公司,需要人上手就能幹活,因此我在這個時候還不是特別適合他們團隊。至於其他成功的四家公司,給LZ的面試評價都挺高的貌似,但LZ也不想記流水賬,因此就不一一列舉每家公司的面試過程了,下面LZ主要談談作為一名工作三年左右的Java程序員應該具備的一些技能以及個人的一些其他感悟。


關於程序員的幾個階段


每個程序員、或者說每個工作者都應該有自己的職業規劃,如果看到這里的朋友沒有自己的職業規劃,希望你可以思考一下自己的將來。LZ常常思考自己的未來,也從自己的思考中總結出了一些東西:


第一階段:三年


我認為三年對於程序員來說是第一個門檻,這個階段將會淘汰掉一批不適合寫代碼的人。這一階段,我們走出校園,邁入社會,成為一名程序員,正式從書本上的內容邁向真正的企業級開發。我們知道如何團隊協作、如何使用項目管理工具、項目版本如何控制、我們寫的代碼如何測試如何在線上運行等等,積累了一定的開發經驗,也對代碼有了一定深入的認識,是一個比較純粹的Coder的階段


第二階段:五年


五年又是區分程序員的第二個門檻。有些人在三年裡,除了完成工作,在空餘時間基本不會研究別的東西,這些人永遠就是個Coder,年紀大一些勢必被更年輕的人給頂替;有些人在三年裡,除了寫代碼之外,還熱衷於研究各種技術實現細節、看了N多好書、寫一些博客、在Github上分享技術,這些人在五年後必然具備在技術上獨當一面的能力並且清楚自己未來的發展方向,從一個Coder逐步走向系統分析師或是架構師,成為項目組中不可或缺的人物


第三階段:十年


十年又是另一個門檻了,轉行或是繼續做一名程序員就在這個節點上。如果在前幾年就抱定不轉行的思路並且為之努力的話,那麼在十年的這個節點上,有些人必然成長為一名對行業有著深入認識、對技術有著深入認識、能從零開始對一個產品進行分析的程序員,這樣的人在公司基本擔任的都是CTO、技術專家、首席架構師等最關鍵的職位,這對於自己絕對是一件榮耀的事,當然老闆在經濟上也絕不會虧待你


第一部分總結一下,我認為,隨著你工作年限的增長、對生活對生命認識的深入,應當不斷思考三個問題:


1、我到底適不適合當一名程序員?


2、我到底應不應該一輩子以程序員為職業?


3、我對編程到底持有的是一種什麼樣的態度,是夠用就好呢還是不斷研究?


最終,明確自己的職業規劃,對自己的規劃負責並為之努力。


關於項目經驗


LZ在網上經常看到一些別的朋友有提出項目經驗的問題,依照LZ面試的感覺來說,面試主要看幾點:項目經驗+基本技術+個人潛力(也就是值不值得培養)。


關於項目經驗,我認為並發編程網的創始人方騰飛老師講的一段話非常好:


介紹產品時面試官會考察應聘者的溝通能力和思考能力,我們大部分情況都是做產品的一個功能或一個模塊,但是即使是這樣,自己有沒有把整個系統架構或產品搞清楚,並能介紹清楚,為什麼做這個系統?這個系統的價值是什麼?這個系統有哪些功能?優缺點有哪些?如果讓你重新設計這個系統你會如何設計?


我覺得這就已經足以概括了。也許你僅僅工作一年,也許你做的是項目中微不足道的模塊,當然這些一定是你的劣勢且無法改變,但是如何彌補這個劣勢,從方老師的話中我總結幾點:


1、明確你的項目到底是做什麼的,有哪些功能


2、明確你的項目的整體架構,在面試的時候能夠清楚地畫給面試官看並且清楚地指出從哪裡調用到哪裡、使用什麼方式調用


3、明確你的模塊在整個項目中所處的位置及作用


4、明確你的模塊用到了哪些技術,更好一些的可以再了解一下整個項目用到了哪些技術


在你無法改變自己的工作年限、自己的不那麼有說服力的項目經驗的情況下(這一定是扣分項),可以通過這種方式來一定程度上地彌補並且增進面試官對你的好感度。


關於專業技能


寫完項目接著寫寫一名3年工作經驗的Java程序員應該具備的技能,這可能是Java程序員們比較關心的內容。我這里要說明一下,以下列舉的內容不是都要會的東西—-但是如果你掌握得越多,最終能得到的評價、拿到的薪水勢必也越高。


1、基本語法


這包括static、final、transient等關鍵字的作用,foreach循環的原理等等。今天面試我問你static關鍵字有哪些作用,如果你答出static修飾變數、修飾方法我會認為你合格,答出靜態塊,我會認為你不錯,答出靜態內部類我會認為你很好,答出靜態導包我會對你很滿意,因為能看出你非常熱衷研究技術。


最深入的一次,LZ記得面試官直接問到了我volatile關鍵字的底層實現原理(順便插一句,面試和被面試本身就是相對的,面試官能問這個問題同時也讓面試者感覺到面試官也是一個喜愛研究技術的人,增加了面試者對公司的好感,LZ最終選擇的就是問了這個問題的公司),不要覺得這太吹毛求疵了—-越簡單的問題越能看出一個人的水平,別人對你技術的考量絕大多數都是以深度優先、廣度次之為標準的,切記。


2、集合


非常重要,也是必問的內容。基本上就是List、Map、Set,問的是各種實現類的底層實現原理,實現類的優缺點。


集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的實現原理,能流利作答,當然能掌握CopyOnWrite容器和Queue是再好不過的了。另外多說一句,ConcurrentHashMap的問題在面試中問得特別多,大概是因為這個類可以衍生出非常多的問題,關於ConcurrentHashMap,我給網友朋友們提供三點回答或者是研究方向:


(1)ConcurrentHashMap的鎖分段技術


(2)ConcurrentHashMap的讀是否要加鎖,為什麼


(3)ConcurrentHashMap的迭代器是強一致性的迭代器還是弱一致性的迭代器


3、設計模式


本來以為蠻重要的一塊內容,結果只在阿里巴巴B2B事業部面試的時候被問了一次,當時問的是裝飾器模式。


當然咱們不能這么功利,為了面試而學習,設計模式在工作中還是非常重要、非常有用的,23種設計模式中重點研究常用的十來種就可以了,面試中關於設計模式的問答主要是三個方向:


(1)你的項目中用到了哪些設計模式,如何使用


(2)知道常用設計模式的優缺點


(3)能畫出常用設計模式的UML圖


4、多線程


這也是必問的一塊了。因為三年工作經驗,所以基本上不會再問你怎麼實現多線程了,會問得深入一些比如說Thread和Runnable的區別和聯系、多次start一個線程會怎麼樣、線程有哪些狀態。當然這只是最基本的,出乎意料地,幾次面試幾乎都被同時問到了一個問題,問法不盡相同,總結起來是這么一個意思:


假如有Thread1、Thread2、Thread3、Thread4四條線程分別統計C、D、E、F四個盤的大小,所有線程都統計完畢交給Thread5線程去做匯總,應當如何實現?


聰明的網友們對這個問題是否有答案呢?不難,java.util.concurrent下就有現成的類可以使用。


另外,線程池也是比較常問的一塊,常用的線程池有幾種?這幾種線程池之間有什麼區別和聯系?線程池的實現原理是怎麼樣的?實際一些的,會給你一些具體的場景,讓你回答這種場景該使用什麼樣的線程池比較合適。


最後,雖然這次面試問得不多,但是多線程同步、鎖這塊也是重點。synchronized和ReentrantLock的區別、synchronized鎖普通方法和鎖靜態方法、死鎖的原理及排查方法等等,關於多線程,我在之前有些過文章總結過多線程的40個問題,可以參看40個Java多線程問題總結。


5、JDK源碼


要想拿高工資,JDK源碼不可不讀。上面的內容可能還和具體場景聯系起來,JDK源碼就是實打實地看你平時是不是愛鑽研了。LZ面試過程中被問了不少JDK源碼的問題,其中最刁鑽的一個問了LZ,String的hashCode()方法是怎麼實現的,幸好LZ平時String源代碼看得多,答了個大概。JDK源碼其實沒什麼好總結的,純粹看個人,總結一下比較重要的源碼:


(1)List、Map、Set實現類的源代碼


(2)ReentrantLock、AQS的源代碼


(3)AtomicInteger的實現原理,主要能說清楚CAS機制並且AtomicInteger是如何利用CAS機制實現的


(4)線程池的實現原理


(5)Object類中的方法以及每個方法的作用


這些其實要求蠻高的,LZ去年一整年基本把JDK中重要類的源代碼研究了個遍,真的花費時間、花費精力,當然回頭看,是值得的—-不僅僅是為了應付面試。


6、框架


老生常談,面試必問的東西。一般來說會問你一下你們項目中使用的框架,然後給你一些場景問你用框架怎麼做,比如我想要在Spring初始化bean的時候做一些事情該怎麼做、想要在bean銷毀的時候做一些事情該怎麼做、MyBatis中$和#的區別等等,這些都比較實際了,平時積累得好、有多學習框架的使用細節自然都不成問題。


如果上面你的問題答得好,面試官往往會深入地問一些框架的實現原理。問得最多的就是Spring
AOP的實現原理,當然這個很簡單啦,兩句話就搞定的的事兒,即使你不會准備一下就好了。LZ遇到的最變態的是讓LZ畫一下Spring的Bean工廠實現的UML圖,當然面對這樣一個有深度的問題,LZ是絕對答不出來的/(ㄒoㄒ)/~~


7、資料庫


資料庫十有八九也都會問到。一些基本的像union和unionall的區別、left
join、幾種索引及其區別就不談了,比較重要的就是資料庫性能的優化,如果對於資料庫的性能優化一竅不通,那麼有時間,還是建議你在面試前花一兩天專門把SQL基礎和SQL優化的內容准備一下。


不過資料庫倒是不用擔心,一家公司往往有很多部門,如果你對資料庫不熟悉而基本技術又非常好,九成都是會要你的,估計會先把你放到對資料庫使用不是要求非常高的部門鍛煉一下。


8、數據結構和演算法分析


數據結構和演算法分析,對於一名程序員來說,會比不會好而且在工作中絕對能派上用場。數組、鏈表是基礎,棧和隊列深入一些但也不難,樹挺重要的,比較重要的樹AVL樹、紅黑樹,可以不了解它們的具體實現,但是要知道什麼是二叉查找樹、什麼是平衡樹,AVL樹和紅黑樹的區別。記得某次面試,某個面試官和我聊到了資料庫的索引,他問我:你知道索引使用的是哪種數據結構實現嗎?


LZ答到用的Hash表吧,答錯。他又問,你知道為什麼要使用樹嗎?LZ答到因為Hash表可能會出現比較多的沖突,在千萬甚至是上億級別的數據面前,會大大增加查找的時間復雜度。而樹比較穩定,基本保證最多二三十次就能找到想要的數據,對方說不完全對,最後我們還是交流了一下這個問題,我也明白了為什麼要使用樹,這里不說,網友朋友們覺得索引為什麼要使用樹來實現呢?


至於演算法分析,不會、不想研究就算了,記得某次面試對方問我,Collections.sort方法使用的是哪種排序方法,額,吐血三升。當然為了顯示LZ的博學,對演算法分析也有一定的研究(⊙_⊙)b,LZ還是硬著頭皮說了一句可能是冒泡排序吧。當然答案肯定不是,有興趣的網友朋友們可以去看一下Collections.sort方法的源代碼,用的是一種叫做TimSort的排序法,也就是增強型的歸並排序法。


9、Java虛擬機


出乎LZ的意料,Java虛擬機應該是很重要的一塊內容,結果在這幾家公司中被問到的概率幾乎為0。要知道,LZ去年可是花了大量的時間去研究Java虛擬機的,光周志明老師的《深入理解Java虛擬機:JVM高級特性與最佳實踐》,LZ就讀了不下五遍。


言歸正傳,雖然Java虛擬機沒問到,但我覺得還是有必要研究的,LZ就簡單地列一個提綱吧,談談Java虛擬機中比較重要的內容:


(1)Java虛擬機的內存布局


(2)GC演算法及幾種垃圾收集器


(3)類載入機制,也就是雙親委派模型


(4)Java內存模型


(5)happens-before規則


(6)volatile關鍵字使用規則


也許面試無用,但在走向大牛的路上,不可不會。


10、Web方面的一些問題


Java主要面向Web端,因此Web的一些問題也是必問的。LZ碰到過問得最多的兩個問題是:


談談分布式Session的幾種實現方式


常用的四種能答出來自然是讓面試官非常滿意的,另外一個常問的問題是:


講一下Session和Cookie的區別和聯系以及Session的實現原理


這兩個問題之外,web.xml裡面的內容是重點,Filter、Servlet、Listener,不說對它們的實現原理一清二楚吧,至少能對它們的使用知根知底。另外,一些細節的方面比如get/post的區別、forward/重定向的區別、HTTPS的實現原理也都可能會被考察到。


噢,想起來了,一致性Hash演算法貌似也被問到了幾次,這個LZ以前專門深入研究過並且寫了兩篇博文,因此問到這個問題LZ自然是答得毫不費力。文章是MemCache超詳細解讀和對一致性Hash演算法,Java代碼實現的深入研究,特別說明,LZ真的不是在為自已以前寫的文章打廣告啊啊啊啊啊啊。


最後,如果有興趣有時間,建議學習、研究一下SOA和RPC,面向服務體系,大型分布式架構必備,救命良方、包治百病、屢試不爽。


關於HR面試


如果你過五關斬六將,成功地通過了所有的技術面,那麼恭喜你,你離升職加薪、出任CEO、迎娶白富美、走向人生巔峰又進了一步。但是還沒有到談薪資待遇的時候,最後還有一個考驗:HR面試。基本所有的大公司都有這一輪的面試,不要小看HR面試,很多公司的HR對於面試者都有一票否決權的—-即使前面的面試對你的評價再高。


所以,這輪的面試也必須重視起來,HR面試主要問的是幾點:


1、簡歷中寫的過去工作經歷的離職原因


2、當前公司薪資待遇


3、期望能到怎樣的一家公司


4、個人未來的發展方向


我專門提一下第2點。可能有人比較排斥也不想說這個,我個人倒是持開放狀態,問了就說了,當然一些的誇大還是必要的,當前公司薪資待遇多報個一千塊錢完全沒問題(畢竟是一家互聯網公司總多多少少有些補貼啊什麼的嘛)。因為這和你在新公司能拿到的薪水關系不大,新公司能拿到的薪水的決定因素是整個公司的薪資情況以及根據你的面試情況在公司的定位,都是有固定的薪資范圍的。HR問這個主要也就是心裡有個數並且看你是否誠信—-有些公司入職時會要求你提供最近一家單位的銀行流水號。


HR面試就說到這里了,總結起來其實就是四個字:滴水不漏。整個面試過程態度積極向上,不要有任何悲觀消極的態度(尤其在談到以前公司情況的時候,即使有再多的不滿),就不會有問題。

『拾』 石家莊北大青鳥分享如何成為一名自由的程序員

越來越多的程序員已經或希望加入到自由職業者的行列,你是否也是其中的一員呢?在這篇文章里我將嘗試結合自身的一些經驗,來告訴你成為自由程序員能夠獲得的那些益處,以及為了取得成功所需要面臨的挑戰。
自由程序員的類型很多人把自由程序員定義為沒有正式工作,在家裡接活的程序員。
而我認為下面這5種類型,都可以被視為自由程序員:獨立接包者:他們接的活都是基於項目的,但他們並沒有任何雇員,而是獨立地完成這些項目,然後通過結算獲得收入。
兼職程序員:他們一般都有正式的工作,但會利用較為充足的業余時間(晚上或周六、周日)來接一些規模較小的私活,或者參與一些工作之外的項目。
混合外包:他們本身可能就是一家公司的外包,但他們的時間相對比較自由,可以接其他工作來干,工作和私活對他們來說已經不存在清晰的界限了。
臨時工:可能是經朋友介紹,短時間參與項目的程序員,項目完成後他們能獲得一定的報酬,但他們一般不會主動找活來做。
團隊接包者:他們一般都是在某個領域深耕多年的自由程序員,他們往往會僱傭了一個小型開發團隊,並通過經營一個網店或服務網站的形式,對外提供軟體外包服務。
他們能夠承接一些較大的項目,收益一般也會更高。
成為自由程序員的優點成為一名自由程序員有很多吸引人的地方,以下可能是最讓人動心的:你將成為自己的老闆,不再需要根據領導的安排去做那些你不想做的事情,這可能也是每個職場人的夢想吧!你的工作將具有更高的靈活性,或者說你可以按照自己最喜歡的方式來安排工作的時間、地點、以及進度。
你可以選擇在家辦公,從而節省了租用辦公室,購置辦公設備以及通勤的費用。
成為自由程序員的挑戰同樣,成為自由程序員,你也需要面臨很多挑戰:你的工作量不會非常穩定,有時候很忙,而有時候卻可能很閑,你需要合理地安排項目進度以及管理自己的時間。
在家工作很容易讓你分心,你需要有很強的自控能力來保證工作的效率和質量。
你將不再享受員工的福利,比如養老金、醫療保險、住房公積金等等,為了得到相應的保障,你必須自己購買相應的保險來進行彌補。
你需要不斷地尋找新的客戶,這在成為自由程序員的初期尤為困難,你需要那些新客戶的項目給你帶來一定的現金流,從而挺過最開始幾個月的困難期。
同時,當你有了一些客戶之後,你仍需要考慮如何與這些客戶建立穩定的關系,時常詢問客戶的反饋,改進意見等等,都能夠幫助你提升客戶關系。
項目管理是你要面臨的另一挑戰,這並不僅僅指你如何管理項目的進度,更在於在整個項目期間,如何有效地獲得客戶的需求,管控他們的期望,以及進行風險的管理等等。
石家莊IT培訓http://www.kmbdqn.cn/見過很多項目,在經過一段短暫的蜜月期後,最終因為項目管理不當而不歡而散,無法收回尾款。
而對你來說,除了金錢之外,最大的損失可能是你的聲譽。

閱讀全文

與程序員最難得到的秘籍相關的資料

熱點內容
十三排電影院坐第幾排 瀏覽:122
尼故福利院 瀏覽:602
哪有好看的電影網站 瀏覽:773
紅顏薄命女斗小說 瀏覽:940
法國電影戀愛love2012電影完整版 瀏覽:459
在線影視 不卡 瀏覽:168
老男孩韓國完整版百度網盤 瀏覽:485
用箱子運水怪結果被放出來了電影 瀏覽:519
徐錦江空中飛人片名 瀏覽:164
手機免費在線看福利電影 瀏覽:457
羅麗星克萊爾經典 瀏覽:342
台灣紅羊有哪些經典電影 瀏覽:568
免下載你懂的 瀏覽:975
新建文件夾1女演員三位 瀏覽:740
不用下載就能看的視頻網站 瀏覽:330
我一個神偷硬生生把國家偷成強國 瀏覽:600
樣子是五歲小男孩和郭富城演的 瀏覽:460
韓國演員也美娜 瀏覽:898
陸離是哪部小說的主角 瀏覽:49
華娛開局佟麗婭 瀏覽:17