大家好,我是若川。最近组织了源码共读活动《1个月,200+人,一起读了4周源码》,已经有超50+人提交了笔记,群里已经有超1200人,感兴趣的可以点此链接扫码加我微信 ruochuan12
本文经作者@lxcan 授权转载,未经授权请勿直接转载。
原文标题:《三年经验前端社招——慧择网》
原文链接:https://zhuanlan.zhihu.com/p/405690519
文末点击阅读原文
直达
一面
1、自我介绍
2、以往公司介绍,项目介绍【描述】
3、算法题,有n阶楼梯,一次可以走1步或2步,问有多少种走法。比如有3阶,可以 111 12 21 总共3种走法【编程】
考点:斐波那契数列解法
分析:
(1)n=0和n=1 的时候,没有其他选择,F(0)=0;F(1)=1
(2)n>=2 的时候就变复杂起来,这时候可以操作的步骤也就2种,也就是走1步 (n-1) 与走2步 (n-2)
所以可以得到 F(n) = F(n-1) + F(n-2) ,从当前状态转为下一状态的通用算法即可。
(3)验证,使用2以上的数字验证几次
实现方式:
(1)递归
(2)循环迭代
(3)动态规划(递归+缓存)
4、JS数据类型有哪些?它们在内存里面的模型是怎样的,堆和栈有什么区别?【描述】
原始数据类型,存放在 栈内存中
number string boolean null undefined symbol
引用数据类型,存放在 堆内存中
object (细分为 object array function)
栈内存
存储原始数据类型
按值访问
存储的值大小固定
由系统自动分配内存空间
空间小,运行效率高
先进后出,后进先出
堆内存
存储引用数据类型
按引用地址访问
存储的值大小不定,可动态调整
由代码进行指定分配
空间大,运行效率相对较低
无序存储,可根据引用直接获取
5、有三套样式,大中小,怎么实现样式切换?主题切换怎么做?【描述】【举例】
之前做过的主题切换思路:
(1)在 static 目录下新建一个 styles 文件夹,在 styles 下新建一个 theme.css 文件,将需要替换的 CSS 声明在此文件中
(2)新建 theme-colors.js,用于声明所有可选的主题,每种颜色都对应一个关键词如 'primaryBtn' 等,方便区分
(3)通过 ajax 获取 theme.css ,先将颜色值替换为关键词,比如将 '#67c23a' 替换为 'primaryBtn'
(4)把关键词再换回刚刚拿到的最新主题相应的颜色值,并在页面上添加 style 标签
6、页面响应式做过吗,实现思路?用几套代码实现的?【描述】
7、混合式app做过吗【描述】
8、React做过吗【描述】
9、最近在学什么技术?【描述】
Vue 3.0
React 基础用法
下阶段学习:
Node.js 全栈开发
泛客户端开发(uni-app、React Native、Flutter)
计算机基础、网络、数据结构、算法
10、往后的职业规划是怎样的?【描述】
11、你有什么问题要问我的?【描述】
二面
1、说一下JS原型【描述】
5条原型规则:
所有的引用类型(数组、对象、函数),都具有对象特性,即可自由扩展属性(除了"null")以外
所有的引用类型(数组、对象、函数),都有一个__proto__ (隐式原型)属性,属性值是一个普通的对象
所有的函数,都有一个 prototype (显式原型)属性,属性值也是一个普通的对象
所有的引用类型(数组、对象、函数),__proto__ 属性值指向它的构造函数的 prototype 属性值
当试图得到一个对象(引用类型)的某个属性时,如果这个对象本身没有这个属性,那么会去它的 __proto__(即它的构造函数的 prototype)中寻找
2、instanceof 原理,怎么实现的?【描述】【伪代码】
instanceof 可以正确的判断对象的类型,因为内部机制是通过判断 对象的原型链 中是不是能找到 类型的 prototype。
手写实现instanceof
function myInstanceof(left, right) {
var prototype = right.prototype;
left = left.__proto__;
while (true) {
if (left === null || left === undefined) return false;
if (left === prototype) return true;
left = left.__proto__;
}
}
console.log(myInstanceof(o1, M)); // true
console.log(myInstanceof(o1, Object)); // true
console.log(myInstanceof([1, 2], Array)); // true
console.log(myInstanceof({ a: 1 }, Array)); // false
实现分析:
首先获取右边参数 类型的显式原型
然后获得左边参数 对象的隐式原型
然后一直循环判断 对象的隐式原型 是否等于 类型的显式原型,直到 对象的隐式原型为 null,因为原型链最终为 null
3、项目使用的是 原生小程序 还是 uni-app 小程序【描述】
4、你说做过SEO优化,做了哪些优化?【描述】
5、vue3有哪些新特性,它做了什么优化【描述】
Vue 3.0 性能提升:(1)响应式系统升级
Vue.js 2.x 中响应式系统的核心是 Object.defineProperty
Vue.js 3.0 中使用 Proxy 对象重写了响应式系统
可以监听动态新增的属性
可以监听删除的属性
可以监听数组的索引和 length 属性
(2)编译优化
Vue.js 2.x 中通过标记静态根节点,优化 diff 过程
Vue.js 3.0 中标记和提升所有的静态节点,diff 的时候只需要对比动态节点内容
Fragments 片段,模板中可以直接放文本内容或同级标签(升级 vetur 插件)
静态节点提升到 render 函数外部,只在初始化时执行一次,再次render无需再次执行
Patch flag,标记动态节点(记录节点内容、节点属性),diff时跳过静态根节点 只需关心动态节点内容
缓存事件处理函数,减少了不必要的更新操作
(3)源码体积的优化
Vue.js 3.0 中移除了一些不常用的 API。例如:inline-template / filter 等
Tree-shaking
6、TypeScript 有了解吗?说下它的特性和优缺点【描述】
TypeScript 是 JavaScript 的一个超集(扩展集),就是在 JS 的基础上多出一些扩展特性,这些扩展特性包括:强大的类型系统、对 ES6+ 的良好支持。TS 最终会被编译为 JS 运行。
优点:
使用 TS 新特性开发项目,项目代码的健壮性增强,代码错误更早暴露。
编辑器支持情况良好,比如:VSCode,有很多智能提示,编码更准确,提升开发效率。
使用 TS 的强类型特性来开发项目,可以使得项目代码重构更牢靠。
使用 TS 的强类型特性来编写代码,可以减少很多不必要的类型判断。
TS 最终会被编译为 JS 运行,可以将 ES6+ 编译为ES5/ES3,兼容性好。
TS 是渐进式的,完全可以使用 JS 编写代码,可以将新特性慢慢应用到项目中。
缺点:
引入了很多概念和新语法,有一定学习成本,对于一些小项目会增加开发成本
开发过程中遇到问题,可能相关 TS 的网上资料相比 JS 会少一些,需要花一些精力查找资料去解决问题
7、如果让你接手react项目,是否能快速上手【描述】
最后
慧择网是国内知名互联网保险产品与服务平台,早九晚六双休,听说不加班,地点在南山区粤海路动漫园。这家面试难度不大,好像是急招要求快速到岗,最后HR面谈薪时,公司给不到期望的薪资,那就拜拜~继续加油
往期回顾:
天生我材必有用,千金散尽还复来
最近组建了一个湖南人的前端交流群,如果你是湖南人可以加我微信 ruochuan12 私信 湖南 拉你进群。
推荐阅读
················· 若川简介 ·················
你好,我是若川,毕业于江西高校。现在是一名前端开发“工程师”。写有《学习源码整体架构系列
从2014年起,每年都会写一篇年度总结,已经写了7篇,点击查看年度总结。
同时,最近组织了源码共读活动
识别上方二维码加我微信、拉你进源码共读群
今日话题
略。欢迎分享、收藏、点赞、在看我的公众号文章~