作者:_XiaoTeng_ 來源:??途W(wǎng)
寫了個顯眼的標(biāo)題,,就真得說幾句有用的話。
5月份一個很偶然的機會,,加了葉神的微信,,還收到了祝福,。一激動就承諾說寫篇最詳細的面經(jīng)分享給大家,,畢竟用了這么久的??途W(wǎng),收獲真的很大,。
校招真的是段勞心傷神的經(jīng)歷,,我把這一路的體會,寫在秋招前,,也許能給那些和我一樣迷茫過,,懷疑過,失落過的人一些幫助,。
(這篇文章有點長,,可能需要點耐心)
首先呢我的面試經(jīng)歷和一些面霸和收割機的大神相比絕不算豐富,,但我這三個月應(yīng)該能代表很大一部分人的心路歷程: 從無憂無慮也無知的狀態(tài),,然后遭遇挫敗,跌入低谷,,連續(xù)數(shù)天的黑暗,,慢慢調(diào)整,逼著自己不能松懈,,看到改變,,收獲肯定,分享經(jīng)歷,。
先大概說下自己的面試經(jīng)歷吧(詳細的面試過程和面試題解析在最后): 相關(guān)的公司有四類:
筆試就掛了的:網(wǎng)易,、頭條。(對于筆試這個東西我到現(xiàn)在都沒太多經(jīng)驗)
網(wǎng)易是第一家參加筆試的,,面試會報銷費用去總部,,所以還是有難度,這個公司呢,,內(nèi)推不內(nèi)推都要參加筆試,。所以筆試要好好準(zhǔn)備(當(dāng)然筆試也不好準(zhǔn)備) 頭條只有四道編程題,一個人做確實難度挺大的,,尤其是工程為主,,不太專搞算法的同學(xué),。
筆試過了但因為時間地點原因沒去面試的:京東、小米,、去哪,、攜程、招銀,。 這幾個公司面試一定要現(xiàn)場,,很多都要求去總部,還不報銷路費,。所以在遇到這種情況時,,大家要有選擇的安排,畢竟時間和精力都是有限的,。
最終參加面試的: 阿里(電話2面,,很輕松地就掛了) 騰訊(現(xiàn)場2面,很久之后hr電話說要轉(zhuǎn)C++,,就只能算了) 百度(電話2面+經(jīng)理面,,offer) 滴滴(視頻2面+現(xiàn)場終面,offer) 360 (視頻2面+hr面,,offer) 美團(電話2面+hr面,,offer)。
阿里呢大家都知道,,恨不得把全國學(xué)生都面一個遍,,對于這種策略我只想說三個字,晚點投(下面會解釋),。 騰訊的面試體驗還是很好的,,會在酒店的房間里,安靜舒適,。只是java的同學(xué)可能要被問到很多C++和網(wǎng)絡(luò)的知識,,建議還是提前準(zhǔn)備一下。 百度內(nèi)推都是電話面,,會在某網(wǎng)站實時寫代碼,,感覺百度的面試官都很不錯,給我的體驗也很好,。內(nèi)推的時候最好注意下部門,,在一個好的部門和邊緣部門還是差別很大的。 滴滴面試比較晚,,外地可以先視頻面,,最后會有現(xiàn)場面,報銷花費,。工作體驗很不錯,,內(nèi)部氛圍很好,,因為成立時間短業(yè)務(wù)擴展太快,技術(shù)方面正在沉淀期,,工作還是比較有挑戰(zhàn)性的,。 360要先筆試,然后可以視頻面試,。這個公司比較穩(wěn)定,,業(yè)務(wù)也都很成型,實習(xí)的話留用率還是比較高的,。 美團的話印象比較深,,因為我是二月底內(nèi)推的美團,然后內(nèi)推沒面我,,三月正常筆試通過,,然后待面試兩個多月。,。估計是補招了才給我打的電話(我都已經(jīng)準(zhǔn)備入職了),。經(jīng)驗就是一定要選一個事業(yè)群,最開始選都喜歡的大多是以為這樣機會多,,相反這樣很多部門由于自己的簡歷池太滿而顧不上撈你,。
4.還有一投簡歷就沉的外企:Amazon、FreeWheel(不知道是他們只收北京生源,,還是我英文簡歷寫的太爛了) 文章最后的面經(jīng)當(dāng)然只包括第三種因為筆試這東西真的不好講,,雜七雜八什么題都有,編程題大多人也要看發(fā)揮,。
然后這是我最直觀的感受:
offer = 心態(tài) * (實力 + 面試技巧) + 緣分運氣
我就從左到右說起吧,。
其實每個階段的改變,也都是心態(tài)轉(zhuǎn)變的過程,,所以首先要說的一點,就是心態(tài),。在上面這種公式里,,心態(tài)作為一個因子存在。沒錯,,心態(tài)可以影響你面試的準(zhǔn)備,,筆試的狀態(tài),實力的發(fā)揮,可以影響一個面試過程的方方面面,。心態(tài)崩了,,就只剩運氣了,offer估計也就走遠了,。 那怎么調(diào)整自己的心態(tài)呢,?
不輕視指的是我們都要對自己有信心,,畢竟選了這個行業(yè)和方向,說句不好聽的話,,機會那么多,,就算你不怎么努力也會有個差不多的offer不是么?千千萬萬的初中創(chuàng)公司,,各種擁有垂直領(lǐng)域穩(wěn)定份額的二三線公司甚至有些已經(jīng)上市,,除此之外還有銀行,投資,,金融的IT崗,,還有各行各業(yè)為了互聯(lián)網(wǎng)+的策略而擴展的互聯(lián)網(wǎng)分支(當(dāng)然像鏈家這種已經(jīng)算互聯(lián)網(wǎng)+傳統(tǒng)行業(yè)的典范了,我前些天還瞅到了像萬達德勤一類的各行業(yè)巨頭也在招程序開發(fā)...)所以啊,,要對自己有信心,,在這個行業(yè)十分缺人的年代里(當(dāng)然各個層次的公司缺人的標(biāo)準(zhǔn)是不一樣的),總不至于會失業(yè)吧,。
不高估就是要清楚自己的能力范圍,,不是說期望過高不好,但過高的期望會讓你的心理變得脆弱,,稍有不順心態(tài)就有崩掉的趨勢,。因為面試畢竟有太大的偶然性,就算你達到了一定的水平,,相應(yīng)水平的崗位也不是百發(fā)百中的,,更不要說身邊有那么多大神和收割機,天天拿offer拒offer,,對心理都是不小的沖擊,。
大多數(shù)的人,,總暗示自己說什么時間不多了,怎么每天過這么快效率怎么這么低,。到筆試了,,跟自己說這個算法太難了,肯定做不出來,;臨到面試了,,跟自己說千萬別問我linux內(nèi)核,別問我分布式,,問我肯定完,;面試過之后,,沒有結(jié)果,就天天想肯定又掛了,,唉我怎么這么菜,。 如果這一系列的表現(xiàn)形成習(xí)慣,那心態(tài)這個系數(shù)最多0.5,,能發(fā)揮出來的東西也都打了一半的折扣,。凡事都不要太悲觀,一個offer沒拿到,,正常情況是這個失敗的經(jīng)歷產(chǎn)生的經(jīng)驗和總結(jié)是會讓下一次的成功率提高的,,千萬別因為這些消極的暗示,反而讓該有的提高都沒有了,。 心態(tài)差的時候反而要停下你重復(fù)而沒有效率的工作,,去調(diào)整一下,可以出去玩一玩,,吃吃喝喝,,不要把這幾個月看得有多么不一樣,好像耽擱兩小時就要來生再見一樣,。
有一些一起準(zhǔn)備的好伙伴是件非常好的事情,,不僅可以互相督促,而且可以在交流和分享的過程中取長補短,。(哪怕是偶爾一起吐吐槽發(fā)泄一下也比一個人崩潰要好得多),。但對于每一次面試,只跟自己比就行了,,面試的整個過程都是最怕比較的,,偶然性大,而且每個人適合的方向和技術(shù)棧都不一樣,,結(jié)果不能說明一切問題,。如果身邊有些收割機,那更不要太在意這些天天拿offer的(尤其是拿一個就跑過來講一句的,,他們也許沒有惡意,但他們可能真的想不到這種方式會對別人產(chǎn)生怎樣的沖擊),。
對自己的水平有個很清楚的認識,,并選擇自己合適的公司,好好準(zhǔn)備自己的筆試,、面試,,不怕失敗,,但保證每次面試都有收獲和提高,那滿意的offer早晚會來,。
2. 實力
這里說的實力指的是硬實力,,也就是技術(shù)上的真實積累(當(dāng)然產(chǎn)品崗的就是對于產(chǎn)品相關(guān)知識的積累),而其實呢軟實力在面試過程中也尤為重要(有時候真的要更重要),,主要是指和面試官的溝通,,對一個問題的闡述方式和表達方式,邏輯思維能力以及的價值觀和為人等,。
然后關(guān)于這個軟實力我想放到下面的技巧中去說,。
如果你平時有些項目積累,不擅長也從來沒有怎么系統(tǒng)地總結(jié)過,;如果你學(xué)習(xí)呢不算那么認真刻苦,,研究搞得也不算出眾,但是你該努力的時候也會努力,,可以為了一個好的工作逼自己一把,。
那也許下面說的實力和技巧都可以在一定程度上幫到你。(因為我就是這樣的情況)
這么說是因為很多人其實在這些年的項目或是學(xué)習(xí)中有一些積累,,但是在剛開始面試的時候完全感覺使不出力,,就是有種你問的我都能講上一點,但根本說不清楚的感覺,。(往深了問自然是完蛋)
知識面或者或者說技術(shù)棧都是有寬度和深度的,,我們要做的就是在短時間內(nèi)提升寬度,抓住以往本身就熟悉或是感興趣的幾個點去深入,。
我是認為知識的寬度可以很大程度上決定你能不能通過面試(這里說的寬度并不是簡歷上了解,、知道或者你都沒往簡歷上寫,僅僅是聽說過的層面修飾的方面,,而是寫熟悉的那種,,通俗地說是可以講清原理,不涉及橫向?qū)Ρ群蛢?yōu)化的方面)
一兩個點的深度呢在保證你能通過面試的同時(尤其是你的點正好cover了對方部門的技術(shù)棧),,并且還是影響offer等級的關(guān)鍵因素,。(達到足夠的深度,不只能說出原理,,還能進行橫向技術(shù)對比,,縱向的延伸技術(shù),,優(yōu)劣點及優(yōu)化,或者在這個點寫了幾篇很透徹的博文,更厲害的同學(xué)甚至有相關(guān)的開源項目的參與與貢獻)
關(guān)于怎么提升寬度和深度可以看下面的積累(其實說真的短期內(nèi)寬度是好補的,,深度確實要看個人,,是代價較高,性價比不一定高的一方面,,看自己的決定吧)
所以我的建議是,,先把寬度提上來,把你能cover的知識點及原理搞懂是第一步,。建議對自己之前的項目和技術(shù)積累做一個總結(jié)和分類(可以參考下面的技術(shù)路線),,然后對已經(jīng)了解的方面盡可能延伸,對盲區(qū)或是薄弱的地方進行針對性的學(xué)習(xí)和練習(xí),。
當(dāng)你的知識面覆蓋到一定程度的時候,,你自然會把他們的聯(lián)系搞明白,慢慢理解這整個技術(shù)體系,,在面試的過程中結(jié)合表達技巧可以關(guān)聯(lián)起來說各個方面,,也就可以很大程度上展現(xiàn)自己的真實實力(更厲害的同學(xué)甚至可以有超出自己真實實力的表現(xiàn)。,。)
(我也只是腦子里過了一遍,,肯定有遺漏的,大家自己補全就行了,,畢竟每個人的知識覆蓋范圍也不同) 基礎(chǔ)知識: 三次握手,、四次揮手 擁塞控制(過程、閾值) 流量控制與滑動窗口 TCP與UDP比較 子網(wǎng)劃分(一般只有筆試有) DDos攻擊
把我之后的面經(jīng)過一遍,,Java感覺覆蓋的就差不多了,不過下面還是分個類,。 Java基礎(chǔ)(面向?qū)ο蟆⑺膫€特性,、重載重寫,、static和final等等很多東西) 集合(HashMap、ConcurrentHashMap,、各種List,,最好結(jié)合源碼看) 并發(fā)和多線程(線程池、SYNC和Lock鎖機制,、線程通信,、volatile、ThreadLocal,、CyclicBarrier,、Atom包,、CountDownLatch、AQS,、CAS原理等等) JVM(內(nèi)存模型,、GC垃圾回收,,包括分代,GC算法,,收集器,、類加載和雙親委派,、JVM調(diào)優(yōu),,內(nèi)存泄漏和內(nèi)存溢出) IO/NIO相關(guān) 反射和代理,、異常、Java8相關(guān),、序列化 設(shè)計模式(常用的,jdk中有的) Web相關(guān)(servlet,、cookie/session、Spring,、Mybatis、Tomcat,、Hibernate等) 看jdk源碼 進程通信IPC(幾種方式),,與線程區(qū)別 OS的幾種策略(頁面置換,,進程調(diào)度等,每個里面有幾種算法) 互斥與死鎖相關(guān)的 linux常用命令(問的時候都會給具體某一個場景) Linux內(nèi)核相關(guān)(select,、poll,、epoll) 索引(包括分類及優(yōu)化方式,失效條件,,底層結(jié)構(gòu)) sql語法(join,,union,子查詢,,having,,group by) 引擎對比(InnoDB,MyISAM) 數(shù)據(jù)庫的鎖(行鎖,,表鎖,,頁級鎖,意向鎖,,讀鎖,,寫鎖,悲觀鎖,,樂觀鎖,,以及加鎖的select sql方式) 隔離級別,依次解決的問題(臟讀,、不可重復(fù)讀,、幻讀) 事務(wù)的ACID B樹、B+樹 優(yōu)化(explain,,慢查詢,,show profile) 數(shù)據(jù)庫的范式。 分庫分表,,主從復(fù)制,,讀寫分離。 Nosql相關(guān)(redis和memcached區(qū)別之類的,,如果你熟悉redis,,redis還有一堆要問的) OSI7層模型(TCP4層) HTTP TCP/IP (B)IO/NIO/AIO 數(shù)組、鏈表,、二叉樹,、隊列,、棧的各種操作(性能,場景) 二分查找和各種變種的二分查找 各類排序算法以及復(fù)雜度分析(快排,、歸并,、堆) 各類算法題(手寫) 理解并可以分析時間和空間復(fù)雜度。 動態(tài)規(guī)劃(筆試回回有,。,。)、貪心,。 紅黑樹、AVL樹,、Hash樹,、Tire樹、B樹,、B+樹,。 圖算法(比較少,也就兩個最短路徑算法理解吧) 算法和數(shù)據(jù)結(jié)構(gòu) 計算機網(wǎng)絡(luò) 數(shù)據(jù)庫(最多的還是mysql,,Nosql有redis) 操作系統(tǒng): 編程語言(這里只說Java):
項目經(jīng)歷 這個每個人的項目不同,,覆蓋的技術(shù)也不一樣,所以不能統(tǒng)一去說,。 這里的技巧呢,,在下面也會詳細說明。 無非是找到自己項目中的亮點,,簡歷上敘述的簡練并且吸引眼球,,同時自己要很熟悉這個點(畢竟可以提前準(zhǔn)備) 最好自己多練,就像有個劇本或者稿子一樣,,保證面試中可以很熟練通俗地講出,,并且讓人聽著很舒服。
實習(xí)經(jīng)歷 這個很抱歉,,因為我是找實習(xí)的經(jīng)歷,,所以也沒有實習(xí)經(jīng)歷的講述經(jīng)驗。 但我想如果你有實習(xí)經(jīng)歷,,那面試過程的重點也會在實習(xí)做了什么上面,,所以大家最好對實習(xí)所做的工作做一個總結(jié),并且同樣抓出亮點,,搞懂內(nèi)部原理,,提前鍛煉講述的過程。
其他擴展技能(這個方方面面太多了,,全部掌握基本上不可能,,只是作為大家其他時間擴充技能的參考) 這個更多了,,問的多的比如git、docker,、maven/gradle,、Jenkins等等,自己需要的話選擇性地去學(xué),。
hadoop生態(tài)圈(hive,、hbase,、hdfs、zookeeper,、storm,、kafka) spark體系 語言:python、R,、scala 搜索引擎與技術(shù)
CAP原理和BASE理論,。 Nosql與KV存儲(redis,hbase,,mongodb,,memcached等) 服務(wù)化理論(包括服務(wù)發(fā)現(xiàn)、治理等,,zookeeper,、etcd、springcloud微服務(wù),、) 負載均衡(原理,、cdn、一致性hash) RPC框架(包括整體的一些框架理論,,通信的netty,,序列化協(xié)議thrift,protobuff等) 消息隊列(原理,、kafka,,activeMQ,rocketMQ) 分布式存儲系統(tǒng)(GFS,、HDFS,、fastDFS)、存儲模型(skipList,、LSM等) 分布式事務(wù),、分布式鎖等
分布式架構(gòu):(了解原理就行,,如果真的有實踐經(jīng)驗更好) 腳本語言:(只是作為橫向擴充,一般問到linux也會問問shell腳本) 大數(shù)據(jù)與數(shù)據(jù)分析: 機器學(xué)習(xí)算法: 其他工具的理論和使用:
積累實力最好的方式就是平時在項目中或是學(xué)習(xí)中,,多學(xué)多問,,多思考多鉆研。這里就說說短期內(nèi)學(xué)習(xí)的一些方法和路徑:
總結(jié)下來,,一方面是通過看書,、看視頻、看面經(jīng)來不斷擴展自己的知識面,,一方面是通過不斷的面試積累經(jīng)驗和知識盲區(qū),,在每次總結(jié)的過程中積累實力。
這里應(yīng)該是有個推薦書籍的環(huán)節(jié),,這幾個月確實看了不少書,,但是并不是所有都有很高的性價比,在這邊大概列一下,,前后順序也一定程度上代表了我認為的重要度先后,'/'做分割的是一類的書籍,,一般來說看一個就夠了:
書單: 算法與數(shù)據(jù)結(jié)構(gòu): 數(shù)據(jù)結(jié)構(gòu)(嚴(yán)蔚敏)/大話數(shù)據(jù)結(jié)構(gòu) //如果覺得教材無聊就可以看大話系列,,印象中里面還有很多詩 劍指Offer/程序員面試金典/編程珠璣/編程之美/牛客網(wǎng)+leetcode 程序員筆試面試最優(yōu)解(左程云)/不如直接看左神的筆試面試指南視頻 Java的版本(不是很推薦): 數(shù)據(jù)結(jié)構(gòu)與算法經(jīng)典問題解析(Java語言描述) 圖解數(shù)據(jù)結(jié)構(gòu)(使用Java) 計算機網(wǎng)絡(luò): 計算機網(wǎng)絡(luò)(謝希仁) TCP/IP 詳解 HTTP權(quán)威指南 圖解TCP/IP 圖解HTTP 數(shù)據(jù)庫://數(shù)據(jù)庫主要是多用,,書上主要看索引和性能的部分 高性能MySQL/深入淺出MySQL 操作系統(tǒng): OS原理:操作系統(tǒng)(課本,,黑色的那個) Linux: Linux私房菜 //鳥哥寫的,很全,,包括bash部分 跟阿銘學(xué)Linux //主要偏重于命令和操作,,比較淺顯 java: Java瘋狂講義/Java編程思想/Java核心技術(shù) 卷1 深入理解Java虛擬機 并發(fā)編程的藝術(shù)/多線程編程核心技術(shù) Effective Java Java程序員面試筆試寶典 //何昊的那本,個人感覺是突擊知識點的神器 Java程序性能優(yōu)化 實戰(zhàn)Java高并發(fā)程序設(shè)計 Java Web: Spring實戰(zhàn)/輕量級JavaEE 企業(yè)應(yīng)用(紅皮,,講SSH的) //主要看最后一部分Spring的就可以 深入JavaWeb技術(shù)內(nèi)幕(阿里 許令波)//這個講的還是比較深的 SpringBoot實戰(zhàn)/深入實踐SpringBoot 設(shè)計模式: 大話設(shè)計模式 //通俗易懂 各類博客的總結(jié) 分布式與大數(shù)據(jù): 分布式服務(wù)框架原理與實踐 大型網(wǎng)站技術(shù)架構(gòu) Hadoop實戰(zhàn)(hadoop體系包括得很全) //還有一本我暫時想不起來名字了 其他: Git: Git權(quán)威指南 Git官方講解視頻(??途W(wǎng)有帶字幕的) Redis: Redis實戰(zhàn) 還買了docker、springCloud等等一些工具書,,因為太小眾就不列舉了 除了上面說的書和視頻,,最有用的還是大家分享的各種面經(jīng)。
面經(jīng)是個很不錯的東西(嗯,,想看的可以直接翻到最后一節(jié)),。記住不要一掃而過(除了那種崗位不太匹配可以快速抓重點看),崗位匹配的你可以順著面經(jīng)逐條去看,,模擬一次面試過程(雖然是單向的,,但是你心里應(yīng)該是知道每個問題你能答道什么層次),這種不斷地模擬可以讓你知道盲點或者說弱點在哪,,對于一個你心里沒底或者想不太起來的問題一定要當(dāng)時記下來或者當(dāng)時就弄懂,。
我當(dāng)時是每天晚上在床上看幾篇面經(jīng),,然后把存疑的問題copy到記事本中,第二天找個固定的時間短查詢解決和總結(jié),。長期下來會養(yǎng)成一個很好的習(xí)慣,,你的知識點會不斷地擴充。
這一點其實跟剛剛看面經(jīng)的那個很類似(那個我不是叫做模擬面試了嗎),,每次面試完,,一定要把自己不會的東西盡快記下來(當(dāng)然你如果有記面經(jīng)的習(xí)慣就更好了,還能再分享出去),,然后找時間弄懂和總結(jié),。 除了知識點,每次面試(跟模擬面試不同的地方)還要總結(jié)的是哪里發(fā)揮得不好,,哪里有可以提升的地方,,下次一定要注意之類的。(就是有關(guān)面試技巧的東西,,比如這次語速太快,,導(dǎo)致面試官反饋了,又比如這次發(fā)現(xiàn)對方讓你在紙上畫個項目邏輯圖突然一時腦梗,,那回去就好好在本上畫一遍) 3. 技巧 軟實力這個東西與面試的準(zhǔn)備關(guān)系不大,,基本上是長期形成的。 包括和面試官的溝通(有的時候也會成為聊天瞎扯的能力),;對一個問題的表達方式,,邏輯思維(像有些人的發(fā)言就讓人聽上去很有層次感,很舒服,,這方面欠缺的可以推薦玩玩狼人殺),;除此之外對方也會很在意你的價值觀和為人(這個是我進了公司發(fā)現(xiàn)的,很多公司在內(nèi)部的面試細則上面都會注明這一點,,如果價值觀或是人品問題會直接否決,。)想想也是有道理的,因為這個是入職之后能不能好好相處的關(guān)鍵,,設(shè)想如果你是一個面試官,,面對一個有實力但是說話太有棱角聊不太來的和一個不算出眾但基礎(chǔ)不錯很聽話可以培養(yǎng)的,你會選哪一個,?(如果你因為生活太平淡了想選第一個,,那這一條當(dāng)我沒說。,。)
這些軟實力其實要在生活中慢慢鍛煉,,比如多參加些活動,多和別人溝通,,發(fā)表意見前好好組織自己的語言等等,。(每個人都有每個人的性格,,這些都因人而異,但有一點我們要記住的是在面試中,,不論什么情況,,都要保持冷靜和清晰的頭腦,和一個謙卑的態(tài)度,,交流要坦誠<尤其作為應(yīng)屆生>,這樣起碼印象會好很多,,要知道雖然面試有各種各樣花式的打分項,但是印象好往往是隱藏的決定性因素)
面試的技巧首先就是剛剛說到的態(tài)度,。 一個謙卑(注意不是自卑,,也不是把自己放的很低的樣子)和禮貌的態(tài)度和表達方式往往可以讓面試官的印象分提高很多,印象分很像之后要考察的實力分的系數(shù),。留個好印象,,面試就成功了一半。(當(dāng)然你一定也聽過那種聊得很嗨,,或者偶遇校友之類的,,毛都沒問就聊通過了的場景。這種情況還是不算在技巧中了吧,,應(yīng)該屬于運氣和緣分的范疇,。而大多時候聊得開心和舒服會讓你感覺到通過率會比較高,這一點很多人還是深有體會的)
首先從簡歷開始說,簡歷怎么調(diào)格式,,做幾頁,,排版啥的就不想多說了,感覺很多文章都分享過,。我只說說技術(shù)方面的內(nèi)容怎么寫,。
專業(yè)技能的描述謂詞無非就那么幾種:精通、熟練,、熟悉,、了解。(還有一級叫聽說過,,這個級別的可千萬別往上寫啊兄弟)
精通感覺一般還是不要寫,,除非你在某個技術(shù)點上真的有足夠的把握,比如源碼看的很透徹的同時還能深刻理解原理并能靈活處理各種case場景,,如果還有相關(guān)的開源貢獻,,那就自信地寫精通吧。
我們把自己掌握的大多數(shù)技術(shù)點叫做熟練掌握,,這個需要我們在之前對各個技術(shù)點進行橫向縱向的復(fù)習(xí)和總結(jié),,并不只是用的多有經(jīng)驗就行,,有的時候我們覺得熟,但真讓你說的時候卻不知道從何說起,。
至于熟悉和了解,,可以寫一些自己理解原理但是不常用的技術(shù)點,尤其是比較流行的,,各大公司都在用的技術(shù)(比如MQ,,分布式緩存等等),這些你在學(xué)校不一定用過,,但是你可以通過看博客,,寫demo去理解他的設(shè)計和原理,面試的時候可以講得清楚,。
這里還有個技巧,,更細心的同學(xué)可以針對每個公司崗位的job detail不同,熟悉和了解這塊就針對jd中cover的技術(shù)點去寫,。這個做法是很聰明的,,畢竟熟悉和了解這個層面是可以提前學(xué)習(xí)和準(zhǔn)備的,有針對性的去寫對方需要的,,是提升通過率很好的一種方式,。(如果嫌麻煩就算了,比如我就是)
下面再說說項目經(jīng)歷這塊:敘述一定要精煉到位,,細化到每一個亮點上,。我現(xiàn)在再看我二三月份的簡歷簡直是有種想撕了的沖動,當(dāng)時就是項目描述兩三行,,然后概括下我大概做了哪幾個模塊,。完了。 事實上,,不能講得這么泛泛,,就從中找2-3個亮點,一句話高度概括,,突出亮點,。
比如后來我就把我一個普通的web項目挖出來三個點(爬蟲,通信控制方面,,安全加密方面),,分別用一句話敘述,這一句話最好包括這個技術(shù)點的思路,,解決了什么,,有沒有做什么優(yōu)化。比如一個爬蟲工具可以寫成這樣: 我負責(zé)這個系統(tǒng)中爬蟲的開發(fā),終端控制管理,,店鋪管理,。。,。,。
是的,上面這個爬蟲就占用了五個字,,等于沒說,,面試官看到壓根不知道怎么去問。這里還可以這樣寫: 負責(zé)系統(tǒng)中爬蟲模塊的開發(fā),,用于爬取影片的各種信息,,包括年份,介紹,,主演信息等,。
這個起碼告訴面試官爬蟲做了什么,但是你并不能保證他會問,,因為你的敘述不一定能引起他的興趣,。那還可以這么寫:
獨立開發(fā)多線程影片信息爬蟲工具, 并針對線程池性能,、網(wǎng)絡(luò)異常以及反爬蟲措施進行多次優(yōu)化,,容錯性良好并達到并發(fā)請求30+的QPS。
你覺得面試官看到這句話,,他不想問點什么嗎(除非他真的就不想要你),。
所以說,其實面試官呢都是希望在面試的過程中發(fā)現(xiàn)我們的亮點和優(yōu)勢,,從而展開更深層次的交流,,但是往往在簡歷中沒有一個讓他詢問的入口,這樣就可能導(dǎo)致他會隨意問(比如你了解什么什么嗎,?一般情況下都不太樂觀),或者就說那你來講講吧(這種問法其實已經(jīng)表達出他不知道怎么問的情況了,,你在講的時候一定要突出重點,,否則會讓人感覺沒什么亮點,普普通通的項目而已(當(dāng)然就算是普通的項目,,我們也要挖掘它的價值和自己的價值不是))
我們在面試的過程中最重要的是自己掌握主動權(quán),,如果面試官問的都是我們熟悉的范圍和準(zhǔn)備過的領(lǐng)域那我們答起來也會更加得心應(yīng)手。而讓面試官隨著我們簡歷中埋下的這些亮點(他就算知道你有意想說這一點,,往往也會去問,,因為他就是想在短時間的面試中了解你處理問題的能力),去進行更深層次的交流,而這個更深層次的交流,,還需要我們針對簡歷上的每一句話,,都準(zhǔn)備多個層次和維度的擴展。
比如還是這個爬蟲,,你可以充分?jǐn)U展線程池的相關(guān)優(yōu)化(有可能項目中沒有怎么優(yōu)化甚至就是個單線程,,但是在準(zhǔn)備面試的過程中還是可以專門去做一些code重構(gòu)的),優(yōu)化網(wǎng)絡(luò)的NIO相關(guān)擴展,,以及反爬蟲的各種各樣的措施,,以及爬蟲方分別如何應(yīng)對。這里只要你去想,,能準(zhǔn)備的東西太多了,,面試多了自然也就越來越熟,好像項目就是做得這么完美一樣,。
這里我就不怎么擴展去說了,,再講下去這篇文章就寫不完了。,。,。 最后是面試中的技巧和經(jīng)驗。
好好對著自己寫的簡歷一行一行看一遍,,這都是你挖的坑,,是準(zhǔn)備給面試官作為切入點交流的,并不是自己往里跳的,。(對每一行都要有足夠了解和把握) 面試過程不要緊張,,尤其是前幾次,建議先從小公司入手鍛煉下面試經(jīng)驗(參考我之后自身的反面教材 面試方式不同,,側(cè)重點不同(無非是電話,、視頻、現(xiàn)場三種),。 電話面試建議找個人少安靜的地方坐著回答,,并且建議拿紙筆多做記錄多畫多寫。(當(dāng)然如果你覺得身邊很多朋友可以讓你越聊越嗨那也可以,,坐著是讓你整個節(jié)奏慢下來,,說話明顯更加沉穩(wěn),親身體會過站著走來走去和坐著的區(qū)別) 視頻面試其實和電話類似,,只是可以實時寫代碼,,面試官能看到你的表情。這里還是要放松,,如果你比較緊張,,可以不直視鏡頭,好好想問題就是了,因為很多面試官你答得好也會面無表情(因為他們也不常視頻,,表情都很尷尬),,然后你看到他們沒表情的表情肯定會受影響。 現(xiàn)場面呢,,最重要的是和面試官互動了,,說幾個點:語氣要輕松點,多點肢體動作有助表達,,多笑,;不太好說清的就用筆在紙上畫,一遍畫一邊講,,面試官也會更容易和你交流,;如果你可以時不時幽默一下開開玩笑是更好了;見面和離開記得禮貌地握個手說聲謝謝,。
學(xué)會平等交流,,別把自己身段放的太低。其實有一點你要清楚,,面試是個雙選的過程,,他可以拒絕你,你也可以拒絕他,。千萬不要太上趕著,,反而會影響自己正常的表達和邏輯。(就跟你見了喜歡的姑娘就不會說話了一個道理) 回答問題的時候不要一口氣把知道的全部說完,,然后還毫無條理,。學(xué)會一個知識點由淺入深講解給面試官,并且留有余地給他進一步去問,。 舉個例子: 就說最簡單和普遍的HashMap,,讓你講講,你就可以先說說hashMap的設(shè)計原理,,底層結(jié)構(gòu)(鏈表+數(shù)組)擴容方式等,,從這你就可以說說這種設(shè)計好在哪里(比如講一講put是如何做hash的),這時候你可以說這種hash可能會有沖突,,hashMap也是做了相應(yīng)設(shè)計的,。 然后面試官會問題你怎么解決沖突?你可以再給他講講解決hash沖突的三種通常方式,,而hashMap用的是鏈?zhǔn)椒ǎ缓罂梢哉f到這樣會有隱患就是hash鏈過長,。 面試官再問,,你會給他講解決復(fù)雜度高的長鏈用了紅黑樹的結(jié)構(gòu),這里還可以延伸到紅黑樹的特點或者jdk7和jdk8的不同實現(xiàn),這時候你可以說解決hash沖突,,但hashMap還會有并發(fā)和同步的問題,。 面試官會讓你再講講,你可以說說hashtable是線程安全的,,怎么實現(xiàn)的(sync函數(shù)),,并不好,從而引出更好的juc包,,說說concurrentHashMap,,之后又可以說道鎖分段原理,弱一致性迭代器,,concurrentHashMap的鎖粒度(java7和java8不同),,同包的CopyOnWriteArray等等。 你還可以延伸說到鎖(重量,、輕量,、悲觀樂觀各自實現(xiàn)、底層源碼等等),、緩存(因為很多時候Map的結(jié)構(gòu)可以作為緩存,,從而可以說到緩存系統(tǒng)的設(shè)計,kv原理,,分布式緩存redis,、memcashed等等) 舉這個例子就是想說,一個簡單的基礎(chǔ)問題可以一步一步有條理有層次的回答,,每一層表達完拋個引子,,讓面試官可以繼續(xù)問下去,從而讓面試官真正了解你的掌握的深度,。
如果真的不巧聊到不擅長的地方,,學(xué)會轉(zhuǎn)移話題,從一個點中聊自己感興趣或是有把握的方面(比如你對消息隊列不太熟但是redis用的熟,,你就可以在問到消息隊列的時候說,,因為之前都是自己做的項目嘛,性能方面沒有考慮到最優(yōu),,一些異步的方式還是靠redis list去實現(xiàn)的,,雖然redis的消息機制并不常見,但當(dāng)時還是滿足了需求,,之后可以考慮性能方面的提升和技術(shù)評估,;又比如問你http請求細節(jié),rest的設(shè)計實現(xiàn)細節(jié),,你可以說http restapi服務(wù)接口性能的一些不足,,后來使用了rpc的方式,,當(dāng)然你這么說一定是要對rpc很了解)其實有的時候面試官是知道你是有意轉(zhuǎn)移的,但是往往他們也不會抓著你不會的去問,,非讓你自己承認自己的盲區(qū),,他們也許根本不在意這些。 如果真的被問到不會的,,就直接說你不會(說你不會,、說你不會,我再補充兩遍),,或者禮貌地說這方面可能我還要多學(xué)習(xí),。(對一個拿不準(zhǔn)的問題千萬不要猜,即使是二選一的那種問題,,猜錯了直接完蛋,,猜對了被人看出來,再往深問還是完蛋)另外,,像可能,,大概是,我覺得這種表達最好不要,,一聽就是對一個點沒把握,,有可能會讓面試官覺得學(xué)習(xí)太浮躁不喜歡尋求原理。 那對于自己知道原理(確實是理解了的)但是沒用過的東西,,就講講原理,,并承認自己實踐不足,表現(xiàn)出好學(xué)的態(tài)度,。面試一定要真誠,。 問到有什么offer就直接說,不要藏著掖著,,也不要把更好的offer(比如bat的)講的非常誘人,,一副bat我都拿到了的樣子(面試官會心想,那你還來面試我們干什么),。再強調(diào)面試過程一定要真誠,。除了直接說,誠實點之外,,也要真的做些思考:對方公司跟之前的offer比優(yōu)勢在哪,,比如平臺更大?專業(yè)技能棧更match,?工作更有挑戰(zhàn)力,?地點更合適?有機會留用,?隨便一條符合的都可以講出來,,起碼讓對方覺得你想來面是有原因的并且真的有可能加入,。(如果你還提前了解對方公司的文化,可以講出這個文化自己很認同那就更可以了)
4. 緣分和運氣 關(guān)于這一點只有一句:平時多做好事,,熱愛生活。 其實都知道面試要講緣分,,講運氣,,但人往往可以在很順利地通過面試之后說句運氣好運氣好,卻很難在努力準(zhǔn)備卻失敗的經(jīng)歷之后保持平靜,。 但不管能不能轉(zhuǎn)運是不是本命年有沒有緣分,,努力和收獲的關(guān)系總是多年不變的真理。 所以,,講心態(tài),,講實力,講方法,。足矣,。
按時間順序,,詳細敘述一下我面試的過程,,包括面經(jīng)和心態(tài)的轉(zhuǎn)變: (括號里是對問題的補充,如果感覺有知識點的盲區(qū),,大家正好可以去深入學(xué)習(xí)一下,。這里說一下我投的大多是Java研發(fā)崗,所以其他語言的可以忽略java問題)
首先說一點,,復(fù)習(xí)準(zhǔn)備一定要早(當(dāng)然這是說給19屆師弟師妹們聽的,,嗯你們看到這里已經(jīng)可以開始復(fù)習(xí)了),有同學(xué)去年暑假劍指offer都刷了一遍,,然后我竟然今年3月才買這本書,。。還有同學(xué)前一年冬天就已經(jīng)去實習(xí)了,,這種機會也不錯,。但寒假如果不實習(xí)的,一定要進入到學(xué)習(xí)狀態(tài),。我準(zhǔn)備的就有點晚,,寒假完全沒看書,真正開始準(zhǔn)備,,大概是2月中旬號玩了一晚上狼人殺之后,。
就是那個時候發(fā)現(xiàn)校招就要開始了,然后開始慌了,。大概看了一周的書(基本上都是java基礎(chǔ)),然后師兄說阿里內(nèi)推了,,心想趕緊投吧要不人家招夠了就不招了(后來發(fā)現(xiàn)都5月6月了還在招,。。),,然后就慌慌忙忙投了簡歷,。
這里我要說一點最重要的事情: 一定不要在沒有面試經(jīng)驗的情況下先面大廠,或者是你想去的公司,。 我是3月1日下午三點半在阿里的官網(wǎng)完善的簡歷,,5點電話就過來了。作為一個java coder,,阿里是個很好的平臺,,(當(dāng)然C++的崗可以好好準(zhǔn)備騰訊),一定還是準(zhǔn)備充分了再投,,你先面的結(jié)果很可能是焦急地等一兩個月然后被后來準(zhǔn)備充分再來面試的人取代,。
兩天各面了一面(投的螞蟻金服,,第一天面的就不太好,,第二天又把我撈起來面,并且面完感覺就走遠了,,但當(dāng)時卻沒有reject,,這就導(dǎo)致之后一個月一直在流程中,阿里其他事業(yè)部的師兄師姐沒辦法把我的簡歷提走,,最終到要筆試了然后變成了rejected)
那個時候就是處于我所說的無知狀態(tài),,知識點掌握的不夠牢,簡歷寫的亂七八糟,,面試經(jīng)驗為零(這應(yīng)該是我上學(xué)以來的第一次面試),,面試技巧就更不懂了。
然后當(dāng)時兩次都感覺聊得很差(尤其是聊算法模型的時候都想自爆了),,也根本沒有記錄面經(jīng)的想法,。所以有些問題我都記不起來了,大概說一下吧,。
hashMap的擴容原理,,初始有13個,要怎么new,?(達到了負載因子,,直接手動>>1) Integer的常量緩存池的問題(-127~128范圍有個cache) ConcurrentHashMap的size()怎么做的(并沒有完全加鎖,而是先樂觀的認為不會有寫,,通過modCount判斷是否更改,,這個我當(dāng)時記不清就用了很多可能、大概、應(yīng)該這種詞,,事實證明直接說不清楚會更好) Spring的AOP關(guān)于攔截private方法一些問題.(細節(jié)忘記了,,當(dāng)時答得也不好) 項目中數(shù)據(jù)字典怎么做的緩存,如何做的通信,,有沒有用什么模塊,。(說了自己的做法,用的全局的HashMap,,然后他會延伸到高并發(fā)的場景,,分布式緩存怎么做等等,由于沒實際操作經(jīng)驗提前也沒準(zhǔn)備,,并且還沒有直接說不會,又是用很多模棱兩可的語句答得) 講講你的論文相關(guān)的模型吧(這個其實在簡歷上根本沒寫,,只是寫了數(shù)學(xué)建模的獎,,然后面試官就開始問機器學(xué)習(xí)的算法,很多都是我沒準(zhǔn)備的,,并且我心想我投的也不是算法崗啊,。。,。所以說對于簡歷上的每一條一定要熟悉,,做足準(zhǔn)備,并且遇到簡歷上沒有都扯到的方面,,要想辦法轉(zhuǎn)移,,不要在這耗著) 講完算法的問題,面試官很尷尬的說了句,,你這自己的研究方向你都搞不清楚嗎,?我當(dāng)時預(yù)感就差不多走遠了。,。,。
其他問題真的太久遠了,我當(dāng)時也沒有記面經(jīng)的習(xí)慣,,所以就沒有了,。但是最大的感受是面阿里的時候整個人都是緊張的狀態(tài),語速特別快,,恨不得把知道的都說出來,,沒有條理,并且把自己姿態(tài)放得特別低,,還在樓道不停走來走去,。(對,以上說的這幾點全都是不應(yīng)該的,,但主要原因還是當(dāng)時準(zhǔn)備太不充分,,簡歷方面的準(zhǔn)備以及知識點的積累都不夠,;另外一點,還是要強調(diào)不會的就是不會,,千萬別說大概是,,我覺得吧這種東西,說的不好很容易讓面試官認作不懂裝懂,,雖然你只是很想向面試官表達點什么,,哪怕只是積極的態(tài)度) 從阿里面完試開始我的心態(tài)基本上就崩掉了,對自己極度懷疑,,加上今年諸事不順,,心情直接跌到了低谷。然后整個三月基本上都是黑暗的,,整個一個月都沒再投內(nèi)推,,每天從早晨起來,大多時間就在看書刷題,,晚上十點回宿舍躺在床上,,還要刷兩個小時牛客的面經(jīng),。一個月下來很少說話,,提升肯定是有,但是這個過程,,其實完全可以用更好的心態(tài)去經(jīng)歷,。 然后這段極其黑暗痛苦的日子持續(xù)到三月底,一個師兄想幫我內(nèi)推百度,,因為之前因為沒信心也錯過了騰訊的內(nèi)推,,就心想要不試一下吧。
一面 3.30 下午兩點 45mins
自我介紹,,印象最深最費心的項目(這個一套可以提前準(zhǔn)備,,在某些亮點可以估計拋出等面試官來問) 講講項目中的爬蟲和優(yōu)化怎么做的,為什么選用jsoup而沒有用python的urllib 說說你了解的反爬蟲措施,,和針對異常的處理,。 那你覺的你來做一個網(wǎng)站要從哪些方面考慮反爬蟲。 這里可以提前和學(xué)習(xí),,即使你真正使用的只是一點,,也可以在相關(guān)問題上做更深的了解。 最簡單只分析請求,,攔截所有非瀏覽器的直接請求(可以通過添加偽報頭解決);查看refer頁做防盜鏈接(可以改refer項),;基于用戶行為的策略,同一ip相似請求判定(代理或ip池,或間隔請求解決),;基于用戶session的策略(模擬多用戶登錄解決),;封裝前端數(shù)據(jù),用js渲染生成(通過探取和模擬異步ajax請求解決),;對ajax請求進行加密等等方法,。
講講項目中怎么實現(xiàn)的充值,鎖的機制和事務(wù)注解,,如何保證了事務(wù)的一致性,。 spring層面做事務(wù)和數(shù)據(jù)庫層面做的區(qū)別,各自實現(xiàn)方式,。 聊了事務(wù)的傳播性和隔離級別,,問了mysql的默認隔離級別(可重復(fù)讀) spring中事務(wù)傳播性怎么配置(xml方式和注解方式,還有關(guān)于savepoint的使用) 算法:O(1)刪除執(zhí)行鏈表結(jié)點,,做分析(其實是要指出劍指offer中那個直接copy值的方法的缺陷和隱患) 算法:二叉樹的最長距離(遞歸的思想)
二面 3.30 下午五點 50mins
聊項目(這次是針對項目中的加密算法和安全性做了闡述,,大概20分鐘吧,之前爬蟲那個例子已經(jīng)說了項目亮點要怎么準(zhǔn)備了,,這里我就不多說了) 詳細聊了聊spring的IOC和AOP思想 關(guān)于AOP在spring的應(yīng)用(比如事務(wù),通知,,aspectJ,,slf4j的原理,和log4j的對比) 關(guān)于jdk代理和cglib第三方代理(說出對接口代理和子類繼承的區(qū)別) 用的什么數(shù)據(jù)庫,Mysql,。 最大的數(shù)據(jù)量多大,,用了索引沒有,怎么用的(聊了前綴索引,,對于varchar類型的值,,又聊了聊char,varchar,,text,,blob的關(guān)系和區(qū)別)。 為什么索引不能隨便用,,什么時候用(什么時候失效,,什么時候最高效)。 如何達到索引開銷和性能的平衡,,用了一個表去舉例,。(方法就是,根據(jù)情境看經(jīng)常做的查詢是哪些,,然后依次是什么查詢條件,,保證最高效索引的同時,也保證索引不失效,避免無效開銷,,并且根據(jù)show profile和explain功能進行對比分析) 數(shù)據(jù)庫用了緩存沒有,,講講redis的理解(用作緩存,隊列,,也可做存儲),。 redis是單線程還是多線程的,舉個例子(做計數(shù)器,,rank排行榜) 講講hbase的原理,,CloumnFamily包含哪些,region什么情況做分割,,對于版本號這個第四維度的使用方式(一般默認三個版本)等等 讓我等消息,,說經(jīng)理會聯(lián)系我。
經(jīng)理面 4.12 中午 40mins
經(jīng)理面其實更加放松,,不只是技術(shù)方面,,還有生活,性格多方面,,感覺是個技術(shù)+hr的綜合面,。 聊家庭,家鄉(xiāng),,工作意愿,,愛好等等(聊了十幾分鐘,感覺都很不錯,,然后之后的面試也就很輕松了,,基本是我在講他在聽) 講了講項目的設(shè)計,包括異常的處理,,數(shù)據(jù)庫設(shè)計,,通信模型的設(shè)計。 講講你理解的JVM吧(從內(nèi)存劃分說到了GC算法,、分代思想,,CMS和G1 collector,到類加載模型,,tomcat的非雙親委派,、線程上下文加載器,到JVM調(diào)優(yōu)的策略,,gc參數(shù)設(shè)置策略,,如何找死鎖,讀快照,,發(fā)現(xiàn)內(nèi)存泄漏等等吧) 然后說了下部門的技術(shù)棧和部門介紹,,說了部門可能沒有留用的hc,,問我介不介意(當(dāng)時還沒offer當(dāng)然說不介意只是希望去學(xué)習(xí)) 然后就說把我簡歷鎖了,之后會給我發(fā)offer,。
其實到現(xiàn)在我都很感謝百度,,雖然最后因為部門和留用hc的原因沒有去,但是這次面試收獲最大的就是信心,。并且經(jīng)理電話里就給了口頭offer,,這個讓我懸了一個多月的心一下子就放下來了,接下來的幾天乃至之后的面試整個人都是放松的狀態(tài),。(真的很難形容,,這種轉(zhuǎn)變就在這一個電話的前后) 所以,其實大家也早晚會有這一天,,沒必要一直那么緊張的狀態(tài),,太痛苦了。(雖然我知道這種話說得簡單),,另外一點就是三月份確實有了很大的提高,,這個告訴我們,該逼自己的時候還是要狠心一點,。
360(123面) 有了信心或者說有一個offer之后,,你就會越來越順利,從這之后的每次面試都會有不同程度的收獲,。360的流程是走得最順利的,,筆試+面試,三次面試一天完成,,但是360的面經(jīng)可能寫得稍微簡單一點,因為很多知識點在后面的面試中也出現(xiàn)了,,就沒有做過多解釋,,騰訊滴滴美團的面經(jīng)要詳細一些。
自我介紹加項目 線程池如何優(yōu)化的爬蟲,,數(shù)據(jù)規(guī)模 網(wǎng)絡(luò)時延如何處理 同名影片如何選取,,有沒有更好的方式。 反爬蟲的原理,,從低級到高級說一下,,分別如何應(yīng)對 收獲了什么 線程進程區(qū)別 說下資源方面的區(qū)別,共享,,不共享 共享的具體哪些資源 jvm內(nèi)存模型 堆區(qū)的特點 數(shù)據(jù)庫左連接右連接,,場景 給200個200個數(shù)的數(shù)組,找到最大的200個 git 常用的操作,,git rebase和git merge區(qū)別 分布式數(shù)據(jù)庫怎么調(diào)用 linux常用命令,,查看內(nèi)存,,查看磁盤使用率
聊項目,介紹下背景,,怎么談的 印象最深的模塊及解決,,其他項目呢,跟著老師做的,,還有簡歷上沒寫的項目 項目經(jīng)驗還可以那基礎(chǔ)怎么樣自己覺得,, 說下jvm吧你知道的,中間會問 jvm詳細如下 內(nèi)存模型 垃圾回收 分代及回收算法 哪些作為gc root 收集器的特點分類 類加載機制和雙親委派模型 幾個加載器 tomcat類加載有什么不同,,說加載順序并不是雙親模型,,具體順序說一下 并發(fā)注意什么,線程實現(xiàn)同步的方式,,通信 幾種同步的區(qū)別 悲觀鎖樂觀鎖,,底層怎么實現(xiàn)的,越詳細越好 單例模式的特點,,幾種實現(xiàn),,容易引發(fā)的問題 如何防止內(nèi)存泄露,哪些會容易造成 jvm調(diào)優(yōu)如何檢查內(nèi)存泄露,,如何優(yōu)化gc參數(shù) 寫sql 查詢帶日期多次考試成績表中,,每個學(xué)生的每門課最高成績,日期要準(zhǔn)確 分別用having子句寫和用子查詢寫 寫代碼 旋轉(zhuǎn)數(shù)組中查找某一個值
360 三面 hr 4.12 這是唯一一篇hr面經(jīng),,因為我只面過這一次hr,,其他的三面要么是技術(shù),要么只是打個電話說說情況,,還沒問問題就掛了電話(比如騰訊的),。
講一下項目怎么接的,怎么跟甲方溝通,,遇到的最大問題,,怎么克服的 自己的項目和老師的項目和安排怎么協(xié)調(diào)。 平時有什么愛好,,怎么安排自己的時間 攝影都去哪拍,,喜歡什么運動,什么時候運動 為什么選我們部門,,其他部門你怎么看 我們是做移動端后臺的,,喜歡玩手機嗎 說說常用的app平時怎么用,頻率 以后會不會創(chuàng)業(yè),,為什么 以后的規(guī)劃,,職業(yè)技術(shù)和生活兩方面
hr面沒有太多經(jīng)驗,個人生活愛好這類我感覺就是放輕松聊,,規(guī)劃方向這些可以自己提前準(zhǔn)備準(zhǔn)備,,但是比如創(chuàng)業(yè),,offer(之前說過了),價值觀一類的問題,,其實你也不知道對方想要什么樣的回答,,干脆隨緣吧。
騰訊的面試有一點印象很深,,很考察思維能力,,經(jīng)常會有一些意想不到的問題,或者智力題,。挺有意思,。
一面 4.23
上來看了我的簡歷問我會不會C++,我心想雖然學(xué)過,,但是好幾年不寫,,還是說不會吧,然后面試官很好,,就不問了,。 hashmap底層結(jié)構(gòu)畫一下,手寫代碼做一個url解析器,,用正則方式和hashMap的數(shù)據(jù)結(jié)構(gòu),。 識別2的n次方,寫個函數(shù),。(最快的是用位操作,,大家應(yīng)該都知道n&(n-1)可以去掉二進制最右的1,那2的n次冪&之后便為0) 自己實現(xiàn)http response響應(yīng)頭的結(jié)構(gòu)及解析,,用buffer(寫個偽代碼) resp頭中都有什么(主要考察http相關(guān)知識) 海量數(shù)據(jù)找到出現(xiàn)次數(shù)最多的100個(內(nèi)存不足的時候可以先做hash分片,,最后多路merge,每次操作可以用hashMap計數(shù),,也可以自己做hash函數(shù)計數(shù)) redis底層實現(xiàn),,zset數(shù)據(jù)結(jié)構(gòu)(問到了SkipList跳表這種結(jié)構(gòu)) jvm內(nèi)存模型,分代,,cpu100% 怎么排查(我以為問Jconsole的使用,,其實是想問linux性能監(jiān)測和調(diào)優(yōu)) 用int值表示ip如何做(剛好32位bit一對一映射),,寫個偽代碼做transfer nio模型說一下 selector中的wakeup什么含義(這個答得不是很好) select poll epoll (linux內(nèi)核相關(guān)的知識) arraylist.sort怎么實現(xiàn)的(這個可以看看TimSort的思想) 怎么看待java跟c++(說下區(qū)別和自己的感受)
二面 4.24
二面其實就兩個大問題,但一直往很深的地方問,。
100億個數(shù)找最大1000個(說了分片,,用堆,再歸并) 問你確定嗎,?(我一想是最大的1000個不是出現(xiàn)次數(shù)最多的,,其實是可以順序讀取,,還是用堆實現(xiàn)) 有什么缺點,分布不均勻(說一下堆的復(fù)雜度由來) 有沒有其他思路(用hash散列,,計數(shù)排序) 這個更慢,,還有更快的嗎(我心想我平時就都是答得堆啊,怎么這次還有更快的,?) 然后講了基于partition的劃分思想(找到第k個開始partition,,在左邊就在右面遞歸,在右面就在左邊遞歸,,最后確定partition出最大的k個) 這種思想了解了,,但最壞情況太差,不穩(wěn)定,,還有更快的嗎 是不是要用概率統(tǒng)計學(xué),,抽樣估計? 說下思想,。,。 不夠精確,還有又精確又穩(wěn)定的嗎,? ,。。,。 那又給你一個數(shù),,你怎么快速告訴我是不是在這100億個數(shù)中? 這個我知道有可能是想問Bloom Filter,,但是具體到hash函數(shù)去幾個怎么算,,怎么判斷誤差等細節(jié),我也記不太清了,,就說了說思想,。
然后進入第二個問題:
一個進程最多申請多大空間(看機器cpu的處理位數(shù)看情況)‘ 怎么保證進程間數(shù)據(jù)的安全?線程呢,? 安全方面有沒有做過一些研究,? 登錄驗證怎么做的,為什么用md5,,有沒有改進(+salt使md5庫難解出),,微信用的什么方式你知道嗎?你想想應(yīng)該用什么方式,?(這里可能是問SSO單點登錄的原理吧,,可以講講SSO JWT token等技術(shù)的原理,這個也是我實習(xí)之后了解到的,,當(dāng)時答得一般) 那說到通信安全,,怎么保證http的安全性,,冪等性,回調(diào)同一個會話怎么標(biāo)識不同請求,,不同會話怎么區(qū)分(這個每個問題都畫圖敘述了下) TCP 3次握手和timewait講一下原理 講一下滑動窗口,,飽和了怎么處理 http安全嗎?https說一下? get和post請求 linux怎么查看網(wǎng)絡(luò)狀態(tài)(vmstat) 查看udp的性能,,udp端口多少,,什么時候用udp? 為什么tcp不行,? qq里哪些用的tcp哪些用udp,?分別針對每種情況說一下為什么?
可以看到騰訊還是很愛問網(wǎng)絡(luò)通信,、大數(shù)據(jù)處理的(當(dāng)然C,、C++也很愛問,只不過我說了別問,,他們就真沒問,,當(dāng)然你做java的也不要期望他們會問你多少java問題) 然后當(dāng)時并沒有hr面,我心想應(yīng)該是掛了,,但是微信的狀態(tài)又遲遲沒掛,,結(jié)果到了一個月之后五月底我都回家準(zhǔn)備入職了(絕對又是補招的備胎),然后打電話問問個人情況(也沒說是不是準(zhǔn)備給offer),,問可不可以去深圳,,轉(zhuǎn)C++方向。 當(dāng)時也有比較好的機會了,,并且實習(xí)轉(zhuǎn)崗,,如果不確定能留下,絕對是不建議做的一件事,所以就實話實說了,。
一面 5.12
說說你對現(xiàn)有Web開發(fā)框架的理解(從各個層入手橫向?qū)Ρ葍?yōu)缺點,,印象中說了SpringMVC和Struts,mybatis和hibernate及jpa) mybatis和hibernate各自的緩存原理和比較,,hibernate的一級二級和查詢緩存,,還有針對緩存的miss率,置換策略,,容量設(shè)置和性能的平衡問了自己的理解,。 要你設(shè)計的話,如何實現(xiàn)一個線程池(就講線程池的原理,,從初始線程數(shù),,核心線程數(shù),,然后到任務(wù)隊列,,滿了繼續(xù)到最大線程數(shù),,再滿了到飽和策略handler,飽和策略一般有哪幾種,,基本上要理解ThreadPoolExcuter的構(gòu)造方法那幾個參數(shù)) synchronized關(guān)鍵字,,實現(xiàn)原理(和Lock對比著說,說到各自的優(yōu)缺點,,synchronized從最初性能差到j(luò)dk高版本后的鎖膨脹機制,,大大提高性能,再說底層實現(xiàn),,Lock的樂觀鎖機制,,通過AQS隊列同步器,調(diào)用了unsafe的CAS操作,,CAS函數(shù)的參數(shù)及意義,;同時可以說說synchronized底層原理,jvm層的moniter監(jiān)視器,,對于方法級和代碼塊級,,互斥原理的不同,+1-1可重入的原理等) 算法:手寫一個ArrayList類,,實現(xiàn)add,,remove,等基本的方法(主要考擴容的原理和實現(xiàn),,重點寫出擴容機制以及擴容時的copy過程) 然后讓對這個ArrayList進行改進,,使之可以應(yīng)對并發(fā)的場景 算法:手寫字符串的正則匹配,實現(xiàn)*和.的功能,,用的遞歸(寫了一半他說時間差不多了,,思想大概了解了)。
二面 5.12
說說你認為項目中技術(shù)最薄弱的一個地方(答了IO網(wǎng)絡(luò)監(jiān)控和通信模塊,,短連接性能太差) 舉例說說在什么情況下會出現(xiàn)性能瓶頸,,如何優(yōu)化(答了用NIO的方式) NIO的原理,jdk中有哪些工具和類去實現(xiàn),,如何實現(xiàn)(selector和channel的用法),真的好用嗎,?還可以用什么?(面試官應(yīng)該是想問netty,,因為沒有實際用過,,只能給他講了netty的原理) 那來說說AIO吧,和NIO什么區(qū)別(對異步的理解),AIO在工程中如何實現(xiàn)的,?(大概說了下ajax的回調(diào)函數(shù)),,又問回調(diào)函數(shù)具體是怎么實現(xiàn)的(傳遞函數(shù)指針)。 然后借著異步IO想問消息隊列,講了一下幾種模型和原理,。(面試中沒有用過沒關(guān)系,,只要你懂原理還是可以跟面試官講,起碼可以證明你是愛學(xué)習(xí)的) 項目中非技術(shù)上的困難(和甲方溝通需求,,沒有規(guī)范化的項目設(shè)計,,需求變更太頻繁等),問了我解決的方法還有以后希望怎么改進,。(變相問互聯(lián)網(wǎng)公司里面各個team以及需求方是如何合作和分工的) 講講Spring中怎么對初始化的bean做其他操作,。(這里有三種方式,@PostConstruct注解方式,,init-method的XML配置方式,,InitializingBean接口方式) 三種實現(xiàn)上有什么區(qū)別(還好看過點源碼,其實前兩種是一個意思,,都是通過反射的方式用aop思想實現(xiàn),,可以消除對spring的依賴;接口方式是直接調(diào)用afterPropertiesSet方法,,效率更高點,。spring加載bean時先判斷接口方式,再執(zhí)行配置注解方式) 算法題,,一個先減后增的數(shù)組,,查找目標(biāo)值。(這里并不是查找最值,,也不是劍指offer上的旋轉(zhuǎn)數(shù)組,,但是思想上也可以用二分的方式) 算法題,兩個大數(shù)求和,,要按高到低位的輸入,,實時輸出結(jié)果的對應(yīng)位,空間O,,時間O(n),,不借助工具類。(要考慮實時的進位標(biāo)識,,以及多個9之后的連續(xù)進位標(biāo)識)
兩面完了電話讓去參加新銳的現(xiàn)場終面,,很有誠意地報銷了所有的花銷。新銳的三面還是有難度,,基本上圍著算法在問,。
三面 5.12
(這里說一下,,我并不是一開始都想到了,只是面試官一直在提示我思路,,給我時間思考,,沒有否定過我)
因為頭一次手寫白板,返回類型有錯誤,,面試官說你這個編譯器會提示什么,? 又問了異常體系,checked unchecked虛擬機原理怎么做,。 解釋下iaas.paas.saas和之間的關(guān)系,,外呼接口和服務(wù)怎么調(diào)用的。 數(shù)據(jù)庫主從備和讀寫分離原理,,ibatis怎么配置,。(這個只講了數(shù)據(jù)庫層面的原理,比如監(jiān)聽線程,,主機和從機的同步方式等,,但是具體代碼層面的配置,由于沒親自做過,,就說不太知道,。) 算法,股票最長增長區(qū)間,,優(yōu)化 算法,,最長遞增子序列,一個dp數(shù)組一個max數(shù)組,最優(yōu)情況
ps:這個面試官應(yīng)該是面試過程中遇到最nice的一個,,也是我現(xiàn)在的老大,。其實面試除了自身的因素也有面試官的因素,一個好的面試官不會隨便地否定和質(zhì)疑你(當(dāng)然有專門壓力面的),,而是可以讓你在放松的環(huán)境下,,挖掘你真正對于一個方面的深度和理解。最后的十幾分鐘他并沒有問我問題,,只是在跟我聊天,,他跟我說不管是哪個公司,真正的發(fā)展還是跟部門的方向和氛圍有關(guān)系,,選擇的時候不要只看公司,,做的業(yè)務(wù)部門方向和leader才是該去了解和考慮的。作為應(yīng)屆生很多時候不那么了解,,這就要靠我們(指面試官)多去了解你想發(fā)展的方向,。然后聊了很多成長路徑和規(guī)劃的事。 真正實習(xí)到現(xiàn)在一個多月,,深深覺得面試就是面試,,很多知識和題目都是可以準(zhǔn)備的,而工作中面對各種情況解決問題的能力和方式才是更重要的,。為了面試準(zhǔn)備了很多,,工作了發(fā)現(xiàn)要學(xué)的東西更多,我們真的還有很長的路要走,。
1面 1hour 5.26
java基礎(chǔ),,從頭到尾問了個遍,都是大家準(zhǔn)備的,,但是也挺深的,,包括: hashMap,紅黑樹處理沖突,,jdk7和jdk8有什么區(qū)別 JUC相關(guān)的集合,,ConcurrentHashMap jdk7和jdk8的區(qū)別,Collections.sort函數(shù)jdk7 和 jdk8 分別怎么實現(xiàn)的,。(總感覺這個面試官在某段時間肯定糾結(jié)過兩個版本) CopyOnWriteList底層是什么,,適用的情況,vector的特點,,實現(xiàn)的是List接口嗎,。 并發(fā)的問題,線程間通信三種方式 鎖的膨脹過程,,Synchronized和Lock的區(qū)別,,底層的monitor實現(xiàn)和unsafe類的CAS函數(shù),,參數(shù)表示什么,寄存器cpu如何做) volatile cpu和寄存器層面是怎么實現(xiàn)的,。 線程池構(gòu)造函數(shù)參數(shù),,各種類型的預(yù)設(shè)池各自的特點,F(xiàn)orkJoinPool是怎么實現(xiàn)的,,多線程等等問了一個遍,。 為什么匿名內(nèi)部類的變量必須用final修飾,編譯器為什么要這么做,,否則會出現(xiàn)什么問題
數(shù)據(jù)庫: 索引的分類,。 主鍵索引和普通索引的區(qū)別,組合索引怎么用會失效,。 索引的前綴匹配的原理,,從B樹的結(jié)構(gòu)上具體分析一下,。 聚集索引在底層怎么實現(xiàn)的,,數(shù)據(jù)和關(guān)鍵字是怎么存的。 組合索引和唯一性索引在底層實現(xiàn)上的區(qū)別(這個是整個一面感覺答得不好的一個問題,,不太明白面試官想問啥) sql的優(yōu)化策略,,慢查詢?nèi)罩驹趺床僮鳎瑓?shù)含義,。 explain 每個列代表什么含義(關(guān)于優(yōu)化級別 ref 和 all,,什么時候應(yīng)該用到index卻沒用到,關(guān)于extra列出現(xiàn)了usetempory 和 filesort分別的原因和如何著手優(yōu)化等) show profile 怎么使用,。
2面 1hour 5.27 (因為這一面問得很深,,所以到現(xiàn)在都記得很清楚)
一個url到頁面全過程(讓我能說多詳細說多詳細,最好從OSI七層的每一層去擴展) http的請求頭格式(這個真的記不太清了,,只說了幾個有印象的標(biāo)志位) getpost區(qū)別,,post可不可以用url的方式傳參。 說到了url有最大長度,,就問長度有限制是get的原因還是url的原因,,為什么長度會有限制,是http數(shù)據(jù)包的頭的字段原因還是內(nèi)容字段的原因,,詳細說明,。(在他一步步追問下答了個差不多) 關(guān)于冪等性的詳細介紹。 冪等性是http層面的問題嗎,,還是服務(wù)器要處理和解決的內(nèi)容,。(就是看你對冪等性的定性是怎么理解的) 后臺服務(wù)器對于一個請求是如何做負載均衡的,有哪些策略,,會出現(xiàn)什么樣的問題,,怎么解決,。(說了一致性hash算法,分布式hash的特性,具體的應(yīng)用場景,,又非要問我知不知道這個最早在哪個公司使用的...我說這個真不知道,。好像是amazon?) 說說http的缺點,無狀態(tài),,明文傳輸,。 那https是怎么做的,如何實現(xiàn)的,?ca認證機構(gòu),。 然后問我https ssl tcp三者關(guān)系,其中哪些用到了對稱加密,,哪些用到了非對稱加密,,非對稱加密密鑰是如何實現(xiàn)的。(還好我項目中涉及到了一些加密) 關(guān)于加密的私鑰和公鑰各自如何分配(客戶端拿公鑰,,服務(wù)器拿私鑰) 那客戶端是如何認證服務(wù)器的真實身份,,詳細說明一下過程,包括公鑰如何申請,,哪一層加密哪一層解密,。 java的優(yōu)先級隊列,如果讓你設(shè)計一個數(shù)據(jù)結(jié)構(gòu)實現(xiàn)優(yōu)先級隊列如何做,? 用TreeMap復(fù)雜度太高,,有沒有更好的方法。 hash方法,,但是隊列不是定長的,,如果改變了大小要rehash代價太大,還有什么方法,? 用堆實現(xiàn),,那每次get put復(fù)雜度是多少(lgN) (思想就是并不一定要按優(yōu)先級排隊列的所有對象,復(fù)雜度太高,,但每次保證能取最大的就行,,剩下的順序不用保證,用堆調(diào)整最為合適) 在線編程題:敲一個字串匹配問題,,寫了常規(guī)代碼,。問kmp的代碼思想,最后問了下正則中用的改進后的BM算法,。(還有個比較新奇的Sunday算法,,有興趣的同學(xué)也可以看一下)
3面 hr
其實寫了3面,感覺根本不算面試了,,就是隨便介紹了下部門,,然后商量實習(xí)時間(大概補招都這樣吧),。因為已經(jīng)決定去滴滴新銳了,就跟她說可能暑期不能實習(xí),,然后說可以秋招再聯(lián)系,。 另外美團這家要跟師弟師妹們說一聲,投簡歷一定還是要選事業(yè)群的,,千萬不要選都喜歡,,否則就算過了筆試,也會像我這樣等兩個月大概是補招才會聯(lián)系到你,。
其實大家可以從這個過程中看出來,,隨著時間的推進,自己的知識儲備和各方面的經(jīng)驗和能力都是上升的,。 總結(jié)幾句: 對自己要有個定位 準(zhǔn)備永遠都不嫌早不嫌多 心態(tài)差了及時調(diào)整 面試掛了及時總結(jié) 這么多年也該逼自己一把了
一兩次甚至一系列的失敗并不可拍,,成功之后反而沒有失敗總結(jié)得透徹,收獲的多,。失敗的經(jīng)歷會讓你不斷提升能力,,成功的經(jīng)歷會讓你不斷提升信心。而不管成功失敗都會提升你的經(jīng)驗,,都會有收獲,。
所以不要害怕失敗,,因為早晚會成功,。 愿大家都能擁有滿意的結(jié)局。
|