Java 工作两年多,我面试过的题目

2021-02-07 11:56:20 +08:00
 young1lin

以下下划线是我一定没遇到过的。其他的有些遇到过,有些有可能会遇到。内容有点多,更多的在 https://github.com/young1lin/notes/blob/master/Prepare%20for%20Interview/%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98%E7%AE%80%E5%8D%95%E6%B1%87%E6%80%BB.md

HashSet 的底层实现说下?为什么内置 HashMap ?说下它的数据结构,为什么 loadFactor 是 0.75 ?为什么要高位参与与运算?为什么它的 size 是 2 的 n 次方?为什么默认是 16 ?讲下它的扩容机制。什么时候转红黑树,为什么要转红黑树?为什么它是线程不安全的,它的哪些方法是线程不安全的?为什么会造成死循环? 1.8 是如何解决这个问题的?它的线程安全的实现有什么? ConcurrentHashMap 和 HashTable 有什么区别?说下它 1.7 和 1.8 的实现是什么?有什么区别?为什么要这么做?为什么说 ConcurrentHashMap 是线程安全的?它的 get 操作是有锁的吗?它是强一致性的吗?它为什么是弱一致性的? ConcurrentHashMap 1.7 和 1.8 是如何扩容的?sizeCtl 参数是干什么的,讲讲变换过程?为什么要用 volatile 修饰?说说它的功能?什么是 MESI 协议? CPU 原语是什么?什么是可见性? JMM 说说是什么?为什么要有 JMM ? Happened-before 是什么?它和 synchronized 的区别是什么?锁的升级与降级说下是什么?偏向锁是什么? Mark-Wrod 说下?锁的粒度是什么?锁消除了解吗?锁会被合并吗?什么时候会发生?你刚才说了 CAS,你能说下它是什么东西吗?为什么要引入 CAS ? ABA 问题是如何解决的? AQS 了解吗?它是如何实现的? CLH 又是什么? ReentrantLock 和 synchronized 区别是什么?为什么 ReetrantLock 能实现公平锁?默认构造器是公平锁吗?为什么不是? Copy-on-Write 了解吗? Fork/Join 又是什么?什么是线程,什么是协程?你刚才说了管程?你能说下这几个到底是做什么的吗?线程池说下参数,四种内置的拒绝策略,以及它的执行流程。你用过吗?为什么要这么设置参数? I/O 密集型应用和计算密集型应用如何设置其参数?你具体的业务线程池的参数是怎么设计的?为什么?测过吗?你定制化开发过吗?线程池预留了 3 个供子类扩展的方法你知道是哪三个吗?能做什么你知道吗? ThreadLocal 是什么?它为什么会造成内存泄漏?你实际开发中用到过吗? Spring 事务用这个干什么的?什么是事务的 SavePoint ?你知道死锁吗?如何解决死锁? sleep 和 wait 的区别是什么? BIO 、NIO 、AIO 是什么?说下区别,以及如何使用?了解 Netty 吗?如何解决粘包问题? ChannelPipeline 又是什么? ByteBuf 知道吗?读写指针又是什么?它和 mina 的区别是什么?它的 Zero-Copy ?了解过 FastThreadLocal 吗?它为什么比 ThreadLocal 快?有看过其中源码吗? Netty 解决了 NIO 类库的什么问题?空轮询又是什么? RPC 又是什么?序列化和反序列化又是什么?几个核心类说下。是干什么的?

