找內推人推的,第二天就收到了天貓部門內部面試,估計是想看看值不值得內推吧。
CSS
一上來問的技術問題就是css布局相關的:給三個div,實現排列在同一行的布局,我順口一答就是flex布局,然后面試官就問能不能說出十種方法,我最后說出了六種,算是勉強過關吧:flex、float、表格布局、定位布局、inline-block布局、inline布局+padding撐大(開始說設置width然后面試官提醒我inline元素設置不了width)。
css部分還問了個怎么把div旋轉90度,我回答了個rotate90度就沒了。
Js
接下來問js部分,我就記得這個題了
Object.prototype.a = 1
Function.prototype.b = 2
class A{}
var a = new A()
問a.a和a.b分別是什么?為什么?
這是一道典型考察原型鏈的題目,我就說class是Object的語法糖,實際上a的原型還是Object,所以a.a是1。
至于a.b,我當時認為new這個操作符還是調用了Function的,所以Object.proto會指向Function.prototype
我自己事后實驗看看他們的關系到底是什么樣的:
a.__proto__ === A.prototype
A.__proto__ === Function.prototype
A.prototype.__proto__ === Object.prototype
Function.prototype === Function.__proto__
Function.prototype === Object.__proto__
Function.prototype.__proto__ === Object.prototype
Function instanceof Object
Object instanceof Function
Function instanceof Object
Function instanceof Function
Object instanceof Object
把原型鏈的圖畫出來:
網絡
HTTP相關的知識肯定是必問的啦~這次問了經典的一個問題:在瀏覽器里輸入url到網頁展示給用戶的過程發生了什么?
我就不贅述了。
項目
問完這些基礎,就開始問項目了,聊著聊著,一個經典的問題拋出來:你在項目里印象里最難的部分是什么?最深刻的地方是什么?
我是這樣回答的:功能需求其實總是可以想辦法實現,現在google/stackoverflow/github等等這么方便,難的是優化功能和性能,然后就引出了面試官的一個問題:前端在和后端通信的時候因為網絡延遲的原因會造成用戶接受到的信息和發送過去的不一致的情況,比如百度搜索時搜索阿里巴巴四十大盜可能因為網絡不好返回給用戶的是阿里巴巴的搜索結果,這個問題問我怎么解決。
我就回答說前后端一起想辦法解決,比如后端給返回的信息添加一個標識用的ID,前端用節流/監控網絡超時(用rxjs的timer和throttle函數)。面試官說這樣用戶體驗會不好,于是我借機詢問面試官說:那您有什么好的建議嗎?
面試官很大方的給了我他的解決方案:全局維護一個自增id,前端請求后后端返回的數據帶上這個id,然后前端進行比較,如果一致則使用,否則丟棄。
其他
因為我是學安全的,就還順便問了web安全的問題:假如有一個找回密碼的接口,有發送短信的功能,如果一個人想刷接口,偽造十萬個手機號碼來惡意找回,怎么辦?
我:前后端都加個限制,前端一分鐘只能使用一次,后端一分鐘內返回的是一樣的驗證碼
他:但是短信照樣發啊,發短信要錢的啊
我:那就加驗證碼唄
他:圖片驗證碼嗎?一般都可以破解了
我:那就換成12306那種驗證碼或者拖拽式的
他:還有其他方法嗎?
我:這個場景能說清楚一下么?信號源是在那個人家里還是全國各地?
他:不知道
我:那就這樣:如果是他家就用后端監測手段封鎖IP,如果是全國的話就要求認證用戶身份
他:算你過吧。。。
最后我稍微問了下面試官在哪個部門,有什么產品,和技術架構,團隊氛圍,然后就愉快地結束了這次面試,這場面試算是今年秋招的開胃菜吧~