今年前段时间,有了换份工作的想法,向阿里投递了自己的简历,一路跌跌撞撞,经历了多轮面试,终于收到了阿里的 Offer。将我遇到的问题和自己的分析 总结成如下这篇文章。不能保证我所遇到的问题能不能在后面同学面试过程中有任何的参考性,只能说这是我真实遇到的题目
第一轮
- 自我介绍一下
- 在你的工作中,哪些事情是由你主导的?
- 你工作中最有挑战的事情说一说?
- 其实前面这三道题目都是面试官在试图快速了解你的背景。
- 首先自我介绍不可过长,啰里八嗦的很减分。
- 要突出自己的owner意识
- 要体现自己业务的复杂场景
- 总之,这几道题还是不能不重视,最好能在面试之前准备下,自己录音听下自己在说什么
- 其实前面这三道题目都是面试官在试图快速了解你的背景。
- 可以说一下你理解的浏览器工作的原理嘛?
- 如果让你设计一下小程序你会怎样设计?
- Dart 是 AOT 的 还是 JIT 的?
- Vue 的 VitureDom 有怎样的收益?
第二轮
1. 字符串高亮
题目描述:
假设有指定一个 DOM,要求把 DOM 中的指定连续字符串高亮。
<!-- DOM 1, 高亮 "高兴" -->
<span id="dom1">
你好,很高兴见到你
</span>
<!-- DOM 1, 高亮 "高兴" -->
<span id="dom2">
你好,很高<span>兴见到</span>你
</span>
<!-- DOM 1, 高亮 "高兴" -->
<span id="dom3">
<span>你好,很高</span>兴见到你
</span>
/**
* 高亮指定 DOM 中的字符串
* @param {HTMLElemnt} 需要高亮的元素
* @parma {string} 指定高亮的字符串
* */
function highlight(dom, string) {
/**
* 此处写代码逻辑
*/
...
}
2. 用正则实现一个简单的 function 转换功能
// 将普通的函数声明方式,转化为 es6 语法的匿名函数声明
// 不用考虑闭包、特殊符号、函数上下文等边际情况
// 入参格式参考1:
const inputFuncStr = "function a () { console.log('transfer') }";
// 出参格式参考1:
const outputFuncStr = "const a = () => { console.log('transfer') }";
export function transfer(normalText) {
/**
* 此处写代码逻辑
*/
return ...;
}
3. 实现一个函数,可以对 url 中的 query 部分做拆解,返回一个 key - value 形式的 object
// 入参格式参考:
const url = "http://sample.com/?a=1&b=2&c=xx&d#hash";
// 出参格式参考:
const result = { a: "1", b: "2", c: "xx", d: "" };
export function querySearch(url) {
/**
* 此处写代码逻辑
*/
return ...;
}
4. 实现一个 arrange 函数,可以进行时间和工作调度
// [ > … ] 表示调用函数后的打印内容
// arrange('William').execute();
// > William is notified
// arrange('William').do('commit').execute();
// > William is notified
// > Start to commit
// arrange('William').wait(5).do('commit').execute();
// > William is notified
// 等待 5 秒
// > Start to commit
// arrange('William').waitFirst(5).do('push').execute();
// 等待 5 秒
// > William is notified
// > Start to push
function arrange(taskId) {
/**
* 此处写代码逻辑
*/
}
5. 实现findFibonacci函数,在一堆正整数中,找到最长的一组斐波那契数列段
// 斐波那契数列:一个递增的正整数数列,从第三位起,每个数字都是前两位数字之和,不一定要从 1 开始
// 入参格式参考:
const inputArr = [13, 9, 3, 8, 5, 25, 31, 11, 21];
// 出参格式参考:
const sequence = [3, 5, 8, 13, 21];
function findFibonacci(arr) {
/**
* 此处写代码逻辑
*/
return ...;
}
只能说遇到笔试题,首先保证代码运行结果的正确性,其次是尽可能多的提供测试用例,最后,要注意在笔试过程中的与面试官的沟通。
第三轮
1. 你遇到过最难的问题
2. 各种排序算法的思路,时间复杂度。
3. 如何设计高并发的系统
4. 你未来的职业规划是怎样的
唠叨
时间过去还是蛮久了,能够想起来的问题都在上面了,有一点要啰嗦一下的是,最近也发现了好多人,说我平时工作在用 Vue
, 那么 React
相关的问题就一点都不会, 这样就很减分。其实面试面到最后,要展现的是你应对复杂问题的能力,以及平时所积累下来的所谓的工程师的素养。希望大家今年都能收获多多的如意的Offer