面试公司
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++) {
//判断元素是否相等 如果相等 则次数加1
if(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 start
async1 start
async2
promise1
script end
promise2
async1 end
settimeout
微信小程序
微信小程序包最大不会超过2M,当超过2M的时候如何进行分包?