真的勇士,敢于在跌倒的地方爬起来。
校招参加的第一场笔试,意料之中的不理想,但是从哪里跌倒的从哪里爬起来,把每次都当作查漏补缺,就没那么难受了(555…)
终于肝完论文了,补上二面凉经。。。
题型分为单选(162.5’)、多选(42.5’)、问答(210’)和编程(215’)
印象中感觉单选题不难,基本都是基础知识,除了前端必须的一些基础点,数据结构里面堆栈列表二叉树也要知道一点。
多选有一题不太清楚,input的type取值选项,我选了2个,去了MDN看一下,哦豁,这个选择还蛮多,对比一下,我漏选了一个。
简答题自由发挥,CSS选择器优先级和JS垃圾回收,感觉JS垃圾回收回答得不太好,不准确。
两个编程题最耗时间:js 驼峰命名和下划线互换,字母异位词分组(LeetCode原题)。一不小心忘记了时间,只来得及答完一个,结束后一搜,答案特别多,也有很简单的解法。
**1.垃圾回收机制
JS的垃圾回收机制定期对我们不再使用的变量、对象所占用的内存进行释放。局部变量正常生命周期中只在函数执行过程中存在,垃圾回收方式主要有两种:
一种是标记清除法,当变量进入执行环境时标记为“进入变量”,当变量离开执行环境时标记为“离开环境”,被标记为“离开环境”的变量可以被回收;js中的垃圾收集器运行时会给存储在内存中的所有变量都加上标记,然后去掉环境中的变量以及被环境中的变量引用的变量的标记,此后再被加上标记的变量被视为准备删除的变量,最后垃圾收集器完成内存清除,销毁带标记的值并回收其占用的空间。
一种是引用计数法,统计引用类型变量声明后被引用的次数,当次数为0时,该变量将被回收。本质是跟踪记录每个值被引用的次数。当声明一个变量并将一个引用类型值赋给该变量时,这个值的引用次数为1;若同一个值又被赋值给另一个变量,则该值的引用次数+1,但如果包含这个值引用的变量又取得了另外一个值,则这个值得引用次数-1,当这个值的引用次数为0时,则无法再访问这个值,就可回收其占用的内存空间。
V8引擎的垃圾回收机制,主要使用的是分代回收机制。
V8引擎将保存对象的堆进行了分代:对象最初被分在新生区,新生区的内存分配只需要保有一个指向内存区的指针,不断根据内存大小进行递增,当指针达到新生区的末尾,会有一次垃圾回收清理(小周期),清理掉新生区中不再活跃的死对象。对于超过2个小周期的对象,则需要将其移动至老生区。老生区在标记-清除或标记-紧缩的过程中进行回收。大周期进行并不频繁,通常在移动足够多的对象至老生区后才会发生。
2.驼峰命名和下划线互换
// 下划线转换驼峰
function toHump(name) {
return name.replace(/\_(\w)/g, function(all, letter){
return letter.toUpperCase();
})
}
// 驼峰转下划线
function toLine(name){
return name.replace(/([A-Z])/g, "_$1").toLowerCase();
}
为了避免首字母大写带来的下划线转换,加一个slice()方法:
// 驼峰转下划线
function toLine(name){
return name.replace(/([A-Z])/g, "_$1").toLowerCase().slice(1);
}
// 测试
let a = 'a_b2_345_cd2345';
console.log(toHump(a));
let b = 'AbCdefGhi';
console.log(toLine(b));
3.字母异位词分组
问题:
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
输出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function(strs) {
let res = {};
let len = strs.length;
for(let i=0;i
笔试很久通过复筛进入面试,邮件短信通知2天内电面,面试时间15分钟,因为中间有个周末,实际过了四天,下午直接电话来面的。
自我感觉面的不好,因为最近半个月都没怎么准备面试相关复习。主要问了以下几个问题,都是知道一些,但是感觉没讲清楚,整个过程差不多有30分钟。
通过一面大概三四天吧,准备毕业论文最紧张的时候,真的是挤时间复习了一下,主要把之前遇到的不会的重点看了下。可能因为我没有实习经历,面试官反而问的比较简单。然而,虽然面试体验很棒(面试官很nice)但还是挂在二面了。最后给了我一些建议(我请求的),多看看常用的数组字符串高阶函数,实习真正用的东西多了解下,提到我有吃没实习的亏。因为面完又忙着改论文,到现在才写二面面经,题目只记得一部分了。