當前位置: 妍妍網 > 碼農

用 API 計畫拿下面試,爽!

2024-03-30碼農

今天分享 裏一位小夥伴的面經,憑借星球計畫拿下了面試。

編程導航裏已經手把手帶大家完成了 10+ 個計畫,並且每個計畫都有對應的計畫面試題和整理了小夥伴的真實面經,大家跟著實操完計畫後,可以照著面試題和面經準備起來。

星球原文連結:https://t.zsxq.com/1809N1Hiw

本文已獲原作者授權

大家好,我是二本院校的學生,去年加入星球,而後開始跟著星球的學習路線和計畫教程學習,後面單獨給星球嘉賓提問關於求職面試的問題。

陸續拿到了一些面試機會,絕大部份都是中小公司,分享個人的面經。

計畫目前的情況是:星球 幾乎必問, 問的少。

計畫介紹

API 開放平台計畫流程介紹

計畫分為多個子模組:

1)Api-backend:完成使用者管理、介面管理、介面線上呼叫相關功能。

2)Api-gateway:實作路由轉發、存取控制、使用者鑒權、流量染色、統一完成登入校驗、API簽名校驗、介面統計以及請求和響應日誌的處理。

3)Api-interface:提供請求的真實介面功能。

4)Api-common:統一抽取的公共實體、介面。

啟動 Nacos、Backend、Gateway、Interface、SDKClient 和 Common 需要提前在本地 Install。

先在 Backend 計畫中呼叫對應的 InterfaceInfo/Invoke 方法,校驗參數、判斷介面 Id 是否存在、是否關閉等。

然後獲取到當前登入使用者,並查出對應的 AccessKey 和 SecretKey,並以此作為參數建立 SDK 客戶端物件,然後把剛才參數中的 UserRequestParams 透過 Gson 庫將 JSON 字串反序列化為 Java 物件,SDK 客戶端封裝一系列請求參數,使用 hutool 工具包,將請求發送給 Gateway 閘道器計畫。

在閘道器計畫全域過濾中,我們先獲取請求頭上的一系列資訊,包括「請求參數、路徑、方法、來源地址」等,並透過獲取請求頭中特定資訊實作流量染色。該部份設定了黑白名單,只允許 IP 地址為當前伺服器的請求透過,然後我們再做鑒權,透過傳入的 AccessKey 去找出對應的使用者,並且對請求的時間等作校驗,再透過 AccessKey 查出來的使用者,進一步得到對應的 SecretKey。

同時,我們還需要對得到的 Path 和 Method 所對應的介面進行查詢,判斷是否存在,如果不存在則丟擲指定的異常。

最後,如果上述校驗都沒問題,那麽我們認為這個請求是合法的,透過一個返回結果處理器 HandleResponse,將使用者和介面對應表 User_interface_info 中的使用者的剩余介面呼叫次數等欄位進行更新操作,結束後完成業務流程。

在上面的過程中,我提到了「鑒權、校驗、查詢使用者、查詢 SecretKey」等操作,這些操作對應的程式碼是在 Backend 計畫中,如果我們直接把對應的程式碼放到 Gateway 計畫,勢必會增加計畫的復雜度以及冗余等。所以我想到了使用 Dubbo 這樣一個 RPC 框架,透過**@EnableDubbo、@DubboReference、@DubboService等註解,配置相應的 Yml 內容,並以Nacos** 作為服務的註冊中心,實作了遠端業務程式碼的呼叫。還使用了 Sentinel 對主要介面進行熔斷和限流。

中廠一面(被拷打)

1)自我介紹

2)講講 API計畫

3)為什麽不用 Feign 直接去封裝 SDK 的介面?

4)我現在希望你換個方式實作 SDK:如果介面用 Feign,並且把簽名、異常、日誌都加進去,你會怎麽去做 SDK?

5)提示:異常是在哪兒做的,處理過後對吧?日誌是在呼叫前後做的對吧?你覺得這像什麽?(像把飯餵到嘴邊,哈哈哈)

6)回答:Spring AOP,然後講述了一下 Spring AOP。但還是不知道怎麽做,已經嚇傻...

7)面試官:沒事,這個問題不用糾結,你以後就會了。

8)Redis 實作分布式 Session 的原理是什麽?

9)Cookie 和 Session 如何保證會話的一致性?

10)不太懂意思

11)面試官:就是說我去請求 介面,我怎麽知道是這個人而不是別人?我怎麽定義到別的方面去,保持後端可以 辨識出來這個人是誰?

12)回答 Cookie 怎麽儲存的,Session 怎麽存的,反正講了自己對 Cookie 和 Session 的理解,不至於什麽也不說。

13)你是看文件看的 Dubbo 文件學習的對吧?你註冊中心是用的 Nacos 對吧?怎麽做的?

14)Redis 用過嗎?用了什麽數據結構?(瘋狂輸出)

15)你現在是在學校嗎?在哪個城市?

16)你為什麽要來公司所在的城市?

二面(不難,總體不錯)

1)自我介紹

2)計畫是自學的嗎還是?

3)為什麽要做 API 開放平台?

4)計畫模組和特性都是自己設計的嗎?

5)你覺得整個 API 開發過程比較難的點是什麽?

6)Sentinel 限流工具是你自己本地搭的嗎?

7)你本地啟動 Redis 或者 Sentinel 的過程是什麽樣的,配置怎麽調的?

8)Hashmap 數據結構?為什麽要把連結串列轉紅黑樹?有什麽優點?

9)Synchronize關鍵的實作原理? (唯一一個完全忘記了的)

10)Java 裏面常用的執行緒池有哪些?

11)MySQL 在 InnoDB 引擎裏面,常用的索引型別哪些?

12)索引所用的數據結構是什麽?

13)你覺得可以用二元樹來實作索引嗎?

14)聊崗位位置

15)聊職業規劃

16)反問:咱們公司的轉正規則

17)反問:咱們公司的技術棧、業務

18)最後:面試官說面下來感覺比較好,並給我提了一點學習建議

HR面

HR 視訊面:自我介紹、聊在校經歷、聊競賽經歷、聊入職時間、聊職業規劃等。

我認為主要是考察性格和語言表達能力,HR 對我的感覺比較好,說下周發 Offer,但是要補個筆試,說之前面試官們給搞忘了。(然後下午接到訊息說不用補了?啥情況呢,我的演算法白刷了?hhhh)

以上,就是今天的分享,希望對大家有幫助。

歡迎學編程的朋友加入魚皮的 ,和 2.8 萬名 編程學習者共享知識、交流進步。

星球擁有 30+ 原創學習路線和專欄、 上千篇 優質編程學習求職幹貨。

還有魚皮從 0 - 1 全程直播帶做的 原創計畫 ,手把手帶你 掌握獨立開發計畫的方法 ,並且提供 現成的簡歷寫法 ,成功幫助不少小夥伴找到了工作。

並且星球裏已經匯總了求職過程中的高頻問題, 求職前完整閱讀一遍,能少走很多彎路,找工作不迷茫!

歡迎感興趣的同學加入體驗,限時領取 36 元優惠券:

三天內不滿意可全額退款,有沒有用自己試了才知道