春招阿里提前批Java面经(阿里妈妈/蚂蚁/支付宝/淘系)
3-1阿里妈妈一面
1小时28分钟
项目
- 介绍一下项目
- 问项目,问博客,看GitHub
- drools在业务中怎么用的
- 并行计算怎么实现
- 如果是有依赖关系的并行计算,该如何实现
- 说说Redis热点数据原理
- 讲讲Redis主从复制原理
- 持久化怎么实现的
- 本科学什么专业的
- 平时学习怎么记录博客的
基础
- 先说说hashMap实现原理
- 讲讲红黑树的平衡条件
- 讲讲AVL树
- 还有没有其它的平衡二叉树
- hashMap线程不安全体现在哪
- 讲讲线程安全,怎么解决
- 讲讲你遇到的死锁的场景,如何解决
- 讲讲volatile特点
- 讲讲指令重排序
- 实现一个指令重排的场景,怎么实现
- ThreadLocal怎么实现的,存在哪
- 排序算法说印象最深的两个[说了快排、堆排]
- 讲讲快排和堆排如何实现的
场景题
- 场景题1:如何实现一个压缩算法?
- 场景题2:如何实现微信摇一摇,前后接口、后端流程(在面试官耐心引导下,答了七七八八)
3-4蚂蚁网商银行一面
57min
- 自我介绍一下
- Java基本类型有哪些?
- int类型在32位系统和64位系统中使用有区别吗?
- Java怎么屏蔽这个差异?
- Object对象里面有哪些方法?
- notify和wait为什么放在Object对象中?
- 重写equals方法时为什么要建议重写hashCode方法?
- 锁是用来解决什么问题?
- synchronized可以用在什么地方?
- synchronized修饰static方法和修饰代码块有什么区别?
- synchronized锁和Lock锁有什么差异,使用场景区别?
- synchronized怎么释放锁?
- Map、Set和List各自什么场景?
- ArrayList和LinkedList底层实现区别?
- new一个ArrayList,默认长度?
- ArrayList扩容过程?
- HashMap和TreeMap区别,使用场景区别?
- 为什么TreeMap没有负载因子、容量这样的参数?
- HashMap指定初始容量11和15有什么区别?
- Redis的哈希表跟HashMap有什么区别?
- 你觉得Redis的设计思想是什么?(我???)
- Redis怎么优化内存?
- 现在我要在Redis中存一个包含很多属性的学生对象,给你服务器所有权限,从节省内存角度怎么最优存储?
- MySQL有哪些引擎?
- innodb和myism有什么区别,使用场景区别?
- 事务隔离级别有哪些,常用哪个?
- 可重复读怎么实现的?
- 两个事务同时开启,分别插入一个主键都为1的记录,不提交,会不会报错,报什么错?
- 说几个能体现自己水平的linux命令
- Linux命令,查一个包含了某个字符串的log文件
- Linux命令,查找log的前5行,后5行
- Linux命令,查看某log文件某个字符串的前后5行
- 看了你的博客衍生出问题:为什么jdbc里用class.forname()不用classLoader.loadClass()?
反问:
- 刚才看了我哪篇博客衍生出了这个问题,是不是SPI那篇?
不是,你自己去想,挨个看看。你如果真正理解了那篇博客,刚才的问题就很简单。
- 对我有什么建议?
你太急于表现自己,简历写得很好,但是缺少实际能力的支撑,建议要脚踏实地。
3-4淘系拍卖技术部一面
1小时4分钟
项目和自我介绍
- 自我介绍
- 本科专业跟计算机有什么区别
- 学过操作系统、编译原理这些课吗
- 轮子项目难点和挑战点
- 项目怎么调优的
- io模块健壮性有考虑吗,被攻击了怎么办,插入攻击消息会导致接收异常
- 你用什么工具查看项目性能瓶颈
- 还能想到什么调优方向吗
- Redis高性能核心是什么,偏IO型的系统理应多线程的性能会更好,为什么单线程会更快呢?
- 项目里怎么用到docker?
- 说说你对drools的理解
基础知识
- Java的线程池什么情况会在内部新建线程来执行任务,达到最大线程数量会怎么样?
- Java中有什么工具来做线程同步
- Lock是用Java代码实现的,讲讲它的实现机制
- 讲讲类加载机制
- 垃圾回收中如何判断一个对象是否是垃圾,哪些对象可以作为GCRoot?
- 对象在什么时候从年轻代迁移到老年代?
- 你知道哪些设计模式
- 简单说一说你对动态代理的理解
其它
- 讲一下你学习的软件工程设计方法
- 现在再让你重新来设计你的项目,你会如何去做,达到立项的目标
反问
- 对我有什么建议?
很多问题要向上抽象一下,可以不只是局限于技术,多考虑考虑业务上的设计,根据自己掌握的方法,学习别人的方法,经过沉淀后形成自己的方法论
3-5支付宝商家平台一面
1小时34分
- String类型是不是可变的?
- 为什么String被设计成不可变?
- 什么方式可以构建不断变化的String?
- StringBuilder是如何实现的?
- 用过StringBuffer吗,是如何保证线程安全的,具体怎么加锁的?
- HashMap和HashTable的区别?
- 除了ConcurrentHashMap还有什么其它方法可以使用高效的线程安全的Map?
- 说一下HashMap的原理,为什么线程不安全?
- ConcurrentHashMap为什么是线程安全的?
- 设计一个类作为哈希表中的key,要重写哪些方法?
- 为什么要同时重写equals和hashCode?
- Object类里的hashCode方法返回的是什么值?
- Object类里的equals方法了解吗?
- 介绍一下线程生命周期?
- 如何合理地设置线程池参数?
- CPU密集型和IO密集型分别怎么设置线程数量?
- 操作系统如何进行线程上下文切换
- Java的线程存储空间存在哪个位置
- 介绍一下Java内存模型
- Java运行时数据区里,哪些是线程私有的,哪些是线程公有的
- 堆中的对象是如何分配和回收的?
- 为什么要分代收集,分代收集能带来什么好处?
- 能不能介绍一下年轻代和老年代各自的垃圾回收算法?
- 方法区垃圾回收会回收什么东西?
- 怎么定义无用的类,你会怎么设计回收算法去回收无用的类?
- 如何用数组或者链表去实现一个队列?
- 队列用数组实现和链表实现,各自优缺点是什么?
- 说一下你知道的静态查找有哪些?
- 介绍一下折半查找?
- 折半查找的平均查找长度是多少?
- 你说的是时间复杂度,那它的平均查找长度是多少?
- 讲一下归并排序
- 归并排序时间复杂度是多少?
- 归并排序是稳定的吗?
- 快排最好和最坏复杂度分别是多少?
- 如何设计一个包含min函数的栈?
- 有没有了解过一些XXXX深度学习技术?
- 使用过哪些Linux常用命令
- 磁盘不够了,如何快速找出磁盘占用最大的文件?
- 目录下面文件按照文件大小排序
- CPU过高如何排查?
- 如何查看Java进程里哪一个线程在占用过高CPU
- 讲一下TCP和UDP的区别?
- TCP如何处理重复的数据
- TCP建立连接的过程
- 说一下乐观锁和悲观锁,你如何设计数据库里的悲观锁和乐观锁
- 关系型和非关系型数据库区别,使用场景有什么区别?
- 你了解过Hbase吗?(没有)
- 讲一下RDB和AOF的区别,你的持久化如何实现的?
- Redis是如何解决AOF文件体积膨胀的问题?
- Redis如果耗尽了系统内存,有什么解决方法,针对什么样的键怎样清理?
- 过期的键是如何处理的?
- Redis的LRU算法和LFU算法跟传统的相比,做了什么优化?
反问
- 有什么评价或建议吗?
你网络知识答得很好,算法和数据结构还算比较聪明稍加引导能有清晰的解决思路,Linux和数据库很薄弱需要多了解一下,还有一些基础知识比如String常量池这些需要多了解,还有Redis设计思路你也需要更深的理解,有时候不仅仅要关心这个东西是什么样,还需要考虑为什么这么设计。
3-6淘系拍卖技术二面
50min
- 自我介绍,介绍项目,问项目
- 了解哪些Java集合
- 介绍一下hashMap实现原理
- 自定义一个哈希表的key的类,需要实现什么方法?
- equals和hashCode有什么联系?
- Java里异常有哪几类?
- 描述一下类加载过程?
- 初始化阶段会具体初始化了哪些东西?(卒)
- 分别讲一下Java里的垃圾收集算法和垃圾收集器
- 讲一下CMS垃圾收集过程
- 讲一下可达性分析,哪些对象可以作为GCRoot
- 介绍一下红黑树
- 讲一下堆排序的流程
- 你有什么可以分享的学习方法吗?
- 你有哪些学习渠道?
- 你有看过哪些开源项目的源代码?
- 看过Spring的源码吗?
- 说一下Redis的内存分配管理机制?(卒)
- 了解哪些RPC框架?(不了解)
反问
- 对我有什么建议?
基础知识很扎实,但是需要扩展视野,多了解一下互联网公司用到的分布式框架、源码。讲项目要从业务背景出发。
3-6淘系商家平台一面
20min面试+15min唠嗑
- 讲讲项目
- Redis持久化机制有哪些
- 讲讲RDB
- RDB优点和缺点
- RDB是怎样写二进制文件的,会不会阻塞Redis读写
- 主进程fork子进程之后,两个进程的内存关系是什么?
- 讲讲HashMap底层原理
- 为什么用红黑树来解决哈希冲突
- 红黑树查找性能开销多少,为什么?
- 用什么方法创建线程池,有哪些核心参数?
- 线程池达到线程最大数量,会发生什么?
- volatile用来解决什么问题
- 你说的volatile可见性和有序性这两个特性,他们核心底层原理是一样的,具体是什么?
- 说说Java的四种引用
- 软引用和弱引用的差异是什么
- 面向对象的7大设计原则
- 讲一下依赖倒置原则,为什么要依赖倒置
- 如果违反了单一职责原则,会出现什么问题
- 你会哪些设计模式
- 讲一下代理模式
3-7淘系商家平台二面
1小时14分钟
- 问了一通想法,面了哪些部门,打算如何选择
- 问毕业论文
- 介绍项目
- 介绍一下Reactor模式是什么,好在哪里
- 粘包、半包如何解决的
- 如何进行做性能调优的?
- 8个小铁球,已知一个小球比其它七个球重,有一个天平,最多称几次能把重的球找出来?
- 如何找出文本文件中频次最高的10个单词。变种:按频次排序,前十的所有单词取出来?
- 如何为你的Redis实现一个限流的功能?
- 爬虫系统,希望你实现这样的功能:爬取时过滤掉24小时内的已爬取的url
- 你站在用户视角来看,12306这个app有什么核心技术或业务问题,如何解决?
- 火车票分段购票问题,如何来实现并解决?
面试官建议
你在面试的过程中不要去猜面试官想要什么答案,可以果断点想到什么就说,自信一点,面试官一般会引导你
3-8淘系全域营销一面
42min
项目相关
- 自我介绍
- 介绍项目
- 线程池使用,参数的含义,如何设置这些参数
- 线程池饱和策略有哪些
- 各个饱和策略分别适合什么场景
- 你的项目里用了什么饱和策略
- 为什么想到用drools规则引擎
- 有没有横向对比过drools和其它规则引擎吗
- 轮子项目花了多久时间
- 做项目碰到过什么困难的问题
- 死锁问题的解决,是自己一点点摸索的,还是结合网上的经验
- 我看你项目用过动态代理,那介绍一下动态代理和静态代理区别
- 知不知道jdk代理和CGLib代理有什么区别,为什么会出现这两种
基础
- 说说HashMap
- 为什么Redis的负载因子设置比jdk的HashMap的负载因子大
- 多线程对HashMap进行增删改查,分别会出现什么线程不安全场景,列一下
- concurrentHashMap和HashMap有什么区别
- 平时会用哪些linux命令
- 如何用find命令去找一个大小大于100MB的文件
3-9淘系全域营销二面
32min
- 自我介绍,问了问本科经历
- 你六级过了吗,多少分(我???)
- 你Redis源码看了哪些部分
- 介绍一下Reactor模型
- 除了NIO之外,还有哪些其它网络模型,它们之间有什么区别
- NIO是同步还是异步,阻塞还是非阻塞的,NIO的N是什么意思
- 多路复用的系统调用有哪些
- select和epoll有什么区别
- Redis是单线程还是多线程
- 为什么Redis不用多线程,最新版本Redis也是单线程的吗
- Redis有几种淘汰策略
- Redis支持持久化吗
- 你有没有系统地学过Spring
- 计算机知识,你有什么学习方法吗
- 最近在看哪本书
- 最近在看什么项目的源码
- Java学了多久
- 看过什么其它项目源码
- 并发和并行有什么区别
- Java线程有哪些状态
- 线程超时等待结束之后会切换到什么状态
- Java的锁有几种
- 什么叫自旋锁
- 了解过分布式相关的内容吗
- 说一说CAP
- CAP三个点一般都能做到吗,能做到几点
- 一致性算法有哪些
- Java中包装类型是指什么
- 什么叫装箱和拆箱
总结
以上便是我三月上旬阿里春招实习提前批面试记录,全都过了(可能是提前批不怎么刷人吧)。能系统开放前 面上一两轮挺好的,这样选择主动权更多一些,不至于太迷茫。此外,春招初期拿阿里练一练手,也蛮有帮助。蚂蚁的那两次面试很惨,问得确实很全面,不过也得益于此,能够及时发现自己的缺陷,在后续的面试中规避。面试的问题很大程度上围绕简历和项目,简历就像是期末考试的考纲一样,网上的面经参考价值远不如自己的(除了一些基础知识类问题)。所以春招还是要多面试,千人千面,实践出真知。