
Java
文章平均质量分 67
Ahuuua
这个作者很懒,什么都没留下…
展开
-
IDEA Maven下载依赖时报错: ERROR - #org.jetbrains.idea.maven - Cannot reconnect.
IDEA Maven下载依赖时报错: ERROR - #org.jetbrains.idea.maven - Cannot reconnect. Caused by: java.rmi.RemoteException: Cannot start maven service; nested exception is: java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:原创 2022-09-29 17:25:30 · 3770 阅读 · 0 评论 -
Java如何判断对象已死亡?
Java如何判断对象已死亡? GC Roots对象有哪些?原创 2022-05-12 15:33:07 · 486 阅读 · 0 评论 -
面试官:介绍下Spring MVC
1、介绍下SpringMVCSpringMVC是一种基于MVC设计模式的Web框架。SpringMVC通过注解,让简单的Java类成为处理请求的控制器,而无需实现任何接口。同时它还支持RESTful编程风格请求。在B/S架构中系统的标准三层架构为表现层、业务层、持久层。表现层就是常说的Web层,负责接收客户端请求,向客户端相应结果,表现层设计一般都使用MVC模型。MVC指模型、视图、控制器。模型,指数据模型,用于封装数据;视图,用于展示数据,通常是依据模型数据创建的;原创 2022-05-09 16:05:24 · 577 阅读 · 0 评论 -
Java面试 讲讲extends和super关键字
讲讲extends和super关键字这个涉及到泛型的三个特性,不变性、协变性、逆变性。比如有类Long和类Number,类Long继承于类Number。Long是可以赋值给Number的,但若加一个函数ArrayList后,对于Long的ArrayList就不能赋值给Number的ArrayList了,这个就是泛型的不变性。若想让Long的ArrayList就赋值给Number的ArrayList就需要利用泛型的协变性,加上函数ArrayList后依然保持继承关系,即ArrayList<L原创 2022-05-08 17:41:09 · 562 阅读 · 0 评论 -
Java 泛型中 <? extends T> 与 <? super T> 的区别
逆变与协变用来描述类型转换(type transformation)后的继承关系,其定义:如果A、B表示类型,f(⋅)表示类型转换,≤表示继承关系(比如,A≤B表示A是由B派生出来的子类)f(⋅)是不变(invariant)的,当A≤B时上述两个式子均不成立,即f(A)与f(B)相互之间没有继承关系。f(⋅)是协变(covariant)的,当A≤B时有f(A)≤f(B)成立;f(⋅)是逆变(contravariant)的,当A≤B时有f(B)≤f(A)成立;1.泛型的不变性下面看个例子:原创 2022-05-08 16:36:22 · 642 阅读 · 0 评论 -
Java泛型 <T> T 的作用
<T> T 表示返回值和传入参数的泛型型一致,代码示例:package GenericStudy;import java.util.ArrayList;import java.util.List;/** * @description: java泛型返回值 <T>T 的作用 **/public class Demo2 { public static void main(String[] args) { Demo2 d1 = new Demo2(...原创 2022-05-06 22:52:26 · 1292 阅读 · 0 评论 -
@JsonInclude(value=JsonInclude.Include.NON_NULL)含义
在实体类上面加@JsonInclude(value=JsonInclude.Include.NON_NULL)注解,可以使当前实体类在返回前端的时候忽略字段属性为null的字段,使其为null字段不显示。加注解前和加注解后效果:转载 2022-05-05 16:12:09 · 1251 阅读 · 0 评论 -
HashMap为什么会发生死循环
HashMap死循环只会在JDK1.7中出现,出现的原因主要是因为其自身扩容机制加上并发操作。JDK1.8中已彻底解决该问题。JDK1.7中HashMap以数组加链表的方式存储,在插入数据是采用的是头插法,新插入的数据会从链表的头结点进行插入。因此在HashMap扩容时会存在如下现象:...原创 2022-04-27 22:53:13 · 2330 阅读 · 0 评论 -
Spring Bean生命周期中各阶段的作用及实例演示说明
本文分两个部分第一部分 解释SpringBean生命周期中各接口作用第二部分 对SpringBean生命周期中各接口的执行顺序以Demo形式进行说明转载 2022-04-16 15:37:28 · 968 阅读 · 0 评论 -
Spring Bean的五个作用域
Spring支持五个作用域:singleton、prototype、request、session、global session转载 2022-04-15 11:19:22 · 13062 阅读 · 0 评论 -
JDK9 String优化
JDK9 对String优化,将char数组改为byte数组并增加了coder属性原创 2022-04-14 23:48:55 · 818 阅读 · 0 评论 -
多线程-三种方法判断线程池中任务有没全部执行完
多线程-三种方法判断线程池中任务有没全部执行完原创 2022-04-14 16:29:54 · 6952 阅读 · 0 评论 -
面试官:说一下Java类的加载过程
类的加载分为三个部分:加载、连接、初始化1.加载1)类的加载通过类的全限定名将.class文件的二进制字节流读入内存(JDK1.7之前为JVM内存,JDK1.8后为本地内存)2)在堆中为之创建Class对象。在这个阶段读入二进制字节流,会在后续验证阶段验证.class文件,验证通过后会将二进制字节流转化为运行时数据结构存入方法区拓展:在JDK1.7之前,Hot Spot JVM 存在一块叫方法区的内存,也称之为永久代,这块区域用于存放类的元数据信息,包括类的字段、版本、方法等。JDK1原创 2022-04-13 15:33:55 · 1231 阅读 · 0 评论 -
为什么不允许使用Executors创建线程池
线程池-为什么不允许使用Executors创建线程池其替代方法是什么?原创 2022-04-05 11:29:59 · 2847 阅读 · 0 评论 -
线程池-exectue与submit的区别是什么?
线程池-exectue与submit的区别是什么?原创 2022-04-04 22:59:23 · 2212 阅读 · 0 评论 -
线程池-Executors的newSingleThreadExecutor和newFixedThreadPool(1)区别
与其他等效的newFixedThreadPool(1)不同,newSingleThreadExecutor返回的执行器保证不可重新配置。与其他等效的newScheduledThreadPool(1)不同,newSingleThreadScheduledExecutor返回的执行器保证不可重新配置以使用其他线程。newFixedThreadPool(1)的返回结果我们可以通过强转变成ThreadPoolExecutor,但是这个类是可以自行指定线程数的。我们可以通过setCorePoolSize.原创 2022-04-04 22:02:44 · 1454 阅读 · 0 评论 -
线程池-jdk1.8 Executors创建线程池的几种方法
线程池-java线程池有几种?原创 2022-04-04 21:17:55 · 1117 阅读 · 0 评论 -
举例说明为什么要重写hashCode()和equals()方法
1.未重写hashCode()和equals()方法import java.util.HashMap;import java.util.Map;public class User { private String userName; public User(String userName) { this.userName=userName; } public static void main(String[] args) {原创 2022-04-04 19:49:20 · 295 阅读 · 0 评论 -
String +的实现原理 及与StringBuilder的区别
在Java中String的操作很多时候都与连接符"+"有关,比如我们可以用String = int + "" 将一个int整数或是其他基本类型转为String类型,也可以用String = String + String 连接两个字符串。那么这些连接符具体是如何实现的呢?他们的效率又如何呢?首先我们可以在API文档上查阅到:Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append转载 2022-03-31 22:19:37 · 459 阅读 · 0 评论 -
@Transactional类内部访问失效原因详解
Spring之所以可以对开启@Transactional的方法进行事务管理,是因为Spring为当前类生成了一个代理类,然后在执行相关方法时,会判断这个方法有没有@Transactional注解,如果有的话,则会开启一个事务。也就是说我们首先调用的是AOP代理对象而不是目标对象,首先执行事务切面,事务切面内部通过TransactionInterceptor环绕增强进行事务的增强,即进入目标方法之前开启事务,退出目标方法时提交/回滚事务。Spring在扫描bean的时候,如果扫描到方法上有这些注解原创 2022-03-31 17:09:33 · 6194 阅读 · 4 评论 -
@Transactional 失效的几种情况
一、非public修饰的方法@Transactional注解只能在在public修饰的方法下使用。/** * 私有方法上的注解,不生效 */@Transactionalprivate boolean test() { //test code}二、类内部访问类内部非直接访问带注解标记的方法 B,而是通过类普通方法 A,然后由 A 调用 B。@Servicepublic class Demo { public void A() { ...... .原创 2022-03-31 16:55:29 · 7942 阅读 · 0 评论 -
SpringMVC 组件类及处理过程
1、SpringMVC 组件类有哪些?在了解SpringMVC各组件之前,我们先来看一下Spring MVC框架结构:从上图我们可以看到, Spring MVC主要包括:1. 前端控制器组件(DispatcherServlet)2. 处理器组件(Controller)3. 处理器映射器组件(HandlerMapping)4. 处理器适配器组件(HandlerAdapter)5. 拦截器组件(Handler...转载 2022-03-27 22:03:50 · 205 阅读 · 0 评论 -
拦截机制中Aspect、ControllerAdvice、Interceptor、Fliter之间的区别详解
在项目的开发中,在某些情况下,我们需要对客户端发出的请求进行拦截,常用的API拦截方式有Fliter,Interceptor,ControllerAdvice以及Aspect。Spring中的拦截机制,如果出现异常的话,异常的顺序是从里面到外面一步一步的进行处理,如果到了最外层都没有进行处理的话,就会由tomcat容器抛出异常.1.过滤器:Filter :可以获得Http原始的请求和响应信息,但是拿不到相应方法的信息2.拦截器:Interceptor:可以获得Http原始的请求和响应信息,转载 2022-03-27 15:57:30 · 2675 阅读 · 0 评论 -
spring boot 自动配置
我们知道,spring boot自动配置功能可以根据不同情况来决定spring配置应该用哪个,不应该用哪个,举个例子:Spring的JdbcTemplate是不是在Classpath里面?如果是,并且DataSource也存在,就自动配置一个JdbcTemplate的Bean Thymeleaf是不是在Classpath里面?如果是,则自动配置Thymeleaf的模板解析器、视图解析器、模板引擎那个这个是怎么实现的呢?原因就在于它利用了Spring的条件化配置,条件化配置允许配置存在于应用中,但是在转载 2022-03-27 15:36:27 · 213 阅读 · 0 评论 -
Springboot 配置文件加载优先级
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件–file:./config/–file:./–classpath:/config/–classpath:/优先级由高到底,高优先级的配置会覆盖低优先级的配置。我们还可以通过spring.config.location来改变默认的配置文件位置项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位.原创 2022-03-24 21:18:42 · 754 阅读 · 0 评论 -
如何在Spring Boot启动的时候运行一些特定的代码?
如果你想在Spring Boot启动的时候运行一些特定的代码,你可以实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个run方法。ApplicationRunner:启动获取应用启动的时候参数CommandLineRunner:启动获取命令行参数目录Spring Boot Runner启动器:ApplicationRunnerCommandLineRunner使用方式启动顺序Spring转载 2022-03-20 10:57:26 · 2028 阅读 · 0 评论 -
实现反射的3+1种方式
1、Class.forName(“类的路径”);2、类名.class3、对象名.getClass()+1、基本类型的包装类,可以调用包装类的Type属性来获得该包装类的Class对象那么Integer.class和Integer.TYPE的区别是什么呢?int.class返回Integer的对象Integer.type返回int对象public static void main(String[] args) {System.out.println(Integer.TYPE原创 2022-03-10 21:13:08 · 257 阅读 · 0 评论 -
@PostConstruct
简介:Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。@PostConstruc使用说明:PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法必须在将类放入服务之前调用。支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。只有一个转载 2022-02-22 11:23:14 · 393 阅读 · 0 评论 -
Lombok - 使用时@Builder为什么不让new?如果想用new怎么办
对象上加上 @Builder,会默认为类加上全参构造函数,且提供以建造器模式构造对象的方法。但此时因为显示声明了构造器,默认的无参构造器就失效了,就不能通过 new Obj() 的方式创建对象。于是乎就会想到加 @NoArgsConstructor 注解生成无参构造函数以便使用 new Obj() 方式创建对象,很多框架中都需要反射调用无参构造函数。但是如果显式声明了 @NoArgsConstructor,lombok 就不会生成全参构造函数,而 @Builder 中会用到全参构造函数,所以冲突。此转载 2022-02-22 10:50:28 · 3562 阅读 · 0 评论 -
log要用占位符而不是用字符串拼接原因解析
1.占位符是怎么用字符串替换的呢?使用占位符的本质也是获取每个参数,找到位置通过StringBuilder拼接。所以不能说字符串拼接的方式使用了StringBuilder的append()有一定的性能损耗。使用占位符仅是替换动作,效率更高。可以参考这篇文章的源码截图(关于Slf4j中占位符{}_Firm陈的博客-优快云博客)2.那为什么还要使用占位符呢?参考这篇文章(日志使用占位符还是直接拼接 - 简书)占位符和直接拼接的性能比较通过main方法for循环测试原创 2022-01-19 20:04:42 · 6355 阅读 · 0 评论 -
SpringBoot2.0 入门案例初始工程
一、工程创建流程1.创建maven工程2.引入依赖pom.xml如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache原创 2022-01-11 13:02:44 · 430 阅读 · 0 评论 -
javaweb request请求
request报文结构1.请求行请求方法 请求url 请求协议/版本2.请求头请求头名称:请求头值 1)user-agnet:浏览器通知服务器,客户端使用的浏览器版本信息 2)Referer:说明请求从哪里来。作用:防盗链、统计3.请求空行4.请求体GET /Protocols/rfc2616/rfc2616-sec5.html HTTP/1.1Host: www.w3.orgConnection: ...原创 2021-12-15 12:55:59 · 1415 阅读 · 0 评论 -
HSSF、XSSF和SXSSF区别
POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。他们的区别如下:HSSF:是操作Excel97-2003版本,扩展名为.xls。XSSF:是操作Excel2007版本开始,扩展名为.xlsx。SXSSF:是在XSSF基础上,POI3.8版本开始提供的一种支持低内存占用的操作方式,扩展名为.xlsx。Excel不同版本的一些区别如下,这些限制其实间接的局限了POI提供的API功能。1、支持的行数、列数...转载 2021-11-10 12:45:21 · 13608 阅读 · 0 评论 -
java String转Bigdecimal时有逗号‘,’千位符
问题描述对接项目中,遇到对面返回金额栏位超过了千位,自带“,”-千位符的情况,原设计中未考虑此情况,直接使用new BigDecimal(str);的方式处理,会报错,如下:解决办法1.很简单,而又不高大上的处理方式:将字符",“转换成”" try { String replaced = str.replace(",", ""); BigDecimal result = new BigDecimal(replaced);转载 2021-02-23 15:10:19 · 3228 阅读 · 0 评论 -
使用mybatis报错UnsupportedOperationException
使用mybatis报错UnsupportedOperationException1.Mapper.java类如下:List<String> getMatchAddress(String com);2.Mapper.xml如下:<select id="getMatchAddress" parameterType="java.util.String" resultType="java.util.List">select t.address from tablenam原创 2021-01-27 16:53:13 · 1480 阅读 · 2 评论 -
例子说明 Java中public、protected、default、private的访问权限作用域
如果在修饰的元素上面没有写任何访问修饰符,用default表示 作用域 当前类 同一包(package) 同一包下子类 不同包下子类 其它包 public √ √ √ √...原创 2020-05-07 20:20:34 · 1072 阅读 · 0 评论 -
Java 按日期切分文件(按月),每月数据放入各自txt中
按月切分文件要切分的文件是这样的: 1)一个800M的txt 2)每行以日期开头,后面跟着一堆数据,就像这样:"2014-01-01 00:00:00";111;222;333;55;5;4;6;41321;1;3;0;0;555.................................. 3)想把每个月的数据放入一个txt中 public s...原创 2019-11-07 20:40:33 · 1084 阅读 · 0 评论