面阿里P7,竟问这么简单的题目?

沙海 2021年5月19日05:14:12Java评论28字数 4122阅读13分44秒阅读模式
摘要

速读摘要

速读摘要文章源自JAVA秀-https://www.javaxiu.com/24061.html

在我参与的所有面试中,我都尽量期望能让候选人有所收获。根据面试官的风格,可能会选择开启视频,进行视频面试。跟我们在写实际项目代码一样,如果是对外暴露的接口,一定要对输入参数进行合法性校验。比较好的候选人一般写完代码之后,会主动自己写几个输入输出自测的。这道题目本身其实来源于Leetcode,我记得不错的话,原题就是直接要求修改原数组的情况下进行提交。文章源自JAVA秀-https://www.javaxiu.com/24061.html

原文约 3296 | 图片 18 | 建议阅读 7 分钟 | 评价反馈文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?

小黑格子屋 文章源自JAVA秀-https://www.javaxiu.com/24061.html

以下文章来源于程序猿石头,作者石头哥文章源自JAVA秀-https://www.javaxiu.com/24061.html

文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

程序猿石头文章源自JAVA秀-https://www.javaxiu.com/24061.html

清华毕业的打工仔,分享计算机领域的技术、职场和大学生学习方法,涉及后端技术、互联网、计算机基础、编程技术、程序员职场、程序员面试等话题。欢迎关注。文章源自JAVA秀-https://www.javaxiu.com/24061.html

文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

来源:程序猿石头文章源自JAVA秀-https://www.javaxiu.com/24061.html

作者:程序猿石头文章源自JAVA秀-https://www.javaxiu.com/24061.html

背景

大家好,我是石头哥。文章源自JAVA秀-https://www.javaxiu.com/24061.html

作为面试官,不管是社招还是校招,我都有多年的经验了。在我参与的所有面试中,我都尽量期望能让候选人有所收获。(当然也期望自己在面试中也有所收获)文章源自JAVA秀-https://www.javaxiu.com/24061.html

当面试完,不管是否通过,当候选人自己或通过 HR 转述表达感激之情时,作为面试官,心理还是蛮高兴的。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

HR/候选人的好评文章源自JAVA秀-https://www.javaxiu.com/24061.html

今天分享的这个问题是我在最近的阿里社招面试中的一道笔试题目。期望通过这道题目的解析,能够让大家了解面试的套路。从面试官角度解读面试过程,希望能让大家有收获。文章源自JAVA秀-https://www.javaxiu.com/24061.html

在正式解析题目之前,先给大家分享下在阿里在线笔试的流程。文章源自JAVA秀-https://www.javaxiu.com/24061.html

阿里在线 coding

需要说明的是,不同部门,不同面试官可能用到的工具或形式不一样。本文提到的是公司系统推荐工具。文章源自JAVA秀-https://www.javaxiu.com/24061.html

一般笔试前,面试官会通过公司的代码评测系统中,给候选人邮箱发送一份测评邀请。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

候选人收到的测评邀请文章源自JAVA秀-https://www.javaxiu.com/24061.html

居然暴露了年少时候的火星文 QQ 昵称?,还记得你第一个 QQ 昵称吗?欢迎评论区留言~文章源自JAVA秀-https://www.javaxiu.com/24061.html

点击链接,会进入到在线编程系统,如下图所示:文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

阿里在线测评系统文章源自JAVA秀-https://www.javaxiu.com/24061.html

该系统有内置系统题库(如下图,5000+道题目,不过我很少看),其实每个面试官基本都会有自己的小题库的。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

阿里面试题库(题目已打码)文章源自JAVA秀-https://www.javaxiu.com/24061.html

根据面试官的风格,可能会选择开启视频,进行视频面试。文章源自JAVA秀-https://www.javaxiu.com/24061.html

候选人可点击左上角切换不用的编程语言,甚至可以切换到 "vim" 模式进行编程。文章源自JAVA秀-https://www.javaxiu.com/24061.html

这里补充分享下石头使用的 vim 插件列表文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

