如果你也關(guān)注IT行業(yè),你一定能發(fā)現(xiàn),一直都有人不斷地散布有關(guān)程序員的負(fù)面內(nèi)容:什么Java開(kāi)發(fā)飽和了、學(xué)Java找不到工作、程序員吃青春飯、中年危機(jī)有多厲害、35歲一定面臨裁員、程序員禿頭脫發(fā)穿格子衫、直男無(wú)趣不洗澡……等等等等。
其實(shí)說(shuō)這些話(huà)的沒(méi)有一個(gè)是程序員,都是檸檬精的抹黑或者外行人的偏見(jiàn)。這里貼一張2011年的老圖,回頭看看2011年就唱衰“IT民工荒”的那幫人,10年就快過(guò)去了,你們口中的“IT民工”至今依然領(lǐng)著傲人的薪水,互聯(lián)網(wǎng)科技公司的薪資待遇領(lǐng)先其他行業(yè)好幾倍,就問(wèn)你們?nèi)齻€(gè)字:“香不香?”
實(shí)際上Java初級(jí)開(kāi)發(fā)崗位對(duì)于從業(yè)者的要求并不高,通常能夠熟練使用常見(jiàn)的Java框架就可以找到第一份工作了(很可能是外包)。但是外行人難免忐忑,心里沒(méi)譜兒,到底Java學(xué)到何種程度可以找到工作呢?本文就從一個(gè)程序員是如何誕生的視角,以校招和社招兩個(gè)角度向大家講解面試官會(huì)問(wèn)些什么以及求職者該準(zhǔn)備什么。
面向校招編程
1、Java核心方面,集合,多線(xiàn)程,異常處理,IO,面向?qū)ο螅盒停⒔猓瓷?hellip;…各種編程通用語(yǔ)法大概率會(huì)問(wèn)到,比如就問(wèn)些ArrayList和LinkedList的差別;用Java實(shí)現(xiàn)堆棧,鏈表,隊(duì)列,散列表,樹(shù)等的數(shù)據(jù)結(jié)構(gòu);操練各種排序算法。
2、前端基礎(chǔ)方面,HTML5 CSS3 JS(和Java一樣復(fù)雜,會(huì)使用就行), 不要以為是后端工程師,不學(xué)前端,在實(shí)際工作中div+css布局一定要麻溜的,JS的dom操作必須給力。
3、web服務(wù)器方面,Tomcat和Nginx服務(wù)器搭建,配置文件,Servlet,JSP,F(xiàn)ilter,Listener,http協(xié)議等。Tomcat目錄結(jié)構(gòu)必須了如指掌。讓你手動(dòng)部署個(gè)webapp總要會(huì)。哪里配置虛擬主機(jī),哪里改端口號(hào),web-info文件夾下的內(nèi)容外部無(wú)法訪(fǎng)問(wèn)這些都要懂一點(diǎn)。
4、數(shù)據(jù)庫(kù)方面,能會(huì)基本的增刪改查即可,外帶一些基本概念,比如事務(wù)怎么處理,JDBC里批處理怎么處理。會(huì)寫(xiě)增刪改查的SQL語(yǔ)句,知道存儲(chǔ)過(guò)程之類(lèi)的概念,會(huì)通過(guò)索引優(yōu)化查詢(xún)條件,多表關(guān)聯(lián)、左外右外不能慫,這里請(qǐng)注意,至少得用過(guò)一種商業(yè)化數(shù)據(jù)庫(kù),推薦Mysql。
5、Web框架方面,需要以全棧的形式,了解SSM,或Spring Boot或Spring Cloud從前端到后端的基本語(yǔ)法,至少能在項(xiàng)目經(jīng)理短期幫助下,能照著別人的例子寫(xiě)代碼。應(yīng)屆生候選人只要能講清楚相關(guān)框架的語(yǔ)法點(diǎn)和流程即可,最多再附帶說(shuō)明下mybatis等組件的用法,至于redis,dubbo,根本沒(méi)要求。需要有Spring+Spring MVC+mybatis框架的實(shí)際操作能力(不是商業(yè)項(xiàng)目開(kāi)發(fā)能力),至于有Spring Boot或Spring Cloud,那更好了。了解Spring里IOC, AOP,Mybatis里的ORM過(guò)程是WEB框架考察核心。
6、綜合技能方面,能知道基本的數(shù)據(jù)結(jié)構(gòu)知識(shí)(線(xiàn)性表外帶排序外帶一些樹(shù)的技能),基本的操作系統(tǒng)知識(shí)(一般僅限于線(xiàn)程進(jìn)程概念),基本網(wǎng)絡(luò)通訊知識(shí)(一般僅限于網(wǎng)絡(luò)通訊模型和tcp udp協(xié)議),但這僅僅是“需要知道”而已。
如果你是一位普通的大學(xué)生:
起碼要學(xué)好計(jì)算機(jī)專(zhuān)業(yè)的“四大課”——
-
數(shù)據(jù)結(jié)構(gòu)
-
計(jì)算機(jī)組成原理
-
計(jì)算機(jī)網(wǎng)絡(luò)
-
計(jì)算機(jī)操作系統(tǒng)
大學(xué)生學(xué)好計(jì)算機(jī)四大專(zhuān)業(yè)課無(wú)論是應(yīng)對(duì)校招,還是考研皆可,不負(fù)青春。
如果你是一位優(yōu)秀的大學(xué)生:
-
《劍指offer》刷一遍,有些重點(diǎn)的題一定要滾瓜爛熟;
-
leetcode有時(shí)間一定要刷,對(duì)解題思路很有幫助。
-
去網(wǎng)上(GitHub)找項(xiàng)目做,并且把這個(gè)項(xiàng)目做成面試中最大的籌碼。
這就需要你對(duì)于你的作品中的每一行代碼都要很熟,用到的技術(shù)不僅要會(huì)用,還要理解底層,并且像“練號(hào)”一樣的不斷完善它。
如果你在面試中祭出你的作品,那面試官的問(wèn)題一定是圍繞你自己做的項(xiàng)目開(kāi)展的,想一下,你把面試官帶進(jìn)自己的領(lǐng)域,又侃侃而談,就像邀請(qǐng)面試官來(lái)家做客一樣自信滿(mǎn)滿(mǎn)的表現(xiàn),一定給你打高分,offer準(zhǔn)沒(méi)跑了。
面向社招編程
如果錯(cuò)過(guò)了校招機(jī)會(huì),只能面向社招的話(huà),那么無(wú)疑是從“Easy模式”瞬間提升到“Hard模式”。不但面向校招編程所需技能一樣都不能少,還需要多多益善的商業(yè)項(xiàng)目實(shí)戰(zhàn)經(jīng)驗(yàn)。這還真的就像玩游戲選擇難度一樣,還是同樣的配方,還是熟悉的味道,只不過(guò)需要你操作更強(qiáng),出錯(cuò)更少才能過(guò)關(guān)。
這就需要你必須是“過(guò)來(lái)人”才能通關(guān)hard模式,也就是社招通常要求的“三年工作經(jīng)驗(yàn)”起步。沒(méi)有人開(kāi)局就Hard模式通關(guān)的吧?除非是個(gè)腦殘游戲,Java可并不腦殘,那該怎么辦呢?說(shuō)白了就是相比校招,需要更多的商業(yè)項(xiàng)目經(jīng)驗(yàn)。
注意商業(yè)項(xiàng)目經(jīng)驗(yàn),是指的真實(shí)項(xiàng)目經(jīng)驗(yàn),所做項(xiàng)目可部署上線(xiàn),不是應(yīng)屆生做畢業(yè)設(shè)計(jì)用的那種學(xué)習(xí)項(xiàng)目。如何才能刷到真正的商業(yè)項(xiàng)目實(shí)戰(zhàn)經(jīng)驗(yàn)?zāi)兀繜o(wú)非就是前期瘋狂的不要錢(qián)刷實(shí)習(xí),找各種機(jī)會(huì)參與到真實(shí)的項(xiàng)目中,并且盡可能的把Java技能樹(shù)全部點(diǎn)亮。
社招的面試官問(wèn)的問(wèn)題可就沒(méi)有校招時(shí)那般“小兒科”了,問(wèn)題會(huì)涉及日常開(kāi)發(fā)工作的全部技術(shù)棧的方方面面,對(duì)于面試者來(lái)說(shuō)就要準(zhǔn)備得面面俱到了。
什么源碼剖析、JVM底層調(diào)優(yōu)、Nginx性能調(diào)優(yōu)、算法深入、LeetCode中級(jí)題、分布式部署方式、微服務(wù)設(shè)計(jì)思想、Redis\MemberCache\RocketMq\kafka\ElasticSearch等中間件、Dubbo高可用、Netty對(duì)RPC框架序列化、服務(wù)治理……等等等等等
社招的要求每年是水漲船高,你很可能還需要看這些書(shū):thinking in Java,effective java,深入理解java虛擬機(jī),java多線(xiàn)程,java并發(fā)編程實(shí)戰(zhàn),springmvc,dubbo,netty實(shí)戰(zhàn),高性能MySql,Redis實(shí)戰(zhàn),深入理解Nginx,Springboot,Springcloud,jdk集合源碼,jdk并發(fā)包源碼。
看完這些,找個(gè)一二線(xiàn)互聯(lián)網(wǎng)工作不成問(wèn)題。
最后,既然選擇IT行業(yè),就要有終生學(xué)習(xí)的覺(jué)悟,Keep Leaning :)