学前端一年多了,本着想在暑假找一个实习,而后开始投简历,出乎意料的字节跳动简历筛过了..上个礼拜五下午四面完一直没音信了..大几率是凉了..因此记念一下第一次被大厂面..本文有些拈轻怕重,一些比较基础的就一笔带过了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