写在片头:声明,勿杠
首先简单说一下,这三次面试阿里并非一次性去面的,实际上第一次面试时候还在大四,找的实习岗,不太清楚是什么部门,别问我为何还记得面试题,有记录和复盘的习惯,再问就是杠。程序员
我的背景不详细多说,学历双非本科,不是应届生,工做年限不长,技术不是大牛,但也非小白,面经分享是想给正面试的同行一些建议和鼓励,但愿可以多多支持。面试

注意:下文内容中会提到一些简历模板、学习笔记、学习脑图、Java电子书籍和视频等,须要的redis
戳此传送门获取算法
One:三顾茅庐,七面阿里,拿下25K*16offer
——一顾阿里一面被怼(未知部门)数据库
阿里巴巴未知部门一面(问的问题让我感受是偏金融的部门,面试官很严肃,如今想一想都有些后怕)数组
- 自我介绍
- 开源项目贡献过代码么?(回答没有,很尴尬)
- 以前在部门作什么?简单介绍一下业务吧,内部有哪些系统,做何交互过程说一下
- Dubbo踩过哪些坑?分别是怎么解决的?(我答了异常处理时业务异常捕获的问题,自定义了一个异常拦截器)
- 说下你对线程安全的理解
- 事务有哪些特性?
- 怎么理解原子性?
- 讲一下乐观锁和悲观锁的区别,这两种锁在Java和MySQL分别是怎么实现的?
- HashMap为何不是线程安全的?怎么让HashMap变得线程安全?二者的区别是什么?
- jdk1.8对ConcurrentHashMap作了哪些优化?为何这样优化?
- redis主从机制了解么?怎么实现的?
- 有过GC调优的经历么?(有点虚,答得不是很好)
- List,Map,Set三个接口存取元素时,各有什么特色?
- TreeMap和TreeSet在排序时如何比较元素?Collection工具类中的sort()方法如何比较元素?
- Thread类的sleep()方法和对象的wait()方法均可以让线程暂停执行 它们有什么区别?
- 线程的sleep()方法和yield()方法有什么区别?
- 当一个线程进入一个对象的synchronized方法A以后 其余线程是否可进入此对象的synchronized方法b?
- 请说出与线程同步以及线程调度相关的方法
- synchroized关键字的用法?
- 启动一个线程是调用run()仍是start()方法?
- 有什么想问的么?
——二顾阿里二面惨败(菜鸟网络)缓存
阿里巴巴菜鸟网络一面:安全
- 先来了个自我介绍
- 而后介绍了本身简历里写到的一个比较熟悉的项目(询问了项目的细节及具体的实现)
- 接着面试官开始针对项目进行提问:(1)高并发的状况下,Kafka消费到第一条记录,在下沉服务处理好,但因为网络抖动没有正确返回给上层,上层服务再次调用服务,怎么样保证只处理一次请求?(我答了分布式锁,介绍实现)(2)有本身用Redis实现过吗?说说看
- 介绍一下Redis的zset实现(回答的根据skiplist+hashtable和多级索引的方式实现)
- 介绍一下B树。(本身拓展开来回答,讲到了B+树的区别,聚簇索引和非聚簇索引,为何B+树更矮胖,如何肯定B树的阶等。)
- 若是是普通索引,如何查找到对应的数据?
- hashmap如何扩容的?讲transfer方法和resize方法。为何容量是2的指数次幂?
- 介绍一下悲观锁和乐观锁。
- 当synchronized对指定的方法上锁,一条线程获取锁执行任务时,另外一条线程来获取这个方法对应实例的锁时获取失败,会被阻塞。那么当前一条线程执行完任务之后,怎么通知被阻塞的线程能够得到被释放的锁继续执行任务?(感受回答得比较糟糕,后来复盘的时候反思了下,建议仍是从对象头中存储的偏向线程ID、线程持有的锁、锁状态标志以及monitor锁计数器结合回答)
- 介绍一下线程池(介绍几个参数以及几种常见的线程池,各自的阻塞队列)
- 几个参数之间的关系?大体说了一下,打断问,若是最大线程数大于核心线程数,且阻塞队列中任务已满,核心线程数建立达到设置的最大值,提交任务的线程被阻塞挂起,请问此时线程池开始建立额外的线程来执行任务,是哪一个任务先被执行?队列头的仍是队列尾的?
- 介绍一下jvm内存分区和垃圾回收机制?
- 如何肯定eden区的对象什么时候进入老年代?当线上监控中心的新生代和老年代哪一个区域发生垃圾回收,表示此时比较危险?
- Spring的两大特性?Springboot如何实现自动装配的?aop在项目中用过吗?怎么用的?底层是如何实现的?介绍一下动态代理。jdk原生的动态代理和cglib的动态代理有什么区别?
- spark和flink的区别?(简历没写flink,但以前有spark任务,就勉强回答了一下)。
- 有没有发生数据倾斜的状况?如何解决的?怎么观察spark任务的执行状况?
- 有了解过apollo吗?
- 了解CAP原则吗,介绍一下?
- 你有什么要问个人吗?
阿里巴巴菜鸟网络二面:markdown
- 自我介绍,此次着重介绍本身的项目经历和项目总结。
- 介绍项目,我刚说第一个就被面试官打断了,感受要开始怼我,直接问有没有更亮点的项目。而后我介绍了另外一个比较难的项目,讲了一些业务背景以及使用到的技术栈,不知道为何面试官没有拓展开继续问下去了。
- 网络协议有哪些?
- 讲讲ThreadLocal的做用,是否线程安全?
- 进程间的通讯
- TreeMap讲解,里面有什么属性,entry里有什么属性?
- Java里有哪些是不须要加锁的同步方法?
- 行锁和表锁的区别、场景
- 组合索引的使用,eg. (a, b, c)索引,where a=x;where b=x;where a=x and b=x;哪一个能使用索引?
- ArrayList和linkedlist的区别?
- 有哪些集合类是线程安全的?
- 算法:(1)排好序的数组,找2个数的和为M的全部组合;(2)大数据下,找出出现频率topK的ip
- 上家公司的研发部门有哪些组?大体的工做内容是什么?一个组多少人?你在什么组?负责什么?
- 离开上家公司后,在看什么书?学习什么技术?(回答在研究Dubbo和MySQL,还看了一些底层实现的东西)
- 截止目前,你本身感受面试表现怎么样?
- 你有没有要问个人?
——三顾阿里四面拿offer(一淘事业部)网络
阿里巴巴一淘事业部一面:
- 按照自我介绍,项目介绍
- 大家天天这么大的数据量,都是保存在关系型数据库中吗?
- 那大家有没有对查询作一些优化呢?
- 能说说为何B+树相对于B树在查询上会更加优胜吗?
- 除了上面这个范围查询,你还能说出其余的一些区别吗?
- 刚刚咱们聊到B+ Tree,那你知道B+Tree的叶子节点均可以存哪些东西吗?
- 聚簇索引和非聚簇索引,在查询数据的时候有区别吗?
- 刚刚你提到主键索引查询只会查一次,而非主键索引须要回表查询屡次。是全部状况都是这样的吗?非主键索引必定会查询屡次吗?
- 在建立索引的时候你都会考虑哪些因素呢?有用过联合索引吗?
- 在建立联合索引的时候,须要作联合索引多个字段之间顺序大家是如何选择的呢?
- 知道在MySQL 5.6中,对索引作了哪些优化吗?
- 大家建立那么多索引,到底有没有生效,或者说大家的SQL语句有没有使用索引查询大家有统计过吗?
- 那排查的时候,有什么手段能够知道有没有走索引查询呢?
- 那什么状况下会发生明明建立了索引,可是执行的时候并无经过索引呢?
- 大家线上数据的事务隔离级别是什么?
- 手撕代码:链表内指定区间反转
阿里巴巴一淘事业部第二面:
- 直接上来就手撕代码:重建二叉树
- JVM:类加载机制,沙箱安全
- 问到运行时数据区,我答漏了一个程序计数器,而后面试官就接着问到了程序计数器。
- 问可达性分析,什么样的对象能够做为GcRoot、加载的时候把这些对象提早找好用的OopMap
- 新生代几回对象几回到老年代?
- 有没有可能直接就把刚new出来的对象放在老年代?(第一次碰到这个问题,有些慌,我答的有可能,毕竟有些垃圾回收器会有一个空间分配担保策略)
- 多线程:volatile,CAS,总线嗅探,CPU缓存一致性协议
- 讲一讲ReentrantLock、ThreadLocal、Lock和Synchronized的区别。
- CountDownLatch,ABC三个线程怎么去保证顺序执行?
- 数据库优化:B+树,Hash索引,最左前缀,索引优化分析,一条龙服务,都问了一下。
- Redis:一来就是分布式锁,而后别的就没问了,可能也是以为我回答得还行就跳过了。
- HashMap:扩容的触发条件是什么?我答只是一个达到负载就扩容了,明显错了。而后面试官纠正说负载和Hash冲突同时发生。
- 死锁怎么排查?
- JVM调优怎么作?
- 问了几个索引题。字符串要写单引号,字符串查询怎么增长查询效率,字符串索引太大了那就截取几个作索引,叫前缀索引。怎么判断一个索引字段选得好很差,看不重复的和总数的比值,越大越好。
- 假如如今系统里面就是要模糊匹配怎么办?
阿里巴巴一淘事业部第三面
- 自我介绍,直接问到了技术栈。(此次优化了自我介绍的内容,主要围绕4个点去讲。自报家门、项目经验、技术栈以及求职愿景)
- 根据项目来提问,技术问题(这部分大体是对你的总体价值观作宏观的把控,包括上进心、责任心、心态以及工做激情等)
- 在项目中遇到了哪些比较棘手的问题?是如何解决的呢?
- 目前系统支撑的用户量是多少?假如用户量提高10倍,系统会出现什么样的问题?如何从新设计系统?(这部分就是主要考察你对问题的预见能力、解决能力,考察你对项目、问题解决的总体思路)
- 使用memcached是一个什么样的原理?
- 如何存放数据到memcached集群中,介绍一下这个过程。跟进的问题,讲一下一致性哈希算法的实现原理。
- JVM中堆是如何管理的?JVM的内存回收机制,介绍一下
- 分布式事务实现方式
- 热点帐户问题(项目中有就会问到)
- 类加载委托机制
- 锁的应用
- 项目架构
- 最后一问:你以为你在同事眼中是一个什么样的人?
阿里巴巴一淘事业部第四面(终面:Hr面)
- 自我介绍
- 看你工做换得比较勤?你的职业规划是怎么样的?
- 上一份工做为何要换?(我回答的是:上份工做让我处于一个温馨区,但我比较喜欢作有挑战的事情,巴拉巴拉)
- 对阿里了解多少?对电商了解多少?
- 知道新零售吗?说说看
- 读过哪些算法方面的书籍?
- 开放题:数据和商业的关系
- 薪资待遇
- 你有什么想问的?
面试题答案:

