java面试高频知识点

其实面多了,就会发现核心就这些,下面例举几个我认为的高频知识点。

集合类组合拳(尤其是HashMap)

我觉得这个已经问烂了,应该熟到条件反射的回答,

提醒一下一些冷门知识:Arrays.asList有什么特点、fail-fast与fail-safe、以及hashmap的一些参数(以及为什么)、hashmap是否可以存null值,concurrenthashmap是否可以存null值等等。

并发编程组合拳

例如:synchronized 的锁升级、对象头、字节码层面、openJDK层面的实现(3个队列),硬件层面的实现,

volatile的底层原理,DCL(Double Check Lock),CAS底层原理以及ABA问题,各种类型的锁,

Reentrantlock,AQS的底层源码(特别是理解设计思想),runnable和callable的区别

java中的同步工具(CountDownLatch/CyclicBarrier/Semaphore)的使用场景以及原理,

线程池(ThreadPoolExecutor核心的7个参数,4种拒绝策略,1个使用原则),写时复制等等。

线程与进程

这个我觉得也是老生常谈的问题。提醒一下:wait()与sleep() 方法的区别。

如果你能知道什么时候用线程,什么时候用进程就能加分了。比如你知道nginx底层的用到了什么。

JVM组合拳

这个板块绝对是可以问到死的板块,大家适度复习就好。以hotspot为例:

例如你要知道JVM内存结构,如果还知道不同版本的区别加分。

类加载与双亲委派机制,如果知道tomcat打破双亲委派加分。

GC Roots、JVM常用参数(请拿出白纸默写)、常见的OOM、四大引用,以及经典的案例(localthread)、

四大垃圾收集算法(标记整理、标记清除、复制算法、分代收集算法)

十大垃圾收集器、JVM默认垃圾收集器、各种垃圾收集器的优劣、使用场景

如果你能聊聊CMS、G1、ZGC,面试官会开始眼前一亮

如果你能说出CMS的7个阶段(其实不止)、还能说说concurrent model failure、background & foreground collector ,增量更新+写屏障等等,面试官开始内心波动。

如果你能说出G1中的,Remembered Set、Card Table、Collect Set、young gc和Mix GC的完整流程、SATB+写屏障、Marking bitmaps和TAMS、Pause Prediction Model,面试官开始扶眼镜,流口水。

如果你还能说说ZGC中的color point,面试开始高潮

最后。对于JVM的调优的各种参数,各种命令(例如100%cpu的排查、死锁的检查)以及常用的JVM的监测的工具(例如 Arthas 等等),还能聊聊对象的分配过程(栈上分配)、JIT、逃逸分析等等,面试官彻底高潮,不能自拔。

总之,JVM这块是无底洞,大家自行把握尺度。

设计模式

这块主要核心理解思想,以及不同的设计模式的具体案例(这个很重要,否则只知道概念有p用)

比如。不要只会回答单例模式(当然单例模式也是核心,5种实现方式要会)

适配器模式(Callable)、代理模式(Aop)、装饰器模式(I/O)、责任链模式 (handlerchain)、模板方法模式(tryAcquire)等等不再一一列举。

BIO/NIO/AIO

这块也属于高频出境。知识点一搜一大把,注意NIO底层的实现,以及使用场景、如果能知道Netty,加分。

源码拷问灵魂(主打Spring framework,当然还有springboot、dubbo、springcloud、zookeeper等等数不清的源码 )

业界流传,不会spring就不要做java开发了。你说这块是不是要问到死?

以spring为例,(说实话我都不知道应该怎么写这些知识点,因为系统实在太庞大),我举一些基础部分:

一些非技术的问题(例如对spring的理解。这个没有标准答案,但绝对能听出你的功底)

先来Spring-Aop

比如:Spring-Aop的底层原理(开启注解的原理),如何实现的,为什么jdk代理要用接口(不要告诉我这是规范)、aop失效场景以及原因,spring是用哪个后置处理器完成aop的,aop与aspectj有什么关系,aop在spring中的流程(这个绝的可以加分,不要简单认为spring就实例化bean以后做aop这么简单)、Spring中如何设置aop暴露,aop的使用场景、如果你还能说说cglib底层用的asm,面试官直接高潮。aop相对于还是比较简单的入门,一般也比较喜欢问aop

