在去年,小哥我从传统行业离职,转投互联网公司阿里,简历优秀,很顺利地拿到了面试通知,但之后的进展却让我怀疑人生了,或者说让我懵逼的是,面试阿里居然第一面就被吊打?让我开始怀疑自己,是不是这些年工作下来,自己没有一丁点的进步呢?

把这事也跟一好朋友说了,他也觉得很是好奇,也觉得不应该的啊!问我是不是哪方面没有发挥好,在第一面就挂了。听了这话我更是不甘心,在半年里利用碎片时间狂啃面试资料 及视频教程。然后今年十月把简历还是投到了失败的那个阿里部门,不巧的是又接到面试通知电话,更让我没有想到的是又碰到了上次的一位面试官。

从他一闪而过的眼神当中我看出了他的惊讶。我也淡然的一笑而过。不知为何这次我感觉是胸有成竹, 一切都是从容面对。一副处变不惊的样子。面对这些考官们的问题都是侃侃而谈。而我也感受到了考官们赞赏的眼神。大家猜的没错, 接下来顺利通过面试 直接进厂入职。

最近才抽空花了些时间整理了这两次面试的经历 和问题。现在给大家分享一下。那么我们一起来看看吧!是否能回答上呢?

阿里技术一面:

  1. 简单说一下面向对象的特征以及六大原则
  2. 谈谈final、finally、finalize的区别
  3. Java中==、equals与hashCode的区别和联系
  4. 谈谈Java容器ArrayList、LinkedList、HashMap、HashSet的理解,以及应用场景
  5. 谈谈线程的基本状态,其中的wait() sleep() yield()方法的区别。
  6. JVM性能调优的监控工具了解那些?
  7. 简单谈谈JVM内存模型,以及volatile关键字
  8. 垃圾收集器与内存分配策略
  9. 垃圾收集算法
  10. MySQL几种常用的存储引擎区别
  11. 数据库的隔离级别
  12. 5亿整数的大文件,怎么排?

阿里技术二面:

  1. Java内存模型
  2. full gc怎么触发?
  3. gc算法
  4. JVM回收策略
  5. ClassLoader原理和应用
  6. 高吞吐量的话用哪种gc算法
  7. ConcurrentHashMap和HashMap
  8. volatile的底层如何实现,怎么就能保住可见性了?
  9. 有参与过开源的项目吗?
  10. 线程池原理,拒绝策略,核心线程数
  11. 1亿个手机号码,判断重复
  12. 线程之间的交互方式有哪些?有没有线程交互的封装类 (join)?

阿里技术三面:

  1. 两次点击,怎么防止重复下订单?
  2. 数据库表设计,索引
  3. Redis的缓存淘汰策略、更新策略
  4. dubbo、netty、RPC介绍原理
  5. 限流算法
  6. zk挂了怎么办?
  7. 分布式锁的实现方式,zk实现和Redis实现的比较
  8. 秒杀场景设计,应付突然的爆发流量
  9. 分布式数据一致性
  10. 一致性哈希
  11. 消息队列原理介绍
  12. 注解的原理
  13. 数据库原理,数据库中间件,索引优化
  14. ioc原理、aop原理和应用
  15. 大数据相关,MapReduce
  16. Docker的原理

除了上面亲身经历的面试问题 小编还为大家整理了大量华为、京东 美团, 滴滴方面的面试题。由于篇幅问题 下面将展示分享的内容。文中所出现的所有资料,小编都以整理成PDF文档,有需要学习的朋友可关注 转发后添加小编的vx:mxzFAFAFA免费领取。

开源框架知识

  • 简单讲讲tomcat结构,以及其类加载器流程,线程模型等。
  • tomcat如何调优,涉及哪些参数 。
  • 讲讲Spring加载流程。
  • Spring AOP的实现原理。
  • 讲讲Spring事务的传播属性。
  • Spring如何管理事务的。
  • Spring怎么配置事务(具体说出一些关键的xml 元素)。
  • 说说你对Spring的理解,非单例注入的原理?它的生命周期?循环注入的原理,aop的实现原
  • 理,说说aop中的几个术语,它们是怎么相互工作的。
  • Springmvc 中DispatcherServlet初始化过程。
  • netty的线程模型,netty如何基于reactor模型上实现的。
  • 为什么选择netty。

 

多线程

  • 多线程的几种实现方式,什么是线程安全。
  • volatile的原理,作用,能代替锁么。
  • 画一个线程的生命周期状态图。
  • sleep和wait的区别。
  • sleep和sleep(0)的区别。
  • Lock与Synchronized的区别 。
  • synchronized的原理是什么,一般用在什么地方(比如加载静态方法和非静态方法的区别,静态方法和非静态方法同时执行的时候会有影响吗),解释以下名词:重排序,自旋锁,偏向锁,轻量级锁,可重入锁,公平锁,非公平锁,乐观锁,悲观锁。
  • 用过哪些原子类,他们的原理是什么。
  • JUC下研究过哪些并发工具,讲讲原理。
  • 用过线程池吗,如果用过,请说明原理,并说说newCache和newFixed有什么区别,构造函数的各个参数的含义是什么,比如coreSize,maxsize等。
  • 线程池的关闭方式有几种,各自的区别是什么。
  • 假如有一个第三方接口,有很多个线程去调用获取数据,现在规定每秒钟最多有10个线程同时调用它,如何做到。
  • spring的controller是单例还是多例,怎么保证并发的安全。

 

