一些值得思考的前端面试题
还在继续补充中……
author: @TiffanysBear
ALL
在nodejs开发的时候 处理过什么windows和mac的平台兼容性问题
- 兼容环境变量设置
- windows不支持 & ,并行执行npm-script用npm-run-all或者concurrently
- 异步同步化:util.promisify + async/await
- fs.readFileSync,用fs-extra去代替
- 拼接路径要用path.join,Unix系是/,Windows是\
- ……
设计一个方案,在浏览器中点击一个button,然后能在你的前端项目源码文件中增加一个index.js文件,如何实现?提供思路
用nodejs,将base64转化成png文件,或者将png文件转化为base64
如果你用nodejs实现的爬虫服务器的IP被指定网站封了,如何解封?
请设计一个方案:有a、b、c三个npm插件,它们会经常更新,在前端项目npm run start启动后,要求a、b、c三个npm插件自动更新到最新版本
大文件转存问题:服务器A有一个1000G的文件, 需要通过服务端B转发到服务端C,但是服务器B内存只有1个g, 怎么去实现这个大文件转存
如何劫持https的请求,提供思路
前端如何进行seo优化; 前后端分离的项目如何seo
简单实现async/await中的async函数
1000-div问题:一次性插入1000个div。
- 使用Fragment
- 向1000个并排的div元素中,插入一个平级的div元素,如何优化插入的性能;先 display: none 然后插入 再 display: block ;赋予key,然后使用virtual-dom,先render,然后diff,最后patch;脱离文档流,用GPU去渲染,开启硬件加速;
2万小球问题:在浏览器端,用js存储2万个小球的信息,包含小球的大小,位置,颜色等,如何做到对这2万条小球信息进行最优检索和存储
- 用ArrayBuffer实现极致存储
- 哈夫曼编码 + 字典查询树实现更优索引
- 用bit-map实现大数据筛查
- 用hash索引实现简单快捷的检索
- 用IndexedDB实现动态存储扩充浏览器端虚拟容量
- 用iframe的漏洞实现浏览器端localStorage无限存储,实现2千万小球信息存储
http的状态码中,499是什么?如何出现499,如何排查跟解决
- 499对应的是 “client has closed connection”,客户端请求等待链接已经关闭,这很有可能是因为服务器端处理的时间过长,客户端等得“不耐烦”了。还有一种原因是两次提交post过快就会出现499。
解决方法:1、前端将timeout最大等待时间设置大一些;2、nginx上配置proxy_ignore_client_abort on
;
- 499对应的是 “client has closed connection”,客户端请求等待链接已经关闭,这很有可能是因为服务器端处理的时间过长,客户端等得“不耐烦”了。还有一种原因是两次提交post过快就会出现499。
如何遍历一个dom树
new操作符都做了什么
- 创建一个空对象,并且 this 变量引用该对象,// lat target = {};
- 继承了函数的原型。// target.proto = func.prototype;
- 属性和方法被加入到 this 引用的对象中。并执行了该函数func// func.call(target);
- 新创建的对象由 this 所引用,并且最后隐式的返回 this 。// 如果func.call(target)返回的res是个对象或者function 就返回它
- 请设计一个攻击服务器的策略;伪造虚假npm包 + nodejs版本的payload, nodejs的反序列化攻击
- 请写一个正则,去除掉html标签字符串里的所有属性,并保留src和href两种属性。答案
- 十万条数据插入数据库,怎么去优化和处理高并发情况下的DB插入。想法
- 一个iframe,内嵌了一个A页面,iframe的宽高不停变化,如何让A页面的宽高实时自适应这个iframe的宽高大小。请说出至少3种方法
- v8有了解过吗?讲讲了解过v8的那几个模块和部分
- 现在有多个spa的项目,有angular的,有vue的和react的,如何将他们合并成一个大统一的spa项目。提示
项目相关
- 怎么实现页面性能监控,首屏时间计算等
- 怎么实现一个JS错误监控
HTTP
- Http请求中的keep-alive有了解吗?
- http的状态码中,499是什么?如何出现499,如何排查跟解决
- http三次握手四次挥手,可以优化吗?
- 什么是断点续传?怎么实现?
- http 2.0 有什么特点,相比于 1.1 多了哪些优化?
- http中的对称加密和非对称加密
- 浏览器缓存机制
- 浏览器建立长连接
- http状态码206
代码实现
- 手写代码,简单实现call
- 手写代码,简单实现apply
- 手写代码,简单实现bind
- 简单手写实现promise、promise.all
- 实现一个Lazyman
- 用JS代码求出页面上一个元素的最终的background-color,不考虑IE浏览器,不考虑元素float情况。
- 实现一个 axios 的 timeout 方法
- 实现一个 render 方法进行模板字符串替换
- 实现一个new,说一说new执行了哪些操作
- 发布订阅模式
- 实现一个简单的Vue
HTML & CSS
- bootstrap是怎么实现grid系统
- BFC:清除浮动、margin重叠
- 两列等高布局的实现
源码相关
- Jquery的源代码怎么进行Object的深复制
Vue
- vue 中的一个 tick 是什么,node 中的 tick 呢
- vue 自定义指令
- vue 编译后是什么,runtime 的作用
- keep-alive
打包相关
- webpack常见使用
- fis、webpack等打包插件的原理
- webpack一些常用的使用功能:提取公共部分、代码分割和按需加载、treeShaking、webpack-dev-server等的一些使用