接下来就是无底洞的Spring-context、spring-bean、spring-core的版块了。也就是传说中的IOC

比如:IOC的生命周期(这个可以回答到死、从this()方法开始到refresh()方法结束,好像这么说后面的问题都在里面了。当然百度糊弄一下说个大概面试官也懂)、说说spring的常见扩展点(这个可以直接问穿,大家自行学习,什么你不知道扩展点?)、spring的 ConfigurationClassPostProcessor 干了一些什么事情(可以直接问穿,比如@configuration注解的底层、@Import三种情况的处理、spring如何解析bean的等等,什么你不知道这个类?)、Spring中的@Autowired和 @Resource(别告诉我什么bytype,一看就是百度的)、Spring中的循环依赖(为什么要这样设计)、Spring中的bean的创建流程、Spring中的生命周期的回调、Spring中的5个核心后置处理器都做了什么、说说Spring中的factorybean等等。不再一一列举。

你以为Spring IOC结束了?不好意思。Mybatis是如何和Spring整合的(核心@MapperScan底层原理)

在接下来是Spring-webmvc、spring-tx、spring-cache、spring schedule

比如:说说Springmvc中父子容器(什么你写了这么多@controller@service@MapperScan还不知道父子容器?)、springMVC的请求流程等等、spring的事务的7种传播方式、底层的实现、Spring事务失效的场景以及原因、spring中的定时任务原理、spring中的缓存用过吗?等等

在接下来是Springboot,

比如Springboot中的watch机制了解吗?springboot自动装配了解吗?Springboot启动流程了解吗?

好吧,我不想再写了。

总之一句话。源码是最能看功底的。这一块大家各自看命吧,说好了面试官直接高潮。

大家平时一定要养成看源码的好习惯!

Mysql组合拳

说实话这块其实也可以问到死,但毕竟不是做DBA。

大家自行百度一堆。比如innodb底层的页结构,比如隔离级别底层实现(MVCC与锁)

Redis 组合拳

大家看敖丙的公众号。再看看redis底层的源码实现即可。

分布式事务与微服务架构设计

这块也的核心是场景设计、较灵活

基本的知识点有: CAP理论、BASE理论、Paxos & Raft & ZAB 一致性算法、2PC、3PC、TCC、最终一致性、 Seata等等,重点在于理解。

MQ消息队列

这块也的核心是场景设计、较灵活,以及大家针对一个MQ把底层原理了解清楚即可。

算法组合拳

首当其冲的就是各种排序算法,必须熟练背诵、各种时间复杂度空间复杂度、如果你还能知道不同排序算法的优化手段,面试官会高潮。

其此是海量数据的问题,例如topK的问题,无非就是基于海量数据上的存储,处理,操作。海量就是数据量太大。导致要么无法再较短时间解决,要么是数据太大,无法一次性装入内存。

解决方案:

针对时间:可以采取巧妙的算法搭配合适的数据结构,如Bloom filter、Hash、bit-map、Heap、数据库索引或者倒排索引、Trie树
针对空间:无非就是大而化小,分而治之(hash映射),不就是规模大嘛,我就化成小的,各个击破。
如果还能知道Roaring Bitmap——解决BitMap空间稀疏问题,面试官会高潮

最后就是JDK底层如何实现排序,如果能聊聊DualPivotQuicksort和Timsort,面试官会再次高潮。

还有很多杂项

比如:HTTPS、TCP三次握手 四次挥手、负载均衡算法、各个JDK版本的特性、常见linux命令、CDN(这个是阿里某个bu据说必问的问题,很神奇)、分库分表、tomcat的底层原理、以及JDK组合拳(例如==与equals区别、stringbuffer与Stringbuilder区别(这个其实也能问深入)、static和final关键词、面向对象的四大特点)、cookie与session、XSS与csrf、DNS解析过程等等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度学习推荐算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值