- 博客(17)
- 收藏
- 关注
原创 Excel加水印
这个工具类实现了给Excel添加水印的功能。具体的操作是将给定的水印文字转化为图片,然后将图片添加到Excel的指定位置,从而实现了给Excel的每个Sheet都添加了水印的功能。方法,传入要添加水印的SXSSFWorkbook以及水印文字。这个方法会遍历Excel的每个Sheet,并为每个Sheet添加水印。添加水印的位置和样式可以在方法内部进行设置。这是一个Excel加水印的工具类。注意,在使用过程中需要保证POI库的正确引入。
2023-11-08 17:31:11
614
3
原创 SFTP文件上传、下载
SFTP文件上传、下载public class SftpUtil { private String downFilePath = ""; // FTP文件下载路径 private String fileEncodein = ""; //文件流格式 private String ftpUrl = ""; private String ftpUserName = ""; private String ftpPassword = ""; private St
2021-10-29 16:48:53
447
原创 SqlServer主键自增及插入操作问题
定义主键自增更改标识规范改为是,就完成了主键自增的设置插入操作对于此表insert into Person(id,tname,age) values (#{id},#{tname},#{age})//报错org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 当 IDENT
2020-11-07 23:56:03
4834
2
原创 分代回收机制及垃圾回收算法
GC 分类新生代回收(Minor GC/Young GC):指只是进行新生代的回收。老年代回收(Major GC/OldGC):指只是进行老年代的回收。目前只有 CMS 垃圾回收器会有这个单独的回收老年代的行为。 (Major GC定义是比较混乱,有说指是老年代,有的说是做整个堆的收集,这个需要你根据别人的场景来定,没有固定的说法)整堆回收(FullGC):收集整个 Java 堆和方法区(注意包含方法区)垃圾回收算法复制算法将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当
2020-07-30 22:09:03
526
原创 JAVA对象的创建及内存分配详解
对象的创建几乎所以对象都在JVM的堆中创建,通过类加载器加载进内存,并检查,然后分配内存,开始类的属性初始化赋值,设置对象头信息,通过构造方法创建对象分配内存主要通过指针碰撞和空闲列表方式,使用场景在于内存空间的规整程度,对于有标记整理的垃圾回收器(GC),一般用指针碰撞;没有则用空闲列表为保证并发的安全性,就会有CAS机制和分配缓冲(TLAB),把内存分配的动作按照线程划分在不同的空间之中进行内存空间初始化保证了对象 的实例字段在 Java 代码中可以不赋初始值就直接使用,程序能访问
2020-07-29 22:36:36
1335
原创 ArraysLIst的动态扩容源码详解
对于ArraysList的添加,首先会对当前容量进行判断 //添加操作 public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; //添加元素并把数组长度+1 return true; } //确保内部容量,容量不足就执行扩容操作 private void ensureCa
2020-07-23 10:03:11
179
原创 Exchange的介绍及使用
作用用于 两个线程间的数据交换案例public class UseExchange { private static final Exchanger<Set<String>> exchange = new Exchanger<Set<String>>(); public static void main(String[] args) { //第一个线程 new Thread(new Runnabl
2020-07-13 18:31:19
2248
原创 Semaphore的介绍及使用
作用主要运用共享锁机制;控制同时访问某个特定资源的线程数量,用在流量控制,通过state值判断,如果state>0,允许新的线程执行;如果state=0,不允许新的线程执行,循环执行是考虑多线程环境下条件不满足时重新获取1)获取锁根据acquire()中 int remaining = available(当前state) - acquires(方法sync.acquireSharedInterruptibly(1)里的参数值1) final int nonfairTryAcqu
2020-07-13 18:27:29
409
原创 CyclicBarrier的介绍及使用
作用让一组线程达到某个屏障,被阻塞,一直到组内最后一个线程达到屏障时,屏障开放,所有被阻塞的线程会继续运行CyclicBarrier(int parties)构造方法CyclicBarrier( int parties ),默认屏障开放时所有线程同时执行;CyclicBarrier( int parties, Runnable barrierAction ),屏障开放,barrierAction定义的任务会执行,执行完成后之前的线程就会接着执行CountDownLatch和CyclicBarrie
2020-07-13 18:20:19
159
原创 CountDownLatch的介绍及使用
作用是一组线程等待其他的线程完成工作以后在执行,加强版join;await()用来等待,countDown()负责计数器的减一;一个线程需要等待其余线程扣减完一定的数目在执行,就需要在这个线程中执行CountDownLatch对象的await()方法,进入等待队列案例public class UseCountDownLatch { //创建CountDownLatch对象,并表示需要扣减6次 static CountDownLatch latch = new CountDownLatch(
2020-07-13 18:06:03
161
原创 Fork-Join的介绍及使用
原理分而治之:规模为N的问题,N<阈值,直接解决,N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到原问题的解工作密取每个小规模里面的问题解决完之后,会从别的地方后面拿取处理完成并归还返回值、同步/异步处理ForkJoinTask实现FutureRecursiveTask(有返回值)、RecursiveAction(无返回值)继承ForkJoinTask同步(invoke)异步(execute)案例同步有返回值public cla
2020-07-04 17:10:16
1619
原创 反射原理的介绍
反射就是将类的各个组成部分封装成其他对象反射的好处可以在程序运行过程中,操作这些对象;可以解耦,提高程序的可扩展性获取Class对象的方式Class.forName(“全类名”):(源代码阶段)将字节码文件加载进内存,返回Class对象;多用于配置文件,将类名定义在配置文件中,加载类对象.getClass():(运行时阶段)getClass()方法在Object类中定义;多用于对象获取字节码的方式类名.class:(class类对象阶段)通过类名的属性class获取;多用于参数的传递
2020-06-24 22:04:10
152
原创 Security安全登录
Security配置类使用SpringBoot整合Security安全登录配置依赖 <!-- spring security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-start...
2020-04-30 18:55:22
896
原创 对于自加或自减在条件语句中区别
条件中的++/--++/--在输出语句中在if语句中思考++/–在输出语句中我们都知道,在输出语句中,++/–在前,自加或自减功能在当前就生效执行:当 ++/–在后时,自加或自减只在下一行才生效:可以看到++在后再次输出时变成6,第二行才生效;在if语句中++在前,此时num自加值为6,可以看到都是在当前语句生效;++在后,此时num自加输出5,说明++在if语句中都未生效;...
2019-08-27 17:28:15
1259
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人