面试公司
MetaApp、questMobile、汽车之家、哗啦啦、去哪儿网、作业帮、京东物流、美团
CSS
- 什么是盒子模型?怪异盒模型怎么设置它为正常的盒模型?
- 垂直居中的几种实现方式。子元素宽高不固定怎么实现?
- 移动端自适应布局有哪些实现方案?(rem的原理,除了rem还有别的方式没有?)
- BFC规则是啥?怎么触发它的规则?
-
JavaScript
数组去重的实现方式
代码实现:
利用es6的Set
function dedupe(array){// 利用Set不允许出现重复的元素这个特性,去重,然后转化成数组return Array.from(new Set(array));}dedupe([1,1,2,3]) //[1,2,3]
利用
- es6的一些语法
- 用promise封装一个sleep函数
- 防抖节流函数
- 浅拷贝深拷贝
-
React
组件通信的几种实现方式?(重点看看context怎么通信的?)
- 生命周期的执行顺序,react16新增的生命周期函数有什么?为什么新增?从之前三个will为什么废弃说起,三个will不安全,什么情况下不安全的?
- setState的参数有哪些?第一个参数可以传递什么值?传递的值有什么区别吗?第二个值是什么?setState的内部执行的过程是怎么样的?了解吗?setState为什么异步?能不能同步?什么时候异步?什么时候同步?
https://www.sohu.com/a/219848526_695559
- react Hook有了解过吗?用过哪些?useEffect和useLayoutEffect有什么区别?useMemo和useCallBack有什么区别?
- react为什么会加入 Fiber?
redux流程是什么?redux如何实现异步?如果用异步请求一个接口代码如何实现?
Vue
Vue的生命周期函数?
- Vue组件的通信方式有哪些?
- key的作用是什么?
- v-bind和v-model的区别有哪些?
- 响应式机制是什么样的?
- vue原理了解过吗?介绍一下vue实现的原理
- vue3.0实现了哪些东西?介绍一下vue3在性能方面做了哪些工作?compositionApi怎么使用的?
Vue和React比较
Webpack
- webpack的打包流程是什么样的?主要是解释一下源码是怎么打包的
- webpack怎么配置文件分割
- 怎么实现热更新(css和js的热更新)
-
node
TypeScript
interface和type有什么区别
-
性能优化
说说平时自己项目中做过的
比如: 防抖和节流,用在什么场景?有什么区别?代码如何实现,现场面试可能会写代码。
- 减少http的请求
- 减少DOM操作
- webpack做了哪些性能优化
- vue做了哪些性能优化
- react做了哪些性能优化。
手写代码
数组乱序
// 示例var arr = [1, 2, 3, 4];var newArr = [2, 4, 1, 3];
代码实现:
function sortArray(arr) {let newArray = [];const len = arr.length;for(let i = 0; i < len; i++) {// 根据数组的长度产生一个随机的下标const index = Math.floor(Math.random() * arr.length);// 根据随机的下标把对应的数组项push到新的数组newArray.push(arr[index]);// 删除已经出现过的元素arr.splice(index, 1);}return newArray;}const arr = [1,2,3,4,5];const newArr = sortArray(arr);console.log(newArr);
数组扁平化
var arr = [1, [2, 3], 4, [5, 6]];var newArr = [1, 2, 3, 4, 5, 6];
代码实现:
function flatten(arr) {while(arr.some(item=>Array.isArray(item))) {arr = [].concat(...arr);}return arr;}var arr = [1, [2, 3], 4, [5, 6]];flatten(arr)// [1,2,3,4,5,6]
一共有五种方法:https://www.cnblogs.com/wind-lanyan/p/9044130.html
统计一个字符串中相同字符出现的个数
var str = "abbcccdffaa";var newStr = "a-3-b-2-c-3-d-1-f-2";
代码实现:
var str = 'ABCABC你好你好ののA';//用来存储不重复的字符串var newStr = '';//字符串去重 将不重复的字符串存储到一个新的字符串内//将每一个字符单独提出来for (var i = 0; i < str.length; i++) {//判断有没有在newStr中出现过 没有出现过 放到newStr内if (newStr.lastIndexOf(str[i]) == -1) {newStr += str[i];}}// console.log(newStr);//ABC你好のfor (var i = 0; i < newStr.length; i++) {var count = 0;for (var j = 0; j < str.length; j++) {//判断元素是否相等 如果相等 则次数加1if(newStr[i]==str[j]){count++;}}console.log(newStr[i],count);}
实现一个add(), add(1)(2)(3)(4)实现无限极累加
add(1) //=> 1;add(1)(2) //=> 3;add(1)(2)(3) //=> 6;add(1)(2)(3)(4) //=> 10;以此类推。。。。。
代码实现:
function add(a) {function s(b) {a = a + b;return s;}s.toString = function() {return a;}return s;}console.log(add(1)(2)(3));
写出下列代码的执行结果
async function async1() {console.log("async1 start");await async2();console.log("async1 end");}async function async2() {console.log( 'async2');}console.log("script start");setTimeout(function () {console.log("settimeout");},0);async1();new Promise(function (resolve) {console.log("promise1");resolve();}).then(function () {console.log("promise2");});console.log('script end');// 输出结果script startasync1 startasync2promise1script endpromise2async1 endsettimeout
微信小程序
微信小程序包最大不会超过2M,当超过2M的时候如何进行分包?