另外,提醒下大家,这个系统只是实时在线共享编辑,并不像 leetcode 刷题网站那样能直接编译提交。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面试官其实也主要是考察思路,代码编写风格等,并不是说非得你写出代码能够 AC。文章源自JAVA秀-https://www.javaxiu.com/24061.html

题目

下面,回到本文的题目,我将分享在面试过程中遇到的各种场景。文章源自JAVA秀-https://www.javaxiu.com/24061.html

原本以为这道题目是一道非常简单的题目,但在实际面试过程中,部分候选人的表现却有些出乎意料。文章源自JAVA秀-https://www.javaxiu.com/24061.html

题目本身针对社招P6、P7开发岗位。需要说明的是,这个题目只是整个面试过程中的一个很小的考察环节,能够答对这道题目不代表就一定能通过整个面试。文章源自JAVA秀-https://www.javaxiu.com/24061.html

一般这个题目回答完毕后,后面还会有一道题目。不过很多时候,很多人连这道题目也不会。文章源自JAVA秀-https://www.javaxiu.com/24061.html

// 有序数组去重 输入:[0, 1, 1, 2, 3, 3] 输出:[0, 1, 2, 3]

这也太简单了吧?看到这里,大家先不要慌着急退出。请耐心看完……文章源自JAVA秀-https://www.javaxiu.com/24061.html

面试过程

部分候选人,看到这个题目,然后二话不说,就直接开始写了。文章源自JAVA秀-https://www.javaxiu.com/24061.html

比如,用 Python 的同学可能直接如下;文章源自JAVA秀-https://www.javaxiu.com/24061.html

foo = [0, 1, 1, 2, 3, 3]foo = set(foo)print(foo)

候选人:写好了。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面试官:恩。set 确实能去重,你这个实现跟 foo 是不是有序是不是没有关系?这个输出是有序的吗?文章源自JAVA秀-https://www.javaxiu.com/24061.html

候选人: set 本来就是升序的。确实跟输入是否有序没关系。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面试官:那题目输入是降序的呢?另外,你知道这个时间复杂度是多少吗?文章源自JAVA秀-https://www.javaxiu.com/24061.html

候选人:如果是降序,那后面输出的时候再 sort 一下就好了。时间复杂度,这个。。。文章源自JAVA秀-https://www.javaxiu.com/24061.html

我们拿到一个面试题目,一定要和面试官先沟通清楚,这个题目需求是什么。沟通,也是面试考察的一个重点。相当于,我们拿到一个产品的需求,得通过来回沟通,揣摩用户需求。文章源自JAVA秀-https://www.javaxiu.com/24061.html

对应到代码面试题而言,就是要通过和面试官沟通,对方期望的是一个怎样的结果。是直接写几行代码解决这个问题呢?还是明确设计一个接口实现,输入输出如何?文章源自JAVA秀-https://www.javaxiu.com/24061.html

类似的,用 Java 的候选人,写出来了如下代码:文章源自JAVA秀-https://www.javaxiu.com/24061.html

public static void main(String[] args) {    List<Integer> inputNumbers = Arrays.asList(0, 1, 1, 2, 3, 3);    System.out.println(inputNumbers.stream().distinct().collect(Collectors.toList()));}

面试官内心OS:恩,Java 8 stream API 应该用得多。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面试官:恩,能完成功能。我把题目明确一下,请自行设计接口(方法)完成上述功能,尽量用时间复杂度低的方式实现。文章源自JAVA秀-https://www.javaxiu.com/24061.html

于是又开始写了。文章源自JAVA秀-https://www.javaxiu.com/24061.html

public List<Integer> func(List<Integer> a);....

面试官:请注意,编码风格,包括函数、变量命名等都在我们的考察范围。文章源自JAVA秀-https://www.javaxiu.com/24061.html

又改了下。文章源自JAVA秀-https://www.javaxiu.com/24061.html

public List<Integer> quchong(List<Integer> input) {  ...}....

