java面试题
文章平均质量分 57
java面试题
不死鸟.亚历山大.狼崽子
太极计算机股份有限公司系统架构师,从事ios、.net、flex、java等开发
展开
-
java面试题:计算机是如何存储float类型的数据的?
尾数部分(Fraction/Mantissa): 最后的23位是尾数部分(在二进制科学计数法中的小数部分)。在这里,并不直接存储1.x的形式,而是存储x部分,并且假定前面总是有一个隐含的1(这仅适用于规范化的数值,非规范化的数值除外,非规范化数值用于表示非常接近于0的数字)。指数部分(Exponent): 接下来的8位是指数部分,用二进制表示的指数值实际上是经过偏移的。这32位被分为三个部分:符号位、指数部分和尾数部分。符号位(Sign bit): 第1位是符号位,它表示数的正负。0表示正数,1表示负数。转载 2024-06-14 15:04:18 · 20 阅读 · 0 评论 -
java面试题:在浏览器地址栏输入 URL 并按下回车键后的工作流程
总的来说,网络通信模型可以用下图来表示,也就是大家只要熟记网络结构五层模型,按照这个体系,很多知识点都能顺出来了。访问网页的过程也是如此。转载 2024-06-14 11:47:28 · 46 阅读 · 0 评论 -
java面试题:Redis突然变慢,有哪些原因?
以上就是我的部分理解,实际情况可能因系统环境和配置的差异,出现问题的原因和解决的方式也不同。一般情况下,使用 Redis 的监控工具、日志和性能分析工具可以帮助我们更快定位和解决性能问题。同时还应该针对问题提出自己的一些解决思路,展现出对于 Redis 性能优化理解和经验,从而获得面试官的积极反馈。求职者需要从宏观视角去思考并尽可能全面的说出关键的影响因素,从而突出个人在架构、故障排查和分析等方面的能力。这是一道比较开放性的问题,因为影响Redis访问变慢的原因有很多。转载 2024-06-05 10:19:32 · 27 阅读 · 0 评论 -
java面试题:JDK1.8中的双冒号 :: 这是个啥?
方法引用(双冒号 :: 语法)是Java 8中引入的一种语法,用于简化 lambda 表达式。它有四种主要类型:引用静态方法、引用特定对象的实例方法、引用特定类型的任意对象的实例方法和引用构造方法。通过方法引用,可以使代码更加简洁和易读,尤其是在需要实现函数式接口时。转载 2024-06-02 10:24:25 · 31 阅读 · 0 评论 -
java面试题:在连续请求过程中,如何取消上次的请求?
这个问题想必很多朋友都遇到过,我再详细说一下场景!如 Boss 搜索框所示:先输入 1再输入 2再输入 3再输入 123请求参数依次为:1 12 123 123123请求参数通过右侧的 query 参数也可以看到,一共请求了四次。不难发现,这里已经做了基本的防抖,因为我们连续输入 123 的时候,只发了一次请求。好了,现在看完基本场景,我们回到正题!从上面的演示中不难发现我们一共发送了 4 次请求,顺序依次为 1、12、123、123123。转载 2024-05-31 17:34:30 · 15 阅读 · 0 评论 -
java面试题:为什么SpringBoot的 jar 可以直接运行?
LaunchedURLClassLoader重写了loadClass方法,也就是说它修改了默认的类加载方式(先看该类是否已加载这部分不变,后面真正去加载类的规则改变了,不再是直接从父类加载器中去加载)。return cls;如果根类加载器存在,调用它的加载方法。这里是根类加载是ExtClassLoader。转载 2024-05-30 11:38:29 · 16 阅读 · 0 评论 -
java面试题:如何确定限流阈值
在面试过程中,系统高并发是经常需要考察的,而熔断限流又是必考的,当面试官问及如何确定限流的阈值时,他们实际上是在考察你是否理解限流的本质及其在实际工作中是否有过经验。限流是一种常用的系统保护措施,用于防止过量流量或请求冲垮后端服务。正确设置限流阈值对于维持系统的稳定性和可用性至关重要,下面我们一起深入了解如何在面试中回答这一问题,并在实际工作场景中如何确定限流阈值。总体上来看有4个方法:压测、观测、类比、手动计算。转载 2024-05-29 14:48:30 · 21 阅读 · 0 评论 -
java面试题:判断字符串包含字母、数字、空格、符号的数量
在Java中,你可以使用正则表达式来检查字符串中包含多少个字母、数字、空格和符号。原创 2024-05-14 11:21:12 · 504 阅读 · 0 评论 -
java面试题:JSP有哪些动作
用来在页面被请求时引入一个文件。include指令是在jsp文件被转换成Servlet是引入文件,而jsp:include插入文件的时间是在页面被请求时,而且被引用文件不能包含某些jsp代码。它使得开发人员既可以发挥Java组件重用的优势,同时也避免了损失jsp区别于Servlet的方便性。以上代码用来获取名字为car的实例的属性设置为red。以上代码用来在浏览器中运行一个applet插件。以上代码表示实例化了一个com.Car类的实例。用来把请求转到一个新的页面,实例如下。原创 2024-05-07 14:45:24 · 179 阅读 · 0 评论 -
java面试:常见的限流算法有哪些
限流算法是一种用于限制流量请求的频率或速率的算法,其目的是在高并发或大流量请求的情况下,保护系统服务的安全性和可用性。限流算法可以应对热点业务带来的突发请求、调用方bug导致的突发请求以及恶意攻击请求等情况。是一种系统保护策略,主要是避免在流量高峰导致系统被压垮,造成系统不可用的问题。原创 2024-03-21 17:51:22 · 411 阅读 · 0 评论 -
java面试题:为什么数据库 delete 表数据,磁盘空间还是被一直占用
项目中使用MySQL作为数据库,对于表来说,一般为表结构和表数据。表结构占用空间都是比较小的,一般都是表数据占用的空间。当我们使用 delete删除数据时,确实删除了表中的数据记录,但查看表文件大小却没什么变化。转载 2024-03-18 13:09:48 · 85 阅读 · 0 评论 -
java面试题:类是如何被加载与卸载的?
触发条件包括,创建类的实例时,访问类的静态方法或静态变量的时候,使用Class.forName反射类的时候,或者某个子类初始化的时候。类的加载涉及到JVM比较核心和底层的知识,通常当面试官问到这个问题的时候就是面试官想考察我们对JVM加载类是否真的了解,以及平日里善于积累,仔细思考这方面的知识!Java自带的加载器加载的类,在虚拟机的生命周期中是不会被卸载的,只有用户自定义的加载器加载的类才可以被卸。将常量池中的符号引用替换为直接引用的过程.直接引用为直接指向目标的指针或者相对偏移量等.转载 2024-03-18 10:08:20 · 82 阅读 · 0 评论 -
java面试题:如果MySQL的自增 ID 用完了,怎么办?
表的自增 id 达到上限后,再申请时它的值就不会改变,进而导致继续插入数据时报主键冲突的错误row_id 达到上限后,则会归 0 再重新递增,如果出现相同的 row_id,后写的数据会覆盖之前的数据Xid 只需要不在同一个 binlog 文件中出现重复值即可。虽然理论上会出现重复值,但是概率极小,可以忽略不计InnoDB 的 max_trx_id 递增值每次 MySQL 重启都会被保存起来,所以我们文章中提到的脏读的例子就是一个必现的 bug,好在留给我们的时间还很充裕。转载 2024-03-17 13:01:33 · 69 阅读 · 0 评论 -
java面试题:什么是最左匹配原则
比如有索引(a,b,c),语句 select * from t where c =1 and a=1 and b=1,这样的语句也可以用到最左匹配,因为 MySQL 中有一个优化器,他会分析 SQL 语句,将其优化成索引可以匹配的形式,即 select * from t where a =1 and a=1 and c=1。假设存在(a,b)的联合索引,那么在B+树中的存储结构是这样的。可以看到,a字段的值是有序的,对应的数据是1、1、2、2、3,而b字段的值是没有顺序的:1、2、2、5、1。转载 2024-03-13 13:11:00 · 98 阅读 · 0 评论 -
java面试题:TCP 与 UDP 的区别,以及各自的优缺点
TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议(IP)中两种主要的传输层协议,它们有着显著的区别和各自的优缺点。不适合大量数据的传输:由于UDP没有流量控制和拥塞控制机制,大量数据的传输可能会出现问题。流量控制:TCP具有流量控制机制,可以防止发送方发送过多的数据,导致接收方处理不过来。可靠:TCP提供了数据传输的确认和重传机制,确保数据的完整性和准确性。可靠:TCP提供了数据传输的确认和重传机制,确保数据的完整性和准确性。慢:由于TCP的可靠性和顺序性,数据传输的速度可能会比UDP慢。转载 2024-03-12 14:30:10 · 86 阅读 · 0 评论 -
java面试题:为什么 SQL 语句不要过多的 join?
要回答好这个问题,只需要了解 join 操作会带来哪些影响,而这些影响对程序产生什么样的影响就行了。:我们知道,每个 join 操作都会对两个到多个表进行链接操作,这些操作会对计算资源和时间进行大量的消耗,同时如果说join操作过多,也会导致SQL的执行效率降低,进而影响整个系统的系统。,当join多个表的时候,SQL语句的复杂度会像是指数别的增长,使我们的代码的可读性和可维护性非常困难。:SQL语句会因为join的操作变得很复杂,而且我们在维护的时候,非常难以理解和。以上就是我对于这个问题的理解。原创 2024-03-11 09:49:37 · 695 阅读 · 0 评论 -
java面试题:解析浏览器端的 解 AJAX缓存机制
举个栗子,如果请求的是个库存数量,那么Expires的值可以是10秒以后.如果请求的是一个相片,那么Expires的值就可以久一点,因为它不会经常变动。当然,如果你使用POST方式发送Ajax是不能缓存的,因为POST请求永远不会被缓存.如果你的Ajax请求会产生其他作用(比如银行账户之间的转账),请使用POST请求. 我们设置了一个demo(这个demo已经不能看了ヽ(≧□≦)ノ)来阐明这些头信息是如何工作的. 在HttpWatch里,你可以看到我们在响应头信息里设置了以上三个响应头。转载 2024-02-27 23:17:47 · 82 阅读 · 0 评论 -
java面试题:禁用Cookie后Session还能用吗?
Cookie 和 Session 是 Web 应用程序中用于保持用户状态的两种常见机制,它们之间既有联系也有区别。Cookie 是由服务器在 HTTP 响应中发送给客户端(通常是浏览器)的一小段数据。客户端将这些信息保存在本地,并在后续的请求中自动将其发送回服务器。而 Session 是在服务器端创建的一种机制,用于跟踪用户的会话状态。服务器会给每个用户分配一个唯一的会话 ID,并将该 ID 通过 Cookie 或其他方式传递给客户端。转载 2024-02-20 14:33:38 · 117 阅读 · 0 评论 -
java面试题:Java项目防御SQL注入的有效策略
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。SQL案列此时,数据库的数据都会被清空掉,后果非常严重。转载 2024-02-19 17:36:47 · 81 阅读 · 0 评论 -
java面试题:分布式和微服务的区别
分布式架构解决的是如何将一个大的系统划分为多个业务模块这些业务模块会分别部署到不同的机器上,通过接口进行数据交互的问题。微服务是指很小的服务,可以小到只完成一个功能,这个服务可以单独部署运行,不同服务之间通过rpc调用。分布式架构是将一个大的系统划分为多个业务模块,这些业务模块会分别部署到不同的机器上,通过接口进行数据交互。微服务架构是架构设计方式,是设计层面的东西,一般考虑如何将系统从逻辑上进行拆分,也就是垂直拆分。分布式系统是部署层面的东西,即强调物理层面的组成,即系统的各子系统部署在不同计算机上。原创 2024-02-06 23:38:46 · 4595 阅读 · 1 评论 -
java面试题:MySQL中的各种JOIN的区别
表关联是频率非常高的一种数据库操作,在MySQL中,这种JOIN操作有很多类型,包括内联接、左外连接、右外连接等等,而每种连接的含义都不一样,如果死记硬背,不仅很难记住,而且也容易搞混淆,今天我们尝试使用图解的方式来讲解各种连接的内涵,因为结合了具体的例子,相信会让大家印象深刻。原创 2024-02-06 10:20:47 · 809 阅读 · 0 评论 -
java面试题:MySQL千万级大表如何进行数据清理
数据清理是数据库维护中的一项重要任务,尤其是在数据量巨大的情况下,需要谨慎操作,确保数据清理过程中不会影响线上服务。通过分批删除、分区表删除和导出-清理-导入等方法,可以有效地进行大表的数据清理工作。当然,选择哪种方法还需要根据具体业务需求和数据库的实际情况来定。在进行数据清理操作前,最好先在测试环境进行验证,确保操作的安全性。转载 2024-02-05 10:24:00 · 461 阅读 · 0 评论 -
java面试:binlog 和 redolog 有什么区别?
而redolog主要是在Mysql数据库事务的ACID特性里面,用来保证数据的持久化特性,但是其实它还有很多的作用。当我们数据库崩溃的时候,可以通过Redo log来恢复未完成的数据,保证数据的完整性。通过合理的配置RedoLog的大小和数量,还可以优化Mysql的性能。初步接触这个概念的时候,是在Mysql的主从数据同步的场景里,master节点的数据变更,会写入到binlog中,然后把binlog中的数据通过网络传输给slave节点,实现数据同步。以上就是我对于这个问题的理解。转载 2024-02-01 09:22:32 · 86 阅读 · 0 评论 -
java面试:SpringBoot可以同时处理多少个请求?
SpringBoot以其简洁高效的开发方式和强大的内嵌容器特性,为开发者提供了构建高性能后端服务的便利。然而,当面临高并发场景时,理解并合理配置Spring Boot应用以达到最佳的并发处理能力至关重要。在Spring Boot中,应用程序对HTTP请求的并发处理主要依赖于内嵌的Servlet容器(如Tomcat)。接下来我们以Tomcat为例谈谈这个问题。转载 2024-01-31 10:51:36 · 199 阅读 · 0 评论 -
java面试:like %xxx%该如何优化
再来简单分析一下索引条件下推的原理,在执行查询时先利用SQL中所提供的created_at条件在联合索引B+树中进行快速查找,匹配到所有符合created_at条件的B+树叶子节点后,再根据company_name条件进行过滤,然后再根据过滤之后的结果中的主键ID进行回表找到其他字段(回表),最终才返回结果,这样处理的好处是能够减少回表的次数,从而提高查询效率。所以,并不是like %xxx%就一定会导致索引失效,原理也可以配合其他字段一起来建联合索引,从而使用到索引条件下推机制。转载 2024-01-23 09:38:26 · 124 阅读 · 0 评论 -
java面试题(27):如何在十亿级别用户中检查用户名是否存在?
不知道大家有没有留意过,在使用一些app注册的时候,提示你用户名已经被占用了,需要更换一个,这是如何实现的呢?你可能想这不是很简单吗,去数据库里查一下有没有不就行了吗,那么假如用户数量很多,达到数亿级别呢,这又该如何是好?Redis 布隆过滤器的方案为大数据量下唯一性验证提供了一种基于内存的高效解决方案,它需要在内存消耗和错误率之间取得一个平衡点。当然布隆过滤器还有更多应用场景,比如防止缓存穿透、防止恶意访问等。转载 2024-01-19 16:43:41 · 129 阅读 · 0 评论 -
java面试题(26):接口中的大事务,该如何进行优化?
作为后端开发的程序员,我们常常会的一些相对比较复杂的逻辑,比如我们需要给前端写一个调用的接口,这个接口需要进行相对比较复杂的业务逻辑操作,比如会进行,查询、远程接口或本地接口调用、更新、插入、计算等一些逻辑,将最终接口的返回结果给到前端,而经过这么一系列的业务逻辑操作,接口对DB的操作、对代码业务逻辑判断、进行接口调用这些都是需要时间的,而只要这是一个事务操作,每次对数据库进行的交互都会产生一条事务记录。转载 2024-01-19 10:15:26 · 164 阅读 · 0 评论 -
java面试题(25):instanceof 关键字的作用
在这个例子中,str是一个String类型的对象。因此,str instanceof String的结果为true。如果str不是String类型的对象,那么结果为false。这里,object是要检查的对象,Class是你要检查的类或接口。如果object是Class的实例或子类的实例,则返回true;在Java中,instanceof关键字用于检查一个对象是否属于某个类或接口。它用于确定对象是否是特定类的实例,或者是该类的子类的实例。原创 2024-01-18 15:17:30 · 400 阅读 · 0 评论 -
java面试题(24):对象的创建过程
(4)接下来,JVM会把目标对象里面的普通成员变量初始化为零值,比如int类型初始化为0,对象类型初始化为null,(类变量在类加载的准备阶段就已经初始化过了)。(5)接下来要做的,就是执行目标对象内部生成的init方法,初始化成员变量的值、执行构造块、最后执行目标对象的构造方法,完成对象的创建。(3)当目标类被初始化以后,就可以从常量池里面找到对应的类元信息,并且目标对象的大小在类加载之后就已经确认了,所以这个时候就需要为新创建的对象,根据目标对象的大小在堆内存里面分配内存空间。原创 2024-01-18 14:02:06 · 469 阅读 · 0 评论 -
java面试题(23):Spring Bean如何保证并发安全
我们知道默认情况下,Spring中的Bean是单例的,所以在多线程并发访问的时候,有可能会出现线程安全问题。原创 2024-01-18 10:17:53 · 502 阅读 · 0 评论 -
java面试题(22):合并两个List并去重
【代码】java面试题(22):合并两个List并去重。原创 2024-01-17 14:55:46 · 490 阅读 · 0 评论 -
java面试题(21):private修饰的方法可以通过反射访问,那么private的意义是什么?
Java,在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的,这就是java反射带来的便利。首先,我们要了解三个反射包中的类:Constructor:代表类的单个构造方法,通过Constructor我们可执行一个类的某个构造方法(有参或者无参)来创建对象时。Method:代表类中的单个方法,可以用于执行类的某个普通方法,有参或无参,并可以接收返回值。原创 2024-01-13 00:34:11 · 375 阅读 · 0 评论 -
java面试题(20):为啥1000=1000为False?
今天跟大家聊一个有趣的话题,在Java中两个Integer对象做比较时,会产生意想不到的结果。其运行结果是:true。其运行结果是:false。看到这里,懵了没有?为什么会产生这样的结果呢?Integer类中有缓存,范围是:-128~127。如果数字在-128~127之间,则直接从缓存中获取Integer对象。如果数字在-128~127之外,则该方法会new一个新的Integer对象。判断两个对象的引用是否相等,用==号判断。判断两个对象的值是否相等,调用equals方法判断。转载 2024-01-09 14:25:02 · 25 阅读 · 0 评论 -
java面试题(19):重载和重写的区别?
方法的重写是子类提供了与父类相同方法名、参数列表的方法。重写的两个基本条件是:两个方法具有相同的方法名称、参数列表和返回类型;子类方法必须与父类方法具有相同的方法签名。重载可以增加方法的可读性,而重写可以增加代码的复用性。方法的重载是在同一个类中定义多个同名的方法,但这些方法的参数列表(参数的类型、数量、顺序)必须不同。在面向对象编程中,方法的重载(Overloading)和重写(Overriding)是两个非常重要的概念,它们在很多方面都非常相似,但也有一些关键的区别。原创 2024-01-09 10:35:42 · 429 阅读 · 0 评论 -
java面试题(18):mybatis中#和$的区别
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。在mybatis中#和$的主要区别是:#传入的参数在SQL中显示为字符串,#方式能够很大程度防止sql注入;$传入的参数在SqL中直接显示为传入的值,$方式无法防止Sql注入。#传入的参数在SQL中显示为字符串(当成一个字符串),会对自动传入的数据加一个双引号。$传入的参数在SqL中直接显示为传入的值。原创 2024-01-05 09:24:13 · 431 阅读 · 0 评论 -
java面试题(8):MySQL 中的 distinct 和 group by 哪个效率更高?
但从Mysql8.0开始,Mysql就删除了隐式排序,所以,此时在语义相同,无索引的情况下,group by和distinct的执行效率也是近乎等价的。且由于distinct关键字会对所有字段生效,在进行复合业务处理时,group by的使用灵活性更高,group by能根据分组情况,对数据进行更为复杂的处理,例如通过having对数据进行过滤,或通过聚合函数对数据进行运算。两者的语法区别在于,group by可以进行单列去重,group by的原理是先对结果进行分组排序,然后返回每组中的第一条数据。转载 2023-03-06 17:16:08 · 216 阅读 · 0 评论 -
java面试题(6):Spring Boot 打包成的可执行 jar ,为什么不能被其他项目依赖?
Spring Boot中默认打包成的jar叫做 可执行 jar,这种 jar 不同于普通的 jar,普通的jar不可以通过 java-jar xxx.jar命令执行,普通的jar主要是被其他应用依赖, SpringBoot打成的jar可以执行,但是不可以被其他的应用所依赖,即使强制依赖,也无法获取里边的类。有的小伙伴可能就有疑问了,既然同样是执行mvn package命令进行项目打包,为什么Spring Boot项目就打成了可执行jar,而普通项目则打包成了不可执行jar呢?转载 2023-02-21 12:40:39 · 416 阅读 · 0 评论 -
java面试题(7):深拷贝与浅拷贝的区别
目前java的拷贝分为两种:引用拷贝和对象拷贝,而对象拷贝又分为浅拷贝和深拷贝。只是复制对象的地址,不会创建一个新的对象会创建一个对象,并进行属性复制,不过对引用类型的属性,只会复制其对象地址及引用拷贝则是完全复制整个对象,包括引用类型的属性,及对基本类型数据进行值传递,对引用类型数据创建一个新的对象,并复制其内容。原创 2023-02-25 15:12:19 · 293 阅读 · 0 评论 -
java面试题(9):HTTPS原理
随着 HTTPS 建站的成本下降,现在大部分的网站都已经开始用上 HTTPS 协议。本文将层层深入,从原理上把 HTTPS 的安全性讲透。转载 2023-03-18 21:15:41 · 190 阅读 · 0 评论 -
java面试题(10):private修饰的方法可以通过反射访问,那么private的意义是什么?
1、Java的private修饰符不是为了绝对安全设计的,而是对用户常规使用Java的一种约束。就好比饭店厨房门口挂着“闲人免进”的牌子,但是你还是能够通过其他方法进去。private修饰的方法可以通过反射访问,那么private的意义是什么?2、从外部对对象进行常规调用时,能够看到清晰的类结构。转载 2023-04-25 17:59:26 · 53 阅读 · 0 评论