被迫畢業(yè),面試 30 家公司,終于上岸了!
在老東家干了 6 年,發(fā)展一般,很想出去,但是一直沒有合適的機(jī)會,只好一邊準(zhǔn)備面試一邊學(xué)習(xí)。讓我沒有想到的是,突然收到了“畢業(yè)”通知,當(dāng)然,不光是我,而是整個團(tuán)隊。
畢業(yè),對于我這樣的老員工來說是不錯的結(jié)果,因為正好我也想出去,而且這次公司還能給不少補(bǔ)貼。
回家住了一段時間后,我開始了瘋狂面試,今年的求職環(huán)境真的讓人頭疼,不要說張薪了,平薪都很難。下面介紹我面試過的公司。
首先介紹下個人情況,雙非本科,寫碼 8 年,其中 6 年在金融行業(yè),算是有行業(yè)積累,但是核心業(yè)務(wù)并沒有接觸到。在金融行業(yè)工作,技術(shù)的提升是比較小的,好多流行的技術(shù)棧沒有用過。
1 鏈宇科技(新能源,筆試)
上來就是一套筆試卷,下面是其中兩套筆試題:


面試心得:
創(chuàng)業(yè)小公司,一上來就筆試題,而且用瀏覽器筆試回答過程還有視頻監(jiān)控,侵犯隱私,感覺有點惡心; 果斷遮住,這公司面過了也不想去; 但太久沒刷題,只做下題找下狀態(tài)。
2 北大醫(yī)信(醫(yī)療行業(yè) erp)
SpringBoot 怎么啟動的; RabbitMQ 發(fā)消息哪幾種方式; 會哪些設(shè)計模式,策略模式在項目中怎么用的; 線程怎么創(chuàng)建的,有哪幾種方式; 有哪幾種線程池實現(xiàn)方式; 哪些場景用消息隊列; JVM 參數(shù)怎么調(diào)優(yōu); 反射怎么用。
面試心得:
一面20分鐘結(jié)束,掛!基本都能答上一點點,但是思路不清晰,語言組織吞吞吐吐,技術(shù)理解不透徹,太久沒面試,緊張。
3 長亮科技(外包)
自我介紹,項目經(jīng)歷; 項目流程是怎樣的,你做過的項目,講講哪塊是你做的? Synchronized 是怎樣實現(xiàn)的,偏向鎖標(biāo)志存哪里,為什么升級到重量鎖慢,偏向鎖有個開關(guān),如果默認(rèn)開啟有什么缺點? Synchronized 為什么慢,cas是不是操作系統(tǒng)執(zhí)行的,他比 Synchronized 快還是慢為什么? CAS 平時怎么用的,會有什么問題,為什么快,如果我用 for 循環(huán)代替 cas 執(zhí)行效率是一樣的嗎? volatile 哪些場景會用到,原理是什么,除了在單例模式中用到,還有什么地方? 還用過哪些分布式組件,Redis 集群怎么搭建的,有哪些配置,哈希槽概念,hash 是怎么分布的? Redis 一個請求過去,是在客戶端還是在服務(wù)端,通過 key 找到對應(yīng)的數(shù)據(jù)? 如果 Redis 集群特別慢,有什么排查方法? 還有其他哪些分布式組件,你最熟悉哪一塊? AtomicInteger 自增到一萬以后,怎么歸零; 源碼看過哪些,講講。
面試心得:一面20分鐘掛,好幾個沒答上來!
4 中諾數(shù)科(供應(yīng)鏈金融):
自我介紹; 你工作這么多年了,哪些技術(shù)棧比較擅長,你覺得你做的好的項目有哪些,或者說業(yè)務(wù)復(fù)雜的地方在哪里,怎么解決的? 說一下貸前,貸中,貸后的流程,你負(fù)責(zé)哪些模塊,講講實現(xiàn)流程,有沒有技術(shù)難點,業(yè)務(wù)解決難點? 說一下CAS怎么用的,會有哪些問題,Synchronized呢; 說一下你對Spring的理解; 我們知道Redis很快,訪問是在內(nèi)存中的,除了這個原因,還有沒有其他原因? 你是怎么理解分布式架構(gòu)的,怎么做的微服務(wù)? 有沒有參與過開源項目的貢獻(xiàn)? 你是怎么學(xué)習(xí)一門新技術(shù)的,方法是什么? Java有哪幾種基本數(shù)據(jù)類型?float和double的區(qū)別是? String和StringBuffer、StringBuilder的區(qū)別是? List和Set的區(qū)別是? HashMap的底層結(jié)構(gòu)是? MyBatis一級緩存和二級緩存的區(qū)別是? 說一下你對設(shè)計模式的理解,怎么根據(jù)項目的業(yè)務(wù)去選哪些設(shè)計模式,根據(jù)什么情況去做的設(shè)計模式? SpringCloud你用過哪些,怎么用的,為什么選擇SpringCloud組件? 你用過Gateway,那么Gateway怎么做的動態(tài)路由? 說一下NIO,為什么快,比傳統(tǒng)阻塞io? MySQL索引建立的時候需要注意哪些? MySQL查詢需要注意哪些事項? MySQL一句sql執(zhí)行語句,從執(zhí)行到返回結(jié)果,mysql做了哪些事情? MySQL字段char 和 varchar的區(qū)別是啥,varchar(30)代表什么意思? MySQL 查詢平時怎么優(yōu)化的? 消息中間件用的什么?RabbitMQ?有哪幾種發(fā)送消息的模式? 如果訪問一個頁面報錯,那么怎么開始排查最終定位問題? Spring的循環(huán)依賴怎么實現(xiàn)的?
5 小數(shù)點科技(房抵渠道)
你對代碼或者系統(tǒng),做過哪些優(yōu)化? 系統(tǒng)慢,比如cpu高或者內(nèi)存高,是怎去排查的問題? Redis有哪幾種數(shù)據(jù)類型,這幾種數(shù)據(jù)類型應(yīng)用場景分別是怎樣的? Redis怎么保證事務(wù)? Spring事務(wù)的傳播機(jī)制,是怎樣的? 如果有一個select方法,有Spring事務(wù)注解,這里面調(diào)用了一個update數(shù)據(jù)庫的方法, update是另外一個方法,update有沒有事務(wù)? 樂觀鎖和悲觀鎖,你在項目中的使用場景是什么? 說一下你對樂觀鎖的理解? 你的消息中間件,怎么保證順序性?
面試心得:15分鐘結(jié)束。等通知(沒戲)
6 北京鑫物(小說app)
自我介紹一下; mysql是做的集群嗎,主從是怎么做的配置?從服務(wù)器幾個線程去同步主庫的? 聯(lián)合索引a b c怎么生效,ac 或者 ab 生效嗎? 你們jvm啟動參數(shù)怎么設(shè)置的,大小怎么配置? 怎樣讓AB兩個線程交替執(zhí)行,他倆執(zhí)行完再讓C線程在這倆之后執(zhí)行? SpringCloud 服務(wù)注冊與發(fā)現(xiàn),底層是怎么實現(xiàn)的,用netty? 怎么定位服務(wù)器的問題,如果內(nèi)存過大,怎么排查定位解決? 你們是用的自己的服務(wù)器,還是買的云服務(wù)?項目是怎么打包發(fā)布的? 發(fā)布到 linux 服務(wù)器上,有寫過啟動應(yīng)用的腳本嗎?
面試心得:20分鐘完,問了現(xiàn)在薪資和期望,然后說等通知! 二面被我拒絕了,感覺距離太遠(yuǎn),而且行業(yè)方向不對口
7 恒昌利通(小貸公司)
自我介紹; 公司業(yè)務(wù)模式介紹,做什么業(yè)務(wù)的,你做哪塊的; 多線程的幾種實現(xiàn)方式,線程數(shù)池的好處,線程池有哪些參數(shù),你們用哪種策略,生產(chǎn)中也用拒絕策略嗎? 什么是cas,cas會有什么問題,Java哪些類用了cas?基本包裝類型有用到cas嗎? 對觀察者模式了解嗎,項目中怎么用到的? gc有哪些算法,垃圾收集器,cms有什么優(yōu)點? 說一下cap理論,Zookeeper是滿足cap哪幾個點,eureka呢,nacos呢? mysql索引失效場景? 內(nèi)存溢出有哪些情況?堆內(nèi)存溢出有哪些情況? mybatis 預(yù)編譯怎么實現(xiàn)的? mybatis 怎么防止sql注入? Redis 數(shù)據(jù)類型? Redis rdb和aof的區(qū)別? Redis 緩存穿透 擊穿 雪崩? Redis 分布式鎖有哪幾個參數(shù)? Redis 分布式鎖怎么進(jìn)行鎖續(xù)期? Redis 實現(xiàn)分布式鎖 和 Zookeeper實現(xiàn)分布式鎖有什么區(qū)別? Zookeeper 搶占分布式鎖,如果5個線程去創(chuàng)建節(jié)點,如果第三個線程掛了,影響后面的線程嗎? Java 守護(hù)線程的作用? spi 機(jī)制了解嗎?
面試心得:聊了一個小時左右,答的也不是很好。然后過了初試,約了復(fù)試時間;公司地址: 北京市朝陽區(qū)華騰世紀(jì)總部公園E2座3A層(地鐵四惠東站B口出,導(dǎo)航至華騰世紀(jì)總部公園南2門)
8 致遠(yuǎn)互聯(lián)(協(xié)同管理軟件)
自我介紹; cas自增 和 Synchronized 自增 誰快 ? synchronized 和 ReentracLock 哪個快,為啥? Spring 和 SpringBoot 的區(qū)別,是什么? SpringBoot 用的是什么概念去實現(xiàn)的,他是用的什么思想去做的? 如果讓你實現(xiàn)一個SpringBoot starter,你應(yīng)該怎么做? SpringCloud 用過哪些組件 ? rabbitMQ 實現(xiàn)機(jī)制,了解嗎,為什么這么快? mysql innodb 索引失效場景 你項目里面的東西,哪些可以值得拿出來說一下? NIO了解嗎? Jdk1.8默認(rèn)JVM的參數(shù)
面試心得:讓我等了20分鐘才進(jìn)來,面試問一堆我不會的東西,面試也就問了20分鐘,沒戲等通知。
9 拉勾網(wǎng)(招聘網(wǎng)站)
自我介紹; 用過哪些集合,怎么理解; Hashmap的底層實現(xiàn),是線程完全嗎,為什么? ConcurrentHashMap怎么實現(xiàn)的? 對Volatile和Cas怎么理解,Synchronized呢? MySQL的三種日志分別是什么,undolog怎么實現(xiàn)事務(wù)的? MySQL innodb的數(shù)據(jù)結(jié)構(gòu),B+tree和B-tree的區(qū)別在哪里,數(shù)據(jù)是怎么存儲的,數(shù)據(jù)頁的概念是什么 ,頁是連續(xù)的嗎?B+tree的非葉子結(jié)點存的什么?
面試心得:20分鐘完成,答的不好,說等通知沒戲!
10 視聯(lián)動力(視頻通信軟件)
你做了這么多年開發(fā)了,項目里面有什么值得拿出來說一下的?比如復(fù)雜的業(yè)務(wù)或者復(fù)雜的技術(shù)問題? 分布式事務(wù),什么場景用,為什么用,你用的hmily,那么用過seata嗎,seata支持tcc模式嗎,分布式事務(wù)會出現(xiàn)一些什么問題? 講一下單例模式,為什么用double check的方式,為什么會用volitale; 看你簡歷寫的,排查過線上問題排查,你是怎么排查定位的? 看你簡歷寫的,修復(fù)過宕機(jī)問題,是怎么定位修復(fù)的? 除了單例模式,其他設(shè)計模式,你結(jié)合你的項目,怎么用的,為什么會考慮用到設(shè)計模式,帶來什么好處,能講講嗎? 分布式鎖怎么用的,Redis用分布式鎖會有什么問題? 你用分布式鎖,都在哪些場景下用到的? 說下你對cas的理解,可能會有什么問題,除了AtomicReference還有什么方案能解決ABA問題? Redis常用的數(shù)據(jù)類型,在哪些場景下用到Redis,有復(fù)雜一點的場景嗎? Redis怎么實現(xiàn)發(fā)布訂閱的功能? MySQL,有一個長事務(wù)掛起很久了,怎么去查看殺掉? MySQL表的數(shù)據(jù)量達(dá)到一定規(guī)模,比如幾百萬條,如果insert比較慢,該怎么排查解決?是數(shù)據(jù)量的問題,還是其他問題? SpringCloud nacos注冊以后, 是通過怎么去調(diào)用服務(wù)的? 怎么去解決接口的冪等性問題,如果數(shù)據(jù)庫里面沒有唯一主鍵? 分布式鎖實現(xiàn)業(yè)務(wù)冪等?
面試心得:
一個小時結(jié)束,聊了很多,對方語音聽不太清,面試效率不是很高; 今天面試被PUA,說我能力不行; 工作這么多年了,很多深層次的東西不了解,給我提建議,讓多總結(jié)多學(xué)習(xí),給我說大數(shù)據(jù)量情況下,sql 優(yōu)化、設(shè)計模式、分布式組件、大有可為,呵呵噠!
11 壹碼科技(食品檢測設(shè)備)
自我介紹,哪個學(xué)校,哪年畢業(yè)的,是不是統(tǒng)招本科? 為什么來北京,接下來怎么考慮職業(yè)規(guī)范、發(fā)展; 接下來怎么考慮職業(yè)發(fā)展,行業(yè)方向,主要做什么考慮; 在之前工作中,有沒有感覺相處不愉快的事情,感覺公司有什么不合理的制度嗎? HR開始介紹自己的公司規(guī)模; 數(shù)字化工廠事業(yè)部,純軟件方向; 主要是做企業(yè)管理系統(tǒng),二次定制開發(fā); 問了薪資多少,是否能夠提供流水,期望薪資多少; 社保公積金繳納比例多少; 后續(xù)有需要,技術(shù)部門再找你溝通;
面試心得:浪費時間,估計就是hr忽悠我,不想面試了。
12 某基金公司
聊天式面試主要問我們公司是做什么業(yè)務(wù)的; 自我介紹,挑一個你認(rèn)為你很成功的項目來說一下; 說一下你常用熟悉的集合,講一下區(qū)別,hashMap不同的版本有什么區(qū)別; Redis常用的數(shù)據(jù)結(jié)構(gòu)有哪些,怎么用的? 看過mybatis源碼嗎,最近有在學(xué)什么新技術(shù)嗎? mysql數(shù)據(jù)量表大了,上千萬了,怎么優(yōu)化; 怎么優(yōu)化查詢sql語句; Redis 如果是集群,有沒有緩存丟失的情況,腦裂是什么; Redis緩存擊穿怎么避免,你是用布隆過濾器怎么解決的? 選擇設(shè)計模式,是怎么考慮的?實際項目中怎么用到的?
面試心得:50分鐘左右,面試的整個過程,不是很難,一面應(yīng)該通過了,面試官問了期望薪資,我說期望年xxx,面試官說現(xiàn)在行情不好給不到這么多,問多久能到崗,同時約了下周三復(fù)試時間
13 新東方前途(出國咨詢)
自我介紹、系統(tǒng)業(yè)務(wù)邏輯介紹 為什么3月份到現(xiàn)在,還沒上班? 然后介紹他們現(xiàn)在想做什么系統(tǒng)?
面試心得:這邊他們只想做一個手機(jī)號匹配的,類似用戶中心管理系統(tǒng)頁面的功能,工資低,18~22k。系統(tǒng)也很簡單,這次線上面試我的還是個用戶中心的系統(tǒng)用戶,都不是技術(shù),還想約線下面試,浪費時間,已拒絕。
14 中關(guān)村科金(數(shù)字科技)
自我介紹,挑一個你最熟悉的項目說吧,然后用了哪些技術(shù)棧,你對哪塊技術(shù)熟悉? HashMap 初始容量大小是 16, 擴(kuò)容加載因子 0.75。 如果容量到 12,肯定會擴(kuò)容嗎? 線程池拒絕以后,如果這個任務(wù)很重要,該用什么策略,接下來該怎么辦,直接丟棄嗎? 微服務(wù)你們怎么用的,用到哪些組件? jvm參數(shù)怎么設(shè)置,怎么排查jvm的問題? 如果系統(tǒng)訪問變慢,你怎么排查問題,鏈路追蹤用過嗎? mysql 兩個字段,id name socore ,怎么取score 前3的?如果第三個socre有重復(fù)的,怎么取score排名前3所有人的名字? Redis怎么實現(xiàn)輪訓(xùn),你用哪些數(shù)據(jù)結(jié)構(gòu)可以實現(xiàn),或者其他的你用什么算法實現(xiàn)? mysql查詢怎么優(yōu)化? nacos服務(wù)調(diào)用,怎么實現(xiàn)cp和ap,ap是默認(rèn)的,那么cp模式呢? nacos怎么實現(xiàn)的動態(tài)配置,底層原理怎么實現(xiàn)的? gateway網(wǎng)關(guān),你們后面配置的轉(zhuǎn)發(fā),分內(nèi)部和外部系統(tǒng)嗎? feign用過嗎? k8s 容器 了解過嗎? nacos配置文件的格式有哪幾種知道嗎?.yml 或者 .properties nacos動態(tài)服務(wù)注冊怎么實現(xiàn)的; rabbit mq 怎么保證不丟失? rabbit mq 多個消費者A、多個生產(chǎn)者A;如果我A發(fā)送消息給消費者,需要告訴B停止處理消息,該怎么做? mysql 行鎖和間隙鎖了解嗎? 線上如果內(nèi)存過大或者cpu占用多,你該怎么排查?
面試心得:很多細(xì)節(jié)不會,有點懵的感覺。面試了一個多小時,一邊面試我一邊告訴我答案,他們技術(shù)用的比較新,jdk 17 + SpringCloudalibaba,等通知!然后過了一會hr居然還約了時間二面;
15 卓望(移動子公司)
你對g1收集器了解嗎,他的好處知道嗎?
回答:用分區(qū)弱化了分代的概念,強(qiáng)調(diào)garbage first,需要回收時才回收的優(yōu)先原則,通過卡表維護(hù)記錄回收了哪些內(nèi)存塊區(qū)域,可以通過 MaxGCPauseTime控制最大回收時間,提高系統(tǒng)響應(yīng)時間,系統(tǒng)吞吐量;
又問,那他的MaxGCPauseMillis是怎么控制實現(xiàn)了解嗎?
沒答上;
你們用的什么jdk版本,你用的收集器是什么?這收集器會有哪些缺點,實際場景中都遇到什么樣的gc問題,你們jvm參數(shù)是怎么配置的?
答:用的jdk1.8版本,收集器是CMS+parNew ,講了一些堆棧參數(shù)配置,比如系統(tǒng)內(nèi)存是6G,--Xmn 4g ,-Xmx 4g ,-Xss 512k 的設(shè)置, -Xmn 和-Xmx最好設(shè)置成一樣大,避免內(nèi)存動態(tài)擴(kuò)展震蕩,導(dǎo)致多發(fā)生一些不必要gc問題,用cms,會有內(nèi)存碎片化問題,可以通過兩個參數(shù)開啟內(nèi)存碎片化整理,多少次fullgc后整理一次碎片,gc中的Promotion Failed問題,Concurrent Mode Failure 問題會導(dǎo)致最后用Serial Old單線程回收;
還講了代碼編寫不規(guī)范,比如查詢整個表里面數(shù)據(jù)不分頁直接放到List集合中,如果條數(shù)過多會導(dǎo)致內(nèi)存溢出,F(xiàn)ileInputStream 操作文件流使用后沒有在 finally 中釋放資源,導(dǎo)致內(nèi)存泄露;update sql 語句,使用索引不規(guī)范導(dǎo)致鎖表,其他update sql同樣表的線程等待釋放鎖,整個請求鏈路都變慢,內(nèi)存無法釋放,導(dǎo)致內(nèi)存溢出的問題;
追問:你們系統(tǒng)內(nèi)存是6g,當(dāng)時設(shè)置堆內(nèi)存大小,比例是怎么考慮的?
沒答上;
追問:如果你應(yīng)用內(nèi)存過大,或者cpu占用過多,你們是怎么排查的?
答:用top命令,shift +p/m,可以切換查看使用最大cpu或者內(nèi)存的進(jìn)程pid
juc包concurrenthashmap里面用過嗎,1.8是怎么實現(xiàn)的,
回答:1.8升級了,鎖的粒度更細(xì),使用synchronized+cas,synchronized鎖住哈希沖突的數(shù)組中頭結(jié)點;
又問 cas 是用在哪里?你認(rèn)為 Synchronized 鎖住哈希沖突的頭結(jié)點以后,就不需要 cas 操作了嗎?
cas 是用在哪里沒答上,然后我說synchronized鎖住哈希沖突的頭結(jié)點以后,應(yīng)該不需要cas操作了,因為此時單線程操作安全了;
線程池中execute 和 submit方法有什么區(qū)別?
回答:一個是提交Runnable參數(shù),一個是提交Callable對象參數(shù),其中Callable有返回值;在execute方法中提交Runnable任務(wù)時,后臺有RunnableAdapter,其實是把Runnable轉(zhuǎn)換成Callable執(zhí)行,這里用到了適配器模式,只不過execute方法的返回值為空;還有通過submit提交的方法,后續(xù)用Future.get阻塞獲取執(zhí)行結(jié)果,并且異常需要提交任務(wù)的線程自己處理;
又追問:submit方法提交的任務(wù),如果發(fā)生異常需要調(diào)用者自己處理,這塊后臺是怎么實現(xiàn)的?
沒答上!
Redis分布式鎖,你們怎么用的,有哪幾個參數(shù)需要設(shè)置?
回答:五個參數(shù),key鎖名稱,requestID客戶端id,NX(SET_IF_NOT_EXIST),PX(SET_WITH_EXPIRE_TIME),expireTime(超時時間),因為哪個客戶端請求的就哪個釋放,避免死鎖,所以有這幾個參數(shù);
又問:你們生產(chǎn)用的什么樣的分布式鎖?
答:用的Redisson,因為用jedis實現(xiàn)分布式鎖,很難解決鎖續(xù)期的問題,在超時時間內(nèi)如果A客戶端沒有執(zhí)行完任務(wù),鎖被超時釋放了, 次數(shù)B客戶端就獲取了鎖,那么就會出現(xiàn)問題;
又問:如果你們用Redisson,在Master宕機(jī)以后,slave沒有同步到分布式鎖,這個問題用什么方案怎么解決?
沒答上!
MySQL 字段 char 和 varchar 有什么區(qū)別?
回答:char 不可變,當(dāng)字段長度確定固定后,用 char;varchar 可變的,字段長度不確定用varchar,會多一個字節(jié)存儲長度
又追問:除了這個,還有其他區(qū)別嗎?
沒答上,此時我反問他:那請問你知道還有什么區(qū)別嗎?
他回答:當(dāng)你使用varchar時,如果用了modify column去把列修改成char,會產(chǎn)生內(nèi)存碎片空間
你們mysql用了集群嗎?
回答:沒有,我們用的主從同步,master/slave,主庫開啟binlog,采用row行同步方式,主庫一個線程去寫入binlog里;從庫一個線程從主庫的binlog同步到本地的中繼日志,然后再用一個線程從中繼日志同步據(jù)到本地數(shù)據(jù)庫數(shù);(因為之前其他公司被問到過主從同步用了幾個線程,當(dāng)時回答只有一個線程,答錯,后來百度搜了下明白了;也不敢說用過mysql集群,因為按照他的提問方式,如果說用了,感覺他會繼續(xù)問涉及到備份、讀寫分離、數(shù)據(jù)一致性問題,怕回答不好露餡)
你剛才說到了 binlog,那么 redolog 了解過嗎?
答:redolog 好像是用做數(shù)據(jù)恢復(fù)的(答錯),面試官糾正,是用來做事務(wù)持久化用的;又問:那么為了保持事務(wù)和數(shù)據(jù)一致性,redolog 和 binlog 他倆是怎么做到同步的?沒答上,這問題一點不會;
你們消息隊列用的什么,Kafka 和 RocketMQ 用過嗎。你用的RabbitMQ是吧,那講講怎么保持消息順序性!
回答:RabbitMQ,生產(chǎn)者是通過交換機(jī)塞入quene中,你可以用direct exchange模式,指定routingkey綁定quene, 生產(chǎn)者往隊列里面塞,消費者用單線程消費,消費完一個,給生產(chǎn)者ack確認(rèn)機(jī)制以后,再繼續(xù)消費下一條;又追問,如果消費者端用多線程消費,就沒辦法保證順序性了嗎?沒答上!
RabbitMQ 怎么保證不重復(fù)消費?
回答:因為有時候由于網(wǎng)絡(luò)故障,導(dǎo)致了消息重發(fā)的問題,隊列中可能產(chǎn)生重復(fù)的消息;如果消息隊列是一個類似 insert 數(shù)據(jù)庫語句的操作,那么可以通過數(shù)據(jù)庫唯一鍵來保持插入不可重復(fù);如果不是 insert 語句操作,可以通過借助 Redis,消費者端接受到消息的時候,先往 Redis里面 set key,后續(xù)每次消費的時候,都先從 Redis key里面 get 一下,如果有這個 key 了,那么就不消費了;
Rabbitmq 死信隊列,你們是怎么處理的?
回答:專門用一個消費者線程,去綁定死信隊列 quene,消費死信隊列的消息;
你們之前的系統(tǒng),有用過微服務(wù)嗎,SpringCloud這塊?
回答:用戶中心改造過,nacos用來做注冊服務(wù),gateway用來做登錄權(quán)鑒,驗證token的操作。
那你們用 SpringBoot 這塊,starter 流程是怎么實現(xiàn)的,能講講嗎?
答:通過@SpringBootApplication組合注解,run SpringApplication類啟動的;@SpringBootApplication是組合注解,里面有@EnableAutoConfiguration和 @Configuration組合起來的,其中@EnableAutoConfiguration是開啟自動配置,里面還有一個@Import注解 ,在AutoConfigurationImportSelector類里面會調(diào)用loadFactoryNames方法,加載你starter的jar下META-INF/Spring.factories這個配置,然后這個配置文件里面,配置了一些你這個starter需要用到的類,比如很多行 ..* = ... ,然后這些類都被當(dāng)做組件加載到Spring容器中,直接提供給用戶使用;
分布式事務(wù)有了解嗎?
答:我知道 Seata 分布式組件,支持 xa 模式和 tcc 模式(答的不全,還支持 AT(默認(rèn))、Seaga 模式) 追問:那你們的系統(tǒng),是分布式的,還是單體多機(jī)的模式 回答:用了單體多機(jī)模式;
我看你簡歷寫了分表處理幾千萬黑名單數(shù)據(jù)這個,是用的分庫分表嗎?
答:只是分表沒有分庫,按照黑名單數(shù)據(jù),里面身份證地區(qū)代碼開頭做區(qū)分,往對應(yīng)不同的表前綴存就行了;
那你們的系統(tǒng)都沒有用分布式的吧?分庫分表這些也沒用到?
回答:是的
你還有什么想問我的嗎?
我問他:你們技術(shù)棧:他回答:我們主要用 SpringCloud 微服務(wù)這塊,中間件 kafka Redis,MySQL 分庫分表;
面試心得:問答環(huán)節(jié)一個小時,前面的問題,80% 還是基于你簡歷寫的技術(shù)棧去詢問溝通,有些回答上了,有些沒回答上;最后問的這兩個問題,感覺對方應(yīng)該主要是分布式微服務(wù)這塊技術(shù)棧,可能經(jīng)歷不太匹配。就我目前了解到的那點微服務(wù)的技術(shù),也不敢說自己用過分布式,不然他應(yīng)該會追問你服務(wù)怎么拆分的,分布式場景下的一致性問題等等這些!如果要投,有分布式微服務(wù)要求描述這塊的崗位,感覺還是得再學(xué)一下,再融合到自己項目中去;這次面試,也是說等通知,應(yīng)該沒戲了!
16 某基金公司復(fù)試
自我介紹:挑一個你最熟悉的項目說吧,然后用了哪些技術(shù)棧,你對哪塊技術(shù)熟悉? 你工作這么多年了,解決過哪些復(fù)雜的問題,系統(tǒng)設(shè)計上的問題,還是生產(chǎn)中處理過的問題,說一下? RabbitMQ 死信隊列了解嗎,怎么處理的? 中間件用過哪些,Redis 怎么用的,說一下場景? 你生產(chǎn)處理過內(nèi)存宕機(jī)的問題對吧,當(dāng)時怎么分析解決的? FullGC 的情況說一下,怎么排查解決的?
面試心得:二面應(yīng)該是通過,問的不是很難,之前整理過的問題都答上了,整個過程20多分鐘,約了下周HR三面
17 中關(guān)村科金復(fù)試
自我介紹; 微服務(wù)你用過哪些組件; 系統(tǒng)上的這些中間件環(huán)境你搭建過嗎; 多久能到崗; 介紹了下他們是做音視頻開發(fā)的,產(chǎn)品需要部署到客戶現(xiàn)場,需要駐場部署。
面試心得:問了多久能到崗,是否接受駐場,可能雙方?jīng)]有意愿吧,我嘴上接受駐場,但是感覺還是有點不太想去,對面聽出我的口氣,最后也沒給我offer;
18 和迅網(wǎng)(財經(jīng)咨詢)
說一下 cas 和 synchronized; 用過哪些鎖你都說下; 介紹公司業(yè)務(wù)模式,系統(tǒng)業(yè)務(wù)流程描述,以及你用過哪些技術(shù); 介紹一下你們的系統(tǒng)吧,支付這塊是怎么實現(xiàn)的? HashMap 擴(kuò)容以后,數(shù)組下標(biāo)會變吧,擴(kuò)容以后,如果再去 get,獲取數(shù)據(jù)的時候,這個哈希值變了嗎? 說一下你知道 SpringCloud 組件,知道哪些都說出來?然后用過哪些? 你們微服務(wù)這塊,怎么做的?具體的實例,是怎么部署的,多臺嗎,然后怎么做負(fù)載均衡的? Redis 用過哪些數(shù)據(jù)結(jié)構(gòu)? 消息隊列用的啥? mysql 分表處理幾千萬數(shù)據(jù),怎么處理的?
面試心得:30 分鐘掛。
19 恒昌利通現(xiàn)場復(fù)試
面試地點:華騰世紀(jì)公園E2座3A層
本來是現(xiàn)場技術(shù)總監(jiān)二面,領(lǐng)導(dǎo)開會讓我等了 20 分鐘,估計還得等; 所以 hrbp 先面了,先聊了一會兒,問到我畢業(yè)時間,是不是統(tǒng)招本科,空檔期在干嘛,現(xiàn)在有 offer 嗎,2011 年畢業(yè),2013 年才參加工作,當(dāng)時為啥。2013、2015 的時候離職原因是啥?
(我內(nèi)心:現(xiàn)在不都2022年了嗎,還問2013年離職原因) 問了現(xiàn)在薪資和期望薪資待遇的情況,我說期望多少,她說高了肯定給不到,現(xiàn)在行情也不好;給我介紹了他們公司的幾條業(yè)務(wù)線,消費貸,汽車融資租賃,房抵貸渠道,然后還有自動貨柜出售商品業(yè)務(wù);公司有上萬名員工;(當(dāng)時我看他們這層樓人都不多,而且辦公環(huán)境也不好,有點質(zhì)疑心態(tài))
hr 問我上家干了這么多年,有哪些成長;
我:說學(xué)了一些新技術(shù),學(xué)會了金融業(yè)務(wù)。我大概講了一下。她又問我怎么用新技術(shù)去解決問題的,我說你懂技術(shù)嗎?她說懂,讓我講給她聽;然后我開始講生產(chǎn)中處理過的比如內(nèi)存溢出、宕機(jī),講到一半說到細(xì)節(jié),她聽不懂了,被喊停。后來開始聊其他的,聊了幾分鐘;問我對項目做過哪些復(fù)盤,你的整理總結(jié)文檔輸出沉淀有哪些?有沒有團(tuán)隊分享?我說我有記錄總結(jié)博客,需要把博客地址發(fā)給你看下嗎?hr還是把剛才的話題談回來,問我解決過哪些問題,有哪些成長?然后我盯著她(內(nèi)心:剛才不是給你講了嗎,你不是聽不懂還問?), 她就反問我道:我說的不明白嗎,問題描述不太清楚嗎?(內(nèi)心很無奈:現(xiàn)在hr也這么裝嗎,是顯得在公司做bp有更高價值,都開始問候選人技術(shù)問題了?) 我繼續(xù)跟她扯,打算敷衍一下;前面扯完了,說到薪資結(jié)構(gòu),14薪,會在offer里面體現(xiàn);然后社保公積金基數(shù),只按照8k繳納;
技術(shù)總監(jiān)來了,上來讓我自我介紹,讓我講了下上家公司的業(yè)務(wù)模式、項目流程; 你解決過哪些問題?我然后就說了還是剛才內(nèi)存宕機(jī)的問題。
追問:如果你感覺你的系統(tǒng)有內(nèi)存溢出,但是不用 jmap 命令做 dump 也不用 JVisualVM,怎么去排查?我答不出來。
做過哪些優(yōu)化,我說了 MySQL 查詢,一個大表用 limit m ,n 優(yōu)化的場景方案; MySQL 是不是做的集群,怎么保證高可用; 然后給我介紹了他們的系統(tǒng),說進(jìn)來以后會干什么,感覺有點含糊,具體到哪個組做什么業(yè)務(wù)也沒說,問用哪些技術(shù)棧也回答的很含糊,說什么新系統(tǒng)老系統(tǒng)都有
(內(nèi)心:技術(shù)管理可能混亂,項目雜不規(guī)范)
面試心得:
對 hrbp 印象不好。盤查戶口式的問,感覺都是一些官方套話,沒啥實際意義。他又不能決定最終面試結(jié)果; 有可能會通過,有可能通不過,感覺過了也不想去,薪資不行,公積金也低,項目成長也不行。雖然現(xiàn)在一直沒工作,行情也不好,找不到好的;但是也不想去。
20 馳騖信息(DMP)
你簡單介紹下自己業(yè)務(wù)模式、工作經(jīng)歷,用過哪些技術(shù)棧; 你們 git 分支是怎樣做的,上線是怎么操作的; docker 容器用過嗎,搭建過嗎; 平時線上怎么排查日志的,直接通過docker還是? 用過哪些微服務(wù)組件; RabbitMQ 有哪些場景可以用?怎么保證消息不重復(fù)消費? MySQL 你們怎么優(yōu)化的? b 樹和 b+ 樹有什么區(qū)別 聚簇索引和非聚簇索引的區(qū)別 JVM 類加載,雙親委派為什么?
面試心得:20分鐘結(jié)束,掛!但是等了兩天又通知線上復(fù)試。
21 某基金公司HR面
你先自我介紹自己? 你為什么離職? 你這些年,在上家公司干這么久,你的成長,在哪里? 你遇到過最大的困難是什么,怎么解決的? 你這幾個月空檔期,除了家里有事,還干了什么? 你期望薪資多少?要了 xxx。 你還有什么要問我的嗎?
HR介紹自己公司待遇。Base*12 + 4 (16薪),全額五險一金 面試心得:20 分鐘結(jié)束,等通知(后來詢問得知面試掛),應(yīng)該 是面試薪資要高了,一面的時候,面試官就說過這個問題,覺得技術(shù)要求達(dá)不到這個階層吧,而且現(xiàn)在大環(huán)境不好,降薪的也很多。
22 成豐快運(物流)
簡單自我介紹 挑一個你熟悉的技術(shù)棧,你認(rèn)為你哪塊熟悉或者擅長? 你們的系統(tǒng)有多少用戶,有沒有高并發(fā)場景,怎么解決的? 你有過哪些性能方案優(yōu)化或者代碼上的優(yōu)化場景嗎? 你們項目團(tuán)隊有多大? 問了期望薪資,我說現(xiàn)在多少,期望年 xxx 左右就行。他說到底是左還是右?我說當(dāng)然右更好了
面試心得:20 分鐘結(jié)束,等通知沒戲了。破拉煤物流公司,還玩什么高并發(fā),呵呵噠。
23 馳騖信息_復(fù)試
Java 異常體系; 多線程怎么用的; 過濾器和攔截器的區(qū)別和使用場景; mysql undolog、redolog、binlog; git 分支你們怎么管理的,git命令; 說一下Synchronized和Lock的區(qū)別; MQSQL 索引怎么優(yōu)化; RabbitMQ 幾種 exchange方式; RabbitMQ 怎么做到消息不重復(fù)消費; linux 替換文件的幾種方式; 說下查看jvm參數(shù); JVM 命令啟動參數(shù); docker 和 k8s 有了解過嗎; Redis 用了哪些數(shù)據(jù)結(jié)構(gòu),場景。BitMap 用過嗎。
面試心得:50分鐘。問了期望薪資,我說xx,估計對面嫌高了,又問能否接受加班,我說短期加班可以,長期996吃不消。
24 某銀行科技子公司
你們的請求報文是怎么樣的,報文格式、長度? https 證書怎么加密的, 證書怎么生成的; SpringCloud 用過哪些組件; feign 負(fù)載均衡; 分布式事務(wù); 怎么線上排查問題; mysql 悲觀鎖 樂觀鎖 怎么實現(xiàn); mysql 慢查詢,優(yōu)化方式; 如果系統(tǒng)宕機(jī),你怎么分析,怎么去 dump 文件,解決; SpringCloud 降級 限流 負(fù)載均衡這塊怎么做的; 還問工作這么久了,帶過團(tuán)隊沒有。
面試心得:30分鐘。找人內(nèi)推的,等待通知;
25 某小貸公司
放款對賬出現(xiàn)過哪些問題,什么原因?怎么解決的? 計息方式有哪幾種?等額本金和等額本息的區(qū)別; jdk 1.7、1.8 區(qū)別; io、nio、bio 區(qū)別; Java 動態(tài)代理怎么實現(xiàn)的; Spring bean 的作用域; mybatis 和 Hibernate 區(qū)別; 前端xss攻擊和csrf攻擊 怎么預(yù)防; 有這樣一個場景。比如用戶還款日,最后一天,本來還錢了,然后由于系統(tǒng)原因,代扣接口失敗了。然后第二天,給這個用戶產(chǎn)生了罰息,這種情況應(yīng)該怎么處理? 我需要生成一個分布式 id,要看到業(yè)務(wù)含義和自增數(shù)量。業(yè)務(wù)這邊需要包含商戶號,每個商戶不一樣,每天的日期需要包含在分布式 id 里面,而且每天有流水千萬, 可能并發(fā)的時候高達(dá)幾十萬數(shù)量,怎么去設(shè)計這個分布式 id。
面試心得:50分鐘,主要是業(yè)務(wù)問題答的不好。HR晚上通知掛。
26 某銀行科技子公司復(fù)試
你學(xué)校是什么?2013 年之前的項目經(jīng)歷是什么?你不寫,怎么根據(jù)你的級別,給你定薪資呢? 講講你們以前的業(yè)務(wù)模式?放款的錢,怎么確保錢能打給學(xué)生,是用于培訓(xùn)的? 你從0到1 的那個系統(tǒng),是怎么做起來的,那個系統(tǒng),流程中哪些賬戶? 你認(rèn)為你的優(yōu)勢在哪里,能給我們公司帶來什么? 你的微服務(wù)是怎么拆分的? 你還有什么想問我的嗎?
面試心得:面試聊了40分鐘左右,說薪資只能跟之前持平,不能漲薪這樣子。
27 某銀行科技子公司
自我介紹; volatile 關(guān)鍵字起到什么作用; MyBatis 平時怎么用的,有哪些好處,List參數(shù)怎么傳的? MySQL 優(yōu)化案例; 你的攝像頭,怎么有點暗呢? 你三月份離職到現(xiàn)在都沒工作,你是不是有點任性啊?
面試心得:面試聊了 30 分鐘左右,咨詢內(nèi)推人員,一面通過,等待銀行內(nèi)部員工進(jìn)行二面復(fù)試。
28 重慶荊棘鳥軟件
請自我介紹(上來就是hr面,靈魂拷問開始) 你 2013 年離職原因是什么? 你覺得你遇到的最大困難是什么,是怎么解決的? 你之前在工作上經(jīng)常感到有壓力嗎? 你如果在工作中,跟別人發(fā)生分歧,你該這么做? 如果產(chǎn)品或者用戶提出來需求做不了,你該怎么辦? 你跟領(lǐng)導(dǎo)曾經(jīng)有沒有過發(fā)生分歧不同,是否要堅持自己的方案? 如果有一個分工任務(wù),你的同事不愿意配合完成,他什么都不想做,甚至就是不愿意工作,你應(yīng)該怎么辦? 如果分給你的開發(fā)任務(wù),你完成了,別人的任務(wù)還沒有完成,你應(yīng)該怎么辦? 你曾經(jīng)幫助過別人嗎,是否經(jīng)常在小組里面幫助人? 你們的績效是怎么打的,是否有過被扣績效的情況,為什么? 你今天有一個需求需要上線,而同時生產(chǎn)出現(xiàn)了一個 bug 你該怎么做,哪個優(yōu)先級高? 你做過需求分析這塊嗎? 如果你參與別人的會議,遇到一個自己覺得好的方案,是否會提出來讓別人按照你的去做? 你覺得你最大的缺點是什么? 你在生活上或者工作上遇到過最大的挫折是什么? 你對加班怎么看?(然后介紹了他們公司的一些加班情況) 問完這些還不夠,后面還發(fā)了一個鏈接,讓做30分鐘的性格測試,服!
下午17:00技術(shù)經(jīng)理開始面試:
說一下 JVM 內(nèi)存結(jié)構(gòu); 有沒有用過 JNI; 音視頻這塊東西,做過嗎,對音視頻SDK了解嗎? 內(nèi)存溢出有哪些場景,怎么排查的,怎么解決? 你們?nèi)罩臼怯玫氖裁?,怎么分級打印的?/section> 代碼測試這塊用過嗎,代碼測試覆蓋率怎么做的? 對 http,tcp/ip 熟悉嗎,用過一些抓包工具分析沒有? UML類圖畫過嗎? 我們的音視頻服務(wù),是用的開源的,如果讓你學(xué)習(xí)一項新技術(shù),你應(yīng)該怎么做?
面試心得:搞笑 hr,靈魂拷問呢,工資低,加班也不少。
30 某民營銀行
自我介紹; volatile關(guān)鍵字用處和場景? 你拆分大文件,思路是什么,代碼還是 linux 拆分,哪個效率高? 如果要多個文件合并成一個文件,怎么辦,有什么方式提高效率? 你分表處理幾千萬黑名單數(shù)據(jù),是怎么做的? 你用過分布式組件嗎?分布式事務(wù) Seata 的 AT 模式有什么問題? 你系統(tǒng)宕機(jī),當(dāng)時是怎么分析定位問題的? linux 怎么會殺掉你的進(jìn)程,你們系統(tǒng)內(nèi)存多少,JVM 啟動參數(shù)怎么設(shè)置的,為什么申請?zhí)摂M內(nèi)存會超呢? 如果你的系統(tǒng)是集群的方式,那么定時任務(wù)這塊,怎么保證一個應(yīng)用跑? 另外一個業(yè)務(wù)面試官,就問了一個業(yè)務(wù)問題:我看你簡歷上寫的賬單、臺賬、還款單據(jù),你能分別解釋一下這三者的含義嗎? 你三月份離職到現(xiàn)在都沒工作,為什么?
面試心得:面試聊了30分鐘左右,一面通過,說等待一周內(nèi)會進(jìn)行二面復(fù)試。
寫在最后
在沒有同行業(yè)經(jīng)驗的情況下,面試官基本會死磕技術(shù),因為講業(yè)務(wù)他聽不懂。所以建議技術(shù)人在 30 歲以后最好立足于一個行業(yè),不然面試真心太難了。