中英夹杂,其实不是很推荐。候选人如果能主动沟通,比如 “去重” 单次一时忘了,先用拼音替换等等都是 OK 的。一再强调,一定要多沟通。文章源自JAVA秀-https://www.javaxiu.com/24061.html

比如比较好的方法签名如下(举例),通过函数名称知道背后的逻辑,入参 sortedData 也能看到,要求输入的有序的。文章源自JAVA秀-https://www.javaxiu.com/24061.html

public List<Integer> removeDuplicated(List<Integer> sortedData) {}

此时,如果候选人能主动如下沟通,肯定有加分的。文章源自JAVA秀-https://www.javaxiu.com/24061.html

  • 输入都是正整数吗?这里可以设计成泛型(或 C++ 模板),方便扩展,不一定要求是Integer,可以是 Double, Long 等等都可以。我就简单用 Integer 代替了。文章源自JAVA秀-https://www.javaxiu.com/24061.html

  • 输入确保是有序的吗?我有必要检查一遍输入是否有序吗?文章源自JAVA秀-https://www.javaxiu.com/24061.html

接着看函数的实现。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面试官:你可以尝试不用库函数,setdistinct 之类的。充分利用输入是有序数组。你想想,有序数组的特点,如果重复的数字,那么一定是相邻的。文章源自JAVA秀-https://www.javaxiu.com/24061.html

候选人:哦,我好像知道了。文章源自JAVA秀-https://www.javaxiu.com/24061.html

其实,一般这样稍微提示,就能写出来了。文章源自JAVA秀-https://www.javaxiu.com/24061.html

但,还是有部分候选人嘴里知道了,还是长时间没有敲键盘。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面试官:你前后用两个“指针”(下标),前面一个指针 2一直往后找,直到找到一个和指针 1 代表的数字不相同的,是不是就是我们预期想保留的?文章源自JAVA秀-https://www.javaxiu.com/24061.html

其实很多时候,大部分人,还是能写出如下代码的。只是,希望候选人在写代码的时候,一定要注意边界等情况。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?候选人答案,大家来找茬文章源自JAVA秀-https://www.javaxiu.com/24061.html

跟我们在写实际项目代码一样,如果是对外暴露的接口,一定要对输入参数进行合法性校验。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面试官: 如果 inputNumbers 为空会怎么样?文章源自JAVA秀-https://www.javaxiu.com/24061.html

候选人:啊,忘了。我再加个为空的判断。文章源自JAVA秀-https://www.javaxiu.com/24061.html

噼里啪啦,加了是否为空的判断了。文章源自JAVA秀-https://www.javaxiu.com/24061.html

if (Objects.isNull(inputNumbers)) {  return inputNumbers;}

面试官: 如果 inputNumbers 数组只含有 1 个元素呢?你的输出是啥?文章源自JAVA秀-https://www.javaxiu.com/24061.html

候选人:啊,有问题。我再改改。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面试官: 你自己再写几个测试用例吧。如果别人设计了这样一个接口,你会从哪些方面考虑去进行测试。文章源自JAVA秀-https://www.javaxiu.com/24061.html

提醒大家,在写完代码之后,一定要注意自测。比较好的候选人一般写完代码之后,会主动自己写几个输入输出自测的。我们在实际项目中也是,要注意自测,写单测覆盖等。文章源自JAVA秀-https://www.javaxiu.com/24061.html

经过来回几次修改,可能代码主题逻辑也写得差不多了。这个时候,可能面试官会进行“压力”面试(面试官可能心里也没有答案)。文章源自JAVA秀-https://www.javaxiu.com/24061.html

面试官:如果我非要你对这段代码进行优化,你会如何优化?我举个例子,比如你的第 7 行代码。文章源自JAVA秀-https://www.javaxiu.com/24061.html

List<Integer> distinctNumbers = new ArrayList<>();

面试官可能随时从中跳出一个知识点和候选人进行讨论的。这里,就考察候选人是否对 ArrayList 扩容过程有所了解。文章源自JAVA秀-https://www.javaxiu.com/24061.html

