阿里面试的那些二三事

技术面试

自我介绍

个人经历背景、经历过什么大起大落 做过什么有挑战的事情 每家公司自己的成长和挑战是?

项目:

项目怎么讲清楚? 面向的用户和客户是谁?体量有多少? 业务流程是什么样的? 有哪些模块? 用到了什么样的技术? 每种技术是如何选型的?为什么是这样的一个技术架构?架构有没有哪里不好的?

业务痛点和客户价值&衡量指标

衡量做的好坏的数字指标是?

角色:

项目负责人,1人负责整体工程端工作,架构设计 项目管理?

架构:

模块+模型+表结构+挑战+结果;
依赖了什么?对外输出了什么? 沉淀了什么?
都有哪些模块?相互之间的关联关系是什么? 各模块的解决的问题是? 为什么要这么设计? 为什么要这些表? 为什么要分库分表?

技术亮点&擅长的技术

挑战&难点&怎么解决的?

达成目标 业务和产品策略是什么?运营节奏是?

在技术选型上有没有其他的对比?为什么选择这个方案?

做这个项目,你最大的收获是什么?你觉得哪些地方可以改进?再来一次会怎么做

学到了什么?

团队定位

  • 整体的产品&技术架构是什么? 你们团队在里面的定位是?背的核心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的理解? 解决什么问题? 遇到什么问题? 如何建模? 做个 用例分析没? 怎么确定领域边界?问题域的划分?

  • 单点登录,cookie,session理解

    设计模式


有哪些设计模式?在哪些源码中看到过使用场景?如何设计? 如何实现?

线上问题经验

有没有遇到线上问题?怎么解决的? 有没有其他方案?解决效果如何? 有没有被复用?

  • 什么情况会出现 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面) 如果想快点面试,可以主动和面试官反馈 可加速流程

面试要心得体会

  • 简历上的技术点 : 所有写上去的都可能被问到 一定要准备好 如果不熟悉 尽量不要写进去
  • 可以投一些小公司面试面试 锻炼下自己, 准备好了之后在面试阿里,如果面试挂了会被记录在档,半年后才有机会在下一次面试
  • 回答问题前先听清楚问题 如果没听清楚可以跟面试官确认 然后结构化 简要回答 要有重心 别太扯一些无关的

  • 阿里面试的关键不只是技术基础,还有 个人潜力、思考等,不能只看技术

面试的一些经验分享

可主动在网上搜索下其他人的面试经验