
Java
文章平均质量分 50
你是人间五月天
这个作者很懒,什么都没留下…
展开
-
使用easypoi 根据模板横向导出excel并合并横向单元格
三、将数据填充为map,调用导出方法。原创 2023-12-04 16:46:38 · 1776 阅读 · 0 评论 -
Springboot resource 下的excel
【代码】Springboot resource 下的excel。原创 2023-11-30 10:09:53 · 991 阅读 · 0 评论 -
SpringBoot启动流程分析
打印banner:可以resource下粘贴自定义的banner。执行refreshContext方法后才真正创建Bean。配置启动引导类(判断是否有启动主类)创建应用上下文context。获取初始化类、监听器类。判断是否是Web环境。原创 2023-03-28 14:21:46 · 119 阅读 · 0 评论 -
SpringBoot事件监听机制
2、ApplicationContextInitializer的使用要在resource文件夹下添加META-INF/spring.factories。1、ApplicationRunner和CommandLineRunner都是当项目启动后执行,使用@Component放入容器即可使用。SpringBoot 在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成一些操作。3、SpringApplicationRunListener的使用要添加构造器。原创 2023-03-28 12:09:33 · 242 阅读 · 0 评论 -
SpringBoot自动配置
(3)导入 ImportSelector 实现类 @Import(MyImportSelector.class)2.可以使用@Import注解,加载类。(2)导入配置类——@Import(UserConfig.class)@Enable* 底层依赖于@Import注解导入一些类。(1)导入Bean——@Import(User.class)获取自动配置类的路径),在配置类里面使用。获取所有需要自动装配的配置类的路径。作用就是收集需要导入的配置类。,获取注入类的方法是。原创 2023-03-27 20:23:26 · 627 阅读 · 0 评论 -
Dubbo 特性介绍
使用timeout属性配置超时时间,默认值1000,单位毫秒,建议配置在服务提供者,因为只有服务提供者确切的知执行要花多长时间。如果消费者之前访问过相关服务,会将地址缓存在本地,不会再经过注册中心,因此可以访问。dubbo中使用version属性来设置和调用同一个接口的不同版本。通过retries属性来设置重试次数。注册中心挂了,服务是否还能正常访问?原创 2023-03-14 15:46:30 · 241 阅读 · 0 评论 -
java基本数据类型取值范围
java基本数据类型取值范围原创 2023-03-06 14:13:24 · 4983 阅读 · 0 评论 -
Servlet中八个监听器介绍
java Servlet中八个监听器介绍原创 2023-03-06 12:38:59 · 1250 阅读 · 0 评论 -
Web常见返回状态码
Web常见返回状态码原创 2023-02-27 14:49:06 · 358 阅读 · 0 评论 -
java servlet详解
java servlet详解原创 2023-02-23 16:34:43 · 635 阅读 · 0 评论 -
Java 自定义注解详解
Java 自定义注解详解原创 2023-02-15 15:28:23 · 922 阅读 · 0 评论 -
Java枚举类详解
5、枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。7、枚举类也可以有抽象方法,但是枚举项必须重写该方法。3、每一个枚举项其实就是该枚举的一个对象。4、枚举也是一个类,也可以去定义成员变量。比较两个枚举项,返回的是索引值的差值。获取指定枚举类中的指定名称的枚举值。6、枚举类可以有构造器,但必须是。返回枚举项在枚举类中的索引值。枚举项的用法比较特殊:枚举。原创 2023-02-15 11:47:24 · 553 阅读 · 0 评论 -
Java反射相关知识
Java反射知识总结原创 2023-02-06 21:02:17 · 527 阅读 · 1 评论 -
java类加载过程
如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。Systemclassloader:系统类加载器,负责加载用户类路径上所指定的类库,父加载器为Platform。总共分为5步:加载、验证、准备、解析、初始化。5、初始化某个类的子类。原创 2022-11-28 21:23:27 · 559 阅读 · 0 评论 -
TCP三次握手和四次挥手
三次握手四次挥手。原创 2022-11-23 16:43:48 · 159 阅读 · 0 评论 -
UDP三种通讯方式
UDP三种通讯方式原创 2022-11-23 15:49:58 · 2127 阅读 · 0 评论 -
java 多线程死锁
多线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。什么情况下会产生死锁?原创 2022-08-29 16:01:58 · 138 阅读 · 0 评论 -
Java IO流详解
Java IO流详解原创 2022-08-18 16:28:14 · 353 阅读 · 0 评论 -
java 集合stream流 详解
Stream distinct() 返回由该流的去重(根据Object.equals(Object) )之后的不同元素组成的流。static Stream concat(Stream a, Stream b) 合并a和b两个流为一个流。使用默认方法stream()生成流, default Stream stream()中间操作的意思是,执行完此方法之后,Stream流依然可以继续执行其他操作。对数据使用Stream流的方式操作完毕后,可以把流中的数据收集到集合中。...原创 2022-08-10 17:57:45 · 2884 阅读 · 0 评论 -
Java HashSet详解
Java HashSet详解原创 2022-07-29 17:47:28 · 908 阅读 · 0 评论 -
Java TreeSet详解
Java TreeSet详解原创 2022-07-26 17:48:47 · 2257 阅读 · 0 评论 -
java 泛型详解
java 泛型详解原创 2022-07-25 17:47:30 · 171 阅读 · 0 评论 -
java高并发限流解决方案
高并发限流解决方案限流算法(令牌桶、漏桶、计数器)、应用层解决限流(Nginx)限流算法常见的限流算法有:令牌桶、漏桶。计数器也可以进行粗暴限流实现。计数器它是限流算法中最简单最容易的一种算法,比如我们要求某一个接口,1分钟内的请求不能超过10次,我们可以在开始时设置一个计数器,每次请求,该计数器+1;如果该计数器的值大于10并且与第一次请求的时间间隔在1分钟内,那么说明请求过多,如果该请求与第一次请求的时间间隔大于1分钟,并且该计数器的值还在限流范围内,那么重置该计数器滑...原创 2021-10-21 21:42:38 · 1065 阅读 · 0 评论 -
手写简易版springboot
1、引入maven依赖<dependencies> <!--Java语言操作tomcat --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>8.5.16</version> </depen原创 2021-10-21 11:37:30 · 349 阅读 · 0 评论 -
Springboot整合jta+atomikos解决单jvm多数据源事务问题
1、依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jta-atomikos</artifactId></dependency>2、配置@Configuration// basePackages 最好分开配置 如果放在同一个文件夹可能会报错@MapperScan(basePac原创 2021-10-20 14:56:41 · 280 阅读 · 0 评论 -
基于JDK1.7版本实现HashMap
1、创建Map接口/** * 纯手写Map集合<br> */public interface ExtMap<K, V> { // 向集合中插入数据 public V put(K k, V v); // 根据k 从Map集合中查询元素 public V get(K k); // 获取集合元素个数 public int size(); interface Entry<K, V> { K getKey(); V getValue();原创 2021-10-19 16:39:38 · 196 阅读 · 0 评论 -
手写LinkedList实现
/** * 纯手写 LinkeList<br> * @param <E> */public class LinkeList<E> { // 第一个元素 private Node first; // 最后一个元素 private Node last; // 实际存放在长度 private int size; class Node { // 上一个节点 Node prev; // 节点内容 Object object; // 下.原创 2021-10-18 17:35:23 · 154 阅读 · 0 评论 -
手写ArrayList实现
1、自定List接口/** * 自定List接口<br> * @param <E> */public interface ExtList<E> { public void add(E object); public void add(int index, E object); public Object remove(int index); public boolean remove(E object); public int getSiz原创 2021-10-18 12:22:56 · 158 阅读 · 0 评论 -
手写简易版mybatis
1、JDBCUtilspublic final class JDBCUtils { private static String connect; private static String driverClassName; private static String URL; private static String username; private static String password; private static boolean autoCommit; /** 声明原创 2021-10-16 21:33:14 · 161 阅读 · 0 评论 -
手写简易版数据库连接池
1、配置信息public class DbBean { /* 链接属性 */ private String driverName = "com.mysql.jdbc.Driver"; private String url = "jdbc:mysql://localhost:3306/test"; private String userName = "root"; private String password = "root"; private String poolName =原创 2021-10-16 17:01:26 · 202 阅读 · 0 评论 -
手写@RequestMapping和@Controller注解
/** * 1.自定义DispatcherServlet<br> * 2.servlet init()方法初始化###只会执行一次<br> * 2.1获取当前包下所有的类<br> * 2.2初始化当前包下所有的类,使用Java反射机制初始化对象存放在SpringMVC容器中key(beanId)-value( 当前实例对象) <br> * 2.3初始化HandlerMapping方法,将url和方法对应上 <br>.原创 2021-10-15 11:01:41 · 150 阅读 · 0 评论 -
手写Spring IOC XML版本注入bean
public class ClassPathXmlApplicationContext { // xml路径地址 private String xmlPath; public ClassPathXmlApplicationContext(String xmlPath) { this.xmlPath = xmlPath; } public Object getBean(String beanId) throws Exception { // 1. 读取配置文件 List<El.原创 2021-10-14 15:22:59 · 125 阅读 · 0 评论 -
Spring事务传播行为
Spring中事务的定义:Propagation(key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。)有以下选项可供使用:PROPAGATION_REQUIRED—如果当前有事务,就用当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。//如果外层方法没有事务,就会以非事务进行执行。PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务原创 2021-10-13 20:15:02 · 80 阅读 · 0 评论 -
Spring事务详解
事务基本特性原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是50..原创 2021-10-13 17:42:47 · 1048 阅读 · 0 评论 -
Spring AOP编程
什么是AOP编程AOP: Aspect Oriented Programming 面向切面编程。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。关注点:重复代码就叫做关注点;切面:关注点形成的类,就叫切面(类)!面向切面编程,就是指 对很多功能都有的重复的代码抽取,再在运行的时候网业务方法上动态植入“切面类代码”。切入点:执行目标对象方法,动态植入切面代码。可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指原创 2021-10-09 21:21:15 · 104 阅读 · 0 评论 -
Java字节码技术
字节码技术应用场景AOP技术、Lombok插件、动态修改class文件等常见的字节码操作类库BCELByte Code Engineering Library(BCEL),它可以让您深入jvm汇编语言进行类库操作的细节。BCEL与javassist有不同的处理字节码方法,BCEL在实际的jvm指令层次上进行操作(BCEL拥有丰富的jvm指令集支持) 而javassist所强调的是源代码级别的工作。ASM是一个轻量级Java字节码操作框架,直接涉及到JVM底层的操作和指令高性能,高原创 2021-09-29 15:43:31 · 297 阅读 · 0 评论 -
Java垃圾收集器
串行与并行收集器串行回收: JDK1.5前的默认算法 缺点是只有一个线程,执行垃圾回收时程序停止的时间比较长并行回收: 多个线程执行垃圾回收适合于吞吐量的系统,回收时系统会停止运行serial收集器一个单线程的收集器,在进行垃圾收集时候,必须暂停其他所有的工作线程直到它收集结束。特点:CPU利用率最高,停顿时间即用户等待时间比较长。新生代使用复制算法、老年代使用标记-压缩;垃圾收集的过程中会Stop The World(服务暂停)适用场景:小型应用通过JVM参数-XX:+Us原创 2021-09-27 15:51:17 · 90 阅读 · 0 评论 -
JVM参数配置
常见参数配置-XX:+PrintGC 每次触发GC的时候打印相关日志-XX:+UseSerialGC 串行回收-XX:+PrintGCDetails 更详细的GC日志-Xms 堆初始值-Xmx 堆最大可用值-Xmn 新生代堆最大可用值-XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例.-XX:NewRatio 配置新生...原创 2021-09-27 15:24:58 · 101 阅读 · 0 评论 -
java垃圾回收机制算法
什么是垃圾回收机制不定时去堆内存中清理不可达对象。不可达的对象并不会马上就会直接回收, 垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,唯一能做的就是通过调用System.gc 方法来"建议"执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的。public class Test { public static void main(String[] args) { Test test = new Test(); test = null; System.gc();原创 2021-09-24 22:16:26 · 96 阅读 · 0 评论 -
java内存结构
方法区和堆为线程共享区,虚拟机栈、本地方法栈及程序计数器为线程独占区。堆(Heap)为线程共享区,堆内存用于存放由new创建的对象和数组。堆也是Java垃圾回收的主要区域(重点对象),因此也称作“GC堆”(Garbage Collected Heap)。如果堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。方法区(Method Area)又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class信息、static变量、常量...原创 2021-09-24 11:15:45 · 90 阅读 · 0 评论