阿里面经 - 暨我的面试阶段性总结

从这个论坛里学到了很多有用的东西,也认识了不少很多很有才华的小伙伴。虽然拖的时间有点久,但是还是想贡献点自己的力量回报论坛,帮助需要的同学们~


阿里面经

面的职位是后端开发,最终给了P6的offer, 地点杭州。

1. 算法

2. 基础知识

基础知识比较多且杂,我能回忆多少算多少吧。。。

  • Java的基本概念,一般看看什么Java Top 100 Questions就可以解决了

  • Java内存模型

  • JVM垃圾回收策略

  • HashMap实现,线程安全的数据结构

  • Hash冲突解决

  • volatile关键字

  • lock, synchronize

  • TCP三次握手、四次挥手

  • 常见的机器学习算法

  • 梯度下降

3. 系统设计,背景与行为问题

问了简历上的项目,根据项目展开延伸到一些框架的概念。所以不仅要会使用框架,明白每个框架的特性以及设计的意义也是很重要的。

  • Kafka的实现和相关概念
  • AWS的一些应用和service
  • 机器学习粗糙集
  • 介绍简历上的个项目
  • 设计一个电商平台

另外就是一些行为问题。一定要有自己的体会,如果时间允许的话可以加一些例子,不要假大空或者刻意吹捧。表现出自己的优势以及对这个职位,这个企业的兴趣就好。

  • 自我介绍
  • 职业规划
  • 现在的工作学到的经验
  • 对薪资期待
  • 事业中最看重的是什么东西

面试经验总结

我始终觉得授人以鱼不如授人以渔。就算面试的时候遇到原题,不能表现出如何一步步分析条件,解决问题的过程,还是不可能通过面试的。所以与其背面经,背概念,学会如何从失败中总结经验以及触类旁通才是最重要的~ 以下是我以一个大约一小时的面试过程来总结的一些经验,也算是为我自己这段时间的面试做个阶段性的总结吧。

0. 心态

是的,比起硬实力来讲,更重要的是自己的心态。在面dream company或者大厂的时候, 如果太看重得失,太在意结果的话在面试中表现出的水平往往会大打折扣,甚至还会犯一些平时绝对不可能犯的愚蠢错误,我自己就吃过不少这方面的亏。而当我不在意结果,心态轻松,甚至不做准备的去面试的时候往往会得到非常好的反馈。不是鼓励大家不好好准备哈,准备是必要的,但日常积累也是很重要的,其实很多时候日常的积累已经足够让我们通过面试了,这时候千万别让压力或者紧张拖了自己的后腿。

1. 自我介绍 (30s - 1m)

  1. 目的:
    a. 我的名字,在哪里工作,什么职位。
    b. 我的日常工作内容(概述),我对未来工作的期待(兴趣)。

  2. 例子:
    Hi, my name is XXX. I am a Software Developer working at XXX(公司), in XXX(城市). It is a Company focus on XXX(公司主营业务). As a member of XXX(团队/组), my main job is to XXX(工作内容). We also use a couple of cutting edge frameworks to improve the efficiency of our system, such as …(用的框架及目的). For now, I am looking for a new opprotunity that …(期待)。

