双非院校非科班的学弟,刚刚拿到了腾讯、网易、美团等大厂Offer
△Hollis, 一個對Coding有著獨特追求的人△
這是Hollis的第?359?篇原創分享
作者 l 霜華
來源 l Hollis(ID:hollischuang)
本文來自作者投稿,作者是是雙非院校且非科班的大三學生,以下是他最近的面試總結:
先說下我的面試準備經歷,為了保證自己簡歷有較大一定的概率通過篩選,我在去年11月面試多家公司,去了一家小公司實習到今年3月
但其實用處還是不太大,京東、貝殼、猿輔導等好多大廠在簡歷篩選掛了我
目前面試過的大廠有阿里、騰訊、字節、美團、網易、shopee;也投過中小廠去練練手,但面試的問題有些水,后面便不投了,有那時間還不如多刷幾道算法題;雖然面試的大廠不多,但是還是比較幸運的拿到了騰訊csig、美團支付平臺、網易杭州研究院的三個大廠offer
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
一月我開始刷算法題;整理知識點;和回顧項目;但是我忘記了最重要的網絡協議操作系統最重要的知識部分;這也會后面的面試失敗留下伏筆
我目前的簡歷技能模塊上重點強調自己對redis、多線程、jvm、MySQL這些知識點有比較熟練的掌握(后面淘寶一面后我被挖底層挖怕了,簡歷改成了熟悉掌握)
項目模塊:準備的項目是兩個其實業務層面上比較簡單都是比較平常的CRUD,但我的項目亮點是第一個項目是不用ssm框架,自己基于原生的web 去做了開發,大概模擬了三大框架思想進行了工具的封裝幫助自己進行開發;以及第二個項目我將redis用在自己的項目,網上學習redis實現消息隊列,自己封裝了簡易RPC框架;這些都算是項目的小亮點;
2月末開始進行的春招,先阿里面試開啟春招,整個春招持續2月多,不斷的復盤和補漏,這個春招是我技術增長最快的一陣子
下面我展示下經歷大廠的面試題,并對一些面試題說下我個人覺得比較好的答題思路
面試思路:面試官拋出一道面試題,需要回答三部分:1.它是什么作用是什么 2.原理是什么 3.在實戰中是怎樣的(技術選型的考量),如果可以最好舉一反三,這樣子的涉及跟哪方面的知識有共通之處
阿里淘寶一面
1.redis消息隊列你是如何實現的
消息隊列是什么,作用是什么(解耦、控流、異步);redis 怎么實現(redis 的list 以及生產消費者模型);redis 實現消息隊列的缺點(消息重復消費、消息丟失、)解決方式
2.如何保證緩存與數據庫一致性、(這塊面試官追問了很久)
這塊我不敢說自己能解決的很明白,沒有絕對固定的答案,重點是有自己的考量
3.InnoDB與myslarm區別
事務、鎖、索引文件(myslarm索引和數據文件不在同一地方);InnoDB 特性:兩次寫(解決表持久化到一半出事);change buffer;
4.jvm內存結構
八股文系列;在此之外我加點自己的料證明自己不是背的面試題 棧的兩種異常:不能動態擴展是StackOutOfMemery ,能動態擴展導致OutOfMemery 方法區 1.7 與1.8區別,直接內存,堆內存不是絕對意義上的共享(H神有相關文章),PC寄存器在多線程調度層面的意義作用
5.堆內存內部結構、棧內存涉及的異常、堆外內存的接口
6.垃圾發現算法和垃圾回收算法CMS 和G1 垃圾回收器區別以及底層原理、
7.jvm調優實戰用什么工具主要涉及什么參數、
8.MySQL索引在業務中的運用、
9.布隆過濾器底層原理、
10.如果有億級別的數據,布隆過濾器初始化怎么辦、
11.布隆過濾器的誤判概率是固定的么
因為本身的數據結構BitMap,會有所謂的重合;意思是證明不存在有誤判
阿里中臺一面 (掛在算法)
1.數組跟鏈表區別?
2.說說hashmap?
3.concurrentHashmap 跟hashmap區別;
4.你項目中有什么你覺得可以的亮點?
5.NIO與BIO區別:原理層面的聊就是操作系統了?
6.Dubbo如何實現節點的管理?
7.Dubbo服務暴露原理、?
8.mysql索引需要注意的事情、:索引的創建和索引的使用(避免失效)?
9.redis 消息隊列如何保證消息不丟失?
10,讓服務端單獨消費隊列?
11.redis 與DB如何同步、?
12.redis緩存產生的相關問題?
13.PrepareStatement和statement區別、?
14.jvm內存結構、?
15.jvm垃圾回收、?
16.線程wait 與sleep 區別、?
17.線程什么時候死亡、?
18.如何描述MVC、緩存穿透緩存雪崩緩存擊穿的解決方式?
19.異常分類、 catch 出現return finally的return還會執行么?
20.編程題:LRU算法和多線程ABC順序輸出
整個的面試流程我完成度比較高,聊的挺開心,但是面試過后讓我寫筆試題,這個我寫的太差,部門沒再讓我進入二面流程;
騰訊TEG一面
(經過這場面試開始意識到操作系統網絡協議這些的重要性)
1.什么是內存抖動、
2.什么是內存泄漏
java黨可以說下ThreadLocal
3.進程與線程區別;
4.線程模型:五種Future、forkjoin(遞歸回溯思想)、actor(基于消息傳遞)、生產者消費者模型、master-worker模型
5.62bit 和32bit區別:
除了性能控制的內存,至于為什么的操作系統層面的原理說一下子
7.syn和volatile區別
8.i++ 如何保證原子性
原子類;
9.什么是AQS
10.聊到原子類肯定會談到AQS;一個維護這state和阻塞隊列進行線程狀態管理的類
11.HTTPS和HTTP區別、HTTP1.0 和HTTP1.1HTTP2.0區別、
12.網絡協議層級:主要是TCP網絡模型和原理體系結構各個層干什么說一下;然后面試官根據你的回答聊下一步,一般會轉到聊TCP
13.一個URL 輸入后的整個流程:瀏覽器解析、DNS協議、ICMP協議、路由選擇協議、MAC和IP、ARP路由解析協議這些主要過程中設計的主要協議聊下
14.你如何設計一個秒殺系統
15.hashmap、 hashtable 、concurrenthashmap 區別
16.mysql為什么高可用
17.主從、binlog;備份恢復
18.mysql 索引結構
19.B+樹與B樹區別
20.mysql三范式:
21.什么會導致索引失效:
22.高并發與長連接導致的問題是什么如何解決
23.長連接與短鏈接區別
騰訊TEG二面
1.問項目:rpc框架怎么實現
2.你是怎么用java遠程爬取數據的
3.redis有什么數據結構
4.布隆過濾器原理
5.mysql數據庫主從同步如何實現
6.redis 主從同步
7.進程之間如何通信
8.如果RT 過大你會想到什么原因呢
9.抽象類與接口區別
10.反轉鏈表
11.linux如何查看文件狀態
12.StackOverFlow 產生原因
因為底層基礎差遺憾掛掉
騰訊微信一面:
1.環形鏈表、兩數相加
2.類加載、協程與協程區別
3.協程定義
4.事務是什么解決了什么問題
5一個URL 發送之后到響應的流程是什么
6.死鎖是什么如何解決(信號量睡眠巴拉巴拉)
7.sql如何優化select * from student 的問題在哪
8.分布式:paxos 和拜占庭問題
(以上建議全從計網的角度解答)
騰訊CSIG一面
1.說下一個URL輸入后整個過程
2.MySQL 的B+樹特性
3.left join right join join 區別
4.進程與線程區別
騰訊CSIG二面
1.項目中你覺得挑戰性大的問題
2.抽象類與接口區別
3、面向對象理解
面向對象三大特征
4、權限修飾符
5.常用設計模式
6.hashmap原理
7、mysql常用引擎
InnoDB、MyISAM、Memory(一個只在內存的key-value 表)
8、Innodb和MyISAM區別
9、你在本機如何配置主從,如何實現主從復制
10、B+和B樹索引結構的區別
11、回表
12、最左前綴原則
13、主從復制原理、如何做主從配置更改了什么文件
14、事務原理特性
15、MVCC中回滾是怎么做的;
16、(a,b,c)聯合索引:ac訪問能擊中索引么
17、HTTP1.0 與1.1區別
18、HTTPS的具體實現、SSL的握手
19、三次握手四次揮手
20、nginx 原理
21、反向代理
22、nginx命令配置文件
23、持久化策略
24、redis所有數據結構
25、持久化配置
26、集群配置和原理;主從、哨兵、Codis、Cluster
27、主要的Linux命令
28、操作系統內存管理
29、如果一個接口很慢你會怎么排查和解決問題
騰訊CSIG三面
(偏向比較宏觀的問問了) Linux常用命令:
redis 緩存和數據庫如何保證一致性:這方面跟面試官聊了20min
問問項目
考研嗎
平時怎么學習的
字節抖音一面:
字節一面:瘋狂問項目:你項目的大概結構、用了什么技術獲得什么感受
1.redis用在什么業務場景上面
2.你如何主從同步的
3.什么數據放緩存什么數據放數據庫
4.你業務中哪里用到了事務
5.業務中哪里用到了鎖
6.業務中哪里用到了索引
你對mvc 的理解、你對spring springmvc springboot 的理解、spirngAOP在實戰中的應用、
一個url請求到響應的所有流程、 知道其他并發模型么
八皇后、用兩個棧實現隊列(以及高并發的設計)
(面試官問的特別偏實戰,完全不按正常的套路出牌就有些蒙)
字節企業服務部門一面:
1.常見的異常、錯誤
2.StackOverFlow和OutoFmemery產生原因
3、abc聯合索引 a=?b= ?能擊中聯合索引么
4.抽象類與接口區別
5.項目中比較亮眼的點、list消費端你是阻塞讀獲取么
6、異常與Error區別
7、如果一條語句執行特別慢是為什么
8、你會用什么去查詢數據庫 的狀態
9、NoClassDefFoundError 和ClassNotFoundException 效果和原因
10、int [] a1,int []b ,b[i] = (a[0]*a[1]*a[i]**a[n-1]) /a[i] 求b 數組 (n) 空間O(n)
shopee一面
1、盛水最多容器
2、進程與線程區別、
3、頁缺失
4、頁替換算法
5、塊表和多級頁表的機制和作用
6、TCP 如何實現可靠性
7、進程之間通信
8、虛擬內存
9、發送端發送接收端沒有recevice會怎樣;
10、TCP重試機制
11、如果一堆數據大于內存,如何拿到前面的數據
12、hashmap 與 線程安全的concurrentHashmap
13、msyql索引類型
14、為什么選擇B+樹
15、mysql事務、mysql幻讀是什么如何解決、事務原理、
shopee 二面
1、IO多路復用
2、虛擬內存整體流程
3、HTTP 2.0 新特性、 HTTP3.0新特性(UDP配合TCP 替換掉)
4、算法:10G亂序數據、1G內存、找出中位數
5、新增頻繁的表怎么設計
6、 事務是如何保證原子性的、
7、B+樹結構
8、redis zset數據結構
9、消息隊列實現、
10、你的遠程登錄設計
11、兩個請求放在一起發給服務、
12、服務端業務層面如何保證有序
13、平時怎么學技術的、有無參與開源項目
美團一面
1、面向對象三大特性
2、Integer a = 20 Intger b = 20 ,a == b;true還是false
3、與equals重寫重載區別
4、權限修飾符的區別
5、基本數據類型都有什么
6、異常的同一接口
7、異常分類兩種區別
8、我們需要拋出的異常是什么異常
9、線程池原理
10、jvm內存結構
11、mysql事務特性 和隔離級別
12、msyql事務隔離級別
13、SpringAop 和SpringIOC
14、對反射的理解
15、寫一個嵌套的sql語句(where groupby oreder by 執行順序)
16、兩個棧實現隊列
美團二面
(主要問項目巴啦啦問了一堆)
1、站內信設計
2、你那個站內信的消息為什么用list 不用其他
3、同樣是消息隊列不用mq?redis 的list 爆出異常怎么辦
4、雙親委派模型,為什么要雙親委派模型;
5、聚簇索引和非聚簇索引區別、
6、誰可以形成聚簇索引、
7、誰不可以做索引、
8、聯合索引的索引失效問題
9、數據庫層面通過鎖防止重復insert
網易一面
1.ArrayList和LinkedList區別
2.進程和線程區別
3.你剛剛跟我說進程的切換比線程的切換更耗費資源你說說上下文切換是什么吧
4.進程在內存中的結構
4.說下一個URL輸入后整個過程
5.網絡協議的OSI 分層結構說下吧
6.HTTPS與HTTP區別
7.HTTPS原理
8.TCP三次握手是什么,為什么三次握手
9.TCP四次揮手是什么,
10.TCP四次揮手中客戶端最后發送消息后等2MESL是因為什么
11.TCP的擁塞控制與流量控制區別
12.JVM內存結構都有些什么
13.堆內存結構?一定線程共享么?
14.垃圾回收器CMS和G1區別在哪
15.你覺得垃圾回收期現在不斷的發展是處理優化那些問題
16.你平常怎么學習的
網易二面
1.hashmap的put和get流程
2.hashmap 與concurrenthashmap區別
3.說下其他并發包
4.說下Semphore cycricbarrier
5.垃圾回收算法都有什么
6.redis都有什么數據結構
7.redis 緩存 與數據庫同步你是怎么做的
8.redis緩存可能出現的問題,以及你是怎么解決的
9.redis String 數據結構底層是什么
10.你項目中封裝了orm框架模擬mybatis,你說說你的連接池怎么處理的,比mybatis有什么區別
11.你的消息隊列是怎么實現的
12.你的 消息隊列如何保證可靠性:不重復消費、消息不丟失
13.redis中布隆過濾器原理
多場面試總結
大學如何準備:
春招時期我的壓力很大,在3月末還沒有收到大廠offer 時候我是很慌的,如果在沒有任何大廠實習經歷情況下去競爭極大的秋招是有很大的風險。加上我自己科班基礎和算法非常弱(leetcode也就刷了100不到應付不了筆試) 所以春招是我進大廠最好的機會
說下大學應該怎么做相關準備吧
我是大二下的疫情期間才真正意義上開始做準備的,大一也就學了java基礎;
期間其實走了很多彎路。太執著于java底層基礎,對算法和科班基礎沒花時間,太在意想找什么實習;
如今我個人不建議學生大一大二急著找實習,先把基礎打牢固。數據結構與算法、網絡協議、操作系統是校招最重要的部分。
大三嘗試找找日常,然后在這個難度不怎么高競爭不大的春招爭取拿到大廠暑期實習offer;我現在所處的騰訊部門是轉正率挺高的可以說是有機會避開秋招的神仙打架
當然雞蛋不能放在一個籃子里,秋招肯定是要準備的
對于java的學生我認為需要掌握的知識如下:
1.算法:劍指offer(面試);動態規劃、遞歸分治回溯(筆試);
2.操作系統:進程線程;內存管理;文件系統;
3.網絡協議:HTTP協議(HTTPS、HTTP迭代版本);TCP協議;IP相關協議(ARP、ICMP、路由控制);網絡分層模型
4.java基礎(面向對象思想,包裝類等等的語言基礎尤其是hashmap集合)
5.jvm:jvm內存結構;垃圾回收(垃圾發現回收算法、調優思路、垃圾回收器尤其是G1和CMS);類加載(類加載器,類和對象加載流程,雙親委派和如何破壞)三大部分;最好學下性能監控工具和調優思路;
6.MySql: innodb引擎;索引;日志log;鎖;事務;
7.多線程(synchronize 、volatile、ReecentLock 原理區別;線程調度方法;JMM內存模型;JUC并法包和原理AQS;線程池)
8.基礎框架 :spring 、spirngmvc、mybatis
9.redis(會了的話特別加分)
10.設計模式
11.分布式(這塊根據公司來如果是阿里會喜歡問問dubbo、zk這種框架;騰訊字節可能就是nginx 或者CAP原理啥的)
推薦看的書
1.深入理解java虛擬機(看完主要章節處理大廠面試是夠了)
2.Msyql技術內幕(初步掌握MySQL大部分基礎知識)
3.高性能MySQL(我非常喜歡這本書,除了基礎知識比較深入外還有很大偏實戰的東西,比如查詢優化,高可用等等)
4.java并發編程藝術(之前看過一本并發編程實戰但是太過理論了,編程藝術基本涵蓋了我目前所有的相關面試題);
5.瘋狂java講義(我的java入門書)
6.圖解HTTP 和圖解TCP (我學習網絡協議,不看教科書太過理論了難以掌握;這兩本圖文結合非常不錯)
7.Redis 深度歷險:核心原理與應用實踐(redis的第一本書能對redis大部分知識有廣度和深度的理解)
推薦的博主:
我個人比較推薦先看看博主寫的文章,能有個大概的了解對后面看書有幫助,而且好文章真的能幫你快速理解知識點建立知識網絡
1.Hollis:java成神之路是幫我構建知識網絡的利器,還有很多單知識點的深度都非常可以,而且講的很好理解
2.三太子敖丙:在學完java基礎后很多新知識的學習了解都是從這里開始的
3.小林coding:我的操作系統和網絡協議是在這里看的
面試如何準備
1.建議可以多看看面試題,一是在時間不夠掌握一部分知識情況下,能較短時間處理一些面試(可以說成是八股文)二是幫助你在全面學習知道什么部分知識是重點需要投入更多成本
2.簡歷上最好有項目或者實習經驗吧,寫好 個人信息、個人技能、項目實習經歷三部分;
3.準備兩版自我介紹一個給技術面試官一個給HR,技術面試官的自我介紹我主要說下自己的項目實習經驗和自己的擅長的技術,面試官還是很愿意跟你聊你會的技術點的。
4.最好能提前根據公司部門技術做相應的準備,比如阿里基本java技術棧為主,字節騰訊面試可能部門不是做java的,如果你是學java的,會問你java基礎但問的沒那么深;
如何面試
1.一個問題面試官問了,先想想面試官想問什么,有的可能考深度有的可能考知識之間的串聯;回答一個知識點 分三部分:是什么、這個技術原理怎樣、基于這樣的原理適用于什么樣的業務或者技術的優缺點(舉一反三);比如談到LRU我就喜歡聊到msyql的內存淘汰和redis的內存淘汰的區別給面試官展示我不僅僅有一點知識的深度也有比較完善的知識網絡
2.最后的你問面試官環節:可以問部門的信息部門涉及的技術棧、實習生入職之后學什么做什么、然后就是自己覺得沒打好的問題(比如一些開放式的問題)問問面試官的想法;
最后關于送給未來有大廠夢的學弟學妹們幾句話:校招是我們進大廠付出成本相對社招最少的時候一定要好好珍惜;好好沉淀自己不要被身邊同學玩了些很炫酷的技術做項目或者進了實習所著急,自己的基礎才是最最重要的;最后一定要好好的堅持做好每一次復盤,多問問進入大廠的學長學姐;
?
技術交流群
最近有很多人問,有沒有讀者交流群,想知道怎么加入。
最近我創建了一些群,大家可以加入。交流群都是免費的,只需要大家加入之后不要隨便發廣告,多多交流技術就好了。
目前創建了多個交流群,全國交流群、北上廣杭深等各地區交流群、面試交流群、資源共享群等。
有興趣入群的同學,可長按掃描下方二維碼,一定要備注:全國 Or 城市 Or 面試 Or 資源,根據格式備注,可更快被通過且邀請進群。
▲長按掃描
往期推薦這才是程序員的愛情觀!?
Java17 新特性確定,Java之父:終于可以和一個長達25年的漏洞說再見了
假如王撕蔥是程序員。。。
如果你喜歡本文,
請長按二維碼,關注?Hollis.
轉發至朋友圈,是對我最大的支持。
點個?在看?
喜歡是一種感覺
在看是一種支持
↘↘↘
總結
以上是生活随笔為你收集整理的双非院校非科班的学弟,刚刚拿到了腾讯、网易、美团等大厂Offer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我给Apache顶级项目提了个Bug
- 下一篇: 各常用分类算法的优缺点总结:DT/ANN