Two:三顾阿里,七轮面试,个人经验复盘
1.阿里面试注意事项
- 部门选择:从这三次面试经从来看,部门不一样,问到的技术栈都有所区别,因此在面试前最好是根据本身所面试的部门作相应的准备。
- 岗位选择:根据岗位介绍可以洞见的关键信息并很少,基于有限的信息,所谓合适一般需知足如下几点:①自身的核心竞争力与所应聘的岗位具备较高的匹配度;②对岗位的工做内容感兴趣,至少不排斥;③岗位所在的业务具备良好的前景;④工做地点可接受。
- 应变能力:几轮面试下来,给我最大的一个感觉就是必定要培养本身的应变能力。在面试过程当中,面试官会根据和你交流的过程当中,找一些细节进行提问,一旦应变能力不强,就容易慌了张影响面试发挥,致使失败。
2.面试核心知识点梳理
除了阿里之外,其余七七七八八的互联网公司我也面过很多,不说身经百战,那也面临过一些枪林弹雨的。因此,对于面试会问到什么技术栈,仍是作了一些详细的梳理,这些面试梳理仍是至关有说服力的。
针对面试核心知识点的梳理,我提供了如下的思惟导图和面试核心点PDF:


3.简历优化
不要觉得简历只是一个 “敲门砖”而已,事实上,它将伴随你走过应聘流程中的几个关键环节:简历评估,技术面试,HR 面试。
一份优质的简历有助于应聘者展现本身的能力和优点,同时,也能够为面试官提供 “提问指导” (一般面试官会根据简历内容有针对性地提问,有的放矢),所以不断去优化本身的简历是颇有必要的。
关于简历,我能够提供我我的的简历模板给你参考:
Three:个人将来规划(满足常乐,但不安于现状)
1.职业规划
程序员职业发展通常分三条路:
放到本身身上来看,很显然,没有创业的头脑,那这条路天然是行不通的。那走技术仍是走管理?实际上并不须要过早定下来,等到必定年纪天然会开始方向的转移,但不管是走技术仍是管理,一开始就要把技术打得扎实,由此,对于技术痴迷的我,先以技术路线为主,管理路线为辅。