你说你了解虚拟机,你知道虚拟机的运行时数据区吗?哪些是线程共享的,哪些是线程独有的?你了解 JVM 调优吗?调优过吗?为什么要这么设置?垃圾回收算法有几种?为什么要分代收集? Young 区说说它的分布结构,为什么 Eden 区 80%?为什么大对象直接进入老年代?控制的参数是什么?一个对象如果不是大对象,怎样才能进入老年代?控制的参数是什么?什么时候会发生 OOM ?你遇到过吗?怎么解决的?为什么低版本的 JDK 要把永久代内存调大点?默认大小是多少你知道吗?什么是 Major GC,什么是 Minor GC ?什么情况下会频繁 GC ?你查看过 GC 日志吗?什么时候回收对象?引用计数和可达性分析是什么?为什么 Java 使用后者? Python 使用前者?什么是 GCRoot ?什么时候对象不可达? Java 的四种引用说下,分别用在什么场景?你知道 JDK 源码哪里有用到 WeakReference 吗?什么是 STW ?什么是 Safepoint ?类加载的过程说下,什么时候优化,以及不同的时候的主要优化是什么?解语法糖是什么时候?为什么在编译的时候解语法糖?什么是双亲委派模型?可以破坏吗?各个 ClassLoader 加载哪部分类的?你自定义过 ClassLoader 吗?你说你用过 Jstack 诊断 CPU 使用率飙升的情况,说下具体步骤? Arthas 用过吗? Class 文件格式说下,什么是魔数,Class 文件的魔数是什么? JMX 了解吗?

ACID 说下是什么。你说你优化过 SQL,怎么优化的说下。like '%xx%',like '%xx',like 'xx%' 哪种情况会用到索引?说下 MySQL 执行流程。WAL(Write-Ahead Logging) 知道吗? redo log 和 undo log 是什么,它们作用说下。你说你改过 buffer_pool_size 等参数,为什么要改它?它里面的数据结构说下是什么?为什么冷热 3:7 ? join_buffer 你说你也改了,为什么?什么是驱动表和被驱动表?如何优化?你说你建了索引,什么是蔟集索引,什么是非蔟集索引?什么是回表?什么时候会索引失效?你的二级索引什么用得多?为什么优先使用普通索引,而不是唯一索引? MySQL 会死锁吗?什么是间隙锁?它会导致什么问题? MVCC 说下是什么? 4 种事务说下是什么?哪种或者哪几种事务隔离级别能避免幻读?能避免脏读?你说你还开启了 binlog,能说说是什么吗? canal 用过吗?说说它的原理。MySQL 主从模式如何开启?你是如何优化 SQL 的?上亿级别的数据你是如何优化分页的?为什么不建议在 MySQL 中使用分区机制?为什么删了数据还是磁盘空间不变?自增主键用完了会怎么样?如何解决这个问题?自增主键什么时候是不连续的?这样做的好处是什么?为什么推荐用自增主键? B+ Tree 又是什么?如何迁移数据库?为什么不建议使用外键?在高版本的 MySQL 中 count(1) 和 count(*) 区别是什么? order by 是如何工作的?分页机制又是什么? ACL 和 RBAC 是什么? grant 之后一定要刷新吗?视图用过吗?它的作用说下。视图和表的区别说下。存储过程写过吗?存储函数和存储过程的区别说下。NoSQL 用过吗? OceanBase 了解吗? HBase 了解吗?<u>HBase 有哪些坑,你碰到过吗?什么是 RegionServer ?</u>什么时候用 NoSQL,它能取代 RDBMS 吗?你说你用过 Elasticsearch,能说下它的请求执行过程吗?它的总体架构说下。它的插件你用过吗?你们的分词策略是什么?倒排索引说下是什么。

给二叉树后序和中序遍历,写前序遍历。手写个快排。翻转一下链表。O ( 1 )找出链表有环。DFS 找出二叉树搜索树第 k 大节点。

实现一个多线程类,并用该线程类实例化 3 个线程 A,B,C ; A 线程打印字符 A,B 线程打印字符 B,C 线程打印字符 C ;启动这 3 个线程,要求启动线程的顺序为 C 线程->B 线程->A 线程,并且最后输出内容为:A B C 。禁止使用 sleep 函数。阿里应该还有各种多线程打印的问题,这个得准备。

接下来应该是更高级的算法题目,至少是 LeetCode Menium 难度的,翻转链表确实有点初级,练个半个小时就搞定了。暂时还没碰到,碰到我也挂了。

你平时是怎么学习一门新技术的?

最近有看书吗?看的什么书?能和我讲讲吗?

你为什么离职?下一家公司的期望是什么?期望薪资?

