2021 金三银四的最后一次Java面试,我去了快手。快手的面试挺有挑战性的,而且还特别有意思,感觉啥都能问到。(二面是10天前约的面试,差点要忘了)然后是HR面,前天我就收到offer。
一面二面啥的我都忘记具体的了,就简单的总结一下
1 基础
为什么 Java 中只有值传递?
int 范围?float 范围?
hashCode 与 equals,什么关系?
String StringBuffer 和 StringBuilder 的区别是什么?String 为什么是不可变的?
Java 序列化中如果有些字段不想进行序列化 怎么办?
构造器 Constructor 是否可被 override?
java 异常体系?RuntimeException Exception Error 的区别,举常见的例子
字符型常量和字符串常量的区别?
在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?
2 集合
集合这块关注一下 1.8 的实现吧,和 1.7 相比变化了很多
ArrayList和linkedList的区别?
堆是怎么存储的,插入是在哪里?
HashMap和HashTable的区别?讲一下 hashMap 原理。hashMap 可以并发读么?并发写会有什么问题?
集合类存放于 Java.util 包中, 主要有几种接口?
Array与ArrayList有什么不一样?简单介绍下 ArrayList 怎么实现,加操作、取值操作,什么时候扩容?
说说ConcurrentHashMap?头插法还是尾插法?扩容怎么做?
集合在迭代的过程中,插入或删除数据会怎样?
3 并发
notify()和notifyAll()有什么区别?
volatile 是什么?可以保证有序性吗?
为什么wait, notify 和 notifyAll这些方法不在thread类里面?
SynchronizedMap和ConcurrentHashMap有什么区别?
什么是线程安全?Vector是一个线程安全类吗?
线程进程和线程的区别?并行和并发的区别?了解协程么?进程间如何通信:进程 A 想读取进程 B 的主存怎么办?线程间通信?线程的生命周期有哪些状态?怎么转换?wait 和 sleep 有什么区别?什么情况下会用到 sleep?怎么停止线程?怎么控制多个线程按序执行?
说说自己是怎么使用 synchronized 关键字,在项目中用到了吗?synchronized关键字最主要的三种使用方式
为什么要用 join()方法?
什么是多线程中的上下文切换?
死锁与活锁的区别,死锁与饥饿的区别?
Java 中用到的线程调度算法是什么?
什么是原子操作?在 Java Concurrency API 中有哪些原子类(atomic classes)?
什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者
模型?
AQS了解 AQS 么?讲讲底层实现原理AQS 有那些实现?讲讲 AtomicInteger 的底层实现
为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方
法?
Java 中你怎样唤醒一个阻塞的线程?
什么是线程组,为什么在 Java 中不推荐使用?
4 IO
IO 这块我不熟,没有多讲
了解 NIO 么?讲讲
NIO 与 BIO 有什么区别?
了解 Netty 原理么
JVM
1 内存与 GC
GC 是什么?为什么要有 GC?
jvm 内存区域分布?gc 发生在哪些部分?
你能保证 GC 执行吗?
怎么获取 Java 程序使用的内存?堆使用的百分比?
介绍一下垃圾回收过程。
垃圾回收算法的了解。现在用的什么回收算法?
什么时候会触发FullGC
现在使用的什么垃圾回收器?知道哪些?讲讲 G1
容器的内存和 jvm 的内存有什么关系?参数怎么配置?
2 异常与调优
线上有什么 jvm 参数调整?
oom 问题排查思路
线上问题排查,突然长时间未响应,怎么排查,oom
cpu 使用率特别高,怎么排查?通用方法?定位代码?cpu高的原因?
频繁 GC 原因?什么时候触发 FGC?
怎么获取 dump 文件?怎么分析?
3 类加载器
怎么实现自己的类加载器?
类加载过程?
初始化顺序?
Spring
不同版本的 Spring Framework 有哪些主要功能?
讲一下 ioc、aop
ioc 怎么防止循环依赖
aop 的实现原理、动态代理过程
区分 BeanFactory 和 ApplicationContext?
spring bean 容器的生命周期是什么样的?
@Autowired 注解有什么用?
使用 Spring 访问 Hibernate 的方法有哪些?
Spring 处理请求的过程?
Redis
为什么要用 redis /为什么要用缓存(高性能、高并发)
redis 常见数据结构以及使用场景分析(String、Hash、List、Set、Sorted Set)
Redis 常见异常及解决方案(缓存穿透、缓存雪崩、缓存预热、缓存降级)
分布式环境下常见的应用场景(分布式锁、分布式自增 ID)
Redis集群方案应该怎么做?都有哪些方案?
Redis 集群的主从复制模型是怎样的?
redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)
如何解决 Redis 的并发竞争 Key 问题?
如何保证缓存与数据库双写时的数据一致性?
redis 的 zset 的使用场景?底层实现?为什么要用跳表?
MySQL
事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?
MySQL的MyISAM与InnoDB两种存储引擎在,事务、锁级别,各自的适用场景?
有哪些锁(乐观锁悲观锁),select 时怎么加排它锁?
sql查询语句确定创建哪种类型的索引?如何优化查询?
什么是临时表,临时表什么时候删除?
mysql 脏页?
分库分表有哪些策略?怎么保证 id 唯一?
非关系型数据库和关系型数据库区别,优势比较?
数据库的读写分离、主从复制,主从复制分析的 7 个问题?
MySQL都有什么锁,死锁判定原理和具体场景,死锁怎么解决?
数据库崩溃时事务的恢复机制(REDO日志和UNDO日志)?
对 uuid 的理解?知道哪些 GUID、Random 算法?
主键选随机 id、uuid 还是自增 id?为什么?主键有序无序对数据库的影响?
主从复制的过程?复制原理?怎么保证强一致性?
Kafka
生产者和消费者的命令行是什么?
Kafka 怎么保证数据可靠性?
讲讲 kafka 维护消费状态跟踪的方法
为什么需要消息系统,mysql 不能满足需求吗?
Kafka 判断一个节点是否还活着有那两个条件?
Kafka 与传统 MQ 消息系统之间有三个关键区别?
kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?
kafka 如何不消费重复数据?比如扣款,我们不能重复的扣
网络
tcptcp 有哪些机制确保可靠性?拥塞控制怎么实现?close_wait 太多怎么处理?为什么会出现这种情况?
讲讲三次握手,四次挥手?
keepalive 有什么用?Https 原理?知道哪些 http 状态码有哪些?http 有哪些请求方法?put、post 实现上有什么区别?
前后端分离与不分离的区别?各有什么优缺点?
常见 web 攻击有哪些?了解 csrf 攻击么?
nginx 达到上限了怎么办?怎么对 nginx 负载均衡?dns?
nginx 负载均衡有哪些算法?各自有什么优缺点?
restful 的作用?有哪些优点和缺点?
什么是 cdn?header 中涉及到缓存的字段有哪些?cookie session 介绍一下html 页面,怎么与后端交互?流程是什么?涉及到哪些组件?http 协议,报文格式?
设计模式
什么是设计模式?你是否在你的代码里面使用过?
Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
在 Java 中,什么叫观察者设计模式?
举一个用 Java 实现的装饰模式(decorator design pattern) ?它是作用于对象层次还是类层次?
单例对于单例,你知道哪些实现方法?实现一个懒加载单例双重校验锁为什么需要双重校验?
使用工厂模式最主要的好处是什么?在哪里使用?
分布式
有哪些分布式组件是你最熟悉的,简单聊一聊。
cap 是指什么?mysql 满足 cap 中哪些?
分布式锁有哪些方式可以实现?各有什么优缺点?
什么是一致性 hash?自己实现一致性 hash,会用什么数据结构?
微服务
微服务架构有哪些优势?
单片,SOA 和微服务架构有什么区别?
什么是 RPC?怎么实现幂等性?
什么是 REST / RESTful 以及它的用途是什么?
配置中心有哪些选项?apollo 的架构?怎么无感实现已加载数据更新?
讲一下熔断概念?熔断原理?令牌桶?熔断三个状态关系?
熔断会影响性能么?有遇到过线上发生熔断么?不加会怎样?
算法题
基本都会问时间复杂度
有哪些常用排序算法?
手写快排,快排时间复杂度是多少?
快排算法是不是稳定的?什么是稳定性?
给定一个字母组成的字符串,找出不含有重复字符的最长子串的长度。
9 个硬币中有一个劣币,用天平秤,最坏几次?
深度优先,广度优先
括号匹配,时间复杂度,空间复杂度
单向链表的归并排序
1g 大小文件,里面每行是最大 16k 的单词,限制内存 1m,统计单词频率最多的 100 个单词
手写 100 位带小数的大数字的减法
你有什么想问的?+Offer 选择?
部门定位?岗位职责?目前在做什么业务?薪酬福利介绍?
目前手头的 offer 情况?这些公司你自己有什么倾向性呢?最看重什么因素?想加入一个怎么样的团队?
你的预期薪酬是多少?目前的薪资情况?
最近一年的绩效情况?
补充一下我2020下半年的offer情况,其实是拿到了美团架构、快手主 app、猿辅导斑马、腾讯 csig 等意向书的。而且我觉得面试前的““练手””十分重要,像我前期“裸面”就硬生生的浪费了阿里、蚂蚁、字节、Shopee 等的面试机会。所以,在这里我给大家伙的建议就是一定要做好充足的准备,不然也是耽搁面试官和自己的时间,并且面试的时候也会手足无措,毕竟肚子里没有货啊!
最后再三思考,还是选择了快手,准备下周一入职了!大家加油,跳槽面试无时不在,若是还没准备好,我建议等过完年去参加春招提前批也不错,但是这段空余的时间你可不能浪费,好好把握!
说到这儿了,最后在出来放一波福利吧!希望可以帮助到大家!
千千万万要记得:多刷题!!多刷题!!
之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!
篇幅有限,以下只能截图分享部分的资源!!
(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)
(2)刷的算法题(还有左神的算法笔记)
(3)面经+真题解析+对应的相关笔记(很全面)
(4)视频学习(部分)
ps:当你觉得学不进或者累了的时候,视频是个不错的选择
其实以上我所分享的所有东西,大家可能在网上都能找到吧(PS:有很多自己整理成册的是没有的呢),不过整理起来会有点麻烦,有需要的话我这边可以免费分享给大家,但请一定记住获取方式:戳此--获取码--牛客
在这里,最后只一句话:祝大家offer拿到手软!!