JAVASE
深入浅出讲解JAVASE相关基础知识,帮助开发者熟悉JAVA基础编程,了解常见JAVASE面试题型
mischen520
JAVA高级架构师
展开
-
Spring JDBC提供了几种类型来简化数据库开发?
Spring Data JDBC:这是Spring的一个子项目,它提供了更高级的抽象,例如Repository抽象和实体到数据库映射的自动化处理,使得开发者可以更快速地开发数据库驱动的应用。NamedParameterJdbcTemplate:这是JdbcTemplate的一个子类,提供了命名参数的支持,可以在SQL语句中使用命名参数而不是传统的问号占位符。SimpleJdbcTemplate:这是Spring 3.1引入的一个新类,它提供了更加类型安全的方式来操作数据库,它使用Java 5的泛型特性。原创 2024-08-06 19:00:03 · 221 阅读 · 0 评论 -
Maven中,mvn clean deploy依次执行了()个阶段
解析:mvn clean deploy依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。Maven中,mvn clean deploy依次执行了()个阶段。原创 2024-08-02 18:41:07 · 89 阅读 · 0 评论 -
使用maven完成项目的构建,maven将多个过程规范为一个生命周期,如下所示是生命周期的各阶段的流程是() 1:清理、2:编译、3:测试、4:部署、5:报告、6:打包
使用maven完成项目的构建,maven将多个过程规范为一个生命周期,如下所示是生命周期的各阶段的流程是()1:清理、2:编译、3:测试、4:部署、5:报告、6:打包。项目构建包括:清理、编译、测试、报告、打包、部署等过程。原创 2024-08-02 18:39:13 · 79 阅读 · 0 评论 -
下面关于数组排序的说明那项是错误的?
在Java中,java.util.Arrays类提供了一个sort()方法来支持数组排序,但是通过这个类排序的对象所在类并不需要实现Comparable或Comparator接口。这是因为Arrays.sort()方法可以处理任何类型的数组,无论是基本数据类型还是对象,只要这些对象实现了Comparable接口或者传递了Comparator对象,它就可以进行排序。然而,这个说明忽略了Arrays.sort()方法的通用性,错误地暗示了排序的对象所在类必须实现特定的接口。原创 2024-08-01 19:30:37 · 241 阅读 · 0 评论 -
Git版本管理中下列不适于Git的本地工作区域的是
资源库:本地安全存放数据的位置,里面存放着提交到所有版本的数据 git仓库:托管代码的服务器,服务器安全存放数据的位置,里面存放着提交到所有版本的数据。资源库(Repository或Git Directory)、Git版本管理中下列不适于Git的本地工作区域的是。工作目录(Working Directory)、git仓库(Remote Directory).暂存区(Stage/Index)、暂存区:临时存放项目文件的改动情况。工作目录:存放项目文件的地方。原创 2024-08-01 18:48:32 · 226 阅读 · 0 评论 -
下面关于Date类的描述错误的一项是?
这个描述中存在错误,因为java.util.Date类并没有直接子类属于java.sql包。实际上,java.util.Date类是Java标准库中的一部分,用于表示日期和时间,而java.sql包中的类,如Timestamp和Time,是专门为SQL操作设计的,它们并不直接继承自java.util.Date类。关于Date类的描述错误的一项是A.java.util.Date类下有三个子类: java.sql.Date、java.sql.Timestamp、java.sql.Time。原创 2024-07-29 20:51:46 · 218 阅读 · 0 评论 -
Spring中注解@Qualifier的作用表述准确的是?
在使用@Autowired或@Resource进行自动装配时,如果容器中存在多个相同类型的Bean,Spring会尝试根据类型进行自动装配,但可能无法确定要注入的具体Bean。这时,可以结合使用@Qualifier注解来指定唯一的Bean。A. 此注解表示by name自动注入时,可以使用此注解显示配置。B. 此注解表示by Type自动注入时,可以使用此注解显示配置。D. 此注解表示构造函数自动注入时,可以使用此注解显示配置。C. 此注解表示无参自动注入时,可以使用此注解显示配置。原创 2024-07-29 20:45:04 · 192 阅读 · 0 评论 -
如何自定义HttpSessionListener ?
这样,每当一个HttpSession被创建或销毁时,相应的sessionCreated或sessionDestroyed方法就会被调用,你可以在这些方法中加入自定义的逻辑。在Java的Servlet中,可以通过实现HttpSessionListener接口来自定义HttpSession的监听器。替换com.yourpackage为你的MySessionListener类所在的包的名字。A. 实现HttpSessionListener接口。B. 在Web.xml中配置。原创 2024-07-29 20:36:18 · 213 阅读 · 0 评论 -
Object类中的那个方法不能被覆写?
在Java中,Object类是所有类的超类,它包含了一些基本的方法,如toString(), hashCode(), equals(), clone(), 和 finalize()。此外,finalize()方法虽然可以被子类继承,但同样不能被覆写。这是因为finalize()方法用于在对象被垃圾回收前执行一些清理操作,由于它的执行时机和频率不可预测,且JVM对finalize方法的执行有诸多限制和注意事项,因此不推荐使用覆写finalize()方法来实现自定义的清理逻辑。原创 2024-07-29 19:44:25 · 183 阅读 · 0 评论 -
下面关于枚举的描述正确的一项是?
事先考虑到某一变量可能的取值,尽可能用自然语言忠表意清楚的单词来表示它的每一个值,用这中思路定义的类型被称为枚举类型。枚举事由一组固定的常量组成的类型。在Java中每个枚举都继承java.lang.Enum类,使用关键字enum定义。B. 在Java中可以直接继承java.util.Enum类实现枚举类的定义;C. 利用枚举类中的values()方法可以取得全部的枚举项;D. 枚举中定义的构造方法只能够使用private权限声明;A. 枚举中定义的每一个枚举项其类型都是String;原创 2024-07-29 19:09:49 · 150 阅读 · 0 评论 -
spring bean如何保证并发安全
request:搞web的大家都应该明白request的域了吧,就是每次请求都新产生一个实例,和prototype不同就是创建后,接下来的管理,spring依然在监听;在不改变bean的作用域的情况下,可以避免在bean中存在可变状态的声明。prototype:原型模式,每次通过getBean获取该bean就会新产生一个实例,创建后spring将不再对其管理;每次从容器中获取该bean时,都会创建一个新的实例,避免了多线程共享同一个对象实例化的问题。默认情况下,spring bean创建的都是单例的。原创 2023-06-24 09:45:13 · 918 阅读 · 0 评论 -
内存泄露和内存溢出的区别
内存泄露是指分配出去的内存没有被回收回来,由于失去了对该内存区域的控制,因而造成了资源的浪费。Java中一般不会产生内存泄露,因为有垃圾回收器自动回收垃圾,但这也不绝对,当我们new了对象,并保存了其引用,但是后面一直没用它,而垃圾回收器又不会去回收它,这边会造成内存泄露,内存溢出是指程序所需要的内存超出了系统所能分配的内存(包括动态扩展)的上限。原创 2023-06-24 09:15:37 · 283 阅读 · 0 评论 -
详述java的类加载机制
原创 2023-06-24 09:08:08 · 160 阅读 · 0 评论 -
详解java内存模型
原创 2023-06-24 09:05:31 · 110 阅读 · 0 评论 -
java解压zip文件
【代码】java解压zip文件代码实现。原创 2023-02-25 08:13:17 · 3309 阅读 · 0 评论 -
java读取图片的大小、高度、宽度
java读取图片一般分为两种,一种是直接读取文件地址,一种是从前端传送过来的。原创 2023-02-22 19:23:43 · 5528 阅读 · 1 评论 -
java判断日期是否合法
虽然绝大多数会在前台处理,但是也有需要从文件流读入的情况,如果日期不合格就需要抛异常,这时候就需要禁止SimpleDateFormat的自动计算功能。SimpleDateFormat.setLenient(false):严格解析日期,如果日期不合格就抛异常,不会自动计算。SimpleDateFormat.setLenient(true) : 默认值true,不严格解析日期,会自动计算。有时候我们需要判断用户的日期格式是否正确,这时候就需要用到setLenient。...原创 2022-08-05 06:59:34 · 2748 阅读 · 0 评论 -
利用jfreechart生成柱状图(代码示例)
1.引入maven依赖。原创 2022-10-30 10:21:04 · 992 阅读 · 1 评论 -
Integer a=100,b=100,a==b的运行结果?Integer c=1000,d=1000,c==d的运行结果?
比较得到的结果必然是true。而第二个问题,因为不在-128-127之间,则指向的内存地址都不一样,故用==比较必然为false。Integer a=100,b=100时候a。原创 2022-10-14 20:10:27 · 1031 阅读 · 0 评论 -
java保证线程安全的方式有哪些?
同时,针对不同的应用场景,还可以使用分布式锁来实现线程安全,比较常用的分布式锁实现方式有,基于数据库实现的分布式锁(不常用,除非是单数据库,但是不便于后期扩展),基于redis实现的分布式锁、基于zookeeper实现的分布式锁。让这些变量在多线程环境下访问(get/set)时能保证各个线程里的变量相对独立于其他线程内的变量。ThreadLocal采⽤了“以空间换时间”的⽅式,为每⼀个线程都提供⼀份变量的副本,从⽽实现同时访问⽽互不影响,但因为每个线程都维护着⼀份副本,对内存空间的占⽤会增加。原创 2022-10-05 13:31:27 · 4008 阅读 · 0 评论 -
一个空的Java object 对象占多大内存?
对象头: 1.MakeOop :存储hashcode 垃圾回收时候的分代年龄 synchronized锁升级过程中的锁标记 (无锁、偏向锁、轻量级锁、重量级锁) 32位操作系统占4个字节 64位操作系统占8个字节。在开启了压缩指针的情况下,Object默认会占用12个字节,但是为了避免伪共享问题,JVM会按照8个字节的倍数进行填充,所以会填充4个字节变成16个字节长度。在关闭压缩指针的情况下,Object默认会占用16个字节,16个字节正好是8的整数倍,因此不需要填充。原创 2022-10-03 20:06:14 · 2807 阅读 · 3 评论 -
Springboot中的定时任务是否会发生阻塞?
不同的定时任务之间互不影响,同一个定时任务(方法)依然会有被阻塞的机制。如果任务执行时间超过定时任务间隔时间,不管是同一个定时任务还是不同的定时任务,下一个任务都会被阻塞。首先需要知道:定时任务默认是单线程的。所以默认情况下,上一个定时任务没有执行完,下一个定时任务是不会开始的。3.在需要定时任务方法上增加注解@Scheduled,注解的参数是定时任务执行时机。Springboot中上一个定时任务没执行完,是否会影响下一个定时任务执行?3.如果定时任务交给线程池处理,则下一个任务不会被阻塞。原创 2022-09-07 22:02:10 · 1285 阅读 · 0 评论 -
java判断两个日期之间是否超过n年?
【代码】java判断两个日期之间是否超过n年?原创 2022-09-03 09:10:09 · 1496 阅读 · 0 评论 -
java获取用键盘输入常用的两种方法
方法 2:通过 BufferedReader。方法 1:通过 Scanner。原创 2022-09-02 00:30:34 · 2186 阅读 · 0 评论 -
Java序列化中如果有些字段不想进行序列化怎么办
transient 关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被 transient 修饰的变量值不会被持久化和恢复。对于不想进行序列化的变量,使用 transient 关键字修饰。transient 只能修饰变量,不能修饰类和方法。原创 2022-09-02 00:28:07 · 1929 阅读 · 0 评论 -
import java 和 和 javax 有什么区别?
API 包来说使用。然而随着时间的推移,javax 逐渐的扩展成为 Java API 的组。刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展。但是,将扩展从 javax 包移动到 java 包将是太麻烦了,最终会破坏。因此,最终决定 javax 包将成为标准 API 的一部分。所以,实际上 java 和 javax 没有区别。原创 2022-09-02 00:22:38 · 432 阅读 · 0 评论 -
在 Java 中定义一个不做事且没有参数的构造方法的作用
Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定。义了有参数的构造方法,而在子类的构造方法中又没有用 super() 来调用父类。中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没。的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定。有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数。原创 2022-09-02 00:20:26 · 108 阅读 · 0 评论 -
Oracle JDK 和 OpenJDK 的区别?
答:非常接近 - 我们的 Oracle JDK 版本构建过程基于 OpenJDK 7 构建,只添加了几个部分,例如部署代码,其中包括 Oracle 的 Java 插件和 Java WebStart的实现,以及一些封闭的源代码派对组件,如图形光栅化器,一些开源的第三方组件,如 Rhino,以及一些零碎的东西,如附加文档或第三方字体。展望未来,我们的目的是开源 Oracle JDK 的所有部分,除了我们考虑商业功能的部分。此外,OpenJDK 被选为 Java 7 的参考实现,由 Oracle 工程师维护。原创 2022-09-02 00:15:13 · 369 阅读 · 0 评论 -
List 和 Set 的区别
List , Set 都是继承自 Collection 接口List 特点:元素有放入顺序,元素可重复Set 特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(元素虽然无放入顺序,但是元素在set中的位置是有该元素的 HashCode 决定的,其位置其实是固定的,加入Set 的 Object 必须定义 equals ()方法,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)Set和List对比Set:检索元素效率原创 2021-11-18 07:20:16 · 384 阅读 · 0 评论 -
map实现快速排序
比较BigDecimal的值大小,根据BigDecimal值取不同的key,代码如下:package com.user.controller;import java.math.BigDecimal;import java.util.*;/** * @ClassName Test * @Description DOTO 比较BigDecimal的值大小,根据BigDecimal值取不同的key * @Author mischen * @Date 2021/11/14 0014 17:24原创 2021-11-14 19:23:13 · 463 阅读 · 0 评论 -
java中垃圾收集的方法有哪些?
1)引用计数法 应用于:微软的COM/ActionScrip3/Python等a) 如果对象没有被引用,就会被回收,缺点:需要维护一个引用计算器2)复制算法 年轻代中使用的是Minor GC,这种GC算法采用的是复制算法(Copying)a) 效率高,缺点:需要内存容量大,比较耗内存b) 使用在占空间比较小、刷新次数多的新生区3)标记清除 老年代一般是由标记清除或者是标记清除与标记整理的混合实现a) 效率比较低,会产生碎片。4)标记压缩 老年代一般是由标记清除或者是标记清除与标记原创 2021-09-10 00:11:10 · 375 阅读 · 0 评论 -
简述Java的类加载过程
Java类加载需要经历一下几个过程:1)加载加载时类加载的第一个过程,在这个阶段,将完成一下三件事情:a.通过一个类的全限定名获取该类的二进制流。b.将该二进制流中的静态存储结构转化为方法去运行时数据结构。 c.在内存中生成该类的Class对象,作为该类的数据访问入口。2)验证验证的目的是为了确保Class文件的字节流中的信息不回危害到虚拟机.在该阶段主要完成以下四钟验证:a.文件格式验证:验证字节流是否符合Class文件的规范,如主次版本号是否在当前虚拟机范围内,常量池中的常量是原创 2021-09-10 00:07:48 · 1725 阅读 · 0 评论 -
如何确保 N 个线程可以访问 N 个资源同时又不导致死锁?
使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。...原创 2021-09-04 01:34:22 · 428 阅读 · 0 评论 -
HV000030: No validator could be found for constraint ‘javax.validation.constraints.Pattern‘ validati
错误原因:数字类型不能使用javax.validation.constraints.Pattern注解解决办法方法一:.将字段类型设置为String类型;方法二:使用其他验证注解验证,数子的有 @Size,@Min,@Max,@Range现将@Valid常用注解介绍如下:Bean Validation 中内置的 constraint@Null 被注释的元素必须为 null@NotNull 被注释的元素必须不为 null@AssertTrue 被注释的元素必须为 true原创 2021-08-20 10:17:10 · 9318 阅读 · 0 评论 -
JAVA循环删除文件夹以及文件夹下面的文件(已通过sonar扫描,直接复制即可)
package com.mischen.it.utils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.io.IOException;import java.nio.file.Files;import java.nio.file.Path;/** * @ClassName FileDemo * @Description 删除文件夹以及文件夹下面的文件 *原创 2021-08-14 09:32:43 · 705 阅读 · 0 评论 -
java压缩文件夹以及下面的所有文件(支持递归压缩)
直接上代码:package com.mischen.it.utils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.*;import java.util.Date;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;/** * @ClassName TestCreateZip * @Description D原创 2021-07-24 14:48:42 · 1639 阅读 · 0 评论 -
Runnable和Callable的区别
1)Runnable接口中的方法没有返回值;Callable接口中的方法有返回值2)Runnable接口中的方法没有抛出异常;Callable接口中的方法抛出了异常3)Runnable接口中的落地方法是call方法;Callable接口中的落地方法是run方法...原创 2021-07-08 21:00:35 · 131 阅读 · 0 评论 -
String buffer和String builder的区别
1、StringBuffer与StringBuilder中的方法和功能完全是等价的。2、只是StringBuffer中的方法大都采用了synchronized关键字进行修饰,因此是线程安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低...原创 2021-07-03 15:08:29 · 4053 阅读 · 0 评论 -
TreeSet和HashSet的区别
HashSet是采用hash表来实现的。其中的元素没有按顺序排列,add()、remove()以及contains()等方法都是复杂度为O(1)的方法。TreeSet是采用树结构实现(红黑树算法)。元素是按顺序进行排列,但是add()、remove()以及contains()等方法都是复杂度为O(log (n))的方法。它还提供了一些方法来处理排序的set,如first(),last(),headSet(),tailSet()等等。...原创 2021-07-03 14:57:43 · 398 阅读 · 0 评论 -
HashMap和HashTable的区别?(高频面试题)
1.线程安全性不同HashMap是线程不安全的,HashTable是线程安全的,其中的方法是Synchronize的,在多线程并发的情况下,可以直接使用HashTable,但是使用HashMap时必须自己增加同步处理。2.是否提供contains方法HashMap只有containsValue和containsKey方法;HashTable有contains、containsKey和containsValue三个方法,其中contains和containsValue方法功能相同。3.key和原创 2021-07-03 14:55:30 · 434 阅读 · 0 评论