导读
这篇文章呢,整合了一下三位朋友面试阿里蚂蚁金服所有offer的经历,时间段分别是7月初,7月中旬,8月中旬。如下也是我整合起来的面试题,和面试经验,我但愿这些能帮到你们面试这些大厂能有所帮助,其实讲白了,面试经验只是一个借鉴,不能做为具体参考,但这些经验能从重考虑大体方向,接下来讲说下4面阿里面试(三面加HR面)java
一面
开头仍是先来自我介绍,完了面试官就开始发问,通常是40分钟到1个小时不等。不过值得注意的是,他们那边通常不直接回答对仍是错,最终发现呢,阿里的几轮面试,都是这样,他们通常只听,偶尔追问。程序员
首先确认对阿里的意向度;其次面试官会针对你曾经作过的项目来作具体技术的交流,你对项目细节是否是掌握到位,以及java技术基础和原理掌握程序,好比并发编程以及数据库和JVM三个方面,也会交流到分布式、线程池的实现等等(重点考察有没有深刻钻研技术和技术上的亮点);web
- 首先,针对岗位问一些专业性问题,所以你要把该岗位要求的专业技能基础看一遍。
- 而后,针对你的简历,问作过的一些具体的case,所以你要把本身写在简历上的case都复盘一遍,对本身作过的工做内容进行总结,好好分析不足点和须要进步的地方,而且梳理出本身的优点。(若是带上你之前工做的数据和做品等等,会加不少分)
- 再而后,问你对公司、行业的了解,所以你要在面试以前经过各类渠道尽量的了解公司的历史,业务、当前发展阶段和规划,了解行业的历史、远景和竞争对手。
- 再再而后,问你对该岗位的理解和职业规划,所以你要尽可能了解你的岗位,而且提早作好将来大体的职业和人生规划。
- 最后,就是瞎聊,他会跟你很随意的聊一些话题,来观察你的性格特质和待人接物,确保你能很好的融入他的团队。
不知道的直接说答不上来,就会继续一个题。面试
一面完了,叫你等消息,基本凉凉,不少公司,等消息基本就是没消息。正则表达式
二面
主管面:根据项目深刻的了解技术实力,了解你的知识面、问题解决能力以及技术灵活运用能力,也经过这一过程考察团队合做能力、学习主动性和创新性,能够挑选2-3个作过的有典型性的项目作一个仔细技术回顾和本身独到的理解(这是加分项,重要);redis
总结:算法
其实讲白了主管是你TL(直接领导)的上级,他对具体的业务并不了解,因此都是问一些基础,来帮TL把把关。基本上只要TL想要你,主管都是放行的。并且只要你能把上一轮面试的东西准备好,这一轮就没什么问题,只要你对人家表示尊重。spring
三面
高管复试,会涉及到相关的技术问题,大部分是对你的总体价值观作宏观的把控(好比上进心,责任心,心态,工做激情等);sql
整个过程要长一些,大约一个小时,完了还聊了一些我的及生活状况。数据库
总结:
整个技术面下来,感受好像面试有迹可循。
一面通常是基础问题。二面偏向于作的项目与框架。三面比较全面,都会问到。若是会聊天,现场面还会聊技术以外的一些东西。
顺便说一下,有开源项目或者技术博客,熟悉源码加分。
四面HR面
HR最终面,进入最后一面,通常这种状况反而有些紧张,一方面非技术类的问题是你们并不擅长的,再者应该你们早有耳闻阿里HRBP有"一票否决权"!因此仍是打起了十二分的精神认真对待,其实过程比想象中的顺畅不少,就是从大方向了解一下面试者的心态、抗压能力、将来规划以及对阿里的意向度(用阿里的话说,即价值观的匹配度);
总结
HR面: 这轮面试是薪酬福利面试,就是跟HR博弈,争取在该级别范围内拿到最高的薪水。这些就好商量了,(价值观匹配度达到过关什么都好说)整体的来讲HR面是最容易的。健谈的人通常都很容易。固然小瓜哥不是一个健谈的人,当时第一次是倒在第三面,第二次差点在HR面翻车,由于实在不健谈。哈哈。面试阿里第二次才拿到offer实在有些惭愧。
接下来是我总结的部分问的方向和问题,但愿对你们能有所帮助!
Java基础:
- hashmap结构;什么对象能作为key
- hashtable,concurrentHashMap,hashtable比较
- String,StringBuilder,StringBuffer
- 对象的深浅复制
- 一个十进制的数在内存中是怎么存的? Java支持的数据类型有哪些?什么是自动拆装箱? int 和 Integer 有什么区别 ? 何时使用int 何时使用Integer?
- ==比较的是什么?
- hashCode()和equals()方法有什么联系? 为何重写equals还要重写hashcode? Object若不重写hashCode()的话,hashCode()如何计算出来的?若对一个类不重写,它的equals()方法是如何比较的?
- 一个十进制的数在内存中是怎么存的?
- Java语言中float和double数据类型的精度是多少?它们在内存中是怎么存储的?和Decimal有什么区别?
- 为啥有时会出现4.0-3.6=0.40000001这种现象?
- 不借助四则运算如何实现加法
- char能够存汉字吗,底层怎么存的
- Java的字符集是什么
- 什么是值传递和引用传递?
- 数组(Array)和列表(ArrayList)有什么区别?何时应该使用Array而不是ArrayList?
- StringBuilder 和StringBuffer的区别 ? 底层实现上呢?
- String为何要设置成final类型?String是不变的吗?String为何不可变?怎么实现不变的?
- &和&&的区别?
- 在Java中,如何跳出当前的多重嵌套循环?
- 简述正则表达式及其用途。Java中是如何支持正则表达式操做的?
- 讲一讲Java里面的final关键字怎么用的?
- Java 8 如何实现的函数式编程?
- 如何保证方法的幂等性
- Java中的序列化的做用,serialVersionUID做用? 各类序列化器,序列化协议,为何这个序列化那么快
多线程:
- wait,sleep分别是谁的方法,区别
- countLatch的await方法是否安全,怎么改造
- 线程池参数,整个流程描述
- 背后的底层原理aqs,cas
- ThreadLocal原理,注意事项,参数传递
- 还有Java的锁,内置锁,显示锁,各类容器
- 及锁优化:锁消除,锁粗化,锁偏向,轻量级锁
- 多线程的好处
- 线程安全的定义? 如何保证线程安全?
- 多线程中的i++线程安全吗?为何?多个线程访问i++ , 怎样设计保证线程安全
- 建立线程有几种不一样的方式?你喜欢哪种?为何?Java中有几种方式启动一个线程?
- 原子类的底层原理?Atomic在高并发场景下有什么问题,缺点?
- CAS和ABA原理
- Jdk中哪里用到了cas? CAS check的字段是哪里,set到哪里去? cas有什么问题? jdk中是如何改进的? 若是不少个线程经过cas操做数据,如何提升效率?
- 如何线程安全的实现一个计数器?
- 请说出你所知道的线程同步的方法
- 线程数和内核数量的关系
- 线程中哪些是私有的?哪些是共享的
- 线程有多少状态,画出状态图,状态之间如何转换
- 同步方法和同步代码块的区别是什么?
- runnable和callable有什么区别?
- 为何 object的方法 notify 和wait方法必须在synchronized里使用?
web方面:
- servlet是否线程安全,如何改造
- session与cookie的区别,get和post区别,tcp3次握手,文件上传用post仍是get
- session的存储
- 如何防止表单重复提交
- 如何设置请求的编码以及响应内容的类型?
- Servlet相关接口 , Servlet里面有哪些方法 ? Servlet执行时通常实现哪几个方法?
- Servlet 3中的异步处理指的是什么?
- servlet生命周期?servlet是单例模式么?为何是单例?Servlet和cgi有什么区别?
- 服务器收到用户提交的表单数据,究竟是调用Servlet的doGet()仍是doPost()方法?
- servlet写过么,底层是怎么处理前台传来的请求的
- 是否单例,为何是单例。
- 如何在基于Java的Web项目中实现文件上传和下载?
- 缓存的优势?
- 说说MVC的各个部分都有那些技术来实现?如何实现?
- 什么是DAO模式?
- 请问Java Web开发的Model 1和Model 2分别指的是什么?
- 如何保存会话状态,有哪些方式、区别如何
jvm:
- jvm内存模型,
- jvm问题工具,jps,jinfo,jmap...
- String a=“a”;String b=“b”; 问"a" "b"等不等于a b
- Java中堆栈的区别。堆栈的增加方向有哪些不一样?
- jvm最大内存限制多少 ? 在一台16G内存的机器上,JVM默认内存空间多大?
- jvm是如何实现线程?
- 了解过字节码的编译过程吗
- eden区,survial区?
- 垃圾回收器的基本原理是什么?垃圾回收器能够立刻回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?(垃圾回收)
- JVM回收算法和回收器,CMS采用哪一种回收算法,怎么解决内存碎片问题? 为何年轻代要用复制算法?并发标记阶段处理速度慢的缘由多是什么。怎么进行优化
- 阐述GC算法 , 那并发量很高时,使用哪一种算法?
- GC如何调优?
- 垃圾回收触发条件 ? 是须要回收就当即回收,仍是怎么办?一般哪些设为安全点?
- GC中如何判断对象须要被回收? 一个方法中有A a = new A();这么一条语句,方法执行完后A的实例化对象在GC时可否被回收掉
- GCRoot能够是哪些对象
- 何时会触发full gc? FullGC是否停顿用户线程?发生Full GC的时候,必定会发生stop the world吗?怎么避免full gc ? 频繁出现full gc应该如何排查?
- minor gc若是运行的很频繁,多是什么缘由引发的,minor gc若是运行的很慢,多是什么缘由引发的?
- 对象怎么分配内存,基于什么原则;
- 类加载过程 ? 初始化阶段是干什么的?
- 双亲委派模型的好处是什么?
数据库:
- 最重要的索性及底层实现
- 索性失效的场景
- 最左原则
- 查看执行计划
- 及carndiation
- 而后是锁的类型,行级表级
- 悲观乐观锁
- 解释数据库事物及特性
- 隔离级别
- 及实现,redo log .undo log
- bin log主从复制
- mvcc,Next-Key Lock
- delete truncate 区别
- SQL 中select…limit and offset 会有什么问题,怎么解决
- 一条SQL语句在MySQL中会通过怎样的过程
- 数据库两种引擎 InnoDB和MyISAM的区别?介绍一下何时用Innodb何时用MyISAM。
- 平时有查看过sql的执行计划吗
- 怎么去监控MySQL的性能问题?怎么查看一个sql语句的执行效率?
分布式:
- 问了CAP,跟base
- zookeeper知足了CAP的哪些特性,paxos
- 缓存穿透怎么解决
- redis的io模型
- 若是保证redis高可用
- redis是单线程仍是多线程
- 线上cpu占比太高怎么排查
- 一致性hash
- 分库分表
- 怎么热拷贝,给一个思路,好比一个ES集群在创建索引,咱们怎么样在它还在持续创建索引的状况下,将当时的状态给dump下来
- 若是缓存雪崩,大量请求直接打到数据库怎么办?
- 服务限流,服务隔离。
- 当库存预加载之后,库存再次发生变化该如何解决?
- 实现限流怎么实现?若让你设计一个限流器,你会怎么设计(令牌桶算法的思路)
- 2PC 和 3PC
- raft协议介绍,raft的日志须要有什么特色 , 网络分区怎么解决,raft一致性如何实现
spring:
- ioc,aop原理
- ioc初始化流程
- springmvc的流程
- springboot,spring cloud相关组件
- 介绍一下bean的生命周期
- Spring里面注解用过没有?autowired 和resource区别?
- Spring中BeanFactory和ApplicationContext的区别?
- 请问Spring中Bean的做用域有哪些?
- Spring加载Bean的过程? Spring框架xml文件中配置bean的实例化过程?了解Spring是怎么递归地加载Bean的吗?BeanFactory和FactoryBean有什么区别?
- Spring getBean的整个流程
- 谈谈Spring中自动装配的方式有哪些?
- 说一下IOC和AOP? DI的方式有几种?哪几种?
- spring怎么解决循环引用的问题,好比,A对象构造时须要B对象;B对象构造时须要A对象
- springIOC原理?说说Ioc容器的加载过程Spring IOC底层存储结构 ? 本身实现IOC要怎么作,哪些步骤?
- aop的应用场景?
- AOP的原理是什么? 除了动态代理还有什么?
- 拦截器和AOP的关系 Spring拦截器的底层是怎么实现的
项目
友情提醒一下,对于作过的项目,最好梳理清理,可能会叫你画各类图。
总结
能问的基本就是这几个大体方向,若是你方面掌握的很不错了,同时又是个很健谈的人,我相信阿里面试对你而言也就是日常遇到BUG征服了就行了。
不过阿里的确是程序员的金字塔呀,在这种地方,你会以为本身真的如此眇小,之前引以自豪的能力,在这里面一切都像新手同样,什么 写个框架无压力的人不少,随意修改JVM无压力,数据库也是。不过也是学习圣地,毫无疑问!
健谈是一个很实用的技能,可能在你实力并无理想那种那种水平,能帮你得到更好的资源。一个会说话的人和一个不会说话的人,最终的高度绝对不会是同样的(有实力的状况),若是实力和健谈你都有,就是一个闪闪发光的金子。在哪,都有你的一席之地。
再多提一句,最近网上流传BAT等一线互联网公司不招人了,没错这是谣言。
我也整理了如下资料给各位朋友喜欢能够帮到你们
最后
还有更多的面试题我都是整理在一块儿了,我但愿我把这些问题,资料、面试题都分享给你们。让你们能多多提高本身,欢迎作Java的程序员朋友们关注个人公众号“java小瓜哥的分享平台”发送“资料”!免费分享这些资料。其中覆盖了互联网的方方面面,期间碰到各类产品各类场景下的各类问题,但愿能够帮助你们扩展本身的技术广度和知识面。谢谢。!