base成都 卫翎科技 前端实习面经
卫翎科技
投递渠道: BOSS 直聘
时间线
- 2023-11-23 上午 hr 发起打招呼,遂投递简历,下午约面
- 2023-11-27 一面
- 2023-11-29 上午约二面, 下午二面
一面
- 自我介绍
- 字节青训项目中最有挑战或者收获的点
- lint-staged 的主要作用是什么(搭配 husky 在 commit 时进行代码检查,面试官补充说只对暂存区的代码进行检查)
- Vuex 与 Pinia 的区别 💤 (以为掌握了但答得并不好!)
- 为什么需要对 axios 进行二次封装
- 虚拟滚动是如何实现的
- 项目中的防抖技术做了什么
- CSS 中 px,rem,em 分别是什么
- 水平垂直居中的实现方式
- position 有哪些属性, absolute 是相对于谁的
- 盒模型
- 隐藏一个元素的方式: display(回流) / visibility(重绘) / opacity(硬件加速)
- flex 布局设置元素间隙的方式
gap
- JavaScript 中判断数据类型的方法
- this 的指向???完全不知道怎么说,让我看代码讲还可以
- 改变 this 指向的方法 -> call 与 apply 的区别
- 箭头函数有 this 吗?
- 讲讲原型和原型链
- 讲讲 Event Loop
- script 标签会阻塞 DOM 的解析吗 -> 有什么方式可以解决这个问题
- 讲讲你对 Promise 的理解 Promise 三种状态: pending / fulfilled / rejected链式调用是如何实现的: then 方法返回的是一个新的 Promise 对象
- 数据类型的隐式转换 发生时机:算术运算符 / 比较运算符 / 逻辑运算符 / if 语句"1" + 1 的结果("11")"2" - 1 的结果(1)
看代码说结果:
const promise = new Promise((resolve, reject) => { resolve("success1"); reject("error"); resolve("success2"); }); promise .then((res) => { console.log("then", res); }) .catch((err) => { console.log("catch", err); }); // then success1 // Promise 状态改变后就不能再改变,虽然后面的代码还能继续执行.
var name = "World"; (function () { if (typeof name === "undefined") { var name = "Jack"; console.log("Goodbye " + name); } else { console.log("Hello " + name); } })(); // Goodbye Jack // var 变量提升: 只提升定义不提升赋值,并且之提升到所在的作用域的顶部
function f1() { console.time("time span"); } function f2() { console.timeEnd("time span"); } setTimeout(f1, 100); setTimeout(f2, 200); function waitForMs(n) { var now = Date.now(); while (Date.now() - now < n) {} } waitForMs(500); // 在执行 setTimeout(f1, 100) 后会开启一个定时器,并在 100ms 后将 f1 放入宏任务队列, 但是回调函数 f1 并不会立即执行,而是等主线程空闲才会执行. /** * 上述代码的执行过程是: * 1. 执行 setTimeout(f1, 100) * 2. 执行 setTimeout(f2, 200) * 3. 执行 waitForMs(500); * 4. 由于 waitForMs(500) 会阻塞主线程 500ms, 此时 f1 与 f2 已经被放入宏任务队列中会被取出并且立即执行,所以 time span 实际上是执行带来的延迟而非定时器的延迟. */
二面
- 为什么选前端
- 职业规划,对前端的发展方向有了解吗?
- Github 活跃一般是在看哪些内容?
- 介绍一下项目中最有挑战的点
- 对这份工作有什么期待
- 有没有关注 AI 相关的内容
emmm,其实就是氛围很轻松的闲聊。
结束后 hr 约线下详谈。
hr 姐姐人真的超级好!!!!!!!