介绍项目
项目有上线吗
遇到的困难,怎么解决的
- 引申出的问题:
nextTick 的作用
前后端分离的含义
SPA 的含义、优缺点
怎么解决 SEO 的问题? SSR 服务器端渲染
怎么解决首次加载速度慢? 按需加载组件、SSR
路由跳转(前端路由问题?)
vuex 的作用、原理
设计 vuex 这样的状态管理的思路
- 基础知识
JS 怎么监听数据的变化:
ES5 的 object.defineProperty() 方法,get 和 set 属性;
ES6 的 Proxy 对象:new Proxy 创建实例,可以拦截和监视外部对对象(被代理的对象)的访问。其中参数:handler 处理器,可以包含 set、get。
http 请求发送后经历的流程
CSS 中 display 的属性及其对应的含义
块元素与行内元素的区别
水平垂直居中的实现
- 算法题
一个整型数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,找出总和最大的子数组(并返回总和)。
var maxSubArray = function (nums) {
let res = nums[0];
let sum = 0;
for (let i = 1; i < nums.length; i++) {
sum = nums[i] + Math.max(sum, 0);
res = Math.max(res, sum);
}
return res;
};
思路:
动态规划问题,采用前缀和的方式来解决。
扫描数组 [-1,2,3,8,9,-23,60],首先进行累加,假设sum=0,则第一个数加上去sum = -1;
由于是负数,那么当加第二个数的时候,sum 肯定会比第二个数小。那么我们可以舍弃这个sum,从第二个数重新开始累加;
(但是这里要注意,有可能第一个 sum=-1 为最大的连续数列的和,因此需要保存下来 max=-1,以后每次比较sum与max,更新max)
2累加到9,sum和max都为22,再加-23,sum就为-1;
重新从60开始,并且60也大于max的22,就更新max为60。
扫描的过程中,只要 sum 还大于0,就累加后面的数,并且不断更新 max;
若 sum 小于0,就把sum清零,重新从下一个数开始累加。
如果要返回具体的最大子数组,就要在扫描中记录 max 开始和结束的元素序号;
当sum小于0时,应该重新记录一个起点的序号,当总和大于原来的max(更新max)时,才能记录新的开始序号。
function maxQueue(arr){
var max=0 //初始化
var sum=0
var star=0 //最大数列的开始序号
var end=0 //最大数列的结束序号
var point=0 //当前记录sum的起点
for(var i=0; i<arr.length; i++){
sum += arr[i]
if(sum>max) { //当sum大于max时
max=sum //更新max
star=point //开始序号记录为起点
end=i //结束序号记录为当前扫描的序号
}
if(sum<0) { //当sum小于0
sum=0 //sum清零
point=i+1 //起点重新记录为下一个扫描的序号
}
}
return max
//return arr.slice(star,end+1)
}