本篇博客包含 『 设计模式 』、『 Vue 』、『 React 』、『 ES6 』和『 前端常识 』的一些内容,均是亲历项目和面试后总结出来的。随着工作经验的积累,越发感受到设计模式给编程带来的收益。还有一些前端高频面试考点,希望能帮到各位志同道合的前端工程师朋友 🦍🦍🦍
- 设计原则
- 单例模式
- 策略模式
- 代理模式
- 迭代器模式
- 发布-订阅模式
- 命令模式
- 组合模式
- 模块方法模式
- 享元模式
- 职责链模式
- 中介者模式
- 装饰者模式
- 状态模式
- 适配器模式
- 外观模式
- HTML 文档三种常见 DOM 节点
- javascript 变量提升
- 运算符
&
与&&
和|
与||
String
字符串对象属性Window
对象history
修改 URL 的方法hash
路由和history
路由区别- 数组去重四种方式
- CSS 元素隐藏显示
- 排序
- 线性表查找
- 迪杰斯特拉和弗洛伊德算法
- 鼠标事件
- JS 的数据类型
- GET 和 POST 请求区别
- Object.assign()
- ES6 新特性
- 箭头函数普通函数区别
- axios 特色
- Vue 生命周期和钩子函数
- addEventListener 监听函数
- 循环中创建闭包:一个常见的错误
- 时间戳 getTime()
- 浮点数的误差
- 二进制与十进制互转
- 截取字符串 slice/splice/substr/substring(n,m)
- localStorage,sessionStorage 和 cookies 的区别
- JS 设置 cookie
- 关于 sort 排序
- 简述面向对象
- Number/JSON
- attachEvent 和 addEventListener
- Spread Operator 展开运算符
- JS 部分简写『 逼格拔高 』:checkered_flag:
- 关于 Ref
- 关于 Set 和 Map
- 同源策略及解决跨域问题
- CSS 的单位
- CSS 中 white-space、word-break、word-wrap
- CSS3 动画
- CSS 怎么实现单、多行文本溢出
- BFC 布局 (块级格式化上下文)
- CSS 实现三角形
- CSS 垂直水平居中
- 权重计算规则
- 浏览器渲染原理
- DNS 解析过程
- 对比 TCP 和 UDP
- 三次握手
- 如何判断一个对象有环
- ES6 数组新特性
- React 的 JSX
- JSX 的注意点
- React 组件生命周期
- React 中 render 的触发方式
- React 处理事件的四种方式
- Virtual DOM 算法简述
- Angular 和 Vue 的动态刷新方式
- React、Vue 和 Angular 的性能比较
- React 创建组件的两种方式
- 有关 key
- Vue 修饰符
- Vue 关于 $emit 的用法
- Vue 的 v-model 是什么
- Vue keep-alive 的实现原理及 LRU 缓存策略
- Vue 父子组件通过 props 传值示例
- Vue 父子组件生命周期执行顺序
- Vue/React/Angular 组件间通信
- Vue 2.X 源码之『 VNode 』:checkered_flag:
- Vue 2.X 源码之『 响应式对象 』:checkered_flag:
- Vue 2.X 源码之『 NextTick 』:checkered_flag:
- Vue 2.X 的编译过程
- macro/micro task 宏任务、微任务
- React 中 setState 更新数据
- 对比 Redux 和 Vuex
- Vue/React 的 diff 优化
- React diff 介绍:checkered_flag:
- React v15 和 v16 比较
- React Fiber 的设计理念:checkered_flag:
- React hook 原理
- React 官方 Hooks 总结
- React 性能优化
- Vue 3.X 新特性 🏁
- javascript 工厂模式函数、构造函数、原型模式
- 关于 this 指向
- 事件轮询机制 bind、apply、call 的区别
- 手写 new、instanceOf、const
- 手写 函数柯里化、函数合成
- 手写 函数防抖、函数节流
- 手写 深度遍历
- 手写 广度遍历
- 手写 二叉树遍历
- 手写 Promise 及相关
- JS 异步解决方案的发展历程以及优缺点
- HTTP2 特性
- 回流和重绘(reflow,repaint)
- TS 的一些实用工具泛型
- 浏览器如何进行垃圾回收
- 浏览器中不同类型变量的内存都是何时释放
- 如何避免内存泄露
- 闭包会不会导致内存泄露
- weakMap weakSet 和 Map Set 的区别
- 手写 Array.flat、Array.reduce、Array.map
- 手写单例模式
- 手写异步中间件
- 手写一个 redux
- 前端登录需要处理的流程
- HTTP 缓存机制
- HTTP 常见状态码
- OPTIONS 请求
- 常见 HTTP 的 Header
- 关于 HTTPS 的安全性
- 第一方 cookie 和第三方 cookie
- 常见异常类型
- CSRF 攻击实例
- 当前防御 CSRF 的几种策略
- XSS 跨站脚本攻击
- MVVM 和 MVC 的区别
- 五大浏览器和四大内核
- 关于快数组、慢数组
- 关于 npm 和 yarn
- 关于 require 和 import
- import 最后被解析成了什么
- 函数式编程
- PWA 简介
- web worker 简介
- 说说对 SSR 的了解
- 跨标签页的通信方式
- 性能指标 RAIL
- CDN 缓存
- 正向代理与反向代理
- Git & SVN
- Git 基础命令
- git reset、git revert 和 git checkout 的区别
- 关于 git rebase
- Git 修改 commit message
- Git 撤销已经推送至远端仓库的提交信息
- .gitignore 文件不生效的解决办法
- Git 提交信息规范
- Git 配置代码提交检测
- 命名规范
- 注释规范
- HTML 书写规范
- CSS、SCSS 书写规范
- JavaScript 书写规范
- 层次结构和 UML 类图
- 扁平化、面向数据的 state/props
- 更加纯粹的 State 变化
- 低耦合
- 辅助代码分离
- 提炼精华
- 及时模块化
- 集中/统一的状态管理
- 附:API 的设计原则