java面试题
文章平均质量分 55
java面试题
不死鸟.亚历山大.狼崽子
太极计算机股份有限公司系统架构师,从事ios、.net、flex、java等开发
展开
-
java面试题:高度为3的B+树可以存放多少数据?
在Mysql中,B+树的每个节点都是一个数据页,数据页默认大小是16KB,非叶子节点存的是索引值以及页的偏移量,而叶子节点上存放的则是完整的每行记录。B+树是一颗多路平衡树,它的特点是通过减少非叶子节点的存储数据量以及增加树的分支数量,降低树的高度从而减少磁盘IO次数来提高数据检索性能。这个问题考察求职者对B+树存储特性的理解,求职者应该对B+树的基本原理和特点有一定的了解,并能够解释B+树的高度和存储容量之间的关系。同理,高度为3的B+树,就可以存放1170*1170*16=21902400条记录。转载 2024-03-27 00:15:53 · 56 阅读 · 0 评论 -
java面试:常见的限流算法有哪些
限流算法是一种用于限制流量请求的频率或速率的算法,其目的是在高并发或大流量请求的情况下,保护系统服务的安全性和可用性。限流算法可以应对热点业务带来的突发请求、调用方bug导致的突发请求以及恶意攻击请求等情况。是一种系统保护策略,主要是避免在流量高峰导致系统被压垮,造成系统不可用的问题。原创 2024-03-21 17:51:22 · 368 阅读 · 0 评论 -
java面试题:为什么数据库 delete 表数据,磁盘空间还是被一直占用
项目中使用MySQL作为数据库,对于表来说,一般为表结构和表数据。表结构占用空间都是比较小的,一般都是表数据占用的空间。当我们使用 delete删除数据时,确实删除了表中的数据记录,但查看表文件大小却没什么变化。转载 2024-03-18 13:09:48 · 50 阅读 · 0 评论 -
java面试题:类是如何被加载与卸载的?
触发条件包括,创建类的实例时,访问类的静态方法或静态变量的时候,使用Class.forName反射类的时候,或者某个子类初始化的时候。类的加载涉及到JVM比较核心和底层的知识,通常当面试官问到这个问题的时候就是面试官想考察我们对JVM加载类是否真的了解,以及平日里善于积累,仔细思考这方面的知识!Java自带的加载器加载的类,在虚拟机的生命周期中是不会被卸载的,只有用户自定义的加载器加载的类才可以被卸。将常量池中的符号引用替换为直接引用的过程.直接引用为直接指向目标的指针或者相对偏移量等.转载 2024-03-18 10:08:20 · 56 阅读 · 0 评论 -
java面试题:如果MySQL的自增 ID 用完了,怎么办?
表的自增 id 达到上限后,再申请时它的值就不会改变,进而导致继续插入数据时报主键冲突的错误row_id 达到上限后,则会归 0 再重新递增,如果出现相同的 row_id,后写的数据会覆盖之前的数据Xid 只需要不在同一个 binlog 文件中出现重复值即可。虽然理论上会出现重复值,但是概率极小,可以忽略不计InnoDB 的 max_trx_id 递增值每次 MySQL 重启都会被保存起来,所以我们文章中提到的脏读的例子就是一个必现的 bug,好在留给我们的时间还很充裕。转载 2024-03-17 13:01:33 · 48 阅读 · 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 · 59 阅读 · 0 评论 -
java面试题:TCP 与 UDP 的区别,以及各自的优缺点
TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议(IP)中两种主要的传输层协议,它们有着显著的区别和各自的优缺点。不适合大量数据的传输:由于UDP没有流量控制和拥塞控制机制,大量数据的传输可能会出现问题。流量控制:TCP具有流量控制机制,可以防止发送方发送过多的数据,导致接收方处理不过来。可靠:TCP提供了数据传输的确认和重传机制,确保数据的完整性和准确性。可靠:TCP提供了数据传输的确认和重传机制,确保数据的完整性和准确性。慢:由于TCP的可靠性和顺序性,数据传输的速度可能会比UDP慢。转载 2024-03-12 14:30:10 · 59 阅读 · 0 评论 -
java面试题:为什么 SQL 语句不要过多的 join?
要回答好这个问题,只需要了解 join 操作会带来哪些影响,而这些影响对程序产生什么样的影响就行了。:我们知道,每个 join 操作都会对两个到多个表进行链接操作,这些操作会对计算资源和时间进行大量的消耗,同时如果说join操作过多,也会导致SQL的执行效率降低,进而影响整个系统的系统。,当join多个表的时候,SQL语句的复杂度会像是指数别的增长,使我们的代码的可读性和可维护性非常困难。:SQL语句会因为join的操作变得很复杂,而且我们在维护的时候,非常难以理解和。以上就是我对于这个问题的理解。原创 2024-03-11 09:49:37 · 639 阅读 · 0 评论 -
java面试题:解析浏览器端的 解 AJAX缓存机制
举个栗子,如果请求的是个库存数量,那么Expires的值可以是10秒以后.如果请求的是一个相片,那么Expires的值就可以久一点,因为它不会经常变动。当然,如果你使用POST方式发送Ajax是不能缓存的,因为POST请求永远不会被缓存.如果你的Ajax请求会产生其他作用(比如银行账户之间的转账),请使用POST请求. 我们设置了一个demo(这个demo已经不能看了ヽ(≧□≦)ノ)来阐明这些头信息是如何工作的. 在HttpWatch里,你可以看到我们在响应头信息里设置了以上三个响应头。转载 2024-02-27 23:17:47 · 61 阅读 · 0 评论 -
java面试题:禁用Cookie后Session还能用吗?
Cookie 和 Session 是 Web 应用程序中用于保持用户状态的两种常见机制,它们之间既有联系也有区别。Cookie 是由服务器在 HTTP 响应中发送给客户端(通常是浏览器)的一小段数据。客户端将这些信息保存在本地,并在后续的请求中自动将其发送回服务器。而 Session 是在服务器端创建的一种机制,用于跟踪用户的会话状态。服务器会给每个用户分配一个唯一的会话 ID,并将该 ID 通过 Cookie 或其他方式传递给客户端。转载 2024-02-20 14:33:38 · 82 阅读 · 0 评论 -
java面试题:Java项目防御SQL注入的有效策略
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。SQL案列此时,数据库的数据都会被清空掉,后果非常严重。转载 2024-02-19 17:36:47 · 72 阅读 · 0 评论 -
java面试题:分布式和微服务的区别
分布式架构解决的是如何将一个大的系统划分为多个业务模块这些业务模块会分别部署到不同的机器上,通过接口进行数据交互的问题。微服务是指很小的服务,可以小到只完成一个功能,这个服务可以单独部署运行,不同服务之间通过rpc调用。分布式架构是将一个大的系统划分为多个业务模块,这些业务模块会分别部署到不同的机器上,通过接口进行数据交互。微服务架构是架构设计方式,是设计层面的东西,一般考虑如何将系统从逻辑上进行拆分,也就是垂直拆分。分布式系统是部署层面的东西,即强调物理层面的组成,即系统的各子系统部署在不同计算机上。原创 2024-02-06 23:38:46 · 4484 阅读 · 1 评论 -
java面试题:MySQL中的各种JOIN的区别
表关联是频率非常高的一种数据库操作,在MySQL中,这种JOIN操作有很多类型,包括内联接、左外连接、右外连接等等,而每种连接的含义都不一样,如果死记硬背,不仅很难记住,而且也容易搞混淆,今天我们尝试使用图解的方式来讲解各种连接的内涵,因为结合了具体的例子,相信会让大家印象深刻。原创 2024-02-06 10:20:47 · 659 阅读 · 0 评论 -
java面试题:MySQL千万级大表如何进行数据清理
数据清理是数据库维护中的一项重要任务,尤其是在数据量巨大的情况下,需要谨慎操作,确保数据清理过程中不会影响线上服务。通过分批删除、分区表删除和导出-清理-导入等方法,可以有效地进行大表的数据清理工作。当然,选择哪种方法还需要根据具体业务需求和数据库的实际情况来定。在进行数据清理操作前,最好先在测试环境进行验证,确保操作的安全性。转载 2024-02-05 10:24:00 · 211 阅读 · 0 评论 -
java面试:binlog 和 redolog 有什么区别?
而redolog主要是在Mysql数据库事务的ACID特性里面,用来保证数据的持久化特性,但是其实它还有很多的作用。当我们数据库崩溃的时候,可以通过Redo log来恢复未完成的数据,保证数据的完整性。通过合理的配置RedoLog的大小和数量,还可以优化Mysql的性能。初步接触这个概念的时候,是在Mysql的主从数据同步的场景里,master节点的数据变更,会写入到binlog中,然后把binlog中的数据通过网络传输给slave节点,实现数据同步。以上就是我对于这个问题的理解。转载 2024-02-01 09:22:32 · 77 阅读 · 0 评论 -
java面试:SpringBoot可以同时处理多少个请求?
SpringBoot以其简洁高效的开发方式和强大的内嵌容器特性,为开发者提供了构建高性能后端服务的便利。然而,当面临高并发场景时,理解并合理配置Spring Boot应用以达到最佳的并发处理能力至关重要。在Spring Boot中,应用程序对HTTP请求的并发处理主要依赖于内嵌的Servlet容器(如Tomcat)。接下来我们以Tomcat为例谈谈这个问题。转载 2024-01-31 10:51:36 · 95 阅读 · 0 评论 -
java面试:like %xxx%该如何优化
再来简单分析一下索引条件下推的原理,在执行查询时先利用SQL中所提供的created_at条件在联合索引B+树中进行快速查找,匹配到所有符合created_at条件的B+树叶子节点后,再根据company_name条件进行过滤,然后再根据过滤之后的结果中的主键ID进行回表找到其他字段(回表),最终才返回结果,这样处理的好处是能够减少回表的次数,从而提高查询效率。所以,并不是like %xxx%就一定会导致索引失效,原理也可以配合其他字段一起来建联合索引,从而使用到索引条件下推机制。转载 2024-01-23 09:38:26 · 79 阅读 · 0 评论 -
java面试题(27):如何在十亿级别用户中检查用户名是否存在?
不知道大家有没有留意过,在使用一些app注册的时候,提示你用户名已经被占用了,需要更换一个,这是如何实现的呢?你可能想这不是很简单吗,去数据库里查一下有没有不就行了吗,那么假如用户数量很多,达到数亿级别呢,这又该如何是好?Redis 布隆过滤器的方案为大数据量下唯一性验证提供了一种基于内存的高效解决方案,它需要在内存消耗和错误率之间取得一个平衡点。当然布隆过滤器还有更多应用场景,比如防止缓存穿透、防止恶意访问等。转载 2024-01-19 16:43:41 · 88 阅读 · 0 评论 -
java面试题(26):接口中的大事务,该如何进行优化?
作为后端开发的程序员,我们常常会的一些相对比较复杂的逻辑,比如我们需要给前端写一个调用的接口,这个接口需要进行相对比较复杂的业务逻辑操作,比如会进行,查询、远程接口或本地接口调用、更新、插入、计算等一些逻辑,将最终接口的返回结果给到前端,而经过这么一系列的业务逻辑操作,接口对DB的操作、对代码业务逻辑判断、进行接口调用这些都是需要时间的,而只要这是一个事务操作,每次对数据库进行的交互都会产生一条事务记录。转载 2024-01-19 10:15:26 · 152 阅读 · 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 · 385 阅读 · 0 评论 -
java面试题(24):对象的创建过程
(4)接下来,JVM会把目标对象里面的普通成员变量初始化为零值,比如int类型初始化为0,对象类型初始化为null,(类变量在类加载的准备阶段就已经初始化过了)。(5)接下来要做的,就是执行目标对象内部生成的init方法,初始化成员变量的值、执行构造块、最后执行目标对象的构造方法,完成对象的创建。(3)当目标类被初始化以后,就可以从常量池里面找到对应的类元信息,并且目标对象的大小在类加载之后就已经确认了,所以这个时候就需要为新创建的对象,根据目标对象的大小在堆内存里面分配内存空间。原创 2024-01-18 14:02:06 · 459 阅读 · 0 评论 -
java面试题(23):Spring Bean如何保证并发安全
我们知道默认情况下,Spring中的Bean是单例的,所以在多线程并发访问的时候,有可能会出现线程安全问题。原创 2024-01-18 10:17:53 · 484 阅读 · 0 评论 -
java面试题(22):合并两个List并去重
【代码】java面试题(22):合并两个List并去重。原创 2024-01-17 14:55:46 · 366 阅读 · 0 评论 -
java面试题(21):private修饰的方法可以通过反射访问,那么private的意义是什么?
Java,在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的,这就是java反射带来的便利。首先,我们要了解三个反射包中的类:Constructor:代表类的单个构造方法,通过Constructor我们可执行一个类的某个构造方法(有参或者无参)来创建对象时。Method:代表类中的单个方法,可以用于执行类的某个普通方法,有参或无参,并可以接收返回值。原创 2024-01-13 00:34:11 · 365 阅读 · 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 · 21 阅读 · 0 评论 -
java面试题(19):重载和重写的区别?
方法的重写是子类提供了与父类相同方法名、参数列表的方法。重写的两个基本条件是:两个方法具有相同的方法名称、参数列表和返回类型;子类方法必须与父类方法具有相同的方法签名。重载可以增加方法的可读性,而重写可以增加代码的复用性。方法的重载是在同一个类中定义多个同名的方法,但这些方法的参数列表(参数的类型、数量、顺序)必须不同。在面向对象编程中,方法的重载(Overloading)和重写(Overriding)是两个非常重要的概念,它们在很多方面都非常相似,但也有一些关键的区别。原创 2024-01-09 10:35:42 · 421 阅读 · 0 评论 -
java面试题(18):mybatis中#和$的区别
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。在mybatis中#和$的主要区别是:#传入的参数在SQL中显示为字符串,#方式能够很大程度防止sql注入;$传入的参数在SqL中直接显示为传入的值,$方式无法防止Sql注入。#传入的参数在SQL中显示为字符串(当成一个字符串),会对自动传入的数据加一个双引号。$传入的参数在SqL中直接显示为传入的值。原创 2024-01-05 09:24:13 · 377 阅读 · 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 · 184 阅读 · 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 · 351 阅读 · 0 评论 -
java面试题(7):深拷贝与浅拷贝的区别
目前java的拷贝分为两种:引用拷贝和对象拷贝,而对象拷贝又分为浅拷贝和深拷贝。只是复制对象的地址,不会创建一个新的对象会创建一个对象,并进行属性复制,不过对引用类型的属性,只会复制其对象地址及引用拷贝则是完全复制整个对象,包括引用类型的属性,及对基本类型数据进行值传递,对引用类型数据创建一个新的对象,并复制其内容。原创 2023-02-25 15:12:19 · 226 阅读 · 0 评论 -
java面试题(9):HTTPS原理
随着 HTTPS 建站的成本下降,现在大部分的网站都已经开始用上 HTTPS 协议。本文将层层深入,从原理上把 HTTPS 的安全性讲透。转载 2023-03-18 21:15:41 · 174 阅读 · 0 评论 -
java面试题(10):private修饰的方法可以通过反射访问,那么private的意义是什么?
1、Java的private修饰符不是为了绝对安全设计的,而是对用户常规使用Java的一种约束。就好比饭店厨房门口挂着“闲人免进”的牌子,但是你还是能够通过其他方法进去。private修饰的方法可以通过反射访问,那么private的意义是什么?2、从外部对对象进行常规调用时,能够看到清晰的类结构。转载 2023-04-25 17:59:26 · 49 阅读 · 0 评论 -
java面试题(11):杨辉三角
首先想要输出杨辉三角,就要找到它有什么规律?原创 2023-06-21 16:20:04 · 89 阅读 · 0 评论 -
java面试题(12):给定一个n个元素有序的(升序)整数数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值春招返回下标,否则返回-1
给定一个n个元素有序的(升序)整数数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值春招返回下标,否则返回-1。输入:nums =[-1,0,3,5,9,12],target=9。解释:9出现在nums中并且下标为4。原创 2023-06-21 18:15:36 · 358 阅读 · 0 评论 -
java面试题(5):List去重方案
这个是最基本的实现了,创建一个空的 List,添加前判断一下存在不存在,不存在才添加,这样就保证了元素不重复。输出结果:利用双循环,判断是否有相等的,再进行移除。输出结果:复制一个 list2,再循环 List2,判断 list 中的元素的首尾出现的坐标位置是否一致,如果一致,则说明没有重复的,否则重复,再删除重复的位置的元素。原创 2023-02-20 18:31:21 · 4926 阅读 · 0 评论 -
java面试题(4):List空指针问题
以下代码在过程中是否会。原创 2023-02-16 18:09:31 · 135 阅读 · 0 评论 -
java面试题(2):isEmpty方法、null以及““的区别
分配了内存空间,值为空字符串,是相对的空,是一种有值(值 = 空字串)分配了内存空间,值为空,是绝对的空,是一种有值(值 = 空)是未分配内存空间,无值,是一种无值(值不存在)下面讲解一个比较容易混淆的概念,直接上代码。原创 2023-01-18 11:42:16 · 316 阅读 · 0 评论 -
java面试题(3):Java中Switch支持String字符串?为什么不支持long类型?
我们知道Java Switch 支持byte、short、int类型,在JDK 1.5 时,支持了枚举类型,在 JDK1.7时,又支持了String类型。那么它为什么就不能支持long类型呢,明明它跟 byte、short、int 一样都是数值型,它又是咋支持 String 类型的呢?1 结论下面详细介绍下各个类型是如何被转变成 int 类型的,使用的编译命令为 javac,反编译网站为:http://javare.cn。转载 2023-01-25 18:40:36 · 80 阅读 · 0 评论 -
java面试题(1):静态代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个静态代码块只会被执行一次。执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。扩展:对应的扩展下非静态代码块。原创 2022-12-08 14:11:45 · 152 阅读 · 0 评论 -
java面试题(14):Oracle中truncate和delete的区别
如果DELETE不加WHERE子句, DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是0。如果一个表中有自增字段,使用TRUNCATE TABLE和没有WHERE子句的DELETE删除所有记录后,这个自增字段将起始值恢复成1.如果你不想这样做的话,可以在DELETE语句中加上永真的WHERE,如WHERE 1或WHERE true。(5)Truncate 语句不能带 where 条件,意味着只能进行全部数据删除,而DELETE可带 where 条件进行局部删除数据。原创 2023-06-28 11:50:03 · 614 阅读 · 0 评论