前言
下午小编在正在实验室坐着,突然收到了一个电话,一开始小编还以为是外卖,结果是通知小编去面试的。约了几个时间,感觉都不是很合适,那择日不如撞日,就下午吧。于是小编下午就马不停蹄地赶到了公司面试。下面是面试过程的分享,欢迎各位大佬在评论区指点迷津。
面试过程
1. 自我介绍一下
2. 简单介绍一下你的项目
3. 你平时是用Vue3还是Vue2比较多,能聊聊他们的区别吗?
答:平时我自己使用比较多的是Vue3,Vue2和Vue3的不同:
- 编写代码的方式不同,Vue3是采用组合式编程,Vue2是选项式编程
- 生命周期不同,Vue3采用setup函数代替了Vue2的前俩个生命周期
- 数据的响应原理不同,Vue2采用的是defineProperty,Vue3采用的是proxy
- diff算法不一样
还有一些不同,小编当时没有一一举出( Vue3更好地支持typescript等)
4. 那你能聊一下diff算法吗?
答:diff算法是一种为了减少渲染代价的算法,当一个DOM元素改变时,浏览器会先创建一颗虚拟DOM,然后计算虚拟DOM和真实DOM的差别,找出最小改动的方案,再把虚拟DOM应用到真实DOM。
5. 平时有做过移动端适配吗?
答: 有的,做移动端适配有以下几个方案:
- 媒体查询(Media Queries)
- 相对单位
- 弹性布局
追问:那你知道css中有哪几个常见的单位?
答: px(绝对单位),相对单位:rem,em(根据根元素字体的大小来设置),vw vh(按照视窗的百分比大小),%(相对于父元素的大小)
6. 平时有接触es6新语法中,比如...展开运算符
答:有的,...用于将迭代数据类型展开。常用于复制数组,浅拷贝,传递参数。
7.那你谈一下浅拷贝和深拷贝的区别
答: 在我们复制对象的时候,有些对象里面可能还包着一个对象,当使用简单的浅拷贝时,如因为对象深层其实引用的是同一片地址,所以当改变原对象时,新对象也会改变,而深拷贝则不会。
追问: 那说一下如何实现深拷贝
答: 采用第三方库(Lodash) , 利用JSON.stringfly()和JSON.parse(),
递归实现(这点当时小编突然忘记了,这里复习一下)
function deepClone(fn){
if(obj === null || typeof object !== 'object') return obj
const clone = Array.isArray(obj)?[]:{}
for(let key in obj){
if(obj.hasOwnProperty(key)){
clone[key] = deepClone(obj[key])
}
}
return clone
}
8. 你平时用js写逻辑多吗?你能列举一下js中数组的常用方法吗?
答:平时基本上用js写代码 js中数组常用的方法有push,pop,reduce,filter,map,IndexOf等等,太多了这里就不一一列举。
9.那你有了解过js中的原型链吗?
答: 这里小编现场表达得不是很清楚,重新总结了一下:
每一个对象都有一个prototype属性(通过__proto__)指向其原型对象,当对象访问属性时,若自身不存在,会沿 __proto__ 链向上查找,直到 Object.prototype(顶端为 null)。
追问: 那你知道子类怎么继承父类吗? 答: 1. 通过extends 2. 通过直接指定其的原型对象
10.说一下闭包
闭包是指内部函数访问外部函数的变量。当一个函数内部还有一个函数的时候,内部函数就可以访问到外部函数的变量,此时外部函数的变量并不会被回收。
缺陷:由于变量没有被回收容易导致内存泄漏。 优点:可以防止全局变量污染私有属性
11. 平时写完的项目有进行打包部署吗?
小编确实没有过打包部署到服务器上的经历,只能如实回答
12. 平时的项目有使用git进行托管是吗,讲一下你们的工作流
答: 因为合作的人数比较少,所以我们采用的是"集中式工作流",即把代码直接push到master主分支。
13. 能讲一下你小程序这个项目遇到的痛点吗?你是怎么解决的?
答: 遇到最麻烦的点就是sass和ui组件库不兼容,当时一直报错,问ai也找不到具体原因。最后在上网查找到有大佬有相似经历,后才发现问题,后面是回退版本解决。
还有一些点记得不是很清楚了,后面就是让我反问(公司的技术栈,简历有什么需要修改的,被吐槽到简历内容太少),再后面就是纯聊天了,问我到岗时间,平时课程压力之类的
总结
当时面完感觉还是不错的,问的都很基础,但感觉当时回答不是很清楚,应该多思考一下。这是小编第一次线下的面试,公司环境什么地感觉也不错,希望过两天能有结果。附一张当时拍的面试图片。
创作不易,礼貌集赞