寫在前面
和別的行業不同
計算機行業是一個繼續把面試經常列入行程的行業,即便不打算轉行
也必須多去幾家公司去面試了解現在的行情,不然坐久了技術便會落后
所以請各位同學務必重視
本頁博客會不斷完善,大家可以當做在此模擬練習的地方
面試流程
第一階段:投簡歷
這個大家上招聘網站上投就行啦,就不用教了
當然由于博主經驗還很少,簡歷怎么寫,僅僅給幾個要點
【1】推薦平臺:牛客網,力扣,前程無憂,獵聘,智聯,拉鉤
【2】計算機的簡歷和別的行業不同,是可以反應學習成果的,自己在下班或者課下學了什么技術只管網上寫,配合自己的實戰經驗作為證明更好
【3】照片一定要好看,正所謂人要衣裝,佛要金裝嘛,個人推薦在天之藍拍
【4】例如參加學生會,歌唱比賽這些亂七八糟的別往上寫,不僅沒用還會減分
【5】簡歷可以潤色但務必真實,不可瞎編亂造,不要把公司當傻瓜,人家會做背調的,吹牛吹過頭了肯定會穿幫
第二階段:簡歷篩選通過
這時候會有三種面試:電話面試,共享桌面遠程面試、現場面試
電話面試
顧名思義,電話面試是面試官以打電話的形式考查應聘者,
優勢:
【1】對于社恐的同學比較友好,看不到真人
【2】問問題不會過于深奧,畢竟電話里很多事情說不清楚
【3】不用出遠門
考點:
【1】容易突然襲擊,造成在不方便接電話的時候面試
【2】沒有肢體語言,對語言的表述要求較高
【3】如果有外語面試,會增加外語聽力的難度
提示:
【1】應聘者在電話面試的時候應盡可能用形象的語言把細節說清楚,
【2】如果在英語面試時沒有聽清或沒有聽懂面試官的問題,則應聘者要敢于說Pardon,當然中文也是一個道理,不要害怕提問,面試官不會吃人,如果會那種公司也沒必要去,
共享桌面遠程面試
共享桌面遠程面試是指利用一些共享桌面的軟體(如微軟的Skype、思科的WebEx等),應聘者把自己電腦的桌面共享給遠程的面試官,
優勢:
【1】對于社恐的同學比較友好,不用臉對臉
【2】可以在自己熟悉的環境下進行面試
【3】不用出遠門
【4】一般是大公司才有
考點:
【1】思考清楚再開始敲代碼,不要一下筆就做,這個所有的考試都有
【2】為了讓面試官留下好印象,要有良好的命名習慣
【3】能夠進行單元測驗,能做到測驗在前開發在后的程式員,那基本上面試官得跪下叫爸爸了【開個玩笑哈】
【4】所有的代碼都不可能一帆風順,哪怕照抄也一樣,如果偶爾有,那是老天的恩惠【本人就有過一次哈哈】,寫代碼遇到問題后程式員的反應能力,這些書上是學不到的,只有實戰才會懂
提示:
【1】在共享桌面遠程面試程序中,面試官最關心的是應聘者的編程習慣及除錯能力,
現場面試
優勢
【1】對于擅長社交的同學來說,這個難度不會很高
【2】對于顏值高的同學【當然我不是】,這也是個加分項哈哈哈
考點【下節討論】
現場面試是整個面試流程中的重頭戲,由于是坐在面試官的對面,應聘者的一舉一動都看在面試官的眼里,面試官通過應聘者的語言和行動考查他的溝通能力、學習能力、編程能力等綜合實力,
提示:
【1】規劃好著裝得體出行路線和時間,千萬不要遲到,你想想看面試都遲到,上班不得天天遲到早退呀
【2】注意面試流程,有時候面試是挺漫長的要持續幾個小時,建議帶一些提神的裝備
【3】事先準備好幾個問題,有些面試官會在最后讓你問問還有沒有什么問題需要咨詢的,一般是薪資,五險一金之類的,當然大廠可能不同,以后再補充吧
第三階段:現場面試的三個環節
基本面試環節
時間:5—10分鐘
內容:
【1】應聘者的性格特點
【2】深入了解簡歷中的專案經歷【可以事先準備好】
【3】技術問題一般不涉及
【4】自我介紹30s-60s【可以事先準備好,主要是學習和作業經歷】,注意沒用的經歷【學校里做志愿者,學生會之類的的少說,面試官不是跟你嘮家常】
提示:這段時間可以調整自己的情緒,讓自己進入狀態
拓展:面試官深入追問
【1】應聘者的專案經驗
可以從以下四個方面介紹【STAR】
Situation:簡短的專案背景,【這里內容比較少】
Task:自己完成的任務,【這里務必詳細,面試官會不停地追問,別只寫了幾行代碼就說自己負責的,一個不誠信的人找作業基本不可能成功】
Action:為完成任務自己做了哪些作業,是怎么做的,
Result:自己的貢獻,【這方面也最好具體,最好能用數字加以說明,參與開發功能,則可以說暗示完成了多少功能,如果做優化,可以說性能提高百分比多少,如果修BUG可以說修改了多少BUG】
如果在應聘者的簡歷中上述4類資訊還不夠清晰,則面試官可能會追問相關的問題,除此之外,面試官針對專案經驗最常問的問題包括如下幾個型別:
- 你在該專案中碰到的最大問題是什么,你是怎么解決的?
- 從這個專案中你學到了什么?
- 什么時候會和其他團隊成員(包括開發人員、測驗人員、設計人員、專案經理等)有什么樣的沖突,你們是怎么解決沖突的?
因此在準備簡歷的時候最好把這些問題都說清楚
【2】應聘者掌握的技能
可以給大家一些簡歷術語
了解:上過課看過書,沒有專案經驗
熟悉:實戰專案中適用某項技術已經有較長的時間,通過查閱檔案可以解決大部分問題
精通:無論什么人問問題都能回答,能夠回答同學或者同事的絕大多數問題
【3】為什么跳槽
這個時候是說漂亮話的時候,這個大家都能自己編了,就不多寫了
規避以下幾個原因:老板太苛刻,同事難相處,加班太頻繁,工資太低廉
推薦原因:想挑戰更有挑戰性的作業
技術面試環節
時間:40-50分鐘【重頭戲】
內容:
【1】基礎知識扎實全面,包括編程語言、資料結構、演算法等
【2】能寫出正確的、完整的、魯棒的高質量代碼【注意特殊輸入】
【3】能思路清晰地分析、解決復雜問題
【4】能從時間、空間復雜度兩方面優化演算法效率
【5】具備優秀的溝通能力、學習能力、發散思維能力等
這些內容都可以做足準備
最簡單的就是去刷LeetCode,牛客網之類的
可能有同學認為面試官不要你可能是因為性格不適合,態度不夠誠懇,其實大家都是程式員,都是直來直去的,他們只認題目做不做的對
如果題目簡單了但是被拒了,十有八九就是代碼沒寫好
往往越簡單,面試官給出的資料越刁鉆
但如果有些問題比較復雜,面試官就會考慮面試者能否在很短的時間里給出清晰地思路,因為如果要求面試者在很短的時間里解決很復雜的問題著實有些強人所難
所以這個時候不要懼怕做不出來,要讓自己能否給出一個完整地思路
另外往往你做出來以后面試官會提醒你有更好的辦法,不要放棄思考,畢竟我們編程式就像造武器,最終就是為了火力又猛又輕巧
最后就是軟技能
很多同學看我置頂首頁會發現我考法考,學辯論,這其實就是練一下嘴,增加點社交能力
畢竟現在是團伙作案,三個臭皮匠頂個諸葛亮
另外也要不斷增強自己的學習能力,畢竟計算機行業更新迭代太快了
應聘者提問
時間:5-10分鐘
要點:
【1】這里可以事先準備好,因為這往往是最后的環節
【2】如果操作得好這里是加分項
【3】和自己的職位有關
【4】不要問薪水【不是說全程不問,技術面試的時候不要問】
【5】不要打聽面試結果
推薦問題:
【1】與應聘崗位和專案相關【建議在面試前就做足功課】
【2】注意面試官介紹的時候說的話,往往可以成為提問的要點
第四階段:收尾作業
不管成功不成功,相見即是緣分,即便最終不成功也要注意基本的禮貌,畢竟做什么都是先做人
艾躍進教授說過,一切失敗都是因為做人的失敗
成功了不要狂喜過頭【免得入職以后給你加作業】
失敗了也不要過分沮喪甚至罵街【這樣會無形中影響下一次面試】
咱們要努力告訴面試官,不留爺是你的損失哈哈哈
模擬實戰
基本面試環節
java集合框架:
【Q】介紹一下java的集合框架
【A】
集合框架分為三塊:List串列、Set集合、Map映射
【1】List串列在資料結構上可以被看做線性表,常用的有ArrayList和LinkList(不常用的有Vector(類似于ArrayList)),他們的底層存盤結構有所不同,一個是陣列,一個是鏈表;這兩個是注重資料存盤結構的區分和資料結構資料操作方法上的區分,也就是堆疊和佇列;即Stack和Queue,Stack是一個繼承了Vector的類,Queue是一個繼承于Collection的介面(因為佇列可以分很多種),LinkedList實作了Deque介面,Deque繼承了Queue介面,常用的有ArrayBlockingQueue(基于陣列),LinkedBlockingQueue(基于鏈表),PriorityBlockingQueue(實作優先級排序)等,
【2】Map是一種映射,用于存盤關系型資料,保存著兩種值,一組用于保存key,另外一組用于保存valeu,并且key不能重復,\
【3】Set集合,存盤的元素不能重復,其通過equals的方法,來判斷元素是否重復;
【Q】HashMap遇見哈希沖突會如何怎么辦?
【A】通過在陣列中創建一個鏈表,來解決哈希沖突
【Q】HashMap是執行緒安全的嗎?
【A】不是
【Q】HashMap在高并發下會有什么問題?
【A】死回圈,丟資料
【Q】然后引入ConcurrentHashMap的原理?
【Q】Hahtable和concurrentHashMap的區別?
【Q】陣列和ArrayList的區別?
【Q】Arraylist是如何擴容的?
【Q】執行緒池中的阻塞佇列一般會選擇哪種佇列?為什么?
【Q】RetreenLock的原理?
【Q】AQS的原理?
【Q】HashMap的容量為什么推薦是2的冪次方?
框架類:
【Q】mybatis的二級快取有什么問題?
【A】mybatis二級快取對于細粒度的資料級別的快取實作不好
【Q】mybaits中的mapper的#{}和${}有什么區別?哪種可以防止sql注入?
【Q】我們知道mybatis的mapper和介面之間是沒有物件的,那么它是如何映射的?
【Q】說說springmvc的注解有哪些?他們的原理是什么?
【Q】springmvc的控制器是單例的嗎?是執行緒安全的嗎?
【A】不是,多執行緒訪問下,有安全問題
【Q】struts1和struts2的區別?是執行緒安全的嗎?
【A】
1、Action 類:
Struts1要求Action類繼承一個抽象基類,Struts1的一個普遍問題是使用抽象類編程而不是介面,
Struts 2 Action類可以實作一個Action介面,也可實作其他介面,使可選和定制的服務成為可能,Struts2提供一個ActionSupport基類去實作 常用的介面,Action介面不是必須的,任何有execute標識的POJO物件都可以用作Struts2的Action物件,
2、執行緒模式:
Struts1 Action是單例模式并且必須是執行緒安全的,因為僅有Action的一個實體來處理所有的請求,單例策略限制了Struts1 Action能作的事,并且要在開發時特別小心,Action資源必須是執行緒安全的或同步的,
Struts2 Action物件為每一個請求產生一個實體,因此沒有執行緒安全問題,(實際上,servlet容器給每個請求產生許多可丟棄的物件,并且不會導致性能和垃圾回收問題)
3、Servlet 依賴:
Struts1 Action 依賴于Servlet API ,因為當一個Action被呼叫時HttpServletRequest 和 HttpServletResponse 被傳遞給execute方法,
Struts 2 Action不依賴于容器,允許Action脫離容器單獨被測驗,如果需要,Struts2 Action仍然可以訪問初始的request和response,但是,其他的元素減少或者消除了直接訪問HttpServetRequest 和 HttpServletResponse的必要性,
【Q】spring如何決議它的xml檔案?
【Q】spring的核心是什么?Aop的原理是什么?
redis相關:
【Q】redis資料型別有哪些?
【Q】zset資料型別是如何排序的?
【Q】redis如何做專案的中間快取層?
【Q】redis的Hash的時間復雜度是多少?
資料庫:
【Q】資料庫索引分為哪幾種?組合索引有什么要注意的問題?
【Q】什么是悲觀鎖 什么是樂觀鎖?如何實作悲觀鎖?
【Q】資料庫關鍵字的執行順序是什么?
【Q】如何進行sql優化?
【Q】有沒有進行過分庫分表操作?分庫之后如何保持事務一致?
分布式和微服務:
【Q】微服務要克服那些問題?微服務系統是怎樣通信的?
【Q】分布式環境下如何解決session不一致的問題?
【Q】分布式下如何保證id一致?
【Q】你在dubbo的使用程序中遇到什么問題?
【Q】zookeeper的負載均衡演算法有哪些?
jdk原始碼相關
【Q】synchronized的原理?它該怎么用?
【Q】如何一個方法是synchronized的,其他的非synchronzied執行緒能進入嗎?
【Q】cvs中的ABA問題如何解決?
【Q】volatile的原理是什么?volatile一定是執行緒安全的嗎?
【Q】ThreadLocal是什么?它的原理是什么?
【Q】CountDowanLatch有沒有用過?適合在什么樣的場景下用?
設計模式相關:
【Q】實作兩種單例模式
【Q】講一下觀察者模式
【Q】spring中都用到哪些設計模式?
【Q】動態代理模式是如何實作的?
演算法相關:
【Q】快速排序的時間復雜度?手寫快速排序(注意遞回式和非遞回式的實作方式)
【Q】手寫二分查找
【Q】手寫堆排序
【Q】一個int陣列如何進行奇數和偶數分離?
【Q】用演算法實作String轉double
jvm相關:
【Q】jvm的垃圾回收演算法有哪些?分別解釋一下?
【A】
標記-清除、復制、標記-整理和分代收集,
【1】標記-清除演算法
從演算法的名稱上可以看出,這個演算法分為兩部分,標記和清除,首先標記出所有需要被回收的物件,然后在標記完成后統一回收掉所有被標記的物件,
這個演算法簡單,但是有兩個缺點:一是標記和清除的效率不是很高;二是標記和清除后會產生很多的記憶體碎片,導致可用的記憶體空間不連續,當分配大物件的時候,沒有足夠的空間時不得不提前觸發一次垃圾回收,
【2】復制演算法
這個演算法將可用的記憶體空間分為大小相等的兩塊,每次只是用其中的一塊,當這一塊被用完的時候,就將還存活的物件復制到另一塊中,然后把原已使用過的那一塊記憶體空間一次回收掉,這個演算法常用于新生代的垃圾回收,
復制演算法解決了標記-清除演算法的效率問題,以空間換時間,但是當存活物件非常多的時候,復制操作效率將會變低,而且每次只能使用一半的記憶體空間,利用率不高,
【3】標記-整理演算法
這個演算法分為三部分:一是標記出所有需要被回收的物件;二是把所有存活的物件都向一端移動;三是把所有存活物件邊界以外的記憶體空間都回收掉,
標記-整理演算法解決了復制演算法多復制效率低、空間利用率低的問題,同時也解決了記憶體碎片的問題,
【4】分代收集演算法
根據物件生存周期的不同將記憶體空間劃分為不同的塊,然后對不同的塊使用不同的回收演算法,一般把Java堆分為新生代和老年代,新生代中物件的存活周期短,只有少量存活的物件,所以可以使用復制演算法,而老年代中物件存活時間長,而且物件比較多,所以可以采用標記-清除和標記-整理演算法,
【Q】新生代為什么要設定兩個survior區?
【A】設定兩個Survivor區最大的好處就是解決了碎片化
【Q】如何通過一個.class檔案獲取它的jdk版本?
【A】javap -verbose classname(一定要是class檔案)
【Q】jvm的記憶體模型?哪些是執行緒私有的?哪些是公共的?
【A】
詳解 JVM 記憶體模型
JVM 記憶體模型主要指運行時的資料區,包括 5 個部分,如下圖所示

