2019騰訊暑期實習(xí)面試(offer)前端經(jīng)驗

最近在忙著準備找實習(xí),所以沒有更新之前的文章.
不過所幸功夫不負有心人,我拿到了騰訊的offer.
這里分享一下面試的經(jīng)驗.
簡介
本人雙非本科,普通學(xué)生一枚.
面的是騰訊的Web前端開發(fā).
整個面試一共有四輪,分為:一面(筆試\初試) 二面(技術(shù)\復(fù)試) 三面(項目\復(fù)試) 四面(HR\終面)
一面
我是在五月份的時候收到的初試的消息
第一面的形式是遠程視頻面試,在??途W(wǎng)上進行.
面試首先肯定是一個自我介紹,這里我就不贅述了
聊了一下我的大概情況過后,然后就開始面試了
第一個問題:
怎么判斷一個對象是不是數(shù)組?
首先可以用 ES5 提供的 isArray 方法進行判斷,這個方法應(yīng)該是最官方的
可以使用 instanceof Array 來判斷,不過這種方式存在問題,比如當(dāng)存在多個全局對象(如使用ifream),那么這個窗口的Array對象對另一個窗口使用 instanceof 就會判斷失敗
這里是我當(dāng)時給的答案(在JS高級編程一書中有),通過 toString 來進行判斷
function isArray(value){ return Object.prototype.toString.call(value) === "[object Array]"; }
第二個問題:
了解深拷貝與淺拷貝嗎?你能實現(xiàn)一下深拷貝嗎?
這個問題首先我們要知道深拷貝淺拷貝的區(qū)別,我們知道JS的值分為基礎(chǔ)類型和引用類型,也就是說在進行賦值操作時引用類型賦值的實際上只是將地址進行賦值
也就是兩個變量指向了同一個地址,淺拷貝呢就是正常的賦值操作,而深拷貝則希望是一個新的獨立的值,而不是僅僅拷貝地址
由此我們可以給出以下拷貝函數(shù)(這里給的代碼只是一個示意,并不是最佳實踐)
function deepClone(obj){ let objClone = Array.isArray(obj)?[]:{}; if(obj && typeof obj==="object"){ for(key in obj){ if(obj.hasOwnProperty(key)){ //判斷ojb子元素是否為對象,如果是,遞歸復(fù)制 if(obj[key]&&typeof obj[key] ==="object"){ objClone[key] = deepClone(obj[key]); }else{ //如果不是,簡單復(fù)制 objClone[key] = obj[key]; } } } } return objClone; }
第三個問題:
知道繼承嗎?實現(xiàn)一下?
這里的話我問了一下面試官,使用ES6的class實現(xiàn),還是使用原生JS實現(xiàn)?
面試官說都可以,我就用的原生JS寫的,用的組合繼承的方式
function SuperType(){ this.property = true; } SuperType.prototype.getSuperValue = function(){ return this.property; }; // 創(chuàng)建一個新的構(gòu)造函數(shù) function SubType(){ // 調(diào)用父類的構(gòu)造函數(shù) SuperType.applay(this,arguments); this.subprototype = false; } // 重寫這個構(gòu)造函數(shù)的原型對象讓其指向SuperType的實例 SubType.prototype = new SuperType(); // 修改 constructor 讓其指向正確地構(gòu)造函數(shù) SubType.prototype.constructor = SubType; // 添加這個新構(gòu)造函數(shù)的自身的方法 SubtType.prototype.getSubValue = funtion(){ return this.subproperty; } var instance = new SubType(); alert(instance.getSuperValue()); // true 可以訪問到原型對象上的方法和屬性
到這里視頻面試在線打代碼的部分就完成了,后面就問了一些前端方面的問題
第四個問題:
你了解XSS和CSRF嗎?
回答了解,之后就會詳細問了.
首先XSS分為以下三種
- 反射型XSS: 在url上拼接攻擊代碼,訪問get請求的接口,來注入XSS代碼
- MXSS:DomXSS 在 dom 元素的 title , name 等屬性注入
- 存儲型XSS: 通過表單(一般是評論區(qū)等地方)提交XSS數(shù)據(jù),等后臺從數(shù)據(jù)庫中讀取返給前端頁面時生效
CSRF的攻擊方式則是,當(dāng)用戶登錄過A網(wǎng)站通過A網(wǎng)站的合法性身份校驗過后,B網(wǎng)站通過釣魚鏈接等形式獲取用戶在A網(wǎng)站的合法身份來進行攻擊
兩者的區(qū)別:
最大的區(qū)別在于 CSRF 需要用戶完成合法性驗證后才能進行,而XSS則不需要
防御:
XSS的主要防御手段是通過前后端的數(shù)據(jù)過濾來實現(xiàn),對一些HTML的特殊字符進行轉(zhuǎn)義
CSRF的主要防御手段則是通過使用token驗證來驗證用戶身份的合法性
一面的主要內(nèi)容就是上述幾個問題,整個過程45分鐘,我在打代碼的時候當(dāng)時有個邏輯寫反了,找了很久都沒有找到問題,最后是被面試官指出了,所以在面試官那落了個馬虎大意的不良印象.
不過最后還是順利通過了初試.在第二天的晚上面試狀態(tài)就變?yōu)榱藦?fù)試.
二面
在面試狀態(tài)變更后的一個禮拜后預(yù)約了復(fù)試的時間(因為中間過了個端午)
同樣的首先是自我介紹,然后就進入正題.
第一個問題:
瀏覽器輸入網(wǎng)址后到頁面顯示的整個過程?
DNS解析
TCP連接建立(三次握手,四次揮手)
加載文件(HTML,JS,CSS)渲染頁面(生成DOMtree,CSSrule,結(jié)合成render tree ,頁面布局,元素繪制)
第二個問題:
HTTPS和HTTP的區(qū)別?采用的加密算法?
http使用明文傳輸,https采用加密方式傳輸
具體加密過程如下:
- 客戶端向服務(wù)器發(fā)起HTTPS請求,連接到服務(wù)器的443端口(默認)
- 服務(wù)器端有一個密鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,服務(wù)器端保存著私鑰,不能將其泄露,公鑰可以發(fā)送給任何人
- 服務(wù)器將自己的公鑰發(fā)送給客戶端,客戶端收到服務(wù)器端的公鑰之后,會對公鑰進行檢查,驗證其合法性,如果發(fā)現(xiàn)發(fā)現(xiàn)公鑰有問題,那么HTTPS傳輸就無法繼續(xù)。嚴格的說,這里應(yīng)該是驗證服務(wù)器發(fā)送的數(shù)字證書的合法性,關(guān)于客戶端如何驗證數(shù)字證書的合法性。如果公鑰合格,那么客戶端會生成一個隨機值,這個隨機值就是用于進行對稱加密的密鑰,我們將該密鑰稱之為client key,即客戶端密鑰,這樣在概念上和服務(wù)器端的密鑰容易進行區(qū)分。然后用服務(wù)器的公鑰對客戶端密鑰進行非對稱加密,這樣客戶端密鑰就變成密文了,至此,HTTPS中的第一次HTTP請求結(jié)束
- 客戶端會發(fā)起HTTPS中的第二個HTTP請求,將加密之后的客戶端密鑰發(fā)送給服務(wù)器
- 服務(wù)器接收到客戶端發(fā)來的密文之后,會用自己的私鑰對其進行非對稱解密,解密之后的明文就是客戶端密鑰,然后用客戶端密鑰對數(shù)據(jù)進行對稱加密,這樣數(shù)據(jù)就變成了密文
- 然后服務(wù)器將加密后的密文發(fā)送給客戶端
- 客戶端收到服務(wù)器發(fā)送來的密文,用客戶端密鑰對其進行對稱解密,得到服務(wù)器發(fā)送的數(shù)據(jù)。這樣HTTPS中的第二個HTTP請求結(jié)束,整個HTTPS傳輸完成
對稱加密:DES
非對稱加密:RSA
第三個問題:
cookie的作用?cookie的安全?cookie與webstorage的區(qū)別?
cookie的作用:
cookie可以跟蹤會話,彌補HTTP無狀態(tài)協(xié)議的不足
- 判斷用戶是否登陸過網(wǎng)站,以便下次登錄時能夠?qū)崿F(xiàn)自動登錄(或者記住密碼)。如果我們刪除cookie,則每次登錄必須從新填寫登錄的相關(guān)信息
- 保存上次登錄的時間等信息
這里面試官就問我,使用Cookie來做狀態(tài)保持是否安全?怎么解決?
首先Cookie是不安全的,可以通過腳本獲取,也能被中間人截取
解決方案:
- Cookie內(nèi)容加密
- 設(shè)置HttpOnly頭(無法使用JS獲取Cookie)
- Secure:true (只有在HTTPS時才發(fā)送Cookie)
- 設(shè)置過期時間
Cookie與Webstorage (H5提出的用于替代Cookie的解決方案)的區(qū)別:
生命周期:localStorage:localStorage的生命周期是永久的,關(guān)閉頁面或瀏覽器之后localStorage中的數(shù)據(jù)也不會消失。localStorage除非主動刪除數(shù)據(jù),否則數(shù)據(jù)永遠不會消失。 sessionStorage的生命周期是在僅在當(dāng)前會話下有效。sessionStorage引入了一個“瀏覽器窗口”的概念,sessionStorage是在同源的窗口中始終存在的數(shù)據(jù)。只要這個瀏覽器窗口沒有關(guān)閉,即使刷新頁面或者進入同源另一個頁面,數(shù)據(jù)依然存在。但是sessionStorage在關(guān)閉了瀏覽器窗口后就會被銷毀。同時獨立的打開同一個窗口同一個頁面,sessionStorage也是不一樣的
存儲大?。簂ocalStorage和sessionStorage的存儲數(shù)據(jù)大小一般都是:5MB
存儲位置:localStorage和sessionStorage都保存在客戶端,不與服務(wù)器進行交互通信
存儲內(nèi)容類型:localStorage和sessionStorage只能存儲字符串類型,對于復(fù)雜的對象可以使用ECMAScript提供的JSON對象的stringify和parse來處理
應(yīng)用場景:localStoragese:常用于長期登錄(+判斷用戶是否已登錄),適合長期保存在本地的數(shù)據(jù)。sessionStorage:敏感賬號一次性登錄
相比Cookie的優(yōu)點:
- 存儲空間更大:cookie為4KB,而WebStorage是5MB
- 節(jié)省網(wǎng)絡(luò)流量:WebStorage不會傳送到服務(wù)器,存儲在本地的數(shù)據(jù)可以直接獲取,也不會像cookie一樣每次請求都會傳送到服務(wù)器,所以減少了客戶端和服務(wù)器端的交互,節(jié)省了網(wǎng)絡(luò)流量
- 快速顯示:有的數(shù)據(jù)存儲在WebStorage上,再加上瀏覽器本身的緩存。獲取數(shù)據(jù)時可以從本地獲取會比從服務(wù)器端獲取快得多,所以速度更快
- 安全性:WebStorage不會隨著HTTP header發(fā)送到服務(wù)器端,所以安全性相對于cookie來說比較高一些,不會擔(dān)心截獲,但是仍然存在偽造問題
- WebStorage提供了一些方法,數(shù)據(jù)操作比cookie方便
第四個問題:
前端性能優(yōu)化的手段?
- 網(wǎng)絡(luò)加載
- 減少HTTP資源請求數(shù): 合并靜態(tài)資源,構(gòu)建工具合并雪碧圖\避免重復(fù)資源
- 減少HTTP請求大小: 對文件進行壓縮優(yōu)化,使用gzip傳輸壓縮內(nèi)容\移除代碼注釋壓縮代碼
- 將CSS,JS放到外部文件:HTML引用外部資源可以有效利用瀏覽器靜態(tài)資源緩存
- 避免空的 href 和 src
- 指定Cache-Control 或 Expires
- 合理設(shè)置 Etag 和 Last-Modified
- 減少頁面重定向
- 靜態(tài)資源分域存放增加下載并行數(shù)
- 靜態(tài)資源CDN來存儲文件
- CDN Combo 下載傳輸內(nèi)容
- 緩存Ajax cache屬性設(shè)置為 true
- 使用Get Ajax的速度比POST請求快
- 減少Cookie大小進行Cookie隔離(分域存放靜態(tài)資源)
- 異步JS
- 避免CSS import 加載CSS
頁面渲染
- CSS資源放到頁面頂部
- JS放到頁面底部
- 不在HTML中縮放圖片
- 減少DOM元素數(shù)量和深度
- 避免使用
<table><ifream>
等慢元素,這些元素會整個渲染完成后再繪制到頁面上 - 避免使用CSS表達式或CSS濾鏡
第五個問題:
前端性能檢測?
Performance Timing API\ 瀏覽器Profile工具\ 頁面埋點\ 資源加載時序圖 用于獲取頁面加載的性能
如果是遠程監(jiān)控用戶的頁面性能則需要將相關(guān)數(shù)據(jù)上傳到服務(wù)器存儲
第六個問題:
你了解算法嗎?
我:了解一點
你知道堆排序和快排的區(qū)別嗎?
我:數(shù)據(jù)結(jié)構(gòu)不同,堆排是一種樹狀結(jié)構(gòu),時間復(fù)雜度都是(nlogn最好)
他們的時間復(fù)雜度一樣,為什么平常更多使用快排,而不是堆排?
堆排的時間常量要大于快排,也就是執(zhí)行交換操作的性能不同,在性能上快排的性能略優(yōu)于堆排,并且使用場景中快排效率最壞的情況的概率比較小
快排:數(shù)組中交換數(shù)據(jù),在數(shù)據(jù)量不是特別大,而且離散程度較高的情況下效率很高
堆排序:創(chuàng)建堆,數(shù)據(jù)交換,調(diào)整堆的時間均很多
所以在實際應(yīng)用中,我們用快排會更多一點
平時學(xué)習(xí)的方式?
我:前端掘金社區(qū), github , infoq, 博客, 書籍
大概多長時間看完一本書?
我:第一遍通看一個星期,完全掌握差不多要一個多月.
有沒有對書上的內(nèi)容進行實踐?
我:能夠?qū)嵺`的部分會做一些demo,不好實踐的部分則會分享一些自己的學(xué)習(xí)筆記在博客上
你的博客在外網(wǎng)能夠訪問嗎?
我:可以,然后給了鏈接
然后二面的內(nèi)容就差不多了,期間問了一些簡歷上的項目,這里因人而異所以我就不再多說了,整個過程大概65分鐘.
這里到三面有一個小插曲,我看見我官網(wǎng)上的面試流程變灰了,我以為掛掉了,還郁悶了幾天
不過三天后告訴我約了下一場面試.
三面
首先仍是萬年不變的自我介紹:
然后面試官問了:
- 你覺得簡歷的哪個項目對你來說最有挑戰(zhàn)性?
- 中間遇到什么困難?
- 你是怎么解決的?
- 如果讓你繼續(xù)開發(fā)你覺得有什么改進的?
- 你覺得你的項目市場前景如何?
- 你在項目中負責(zé)的工作?
- 你是怎么做的?
- 你的職業(yè)規(guī)劃?
- 你的目標(biāo)?
- 你最近在看什么書?
- 你看過的書中哪一本對你影響最大?為什么?
這一面主要就是問你簡歷的項目了,回答項目的時候從
- 背景
- 目標(biāo)
- 行動
- 結(jié)果
的順序來答就好,至于其它的問題就只能看你自己的臨場發(fā)揮了
在兩天的焦急等待后,收到了HR面的通知
終面
終面的HR是個女HR,我之前一度以為我去的部門只有漢子
簡單的自我介紹過后就開始聊人生
問題:
- 你為什么要來實習(xí)?
- 你大學(xué)參加的這么多比賽里面哪一個讓你印象深刻?為什么?
- 你是怎么改進的?
- 你有沒有面試其他的互聯(lián)網(wǎng)公司?
- 你為什么選擇要來面騰訊?
HR面的話,問題就和技術(shù)沒啥關(guān)系了,感覺主要考察的就是你的意愿強不強烈
你的為人處世,性格等方面
我當(dāng)時對于這些問題,就一直表示十分希望能夠進入騰訊
如果看過我早期的文章的同學(xué),應(yīng)該知道我在去年就投過騰訊的實習(xí),然后在一面就光榮的掛掉了
所以在HR問我最后問題的時候我的原話是這樣的:
"我十分希望能夠進入騰訊,您那邊可能也知道我在去年就投過咱們公司,當(dāng)時確實是因為自己的能力達不到咱們公司的要求,不過這一年我一直都在努力提升自己,這次面試才走到了現(xiàn)在,就算這次我或許沒有達到要求,沒有機會到咱們公司實習(xí),但是我認為只要我一直努力早晚能夠達到咱們公司的要求."
到這里HR就笑了,說她沒有什么問題要問我的了,offer的話后面有人會聯(lián)系你.
我當(dāng)時都驚了,我看其它大佬的面經(jīng)的時候都是回去等通知,沒有直接說offer的事情的.
我也不知道,在面試中我哪一點吸引了面試官,不過最終還是如愿以償?shù)啬玫搅薿ffer
結(jié)語
這里的話我想說,面試的話很多時候最后我們都可能拿不到我們心儀的offer,面試確實是一個比較看運氣的事情
就算面試結(jié)果不太理想,但這確實是一個發(fā)現(xiàn)自己不足的很好的機會.
我從今年的3月開始準備面試,期間面了 阿里,京東,字節(jié)跳動,美團,騰訊(offer之前面的一次騰訊三面被刷)
就通過這些面試找到自己知識點的不足,然后面完過后就去查,彌補這些不足,最后終于如愿.
感謝昨天的自己的努力,不忘初心,方得始終.
希望大家都能拿到自己心儀公司的offer.
相關(guān)文章
- 這篇文章主要介紹了第一次前端面試心得分享,很多朋友在面試過程真的不知所措,今天小編就把我的心得分享出來,需要的朋友可以參考下2020-02-20
- 這篇文章主要介紹了Web前端面試筆試題總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-02-18
- 這篇文章主要介紹了2019前端面試系列之JS高頻手寫代碼題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-01-18
- 這篇文章主要介紹了80道前端面試經(jīng)典選擇題匯總,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)2020-01-08
- 這篇文章主要介紹了面試官常問的web前端問題大全,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-03
- 這篇文章主要介紹了前端十幾道含答案的大廠面試題總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-01-02
- 這篇文章主要介紹了超實用前端面試題整理(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-12-19
- 這篇文章主要介紹了2020最新Web前端經(jīng)典面試試題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-19
- 這篇文章主要介紹了記一次騰訊社招前端面試,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-12-03
2019年最新Web前端經(jīng)典面試試題與參考答案總結(jié)
這篇文章主要介紹了2019年最新Web前端經(jīng)典面試試題與參考答案.總結(jié)分析了Web前端面試過程中比較常見的各種概念、知識點、常見問題與參考答案,需要的朋友可以參考下2019-12-02