Java高频面试题
文章平均质量分 90
把面试经验记录下来,供大家参考。
逆流°只是风景-bjhxcc
当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
展开
-
【面试】Java高频面试题(2023最新版)
int compareTo(String str) 会对照ASCII 码表 从第一个字母进行减法运算 返回的就是这个减法的结果,如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果,如果连个字符串一摸一样 返回的就是0。String str="i"会将起分配到常量池中,常量池中没有重复的元素,如果常量池中存中i,就将i的地址赋给变量,如果没有就创建一个再赋给变量。String str=new String(“i”)会将对象分配到堆中,即使内存一样,还是会重新创建一个新的对象。原创 2023-04-05 19:00:00 · 4957 阅读 · 22 评论 -
【面试】社招--三年后端20连问面试题(附答案)
有位朋友工作三年,去面试,给大家整理一下面试题,并附上答案。希望对大家有所帮助。原创 2023-03-19 06:00:00 · 1122 阅读 · 4 评论 -
【面试】某公司记录一次面试题
WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。case whenforeach成多条sql。原创 2023-07-31 22:57:33 · 3436 阅读 · 0 评论 -
【Solr】Solr搜索引擎使用
其实我们大多数人都使用过Solr,也许你不会相信我说的这句话,但是事实却是如此啊!每当你想买自己喜欢的东东时,你可能会打开某宝或者某东,像这样一搜,就能搜到很多东西,你知道你看到的这些数据都来自哪儿吗?百度一下你就知道!这些数据来自哪儿吗?等你了解完Solr后你就知道答案啦!现实生活中我们都知道大多数网站或应用都必须具有某种搜索功能,问题是搜索功能往往是巨大的资源消耗并且它们由于沉重的数据库加载而拖垮你的应用的性能。原创 2023-07-27 15:30:00 · 2038 阅读 · 0 评论 -
【面试】 redis击穿现象?如何防止击穿?
简单地来说,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX或者Memcache的ADD)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;比如淘宝双十一,对于某个特价热门的商品信息,缓存在Redis中,刚好0点,这个商品信息在Redis中过期查不到了,这时候大量的用户又同时正好访问这个商品,就会造成大量的请求同时到达数据库。注意: 这里指的是单个key发生高并发!原创 2023-07-25 12:25:47 · 688 阅读 · 1 评论 -
【面试】MySQL 中InnoDB与MyISAM的区别是什么?
许多同学都把 MySQL 作为自己的数据库,但是可能用过最多的就是 SQL 语句,以及一些 ORM 的写法,而对底层的实现了解甚少,比如上述问题中,InnoDB 和 MyISAM 分别是什么,可能都不是非常清楚。然而在一些大型公司(比如腾讯)的面试题中,可能会高频率地出现这类的问题,所以对于这类问题的正确理解,就显得非常重要了。其实 InnoDB 和 MyISAM 是 MySQL 的两个「存储引擎」。原创 2023-07-25 10:28:11 · 452 阅读 · 0 评论 -
2021 【阿里】面试真题
文章目录1、TCP 和 UDP 区别?2、TCP/IP 协议涉及哪几层架构?3、描述下 TCP 连接 4 次挥手的过程?为什么要 4 次挥手?4、计算机插上电源操作系统做了什么?5、Linux 操作系统设备文件有哪些?6、多线程同步有哪些方法?7、一个对象的两个方法加 synchronized,一个线程进去 sleep,另一个线程可以进入到另一个方法吗?8、什么是可重入锁(ReentrantLock)?9、创建线程的三个方法是什么?10、Java 怎么获取多线程的返回值?11、线程池有哪几种创建方式?12、原创 2023-07-12 23:45:16 · 399 阅读 · 0 评论 -
美团面试题
堆内存是指由程序代码自由分配的内存,与栈内存作区分。在 Java 中,堆内存主要用于分配对象的存储空间,只要拿到对象引用,所有线程都可以访问堆内存。-Xmx, 指定最大堆内存。如 -Xmx4g. 这只是限制了 Heap 部分的最大值为 4g。这个内统实际分配的初始值,而是 GC 先规划好,用到才分配。专用服务器上需要保持 –Xms和 –Xmx 一致,否则应用刚启动可能就有好几个 FullGC。当两者配置不一致时,堆内存扩容可能会导致性能抖动。原创 2023-07-11 22:57:53 · 163 阅读 · 0 评论 -
【面试】美团面试真题和答案
问题来源于某客,如下图所示:问题链接:https://www.nowcoder.com/feed/main/detail/b12f8ece42f6485d8e462ab872c4f8d8答案解析。原创 2023-07-05 22:38:28 · 3226 阅读 · 0 评论 -
【面试题】Spring 事务的实现方式和实现原理?
Spring 事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring 是无法提供事务功能的。声明式事务本质是通过 AOP 功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。ISOLATION_SERIALIZABLE:一个事务在执行的过程中完全看不到其他事务对数据库所做的更新。Spring 事务的传播行为说的是,当多个事务同时存在的时候, Spring 如何处理这些事务的行为。原创 2023-06-30 16:38:12 · 658 阅读 · 0 评论 -
【面试】你知道数据库能抗多大并发压力吗?
今天给大家分享一个知识点,是关于MySQL数据库架构演进的,因为很多兄弟天天基于mysql做系统开发,但是写的系统都是那种低并发压力、小数据量的,所以哪怕上线了也就是这么正常跑着而已,但是你知道你连接的这个MySQL数据库他到底能抗多大并发压力吗?如果MySQL数据库扛不住压力了,应该如何演进你知道吗?原创 2023-06-21 15:43:04 · 287 阅读 · 0 评论 -
【面试】线上Java程序占用 CPU 过高请说一下排查方法?
这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的。线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因?这就是一个套路题,所谓套路题就是有标准的套路解法的,掌握了套路,不仅能解决面试官,还能解决问题。不然真的就掉进套路里了。当我们真碰到这个问题的时候应该怎么排查呢?原创 2023-06-18 23:06:01 · 1297 阅读 · 0 评论 -
【面试】Java面试频繁问到的题最新整理(附答案)
序列化就是一种用来处理对象流的机制,就是将对象的内容进行流化,可以对流化后的对象进行读写操作,也可以将流化后的对象传输于网络之间。可通过实现java.io.Serializable接口来实现序列化。AOP是面向切面编程,用于在不改变原有逻辑的基础上增加一些额外的功能,如事务管理、日志、缓存、权限控制等。Spring AOP是基于代理的。如果目标对象实现了接口,则默认采用JDK动态代理。如果目标对象没有实现接口,则采用CgLib进行动态代理。如果目标对象实现了接口,且强制CgLib代理。原创 2023-05-31 08:46:35 · 5338 阅读 · 1 评论 -
【面试】@Resource和@Autowired有啥区别?
Autowired和@Resource注解都是作为bean对象注入的时候使用的两者都可以声明在字段和setter方法上注意:如果声明在字段上,那么就不需要再写setter方法。但是本质上,该对象还是作为set方法的实参,通过执行set方法注入,只是省略了setter方法罢了。@Autowired:先byType再byName@Resource:先byName再byType(当指定@Resource name属性时,只会byName)原创 2023-05-30 16:38:05 · 282 阅读 · 0 评论 -
【面试】为什么Mysql用B+树做索引而不用B-树或红黑树
B+树能显著减少IO次数,提高效率B+树的查询效率更加稳定,因为数据放在叶子节点B+树能提高范围查询的效率,因为叶子节点指向下一个叶子节点。原创 2023-05-29 18:44:01 · 511 阅读 · 0 评论 -
【Mysql】什么是大事务?以及大事务产生的问题
运行时间比较长,操作的数据比较多的事务我们称之为大事务。例如,执行超过5s,10s,1min…原创 2023-05-25 23:15:29 · 3635 阅读 · 0 评论 -
【面试】JVM内存模型
聊聊 JVM 内存模型候选人: 当然,JVM内存模型主要由以下几个部分组成:程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。每个线程都有一个独立的程序计数器,它的作用是记录当前线程执行的位置,以便在发生线程切换时恢复执行位置。Java虚拟机栈Java虚拟机栈是线程私有的,它的生命周期与线程相同。每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。当方法执行完毕后,对应的栈帧会被弹出,局部变量表等信息也会被销毁。原创 2023-05-16 10:28:03 · 370 阅读 · 0 评论 -
【面试】和面试官对话线程池
候选人: 当然知道啦。我们可以通过继承 ThreadPoolExecutor 类来自定义线程池。在自定义线程池时,我们需要重写 ThreadPoolExecutor 的构造方法,并根据需要重写 beforeExecute、afterExecute 和 terminated 方法来实现自定义的线程池行为。同时,我们还可以通过实现 ThreadFactory 接口来自定义线程的创建方式。原创 2023-05-08 22:09:46 · 85 阅读 · 0 评论 -
【面试】线程池常见面试题
对于广大程序员来说,线程池一定不会陌生,因为大部分程序员面试时总会被问到关于线程池的问题,今天总结了一些关于线程池的各种面试可能问到的题目,希望对大家有所帮助。原创 2023-05-08 21:59:24 · 1201 阅读 · 0 评论 -
【面试】Java 反射机制(常见面试题)
反射(Reflection) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法。反射是一项高级开发人员应该掌握的“黑科技”,其实反射并不是 Java 独有的,许多编程语言都提供了反射功能。在面试中面试官也经常对反射问题进行考察,反射是所有注解实现的原理,尤其在框架设计中,有不可替代的作用。如何反射获取 Class 对象如何反射获取类中的所有字段如何反射获取类中的所有构造方法如何反射获取类中的所有非构造方法。原创 2023-05-08 19:35:51 · 3005 阅读 · 0 评论 -
【面试】说说什么是Java内存模型(JMM)?
由于CPU 和主内存间存在数量级的速率差,想到了引入了多级高速缓存的传统硬件内存架构来解决,多级高速缓存作为 CPU 和主内间的缓冲提升了整体性能。解决了速率差的问题,却又带来了缓存一致性问题。数据同时存在于高速缓存和主内存中,如果不加以规范势必造成灾难,因此在传统机器上又抽象出了内存模型。Java 语言在遵循内存模型的基础上推出了 JMM 规范,目的是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序、处理器会对代码乱序执行等带来的问题。原创 2023-05-08 17:24:48 · 776 阅读 · 0 评论 -
【MySQL】Mysql索引失效场景(15个必知)
第十三种索引失效情况:当查询条件涉及到order by、limit等条件时,是否走索引情况比较复杂,而且与Mysql版本有关,通常普通索引,如果未使用limit,则不会走索引。这里要说的其他,可以总结为第十五种索引失效的情况:Mysql优化器的其他优化策略,比如优化器认为在某些情况下,全表扫描比走索引快,则它就会放弃索引。很显然,依旧走了union_idx索引,根据上面key_len的分析,大胆猜测,在使用索引时,不仅使用了id_no列,还使用了username列。同时,还伴随着性能问题。原创 2023-05-08 06:00:00 · 715 阅读 · 2 评论 -
【面试】面试官:说一下线程池7个参数的含义?
/... }corePoolSize:核心线程数。maximumPoolSize:最大线程数。keepAliveTime:空闲线程存活时间。TimeUnit:时间单位。BlockingQueue:线程池任务队列。ThreadFactory:创建线程的工厂。RejectedExecutionHandler:拒绝策略。corePoolSize:核心线程数,线程池正常情况下保持的线程数,大户人家“长工”的数量。原创 2023-05-06 20:07:46 · 1015 阅读 · 0 评论 -
【面试】Java枚举--为什么它是单例模式的最佳选择?
单例模式,是工作中比较常见的一种设计模式,通常有两种实现方式,懒汉式和饿汉式。但是这两种实现方式存在一些问题。懒汉式需要在多线程环境下使用同步锁机制来保证只有一个实例被创建,这会影响程序的性能。而饿汉式在类加载时就创建实例,会导致程序在启动时变慢,同时也无法延迟实例的创建,这可能会浪费系统资源。所以今天介绍一下,为什么枚举是实现单例模式的最佳选择。首先,枚举实例是线程安全的,多线程环境下不会出现线程安全问题。原创 2023-05-06 08:51:45 · 701 阅读 · 0 评论 -
【面试】MySQL事务的12连问
金三银四马上就要来啦,准备了事务的12连问,相信大家看完肯定会有帮助的。事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。假如A转账给B 100 元,先从A的账户里扣除 100 元,再在 B 的账户上加上 100元。如果扣完A的100元后,还没来得及给B加上,银行系统异常了,最后导致A的余额减少了,B的余额却没有增加。所以就需要事务,将A的钱回滚回去,就是这么简单。MVCC,即(多版本并发控制)。原创 2023-04-28 14:29:07 · 1234 阅读 · 1 评论 -
【面试】你在项目中遇到过慢查询问题吗?你是怎么做SQL优化的?
我在面试的时候很喜欢问候选人这样一个问题:“你在项目中遇到过慢查询问题吗?你是怎么做SQL优化的?合理使用索引使用UNION ALL替代UNION不要使用select * 写法JOIN字段建议建立索引避免复杂SQL语句这里不能说完全错误,因为这些技巧确实可以提高SQL运行效率;但是也不能说完全正确,毕竟我是想问他具体怎么是做SQL优化的。接下来我问他,我这里有一段复杂的SQL,你可以动手帮我优化一下吗?到这一步的时候就有很多候选人做不好打了退堂鼓。原创 2023-04-19 15:52:31 · 834 阅读 · 0 评论 -
【面试】Java线程阻塞和唤醒的几种方式?
notify/notifyAll()方法只是解除了等待线程的阻塞,并不会马上释放监视器锁,而是在相应的被synchronized关键字修饰的同步方法或同步代码块执行结束后才自动释放锁。调用wait()方法后,线程将被阻塞,wait()方法将会释放当前持有的监视器锁(monitor),直到有线程调用。需要使用lock对象的newCondition()方法获得Condition条件对象(可有多个)。这里有一个许可证的概念,许可不能累积,并且最多只能有一个许可,只有1和0的区别。可实现公平锁,默认是非公平锁。原创 2023-04-15 11:41:53 · 2192 阅读 · 0 评论 -
【面试】记一次中小公司某一次面试题
java中有四种元注解:@Retention、@Inherited、@Documented、@Target希望对你有帮助,欢迎评论区讨论。原创 2023-04-14 09:44:10 · 1233 阅读 · 0 评论 -
【面试】如何设计SaaS产品的数据权限?
一套系统的权限可以分为两类,数据权限和功能权限,今天我们从以下几个点,细聊下如何设计数据权限。总的来说,数据权限的授权分为三个方面,业务对象范围授权、业务对象操作授权和业务对象字段授权。为了实现这三个方式的授权,我们在产品设计上需要支持业务对象范围的划分、业务对象操作的定义和业务对象字段的定义,如下图所示。之后,我们就可以配置某个角色或人员的数据权限了。数据权限是SaaS产品必不可少的功能。原创 2023-04-13 19:28:34 · 1150 阅读 · 0 评论 -
【面试】Mysql主键索引普通索引索引和唯一索引的区别是什么?
非主键索引的查询需要多扫描一颗索引树, 效率相对更低.普通索引是最基本的索引类型,没有任何限制,值可以为空,仅加速查询。普通索引是可以重复的,一个表中可以有多个普通索引。主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;索引列的所有值都只能出现一次,即必须唯一。简单来说:主键索引是加速查询 + 列值唯一(不可以有null)+ 表中只有一个。原创 2023-04-13 08:09:34 · 525 阅读 · 0 评论 -
【面试】Spring Boot读取Yml配置文件的3种方法
项目开发中难免要读取配置文件,本文结合开发经验介绍几种使用过的读取配置文件的方法。使用注解@Autowired注入Environment类使用@Value注解直接注入配置信息使用@Component注解使其成为配置类原创 2023-04-13 07:47:08 · 2843 阅读 · 3 评论 -
【面试】sql语句单独跑很快但并发的时候很慢
以上是我的总结与理解,最后一个部分,我怕很多人不大懂数据库居然会选错索引,所以我详细解释了一下,下面我对以上做一个总结。1. 大多数情况下很正常,偶尔很慢,则有如下原因数据库在刷新脏页,例如 redo log 写满了需要同步到磁盘。执行的时候,遇到锁,如表锁、行锁。2. 这条 SQL 语句一直执行的很慢,则有如下原因。没有用上索引:例如该字段没有索引;由于对字段进行运算、函数操作导致无法用索引。数据库选错了索引。原创 2023-04-12 23:13:39 · 2271 阅读 · 4 评论 -
【面试】spring中怎么解决循环依赖问题?
什么是循环依赖?Spring怎么解决循环依赖Spring对于循环依赖无法解决的场景循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。构造器的循环依赖field属性的循环依赖。思考:在编码的过程中,有时候会存在这样的诉求,那这时候,程序应该先创建哪个对象?原创 2023-04-12 22:18:34 · 1647 阅读 · 0 评论 -
【面试】限流算法有哪些?以及分布式场景服务如何限流?
固定窗口限流算法、漏桶算法和令牌桶算法、滑动窗口限流算法。下面我来分别介绍一下。滑动窗口限流算法是一种常用的限流算法,用于控制系统对外提供服务的速率,防止系统被过多的请求压垮。它将单位时间周期分为n个小周期,分别记录每个小周期内接口的访问次数,并且根据时间滑动删除过期的小周期。它可以解决固定窗口临界值的问题。用一张图解释滑动窗口算法,如下:假设单位时间还是1s,滑动窗口算法把它划分为5个小周期,也就是滑动窗口(单位时间)被划分为5个小格子。每格表示0.2s。每过0.2s,时间窗口就会往右滑动一格。原创 2023-04-12 08:00:18 · 1530 阅读 · 0 评论 -
【面试】深拷贝与浅拷贝的实现原理
深拷贝与浅拷贝的问题,也是面试中的常客。虽然大家都知道两者表现形式不同点在哪里,但是很少去深究其底层原理,也不知道怎么才能优雅的实现一个深拷贝。其实工作中也常常需要实现深拷贝,今天就带大家一块深入剖析一下深拷贝与浅拷贝的实现原理,并手把手教你怎么优雅的实现深拷贝。浅拷贝: 只拷贝栈内存中的数据,不拷贝堆内存中数据。深拷贝: 既拷贝栈内存中的数据,又拷贝堆内存中的数据。原创 2023-04-11 10:43:17 · 1152 阅读 · 1 评论 -
【面试】高并发场景下你们是怎么保证数据的一致性的?
有读者可能会好奇,为什么不在更新缓存和数据库方法上加上事务注解,实现强一致性,这么哪种方案都不会有问题。是的,当我们的服务只在一台机器上,加本地事务是可行的。但是工作中,我们会把一个服务部署到几十台、上百台机器上,有时候为了应对更极端的查询请求,又在Redis缓存加一层本地缓存,这时候我们再用本地事务是不起作用的。一份数据在多台机器上,存在多个副本,为了实现强一致性,我们也可以使用分布式事务。这样一来更新缓存操作将会变得非常复杂,得不偿失。二阶段提交TCC本地消息表MQ事务消息。原创 2023-04-10 22:48:33 · 468 阅读 · 2 评论 -
【面试】分库分表15道面试题
去面试的时候,几乎都会被问到分库分表。我整理了分库分表的15道经典面试题,大家看完希望会有帮助。本文介绍了分库分表15连问。希望对你有帮助,欢迎评论区留言讨论。原创 2023-04-08 17:27:24 · 1826 阅读 · 2 评论 -
【面试】如何设计一个高并发系统
当请求A的服务越来越多,占用计算机的资源也越来越多,最终会导致系统瓶颈出现,造成其他的请求同样不可用,最后导致业务系统崩溃。我们的请求调用数据库时,都会先获取数据库的连接,然后依靠这个连接来查询数据,搞完收工,最后关闭连接,释放资源。如果我们不用数据库连接池的话,每次执行SQL,都要创建连接和销毁连接,这就会导致每个查询请求都变得更慢了,相应的,系统处理用户请求的能力就降低了。就是在系统上线前,需要对系统进行压力测试,测清楚你的系统支撑的最大并发是多少,确定系统的瓶颈点,让自己心里有底,最好预防措施。原创 2023-04-07 22:42:43 · 232 阅读 · 4 评论 -
【面试】一千万的数据你是怎么查询的?
先对查询的字段创建唯一索引根据业务需求,先定位查询范围(对应主键id的范围,比如大于多少、小于多少、IN)查询时,将第2步确定的范围作为查询条件。原创 2023-04-05 10:27:33 · 1077 阅读 · 0 评论 -
【面试】面试官问的几率较大的网络安全面试题
攻击者在HTTP请求中注入恶意的SQL代码,服务器使用参数构建数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。用户登录,输入用户名 lianggzone,密码 ‘ or ‘1’=’1 ,如果此时使用参数构造的方式,就会出现不管用户名和密码是什么内容,使查询出来的用户列表不为空。如何防范SQL注入攻击使用预编译的PrepareStatement是必须的,但是一般我们会从两个方面同时入手。Web端1)有效性检验。2)限制字符串输入的长度。服务端1)不用拼接SQL字符串。原创 2023-04-05 06:00:00 · 1256 阅读 · 0 评论