後端工程師的面試紀錄(一)

發布日期:2023/03/19
瀏覽次數:1125

就在前幾天,下定決心要來找新的工作了,這次沒有特別做什麼準備,寫了履歷就立刻投了,之前起了念頭想換工作,總是很怕自己沒準備好,很怕自己緊張,很怕自己能力其實根本不夠,就放棄了,但最近的事實在讓我…太無奈了。

投出履歷後也很順利的收到面試通知,但也是藉由面試,讓我意識到自己實在有很多以為自己理解,卻其實很難完整的解釋出來的東西,於是想紀錄下來,讓自己理一下頭緒,希望下次可以講得更好,只是過程中完全忘記記錄了,因此提問的題目都是靠自己回想的。

總之,這次的面試分三個階段

  1. 簡介公司及團隊工作內容
  2. 技術類與非技術類問答
  3. 提問

今天主要想要紀錄跟給自己檢討的是技術類問答跟最後提問階段的表現,其他就不多作紀錄了。

技術類問答

Action filter是什麼

我其實一聽到的時候就覺得很耳熟,但一時想不起來是什麼,後來一查才發現,之前在開發API的時候用到的Authorization,其實就是Action filter之一,詳細可以參考這裡

下次可以這樣說:
Action filter是一種在MVC Action執行前或執行後進行的其他任務的機制,包含身分驗證、Log紀錄、例外處理甚至是自定義的任務。

*補充: 在查Action filter的時候突然讓我回想起之前還有聽過Middleware,因此也順道複習了一下。
兩者主要的差異是,Middleware使用的時機是HTTP Request進來和Response出去時,而Action filter則是在Middleware之後,像是Action filter用到的Authorization,也是要先在程式啟動時呼叫UseAuthorization,才能夠使用,這個UseAuthorization也是Middleware之一,可以參考下面官方的流程圖。

請說明MVC分別的定義為何

MVC分別為Model、View以及Controller,View表示的是使用者看到的畫面以及互動邏輯,Controller則為一個處理請求的角色,將使用者的請求進行處理或是轉發,通常在Controller中不應包含太複雜的邏輯處理,大部分的資料處理、商業邏輯會在Model。

同樣補充一下,MVC常被問到跟多層式架構(三層式架構)有何不同,其實從根本上這就是兩種不同的架構,我認為簡單來說,MVC架構著重的在於View以及Model之間的隔離,就如同現在常聽到的前後端分離,View只應該負責前端,Model負責後端,Controller則是將兩者串起來的API。而多層式架構則是將重點放在所謂的後端,應該要把邏輯與資料處理分層,不應把商業邏輯跟資料庫的讀寫等等寫在一起。

請解釋泛型是什麼

泛型為型別的一種,它讓我們可以在設計階段已一個代稱來表示參數之型別,在實作泛型的方法、類別或介面時,再指定其實際型別,以提升程式碼共用性。例如常使用到的List<T>,無論要宣告哪種型別的List,都可以使用這個類別,只需將T替換成要使用的型別即可。

請解釋依賴注入是什麼

面試時我只提到依賴注入是在ConfigureServices時可以注入Service、DbContext或類別等等,其他類別中的建構子會使用的依賴物件。
但我忘記講到一個很重要的東西,就是依賴注入其實跟單元測試有很大的關聯性,我會忘記提到,其實就是因為我還沒有真正的使用過單元測試,對這個用法還不夠熟悉,不過我也確實用過依賴注入來抽換資料層,在某次要重構資料層時,為了方便測試,將原本的資料層改以介面注入,來抽換原本的資料層跟重購後的資料層。

介面與抽象類別的差異為何

我一直以為我已經搞懂這兩個的差異了,但實際在說明的時候,還是沒辦法很有結構的說明,當下覺得單純說介面在繼承時必須實作全部的方法等等的這種定義,會被認為只是再背誦,想要透過舉例的方式說明,但卻越說越混亂…

目前還沒有想到一個很直白舉例,可以簡短的說明兩者在使用上的差異,暫時先放我之前整理的筆記。

SQL Injection是如何攻擊的

這應該是我在面試時,唯一解釋的比較完整的一題了…
打這篇主要是在檢討我自己的回答,詳細的說明可以參考這篇文章,這我之前看到覺得寫得很詳細。

最後,中間其實還有一題,不過我沒聽過那個詞,然後我也忘了寫下來…只記得是跟資料庫相關的,下次真的一定要記得隨時拿好紙筆紀錄。

非技術類問答

這個階段的回答就不記錄了,單純的回答真實的想法而已,我覺得講的還算可以,就記錄一下題目就好。

  1. 想換工作原因為何?
  2. 遇到最難的任務是什麼,最終如何完成的?
  3. 最近一個學習的技術是什麼,是如何學習的?
  4. 你覺得目前的主管對你的評價為何,為什麼?

提問階段

提問階段真的一定要事先準備,不可能靠臨機應變的,因為臨時想的話,會很容易冒出很鳥的問題(像是問後端主管前端的Team為什麼會要換框架…)。給我自己的建議,拜託拜託要搞清楚自己在面試什麼職缺,還有問的對象是什麼角色,然後釐清自己想要的是什麼,針對自己的目標、工作職務相關的,還有跟對象有相關的來問。

第一個提問問完之後,就覺得真的想把自己埋了,於是乎直接腦袋打結完全空白,想了第二個問題,結果還講不出來,真的還好面試官人非常非常好,主動幫我接下去。最後其實想再拉回一些比較有相關的提問,不過…其實腦袋根本已經完全無回應了,面試也大致就到這邊結束。

其實我在第二個問題是想問,web的技術演進的非常快,團隊是否有規劃一些技術交流的方式,幫助相互成長或是學習新的技術,如果有的話技術交流與學習,跟專案的開發維護這些日常工作,時間上是如何分配的?因為在現在的公司,都是單獨開發,平時也沒有技術的交流,想要提升能力只能靠自己,看看影片或是文章等等,因此希望在下一份工作可以有團隊可以相互交流以及提升技術的機會。

總結

總結一下,這次從投出履歷到實際面試只過了不到一天,在投出履歷前也沒有去刷題、複習一些常見的問題之類的(雖然這個真的完全就是我自己的問題),不意外的在技術類問答的時候緊張到爆炸,但也讓我意識到,我其實對一些看過甚至用過的技術都不夠瞭解,架了這個部落格希望之後還是可以多多更新,紀錄自己對一些技術的解釋,才能發現是不是還有了解不夠詳細的地方。

這是我第一次記錄下面試後的想法與檢討,希望自己可以繼續成長,繼續加油~~

Like