7 天,憑這個(gè)項(xiàng)目,我進(jìn)了大廠!
大家好,今天這篇文章是 編程導(dǎo)航星球 的 404ERROR 同學(xué)的面經(jīng)分享(已上岸大廠實(shí)習(xí)):
星球原文鏈接:https://t.zsxq.com/0bngfX6Ll
首先,感謝魚(yú)皮的 接口開(kāi)放平臺(tái)項(xiàng)目,我憑借該項(xiàng)目通過(guò)了多個(gè)大廠、中廠的面試,最終拿到了某大廠 Java 后端實(shí)習(xí)生的 offer。
在這里分享一下十幾場(chǎng)面試下來(lái)被問(wèn)到關(guān)于該項(xiàng)目的一些真題,回饋星球。以下回答都是基于我自己的理解整理的,如果有不準(zhǔn)確的地方,希望各位大佬指教,也希望魚(yú)皮能多出幾個(gè)這樣的項(xiàng)目!
問(wèn)題1
項(xiàng)目是你自己做的嗎?你為什么做這樣的一個(gè)項(xiàng)目?你做這個(gè)項(xiàng)目的背景(初衷)是什么?幾乎每次都被問(wèn)到
答:我的初衷是盡可能地幫助和服務(wù)更多的用戶(hù)和開(kāi)發(fā)者,讓他們更加方便快捷地獲取他們想要的信息和功能。
接口開(kāi)放平臺(tái)它可以幫助開(kāi)發(fā)者快速接入一些常用的服務(wù),從而提高他們的開(kāi)發(fā)效率,比如天氣服務(wù)、隨機(jī)頭像和心靈雞湯等服務(wù),它們是一些應(yīng)用或者小程序中常見(jiàn)的功能,所以提供這些接口可以幫助開(kāi)發(fā)者更加方便地實(shí)現(xiàn)這些功能。
這些接口也可以讓用戶(hù)在使用應(yīng)用時(shí)獲得更加全面的功能和服務(wù),從而提高他們的用戶(hù)體驗(yàn)。所以我認(rèn)為接口開(kāi)放平臺(tái)是一個(gè)有意義的項(xiàng)目,可以為用戶(hù)和開(kāi)發(fā)者帶來(lái)更多的便利和價(jià)值。
注:因?yàn)槲覀€(gè)人已經(jīng)將項(xiàng)目上線,并能夠提供一些真實(shí)的接口服務(wù)。有條件的同學(xué)盡量將項(xiàng)目上線。此外有兩場(chǎng)的面試官想要查看數(shù)據(jù)庫(kù),我開(kāi)了屏幕共享給他們看,所以要對(duì)數(shù)據(jù)庫(kù)的表結(jié)構(gòu)和設(shè)計(jì)有一定的了解。
問(wèn)題2
項(xiàng)目的架構(gòu)你是怎么設(shè)計(jì)的?
答:我采用前后端分離的架構(gòu),前端使用Nginx部署,通過(guò) Nginx 反向代理將請(qǐng)求轉(zhuǎn)發(fā)到 web 項(xiàng)目,因?yàn)轫?xiàng)目剛剛上線,所以這里暫時(shí)采用了單機(jī)部署的模式,未來(lái)可能采取水平擴(kuò)容的方式,增加多臺(tái)節(jié)點(diǎn),通過(guò) Nginx 的負(fù)載均衡,將請(qǐng)求平均的分發(fā)到我的每個(gè)節(jié)點(diǎn)上,以支撐更高的并發(fā)。
我的 web 項(xiàng)目使用 Spring Boot 開(kāi)發(fā),并連接到了數(shù)據(jù)庫(kù)和 Redis,數(shù)據(jù)庫(kù)使用的是 MySQL,主要用來(lái)存儲(chǔ)用戶(hù)的信息和接口的信息;通過(guò) Redis 實(shí)現(xiàn)了分布式 session,因?yàn)榭紤]到未來(lái)要使用分布式架構(gòu),為了避免使用 tomcat 保存 session 有用戶(hù)登錄失效的問(wèn)題。
注:這里我說(shuō)出了反向代理,水平擴(kuò)容,負(fù)載均衡等技術(shù)名詞,很多面試官會(huì)根據(jù)這些名詞進(jìn)行延伸提問(wèn)(引導(dǎo)面試官往自己熟悉的東西上提問(wèn))比如:說(shuō)說(shuō)什么是正向代理/反向代理?什么是水平擴(kuò)容?什么是負(fù)載均衡?你了解哪些負(fù)載均衡的算法?提前準(zhǔn)備好這些知識(shí)之后,就可以跟面試官一頓輸出了。
問(wèn)題3
你怎么做的技術(shù)選型?為什么要用這些技術(shù)?
答:使用 SpringBoot 是因?yàn)橥ㄟ^(guò)自動(dòng)裝配能夠提高項(xiàng)目的開(kāi)發(fā)效率,還能夠很好的整合其他服務(wù)。
使用 MySQL 的原因是因?yàn)榭紤]到未來(lái)有用戶(hù)充值交易,限制調(diào)用次數(shù)等場(chǎng)景需要用事務(wù)保證數(shù)據(jù)的完整性和一致性。
使用 Redis 的原因是因?yàn)榭梢杂脕?lái)實(shí)現(xiàn)分布式 session、鎖、緩存等功能。因?yàn)?Redis 是一個(gè)單獨(dú)的中間件,不同客戶(hù)端可以往同一個(gè) Redis 或者集群中存放session/加鎖,這樣就能保證資源能夠在分布式服務(wù)下都可見(jiàn)。
并且由于 Redis 也是單線程的,同時(shí)也支持 lua 腳本,可以保證并發(fā)安全的問(wèn)題,所以可以很簡(jiǎn)單的實(shí)現(xiàn)分布式鎖的功能。
注:被面試官追問(wèn)自動(dòng)裝配的原理你了解過(guò)嗎?自動(dòng)裝配是怎么實(shí)現(xiàn)的?分布式 session 的原理?
問(wèn)題4
你的開(kāi)發(fā)流程是什么?先實(shí)現(xiàn)還是先技術(shù)選型?
這里可以參考魚(yú)皮大佬直播開(kāi)發(fā)時(shí)對(duì)企業(yè)中做項(xiàng)目流程的講解
答:我先參考了一些已有的產(chǎn)品,根據(jù)這些產(chǎn)品,總結(jié)出來(lái)比較好的功能點(diǎn),再結(jié)合自己想要實(shí)現(xiàn)的一些功能特色,去做了一個(gè)項(xiàng)目整體設(shè)計(jì),有了產(chǎn)品原型后再進(jìn)行技術(shù)選型。使用什么樣的技術(shù)去解決什么樣的業(yè)務(wù)問(wèn)題。
問(wèn)題5
為什么你要使用網(wǎng)關(guān)?
答:我這個(gè)平臺(tái)的關(guān)鍵點(diǎn)就在于提供接口服務(wù),要保證接口的可用性和穩(wěn)定性,所以將接口服務(wù)獨(dú)立部署在另一臺(tái)機(jī)器上,隱藏真實(shí)的接口地址及端口,調(diào)用接口服務(wù)的請(qǐng)求都必須經(jīng)過(guò)網(wǎng)關(guān)流量染色之后...(這里細(xì)節(jié)太多,比如 rpc 調(diào)用獲取用戶(hù)sk,重新生成簽名認(rèn)證等等)之后,將請(qǐng)求轉(zhuǎn)發(fā)到真實(shí)的接口地址,防止接口被惡意調(diào)用、盜刷。
注:這個(gè)問(wèn)題要對(duì)網(wǎng)關(guān)做了什么事情非常非常熟悉,建議反復(fù)觀看魚(yú)皮大佬的直播回放。
問(wèn)題6
為什么使用 RPC 調(diào)用?有了解過(guò)其他的方式嗎?
答:因?yàn)槿绻诰W(wǎng)關(guān)引入數(shù)據(jù)庫(kù)的操作的話,不僅會(huì)增加項(xiàng)目體積,以及違背了設(shè)計(jì)原則的單一職責(zé)原則,所以我考慮通過(guò)服務(wù)間調(diào)用的方式,我了解過(guò)有兩種方式,第一種是 Open feign,原理是構(gòu)造了一個(gè) HTTP 請(qǐng)求,并會(huì)添加很多的請(qǐng)求頭,body 是使用 json 字符串傳輸,所以調(diào)用效率會(huì)比較低,更加適合外部服務(wù)間的調(diào)用。
然后我了解到 RPC 是可以基于 TCP 協(xié)議,避免了無(wú)用的請(qǐng)求頭,以及可以通過(guò)將數(shù)據(jù)序列化為二進(jìn)制流的形式傳輸,效率更加高效,更加安全,所以更適用于我這個(gè)場(chǎng)景。最終我選擇了 Dubbo RPC 框架來(lái)實(shí)現(xiàn)這個(gè)功能。
問(wèn)題7
你的接口調(diào)用次數(shù)統(tǒng)計(jì)以及排行是怎么實(shí)現(xiàn)的?
答:通過(guò) MySQL 統(tǒng)計(jì),每次調(diào)用結(jié)束后,網(wǎng)關(guān)都會(huì)發(fā)起一個(gè) rpc 請(qǐng)求,調(diào)用次數(shù)+1。
注:這里我會(huì)拋出一個(gè)設(shè)計(jì)缺陷,在實(shí)際測(cè)試過(guò)程中,通過(guò) jmeter 壓測(cè)工具,會(huì)出現(xiàn)調(diào)用次數(shù)不準(zhǔn)的情況,原因是因?yàn)闆](méi)有在業(yè)務(wù)層面加鎖,導(dǎo)致數(shù)據(jù)庫(kù)出現(xiàn)并發(fā)寫(xiě)的問(wèn)題。并且并發(fā)量大的話,對(duì)數(shù)據(jù)庫(kù)造成很大的壓力。引導(dǎo)面試官問(wèn)出,那你有什么更好的解決方案嗎?
答:如果在業(yè)務(wù)層面加一個(gè)寫(xiě)鎖的話,會(huì)影響業(yè)務(wù)的執(zhí)行效率,所以我想使用 Redis 去解決,Redis 有一個(gè)數(shù)據(jù)結(jié)構(gòu) Zset 支持排序,score 可以用來(lái)存儲(chǔ)調(diào)用次數(shù),并且 Redis 是單線程,可以解決并發(fā)問(wèn)題。
注:這里被追問(wèn)過(guò) Zset 的底層實(shí)現(xiàn),以及如何將這些數(shù)據(jù)進(jìn)行持久化保存,防止 Redis 宕機(jī)導(dǎo)致數(shù)據(jù)丟失,可以從 AOF,RDB 展開(kāi)來(lái)講,或者在后臺(tái)開(kāi)啟一個(gè)定時(shí)任務(wù),定時(shí)將這些數(shù)據(jù)進(jìn)行落庫(kù)。
問(wèn)題8
你做過(guò)什么優(yōu)化嗎?你接口的性能怎么樣?
答:我有一個(gè)接口是隨機(jī)返回土味情話,我在數(shù)據(jù)庫(kù)中插入了幾千條土味情話,當(dāng)調(diào)用接口時(shí)隨機(jī)返回一條。
在還沒(méi)有優(yōu)化前,接口的 qps 在 300 左右,但是考慮到這個(gè)接口只有讀操作,沒(méi)有增刪改操作,所以我將這張表的存儲(chǔ)引擎從 Innodb 改為了 MyISAM,接口的 qps 提升到了 1500。
注:被面試官追問(wèn)為什么改為 MyISAM 有這么大的性能提升?Innodb 和 MyISAM 有什么區(qū)別?
這個(gè)問(wèn)題一定要根據(jù)自己實(shí)際情況來(lái)答,根據(jù)自己擅長(zhǎng)的方面,比如對(duì)查詢(xún)語(yǔ)句做了索引優(yōu)化,提升了接口的性能。
總而言之,面試官會(huì)從各個(gè)角度去深挖項(xiàng)目的細(xì)節(jié),考量你是不是真的自己做的,是不是真的理解?所以要做到對(duì)項(xiàng)目的所有細(xì)節(jié)都非常的熟悉。當(dāng)完全理解項(xiàng)目之后,就能夠提前預(yù)測(cè)到面試官會(huì)怎么問(wèn),并在面試過(guò)程中說(shuō)出一些技術(shù)名詞引導(dǎo)面試官,然后對(duì)這些問(wèn)題,和延伸的知識(shí)點(diǎn)能夠完全掌握后,相信一定可以征服面試官。
星球活動(dòng)
1.歡迎參與 30 天面試題挑戰(zhàn)活動(dòng) ,搞定高頻面試題,斬殺面試官!
2.歡迎已加入星球的同學(xué) 免費(fèi)申請(qǐng)一年編程導(dǎo)航網(wǎng)站會(huì)員 !
3.歡迎學(xué)習(xí) 魚(yú)皮最新原創(chuàng)項(xiàng)目教程,手把手教你做出項(xiàng)目、寫(xiě)出高分簡(jiǎn)歷!
加入我們
歡迎加入魚(yú)皮的 編程導(dǎo)航知識(shí)星球,魚(yú)皮會(huì) 1 對(duì) 1 回答您的問(wèn)題、直播帶你做出項(xiàng)目、為你定制學(xué)習(xí)計(jì)劃和求職指導(dǎo),還能獲取海量編程學(xué)習(xí)資源,和上萬(wàn)名學(xué)編程的同學(xué)共享知識(shí)、交流進(jìn)步。
?? 加入星球后,您可以:
1)添加魚(yú)皮本人微信,向他 1 對(duì) 1 提問(wèn),幫您解決問(wèn)題、告別迷茫!點(diǎn)擊了解詳情
2)獲取海量編程知識(shí)和資源,包括:3000+ 魚(yú)皮的編程答疑和求職指導(dǎo)、原創(chuàng)編程學(xué)習(xí)路線、幾十萬(wàn)字的編程學(xué)習(xí)知識(shí)庫(kù)、幾十 T 編程學(xué)習(xí)資源、500+ 精華帖等!點(diǎn)擊了解詳情

3)找魚(yú)皮咨詢(xún)求職建議和優(yōu)化簡(jiǎn)歷,次數(shù)不限!點(diǎn)擊了解詳情

4)魚(yú)皮直播從 0 到 1 帶大家做出項(xiàng)目,已有 50+ 直播、完結(jié) 3 套項(xiàng)目、10+ 項(xiàng)目分享,幫您掌握獨(dú)立開(kāi)發(fā)項(xiàng)目的能力、豐富簡(jiǎn)歷!點(diǎn)擊了解詳情
外面一套項(xiàng)目課就上千元了,而星球內(nèi)所有項(xiàng)目都有指導(dǎo)答疑,輕松解決問(wèn)題

星球提供的所有服務(wù),都是為了幫您更好地學(xué)編程、找到理想的工作。誠(chéng)摯地歡迎您的加入,這可能是最好的學(xué)習(xí)機(jī)會(huì),也是最值得的一筆投資!
長(zhǎng)按掃碼領(lǐng)優(yōu)惠券加入,也可以添加微信 yupi1085 咨詢(xún)星球(備注“想加星球”):
往期推薦
