面试_个人被问到的
-
数组函数
some
Array.prototype.some() 方法测试数组中是不是至少有 1 个元素通过了被提供的函数测试。它返回的是一个 Boolean 类型的值。
const array = [1,2,3,4,5];
const even = (element) => element % 2 === 0; //判断参数是否能被2整除
console.log(array.some(even));//some会遍历数组,依次调用even函数并吧当前的值传递进去,有一个成立则返回true反之为false
map
Array.prototype.map()方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。
const array = [1 , 4, 5, 7];
const array1 = array.map( v => x * 2);
console.log(array1); //result 2 8 10 14
filter
Array.prototype.filter()
方法创建给定数组一部分的浅拷贝,其包含通过所提供函数实现的测试的所有元素。
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']; const result = words.filter(word => word.length > 6); console.log(result); // expected output: Array ["exuberant", "destruction", "present"]
-
对象函数
assign
Object.assign()
方法将所有可枚举(Object.propertyIsEnumerable()
返回 true)的自有(Object.hasOwnProperty()
返回 true)属性从一个或多个源对象复制到目标对象,返回修改后的对象。
const target = { a: 1, b: 2 }; const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source); console.log(target); // expected output: Object { a: 1, b: 4, c: 5 } console.log(returnedTarget); // expected output: Object { a: 1, b: 4, c: 5 }
-
Map and Set(映射和集合)
1 . map是一个带键的数据项的集合,就像一个 Object
一样。 但是它们最大的差别是 Map
允许任何类型的键(key)。
new Map()
—— 创建 map。map.set(key, value)
—— 根据键存储值。map.get(key)
—— 根据键来返回值,如果map
中不存在对应的key
,则返回undefined
。map.has(key)
—— 如果key
存在则返回true
,否则返回false
。map.delete(key)
—— 删除指定键的值。map.clear()
—— 清空 map。map.size
—— 返回当前元素个数。
let map = new Map();
map.set('1', 'str1'); // 字符串键
map.set(1, 'num1'); // 数字键
map.set(true, 'bool1'); // 布尔值键
// 普通obj会吧键转化为字符串 Map 还可以使用对象作为键。
// Map 则会保留键的类型,所以下面这两个结果不同:
alert( map.get(1) ); // 'num1'
alert( map.get('1') ); // 'str1'
alert( map.size ); // 3
如果要在
map
里使用循环,可以使用以下三个方法:
map.keys()
—— 遍历并返回一个包含所有键的可迭代对象,map.values()
—— 遍历并返回一个包含所有值的可迭代对象,map.entries()
—— 遍历并返回一个包含所有实体[key, value]
的可迭代对象,for..of
在默认情况下使用的就是这个。
// 遍历所有的键(vegetables)
for (let vegetable of recipeMap.keys()) {
alert(vegetable); // cucumber, tomatoes, onion
}
// 遍历所有的值(amounts)
for (let amount of recipeMap.values()) {
alert(amount); // 500, 350, 50
}
// 遍历所有的实体 [key, value]
for (let entry of recipeMap) { // 与 recipeMap.entries() 相同
alert(entry); // cucumber,500 (and so on)
}
- Object.entries() --- 从对象创建map
- Object.fromEntries() --- 从map创建对象
Set
是一个特殊的类型集合 —— “值的集合”(没有键),它的每一个值只能出现一次。它的主要方法如下:
new Set(iterable)
—— 创建一个set
,如果提供了一个iterable
对象(通常是数组),将会从数组里面复制值到set
中。set.add(value)
—— 添加一个值,返回 set 本身set.delete(value)
—— 删除值,如果value
在这个方法调用的时候存在则返回true
,否则返回false
。set.has(value)
—— 如果value
在 set 中,返回true
,否则返回false
。set.clear()
—— 清空 set。set.size
—— 返回元素个数。
set.add(value)
并不会发生什么改变。这就是 Set
里面的每一个值只出现一次的原因。
let set = new Set();
let john = { name: "John" };
let pete = { name: "Pete" };
let mary = { name: "Mary" };
// visits,一些访客来访好几次
set.add(john);
set.add(pete);
set.add(mary);
set.add(john);
set.add(mary);
// set 只保留不重复的值
alert( set.size ); // 3
for (let user of set) {
alert(user.name); // John(然后 Pete 和 Mary)
}
let set = new Set(["oranges", "apples", "bananas"]);
for (let value of set) alert(value);
// 与 forEach 相同:
set.forEach((value, valueAgain, set) => {
alert(value);
});
Map
中用于迭代的方法在 Set
中也同样支持:
set.keys()
—— 遍历并返回一个包含所有值的可迭代对象,set.values()
—— 与set.keys()
作用相同,这是为了兼容Map
,set.entries()
—— 遍历并返回一个包含所有的实体[value, value]
的可迭代对象,它的存在也是为了兼容Map
。
总结 : map和setMap
—— 是一个带键的数据项的集合 Set
—— 是一组唯一值的集合。
在 Map
和 Set
中迭代总是按照值插入的顺序进行的,所以我们不能说这些集合是无序的,但是我们不能对元素进行重新排序,也不能直接按其编号来获取元素。
面试百科总结 :
1 . 准备简历编写和面试前的准备
1 . 针对性写简历
2 . 面试时的菜单 不要招摇 梳理简历上的技术栈 梳理出可能问到什么问题
3 . 简历是面试的时候的点菜用的菜单
4 . 拿到面试邀请的时候 要针对性做功课 了解公司 部门
5 . 利用脑图来梳理知识点 和 要讲的项目 展开 脑图
2 . 基础知识点与高频考题解析
1 . ECMAScript定义了6种基础数据类型
boolen number string null underfiend symbol
2 . 判断数据类型的方法
typeof instanceof constructor
3 . 值类型 和 引用类型
值类型 : Boolean、String、Number、Undefined、Null
引用类型 : Object 类 所属 Date、Array、Function
在参数传递方式上,值类型是按值传递,引用类型是按共享传递。
按值传递的类型,复制一份存入栈内存,这类类型一般不占用太多内存,而且按值传递保证了其访问速度。按共享传递的类型,是复制其引用,而不是整个复制其值(C 语言中的指针),保证过大的对象等不会因为不停复制内容而造成内存的浪费。
3 . 浏览器相关知识点与高频考题解析
浏览器渲染过程
浏览器根据 DNS 服务器得到域名的 IP 地址
向这个 IP 的机器发送 HTTP 请求
服务器收到、处理并返回 HTTP 请求
浏览器得到返回内容
4 . 开发环境相关知识点与高频考题解析
GIT多人协作开发
1. 多人协作开发,就不能使用master分支了,而是要每个开发者单独拉一个分支,使用git checkout -b <branchname>,运行git branch可以看到本地所有的分支名称。
2. 自己的分支,如果想同步master分支的内容,可运行git merge master。切换分支可使用git checkout <branchname>。
3. 在自己的分支上修改了内容,可以将自己的分支提交到远程服务器
SVN
SVN 是每一步操作都离不开服务器,创建分支、提交代码都需要连接服务器。而 Git 就不一样了,你可以在本地创建分支、提交代码,最后再一起 push 到服务器上。因此,Git 拥有 SVN 的所有功能,但是却比 SVN 强大得多。
5 . 如何介绍项目及应对项目细节追问
发现你简历的一个项目,直接让你介绍下这个项目
让你回忆下你做过的项目中,最值得分享(最大型/最困难/最能体现技术能力/最难忘)的
如果让你设计 xx 系统/项目,你会怎么着手干
1. 介绍项目背景 : 这个项目为什么做,当初大的环境背景是什么?还是为了解决一个什么问题而设立的项目?背景是很重要的,如果不了解背景,一上来就听一个结论性的项目,面试官可能对于项目的技术选型、技术难度会有理解偏差,甚至怀疑是否真的有过这样的项目。
2. 承担角色
项目涉及的人员角色有哪些,自己在其中扮演的角色是什么?
3. 最终的结果和收益
项目介绍过程中,应该介绍项目最终的结果和收益,比如项目最后经过多久的开发上线了,上线后的数据是怎样的,是否达到预期,还是带来了新的问题,遇见了问题自己后续又是怎样补救的。
4. 有始有终:项目总结和反思
收获有哪些?
是否有做得不足的地方,怎么改进?
是否具有可迁移性?
再比如:做这个项目的时候,你做得比较出彩的地方,可以迁移到其他项目中直接使用,小到代码片段,大到解决方案,总会有你值得总结和梳理的地方。
介绍完项目总结这部分,也可以引导面试官往自己擅长的领域思考。比如上面提到项目中的问题,可以往你擅长的方面引导,即使面试官没有问到,你也介绍到了。
6 . 谈钱不伤感情
跟 HR 沟通的技巧
1. 不要急于出价
不要急于亮出自己的底牌,一旦你说出一个薪酬范围,自己就不能增加薪酬了,还给了对方砍价的空间。而且一个不合理的价格反而会让对方直接放弃。所以不要着急出价,先让对方出价。
2. 要有底气足够自信
现在我已经有某个公司多少 K 的 offer
如果 HR 表示你想要的薪酬不能满足,这时候你应该给出自己评估的依据,是根据行业职级标准还是自己现有薪酬范围,这样做到有理有据。
工作三年的前端一般工作范围是10-12k ,大学同学的薪资
7 . 面试注意事项
面试后的提问环节
1. 面试是一个双向选择的事情,所以面试后一般会有提问环节。在提问环节,候选人最好不要什么都不问,更不要只问薪水待遇、是否加班之类的问题。
2.其实这个时候可以反问面试官了解团队情况、团队做的业务、本职位具体做的工作、工作的规划,甚至一些数据(可能有些问题不会直面回答)。
3.还可以问一些关于公司培训机会和晋升机会之类的问题。如果是一些高端职位,则可以问一下:自己的 leader 想把这个职位安排给什么样的人,希望多久的时间内可以达到怎样的水平。
面试禁忌
1不要对老东家有太多埋怨和负面评价
2不要有太多负面情绪,多表现自己阳光的一面
3不要夸大其词,尤其是数据方面
4不要贬低任何人,包括自己之前的同事,比如有人喜欢说自己周围同事多么的差劲,来突出自己的优秀
5不要过多争辩。你是来展现自己胜任能力的,不是来证明面试官很蠢的
面试后的总结和思考
1面试完了多总结自己哪里做得不好,哪里做得好,都记录下来,后续扬长避短
2通过面试肯定亲身体会到了公司团队文化、面试官体现出来的技术能力、专业性以及职位将来所做的事情,跟自己预期是否有差距,多个 offer 的话多做对比
3每次面试应该都有所收获,毕竟花费了时间和精力。即使面不上也可以知道自己哪方面做得不好,继续加强。
8 . 总结
准备阶段简历应该针对性来写
简历提到的项目、技能都要仔细回想细节,挖掘可能出现的面试题
拿到面邀之后准备:
开场问题:自我介绍、离职原因等
了解面试官、了解公司和部门做的事情
知识梳理推荐使用思维导图
技术面部分
集中梳理了 ECMAScript 基础、JS-Web-API、CSS 和 HTML、算法、浏览器和开发环境六大部分内容,并且就一些高频考题进行讲解。
非技术面试部分
主要从软技能和项目介绍两个部分来梳理。在软技能方面,介绍了工程师从业人员应该具有的软技能,并且通过几个面试真题介绍了怎么灵活应对面试官;在项目介绍小节,推荐按照项目背景、承担角色、项目收益和项目总结反思四步来介绍,并且继续推荐使用思维导图方式来梳理项目的细节。
1 。 吧简历上提到的技术 , 还有面试过程中可能问到项目的问题 先了解清楚
2 。 创建前端技术思维导图 , 帮忙梳理还差什么知识点 而不是像之前一样 拆东补西
3 。 可能需要学习uniapp 熟练ts vue3
4 。 补习便签上的知识点