![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
文章平均质量分 77
Tom弹架构
咕泡教育联合创始人、Java架构师丛书作者
展开
-
Integer a1=100 Integer a2=100,a1==a2?的运行结果?
首先, Integer a1=100, 把一个int数字赋值给一个封装类型,Java会默认进行装箱操作,也就是调用Integer.valueOf()所以,对于这个面试题来说,两个Integer对象,因为值都是100,并且默认通过装箱机制调用了valueOf方法。其次,在Integer内部设计中,用到了享元模式的设计,享元模式的核心思想是通过复用对象,减少对象的创建数量,按照大家对于Java基础的认知,两个独立的对象用==进行比较,是比较两个对象的内存地址。但是在这个场景中,得到的结果是true。原创 2024-01-19 17:56:59 · 580 阅读 · 0 评论 -
能谈一下CAS机制吗?
所以呢,CompareAndSwap的底层实现中,在多核CPU环境下,会增加一个Lock指令对缓存或者总线加锁,从而保证比较并替换这两个指令的原子性。CompareAndSwap是一个native方法,实际上它最终还是会面临同样的问题,就是先从内存地址中读取state的值,然后去比较,最后再修改。这个逻辑看起来没有任何问题,但是在多线程环境下,会存在原子性的问题,因为这里是一个典型的,Read - Write的操作。否则,返回false,表示修改失败,而这个过程是原子的,不会存在线程安全问题。原创 2024-01-19 12:01:20 · 415 阅读 · 0 评论 -
死锁的发生原因和怎么避免
所谓按序申请,是指资源是有线性顺序的,申请的时候可以先申请资源序号小的,再申请资源序号大的,这样线性化后自然就不存在循环了。对于“不可抢占”这个条件,占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源,这样不可抢占这个条件就破坏掉了。循环等待条件,线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有的资源,就是循环等待。(如图),死锁,简单来说就是两个或者两个以上的线程在执行的过程中,争夺同一个共享资源造成的相互等待的现象。原创 2024-01-19 12:01:18 · 373 阅读 · 0 评论 -
new String(“hello“)之后,到底创建了几个对象?
lo存在于字符串常量池中,new String("lo")存在于堆中,String s4 = "hel" + new String("lo")实质上是两个对象的相加,编译器不会进行优化,相加的结果存在于堆中,而s1存在于字符串常量池中,当然不相等。否则,复制一份该字面量到字符串常量池并返回它的引用。接下来,JVM 会拿字面量“hello”去字符串常量池里面试图去获取它对应的 String 对象引用,如果拿不到,就会在堆内存里面创建一个”hello”的 String 对象,并且把引用保存到字符串常量池里面。原创 2024-01-18 11:29:05 · 872 阅读 · 0 评论 -
爆肝一个月,24年春招java面试题总计50w字(附答案)
站在面向对象的思想来说,Runnable相当于一个任务,而Thread才是真正处理的线程,所以我们只需要用Runnable去定义一个具体的任务,然后交给Thread去处理就可以了,这样达到了松耦合的设计目的原创 2024-01-15 18:02:32 · 3173 阅读 · 4 评论 -
HashMap什么时候扩容,如何扩容?
在任何编程语言中,我们经常需要在内存中去临时存放一段数据,我们可以使用官方封装好的一些集合框架。比如说用List、HashMap、Set等等作为临时数据存储的容器。当我们创建一个集合对象的时候,实际上就是在内存里面一次性申请了一块内存空间。而这个内存空间的大小是在创建集合对象的时候去指定的。比如HashMap的默认大小是16。在实际开发过程中,我们需要去存储的数据量往往是大于存储容器的默认大小的。所以,出现容量默认大小不能满足需求时,就需要扩容。原创 2024-01-04 11:30:26 · 1277 阅读 · 0 评论 -
谈谈ArrayList、LinkedList、和Vector的存储性能及特性
关于ArrayList、Vector和LinkedList 的存性能理及特性,我从以下3个方面来分析:1)首先,ArrayList 和 Vector 的底层都是采用数组的来存储数据,而且都是根据索引来取数据,这样设计使得获取数据快而插入数据慢。另外,每次扩容都要移动数组中的元素,存储数据量较大的时候会影响读写性能。2)其次,由于Vector 中的方法都使用了 synchronized 修饰,因此 ,Vector 中对数据操作都是线程安全的,但性能上比ArrayList 差。原创 2023-12-30 10:10:00 · 978 阅读 · 0 评论 -
看完这篇文章告诉你RocketMQ为什么要放弃Zookeeper?
对于分布式消息中间件而言,当不同的消息存储在不同的Broker上,生产者和消费者对于Broker的选取,路由选择会面临以下几个问题:1、生产者发一条消息,应该发到哪个Broker?消费者接收消息,从哪个Broker获取消息?2、如果Broker增加或者减少了,客户端怎么知道?3、一个新的生产者或者消费者加入,如何感知?所以,只要是跟分布式服务调用的场景,都需要一个注册中心,在RocketMQ当然也中需要有一个这样的角色来管理Broker的信息。原创 2023-12-28 10:50:51 · 1013 阅读 · 0 评论 -
导致Spring事务失效的原因有哪些?
文末整理了一些我整理的从小白到架构师的学习资料,价值很高!下面给大家总结一下,导致Spring事务失效的原因主要有以下8个:1、方法没有被public修饰在开发过程中,如果@Transactional事务注解添加在不是public修饰的方法上,这个时候,Spring的事务就会失效。2、类没有被Spring托管如果事务方法所在的类没有加载到Spring IoC容器中,也就是说,事务方法所在的类没有被Spring管理,从而导致Spring无法实现代理,所以,Spring事务也会失效。原创 2023-12-26 10:50:40 · 548 阅读 · 0 评论 -
谈谈Elastic Search的理解
因为,ES的分页是通过from和size参数来实现,也就是说,在查询的时候,每个分片必须要先构造一个长度为from + size的优先队列,然后回传的网关节点。因为ES应用更广泛的场景还是ElasticSearch,所以,下面我们给大家分享的ES还是单指ElasticSearch。比如,网站搜索,日志聚集和检索,这些都可能会涉及到TB级别的数据场景,用ES是一个比较好的选择。这样,能够去提升数据的检索效率。4、ES扩展性很好,支持通过水平扩展的方式来动态增加节点,从而提升ES的处理性能。原创 2023-12-19 11:00:09 · 388 阅读 · 0 评论 -
HashMap和TreeMap的区别
TreeMap类具有丰富的功能, 因为它包含如下功能:tailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry()。使用HashMap需要键对象明确定义了hashCode()和equals()这两个方法,而且为了优化HashMap空间的使用,可以调整初始容量大小和扩容。与HashMap相比, TreeMap速度较慢, 因为它为大多数操作(如add(), remove()和contains())提供O(log(n))的性能。原创 2023-12-18 10:16:18 · 1720 阅读 · 0 评论 -
MyBatis何时使用一级缓存,何时使用二级缓存?
Mybatis里面设计了两级缓存来提升数据的检索效率,避免每次数据的访问都需要去查询数据库。先来看一级缓存,它是SqlSession级别的缓存,也叫本地缓存,因为每个用户在执行查询的时候都需要使用SqlSession来执行,为了避免每次都去查数据库,MyBatis把查询出来的数据保存到SqlSession的本地缓存中,后续的SQL如果命中缓存,就可以直接从本地缓存读取。那如果想要实现跨SqlSession级别的缓存?一级缓存就无法实现了,因此,MyBatis引入了二级缓存。原创 2023-12-15 11:09:00 · 506 阅读 · 0 评论 -
前后端分离后,Java开发如何解决跨域问题
因为一般的浏览器都有一个安全机制,叫做同源策略限制。所谓同源策略就是指用户输入的URL中包含的协议、域名、端口都完全相同。也就是说,我们使用浏览器访问网页时,必须符合同源策略的请求才能访问。如果有一项不同,浏览器会觉得有安全风险,就不想让你使用这个接口的数据。比如,在http://localhost:8080/index 页面中,用Ajax访问https://localhost:8081/index.json接口数据的时候,这两个URL的协议和端口不相同,也就是不同源,这就产生了跨域访问。原创 2023-12-14 10:35:56 · 1065 阅读 · 0 评论 -
2024春招最新30万字312道Java经典面试题52道场景题总结(附答案PDF)
最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升自己最快的手段就是背面试题;花了3个月的时间将市面上所有的面试题整理总结成了一份30万字的300道Java高频面试题64道场景题,分享给大家,希望大家都能拿到心仪的offer!原创 2023-12-13 10:58:03 · 1181 阅读 · 0 评论 -
Java保证线程安全的方式有哪些?
回答这个问题之前,得先了解导致对象线程不安全的原因,主要有三个:1、原子性:一个或者多个操作在CPU执行过程中被中断。2、可见性:一个线程对象共享变量的修改,导致另一个线程不能立即看到。3、有序性:程序执行的顺序没有按照代码的先后顺序执行。原子性和可见性比较容易理解,重点分析一下有序性。为什么程序执行的顺序会和代码的编写顺序不一致呢?这就得理解Java平台的两种编译器,静态编译器javac和动态编译器jit(just in time)。原创 2023-12-12 17:49:56 · 883 阅读 · 0 评论 -
为什么SQL语句命中索引比不命中索引要快?
想象一下,现在有一本包含几十万字的字典,有几百页厚,同时里面的字是无序排列的。如果在不使用目录的情况下,我们如何从字典中找出需要的字来呢?毫无疑问,我们只能一页一页的翻,显然,这是一项反人类的的工作。我们必然想的是先看目录,然后,找到相关的字或者偏旁,然后,找到对应的页码再去查找想要找的文字,这样,效率就大大提高了。而事实上,目录就是一种索引,我们说的数据库索引思想和目录的思想一脉相承。数据库索引最主要的作用就是帮助我们快速检索到想要的数据,从而不至于每次查询都做全局扫描。原创 2023-12-11 14:10:28 · 873 阅读 · 0 评论 -
Java场景面试题:手机扫码登录到底是怎么实现的?
可以的,扫码登录的本质,其实是通过已经登录的APP,扫描Web页面生成的二维码, 获取到一个Token作为登录凭证,然后再写入到Web端的登录认证程序。Token写入成功以后,会回调刷新Web页面跳转到登录成功的界面。原创 2023-08-21 10:00:00 · 313 阅读 · 0 评论 -
Java 经典面试解析:服务器卡顿、CPU飙升、接口负载剧增
有了一本强大的新书空降,在这炽热的夏日带来一股清凉的Java知识。这本名叫《Java面试八股文:高频面试题与求职攻略一本通》,简直是Java求职者的救星。原创 2023-07-07 14:15:32 · 464 阅读 · 0 评论 -
如果Spring中有两个ID相同的Bean,会报错吗?
在Spring中,如果有两个ID相同的Bean,会不会报错?如果报错,会在哪个阶段报错?原创 2023-05-16 13:16:17 · 1077 阅读 · 0 评论 -
Java场景面试题:短信验证码接口被狂刷,怎么办?
请问短信验证码接口被狂刷,搞得服务都快要崩溃了,我该怎么办?原创 2023-02-23 19:10:13 · 1817 阅读 · 0 评论 -
什么是Redis缓存雪崩、缓存穿透和缓存击穿?
需要面试文档可S我什么是Redis缓存雪崩、缓存穿透、缓存击穿?关于这个问题至少有20位以上的粉丝咨询过我。这确实是一道互联网大厂的高频面试题。今天,我给大家来聊一聊。另外,往期面试题解析中配套的文档我已经准备好,想获得的可以在我的煮叶简介中找到。好了,首先来说一下,缓存的作用。1.缓存的作用一般情况下,1.用户请求到后台,会先从缓存中取数据,如果在缓存中取到数据,就直接返回结果,如果取不到数据就需要查询数据库,从数据库中取数据,从数据库中取到数据后会同步更新到缓存,并返回结果原创 2022-05-12 19:42:15 · 474 阅读 · 0 评论 -
最通俗的方式理解Spring循环依赖三级缓存
今天,有位粉丝找我,说要耽误我5分钟时间,想让我帮助它理解一下Spring循环依赖的三级缓存,绕晕了一个星期,没有想明白。我想今天,用最通俗易懂的方式给大家重新梳理一下,保证让你听懂了。1、什么是循环依赖?循环依赖就是指循环引用,是两个或多个Bean相互之间的持有对方的引用。循环依赖有三种形态:1、相互依赖,也就是A依赖B,B又依赖A,它们之间形成了循环依赖。2、三者间依赖,也就是A依赖B,B依赖C,C又依赖A,形成了循环依赖。...原创 2022-05-06 18:00:00 · 668 阅读 · 0 评论 -
Spring到底学到什么程度才算学会?
面试造火箭,工作拧螺丝。今天有位工作5年的小伙伴私我说,Spring到底要学到什么程度才算学会?你可能会这样回答:能手写Spring会用还会讲出来能看源码了解原理能知其所以然,知道为何要这样设计了解设计模式在Spring中的应用能画出主要流程图能快速定位问题,解决问题了解各种主要的特性会熟练使用小伙伴们也可以思考一下,在评论告诉我的你看法.1、Tom的经验分享今天,我给大家聊聊我的看法。我认为要回答这个问题,要根据每个人的工作...原创 2022-05-10 14:53:44 · 563 阅读 · 0 评论 -
被面试官问烂的Spring AOP原理,你是怎么答的?
**往期视频已整理成文档形式,需要的可S我免费领取** Spring AOP在Spring体系中深不可测,Spring AOP原理也是经常在互联网大厂面试时被问到,今天,我给大家抽丝剥茧,详细到你无法想象。我划分为四个阶段给大家介绍:创建代理对象阶段、拦截目标对象阶段、调用代理对象阶段、调用目标对象阶段。我整理了一张完整的Spring AOP设计原理UML图,需要高清图的小伙伴可以私...原创 2022-04-22 14:55:36 · 1067 阅读 · 0 评论 -
为什么HashMap会产生死循环?
HashMap死循环是一个比较常见、也是比较经典的面试题,在大厂的面试中也经常被问到。HashMap的死循环问题只在JDK1.7版本中会出现,主要是HashMap自身的工作机制,再加上并发操作,从而导致出现死循环。JDK1.8以后,官方彻底解决了这个问题。1、数据插入原理在分析原因之前,我先带大家了解一下JDK1.7中HashMap插入数据的原理,来看动画演示:由于JDK1.7中HashMap的底层存储结构采用的是数组加链表的方式。而HashM...原创 2022-04-28 18:00:00 · 10034 阅读 · 12 评论 -
什么是内存溢出,什么是内存泄漏?
什么是内存溢出,什么是内存泄漏?这是很多小伙伴经常问我的一个问题,今天花3分钟时间给大家介绍一下。先来介绍什么是内存溢出?1、什么是内存溢出?发生内存溢出。我们来看到右侧的区域,假设我们JVM中可用的内存空间只剩下3M,但是我们要创建一个5M的对象,那么,新创建的对象就放不进去了。这个时候,我们就叫做内存溢出。就好比是一个容量只有300ml的水杯,我们硬要往里面倒500ml的水,这时候,水就会溢出,倒不进去了,这就相当于是内存的溢出。那么,内存泄漏又是怎么回事呢?2、什么是内存泄漏?还是来看这张原创 2022-04-24 17:08:52 · 3269 阅读 · 0 评论 -
美团面试真题,如何保证Kafka消息不丢失?
【Java面试】‘如何保证Kafka消息不丢失?’,只会回答,消息要持久化?添加信息确认机制?今天带你彻底搞明白一位工作了5年的小伙伴去美团面试以后,跟我反馈说,被问到一个“如何保证Kafka消息不丢失?”的问题,不知道如何回答。其实,这道题真的很基础。很多小伙伴可能只会回答说,消息要持久化,添加消息确认机制。如果,你只是这样回答,那就和普通的程序员没什么区别。要想让面试官感觉你确实有不一样的理解,就应该从多个方面更全面地来分析和回答这个问题。今天,我来给大家讲明白。【导航条:解决思路原创 2022-05-07 18:15:00 · 539 阅读 · 0 评论 -
Redis是单线程还是多线程,为什么效率这么高?
Redis是单线程还是多线程?这个问题,把一个5年开发经验的程序员给问懵了。可能很多小伙伴平时都听说过,Redis就是单线程的。但是我们学习Redis命令的时候,有经常有设置异步,比如bgsave命令,它的作用是在后台异步持久化数据到磁盘,那既然是异步,肯定需要由线程来完成。另外,往期面试题解析中配套的文档我已经准备好,想获得的可以在我的煮叶简介中找到。接下来,我们来介绍,Redis到底是单线程还是多线程?。1、官方解释其实,Redis确实是单线程的。通常说的单线程,主要是指Re...原创 2022-05-11 14:00:51 · 2928 阅读 · 0 评论 -
Spring到底学到什么程度才算学会?
面试造火箭,工作拧螺丝。今天有位工作5年的小伙伴私我说,Spring到底要学到什么程度才算学会?你可能会这样回答:能手写Spring会用还会讲出来能看源码了解原理能知其所以然,知道为何要这样设计了解设计模式在Spring中的应用能画出主要流程图能快速定位问题,解决问题了解各种主要的特性会熟练使用小伙伴们也可以思考一下,在评论告诉我的你看法.1、Tom的经验分享今天,我给大家聊聊我的看法。我认为要回答这个问题,要根据每个人的工作...原创 2022-05-08 15:09:01 · 2090 阅读 · 0 评论 -
3分钟通晓,互联网架构20年以来的演进
作为一个Java程序员,你可能也思考过,为什么我还是普通开发,为什么我还是高级开发,普通开发和高级开发有什么区别?你是不是也想过要成为架构师?想要成为合格的架构师,就必须要了解架构的演进,今天,我们就来聊一聊,Java架构的演变历史。1、分布式微服务架构的演进分布式微服务架构的发展,主要经历了四个阶段:单一应用架构、垂直应用架构、分布式架构和弹性SOA架构。这张图是从Dubbo官网上下载的描述分布式架构演进过程的示意图,大家可以收藏一下。1)单体架构(AllinOn...原创 2022-05-09 16:09:53 · 1591 阅读 · 0 评论 -
为什么越来越多的人选择Spring Boot?
需要面试文档可S我我们都知道,Spring是一个非常经典的应用框架,与其说是Java开发不如说是Spring开发,为什么现在越来越多的人会选择用SpringBoot呢?。要回答这个问题,还需要从JavaWeb开发的发展历史开始说起。1、JavaWeb开发简史自1995年JamesGosling(詹姆斯·高斯林)带领团队设计发布Java语言以来,Java一直排在编程语言排行榜的前列,JamesGosling也被称为“Java之父”。在最初发布的Java版本中...原创 2022-05-05 16:48:04 · 686 阅读 · 0 评论 -
为什么SQL语句命中索引比不命中索引要快?
需要完整版面试文档可扫描文章底部二维码免费领取!有位粉丝面试高开的时候被问到,为什么SQL语句命中索引比不命中索引要快?虽然自己也知道答案,但被问到的瞬间,就不知道如何组织语言了。今天,我给大家深度分析一下。想象一下,现在有一本包含几十万字的字典,有几百页厚,同时里面的字是无序排列的。如果在不使用目录的情况下,我们如何从字典中找出需要的字来呢?毫无疑问,我们只能一页一页的翻,显然,这是一项反人类的的工作。我们必然想的是先看目录,然后,找到相关的字或者偏旁,然后,找到对应的页码再去查找想要找的文字,这样,效率原创 2022-06-24 16:00:15 · 782 阅读 · 0 评论 -
「Java面试」如果不使用Spring,我们将如何开发?
曾经有一道面试题掀起了劲爆的浪潮,说如果不使用Spring,我们将如何开发?好多家公司都模仿提问了这么一道面试题,而且好多人也都在各个社区给出了自己的答案。接下来看看网友们是怎么说的。有说手写IoC的,有说用Servlet完成Web开发的,有说用纯JDBC完成数据库操作的等等,大家回答各有千秋。其实,想想我们上一代的程序员,没有Spring不也照样开发出非常多优秀的系统。另外,我花了1个多星期,准备了一份500页的PDF面试题解析配套文档,想获取的小伙伴可以扫描文章底部二维码领取!那我们使用Spring到底原创 2022-06-30 11:49:15 · 2768 阅读 · 4 评论 -
面试时被这样一个问:”存储MD5值应该用VARCHAR还是用CHAR?
一个5年工作经验的小伙伴,在面试的时候被这样一个问题。说”存储MD5值应该用VARCHAR还是用CHAR“,他一时间不只如何选择,感觉用VARCHAR也可以,用CHAR也行。希望我来帮忙分析一下。原创 2022-07-07 16:31:31 · 1101 阅读 · 0 评论 -
面试跳槽季惊艳面试官的回答:谈谈你对RabbitMQ工作原理的理解?
一个5年工作经验的小伙伴,在面试的时候被这样一个问题。谈谈你对RabbitMQ架构原理的理解。当时,这位小伙伴只解答说,我只会用,原理并没有关注过。那今天我给大家来分享一下我的理解。原创 2022-07-08 14:37:10 · 568 阅读 · 0 评论 -
「Java面试」被这题怼到不行,什么是可重入锁能解决什么问题?
需要完整版面试文档扫描文章底部二维码拿!一位3年工作经验的小伙伴,去一家互联网公司面试,结果被面试官怼了。面试官说:”这么简单的问题你都不知道?没法聊了,回去等通知吧“。然后,回来跟我是一阵诉苦。......原创 2022-07-05 14:56:54 · 732 阅读 · 0 评论 -
基于Redis和MySQL的架构,如何保证数据一致性?
今天分享一道一线大厂公司高频面试题。“基于Redis和MySQL的架构,如何保证数据一致性”。这个问题难倒了不少工作5年以上的程序员,难的不是问题本身,而是解决这个问题的思路。另外,我准备了一份500页的PDF面试题解析配套文档,一般情况下,Redis是用作应用程序和数据库之间读操作的缓存,主要目的是减少数据库IO,还可以提升数据的IO性能。如图所示,这是Redis加MySQL的整体架构设计。当应用程序需要去读取某个数据的时候,首先会先尝试去Redis中加载,如果命中就直接返回。如果没有命中,就从数据库查询原创 2022-07-14 10:45:52 · 2797 阅读 · 1 评论 -
去面试前刷到这题多好:谈谈你对Spring Cloud的理解?
最近,有很多应届生也挺焦虑的,说大家都卷,不卷也不行。很多应届生在面试过程中八股文背得不错,但是一聊到项目经验就不知如何说起。有位小伙伴来问我,说面试被问到对Spring Cloud的理解,自己也回答了,但感觉面试官不满意,说是没有结合项目经验来回答。今天,我给大家分享一下我的理解,希望能够帮助到各位小伙伴。另外,我花了1个多星期,准备了一份500页的PDF面试题解析配套文档,想获取的小伙伴可以扫描文章底部二维码领取!(附赠10万字大厂内部面试资料!)Spring Cloud是Spring官方推出来的一套微原创 2022-06-27 15:39:58 · 1211 阅读 · 0 评论 -
工作八年?是高级开发?竟然答不出:如何保证RabbitMQ的高可用?
一个8年工作经验的小伙伴,被问到这样一个问题,说如何保证RabbitMQ的高可用。关于这个问题呢,这位小伙伴倒是有个实操经验,就是不知道如何组织语言。所以,当时面试结果不太理想。今天,我给大家分享一下我的理解。.....................原创 2022-07-10 14:11:27 · 1658 阅读 · 3 评论 -
打算跳槽的Java程序员一定要看完:谈谈你对NoSQL的理解
需要完整版面试文档可扫描文章底部二维码领取!有粉丝给我留言说,希望我更新一期关于NoSQ的视频,那今天,咱们就来聊一聊我对NoSQL的理解。如果你也有想要我分享的面试题,请在评论区告诉我,后续安排。另外,我花了1个多星期,准备了一份10W字的面试题解析配套文档,想获取的小伙伴可以扫描文章底部二维码领取!NoSQL呢常见的解释有Non-Relational SQL或者Not Only SQL,不过Not Only SQL被更多人接受,一般泛指非关系型数据库。它和关系型数据库不同的是,不保证关系数据的ACID特原创 2022-06-23 14:52:00 · 575 阅读 · 0 评论