2. 基础问题以及项目背景(5m - 10m)

  1. 为什么选择这家公司
    根据之前的对未来工作的期待结合这个职位的介绍进一步拓展:
    a. A lot of resources, which means more opprtunites to learn
    b. Talented people around, easy to get inspired
    c. Massive room to make impace, even for intern
    d. Since I’ve been working in XXX for X years, it seems to be a good fit for this role.

  2. 我的技术背景,兴趣与优势
    I have around X years experience as XXX. I am more interested in XXX. To be more specific, it included …
    关于自己的优势,要结合自己本身的优势与企业的核心文化来说。

  3. 项目介绍

  • 开始的时候一定不要长篇累牍纠结于细节。面试官问的时候直接用一句话来概括这个项目, 包括以下几点就行:
    a. 项目地点, I’ve done an internship/fulltime at company XXXX
    b. 团队 I was placed in XXXX team
    c.项目名称, our team was doing project XXXX,
    d.项目的目的 The project was doing XXXXX,
    e.我的贡献, specifically I was in charge of the feature XXXXXX
  • 如果面试官特指了某个项目问细节,再相应的展开。展开的时候可以根据特性分层叙述,比如可以分为前端后端,不同的service等等。项目叙述一定要清晰,面试官很可能没有接触过这个项目的技术,那么就要思考怎么叙述才能让一个没有相关背景的人也能听的懂。
  • 另外,可以准备一个模板来应对“你最具挑战性的一个项目是什么”这个问题。

3. 算法题 (30m - 35m)

  1. 明确题意
    理解题目的input, output以及目的,必要的时候要求面试官给一个例子过一遍,确认自己的理解是正确的。一般常见的需要确认的条件:
    a. input是不是总是合法的(是否为空,负数情况,越界)
    b. 给定对象是结构是什么,是否需要自己定义
    c. 列表是单列表还是双列表
    d. 对于时间空间有什么限制
    e. 暂时想这么多,以后再补。。。

  2. 大体思路
    能否通过有效的交流讲清楚一个复杂的概念或算法是面试中要考查的非常重要的一点。 叙述算法时可以口头简单过一个例子, 打表或是画图都是非常有用的方法,必要的时候可以用一些伪代码。另外,表现出自己是如何通过分析条件,一步步推理出可行的算法也是考查的重点(敲黑板,不要觉得见到原题就万事大吉了,如果没有表现解决推导问题的能力也很可能过不了面试)。可以简单提一下暴力算法,以及如何一步步优化算法,有什么优缺点等等。

  3. 写代码
    a. 跟面试官确认使用什么语言,函数的signiture, input, output
    b. 注意边界条件的检查(根据之前明确题意的部分来实现) ,避免重复的检查或者短路。
    c. 命名规范(有意义的命名但也不要过长)
    d. 必要时尽量使用子函数,使整个代码看上去干净,有条理。
    e. 写完代码后,别急着跟面试官说写完了,要先自己过一遍test case,把能改的bug,typo都处理掉。千万千万不要在面试官要求你跑test case的时候被抓出bug,非常非常非常的伤。。。
    f. 虽然很多公司强调要think loud,但是我本人在写代码的时候实在是做不到边说边写,非常容易分心。所以要先把自己的思路说清楚后再开始默默的写代码,如果有需要沉默思考的时候也要先跟面试官说明,一定不要出现没有预警的冷场。
    g. 如果非常确定复杂度的话,可以提一下复杂度。但如果不是很有把握,就不要自爆了。。。

4. 结束问题 (5m)

可以准备一到两个问题问面试官,但是重点是show passion,表现出自己对这个机会很感兴趣的样子。我一般在这个环节会问: what do you like most about XXX? 也有看到别人准备的非常好的问题,这里分享下:

  1. 事先去找找面试官的LinkedIn Profile, 看看面试官的背景,问问他为什么当初选了这家公司,刚进公司的时候有没有什么不适应或者需要注意的地方
  2. 问问面试官现在在做的project, 表示无比崇拜之意
  3. 问问未来公司的roadmap,表示自己对该公司的未来充满希望
  4. 问问组里需要什么样背景的人,然后推销自己

5. 不是结束的结束

其实,能否拿到好的offer也是有很多其他因素决定的,比如说运气,状态,背景与公司文化是否吻合等等。。。所以如果不幸没有通过,也不要对自己完全否定。只要你对这个行业有足够的热情,喜欢钻研技术,offer大包只不过是这个愉悦的过程中的副产品,看清得失,看轻得失。愿每个辛勤努力,永不言弃的程序猿/媛们都得找到自己如意的归宿~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章