
Java
文章平均质量分 54
Java
1 Byte
某互联网公司平台团队的打工人一枚
展开
-
【千万级数据导出excel】如何实现分钟级高效导出及防止OOM?
对于百万,甚至千万以上量级的数据导出,需要注意:①内存方面:通常jvm内存都是有上限的,数据量太大一次性读到堆内存容易oom②效率方面:数据量太大如果还是用单线程,往往会很慢为了解决上述问题,我们可以考虑将数据分批次读入内存,然后利用多线程实现边读边写,从而提高导出效率本次示例导出的文件是导出到具体文件夹下面,如果需要实现B端下载功能,可以试着结合一些文件压缩技术,将文件打成压缩包,实现下载功能。原创 2025-03-28 23:40:51 · 711 阅读 · 0 评论 -
Spring 6 IOC容器加载过程与核心方法refresh源码浅析
本篇只对主线核心逻辑进行梳理分析,本篇以AnnotationConfigApplicationContext容器为例进行切入分析【Spring版本为: v6.0.2】原创 2023-04-01 19:46:53 · 3247 阅读 · 4 评论 -
解决PageHelper循环依赖:com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration
PageHelper循环依赖解决com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration原创 2022-07-15 15:42:40 · 7911 阅读 · 5 评论 -
Java获取指定年份每一个周的日期范围
需求场景:简述项目相关背景:接到项目组需求,给定年份,返回对应该年份所有周的日期范围代码:思路:一步一步来,从第1周到最后1周,最后返回list,列表的大小即是该年份的总周数public class YearWeeksUtil { public static final String START_TIME = "startTime"; public static final String END_TIME = "endTime"; /** * 获取某年某周原创 2022-03-30 18:54:42 · 2770 阅读 · 0 评论 -
Java对象和Map互相转换
/** * 将对象装换为map * * @param bean * @return */ public static <T> Map<String, Object> beanToMap(T bean) { Map<String, Object> map = Maps.newHashMap(); if (bean != null) { BeanMap bean.原创 2022-01-05 19:14:33 · 1621 阅读 · 1 评论 -
ThreadLocal原理分析与使用场景
什么是ThreadLocal?ThreadLocal是线程本地存储,在每个线程中都创建了一个ThreadLocalMap对象,每个线程可以访问自己内部ThreadLocalMap对象内的value。ThreadLocal的本质就是一个内部的静态的map,key是当前线程的句柄,value是需要保持的值。由于是内部静态map,不提供遍历和查询的接口,每个线程只能获取自己线程的value。这样,就线程安全了,又提供了数据共享的能力。示例:public class ConnectionManager {原创 2021-09-27 18:08:08 · 1822 阅读 · 0 评论 -
CopyOnWriteArrayList适用场景与原理分析
CopyOnWriteArrayList 简介CopyOnWrite机制又称为写时复制:public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {}在很多应用场景中,读操作可能会远远大于写操作。由于读操作根本不会修改原有的数据,因此如果每次读取都进行加锁操作,其实是一种资源浪费。我们应该允许多个线程同时访问 List原创 2021-09-26 16:20:37 · 3305 阅读 · 0 评论 -
synchronized和Lock的区别
原始构成:synchronized是关键字属于JVM层面,monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象只有在同步块或者方法中才能调用wait/notify)lock是类,是api层面的锁使用方法:synchronized不需要手动释放锁,当synchronized代码执行完以后系统会自动让线程释放对锁的占用,ReentrantLock则需要手动释放锁,不然可能会导致死锁现象。是否可中断synchronized原创 2021-07-25 12:18:59 · 998 阅读 · 0 评论 -
Java实现简易的记事本
import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GraphicsEnvironment;import java.awt.Label;import j...原创 2018-04-05 09:17:46 · 16667 阅读 · 2 评论 -
Java接口中的成员变量被隐式声明为public static final?
一、为什么要用final?1.首先,我们应该明白一个问题。接口,实际上比抽象类更加抽象,它是最高层次的抽象。接口中的所有方法都是抽象方法,不会有任何实现方面的代码,而它的具体实现是要靠实现这个接口的具体类来具体实现的。而且,这个接口中的方法是不可更改的。同样的,接口中的变量也是不可更改的。所以,要声明为final。接口是一种协议,协议是所有实现接口的类都必须遵守的。如果变量不是final,...原创 2019-10-20 19:49:14 · 1817 阅读 · 1 评论 -
Java中常用数据类型的父类
1.1基本数据类型没有 父类。System.out.println(int.class.getSuperclass());System.out.println(double.class.getSuperclass());System.out.println(char.class.getSuperclass());System.out.println(byte.class.getSupe...原创 2019-09-21 15:47:38 · 3877 阅读 · 1 评论 -
进程和线程的主要区别(总结)
根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而转载 2020-05-23 19:15:53 · 457 阅读 · 0 评论