思特沃克
1.前端海外岗,四月中旬收到笔试,写完后几天约一面,一面后两周约二面
2.大概两周后收到邮件答复一面过了约二面,结果点约面链接进去没有显示,通过该邮件咨询了下只要等待下次邀约就行。
3.结果几天后收到了感谢信,邮件咨询校招组也无回应,估计是招满了,比较无语
笔试
时长90分钟,有选择、 编程之类的,过了几天才记录,只记得三道编程题了
编程题会提供一些测试用例,有的不可见,需要自己打印检查问题
- 第一题:将数组里的数按顺序每两个一组组内两元素交换,比如
[1,2,3,4] => [2,1,4,3]
- 主要就是要注意测试用例中的特殊情况,不是数字或者出现
NaN
怎么解决
function swapAdjacent(array) {
// 循环的步长为 2
for (let i = 0; i < array.length; i += 2) {
// 正则判断方便一点
if (/[0-9]|NaN/.test(array[i]) && /[0-9]|NaN/.test(array[i + 1])) {
let t = array[i]
array[i] = array[i + 1]
array[i + 1] = t
}
}
return array
}
- 第二题:将数组里的数对称相加,如果得到的数组长度不为 2 则继续,比如
[6,1,2,5,8,10,6] => [12,11,10,5] => [17,21]
。用递归
function sum_two(input_array) {
let len = input_array.length
if (len === 2) return input_array
let a = []
for (let i = 0; i < Math.ceil(len / 2); i++) {
let j = len - i - 1
// 如果中间只有一个数,就把该数直接加入数组
if (j === i) {
a.push(input_array[i])
} else {
a.push(input_array[i] + input_array[len - 1 - i])
}
}
return sum_two(a)
}
- 第三题:移除字符串中的某所有字符,直接遍历判断一下返回一个新字符串就好了
function RemoveLetters(s, letters) {
let res = ''
for (let i = 0; i < s.length; i++) {
if (letters.includes(s[i])) continue
res += s[i]
}
return res
}
一面
给一个 github 仓库先自己研究,然后面试时面试官会出需求,当面写需求
代码需要写测试单元,用的 Jest,比较简单,头天晚上自学了一下就知道大概怎么用了
-
先做了下自我介绍
-
然后写代码。一个购物车的代码仓库,实现下面三个需求
- 实现打折20%的功能(简单,照猫画虎就好了)
- 实现以“BULK_BUY_2_GET_1”开头的产品就是买二送一(要点是送的那个产品得加进购物车,且价钱为零)
- 实现购物车总价值超过500打折5%(时间不多了,面试官简化了一下要求,直接在打折后的价格上再打折5%就好)
-
主要讲讲第二题,大概写了半小时,走了许多弯路
- 大体思路就是先遍历购物车,每有两件同样买二送一的产品就加一件的进去;然后在计算价格时,购物车每有三件同样的商品就将其中一件商品价格置为零
- 先得对购物车里的产品遍历,每有两个以“BULK_BUY_2_GET_1”开头且名称相同的产品就需要再加入一个同样的产品,别直接放进购物车,先放入一个数组中,遍历完再把数组中的产品加入购物车。(至于判断要加多少个可以用 Map 对象去存储每个商品出现的次数)
- 然后在计算价格的过程中,用 Map 对象去存储各商品出现的次数,当遍历到当前商品时,如果 Map 表里其次数已经出现过两次,就将当前商品价格置为零,且将其在 Map 表里的次数重置为零,保证每遇到同一商品三次就将第三次的商品价格置为零
-
备注:用 JS 的类实现的购物车,有点不习惯这种面向对象的编程,毕竟平常还是写页面更多一点
-
代码写完后突然要求英语介绍兴趣爱好,有点猝不及防,勉强说了几句。再随便聊了几句天就结束了。