比如前文中 set 的实现,候选人若对某种语言的不熟悉,可以主动讲述对其他熟悉的语言的了解,比如 C++里面的可能有 set 和 unordered_set 不同的实现。作为面试官也不一定清楚的,再次强调,沟通!文章源自JAVA秀-https://www.javaxiu.com/24061.html

面试官:如果允许修改输入数组,怎样实现能使空间复杂度从 O(N) 减小到 O(1)文章源自JAVA秀-https://www.javaxiu.com/24061.html

候选人:好的。那我接口定义稍微改下,不返回了。文章源自JAVA秀-https://www.javaxiu.com/24061.html

这道题目本身其实来源于 Leetcode,我记得不错的话,原题就是直接要求修改原数组的情况下进行提交。文章源自JAVA秀-https://www.javaxiu.com/24061.html

这里也提醒下大家,如果你曾经遇到这道题目。也一定要和面试官沟通清楚题目要求,此题目不一定非此题目。比如,面试官可没说可以直接修改输入?文章源自JAVA秀-https://www.javaxiu.com/24061.html

我印象特别深,在我当初毕业校招面试微软的时候,就遇到了一个自己做过的“原题,我噼里啪啦写完,最后面试官告诉我,题目 XX条件不一样。文章源自JAVA秀-https://www.javaxiu.com/24061.html

另外,一般在面试过程中,遇到刷过的原题,特别是校招的时候,候选人可以主动提出说这个题目刚做过。我曾经作为候选人参加一些公司的校招时,就被要求如果做过的题目,要主动说。文章源自JAVA秀-https://www.javaxiu.com/24061.html

不过,你不说也无所谓的。一个优秀的面试官,肯定不是为了考查某道具体的题目而考查的。一个优秀的候选人可以给面试官下套引导答题的文章源自JAVA秀-https://www.javaxiu.com/24061.html

好了,有了前文的基础,可直接修改原输入的情况下,应该能写出来了吧?只需要稍微变动上面的代码即可。文章源自JAVA秀-https://www.javaxiu.com/24061.html

欢迎留言讨论你的答案,让大家来找茬文章源自JAVA秀-https://www.javaxiu.com/24061.html

后记

题目曝光了,以后面试可能会酌情考虑不出这道题目了。文章源自JAVA秀-https://www.javaxiu.com/24061.html

啊,我好像多虑了。 ? 感觉完全没必要担心呀,毕竟题目也不是我原创的(属于Leetcode超级Easy的题目了)。?文章源自JAVA秀-https://www.javaxiu.com/24061.html

强调一下,面试这道题目并不是想考察这个题目本身,期望以这道题目为契机,考察候选人在解决实际问题时候的沟通能力(本文一直强调多沟通,多沟通,多沟通),逻辑思维方式等。文章源自JAVA秀-https://www.javaxiu.com/24061.html

当然最后也会看看实实在在的 Code,从编码过程中看候选人的编程习惯,编码风格等等。文章源自JAVA秀-https://www.javaxiu.com/24061.html

-End-

文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

前端月趋势榜:4 月最热门的 20 个前端开源项目文章源自JAVA秀-https://www.javaxiu.com/24061.html

文章源自JAVA秀-https://www.javaxiu.com/24061.html

文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

每天穿女装上班的大厂程序员:我知道自己是个男生文章源自JAVA秀-https://www.javaxiu.com/24061.html

文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

公司能不能监控到微信聊天?文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目? 可乐记得加冰,爱我就要置顶 面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

面阿里P7,竟问这么简单的题目?素质三连biubiubiu~面阿里P7,竟问这么简单的题目?文章源自JAVA秀-https://www.javaxiu.com/24061.html

继续阅读
速蛙云 - 极致体验,强烈推荐!!!购买套餐就免费送各大视频网站会员!快速稳定、独家福利社、流媒体稳定解锁!速度快,全球上网、视频、游戏加速、独立IP均支持!基础套餐性价比很高!这里不多说,我一直正在使用,推荐购买:https://www.javaxiu.com/59919.html
weinxin
资源分享QQ群
本站是JAVA秀团队的技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定