TIP
你的简历是自己工作的答卷,项目经历是你给面试官出的考纲。所以,我的面试一定是与我的简历、工作经历相关的,一些面试题并不一定适用于任何人,但是你可以从中了解他们考察的点,以及侧重点。基础知识可以查漏补缺。
前端工程师手册
30-seconds-of-interviews
front-end-interview-handbook
33-js-concepts
33-js-concepts 中国国情版
Git 飞行规则 看了这个常规的 git 应该没什么问题了
node-interview
Node.js-Troubleshooting-Guide Node.js 应用线上/线下故障、压测问题和性能调优指南手册
2018 大厂高级前端面试题汇总
Daily-Interview-Question 每天一道前端大厂面试题
https://github.com/forthealllight/blog/issues
想成为一个好的前端工程师,光有强大的编程能力是远远不够的,还有很多软知识需要知道。
学会与人沟通。
前端是一个承上启下的工作,在实际业务之中你除了要面对代码之外还需要对接 UI、产品、后端和其它前端有时候经常也会和运营啊广告销售打交道。因此怎么与其他角色很好的沟通也是一个非常重要的能力,代码写的再好,但不满足需求也是白搭。
需求明确再动手;发现问题尽快解决;意见分歧不要拒绝沟通;学会换位思考,不要总站在自己的角度想当然;
华尔街见闻面试题
请先 fork 本项目,之后按照题目规则,完成功能之后,请不要依赖任何外部框架。
- 页面中有一个 ul列表,里面有 20 个 li,和若干个其它元素:div,需要实现一个功能,点击任何一个 li都会 alert hello world,点击其它元素没反应
在线demo 注意:请在在线 demo 的基础上进行修改,
- 在第一题的基础上进行修改,现在点击任何 li需要 alert 它的位置,即 它的 index,第一个 li alert(1),第二个 alert(2),以此类推
- 需要实现一个功能,每过 1s,往列表的末端添加新的5 个li元素,并且li的内容是它的位置,并且当页面的 li 个数超过 50 个时,停止添加。
- 请根据设计稿,写成相应的静态页面,并且有如下要求
根据 api 拉取列表数据
可以使用 Vue、React 或者任何框架还原页面
需要自适应 适配 PC 和 Mobile
最后一个 item 不需要下划线
点击任何一个 item alert 它的 title
-
对 Node.js 的看法
算法
OSI 七层协议?
http 和 https 有什么区别?
https 使用上有什么注意点?
https 和 http 性能有什么区别?
常见的排序方法,你都熟悉那些?
说下希尔排序的过程?
希尔排序的时间复杂度和空间复杂度多少?( 希尔排序的时间复杂度是:O(nlogn)~ O(n2),平均时间复杂度大致是 O(n√n))
时间复杂度怎么推测的?
数据结构你对那些比较熟悉?
二叉树是什么啊?
平衡二叉树(AVL)有什么特点?
平衡二叉树(AVL)有什么好处?
平衡二叉树(AVL)和红黑树的区别?
平衡树的插入和删除的时间复杂度?
设计模式
https://juejin.im/post/5c2e10a76fb9a049c0432697
设计模式定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。通俗一点来讲就是在某种特定场合下对某个问题的一种解决方案。
所有的设计模式的实现都遵循一条原则,‘找出程序变化的地方,并将变化封装起来’。
设计原则
设计本身是为了提高代码可利用性,增加可维护性,符合以下的原则:
- 单一原则:永远不应该有多于一个原因来改变某个类。当我们做系统设计时,如果发现有一个类拥有了两种的职责,那就问自己一个问题:可以将这个类分成两个类吗?如果真的有必要,那就分吧。千万不要让一个类干的事情太多!
- 开放封闭原则:软件实体,如:类、模块与函数,对于扩展应该是开放的,但对于修改应该是封闭的。当需求有改动,要修改代码了,此时您要做的是,尽量用继承或组合的方式来扩展类的功能,而不是直接修改类的代码。当然,如果能够确保对整体架构不会产生任何影响,那么也没必要搞得那么复杂了,直接改这个类吧。
- 最少知识原则(迪米特原则):尽量减少对象之间的交互,从而减小类之间的耦合。简言之,一定要做到:低耦合,高内聚。
- 里氏转换原则:在使用基类的的地方可以任意使用其子类,能保证子类完美替换基类。
- 接口隔离原则:一个类与另一个类之间的依赖性,应该依赖于尽可能小的接口。不要对外暴露没有实际意义的接口
- 依赖倒转原则:引用一个对象,如果这个对象有底层对象,直接引用底层对象,比如可以直接用小桶打水,就没必要引用大桶向大桶灌水再用大桶。
单例模式
应用场景:全局唯一模态框,登录注册。 延伸:单例懒加载 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。策略模式
应用场景:计算不同绩效的工资,表单验证 将计算逻辑或者验证逻辑的算法单独封装。 定义:一系列的算法,将它们一个个封装起来,并且使它们可以相互替代。代理模式
应用场景:图片懒加载(proxyImage),代理缓存,代理合并请求 定义:一个对象提供一个代用品或占位符,以便控制对它的访问。迭代器模式
定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。发布-订阅模式
应用场景:DOM 事件系统(addEventListener),网站登录系统 定义:又叫观察者模式,它定义了对象间的一种一对多的依赖关系。当一个对象的状态发生变化时,所有依赖它的对象都将受到通知。 延伸:订阅不同事件,订阅离线缓存命令模式
组合模式
模板模式
延伸:好莱坞原则享元模式
定义:核心是运用共享技术来有效的支持大量颗粒度的对象,常用于性能优化。 延伸:对象池职责链模式
定义:避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。 例子:手机商城-是否有 500 打折券->200 打折券 ->有库存…,aop,上传组件适配 html5=>flash=>xxx中介者模式
定义:作用是解除对象与对象之间的紧耦合关系,所有的相关对象都通过中介者对象来通信装饰者模式
状态模式
适配器模式
定义:作用是解决两个软件实体间的接口不兼容问题。常规面试题