朋友推薦去平安子公司一帳通去面試,沒有初面,直接進入二面和三面,蠻簡單的,過了,但放棄入職。下面談談面試題吧。
關於技術性的題目
1.document.ready和onload的區別?
頁面載入完成有兩種事件,一是ready,表示文件結構已經載入完成(不包含圖片等非文字媒體檔案),二是onload,指示頁 麵包含圖片等檔案在內的所有元素都載入完成。(可以說:ready 在onload 前載入!!!)
我的理解: 一般樣式控制的,比如圖片大小控制放在onload 裡面載入;
而:jS事件觸發的方法,可以在ready 裡面載入;
2.關於一個變數提升的題目
function a(){}
var a
console.log(typeof a) //function複製程式碼
還有就是介紹專案經驗巴拉巴拉。。。還問我接收不接收996,瞬間心裡一萬cnm,當他問我的時候,我覺得是壓力測試,我就說 如果正常的是996,是不接收的,如果專案急,接收加班和週六趕專案。。。說了下平安薪資體系,年終獎4.8個月薪資,百分之多少能拿到吧,一般人都能拿到,以上是二面,三面是專案經理,也是問了些專案,根據自己說的再提一些問題。。。很好應付,我的體驗是,只要感到專案經理不是搞前端的,面試立場自己完全hold住。。。然後就結束啦,哈哈哈。。。接下來就是人事打電話,準備好多東西,薪資證明,簡歷要輸入平安簡歷庫中心,還有iq,eq什麼測試,到這一步我就沒去做,好麻煩,都沒告訴我給我多少薪資,人事說經過以上步驟才能定薪,後來果斷放棄。。。沒想到好事發生了,我司給我漲薪了。。。
下面是平安銀行的面試,一個朋友的筆試題(直接貼圖,哈哈哈)
答案
1.程式設計題,讓我說直接jion(',')變成陣列,然後再split(','),哈哈
但是要求要遞迴,遞迴嘛,也簡單喲,主要考察是不是陣列,其次是遞迴結束條件
精簡版
const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v)));複製程式碼
2.
更精簡的實現
const groupBy = (arr, fn) =>
arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => {
acc[val] = (acc[val] || []).concat(arr[i]);
return acc;
}, {});複製程式碼
plus:演算法精簡版推薦看github.com/Chalarangel… 蠻不錯的
3.4.圖形自己腦補吧,哈哈哈
下面是車輪互聯的筆試題(還是我朋友面的)
1.物理解析度是硬體所支援的,邏輯解析度是軟體可以達到的,互轉的話乘以畫素倍率
在iphone3gs的時候,邏輯解析度是320*480,物理解析度也是320*480
iphone4出了之後,邏輯解析度和3gs一樣是320*480,顯示的內容是一樣多的,但是物理解析度變成了640*960,原來在3gs的一個畫素內容,在iphone4上則填充了4個畫素,因此雖然內容顯示還是一樣多,但是iphone4s的螢幕精細度比3gs高了2倍,畫素倍率是2.
iphone5/5s/SE邏輯解析度是320*568,和iphone4相比,邏輯解析度寬度不變,高度增加了,所以相比iphone4,寬度內容顯示一樣多,但是高度內容增加。而物理解析度是640*1136,畫素倍率和iphone4/4s一樣,是2倍
iphone6的邏輯解析度是375*667,比iphone4/4s/5/5s/SE邏輯解析度都要大,所以顯示的內容更多。物理解析度是750*1334,所以和上邊談到的機型一樣,仍然是2倍的畫素倍率
iphone6plus邏輯解析度是414*736,物理解析度是1080*1920,畫素倍率約等於2.6. 渲染畫素是1242*2208。做設計圖的時候,也是假設1242*2208的物理解析度(3的倍率)來做圖的,系統會把圖片壓縮到1080*1920。所以6plus做設計圖的尺寸1242*2208是基於假設,實際物理解析度是1080*1920。據說是因為產能還有耗電的考慮,以後效能提升,也許會直接用1242*22082. BFC(Block formatting context)直譯為"塊級格式化上下文"。它是一個獨立的渲染區域,只有Block-level box參與, 它規定了內部的Block-level Box如何佈局,並且與這個區域外部毫不相干。
BFC佈局規則:
- 內部的Box會在垂直方向,一個接一個地放置。
- Box垂直方向的距離由margin決定。屬於同一個BFC的兩個相鄰Box的margin會發生重疊
- 每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對於從左往右的格式化,否則相反)。即使存在浮動也是如此。
- BFC的區域不會與float box重疊。
- BFC就是頁面上的一個隔離的獨立容器,容器裡面的子元素不會影響到外面的元素。反之也如此。
- 計算BFC的高度時,浮動元素也參與計算
哪些元素會生成BFC:
- 根元素
- float屬性不為none
- position為absolute或fixed
- display為inline-block, table-cell, table-caption, flex, inline-flex
- overflow不為visible
3.同源是指,域名,協議,埠相同,三者有一個不同,則為跨域
解決方案:
node代理,具體自己起個node服務,在node中轉發來自瀏覽器的請求,node服務和瀏覽器請求要同源,然後轉發攜帶具體引數,cookie...,轉發到後端的跨域介面,轉發庫可以用axios,支援在node,和瀏覽器都可以使用(具體實現可以參照github)。
nginx配置代理(基礎配置,可以參照我之前寫的文章)
在react,vue中可以用webpack-dev-server配置代理
跨域資源共享cors,後端設定Access-Control-Allow-Origin:*
jsonp
。。。其他感覺現實開發中,並不是很實用
4.var reg = /^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}$/
5.
三步
1、找基準(一般是以中間項為基準)
2、遍歷陣列,小於基準的放在left,大於基準的放在right
3、遞迴
function quickSort(arr){
//如果陣列<=1,則直接返回
if(arr.length<=1){return arr;}
var pivotIndex=Math.floor(arr.length/2);
//找基準,並把基準從原陣列刪除
var pivot=arr.splice(pivotIndex,1)[0];
//定義左右陣列
var left=[];
var right=[];
//比基準小的放在left,比基準大的放在right
for(var i=0;i<arr.length;i++){
if(arr[i]<=pivot){
left.push(arr[i]);
}
else{
right.push(arr[i]);
}
}
//遞迴
return quickSort(left).concat([pivot],quickSort(right));
}
複製程式碼
6. 1.最高優先順序是 (直接在標籤中的設定樣式,假設級別為1000)<div style="color:Red;"></div>
2.次優先順序是(ID選擇器 ,假設級別為100) #myDiv{color:Red;}
3.其次優先順序是(類選擇器,假設級別為10) .divClass{color:Red;}
4.最後優先順序是 (標籤選擇器,假設級別是 1) div{color:Red;}
5.那麼後代選擇器的優先順序就可以計算了啊
比如 .divClass span { color:Red;} 優先順序別就是:10+1=11複製程式碼
7.。。。
下次更新剩餘題目答案。。。
總結
現在面試,小公司一般問框架和看你個人的學習能力,比如我公司,我一般看他的學習和研究能力,大公司一般看基礎能力,我沒怎麼面過,不過網上很多都有文章參考。想要面試成功,自己要有紮實基礎,業務能力,當然表達也很重要,個人的研究喜歡編碼,一些公司也很看重。