前端知识点汇总
前端知识点是我在准备秋招过程中,看书和经验贴中总结到的一些知识点,不仅面试中经常问到,同时对于自己未来的工作和学习也很重要,也欢迎大家一起补充~
一、JavaScript
-
原始值和引用值类型及区别
-
判断数据类型typeof、instanceof、Object.prototype.toString.call()、constructor
-
类数组与数组的区别与转换
-
数组的常见API
-
bind、call、apply的区别
-
new的原理
-
如何正确判断this?
-
闭包及其作用
-
原型和原型链
-
prototype与__proto__的关系与区别
-
继承的实现方式及比较
-
深拷贝与浅拷贝
-
防抖和节流
-
作用域和作用域链、执行期上下文
-
DOM常见的操作方式
-
Array.sort()方法与实现机制
-
Ajax的请求过程
-
JS的垃圾回收机制
-
JS中的String、Array和Math方法
-
addEventListener和onClick()的区别
-
new和Object.create的区别
-
DOM的location对象
-
浏览器从输入URL到页面渲染的整个流程(涉及到计算机网络数据传输过程、浏览器解析渲染过程)
-
跨域、同源策略及跨域实现方式和原理
-
浏览器的回流(Reflow)和重绘(Repaints)
-
JavaScript中的arguments
-
EventLoop事件循环
-
宏任务与微任务
-
BOM属性对象方法
-
函数柯里化及其通用封装
-
JS的map()和reduce()方法
-
“”和“=”的区别
-
setTimeout用作倒计时为何会产生误差?
二、ES6 -
let、const和var的概念与区别
-
变量提升与暂时性死区
-
变量的结构赋值
-
箭头函数及其this问题
-
Symbol概念及其作用
-
Set和Map数据结构
-
Proxy
-
Reflect对象
-
Promise(手撕Promise A+规范、Promise.all、Promise相关API和方法)
-
Iterator和for…of(Iterator遍历器的实现)
-
循环语法比较及使用场景(for、forEach、for…in、for…of)
-
Generator及其异步方面的应用
-
async函数
-
几种异步方式的比较(回调、setTimeout、Promise、Generator、async)
-
class基本语法及继承
-
模块加载方案比较(CommonJS和ES6的Module)
-
ES6模块加载与CommonJS加载的原理
三、HTML/CSS -
CSS权重及其引入方式
-
标签全部作用
-
用CSS画三角形
-
未知宽高元素水平垂直居中(方案及比较)
-
元素种类的划分
-
盒子模型及其理解
-
定位方式及其区别(文档流)
-
margin塌陷及合并问题
-
浮动模型及清除浮动的方法
-
CSS定位属性
-
display及相关属性
-
IFC与BFC
-
圣杯布局和双飞翼布局的实现
-
Flex布局
-
px、em、rem的区别
-
Less预处理语言
-
媒体查询
-
vh与vw
-
H5的语义化作用及语义化标签
-
Web Worker和Web Socket
-
CSS3及相关动画
-
如何实现响应式布局
-
SEO的概念及实现
-
HTML5的新特性
-
Less和Sass使用
四、HTTP与计算机网络 -
TCP/IP协议分层管理
-
三次握手四次挥手机制及原因
-
HTTP方法
-
GET和POST的区别
-
HTTP建立持久连接的意义
-
HTTP报文的结构
-
HTTP状态码
-
Web服务器及其组成
-
HTTP报文首部
-
HTTP通用首部字段
-
HTTP请求首部字段、响应首部字段、实体首部字段
-
Cookie相关首部字段
-
HTTPS与HTTP区别及实现方式
-
Cookie与Session
-
基于HTTP的功能追加协议(SPY、WebSocket、HTTP)
-
常见的Web攻击分类
-
TCP与UDP区别
-
存储机制localStorage、sessionStorage与Cookie存储技术
-
XSS攻击及防御
-
CSRF攻击及防御
五、前端工程化 -
前端工程化的流程(架构选型、业务开发、测试、打包构建、部署上线、项目监控)
-
Webpack基本概念与配置
-
loader与plugin原理与实现
-
Webpack的模块热替换及实现
-
Webpack的优化问题
-
SPA及其优缺点
-
SSR实现及优缺点
-
设计模式(工厂模式、单例模式、原型模式、代理模式、适配器模式、观察者模式等…)
六、React -
React自身特点及选型时考虑
-
React与VUE的异同
-
Virtual DOM
-
React生命周期
-
Diff算法
-
受控组件与非受控组件
-
高阶组件
-
Flux架构模式(涉及MVC/MVVM、Flux)
-
Redux设计概念、设计原则、方法、redux实现异步流的库
-
纯组件(Pure Component)与shouldComponentUpdate关系
-
Redux中的组件与connect函数
-
React Fiber架构
-
React Hooks的作用及原理
七、NodeJS -
NodeJS基本概念与特点
-
CommonJS规范、核心模块
-
Node的异步I/O
-
Node的内存控制
-
Node构建网络服务(TCP、HTTP、Web Socket服务等)
-
Node的进程
八、需要会手撕的代码部分 -
Promise(A+规范)、then、all方法
-
Iterator遍历器实现
-
Thunk函数实现(结合Generator实现异步)
-
async实现原理(spawn函数)
-
class的继承
-
防抖和节流
-
Ajax原生实现
-
深拷贝的几种方法与比较
-
继承的几种实现与比较
-
未知宽高的元素水平垂直居中
-
三栏布局的实现
-
两栏布局的实现
-
React高阶组件
-
数组去重
-
几种排序算法的实现及其复杂度比较
-
前序后序遍历二叉树(非递归)
-
二叉树深度遍历(分析时间复杂度)
-
跨域的实现(JSONP、CORS)
九、数据可视化 -
Canvas和SVG的区别
-
在考虑设计可视化图表时,结合Canvas和SVG特性会怎么取舍
-
常见的可视化组件库
-
可视化组件库如Echarts的设计思路
-
一些偏向底层的可视化组件库和前端框架结合方面需要考虑哪些问题
-
可视化组件如何做到数据驱动?
十、计算机基础 -
计算机系统
-
线程与进程
-
常见的git指令
-
Linux相关指令
-
其他类型的编程语言(如Java)
-
数据库
前端面试题汇总
前端面试题是我面试过程中遇到的面试题,每一次面试后我都会复盘总结。因为我每次都发在牛客上,所以具体可以看我之前的帖子哈
面试经验汇总
面试经验汇总是我在秋招和面试过程中的一点体会和总结,每个人的学习方法和调整心态的方式不一样,也仅供参考哈~
看过的书籍 -
《JavaScript高级程序设计》——红宝书。多看几遍,其意自现
-
《高性能JavaScript》——很不错的书,在性能方面多多考虑
-
《JavaScript语言精粹》——提纲挈领,花费时间较少加深印象
-
《你不知道的JavaScript(上中下)》——据说很精彩,还没看多少
-
《ES6标准入门》——必看
-
《深入React技术栈》——部分章节介绍很精彩,但v16以后需要自己看文档
-
《深入浅出NodeJS》——后端部分也很重要,还没看完
-
《DOM编程艺术》——没看多少
-
《图解HTTP》——浅显易懂介绍HTTP,可结合博客深入理解
-
《剑指offer》——题目都要刷一遍以上才行
-
《数据之美》——数据可视化入门书籍
-
《数据可视化的基本原理与方法》——数据可视化的一些原理知识
一、心态
求职过程中,个人认为最重要的是心态的保持,秋招其实是一个周期很长的过程,从开始的复习准备到参加笔试面试到最后的等待结果,难免会经历挫折和打击,但是心态对复习状态和面试表现影响真的很大,所以心态是首先需要注意的问题(我自己在7月和8月挂过很多,中间一度很焦虑,懂的同学都懂)。下面是我想到的一些小tips,可以看看 -
在准备笔试面试的复习阶段,可以对自己有高一点的期待,适当订一些意向公司,好好准备面试题,知识点等
-
开始笔试面试初期,经常会很紧张,不知道该怎么回答,所以最好的办法就是多参加,积累经验
-
笔试面试逐渐多起来之后,经常会陷入焦虑,患得患失。这个时候需要降低自己的期望,不要考虑太远的目标,每天制定计划,目光关注在当天的任务,甚至以半天为单位,按部就班复习(解决焦虑的最好办法就是行动)
-
和同学多交流吐槽,适当发泄
我个人的心态转变是在挂了网易的面试之后,之前基本就是面一个挂一个,心态一度很崩溃,但是也没有办法。挂完网易后,晚上和实验室的同学出去吃了一顿饭,聊了很多,之后心态就放开了,佛系了,一切随缘。。在那之后的面试反而基本面一个过一个(可能也因为复习整理了一段时间)
二、方向选择
因为读研期间,老师的项目可能对自己的求职方向和技术栈都有一定影响,所以需要提前确定自己的工作方向,并且安心的复习准备。最好不要想着我同时准备A和B,如果A形式不好,就找B。这样可能会导致分心,A和B准备的都不充分。
如果在工作方向之间有纠结的话(如A和B),不妨可以尝试权重法,自己列举方向A和B对你来说,优势在哪,权重多大,然后比较。比如我更喜欢A,有xxx经历,A权重加20分。B的行业需求更大,B权重加5。个人在A和B的核心竞争力多少。。自己根据自己的情况评估。
三、面试技巧
-
个人自我介绍一般可以分为三个部分:自己的个人情况(姓名、学校、年级等)+特殊的经历及收获(项目、比赛、实习)+对应聘公司的理解(为什么要来,如何结合部门的业务谈谈自己的能力和业务的匹配更好)
-
面试题会的就说,如果有准备比较充分,可以多说一点,埋一点坑,一般面试官会顺着往下问。如果完全不会,就说自己没了解过。不太确定的,可以先和面试官说自己不太确定,然后说一下自己认为的答案
-
HR面的一些比较常见的问题,可以提前找一找,准备适合自己情况的回答
-
有的时候,提前了解一下自己投递的部门的业务,并结合自己的知识谈一谈自己的理解和认识,会有意想不到的效果
-
面试提问环节,一般前两面都是部门内的leader或者同事面试,所以我都会问一些部门的业务方面的问题,并且结合自己的理解聊一下。如果是交叉面或者部长面,我会问一下从面试和简历,他们对我的今后学习的建议(一般都会对你面试进行评价,这时你应该就能感觉出来自己能不能过了,然后面试官给出建议),因为部长面和交叉面,面试官的层次和眼界更高,单纯的问技术方面的问题,其实不如问一些对自己的职业方向建议的问题,这样可能收益更大。不建议直接询问面试结果,因为一方面面试官不会说,第二方面会显得心虚。最后HR面我只会问后续的通知时间。
四、复习准备 -
在开始准备复习前,可以根据自己的个人情况,列举一下自己需要准备哪些方面的知识,看哪些书,时间如何安排。前端方向的知识比较广,面试时不仅要有广度,深度也很重要(事实上,面试就是差异化竞争,同样一些问题你准备了,别人一定也准备了,但是对于同一个问题,理解的深度完全取决于自己的准备情况。一般在回答这个问题的基础上,再有一点点延伸,只说到概念和关键名词即可,面试官可能会顺着往下问)比如面试官问你事件循环机制,可以延伸介绍同步异步、异步的几种方法、微任务和宏任务等,一般都会接着往下问的
-
及时总结。看完一本书的一个章节时,尝试去用自己的理解概括总结,最好记录一下,便于复习。参加完每一次面试后,马上回忆问到的题目,总结记录,想想哪里回答得不好(我基本每一次面试完面经都会发到牛客网上)