學前端一年多了,本着想在暑假找一個實習,而後開始投簡歷,出乎意料的字節跳動簡歷篩過了..上個禮拜五下午四面完一直沒音信了..大機率是涼了..因此記念一下第一次被大廠面..本文有些拈輕怕重,一些比較基礎的就一筆帶過了css
一面是一個小姐姐面的,一面都是考察的一些基礎,主要就是看本身簡歷上寫了什麼而後挑着問..前端
上來先讓寫了兩道題vue
this
指向而後判斷輸出什麼,大概就是對象裏有方法,而後各類調用,這樣的面試題也不少了..我也沒具體記這個..回答的還算ok給定一段英文,統計哪個字母出現的頻率最高,出現了幾回?
Youth means a temperamental predominance of courage over timidity of the appetite for adventure over the love of ease
複製代碼
str = str.split(' ').join('')
map
的數據結構, 遍歷字符串,挨個存,若是不存在就存進去,若是存在就更新值+1, 這樣創建了一個統計的映射關係..let map = new Map()
for(let i = 0 ; i < str.length ; i++){
if( map.has(str[i]) ){
map.set( str[i], map.get(str[i]) + 1 )
}else{
map.set( str[i], 1 )
}
}
複製代碼
entries()
遍歷一遍就能夠了..以後問了一些常規的,好比什麼是原型,什麼是原型鏈,js的繼承方式有哪些,有什麼好處?而後她寫了一個構造函數,new了一個對象,各類問xx.prototype
,xx.__proto__
,xx.prototype.prototype
,xx.prototype.__proto__
是什麼,中間一度被搞暈了..不過面試官仍是給機會了,說你再好好想一想,而後最後理清楚了webpack
new
操做符都作了什麼事情?Object.create(obj)
呢?ios
new
: 說了新生成一個對象,而後鏈接到構造函數的原型上,而後綁定this,最後返回新對象Object.create(obj)
: 說了 和new
不一樣的是,他會先生成一個空的中間對象,而後把傳進去的obj掛到那個空的中間對象的原型上,最後返回這個新生成的空對象,這也就是爲何繼承中, 選擇它能夠改寫子類的constructor
而且保留父類的constructor
apply
,call
,bind
作了什麼事情?有什麼區別?git
apply
,call
看做一組,不一樣的區別是第參數不同,除了第一個須要改變的this
指向,call
接收的是多個參數, apply
是接收一個數組.至於bind
是建立一個新的函數,調用時,綁定this
而且返回我如今有好多個promise
我想讓他們並行操做,所有完成後再返回,怎麼作?github
promiose
上有一個all
方法,接收一個由promise
實例構成的數組對async/await
瞭解嗎?web
async
修飾的函數能夠用同步的方式書寫異步代碼,須要異步的時候用await
修飾內部語句..對http
緩存瞭解嗎?面試
expire
,etag
.cache-control
字段,(我其實真有點分不清..),反正腦子裏有什麼就說什麼..你剛纔說cache-control
,那no-store
和no-cache
有什麼區別?算法
no-store
纔是不進行任何緩存,可是no-cache
忘記了..而後就回答了這個忘記了..其實no-cache
是不緩存過時的資源仍是緩存機制..webpack
裏hash
,contenthash
,chunkhash
有什麼區別?
webpack
裏經過文件名後加hash
值的方式來控制緩存的版本,hash
是同一個項目共用同一個hash
,只要一個變了全部文件都變了,這確定不合理,chunkhash
是同一個入口的共用一個hash
,這樣也不太合理,由於不少文件時同一個入口,其中一個變了,都變了也不行,contenthash
纔是只管本身,只會改變發生變更的那一個webpack
如何作代碼拆分?
vue-router
中咱們會使用 import()
的方式若是要你設計一個vue
彈窗組件,你會怎麼設計?
positon:absolute;top:0;bottom:0;left:0;right:0;margin:auto;
或者flex
放中間,是彈框的部分,而後可使用slot
放置顯示的內容,設置一個close
按鈕,yse
,no
按鈕,利用this.$emit
向父組件傳遞v-if
的顯隱值和用戶點擊的true or false
值..而後一面就結束了..
上來先作自我介紹,而後簡單聊了聊..問我日常怎麼學習的,使用github
作什麼balabla
而後讓我設計並手寫一個組件
let obj = [
{
name: 'beijing',
children: [
{
name: 'chaoyang',
children: null
},
{
name: 'haidian',
children:null
}
]
},
{
name: 'shanxi',
children:[
{
name:'taiyuan',
children: null
},
{
name: 'jinzhong',
children: null
}
]
}
]
複製代碼
vue
,先寫了一個框架template
,script
,style
什麼的,而後定義了傳進來的props
,而後用 先寫A下拉框用v-for
生成option
模板,而後加點擊事件,獲取到點擊的哪一項,而後設置一個computed
屬性來監聽B下拉框的數據,好比點擊了北京
那一條,它的children
數組的數據用來生成B下拉框
,而後是設置一個button
,使用this.$emit
將選中的name
傳遞出去,有的具體vue語法細節忘了..詢問完面試官他說這個沒事,意思到了就行..最後還寫了一個怎麼使用的實例,是要給別人用的 ,具體怎麼使用呢?而後又寫了一個父組件,引入下拉框組件,傳值,自定義事件接受子組件的數據..現有一個抽獎活動, 一共100萬人參加, 獎品有1000個, 每一個人最多中將1份,且已知每人有一箇中將倍數, 爲整數, 最大200, 最小1,要求寫函數實現抽獎過程
複製代碼
我當時愣了有十分鐘...寫了刪刪了寫的...最後寫了一個不太好的版本
簡單說一下個人思路..就是m這個中獎倍數看成了復活權,m是多少就有從新抽獎的機會..最後寫了一個這樣的版本..哭了..仍是太菜了
緩存
...而後就是一直問一直問,,問到自閉了..固然其餘兩本書也是相似的問法..反轉鏈表
!!!我沒寫出來..當時腦子真是瓦特了,就陷入僵局了,連用一個數組保存一下里面的數據,而後再從新遍歷賦值這種不原地的笨辦法也沒寫出來..快被本身蠢死了..不說了,菜是原罪..下面說下怎麼解這道題吧..//三指針法
let reverseList = head => {
let curt = head;
let prev = null;
let next = null;
while (curt) {
next = curt.next;
curt.next = prev;
prev = curt;
curt = next;
}
return prev;
};
//遞歸
let reverseList2 = head => {
if (head === null) return null;
let prev;
if (head.next === null) {
return head;
}
prev = reverseList(head.next);
head.next.next = head;
head.next = null;
return prev;
};
複製代碼
base:北京
)!!!,orz