11733 次点击
所在节点    Java
83 条回复
MiracleShadow
2021-02-08 10:50:15 +08:00
@ConradG 应该是指空间复杂度 O(1),快慢指针
Jooooooooo
2021-02-08 12:19:14 +08:00
@lewis89 差不多往 io 密集和 cpu 密集的方向答就差不多. 另外一个就是队列最好是有界的, 防止意外把内存撑爆.
young1lin
2021-02-08 12:56:20 +08:00
@Jooooooooo 2n+1 读写、n+1 计算,n 为核心数,后面还会问你,为什么这么设置?有什么讲究吗?

MySQL 不止问 undo log 、redo log,还会问蔟集索引,非蔟集索引,还有具体 SQL 优化,前面是基础。后面 MySQL 里面几个核心线程知道吗?说说它们的作用。MySQL 还不止问这些,我简历上写了调整了 MySQL 参数,buffer_pool_size 等,盯着我参数问,为什么要这么改?你还知道其他参数优化吗?

刚面试个简单的,找 N 个数前 10 大的数,我说 PriorityQueue 维护个 10 容量的小顶堆,O(1) 空间复杂度,O(n) 时间复杂度,然后让我手画一下 Java 的 PriorityQueue 的插入和删除的具体过程。
young1lin
2021-02-08 12:56:51 +08:00
@liupeng2579793 发不了,V2ex 发不了那么长的,要注册 600 天好像
young1lin
2021-02-08 13:04:52 +08:00
@ConradG 链表的简单题目之一,只要你刷过,一般都知道,O(1) 空间复杂度,快慢指针,还有其他链表题目,哑节点,双指针,额外堆栈存储,暴力遍历。
Jooooooooo
2021-02-08 13:06:14 +08:00
@young1lin 2n+1 读写当然不是正确的, 得考虑 io 的速度. 考虑这种场景, 一次请求需要 1s 才能返回, QPS 预估单机是 100, 那么设置多少是更合理的呢?

n+1 的计算也不是正确的, 考虑到操作系统也得用 cpu. 这个就看究竟做过多少实际调参了.
java8
2021-02-09 09:56:51 +08:00
老哥们, 有整理好的八股文文章吗 发一下
EscYezi
2021-02-09 14:44:02 +08:00
能说一下楼主面的都是什么公司吗,打算年后去面试,有点被这帖子吓到了(工作一年半)
a01200304
2021-02-09 17:23:20 +08:00
这就是硬卷啊
young1lin
2021-02-09 22:12:38 +08:00
@EscYezi

一线大厂:ali 系,DiDi 。

二线大厂:H3C,大华,安恒,涂鸦智能等。

次一点的厂:有数,兑吧,单创等等。

还有更小的公司就比较多了。

有些是做人工智能的,招 Java 但是要会大数据,想让我去做数仓。编程题,那个简单链表题目,主要是这个小公司出的。

其实主要是 ali 系的,问得比较细,问到你不会为止,比如 HashMap 相关的可以问半个小时。DiDi 比较直接,不给你整八股文。

千万 千万 千万别去外包,坑得要死。

