阿里 Java 岗个人面经分享(技术三面 + 技术 HR 面):Java 基础 +Spring+JVM+ 并发编程 + 算法 + 缓存
技术一面 20 分钟
1、自我介绍
说了很多遍了,很流畅捡重点介绍完。
2、问我数据结构算法好不好
挺好的(其实心还是有点虚,不过最近刷了很多题也只能壮着胆子充胖子了)
3、找到单链表的三等分点,如果单链表是有环的呢
用快慢指针,一个走一步,一个走三步。如果有环,先判断环在哪,找最后一个节点,然后用之前的无环的做法
4、讲一下项目的架构
我重点讲了 MVC
5、说一下你熟悉的设计模式
我重点讲了单例、工厂方法、代理
5、有没有配置过服务器啥啥啥
这个我真不知道,都没听过呢,只能诚实说没有,毕竟都没法扯。
一面挺匆忙的,我估计面试官刚开完会还没吃饭呢。他说让我等,可能再找一个同事面我,可能就直接告诉我结果了。从一面面试官的声音和口吻,我判断他一定是个部门老大,问的设计偏多,后面 hr 告诉我他就是我要去的部门的老大。哈哈。
技术二面 60 分钟,详细问答
1、Spring:有没有用过 Spring,Spring IOC、AOP 机制与实现,Spring MVC
其实我挺不想被问到 Spring 的细节的,框架这些我都没有复习不太记得了。所以我对面试官说 Spring 里面的一些比较重要的机制我理解的还不错,然后我用一个实际的例子把我对 IOC、AOP 理解讲了一下,他听了说对,理解的不错(难得遇到一个边面试边能给反馈的面试官,好开心)
Spring MVC 其实我用过,我就对面试官讲了我的项目中用到的 Servlet,jsp 和 javabean 实现的 MVC,以及 MVC 各个模块职责以及每个模块是怎么联系到一起的,最后我补充了一句我想 SpringMVC 的思想其实跟这个是一样的(他说对的,嘿嘿有反馈真好)
2、多线程:怎么实现线程安全,各个实现方法有什么区别,volatile 关键字的使用,可重入锁的理解,Synchronized 是不是可重入锁
这里我就主要讲了 Synchronized 关键字,还有并发包下面的一些锁,以及各自的优缺点和区别。volatile 关键字我主要从可见性、原子性和禁止 JVM 指令重排序三个方面讲的,再讲了一下我在多线程的单例模式 double-check 中用到 volatile 关键字禁止 JVM 指令重排优化。
3、集合: HashMap 底层实现,怎么实现 HashMap 线程安全
我讲了一下 HashMap 底层是数组加单链表实现,Node 内部类,add 的过程,Hash 冲突解决办法,扩容,三种集合视图。HashMap 线程安全的实现方式主要讲了 HashTable、ConcurrentHashMap 以及 Collections 中的静态方法 SynchronizedMap 可以对 HashMap 进行封装。以及这三种方式的区别,效率表现。
4、JVM 内存管理,GC 算法,HotSpot 里面的垃圾回收器、类加载
JVM 内存主要分为五个区,哪些是线程共享的,哪些是线程独享的,每个区存放什么。GC 方面:怎么判断哪些对象需要被 GC,GC 的方法,Minor GC 与 Full GC。HotSpot GC 算法以及 7 种垃圾回收期,主要讲了 CMS 和 G1 收集器。类加载:类加载的过程,Bootstrap classloader-ExtClassloader-AppClassloader,父类委托机制。
5、进程和线程的区别
从调度、并发性、拥有的资源和系统开销四个方面回答的。
6、HTTP 有没有状态,我说无状态,怎么解决 HTTP 无状态 怎么解决 HTTP 无状态其实就是怎么进行会话跟踪,有四种方法:URL 重写、隐藏表单域、Cookie、Session。
7、Java IO,NIO,Java 中有没有实现异步 IO
Java IO 实现的是同步阻塞,它是怎么实现同步阻塞的。我拿了 read()方法举例来讲的。NIO 实现的是同步非阻塞,我详细讲了一下 Selector 中的 select()方法轮询说明它是如何实现多路复用 IO 的。然后对比了一下他们的效率。面试官可能看我对这一块比较了解,又继续问我 Java 中有没有实现异步 IO,我感觉好像没有,但面试官说有,让我想想,其实这里我并不清楚啦,所以我就对面试官讲了一下我对 Unix 中异步 IO 模型的理解,然后说至于 Java 里面有没有我真的不太清楚。(他居然笑了!说你理解是对的,Java 里面有没有不重要!哈哈)
8、前端会不会,Ajax 是什么,Ajax 实现原理
前端我只是会用一些 js 而已,用过 jquery 框架,问我 Ajax 全称是啥,我猜是异步的 js 和 xml。Ajax 实现原理其实我也不懂,我就只简单讲了一下它通过 XMLHttpRequest 对象进行异步查询,Ajax 引擎在客户端运行,减少了服务器工作量。
9、让我设计一个线程池
因为我简历中有写到我对多线程、并发这一块理解比较好。所以他老问这方面的题。这个问题因为我之前看过 ThreadPoolExecutor 的源代码,所以我就仿照那个类的设计思路来想的,详细讲了一下核心池、创建线程可以用工厂方法模式来进行设计、线程池状态、阻塞队列、拒绝策略这几个方面。设计的还算比较周全。
10、讲几个设计模式,哪些地方用到了,为什么要用
单例模式,jdk 中的 getRuntime();工厂方法模式,ThreadPoolExcutor 用到 ThreadFactory;观察者模式:java.util 包下面的 Observable 和 Observer。最后主要讲了一下工厂方法模式的使用场景。
11、Mysql 优化、索引的实现
我从数据库设计优化和查询优化两方面讲的。索引 B+树实现,InnoDB 和 MyISAM 主键索引的实现区别,一个聚集一个非聚集。
12、事务的隔离级别
四种隔离级别,可能会出现哪些异常,mysql 中默认级别。
13、有没有用过 Hibernate、mybatis、git
这个简单讲一下就好,分别是干什么的
*14、Linux *
我说这个本科学过,但是很久没用,命令忘光了。他说没事,考你几个简单的:cd、ls、dir(真的是简单的)
15、算法题
从 10 万个数中找最小的 10 个,时间复杂度分析(最大堆,考虑内存)
从一个有正有负数组中找连续子数组的最大和,时间复杂度分析(动态规划)
满二叉树第 i 层有多少个节点,n 层的满二叉树共有多少个节点
终于到我提问环节了
1、你们是什么部门(他说是核心部门,大数据研发)
2、我对高并发和负载均衡挺有兴趣的,但是我平时在学校也没有这个环境让我在这方面有所体验,那你建议我目前可以怎么学呢(他说这确实是不太好学,只能看些理论和别人的博客,以后工作中才能慢慢学)
3、中间件具体是做什么的,是解决高并发和负载均衡吗(他说差不多是的,然后他说我们这个部门不是中间件,是大数据部门啊,我说恩我知道)
最后没啥问题了,他让我保持电话畅通。
技术三面 25 分钟
面试官说是他是另外一个部门的,需要进行交叉面试。
1、MySql 优化
2、说下项目做了些什么,架构之类的
3、在 collabedit 上在线写代码,题目很简单是编程之美上的原题,一个有序的整数数组,输出两个数,使它们的和为某个给定的值。之前做过很快写好,然后给他讲思路。他继续问如果数组无序怎么办,先排序。
4、两个文件,每个文件中都有若干个 url,找出两个文件中相同的 url(用 HashMap)
这一面挺简单的,只是增加之前面试没有过的在线写代码环节,collabedit 后来我才了解,像 facebook 一些互联网公司远程面试都会用这个在线编辑器写代码,就是文本文档写,没有提示,不能编译运行,跟白板写一样。平时练练手就好。
技术 HR 四面 30 分钟
三面面试官说他那就是终面,说我过了等 hr 联系我。万万没想到半小时后的 hr 面居然也是技术。
1、自我介绍,都四面了还自我介绍?!我还以为是单纯的 hr 面,所以介绍的都是我的性格和生活方面的,结果并不是。
2、问项目,问的特别特别细,技术细节,还有遇到什么问题,怎么解决的,做项目有没有人带,怎么跟别人沟通的。
3、数据库优化,如果数据库一个表特别大怎么办 数据库优化我就讲了之前讲过很多遍的点,他问一个表特别大怎么办:大表分小表,怎么实现:使用分区表
总结
怎样才能拿到大厂的 offer,没有掌握绝对的技术,那么就要不断的学习
面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责。
下面是我整理的 2020 年大厂经常问到的一些面试真题及解析以及大厂面试场景。
需要获取得话麻烦一键三连+评论,然后添加 VX(tkzl6666)即可免费领取
面试题及解析:内容点包含有 java 集合,jvm,并发编程,spring,mybatis,springMVC,微服务,Dubbo,netty,网络,zookeeper,kafka,rabbitMQ,readis 缓存,数据库,设计模式 等一线大厂互联网大厂常问到的面试真题
大厂面试场景
评论 (1 条评论)