2.学习规划
说得难听点,程序员不学习,那就是在“等死”,尤为是对于大厂程序员来讲,所以接下来的时间要有一个清晰的学习规划。
个人学习规划以下:




3.业余规划
- 搞副业:用业余时间搞点副业仍是ok的,接点小项目,或写写博客(正在作)。
- 混论坛:混迹各大程序员知名论坛中,如GitHub等,可以参与开源最好不过。
- 交朋友:加一些社群,参加线下面基,结识一些同行朋友,或许能碰撞出一些不同的代码火花?

写在末尾:一些建议和行业愿景
文章写到这里差很少能够停笔了,可是又好像还想说点什么,或许是对同行的你一些小建议,也或许是对整个行业的一些愿景。
近几年来,铺天盖地而来的“程序员35岁”制造了很多年龄焦虑,试问本身被公司裁人,被社会淘汰真的是年龄致使的吗?大多数仍是与本身能力相关,在我接触到的认知里,互联网公司35岁以上的技术经理,技术大牛仍有很多。实际上,不管你是什么行业,能力不过关,都会被淘汰,而避免被淘汰的惟一办法:坚持学习。
因此,最后但愿同为代码献身的咱们,不负初衷,不畏困难,拥抱发展!
以上文章内容所说起的【Java面试核心点】+【Java电子书+技术笔记】+【学习视频】均免费分享,须要的朋友只需你:
——点赞+评论文章,关注我,戳此传送门获取