Zoom 其实也挺不错的,只不过没投。ByteDance 也在杭州有分部,算法练练,试试看。
SkyLine7
2021-02-19 11:12:27 +08:00
两年面试我的面试官都不能把这些问题回答 80%
young1lin
2021-02-19 12:30:27 +08:00
@SkyLine7 还好吧,我感觉面两年的面试官,应该最少工作 4 年,工作 4 年知道这些,不难。
cmily54813
2021-02-23 16:16:03 +08:00
HashSet 的底层实现说下?
为什么内置 HashMap ?
说下它的数据结构,为什么 loadFactor 是 0.75 ?
为什么要高位参与与运算?
为什么它的 size 是 2 的 n 次方?
为什么默认是 16 ?
讲下它的扩容机制。什么时候转红黑树,为什么要转红黑树?
为什么它是线程不安全的,它的哪些方法是线程不安全的?
为什么会造成死循环?
1.8 是如何解决这个问题的?
它的线程安全的实现有什么?
ConcurrentHashMap 和 HashTable 有什么区别?
说下它 1.7 和 1.8 的实现是什么?
有什么区别?
为什么要这么做?
为什么说 ConcurrentHashMap 是线程安全的?
它的 get 操作是有锁的吗?
它是强一致性的吗?
它为什么是弱一致性的?
ConcurrentHashMap 1.7 和 1.8 是如何扩容的?
sizeCtl 参数是干什么的,讲讲变换过程?
为什么要用 volatile 修饰?
说说它的功能?
什么是 MESI 协议?
CPU 原语是什么?
什么是可见性?
JMM 说说是什么?
为什么要有 JMM ?
Happened-before 是什么?
它和 synchronized 的区别是什么?
锁的升级与降级说下是什么?
偏向锁是什么?
Mark-Wrod 说下?
锁的粒度是什么?
锁消除了解吗?
锁会被合并吗?
什么时候会发生?
你刚才说了 CAS,你能说下它是什么东西吗?
为什么要引入 CAS ?
ABA 问题是如何解决的?
AQS 了解吗?
它是如何实现的?
CLH 又是什么?
ReentrantLock 和 synchronized 区别是什么?
为什么 ReetrantLock 能实现公平锁?
默认构造器是公平锁吗?
为什么不是?
Copy-on-Write 了解吗?
Fork/Join 又是什么?
什么是线程,什么是协程?
你刚才说了管程?
你能说下这几个到底是做什么的吗?
线程池说下参数,四种内置的拒绝策略,以及它的执行流程。你用过吗?
为什么要这么设置参数?
I/O 密集型应用和计算密集型应用如何设置其参数?
你具体的业务线程池的参数是怎么设计的?
为什么?
测过吗?
你定制化开发过吗?
线程池预留了 3 个供子类扩展的方法你知道是哪三个吗?
能做什么你知道吗?
ThreadLocal 是什么?
它为什么会造成内存泄漏?
你实际开发中用到过吗?
Spring 事务用这个干什么的?
什么是事务的 SavePoint ?
你知道死锁吗?
如何解决死锁?
sleep 和 wait 的区别是什么?
BIO 、NIO 、AIO 是什么?
说下区别,以及如何使用?
了解 Netty 吗?
如何解决粘包问题?
ChannelPipeline 又是什么?
ByteBuf 知道吗?
读写指针又是什么?
它和 mina 的区别是什么?
它的 Zero-Copy ?
了解过 FastThreadLocal 吗?
它为什么比 ThreadLocal 快?
有看过其中源码吗?
Netty 解决了 NIO 类库的什么问题?
空轮询又是什么?
RPC 又是什么?
序列化和反序列化又是什么?
几个核心类说下。是干什么的?


你说你了解虚拟机,你知道虚拟机的运行时数据区吗?
哪些是线程共享的,哪些是线程独有的?
你了解 JVM 调优吗?
调优过吗?
为什么要这么设置?
垃圾回收算法有几种?
为什么要分代收集?
Young 区说说它的分布结构,为什么 Eden 区 80%?
为什么大对象直接进入老年代?
控制的参数是什么?
一个对象如果不是大对象,怎样才能进入老年代?
控制的参数是什么?
什么时候会发生 OOM ?
你遇到过吗?
怎么解决的?
为什么低版本的 JDK 要把永久代内存调大点?
默认大小是多少你知道吗?
什么是 Major GC,什么是 Minor GC ?
什么情况下会频繁 GC ?
你查看过 GC 日志吗?
什么时候回收对象?
引用计数和可达性分析是什么?
为什么 Java 使用后者?
Python 使用前者?
什么是 GCRoot ?
什么时候对象不可达?
Java 的四种引用说下,分别用在什么场景?
你知道 JDK 源码哪里有用到 WeakReference 吗?
什么是 STW ?
什么是 Safepoint ?
类加载的过程说下,什么时候优化,以及不同的时候的主要优化是什么?
解语法糖是什么时候?
为什么在编译的时候解语法糖?
什么是双亲委派模型?
可以破坏吗?
各个 ClassLoader 加载哪部分类的?
你自定义过 ClassLoader 吗?
你说你用过 Jstack 诊断 CPU 使用率飙升的情况,说下具体步骤?
Arthas 用过吗?
Class 文件格式说下,什么是魔数,Class 文件的魔数是什么?
JMX 了解吗?