堆疊也叫方法堆疊,是執行緒私有的,執行緒在執行每個方法時都會同時創建一個堆疊幀,用來存盤區域變數表、操作堆疊、動態鏈接、方法出口等資訊,呼叫方法時執行入堆疊,方法回傳時執行出堆疊,
本地方法堆疊與堆疊類似,也是用來保存執行緒執行方法時的資訊,不同的是,執行 Java 方法使用堆疊,而執行 native 方法使用本地方法堆疊,
程式計數器保存著當前執行緒所執行的位元組碼位置,每個執行緒作業時都有一個獨立的計數器,程式計數器為執行 Java 方法服務,執行 native 方法時,程式計數器為空,
堆疊、本地方法堆疊、程式計數器這三個部分都是執行緒獨占的,
堆是JVM管理的記憶體中最大的一塊,堆被所有執行緒共享,目的是為了存放物件實體,幾乎所有的物件實體都在這里分配,當堆記憶體沒有可用的空間時,會拋出OOM例外,根據物件存活的周期不同,JVM把堆記憶體...
方法區也是各個執行緒共享的記憶體區域,又叫非堆區,用于存盤已被虛擬機加載的類資訊、常量、靜態變數、即時編譯器編譯后的代碼等資料,JDK1.7中的永久代和JDK1.8中的Metaspace都是...
其他:
【Q】秒殺場景如何削峰?
【A】
【1】對于秒殺業務這樣的高并發業務場景,最基本的原則就是要將請求攔截在系統的上游,降低下游的壓力,如果不在前端攔截,就很可能會造成資料庫讀寫鎖沖突,甚至導致死鎖,最侄訓有可能出現服務宕機的結果,
【2】劃分好動靜資源,靜態資源使用CDN進行服務分發,提高訪問性能,
【3】充分利用快取(Redis等),增加QPS,從而加大整個集群的吞吐量,
【4】高峰流量是壓垮系統的一個重要原因,所以需要Kafka等訊息佇列在一端承接瞬時的流量洪峰,在另一端平滑地將訊息推送出去,
【Q】http和udp的區別是什么?
【A】
1. 連接型別:TCP是面向連接的協議,要傳輸資料必須先進行連接,就是常說的“三次握手”,握手成功建立連接之后才能進行資料的傳輸互動,如同微信視頻聊天需要對方接受才能彼此看到,UDP是非面向連接的協議,發送資料時不管對方狀態直接發送,無需建立連接,如同微信發送一個訊息或者語音資訊,對面在不在線無所謂,
2. 傳輸開銷: 由于二者特性的差異,TCP在傳輸資料程序中,接收方接收資料包時也會向發送方反饋資料包,因為會造成額外通信開銷,UDP接收方則不會進行反饋,因此不會有這方面的額外開銷,
3. 速度:TCP相較于UDP較慢,這也主要是因為TCP有一個連接的程序而UDP沒有,
【Q】ajax的跨域問題
【A】
(1)瀏覽器限制:發生ajax跨域的問題的時候后端是正常執行的,從后臺列印的日志可以看出,而且后臺也會正常回傳資料,瀏覽器為了安全進行了限制,說白了就是瀏覽器多管閑事,
(2)跨域:當協議、域名、埠不一致瀏覽器就會認為是跨域問題,
(3)XHR(XMLHttpRequest)請求,也就是ajax請求:如果不是ajax請求,不存在跨域問題(這個我們應該可以理解,瀏覽器直接訪問以及a標簽跳轉等方式都不會產生跨域問題),
【Q】nio與io的區別?什么情況下適合用nio
【A】
|
IO |
NIO |
|
面向流 |
面向緩沖 |
|
阻塞IO |
非阻塞IO |
|
無 |
選擇器 |
【Q】說說常見的linux命令?
【A】ls,pwd,cd,tree命令
【Q】linux查看記憶體的命令是什么
【A】top,free
【Q】git遇見代碼沖突了怎么辦?
【A】
情景一:多個分支代碼合并到一個分支時;
情景二:多個分支向同一個遠端分支推送代碼時;
情景一:在當前分支上,直接修改沖突代碼--->add--->commit,
情景二:在本地當前分支上,修改沖突代碼--->add--->commit--->push
【Q】說幾個常見的maven命令,maven如何排除一個jar包的沖突?
【A】
【1】maven clean,對專案進行清理,清理的程序中會洗掉洗掉target目錄下編譯的內容,
【2】maven compile,編譯專案源代碼,
【3】maven test,對專案的運行測驗,
【4】maven packet,可以打包后的檔案存放到專案的 target 目錄下,打包好的檔案通常都是編譯后生成的class檔案,
【5】maven install,在本地倉庫生成倉庫的安裝包可以供其他專案參考,同時打包后的檔案存放到專案的 target 目錄下,
結語:今天就暫時和大家聊到這里,祝大家識訓理想的Offer
在黑夜里夢想著光,心中覆寫悲傷,在悲傷里忍受孤獨,空守一絲溫暖, 我的淚水是無底深海,對你的愛已無言,相信無盡的力量,那是真愛永在, 我的信仰是無底深海,澎湃著心中火焰,燃燒無盡的力量,那是忠誠永在轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/444406.html
標籤:其他
