Codog

关注微信公众号:Codog代码狗

0%

arguments

NodeList

如何转为数组结构

  • 数组的slice方法:
1
2
3
4
5
6
// arguments, NodeList
Array.prototype.slice.call(ArrayLike)

// 是要有length属性,都可以调用slice方法;无length则返回空数组
obj = { '0': 0, 1: 1, 2: 2, length: 4 }
Array.prototype.slice.call(obj) // [0, 1, 2, empty]
  • Array.from方法
1
2
Array.from(arguments)
Array.from(document.querySelectorAll('div'))
  • 扩展运算符
1
2
[...arguments]
[...document.querySelectorAll('div')]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var search = function(nums, target) {
if(!nums || !nums.length) {
return -1
}
let left = 0;
let right = nums.length
while(left <= right) {
// 避免超出最大数值
let mid = Math.floor(left + (right - left) / 2)
if(nums[mid] === target) {
return mid
} else if(nums[mid] < target) {
// 此时mid可以排除在外,感谢一位面试官的提示😅
left = mid + 1
} else {
right = mid - 1
}
}
return - 1
};

选择符API

element.querySelector与querySelectorAll方法可以获取调用元素后代范围内查找节点,前者返回单个节点,后者返回NodeList列表,都接受CSS选择符作为参数,

比如querySelector('div'), querySelector('p.content')或者获取所有元素querySelectorAll('*')

classList

相比操作className,classList更直接也更安全。

四个实用方法:

  • add 添加类名
  • delete 移除类名
  • contains 是否包含某类名
  • toggle 切换类名,包含则删除,不包含则添加

一般来说,面试的最后都有向面试官提问的环节,这是一个了解部门和公司很好的机会,在公司工作的员工会给出最直接的回答。

对于技术面,前几轮尽量不要询问工作节奏、晋升及绩效制度、公司位置、三餐福利之类的。。这样显得自己不关心实际工作(这些问题我都问过,刚开始不知如何提问所以尬聊出来的😅),这些问题等到最后技术面或者hr会为你详细解答。

提问与实际工作相关的,比如工作内容及岗位要求、业务方向及发展、目前使用的技术栈、是否使用到了自己感兴趣的技术、开发流程是怎样的,流程是否合理完善、是否有某技术的探索计划、团队状况及发展方向之类的。

通常来说,面试官顺序会是你的同事(较高级别的)、业务leader、部门leader,这也是一个了解未来同事和工作环境的机会,面试官说话的方式及性格通过交谈也会了解一二,有的面试官就面带笑容、显得容易接近、过程就比较轻松,有的会比较严肃,交流起来会感觉不舒服,但不排除是个外冷内热的人~

以下为个人面试经验及总结他人看法。

首先对于不清晰的地方可以让面试官重述或解释一遍,有时候会遇到略带口音或者英文读法不同的面试官,注意态度平和。

回答要回答到要点上,如果还了解更多也尽量多说一句,展示自己技术的广度,并引导面试官提问自己擅长的部分;但要保证自己能hold住可能的延伸问题,避免自己给自己挖坑。对问题的回答不是对-错的关系,而是达标-满意-超出预期,所以多了解问题的相关内容,尽量表现自己吧~

面试过程中个人要使用保持态度谦逊、语气温和,即便对于不熟悉问题的追问也不要表现出烦躁情绪,说出自己知道的,并表明自己涉猎有限、理解不深,有的面试官不会太较真,大致思路符合要求该问题就通过了,有的还会给出点提示引导或者直接想你解答,这是很好的学习交流机会。

对于不了解的技术最好不要表现出对它的漠视或嫌弃,比如觉得xxx🌶🐔,xxx才是未来的趋势。因为一般面试官说到的都可能是公司正在使用的。。所以要说的话也要表现出积极的态度,比如xxx是一门很优秀的语言,有机会一定会使用。

代码题要注意编码风格,即便功能实现符合要求,有些注重细节的面试官会对你的编码风格提出疑问,所以尽量保持代码整洁、逻辑清楚、不要取a, b, func这样的变量名,因为自己看着累,别人看起来更累😂

  • 进程是资源分配的基本单位;线程是程序执行的基本单位。
  • 进程拥有自己的资源空间,没启动一个进程,系统就会为它分配地址空间;而线程与CPU资源分配无关,多个线程共享同一进程内的资源,使用相同的地址空间。
  • 一个进程可以包含若干个线程。

通俗来说进程倾向于内存分配,线程倾向于cpu运行

WeakMap

WeakMap 与 Map 在 API 上的区别主要是两个,一是没有遍历操作(即没有keys()、values()和entries()方法),也没有size属性。因为没有办法列出所有键名,某个键名是否存在完全不可预测,跟垃圾回收机制是否运行相关。这一刻可以取到键名,下一刻垃圾回收机制突然运行了,这个键名就没了,为了防止出现不确定性,就统一规定不能取到键名。二是无法清空,即不支持clear方法。因此,WeakMap只有四个方法可用:get()、set()、has()、delete()。

WeakSet

WeakSet构造函数的参数是数组,数组的成员只能是对象。

具备set、delete、has方法;WeakSet 没有size属性,没有办法遍历它的成员