ACID 说下是什么。你说你优化过 SQL,怎么优化的说下。like '%xx%',like '%xx',like 'xx%' 哪种情况会用到索引?
说下 MySQL 执行流程。WAL(Write-Ahead Logging) 知道吗?
redo log 和 undo log 是什么,它们作用说下。你说你改过 buffer_pool_size 等参数,为什么要改它?
它里面的数据结构说下是什么?
为什么冷热 3:7 ?
join_buffer 你说你也改了,为什么?
什么是驱动表和被驱动表?
如何优化?
你说你建了索引,什么是蔟集索引,什么是非蔟集索引?
什么是回表?
什么时候会索引失效?
你的二级索引什么用得多?
为什么优先使用普通索引,而不是唯一索引?
MySQL 会死锁吗?
什么是间隙锁?
它会导致什么问题?
MVCC 说下是什么?
4 种事务说下是什么?
哪种或者哪几种事务隔离级别能避免幻读?
能避免脏读?
你说你还开启了 binlog,能说说是什么吗?
canal 用过吗?
说说它的原理。MySQL 主从模式如何开启?
你是如何优化 SQL 的?
上亿级别的数据你是如何优化分页的?
为什么不建议在 MySQL 中使用分区机制?
为什么删了数据还是磁盘空间不变?
自增主键用完了会怎么样?
如何解决这个问题?
自增主键什么时候是不连续的?
这样做的好处是什么?
为什么推荐用自增主键?
B+ Tree 又是什么?
如何迁移数据库?
为什么不建议使用外键?
在高版本的 MySQL 中 count(1) 和 count(*) 区别是什么?
order by 是如何工作的?
分页机制又是什么?
ACL 和 RBAC 是什么?
grant 之后一定要刷新吗?
视图用过吗?
它的作用说下。视图和表的区别说下。存储过程写过吗?
存储函数和存储过程的区别说下。NoSQL 用过吗?
OceanBase 了解吗?
HBase 了解吗?
<u>HBase 有哪些坑,你碰到过吗?
什么是 RegionServer ?
</u>什么时候用 NoSQL,它能取代 RDBMS 吗?
你说你用过 Elasticsearch,能说下它的请求执行过程吗?
它的总体架构说下。它的插件你用过吗?
你们的分词策略是什么?
倒排索引说下是什么。

给二叉树后序和中序遍历,写前序遍历。手写个快排。翻转一下链表。O ( 1 )找出链表有环。DFS 找出二叉树搜索树第 k 大节点。

实现一个多线程类,并用该线程类实例化 3 个线程 A,B,C ; A 线程打印字符 A,B 线程打印字符 B,C 线程打印字符 C ;启动这 3 个线程,要求启动线程的顺序为 C 线程->B 线程->A 线程,并且最后输出内容为:A B C 。禁止使用 sleep 函数。阿里应该还有各种多线程打印的问题,这个得准备。
findlisa
2021-03-03 01:16:58 +08:00
@young1lin 楼主在外包呆着吗
young1lin
2021-03-03 21:00:34 +08:00
@findlisa 呆过一段时间,现在走了,真的坑。
findlisa
2021-03-03 23:23:54 +08:00
@young1lin 在职面试吗,我现在都抽不出时间复习,想裸辞了
young1lin
2021-03-04 18:10:04 +08:00
@findlisa 不要裸辞,每天坚持三个小时,拿来复习,巩固,两个月左右,差不多可以了
yRebelHero
2021-03-10 17:38:03 +08:00
楼主太强了,我顶多回答出百分之五六十,可能还是结结巴巴的,而且有些我都没怎么听过。面大厂这些一定要会吗?
fengwn
2021-03-10 17:57:33 +08:00
就尼玛离谱, Java 就是编程界的 996
young1lin
2021-03-10 17:58:22 +08:00
@yRebelHero 这些还是基础,更难的我没写,我还没解答出来。问的实际应用场景,电商活动要保证优惠活动前后查询请求都要在 Redis 上,商品的优惠信息会变,Redis 如何设计之类的。还有问了我为什么 Redis 不能叫 WAL,我当时紧张没回答上来。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/752020

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX