1. 程式人生 > >面經:2018暑期實習騰訊一面(前端)

面經:2018暑期實習騰訊一面(前端)

時間:2018年4月11日上午9點

地點:廣州市天河區聖豐索菲特大酒店

面試官:感覺比我大不了幾歲的小夥子,很有眼緣,人還不錯

問題深度:★ ★ ★

問題廣度:★ ★ ★ ★

面試官友好程度:★ ★ ★ ★

綜合難度:★ ★ ★

一、自我介紹

沒啥好說的

二、 專案(根據專案進行提問)

1. 最近的一個專案,使用的技術棧,你在專案中擔任的角色?

老人院管理系統,Vue + ElementUI + Stylue,技術選型 + 元件樹設計 + 部分程式碼開發。

追問:為什麼選擇Vue?

輕量、元件化、易上手

2. Vue 元件通訊是怎麼實現的?

父子間通訊通過props 和 $emit 傳值,同級元件使用Vuex 進行通訊。

追問:說一下Vuex 吧?

Vuex 主要包含幾個概念:State、Getter、Mutations、Action、Module。分別用來維持全域性變數、獲取變數、設定變數、模組化操作。

3. Angular 的依賴注入你有了解過嗎?是什麼意思?有哪些場景的應用?

依賴注入我舉了個去菜市場買菜和小販送菜上門的例子,應用場景沒說上來。

三、理論和解決方案

1. HTTP 和 HTTPS 的區別是什麼?為什麼HTTPS 更加安全?

HTTPS 相當於HTTP + SSL,HTTP 是不安全的因為它在傳輸的過程中使用明文傳輸,而HTTPS 是通過密文進行傳輸的。HTTPS 在傳輸之前會使用非對稱加密演算法獲得對稱金鑰,然後使用對稱金鑰加密傳輸內容。

追問:HTTPS 需要加密是否會造成效能上的問題?如何提高?

這個沒回答上來,說應該可以使用類似快取的機制吧。

2. 跨域問題有了解過嗎?怎麼解決?

兩種辦法:JSONP 和 CORS。JSONP 利用了src 的無跨域限制,瀏覽器端可以訪問伺服器端寫有傳輸內容的js 檔案,然後執行回撥方法,進行處理。CORS 通過在請求頭中新增origin 來標明自己的身份,再在伺服器端允許相應的origin訪問。CORS 分為兩種情況:簡單請求和非簡單請求。

3. 前端的請求資訊都包含哪些欄位?(直接看圖)


4. 網頁載入的全過程?

HTML 框架搭建 -> Css 渲染 -> js 引發重繪或重排

追問:在發請求之前可能會有哪些操作?

檢查快取吧

追問:快取機制,請求頭中有哪些相關的欄位?

emmm,只記得有個過期時間

5. 原型鏈瞭解嗎?講一下

js 中所有的物件都有一個共同的祖先,叫Object.prototype,在建立物件的時候是類似繼承關係的一層一層地傳遞,就像一條鏈子。當我們訪問一個物件中的屬性或者方法的時候,會先去找這個物件本身是否有,如果沒有再去找它的父親,直到原型鏈的根節點。

6. 面向物件瞭解嗎?不侷限於js 中,抽象類、介面、巴拉巴拉

emmm,母雞

7. 設計模式知道不,說說單例模式和工廠模式?

工廠模式用來批量成產物件。單例模式不知道。我還知道一個觀察者模式,有點類似Vue 的資料雙向繫結機制,一個人在一旁盯著兩個人,任何一方有風吹草動他都會通知給另一方。

8. HTTP 狀態碼瞭解嗎?(問的很淺,沒有問具體某個是什麼意思)

2 開頭的表示成功,3 開頭的表示重定向,4 開頭的表示客戶端bug,5 開頭的表示服務端bug。

9. 同步、非同步、阻塞、非阻塞瞭解嗎?說一下吧,能不能給我舉個栗子

我說假如我想找人辦事,但是那人在吃飯,他吃飯需要30分鐘。這個時候我有兩個選擇,一個是在旁邊等他吃完飯然後給我辦事,另一個是先去做自己的事情,等他吃好了再來找他。這兩種方式分別對應了同步和非同步。

10. defer 瞭解嗎?

js 載入的時候三種情況,同步,asyc(獲取和執行都是非同步),defer(獲取是非同步,執行是同步)

11. 有哪些實現非同步的方式?

回撥、Promise、SetTimeOut

追問:再想想還有其他的嗎?

呃.......想不到了

補充:可以利用script 的非同步屬性

12. JS 垃圾回收機制瞭解嗎?

只記得一種機制是引用計數,當變數引用計數為0的時候就回收記憶體。

四、後端

1. 使用什麼資料庫?

MYSQL

追問:效能優化、索引、資料庫引擎有了解過嗎?

沒有

2. Apache、Nginx、Node 有用過嗎?

追問:Apache 和Nginx 的區別是什麼?

Apache 是伺服器端程式,Nginx 是反向代理。

追問:他們是單執行緒還是多執行緒?

Node 是單執行緒,其他兩個是多執行緒。

追問:反向代理是什麼意思?跟正向代理有什麼區別?

正向代理代理客戶端,伺服器不知道客戶端是誰。反向代理代理伺服器,客戶端不知道伺服器是誰。然後舉了個借錢的例子。這個時候我覺得舉個要offer 的例子可能更應景,哈哈哈。

五、其他

1. 這個網站(簡歷上放了個人網站的連結)是你自己搭的嗎?放在哪裡?有沒有用到什麼元件?

對,放在阿里雲(相視一笑,氣氛有點詭異)上的,沒用到什麼框架和元件,就是一個簡單的h5 頁面。

2. 來,做道題吧,給你20分鐘時間,用你最擅長的語言,手擼程式碼。然後就跑到旁邊的床上敲鍵盤去了。

題目內容:小明有20塊錢,一瓶汽水一塊錢,兩個空瓶子能換一塊錢,問小明最後能喝到多少瓶汽水?

用js 寫的,for 迴圈實現,給他講解了一下我的思路。然後問我怎麼不用遞迴,如果用遞迴該怎麼解決?我說遞迴就學樹的時候  接觸的比較多,平時用的不多。他說,好,沒事,這個不做要求。

遞迴解法:

function getNum (num) {
  let sum = 0;
  sum += Math.floor(num / 2);
  if (num >= 2) {
    return sum + getNum(sum + num % 2);
  } else {
    return 0;
  }
}

console.log(20 + getNum(20));

六、你有什麼想問的嗎?(以下是我問)

1. 今天一共有幾場面試?面完這個後面還有嗎?

今天就一場,面完就可以走了。

2. 因為我個人在學習前端過程中走的路還是蠻曲折的,所以想問問騰訊內部針對新人的培訓機制如何?

巴拉巴拉,講了一堆,什麼技術分享,內部wiki,也會有一些課程之類的。

3. 您覺得我今天的表現如何?(感覺這是個很重要的問題,即可以知道你自己的情況,又給面試官一個給自己提供建議的機會,所以問的時候最好加一句,您對我有什麼建議呢)

很ok啊

(暫時這麼多,有想到其他的隨時補充~~)