阿里面试的那些二三事
技术面试
自我介绍
个人经历背景、经历过什么大起大落 做过什么有挑战的事情 每家公司自己的成长和挑战是?
项目:
项目怎么讲清楚? 面向的用户和客户是谁?体量有多少? 业务流程是什么样的? 有哪些模块? 用到了什么样的技术? 每种技术是如何选型的?为什么是这样的一个技术架构?架构有没有哪里不好的?
业务痛点和客户价值&衡量指标
角色:
架构:
模块+模型+表结构+挑战+结果;
依赖了什么?对外输出了什么? 沉淀了什么?
都有哪些模块?相互之间的关联关系是什么? 各模块的解决的问题是? 为什么要这么设计? 为什么要这些表? 为什么要分库分表?
技术亮点&擅长的技术
挑战&难点&怎么解决的?
达成目标 业务和产品策略是什么?运营节奏是?
在技术选型上有没有其他的对比?为什么选择这个方案?
做这个项目,你最大的收获是什么?你觉得哪些地方可以改进?再来一次会怎么做
学到了什么?
团队定位
- 整体的产品&技术架构是什么? 你们团队在里面的定位是?背的核心kpi是?
- 团队组织架构? 分多少团队 各自负责什么? 你们团队负责什么?你负责什么?你这一趴的定位是什么?
- 跟业务整体目标有什么关联? 你对目标体系做的增量价值是? 有什么创新方案?推动了谁?过程中经历过哪些困难? 怎么克服?
业务理解-目标驱动和行业对比意识
业务竞对分析:他们是怎么做的? 体量 ? 优劣势?
使命&愿景&用户价值?
团队背的核心KPI是?衡量的核心指标是?
有没有跟业务或者主管不一致的想法? 后面如何处理?如何证明自己? 后期的效果如何?
你对客户是否有拜访 跟客户有什么联动 自己有没有主动推动过一些事情并落地带来好结果?
有没有收到了什么负面反馈? 什么原因?如何改善? 成长是什么?
-
主动性&担当&工作成果&贡献-业务推动能力及其结果
主动发起并构建了统一的....平台,并解决了协同实习性等诸多问题问题,引入了规则引擎等技术框架,有非常好的发现问题、解决问题能力,对细节把控也比较好;
主动发起了...项目,在模型设计、数据存储、信息加密方面做了比较多的工作, 对业务与技术的理解不错。
技术-深度和视野
基础
基础数据结构的实现:linkedList arrayList hashmap treemap
hashmap 实现? 红黑树特性和原理? 复杂度?
HashMap在JDK8中如何解决死循环问题?
HashMap和HashSet关系
concurrentHashMap实现
常见的并发模块和类? -
volatile的作用和原理
ThreadPoolExecutor用法与关键参数关系?核心参数理解
进程间如何通讯,线程间如何通讯? 线程通讯:信号量、信号、锁
Threadlocal是怎样实现的? 注意些什么?
sleep()和wait()的区别,
进程间通信方式有哪些?各有什么优缺点,挑一两种说下使用场景
synchronize和重入锁的区别:
aqs 逻辑, 加锁和释放锁
重入锁下有几条队列?
cas理解、产生的问题、怎么解决?哪些类通过版本?
jvm内存结构?
栈溢出情况、新生代内存结构及其比例划分&为什么这么设计?
垃圾回收器类型和算法?G1 CMS使用场景?-
jvm常见参数? 常见分析指令? jps jmap jstack zprofile等?- 没怎么做个调优 Integer
类加载机制 双亲委派 为什么这么设计? 如何打破? Tomcat osgi jdbc如何做的? 其他语言 怎么做的额? node里的npm? -
自定义类加载器如何实现?注解的原理?如何实现自定义注解?
maven jar包 冲突解决方案? spring cloud 怎么做的? 版本代号-
如何排查类冲突?如何隔离冲突?如何自定义类加载器
spring aop的理解?用了哪些设计模型?动态代理理解? 有哪些实现方式?jdk cglib asm ?选型对比?
BeanFactory和ApplicationContext的差异?
spring 容器启动顺序和流程,扩展点BeanFactoryPostProcessor的加载流程?
- springcontext 管理bean 加载插件 , 没看过
spring事务传播机制 ?异常处理?
Spring IOC的初始化和生命周期?
spring的ioc启动流程简述:refresh方法、解析xml文件或注释、BeanDefinition、初始化上下文ApplicationContext
相互依赖 死循环问题 - 三级缓存 提前曝光 还没初始化先放到缓存里
springboot 和spring 的区别?何自定义stater、spring.factories实现自动配置,加载所有需要加载的bean?
bean factory和factory bean的区别 - ok
BIO/NIO/AIO各自特点及对应场景
NIO的在netty中的封装的模型及底层操作系统epoll的实现; select实现对比?
粘包 拆包
DDD的理解? 解决什么问题? 遇到什么问题? 如何建模? 做个 用例分析没? 怎么确定领域边界?问题域的划分?
-
设计模式
有哪些设计模式?在哪些源码中看到过使用场景?如何设计? 如何实现?
线上问题经验
有没有遇到线上问题?怎么解决的? 有没有其他方案?解决效果如何? 有没有被复用?
- 什么情况会出现 Full GC,什么情况会出现yong GC
- 调优经验? 为什么调整?分析过程是怎样的?调整了哪些参数?效果如何?(老系统 4g 堆空间 768M 当时 Young区比较频繁,dump日志 结合 zprofile 做分析,大量for循环创建对象,后面结合代码优化以及 堆空间升级 )
- 常见的cpu load过高 一般是什么问题。引申出是否用过top,jstat,jstack等 使用过top,jmap、jstack、jstat没有使用过。
- 查看任何进程下线程运行状态?jps
- 如何诊断java线程死锁?jstack;
- while(true){new thread().start();},内存和cpu飙高;
- 诊断死锁?1)看堆栈;2)select;3)java线程状态,死锁blocked;4)cpu占用率很高;
数据库
- 数据库引擎及其区别, 主键索引实现方式对比 ? 对于为何B+树比B树更适合做索引?优劣势对比?索引类型 ?
- 隔离级别、幻读理解和解决方案 间隙锁 mvvc的理解-
- 读写分离&分库分表 做过没?数据量有多大?分多少可库?基于什么做分库分表-用户id OR 时间 为什么?主键唯一主键id生成方案是?选型对比- shardding tddl mycat? 优劣势是什么?有没有什么限制? 各自核心原理是? -
- 分库分表的主键唯一主键id生成方案?
- 分表之后会遇到哪些问题 ?跨库分页如何解决? 如何实现数据的整体排序?
- 常见sql优化方式? 如何做分析?explain的使用和理解 每一列的含义是? 慢sql经验?
中间件&分布式:
- 分布式事务哪些实现方式?二阶段&三阶段等的区别和理解
- 跟memcache相比 Redis有哪些优缺点?Redis如何实现扩容?如何解决redis热点数据问题?
- redis集群模式&对比 汰换&失效策略
- redis的持久化方式?aof和rdb的区别?
- 缓存击穿 雪崩及其解决方案
- 其他 缓存 数据库? 对比? -
- 一致性hash 解决什么问题 、原理 -
- 分布式锁实现方式有哪些? 有没有什么可优化的空间?如何减少远程服务调用?
- 分布式系统如何做幂等设计?
- netty的reactor线程模型 select? zero copy , TCP粘包/拆包?
- es和solr & rpc 序列化 & netty mina & mq(kafka rocketmq metaq redis) & orm & 分库分表 & 缓存数据库(redis memcached) &
- 状态机 & 工作流 等中间件 实现有哪些?对比选型?优缺点是?为什么选择这种方式 跟其他的对比是? 背后的原理?遇到什么问题 怎么解决?取舍是什么?业务特点是怎么样的? 有遇到什么什么问题? 怎么解决?各自核心原理是?
- mq底层实现? 乱序&丢失&延时 如何解决?kafka的数据如何存储的? 查询索引如何设计的? 日志索引。
- rocketMQ的如何保证不丢以及消息是否能够一定被消费
- sentinel 本身的开销、集群限流 、 滑动窗口和令牌桶等实现对比(开销更大 但精准度更高)
- dubbo实现?有哪些模块?各个模块负责什么?选型和对比? 软负载是怎么实现的? -
- RPC的原理是?服务是怎么注册的
- rpc监控、运行容器,底层通信等细节;
- 服务注册技术选型,负载均衡机制、网络传输重失败试机制、网络传输框、客户端代理、服务端服务查找映射调用如何设计计与实现
- 怎么做全链路的追踪?
- zookeeper 节点类型? 集群部署节点角色和各自负责什么? 一致性协议理解?
- zk的读写过程和作用
- zk什么时候要选主及选主的逻辑;
- 公司自研中间件 相对 开源的 有什么不同?开源上有哪些类似的解决方案? 为什么要自研?能解决什么特殊问题?
源码
看过那些源码? 背后的原理? 设计的如何巧妙? 涉及到什么设计模式? 同类框架是如何做的?
著名开源项目的源码。 dubbo zookeeper redis mybatis spring tomcat netty等 相关源码如果看过最好
项目管理
为什么做这个项目?价值是?痛点是? 带领过多大的 项目 ?涉及多少团队 多少人力 过程中遇到什么阻碍 如何解决?风险应对?成长是?怎么做好项目管理?
团队管理
团队管理 上 有什么经验?如何发挥每个人的潜力? 如何保证成员成长? 如何能做好沉淀?
个人成长&影响力
- 负责统一调度系统等多个产品,有主导中大型系统经验
- 公司考核机制?目前级别? 工资情况?绩效情况 是否top? 在OYO2年都是A 优秀员工,在陆金所 第一年是C(后面还有E) 后面几年都是A? 有没有参加过晋升?晋升结果?
- 最近有没有面试过其他公司?进展如何?给到的薪资层级如何?上家公司薪资多少?期望薪资多少
- 在团队内会做个分享没?分享什么内容?
- 团队里有什么特殊贡献没?分享?分享什么?内推 内推几人? 专利?价值是?影响力如何
- 自己有很棒的开源项目
- 个人博客 有没有?
- 一周的工作任务是什么? 项目架构设计?一天写代码的时长有多少
- 业余时间在干什么(抽时间学一些课程、领域知识/)
- 成长经历是怎么样的? 每一年 半年 自己有哪些成长? 经历了什么?
- STAR模型,T和A,你做了什么样的Task,用了什么Action,取得什么结果,就是TAR。特别关注S,Situation,你在什么条件下做什么事情 (你这个部门多少人,跟你合作的上下游,上下左右都要看,你跟谁合作,汇报给谁,你下一个是谁,哪些活是你独立干的,独立干的时候起点是什)
学习习惯
- 学习方式?学习来源?github 技术群 公众号(具体哪些)
- 最近学习那些技术?接触了哪些新技术? 新技术 jdk9 10 新特性 ;云原生;servless理解;
- 每天花多少时间学习?
- 是否参与 过开源项目?影响如何?
最近看的一些书? 技术上的书籍- 阿里高可用架构、paper、github ? 项目管理? 软技能? 创新? 产品?
写技术文档,公众号,jdk源码、高并发、spring;我的IT技术路
分享 举行多次code review , 怎么阅读源码
infoq参加过一次;
-
个人规划:
3-5年的规划是什么?--短期想接触更多有挑战的项目成为资深工程师,进一步提升知识深度,长期成为架构师。
在线笔试
评估面后的1到2天左右,注意代码规范 和 答题思路 , 写点注释 ,代码整洁, 主要是 并发基础+设计模式+基本的数据结构和算法题(、排序算法、二叉树、红黑树、平衡树 等) [常见笔试题-自己也多在网上找找资料]
给定一个字符串,输出不含有重复字符的最长子串的长度。
输出杨辉三角,10行即可
例如:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
两个线程A,B按序输出 0-100之间的元素,线程A只负责输出质数,线程B负责输出其他元素。
a线程质数 1
a线程质数 2
a线程质数 3
b线程元素 4
a线程质数 5
单例的实现(懒汉 和 饿汉) 工厂模式 策略模式 模板模式等的实现
共计9个苹果,有2只猴子,一个猴子每次拿2个苹果,一个猴子每次拿3个苹果,如果剩余的苹果不够猴子每次拿的数量,则2只猴子停止拿苹果,请用java多线程模拟上面的描述并打印出过程
个人特质&潜力&稳定性面试:
面试岗位的理解?
可以了解了解我们做什么,自己也可以在网上找找相关资料。
面向的用户是谁?给用户带来了什么价值?商业模式是什么?是否看好?为什么?竞对是?优劣势?
本科-大学在哪里读的?
大学期间:参加SAP公司的举办的比赛:项目使用机器学习算法,预估二手车价格。前后端开发。获得一等奖(一等5个,还有1个特等将)。
大学2次获得人民奖学金,成绩前20%。
当了三年的班长,比较看重学习,倡导学习氛围,整个班三十几人,考研考了二十几个211 985。
获奖的情况
大学和公司期间 参加过什么比赛?是否获奖?
虽然是刚毕业三个月自己争取带项目,年度协作奖评选获得这个奖项。
为什么来杭州&离职原因
各个公司离职的原因?怎么积极回答好
家是上饶的,小孩刚出生。全家都过来,老婆目前全职带娃,支持来杭州。
加入阿里的诉求是?
其他考核点
- 过往历史的环境中有哪些东西是自己主动变的,有哪些东西是被动变的。主动变,怎么抓住主动变革的机会以及变革的成功的概率,结果怎么样?
- 当你跟你上司意见不一致你怎么处理?
- 哪些事情是别人都不赞成你做成了的
- 这个事情你在做的过程中,你最失望最灰心的是什么时候
- 你自己觉得最骄傲和自豪的事情是什么? 为什么?
其他
面试流程:
简历评估面 1面+笔试 2面 3面(包括HR面) 如果想快点面试,可以主动和面试官反馈 可加速流程
面试要心得体会
- 简历上的技术点 : 所有写上去的都可能被问到 一定要准备好 如果不熟悉 尽量不要写进去
- 可以投一些小公司面试面试 锻炼下自己, 准备好了之后在面试阿里,如果面试挂了会被记录在档,半年后才有机会在下一次面试
- 回答问题前先听清楚问题 如果没听清楚可以跟面试官确认 然后结构化 简要回答 要有重心 别太扯一些无关的
- 阿里面试的关键不只是技术基础,还有 个人潜力、思考等,不能只看技术
面试的一些经验分享
可主动在网上搜索下其他人的面试经验
- 干货 | 和Java程序员谈一谈阿里的面试心得 https://mp.weixin.qq.com/s/0DHCEFEzOlVvAV7U0OCpLg
- 2019年阿里技术面试题集锦(28道含答案) https://mp.weixin.qq.com/s/cZLpwNINT0GjSYKNC2grjA
- 一位阿里P7的面试题经验分享,希望能帮助到你 https://www.lmlphp.com/user/10804/article/item/424127/
- 阿里 P8 大牛的建议,工作 1-5 年的 Java 工程师如何让自己变得更值钱 https://xie.infoq.cn/article/ef604e55de0cd55bf3e970ca0
- 手握美团offer,结果背调红灯,哭了,网友:别小瞧背调公司 https://maimai.cn/article/detail?fid=1487089506&efid=F-S446BZaNjJFPqEeYLhGA&use_rn=1