前面的话
从投简历到现在差不多有20天的面试时间,春招也接近了尾声,小柒这里总结一下。
总的来说,对于实习生来说,考的最多的还是前端基础,其次就是计网、数据结构、操作系统这些专业知识,还有一点算法(不说要达到可以竞赛的水平,基本算法思想:双指针、排序、分冶、动态规划、二叉树、链表、栈和队列等要了解)。
总之复习还得全面,知识掌握的要扎实,不能仅仅是背一下面经那么简单,面试官稍微问深一点就答不上来了,这样肯定是不行的。面试过程中除了考基础知识外,还会考一些发散性的问题,对于发散性问题,一定要给面试官一个思路,不一定要是最好的,但一定要有。
PS: 问题大概都列出来了,可能漏掉了少部分问题,总的来说还是比较全的(记起来再补)。
HTML(5)
- HTML语义化的理解
- DOCTYPE的作用
- 标准模式与怪异模式的区别
- 说一下文档流
- 行内元素、块级元素、行内块级元素、空元素
- html5的新特性
- 描述 cookies,sessionStorage 和 localStorage 的区别
- iframe 内嵌框架有那些缺点
- 说一下 webWorker、 webSocket
CSS(3)
- 盒模型: 标准模型与IE模型
- 权重问题
- css选择符有哪些
- css中哪些属性可以被继承:字体系列font-family、font-size、font-weight等;文本系列:list-style、list-style-color等;文本系列:text-align、color、line-height等
- box-sizing常用的属性
- link与@import区别
- a标签的4个伪类的正确顺序,并解释
- 清除浮动的方式
- position的属性值:static、relative、absolute(脱离文档流)、fixed(脱离文档流);absolute相对定位的
- z-index:只对脱离文档流的元素有效
- flex布局: 父元素设为Flex布局后,子元素的float、clear、vertical-align属性将失效。
- BFC、触发条件、可解决的问题
- IFC是什么
- 两栏布局:float + margin; calc; position + margin(或者transform) ;flex等
- 三栏布局:float + margin; position + margin; flex; 圣杯;双飞翼等
- 如何实现水平垂直居中
- 伪类和伪元素的区别: 伪类的操作对象是文档树中已有的元素,而伪元素则创建了一个文档树外的元素
- 浏览器是怎样解析 CSS 选择器的?(从右向左)
- px、em、rem的区别
- CSS创建一个三角形
- CSS 动画 与 js 动画区别
- CSS3新特性:圆角(border-radius)、阴影(box-shadow)、动画、渐变(gradient)、转换(transform:translate / scale/ skew)
- CSS3新增伪类
js
- js数据类型
- 数据类型的内存图
- var a = 1; a = “str”; a 的内存空间如何变化
==
和===
的区别- null 和 undefined 的区别
- 原型、原型链
- 作用域、作用域链
- 闭包及其作用
- 使用闭包实现每秒打印1,2,3,4
- 继承的几种方式、寄生组合继承的实现
- es6 继承与es5 继承的区别
- 箭头函数与普通函数的区别
- this的理解
- call、apply、bind的区别
- 深浅拷贝
- 事件流、事件委托(事件委托我们可以不必要为每一个子元素都绑定一个监听事件,这样减少了内存上的消耗)
- js 延迟加载的方式
- ajax是什么?
- 浏览器和 Node.js 的事件循环机制有什么区别?
- 同步与异步、宏任务与微任务
- 模块规范(commonJS、es6 、AMD、CMD)
- typeof NaN 的结果是什么、isNaN与Number.isNaN函数的区别
- 如何判断变量类型
- js 的节流与防抖
- 布尔类型的值的转换规则 :假值(undefined、null、false、+0 、-0、""、NaN)
- {} 和 [] 的 valueOf 和 toString 的结果是什么
- js 类数组的定义、类数组如何转换为数组
- 如何判断数组
- JavaScript 与 Java 的区别
- js 的垃圾回收 与 v8 的垃圾回收
- 哪些操作会照成内存泄漏
- 0.1 + 0.2 != 0.3 如何解决
- 图片懒加载与预加载
- JavaScript 中数组是如何存储的?
- JavaScript 中的数组为什么可以不需要分配固定的内存空间?(追加)
- JavaScript 中数组的存储和 C / C++ / Java 中数组的存储有什么区别?(追加)
ES6
- let 、const 与 var的区别
- Iterator和for…of
- Symbol 类型
- Set 与 WeakSet 、Map 与 WeakMap
- 什么是 Proxy
- 说一说 promise?promise的各种api
- Generator及其异步方面的应用
- 说一说 async / await
- class基本语法及继承
Vue
- 说一说对 Vue 的理解
- MVVM 模式的优缺点,与 MVC 的区别
- Vue 的生命周期(详细介绍)
- 一般在哪个生命周期里请求接口
- Vue 的组件通信
- Vue 双向绑定的原理
- Vue 中是如何检测数组的变化
- Vue 组件中的data为什么要写成函数形式
- nextTick 是做什么用的,其原理是什么
- Vue 的模板编译原理
- computed 与 watch 的差异
- vue-router 中的导航钩子
- $route 与 $router 的区别
- vue-router的两种模式
- Vue中 key 值的作用
- Vue中常见的修饰符
- Vue中常用的指令
- v-show 与 v-if 的区别
- keep-alive 组件的作用
- 说一下 Vuex
- Vue的虚拟dom
- Vue 中的slot 与 slot-scope
Webpack
- Webpack 是什么?
- Webpack 与 gulp 的区别?
- Webpack 构建流程
- Webpack 的优化
- 热更新的原理
- loader 与 plugins 的区别
- 常用的 loader 与 plugin
- 是否自己写过loader 或者 plugin
浏览器
- 浏览器缓存
- 浏览器的同源策略
- 跨域
- 浏览器的渲染
- 回流为什么比重绘更消耗性能
- 浏览器的进程与线程
- cookie、session、token的区别
- 输入url 后发生了什么
网络
- TCP/IP 四层模型 、OSI七层模型、每一层的有哪些常见的协议
- TCP 与 UDP 的区别
- TCP 的 三次握手与四次挥手(为什么是三次? 为什么是四次?)
- TCP 的 流量控制与拥塞控制
- TCP 可靠传输
- TCP 滑动窗口
- HTTP 的请求方法
- GET 与 POST的区别
- HTTP 常见的请求头
- HTTP 状态码
- HTTP 报文格式
- HTTP1.0 、HTTP1.1 、HTTP 2.0
- HTTP 与 HTTPS 的区别 、HTTPS的握手过程
- HTTPS中的三个随机数是如何生成会话密钥的
- HTTP 缓存:强缓存与协商缓存
操作系统
- 进程、线程
- 进程之间的通信方式
- 线程的哪些资源共享?哪些资源不共享
- 死锁
安全
- XSS 攻击及如何防范
- CSRF 攻击及如何防范
- SQL 注入攻击
- DOS 攻击
手写原理
- new 操作符具体干了什么
- instanceof 的实现
- 实现原生ajax
- 原生jsonp
- 实现 call、apply、bind
- 实现节流与防抖
- 实现深浅拷贝
- 实现函数柯里化
- 实现数组去重
- 实现数组扁平化