先介紹一下本身的狀況吧javascript
軟件測試
專業畢業年末因爲種種緣由想換一份工做,但因爲太忙,沒認真搞簡歷,也沒怎麼複習基礎,致使不少原本會的都沒敢往簡歷上寫。因而寫了一個簡版的簡歷掛在Boss直聘上,準備年過完再認真籌備這件事情。css
令我意外的是,一週竟收到八條阿里的面試邀請,看了網上前輩的一些心得:阿里三個月內只能應聘一次
,因而選了兩個心儀的部門投了簡歷,其中一個內推完沒下文,多半是學歷沒過😂html
自我介紹前端
balabala....,很久沒面試過,自我介紹竟然顯得很緊張,說了一些簡歷上沒有的東西,好比以前寫PHP、用Swoole作智能硬件通信啊之類,以及爲何寫前端啊,balabala...java
會ES6嗎,什麼是解構賦值? 直接舉了個例子mysql
const { a, b, c } = { a: 'aa', b: 'bb', c: 'cc' }
複製代碼
說下React的生命週期react
實例化ios
存在期面試
銷燬時redis
React方法中,調用事件處理方法(裏面要用到this)怎麼調用
this.foo.bind(this)
複製代碼
接問題4,爲何須要bind(this)
做用域的問題,foo() {} 與 const foo = () => {}裏面的this做用域不同,foo() {}裏面使用外部成員,須要bind(this),直接使用的this做用域僅在該方法內部
接問題4,能不能不使用bind(this)
lodash-decorators
裏面的Bind裝飾器裝飾器的原理
語法糖,實則調用Object.defineProperty,能夠添加、修改對象屬性
本身實現一個通用方法,作到不須要使用bind與裝飾器達到問題4的目的
柯里化 + apply,詳細過程不贅述...
閉包裏面的this做用域
內部函數的this指向外部包裹它的做用域
React render作了什麼
主要分首次渲染與更新來講,說的比較多,不贅述,網上react源碼分析一大堆...這期間順帶提到了利用redux-saga在shouldComponentUpdate時所作優化,以及本身的開源項目
說說xss與csrf,怎麼防止
Ajax的原理,你日常怎麼發送網絡請求的
isomorphic-fetch
發送請求,若是隻是客戶端發送請求時,使用axios
有三個元素,第一個與第三個寬度都爲100px,中間元素佔用剩餘空間,怎麼作到中間元素隨着瀏覽器寬度的變化而變化
<div className="main">
<div className="div-1"></div>
<div className="div-2"></div>
<div className="div-3"></div>
<style jsx>{` .main { width: 100vw; height: 100vh; display: flex; justify-content: space-around; } .div-1,.div-3 { min-width: 100px; height: 100vh; } .div-2 { width: 100%; height: 100vh; } `}</style>
</div>
複製代碼
講講box-sizing
作項目有沒有遇到什麼坑
最近作的這些項目項目也沒有遇到什麼大坑,印象很深的是以前實習搭建EKL中央日誌服務器的時候,被一個時間問題坑了一天,EKL收集的日誌時間與服務器的時間(時區)不一致,致使收集不到日誌
你以爲搭建EKL有那些難點
相關服務器搭建卻是沒什麼難點,我以爲使用EKL最麻煩的是寫grok match正則,匹配不一樣的日誌,須要不一樣的正則,不過寫到後面也習慣了,還OK
講講印象比較深的後端項目
以前實習時,作智能硬件項目,是一個寵物智能項圈,能記錄寵物的運動數據,硬件每隔一段時間會發送大量的陀螺儀與加速計數據到服務端,經過swoole創建tcp,接受二進制數據,而後將接受到的數據經過map reduce處理...
停一下,你講處處理大數據用map reduce,那爲何不用redis之類的
我我的以爲應該是當時團隊比較小,須要一個快速且簡單的解決方案,因此map reduce正是咱們所須要的,redis我也知道,可使用zset,求和很方便
說說mysql的事務
BEGIN、事務回滾ROLLBACK、事務提交COMMIT
說說你最滿意的業務項目
說了一個next.js的觸屏版同構項目,項目中使用到了prefech預先加載,以及next的動態加載,體驗至關的快,用nprogress展現滾動條,在next.js尚未發佈5.0版本/解決style-jsx中使用less、sass問題的時候,本身用postcss解決了,整個項目使用flexible + rem作響應式,本身改寫了video-react組件,兼容觸屏版,還有一些自認爲不錯的業務思想不贅述...
說說rem與em的區別
rem是根據根的font-size變化,em是根據父級的font-size變化
一面面試的時候時不時順帶表現一下本身,根據面試官的問題回答時順帶提了一下看過的開源項目,好比react(redner過程)、next(postcss解決style-jsx編寫less、isomorphic-fetch的使用等)、ant pro(lodash-decorators的使用)等
1.實現destructuringArray方法,達到以下效果
// destructuringArray( [1,[2,4],3], "[a,[b],c]" );
// result
// { a:1, b:2, c:3 }
複製代碼
2.須要經過threshold參數控制調用函數頻率
const yourFunction = function(func, threshold) {
// 請實現
}
const triggerSearch = yourFunction((val) => {
const {
onSearch
} = this.props
onSearch(val)
}, 300)
triggerSearch(searchText)
複製代碼
個人答案(能夠先不看,本身現實一下)
// 第一題
const targetArray = [1, [2, 3], 4];
const formater = "[a, [b], c]";
const formaterArray = ['a', ['b'], 'c'];
const destructuringArray = (values, keys) => {
try {
const obj = {};
if (typeof keys === 'string') {
keys = JSON.parse(keys.replace(/\w+/g, '"$&"'));
}
const iterate = (values, keys) =>
keys.forEach((key, i) => {
if(Array.isArray(key)) iterate(values[i], key)
else obj[key] = values[i]
})
iterate(values, keys)
return obj;
} catch (e) {
console.error(e.message);
}
}
console.dir(destructuringArray(targetArray,formater));
console.dir(destructuringArray(targetArray,formaterArray));
// 第二題
const yourFunction = function(func, threshold) {
let timeOut;
return function() {
if (!timeOut) {
timeOut = setTimeout(() => {
timeOut = null;
func.apply(this, arguments)
}, threshold)
}
}
}
const triggerSearch = yourFunction((val) => {
const {
onSearch
} = this.props
onSearch(val)
}, 300)
triggerSearch(searchText)
複製代碼
歡迎小夥伴們在評論區貼上本身的答案哦😀
主要談到本身所開源的兩個前端項目,這固然是我最喜歡的地方,遇到本身喜歡的東西根本停不下來,balabala說了太多(生活中個人話不多,屬於比較內向的那種,哈哈),還有一些職業發展啊、我的想法啊之類的...
遺憾的是三面掛了,給的反饋是話太多,說不到重點
。其實如今回想起來,我的以爲三面應該是我表現最好的一面,當時面完以爲穩過了,哈哈😀。由於談的全是我瞭解的東西,隨便一個問題,我均可以說上幾分鐘,但也正是這個緣由致使了面試失敗,說的太多也不必定是好事,有時候須要簡潔,直擊重點。
很幸運一個專科生以半年的前端經驗能得到阿里的面試機會,結局雖掛了,但也不是由於技術緣由,心裏仍是很欣慰的,還有阿里的面試官都很nice,面完也會及時的反饋,當你緊張的時候會給你留時間調整,結局沒過到也會給建議與鼓勵。最後各位程序猿看官,豐富技術的同時不要忘了提高本身的表達能力哦😝