专门刷高频题,事半功倍。
三面
1.线程有哪些状态,等待状态怎么产生,死锁状态的变化过程,中止状态,interrupt()方法
2.你怎么理解线程安全,哪些场景会产生线程安全问题,有什么解决办法
3.mysql多事务执行会产生哪些问题,怎么解决这些问题
4.分库分表做过么,怎么做到不停机扩容,双写数据丢失怎么办,跨库事务怎么解决
5.你们用的redis集群么,扩容的过程,各个节点间怎么通信的
6.对象一定分配在堆上么,JIT,分层编译,逃逸分析
7.es的写入,查询过程,底层实现,为什么这么设计
8.es集群,脑裂问题,怎么产生的,如何解决
9.while(true)里面一直new thread().start()会有什么问题
10.socket了解么,tcp和udp的实现区别,不了解,用的不多
11.设计一个秒杀系统能承受千万级并发,如果redis也扛不住了怎么办
项目介绍
四面
1.讲讲你最熟悉的技术,jvm,mysql,redis,具体哪方面
2.new Object[100]对象大小,它的一个对象引用大小,对象头结构
3.mysql主从复制,主从延时怎么解决
4.怎么保证redis和mysql的一致性,redis网络原因执行超时了会执行成功么,那不成功怎么保证数据一致性
5.redis持久化过程,aof持久化会出现阻塞么,一般什么情况下使用rdb,aof
6.线上有遇到大流量的情况么,产生了什么问题,为什么数据库2000qps就撑不住了,有想过原因么,你们当时怎么处理的
7.限流怎么做,如果让你设计一个限流系统,怎么实现
8.dubbo和spring cloud区别,具体区别,分别什么场景使用
9.给了几个场景解决分布式事务问题
项目介绍
你觉得你们的业务对公司有什么实际价值,体现在哪,有什么数据指标么
五面
hr面完后又来了一面,说是交叉面
1.怎么理解用户态,内核态,为什么要分级别,有几种转换的方式,怎么转换的,转换失败怎么办
2.怎么理解异常,它的作用是什么,你们工作中是怎么使用的
3.你们用redis么,用来做什么,什么场景使用的,遇到过什么问题,怎么解决的
4.jvm元空间内存结构,永久代有什么问题
5.你平时开发中怎么解决问题,假如现在线上有一个告警,你的解决思路,过程
6.你们为什么要用mq,遇到过什么问题么,怎么就解决的
你觉得和友商相比,你们的优势在哪
二面
1.hashmap原理,put和get,为什么是8转红黑树,红黑树节点添加过程,什么时候扩容,为什么是0.75,扩容步骤,为什么分高低位,1.7到1.8有什么优化,hash算法做了哪些优化,头插法有什么问题,为什么线程不安全
2.arraylist原理,为什么数组加transient,add和get时间复杂度,扩容原理,和linkedlist区别,原理,分别在什么场景下使用,为什么
3.了解哪些并发工具类
4.reentrantlock的实现原理,加锁和释放锁的一个过程,aqs,公平和非公平,可重入,可中断怎么实现的
5.concurrenthashmap原理,put,get,size,扩容,怎么保证线程安全的,1.7和1.8的区别,为什么用synchronized,分段锁有什么问题,hash算法做了哪些优化
6.threadlocal用过么,什么场景下使用的,原理,hash冲突怎么办,扩容实现,会有线程安全问题么,内存泄漏产生原因,怎么解决
7.垃圾收集算法,各有什么优缺点,gc roots有哪些,什么情况下会发生full gc
8.了解哪些设计模式,工厂,策略,装饰者,桥接模式讲讲,单例模式会有什么问题
9.对spring aop的理解,解决什么问题,实现原理,jdk动态代理,cglib区别,优缺点,怎么实现方法的调用的
10.mysql中有一个索引(a,b,c),有一条sql,where a = 1 and b > 1 and c =1;可以用到索引么,为什么没用到,B+树的结构,为什么不用红黑树,B树,一千万的数据大概多少次io
11.mysql聚簇索引,覆盖索引,底层结构,主键索引,没有主键怎么办,会自己生成主键为什么还要自定义主键,自动生成的主键有什么问题
12.redis线程模型,单线程有什么优缺点,为什么单线程能保证高性能,什么情况下会出现阻塞,怎么解决
13.kafka是怎么保证高可用性的,讲讲它的设计架构,为什么读写都在主分区,这样有什么优缺点
了解DDD么,不是很了解
你平时是怎么学习的
项目介绍
一面
1.synchronized原理,怎么保证可重入性,可见性,抛异常怎么办,和lock锁的区别,2个线程同时访问synchronized的静态方法,2个线程同时访问一个synchronized静态方法和非静态方法,分别怎么进行
2.volatile作用,原理,怎么保证可见性的,内存屏障
3.你了解那些锁,乐观锁和悲观锁,为什么读要加锁,乐观锁为什么适合读场景,写场景不行么,会有什么问题,cas原理
4.什么情况下产生死锁,怎么排查,怎么解决
5.一致性hash原理,解决什么问题,数据倾斜,为什么是2的32次方,20次方可以么
6.redis缓存穿透,布隆过滤器,怎么使用,有什么问题,怎么解决这个问题
7.redis分布式锁,过期时间怎么定的,如果一个业务执行时间比较长,锁过期了怎么办,怎么保证释放锁的一个原子性,你们redis是集群的么,讲讲redlock算法
8.mysql事务,acid,实现原理,脏读,脏写,隔离级别,实现原理,mvcc,幻读,间隙锁原理,什么情况下会使用间隙锁,锁失效怎么办,其他锁了解么,行锁,表锁
9.mysql索引左前缀原理,怎么优化,哪些字段适合建索引,索引有什么优缺点
10.线上遇到过慢查询么,怎么定位,优化的,explain,using filesort表示什么意思,产生原因,怎么解决
11.怎么理解幂等性,有遇到过实际场景么,怎么解决的,为什么用redis,redis过期了或者数据没了怎么办
自我介绍;
项目延申;(延展的非常非常非常深);
new一个对象,从底层来说会发生什么;
new一个HashMap,for循环put进入10000个数据会发什么;
快速排序和归并排序的原理,以及时间、空间复杂度解释一下,并且让手撕代码;
10亿个数据对象(其中包含属性最早创建时间createTime),请其中最早的十个有什么方法,那自己设计一个数据结构该怎么设计?
手撕 NC50 链表中的节点每k个一组翻转(原题稍有变更);
手撕模拟多线程实现银行转帐(未同步与同步);
你平时是怎么学习新技术的?
1.线程安全的类有哪些,平时有使用么,用来解决什么问题
2.mysql日志文件有哪些,分别介绍下作用
3.你们项目为什么用redis,快在哪,怎么保证高性能,高并发的
4.redis 字典结构,hash 冲突怎么办,rehash,负载因子
5.jvm了解哪些参数,用过哪些指令
6.zookeeper 的基本原理,数据模型,znode类型,应用场景有哪些
7.一个热榜功能怎么设计,怎么设计缓存,如何保证缓存和数据库的一致性
8.容器化技术了解么,主要解决什么问题,原理是什么
算法:对于一个字符串,计算其中最长回文子串的长度
并发类了解吗,原理
业务开发中的原子性怎么保证
协程相关库有用过吗,和线程比优缺点
cpu不见涨但是服务响应时间变长怎么排查
gc排查命令
业务开发中遇到逻辑错误这类怎么排查
多线程相关问题又遇到过吗
中间件相关问题遇到过吗
rpc相关原理
es sprak flink那些用过吗
2g 4核机器排序10g文件
两个有序数组找交集
还有道笔试题,经典topK很简单
2、项目介绍
项目的话就挑选一个你自己参与的项目,详细的介绍一下这个项目,包括了项目的业务难点、技术栈和难点逻辑的实现思路等等。
3、类的加载流程具体的讲一下
例:new一个String对象,它被存在哪?static String呢?final String呢?
5、了解JVM的收集器吗?请详细的介绍一下
6、创建一个对象的时候,构造方法的调用顺序
例:一个类继承了String的情况下,是怎么调用的?
7、在你的项目当中,你所使用的垃圾收集器是什么?为什么用这个垃圾收集器?
8、参与过JVM调优吗?
9、JVM如何调优?将一下你调优的过程以及结果
10、ReentrantLock属于乐观锁还是悲观锁?
12、ReentrantLock和synchronized本质上区别是什么?(sychronized和reentrantlock区别在哪里)
13、什么是悲观锁和乐观锁?(乐观锁是什么?)什么场景下会使用?
14、中间件你都使用过哪些?在什么样的场景下使用它们?
15、缓存的淘汰策略有哪些?
16、allkeys-lru的实现原理
17、队列只使用过RabbitMq吗?为什么选择RabbitMq?
18、了解过其他的消息队列中间件吗?
19、多线程用过吗?在什么场景下使用多线程的?
20、线程池参数有哪些?(线程池的核心参数有哪些?)
21、设置一个阻塞的线程要考虑到哪些参数?应该如何去设置?
22、使用线程池的时候,你是如何选择参数的?
23、你认为你自己的优势是什么?和别人比起来,你觉得自己的水平如何?又欠缺些什么?
JVM
· 请介绍一下JVM内存模型??用过什么垃圾回收器?都说说呗?
· 线上发送频繁ful1gc如何处理??CPU使用率过高怎么办?
· 如何定位问题?如何解决?说下解决思路和处理方法.
· 知道字节码吗?字节码都有哪些?
· IntegerX5,inty=5,比较x=y都经过哪些步骤?
· 讲讲类加载机制呗?都有哪些类加载器,这些类加载器都加载哪些文件?
· 手写一下类加载Demo
· 知道osgi吗?他是如何实现的???
· 请问你做过哪些JVM优化?使用什么方法?达到什么效果???
· class.forName("java.langString")和String.class.getClassLoader().LoadClass("java.lang.String")什么区别啊??
Spring
· spring都有哪些机制啊?AOP底层如何实现的啊?I0C呢??
· cglib知道吗?他和jdk动态代理什么区别?手写个jdk动态代理呗?
通信协议
· 说一下TCP/IP四层?
· http的工作流程???http1.0http1.1http2.0具体哪些区别啊?
· TCP三次握手,四层分手的工作流程?画一下流程图?为什么不是四次五次或者二次啊?
· 画一下https的工作流程?具体如何实现啊?如何防止被抓包啊??
算法
· 比较简单,我一个文件,有45亿个阿拉伯数字,如何进行去重啊?如何找出最大的那个数啊?
数据结构
· 二叉树和红黑树等.
分布式服务框架
· 说一下dubbo的实现过程?注册中心挂了可以继续通信吗??
· zk原理知道吗?zk都可以干什么?Paxos算法知道吗?说一下原理和实现??
· dubbo支持哪些序列化协议?hessian?说一Fhessian的数据结构?PB知道吗?为啥PB效率是最高的啊??
· 知道netty吗?netty可以干嘛呀NIO,BIO,AIO都是什么啊?有什么区别啊?
· dubbo复制均衡策略和高可用策略都有哪些啊?动态代理策略呢?
· 为什么要进行系统拆分啊?拆分不用dubbo可以吗?dubbo和thrift什么区别啊?
分布式消息队列
· 为什么使用消息队列啊?消息队列有什么优点和缺点啊?
· 如何保证消息队列的高可用啊?如何保证消息不被重复消费啊?
· kafka,activemq,rabbitmq,rocketmq都有什么优点,缺点啊???
· 如果让你写一个消息队列,该如何进行架构设计啊?说-下你的思路
分布式搜索引擎
· es的工作过程实现是如何的?如何实现分布式的啊
· es在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
· es的查询是个怎么的工作过程?底层的lucence介绍一下呗?倒排索引知道吗?
· es和mongdb什么区别啊?都在什么场景下使用啊?
· 高并发高可用架构设计
· 如何设计一个高并发高可用系统?
· 如何限流?工程中怎么做的,说一下具体实现?
· 缓存如何使用的?缓存使用不当会造成什么后果?
· 如何熔断啊?熔断框架都有哪些?具体实现原理知道吗?
· 如何降级?如何进行系统拆分,如何数据库拆分????
1、手撕代码。牛客题霸上的原题,可以去看看: NC14 二叉树的之字形层序遍历
2、 Arrays.sort 实现原理和 Collection 实现原理
3、LinkedHashMap的应用
4、cloneable接口实现原理
5、异常分类以及处理机制
6、wait和sleep的区别
7、数组在内存中如何分配
8、Java 内存模型?
9、如何保证多线程下 i++ 结果正确?
10、线程池的种类,区别和使用场景?
11、分析线程池的实现原理和线程的调度过程?
12、线程池如何调优,最大数目如何确认?
13、ThreadLocal原理,用的时候需要注意什么?
14、CountDownLatch 和 CyclicBarrier 的用法,以及相互之间的差别?
15、LockSupport工具
16、Condition接口及其实现原理
17、Fork/Join框架的理解
18、分段锁的原理,锁力度减小的思考
19、八种阻塞队列以及各个阻塞队列的特性
20、Spring 是如何管理事务的,事务管理机制?
21、Spring 的不同事务传播行为有哪些,干什么用的?
22、Spring 中用到了那些设计模式?
23、Spring MVC 的工作原理?
24、Spring 循环注入的原理?
25、Spring AOP的理解,各个术语,他们是怎么相互工作的?
26、Spring 如何保证 Controller 并发的安全?
27、了解哪几种序列化协议?包括使用场景和如何去选择
28、Netty的零拷贝实现
29、Netty的高性能表现在哪些方面
30、数据的垂直拆分水平拆分。
31、zookeeper原理和适用场景
32、zookeeper watch机制
33、redis/zk节点宕机如何处理
34、分布式集群下如何做到唯一序列号
35、如何做一个分布式锁
36、用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗
37、MQ系统的数据如何保证不丢失
38、列举出你能想到的数据库分库分表策略;分库分表后,如何解决全表查询的问题
39、zookeeper的选举策略
40、mysql 性能优化
41、mysql的索引分类:B+,hash;什么情况用什么索引
42、事务的特性和隔离级别
43、Redis持久化的几种方式,优缺点是什么,怎么实现的
44、Redis的缓存失效策略
45、Redis集群,高可用,原理
46、Redis缓存分片
47、Redis的数据淘汰策略
48、类的实例化顺序
49、JVM垃圾回收机制,何时触发MinorGC等操作
50、JVM 中一次完整的 GC 流程(从 ygc 到 fgc)是怎样的
51、各种回收器,各自优缺点,重点CMS、G1
52、各种回收算法
53、OOM错误,stackoverflow错误,permgen space错误
一面:
1.进程和线程的区别;
2.什么叫线程安全?举例说明;
3.OSI七层模型,包括TCP,IP的一些基本知识;
4.数据库的锁;
5.DFS,BFS算法;
6.还有一些诸如collection framework的Java基础;
7、http中,get post的区别;
8、有个每秒钟5k个请求,查询手机号所属地的笔试题(记得不完整,没列出),如何设计算法?请求再多,比如5w,如何设计整个系统?
9、比较熟悉什么技术?
二面:
1、是否愿意去杭州?
2、熟悉各种技术框架么?源码读过么?
3、数据库了解什么?mysql了解么?
4、前台技术,看我用的ExtJS,就问是否了解JQuery;
5、进现在的公司,觉得对技术是否有提升?
6、是否了解augularJS, nodejs,cmd规范,amd规范等;
7、jvm性能调优都做了什么;
8、高并发情况下,我们系统是如何支撑大量的请求的?
9、集群如何同步会话状态;
10、负载均衡的原理;
11、数据库事务属性;
12、二叉树的遍历算法;
13、hashtable和hashmap的区别;
14、并发、同步的接口或方法;
15、string、stringbuilder、stringbuffer区别;
16、https处理的一个过程,对称加密和非对称加密;
17、线程的几种状态;
一面:
1、请简单介绍一下自己。
2、项目参与的核心设计有哪些?有没有遇到过问题,是怎样去解决的?
3、ArrayList和LinkedList,它们的底层是什么?
4、HashMap及线程安全的ConcurrentHashMap,以及各自优劣势;
5、Java是如何实现线程安全的?
6、Synchronized与Lock相比,哪个更加好?
7、HashMap中的get()方法是如何实现的?
8、HashMap可以用在哪些场景?
9、JVM,垃圾回收机制,还有内存划分等;
10、SQL优化,常用的索引?
11、还有什么问题需要问的?
二面:
1、自我介绍,然后问做过哪些Java开发相关的项目。
2、问我对哪些技术比较熟悉?
3、多线程状态图,状态如何流转?大概说一说;
4、问了死锁和死锁的原因;
5、还问了页锁、乐观锁和悲观锁;
6、乐观锁是如何保证线程安全的?
7、用过线程池吗?对应的好处是什么?如何用?
8、两个10G的文件,里面是一些url,内存只有1G,如何将这两个文件合并,找到相同的url?
9、1000个多并发线程,10台机器,每台机器4核的,设计线程池的大小。
10、代码题:两个有序数组,数组中存在重复数字,合并成一个有序数组,去除重复数字。
11、说一下自己的优缺点;
三面:
1、jvm性能调优都做了什么?
2、数据库性能调优如何做?
3、分布式系统原理:CAP,最终一致性,幂等操作等;
4、高并发情况下,我们系统是如何支撑大量的请求的?
5、集群如何同步会话状态;
6、常用NOSQL,有做过比较?
7、什么情况会出现雪崩,以及如何应对?
8、负载均衡的原理;
9、数据库事务属性;
10、与同事沟通的时候,如果遇到冲突了如何解决?
11、你觉得自己在工作中哪方面欠缺?
12、有问题要问么?
13、你对薪资的期望?
14、为什么要离开现在的公司?
一面
自我介绍
项目难度介绍
如何实现延时任务
如何实现限流
线程池的参数
能不能自己实现一个java.lang.String并加载
Redis为什么这么快
epoll和poll的区别
进程同步的方式
二面
MySQL的索引机制
如何自己实现内存分配和管理?不太懂,然后说了jvm的垃圾回收机制
你们公司内部的RPC框架,介绍一下
Redis的key过期策略
缓存穿透和缓存雪崩
分布式锁
如何实现全局的id生成策略
悲观锁和乐观锁
红黑树了解么
三面
如何实现群消息已读
消息推送如何保证不重复
Kafka如何保证消息的可靠性
RPC是什么,和http调用有什么区别
说一说你项目的架构
GC
MySQL的索引原理,给了一个场景,如何优化
四面
写个producer-consumer吧,我说上次写过了。。傻了。。不该说的,然后面试官换了一道题,还好比较简单,写个二分查找,2分钟写完完事。
项目难点
MVCC
HTTPS
ElasticSearch的查询过程
Kafka如何保证高可用
Reids的集群和选主
知道什么分布式一致性算法
如何实现定时关单
首页 > 笔经面经 > 阿里Java后台开发面经
阿里Java后台开发面经
loginin
最近原来实习时候的Boss联系我,说他跳槽到了阿里,问我有没有兴趣面一个Java后台开发岗位。考虑到我只工作了一年,现在去阿里肯定要降薪,因此也没有太强烈的意愿。但出于提升自我的角度考虑,参加了面试。
一面(电话面试一小时)
首先做一个简单的自我介绍,主要包括学校经历和工作经历。我工作经历只有一年,大部分时间都是在做产品设计和UI/UX Design,因此隔着电话都能感受到面试官的shock。
Java基础。自动拆装箱如何实现,String,StringBuffer,StringBuilder的异同以及各自的实现。
JVM基础。JVM的内存模型,常见的垃圾回收算法。
事务ACID,编程时如何保证事务,分布式情况下如何保证事务。
由于分布式相关场景我没有接触过,因此面试官一直诱导我去设计实现一个分布式事务。
数据库乐观锁和悲观锁。如何实现一个乐观锁。
消息队列使用场景,Kafka的架构以及原理。
什么是restful api,和rpc调用有什么区别。
单例的几种写法。volatile关键字有什么作用。
以上就是电话面试的大体问题,面试完之后,又发给我三道算法题目,要求我一小时内完成,下面是三道算法题:
翻转一个long类型数字。例如输入123456L,输出654321L。- Leetcode翻转integer的变种。考察能否正确处理溢出的情况。
输入一个double,要求返回与它最接近的.49或.99的数字。例如12.77返回12.99,11.02返回10.99,12.61返回12.49。
有三个线程ABC分别向一个数组中写入a,l,i,要求最终的写入结果形如alialiali...写入次数由A线程决定。
这三道题目做的还比较顺利,第二天面试官又联系我阐述一下第一题和第三题的思路,然后通知我可以参加下一轮了。
二面(电话面试一小时)
二面主要考察了一些开放式的问题。
首先还是自我介绍。主要是工作后的经历。介绍一下工作一年所在team的产品,我承担了什么职责。
开放式问题。如何设计一个rpc框架。
开放式问题。如何设计一个服务注册中心。
集合类源码。HashMap是如何实现的,扩容的过程,为什么要扩容为2倍。HashMap中的链表替换为数组可以吗?时间复杂度相同吗?
集合类源码。线程安全的HashMap是什么?(HashTable和ConcurrentHashMap)ConcurrentHashMap是如何实现的?(Java7分段锁和Java8的CAS+Lock)和HashTable相比有什么优势?
红黑树的结构,时间复杂度是多少,如何计算的
什么是CAS操作,如何实现一个自定义锁
数据库设计。有一张很大的order表,如何设计能够提升查询效率(同时满足根据买家id和卖家id查询)?
二面也同样是一小时左右,面试过程还算顺利。只是当时我在厦门鼓浪屿的一家小餐馆吃晚饭,周围的嘈杂和闷热使我很烦躁,感觉面试官态度有些傲慢……ps.一面二面结束后面试官都各种暗示我要疯狂加班能不能接受blabla……
三面(电话面试一个半小时)
二面结束后的第三天,就收到了现场三面的通知。然而我还在厦门旅行,因此改为了电话面试。
三面是一个大Boss,因此面试的问题都更考察一些分析问题的能力。
介绍一下你工作一年学习到什么?所在项目的架构是什么样的?UI/UX设计有哪些规范(由于我说我学到了一些UI/UX设计方法,因此面试官就问了)?
数据隔离级别,脏读幻读。
线程池原理。
Synchronized的实现,锁的升级过程。
K8s的作用,K8s的底层架构。
对我业余时间做的一些项目做了介绍。
你觉得加入阿里你能给阿里带来什么?
进入阿里你需要忍受很多困难,需要迎难而上,如果绩效考评拿到差评,你会怎么办?