架构设计与分布式

  • 用java自己实现一个LRU。
  • 分布式集群下如何做到唯一序列号。
  • 设计一个秒杀系统,30分钟没付款就自动关闭交易。
  • 如何使用redis和zookeeper实现分布式锁?有什么区别优缺点,会有什么问题,分别适用什么场景。(延伸:如果知道redlock,讲讲他的算法实现,争议在哪里)
  • 如果有人恶意创建非法连接,怎么解决。
  • 分布式事务的原理,优缺点,如何使用分布式事务,2pc 3pc 的区别,解决了哪些问题,还有哪些问题没解决,如何解决,你自己项目里涉及到分布式事务是怎么处理的。
  • 什么是一致性hash。
  • 什么是restful,讲讲你理解的restful。
  • 如何设计一个良好的API。
  • 如何设计建立和保持100w的长连接。
  • 解释什么是MESI协议(缓存一致性)。
  • 说说你知道的几种HASH算法,简单的也可以。
  • 什么是paxos算法, 什么是zab协议。
  • 一个在线文档系统,文档可以被编辑,如何防止多人同时对同一份文档进行编辑更新。
  • 线上系统突然变得异常缓慢,你如何查找问题。
  • 说说你平时用到的设计模式。
  • Dubbo的原理,有看过源码么,数据怎么流转的,怎么实现集群,负载均衡,服务注册和发现,重试转发,快速失败的策略是怎样的 。

 

算法

  • 10亿个数字里里面找最小的10个。
  • 有1亿个数字,其中有2个是重复的,快速找到它,时间和空间要最优。
  • 2亿个随机生成的无序整数,找出中间大小的值。
  • 给一个不知道长度的(可能很大)输入字符串,设计一种方案,将重复的字符排重。
  • 遍历二叉树。
  • 有3n+1个数字,其中3n个中是重复的,只有1个是不重复的,怎么找出来。
  • 写一个字符串(如:www.javastack.cn)反转函数。
  • 常用的排序算法,快排,归并、冒泡。 快排的最优时间复杂度,最差复杂度。冒泡排序的优化方案。
  • 二分查找的时间复杂度,优势。
  • 一个已经构建好的TreeSet,怎么完成倒排序。
  • 什么是B+树,B-树,列出实际的使用场景。
  • 一个单向链表,删除倒数第N个数据。
  • 200个有序的数组,每个数组里面100个元素,找出top20的元素。
  • 单向链表,查找中间的那个元素。

 

消息队列

  • 消息队列的使用场景。
  • 消息的重发,补充策略。
  • 如何保证消息的有序性。
  • 用过哪些MQ,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗,你们公司的MQ服务架构怎样的。
  • MQ系统的数据如何保证不丢失。
  • rabbitmq如何实现集群高可用。
  • kafka吞吐量高的原因。
  • kafka 和其他消息队列的区别,kafka 主从同步怎么实现。
  • 利用mq怎么实现最终一致性。
  • 使用kafka有没有遇到什么问题,怎么解决的。
  • MQ有可能发生重复消费,如何避免,如何做到幂等。
  • MQ的消息延迟了怎么处理,消息可以设置过期时间么,过期了你们一般怎么处理。

 

学习方法及经验总结

在自己拿到腾讯offer之前,一直都在想一个问题:我到底该如何做才能离腾讯更近?一年的成长与思考让我认清了这点,虽然中间也遇到过很多坑,但却真正让我对自己有了一个清晰的定位,也有了比较明确的目标。正因为如此,我每天所学习的都给我莫大的动力,让我不断进步,并最终实现自己的目标。所以迷茫才是最可怕的,只有摆正心态,对找工作保持十二分的热情,勤奋努力,才能离目标更近一步

但是有了目标和努力外,不一定就能实现目标,说到底还有一个运气的成分在里面,只能说你找到心仪的工作概率更大而已。遇到一个好的面试官绝对赚了。这几位面试官我感觉都挺好的,没有因为他们资历深就为难我,所以还是非常感谢这几位技术面试官的。

(1)多刷题

自己多刷一些面试题是非常重要的,即使是在自己不需要面试的情况下,也要经常了解现在的大厂小厂面试都会问一些什么?现在比较流行的技术是什么等等诸如此类。那么哥们是如何刷题的呢?刷题主要分为Java技术以及算法两大类,搜集了目前比较新的一些题册,包括【Java核心知识】以及【算法刷题】,如算法方面就有LeetCode。

算法刷题LeetCode:

 

 

(2)多看看技术牛的实战书

实际上很多人目前的一个状态是缺乏实战经验,或者说是不知道该如何上手实战。那么,看一些技术比较过硬的大牛写的实战书籍对自己是很有好处的,多少能够学习到一些实战经验。目前我手上整理到的实战书籍也算是比较全面,包括Spring全家桶、JVM、并发编程技术、Redis相关、MySQL调优、Tomcat、ZooKeeper等高级技术。

 

对这些面试题和答案感兴趣的朋友可转发+关注我后添加小编的vx:mxzFAFAFA即可免费领取。

更多经典面试题合集

 

java面试视频讲解.