字节一面凉经
一开始调试设备调了一万年,更紧张了。。。
面试开始
- 自我介绍 blabla
- 项目介绍
- 讲了一下将请求函数封装成Promise。
- sqlite,封装了四个操作数据库的函数。
- jwt,在后面的每次请求中带上这个token。
- 简述一下Promise原理
- 答:把Promise的实现基本都说了,除了一个怎么将值传递下去之外。
- 状态之间可以相互转换吗?
- 答:不可以,状态只能从PENDING转到另外两个状态,转化不可逆,后面两种状态之间不能相互转化
- 怎么实现Promise的链式调用?
- 答:在then中return一个新的Promise对象。
- 项目中还用到了什么别的东西吗?
- 答:长列表优化,前端进行了分页。
- 问:为什么不让后端做分页?
- 答:因为这些消息存在了本地数据库中。
- 问:前端怎么实现这个分页的?
- 答:从数据库中把所有的数据存到本地的一个数组中,然后创建一个空数组,这个空数组是用来渲染到页面中的,在后面的每次触底事件中,从前面的数组中pop一部分出来push到后一个数组中去。
一直到这里都感觉非常棒的,面试官听起来也还挺满意的。
既然到这了,那说一下怎么判断空数组(好像是这样的,反正后来就开始说相等操作符了)
- 答:可以使用
[] == false
或者[].length == 0
判断是否为空数组(然后我给自己挖了个坑) - (沉默)
- 答:还有的话就是
!![]
结果是true,但是[] == false的,它们两个的机制不一样 - (开始搞事)问:那么你可以说一下他们有什么不同吗?
- (想:好像是一个啥toString啥valueOf,顺序不记得了,就随便说了一个)答:应该是先调用valueOf吧?
- 问:你确定?
- 答:应该是吧。。
- 问: 好,那你看一下下面这两个:
- null == undefined
- [] == 0
- (第一个没什么悬念,第二个应该也是true吧)答: 两个都是true。
- 问:那分别是为什么呢?它们底层的原理是怎么样的?
- 答:(实际上慌得一批了已经,感觉踩雷了,这一块一直没记下来)第一个没什么好说的吧,高程上就是这么写的,第二个的话,因为有一个操作数是数字的情况下,会尽力将另一个数也转化成数字进行比较。
- 问:那么会调用数组的哪个方法进行转化呢?
- 答:不是很确定,应该是toString吧(实际上应该是先调用valueOf,再调用toString)
- 问:好吧,那再看看下面这几个:
- [0] == 0
- 0 == {}
- [] == {}
- (然后我彻底把自己绕晕了,哔哩吧啦扯了挺久,然后面试官跳过了这个问题。)
- 答:可以使用
for in、Object.keys、Object.getOwnPropertyNames的区别
- 答:for in遍历的是可枚举的属性,Object.keys能遍历所有的属性(包括原型链上的),Object.getOwnPropertyNames不能读到原型链上的属性。
- 问:Object.keys能遍历到不可枚举的属性吗?
- 答:不是很清楚
到这里我心态已经有点崩了,,,但是感觉还能撑。然后开始问CSS了,本来听她说要问CSS了还松了口气,但是我后来发现,最近的两三周都在看JS,完全忘了CSS的内容了。(所以复习一定不要片面,否则之前会的现在都不会了!)
你们在项目中有使用什么ui框架吗?
- 答:并没有,我们只是使用了uniapp给的一些组件进行开发。
我看你开发的是一个移动端的app,那能说一下rem原理吗?
- 答:rem是根据body的属性计算的。
- 问:body的哪个属性?
- 答:font-size
- 问:那它有什么替代的方案吗?
- 答:uniapp中可以用rpx(尬笑)
- 问:还有吗?
- 答:vh那一套吗?(其实她就是想问一下响应式布局啥的,我一直get不到点)
- 问:那你说说那几个吧。
- 答:vh是视口的高度,vw是视口宽度,vmin是二者最小值,vmax是二者最大值。
说一下rem和em的区别
- 答:rem是相对body的font-size属性,em是相对父元素的font-size
position有多少种取值?
- 答:
relative
、static
、absolute
、sticky
、fixed
(太紧张了,一下没想起来了fixed,从这里开始心态彻底炸了) - 问:说一下他们的区别和用法
- 答:说了一下
relative
、absolute
和static
因为记不起来fixed,然后就开始瞎掰。
- 答:
实现垂直居中和水平居中
- 牛客的IDE起飞,没有html,然后我完全没有办法调试,就硬是拿js调试器打了个html,可太难了
- 然后我用flex实现了一下,没问题
- 问:可以用别的方法实现吗。
- 于是乎我又写了个margin:0 auto;后面就卡住了,真的就很奇怪,把position完全忘了,之前用得那么溜的。
说一下v-model原理
- 答:v-model是一个语法糖,是@input和v-bind的结合(刚好昨晚看了一下,稍微捡回一点信心)
- 问:是v-bind了哪个值呢?
- 答:既然是input组件,那就是value了吧。
说一下兄弟组件之间的通信
- 答:兄弟组件吗?是
$emit()
和on()
吗? - 问:应该不行吧,你再想想?
- 我实在不知道了,没做过,我之前兄弟组件之间传值都是先从子组件传到父组件,父组件再到子组件的(紧张起来,连笨方法都忘了给人家说)
- 答:兄弟组件吗?是
到这里人已经彻底傻了,心态崩完了。然后到了传说中字节面试最难的算法了
- 两个算法:
- 中缀表达式 转 后缀表达式(这个,emm,我能说我啥也不会吗,我都没听过这两个名词)
- 大数相加(这个基本思路都对了,但是好像中间有些什么没有调出来,反正最后结果没出来,面试官说算了,就差不多了吧)
- 然后就是反问了,这个时候我已经无欲无求了,根本脑子是乱的,就问了一下部门大概负责什么的,啥时候有结果
好了,一面凉经就完了,希望大家能好好学基础,包括计算机专业的基础课还有前端的基础啥的,准备一定要全方位,就没啥了,其实面试的知识点都还好,主要是没记住很难受。毕竟第一次面试,凉也是意料之中的,吸取教训,下次加油!
全部评论
(16) 回帖