文章目录
杂谈
考得不是很难,一开始进去会让你选自己的技术栈(Vue,React和Angular),单选和多选涉及html、css、js、你选的技术栈、webpack、路由等等,考完就忘了,难点可能在模棱两可的选项吧。
大题及大致解析
论述题
- 论述题两道
- 是文本编辑框,不是代码ide,但是写了代码
1. html和htmls的区别
我答了七点,大概内容围绕:啥是html和htmls,名字差异,安全性(SSL/TSL),证书,端口号,SEO,htmls更受推荐,htmls可能会更慢
2. 什么是深拷贝?什么是浅拷贝?如何实现?
一开始说一下定义,深拷贝复制的是整个属性内容,拷贝内容变了被拷贝内容不会变;浅拷贝复制的是指针引用,最浅一层数据,拷贝内容变了被拷贝内容会变等等,差不多就那个意思
浅拷贝的实现:扩展运算符(如 [a, ...b]
),Object.assign()
,直接赋值等等
深拷贝的实现:lodash的 cloneDeep()
,手写递归实现
// 随手写的,大概的思路伪代码(?),不一定对
function deepClone(obj) {
if(typeof obj !== 'Object' || obj === null){
return obj;
}
const newObj = obj instanceof Array ? [] : {}
for(let i in obj){
if(typeof obj !== 'Object' || obj === null){
newObj[i] = obj[i];
} else {
deepClone(obj);
}
}
return newObj;
}
编程题
- 两道题,平台自带IDE,不可调试,可以自测,切题的地方我还找了一会儿,难度不高
1. 大人小孩排队
大概的意思就是形似 [1, 2, 3, 0, 0, 1, 2]
这样的数字,0
是小孩子,其它是大人,大人往前排,小孩子往后排,排成 [1, 2, 3, 1, 2, 0, 0]
这样。
难度不高,可以直接记忆化搜索。
...
// 仅包含重点代码(复盘时再写的,可能有错)
function queue(nums) {
// 一个就不排了
if (nums.length <=1) {
return nums;
}
let idxMemo = -1;
for (let i = 0; i < nums.length; i++) {
if (idxMemo === -1 && nums[i] === 0) {
idxMemo = i;
}
if (idxMemo !== -1 && nums[i] !== 0) {
nums[idxMemo] = nums[i];
nums[i] = 0;
i = idxMemo;
idxMemo = -1;
}
}
return nums;
}
...
2. 数组内是否存在 | nums[ i ] - nums[ j ] | ≤ t ,且 | i - j | ≤ k
如题所示,很简单
...
// 大概思路
function avail(a, b, target) {
return Math.abs(a - b) <= target;
}
function isExist(nums, t, k) {
if (nums.length <= 1) {
return false;
}
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length - i; j++) {
if (avail(nums[i], nums[j], t) && avail(i, j, k)) {
return true;
}
}
}
return false;
}
...