
Java
文章平均质量分 54
java
张俊杰zjj
一个大龄的码农.目前是Java+Python开发,业余时间研究减肥健身养生,后期可能会去做减肥健身博主.
展开
-
java如何判断object是基本数据类型还是引用数据类型
直接用apache commons下的工具类isPrimitiveOrWrapper即可,没必要造轮子。原创 2024-12-06 16:23:26 · 218 阅读 · 0 评论 -
java 根据对象的boolean字段对集合进行排序
需求大概如下: 把boolean为true的排序到前面,false排序到后面。排序后, boolean为true的会在前面, 为false的会在后面 ,isHasMaterial 为boolean类型。原创 2024-04-24 16:43:20 · 875 阅读 · 0 评论 -
EasyExcel汇总收集
EasyExcel常用API与注解原创 2023-06-29 15:37:12 · 191 阅读 · 0 评论 -
Java的List toString问题
源码: java.util.AbstractCollection#toString 方法。打印的不是地址池,可以放心使用。原创 2023-06-19 12:53:04 · 272 阅读 · 0 评论 -
Easyexcel 将指定单元格的文字设置成指定的颜色
需求,将1~12月的列的数据小于0的数设置为红色字体。原创 2023-05-30 15:30:37 · 5961 阅读 · 1 评论 -
EasyExcel手动设置列宽3.x.x版本
EasyExcel是3.x.x 版本的参数1就是Excel列的索引,从0开始setColumnWidth(i,j)函数中,i是列的下标,从0开始,j是列的宽度,单位是1/256个字符宽度,所以代码中要乘以256,两个参数都必须是整数。原创 2023-04-27 15:30:36 · 2416 阅读 · 0 评论 -
EasyExcel设置Excel导出自动列宽
使用注册策略: .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) 即可。该案例出自EasyExcel的官方示例 ,我用了一下,好使。原创 2023-04-27 14:19:18 · 3100 阅读 · 0 评论 -
java静态方法用泛型
静态方法是类级别的,在类没被实例化的时候就可以使用了,所以静态方法不能直接使用类上定义的方法。原创 2023-04-16 18:31:01 · 953 阅读 · 0 评论 -
Java多线程异步调用性能调优
出自:腾讯课堂 700多分钟干货实战Java多线程高并发高性能实战全集 , 我学习完了之后, 我给 老师在课上说的话做了个笔记,以及视频的内容,还有代码敲了一遍,然后添加了一些注释,把执行结果也整理了一下, 做了个笔记概述大型电商公司的支付聚合服务都有这类的场景:调用校验服务校验待生成的订单是否合法订单服务生成订单(校验服务和订单服务没有依赖关系)调用1和2,支付服务实现支付核心的功能结合步骤1至3完成支付服务的聚合调用假如步骤1的耗时5秒,步骤2的耗时3秒,步骤3的耗时2秒原创 2022-03-06 19:14:32 · 559 阅读 · 0 评论 -
Java并行调用性能优化
出自:腾讯课堂 700多分钟干货实战Java多线程高并发高性能实战全集 , 我学习完了之后, 我给 老师在课上说的话做了个笔记,以及视频的内容,还有代码敲了一遍,然后添加了一些注释,把执行结果也整理了一下, 做了个笔记概述在微服务的实际开发过程中,经常会出现聚合服务调用多个原子服务的情形,核心中台等团队经常会出现这种技术场景.先调用原子服务CheckService1 \CheckService2\CheckService3 ,这三个服务没有什么依赖关系的,也就是说可以并行的调用,三个服务都原创 2022-03-06 18:53:11 · 738 阅读 · 0 评论 -
Java多线程并发编程实战之高并发数据一致性实战
出自:腾讯课堂 700多分钟干货实战Java多线程高并发高性能实战全集 , 我学习完了之后, 我给 老师在课上说的话做了个笔记,以及视频的内容,还有代码敲了一遍,然后添加了一些注释,把执行结果也整理了一下, 做了个笔记案例背景在实际研发场景中,经常会出现并发数据一致性的问题,如果解决不好,会导致数据逻辑发生错误.假设有这种并发场景:A用户开了一个银行账户,账户初始金额为10000元,另外会计张三每隔一段时间向该账户转账100元,账户余额上限是20000元.另外用两个用户李四和王五每隔一段时间原创 2022-02-04 15:52:17 · 1280 阅读 · 0 评论 -
Java多人抽奖案例
出自腾讯课堂 700多分钟干货实战Java多线程高并发高性能实战全集 , 我学习完了之后, 我给 老师在课上说的话做了个笔记,以及视频的内容,还有代码敲了一遍,然后添加了一些注释,把执行结果也整理了一下, 做了个笔记实战背景在企业年会或者商场举办的商业活动等场景中,经常会出现多人多轮次抽奖的场景,假设你是架构师,请运用多线程相关的知识开发多人多轮次抽奖的功能,每个轮次抽奖人数是6人,每次只有1人中奖,总共有20个场次抽奖,每个场次间隔时间是0.5秒,每次用户领奖时间是1秒.思路1.分析多人原创 2022-02-04 15:44:41 · 1391 阅读 · 0 评论 -
java8 list 转成 map
代码://通过 货品id集合批量查询List scItemSDOS = getScItemSDOSByScItemIdList(scItemIdList);Map<String, ScItemSDO> scItemIdKeyScItemSDOValueMap = scItemSDOS.stream().collect(Collectors.toMap(ScItemSDO::getScItemId, scItemTemp -> scItemTemp));...原创 2021-12-01 19:50:24 · 481 阅读 · 0 评论 -
LocalDateTime 获取当前的系统时间,可以格式转换
@Test public void c_获取当前的系统时间() { //获取当前的系统时间 LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt); //2020-01-16T23:13:42.666 LocalDateTime now = LocalDateTime.now(); System.out.println(now.getYear() + "年" + now...原创 2021-10-24 19:03:55 · 1298 阅读 · 0 评论 -
Java String进行hashCode的时候可能会出现负数
原文: https://www.cnblogs.com/qixing/p/12354378.html在进行数据交换时,如果主键不是整型,需要对字符串,或联合主键拼接为字符串,进行hash,再进行取模分片,使用的是String自带的hashCode()方法,本来是件很方便的事,但是有些字符串取hashCode竟然是负数,使得分片为负数,找不到对应的分片,我们先看一下String 生成hashCode的代码:/** * Returns a hash code for this string. T转载 2021-10-20 21:03:44 · 5539 阅读 · 0 评论 -
BigDecimal进行除以的时候需要设置舍弃多少位 Non-terminating decimal expansion; no exact representable decimal result.
如果你不设置的话,如果有 除不尽的话, 会出现下面的错误:错误数据@Testpublic void c_33() { // 积分返现现金比值 BigDecimal returnCashRatio = new BigDecimal("1.5"); // 积分返现积分比值 BigDecimal returnPointRatio = new BigDecimal(88); // 积分率 = 积分返现现金比值 除以 积分返现积分比值 BigDecimal原创 2021-10-20 14:32:38 · 172 阅读 · 0 评论 -
Java多线程并发编程实战之百万级数据计算性能优化实战
Java多线程并发编程实战之百万级数据计算性能优化实战出自:出自 <腾讯课堂 700多分钟干货实战Java多线程高并发高性能实战全集> , 我学习完了之后, 我给 老师在课上说的话,以及视频的内容,还有代码敲了一遍,然后添加了一些注释,把执行结果也整理了一下, 做了个笔记案例背景某应用程序有100万条数据,且每条数据在计算前的业务校验逻辑平均耗时5毫秒,请运用多线程高并发变成等相关的基础知识,实现1分钟以内,完成计算100万条数据的平方和.Master-Worker设计模式原创 2021-10-15 11:31:06 · 2911 阅读 · 2 评论 -
Java 百万数据秒级导出到Excel中
出自:腾讯课堂 700多分钟干货实战Java多线程高并发高性能实战全集 , 我学习完了之后,我做了个笔记.1.案例背景某个MySQL服务器的user表有100万条数据,请运用多线程并发编程等相关基础知识,将这100万条数据秒级(8秒内)导出到若干Excel文件.实际需求如果产品经理说要弄到一个Excel文件的话,你可以跟产品经理要提建议的,因为你100万条数据往一个Excel里面保存的话那么你的文件会很大,而且看数据也不方便,也会很卡.如果你把一百万条数据导出到多个Excel里面,一个Excel里原创 2021-10-13 21:11:01 · 8145 阅读 · 12 评论 -
Java多线程百万数据快速入库实战
出自:腾讯课堂 700多分钟干货实战Java多线程高并发高性能实战全集 , 我学习完了之后,我做了个笔记.背景某应用程序(单台服务器,非分布式的多台服务器),这单台服务器就是你的笔记本电脑了,并发产生100万条数据,这100w条数据是你自己产生的,假设你是架构师,如何运用多线程等基础知识将这100万条数据,快速同步(4分钟以内)到MySQL数据库?分析百万数据快速入库的特点1.百万数据快速入库的特点:数据量比较大(高并发),时间很短(性能),100万条数据如果一条一条的插入到原创 2021-10-12 15:16:00 · 12887 阅读 · 1 评论 -
使用 jstack 排查Java项目的Linux线上环境死锁
死锁概念两个或者两个以上的线程在执行的过程中,由于竞争资源或者由于彼此等待而造成线程阻塞,线程不再往下执行.实战准备项目随便找个SpringBoot项目package com.example.demo;/** */public class DeadLockTest extends Thread { private String first; private String second; public DeadLockTest(String name, Strin原创 2021-10-12 10:20:57 · 572 阅读 · 0 评论 -
基础知识-Java泛型擦除(简洁明了)
原文地址https://blog.youkuaiyun.com/qq_30878303/article/details/79639904正文地址0.概念_ Java 泛型的参数只可以代表类,不能代表个别对象。由于 Java 泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型。Java 编译器在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而加快。_—百度百科_ 泛型是Ja转载 2021-08-06 19:58:42 · 401 阅读 · 0 评论 -
Java ApachePOI Excel 设置强制换行
效果文章超过长度了自动换行.核心设置样式代码 CellStyle wrapText = workbook.createCellStyle(); wrapText.setWrapText(true); // 设置强制换行的然后cell设置演示代码 cell.setCellStyle(wrapText);下面是项目代码,仅供参考关注注释中带//!!!的代码即可,其它代码都是业务代码,你们看了没啥用.public <T> void insertValueIntoExcel原创 2021-06-17 16:54:24 · 1158 阅读 · 0 评论 -
Java 代码OOM内存溢出检查
编写OOM程序package com.example.demo;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;@RestControllerpublic class TestController { @GetMapping("/hello")原创 2021-06-12 11:45:24 · 276 阅读 · 1 评论 -
Java 测试代码片段调用时长小工具
每次都要在方法前后写System.currentTimeMillis() 什么的太麻烦.干脆就写了一个小东西…小东西package com.feihe.util;/** * 测试代码片段性能的一个小工具 * 这样用 * TestTimeConsumingUtils test = new TestTimeConsumingUtils(); * //业务逻辑代码.................. * test.printTime("doAssembleDataByExcelSheet");原创 2021-06-10 09:51:30 · 221 阅读 · 0 评论 -
Java ApachePOI Excel 设置只有指定列可编辑,并且允许调整列宽或者禁用列宽
效果当时产品经理的需求只有指定的列指定内容允许修改,其它地方都不允许修改和新增,如图下,只有红色框框内容允许修改,红色框框以外均不能修改,下面的空白的excel也不允许新增操作只要你修改就会弹出下面的警告解决代码我是根据公司的通用的 POI工具类改造的,写的比较粗.大概是那个意思,不要纠结细节,后续代码有优化我再发出来.重点看我下面代码注释带有"!!! "感叹号的代码,这个是控制excel是否编辑的核心代码./** * * @param collection 每行数据的集合原创 2021-06-01 10:19:08 · 1970 阅读 · 0 评论 -
Java的浅拷贝和深拷贝
https://www.2cto.com/kf/201401/273852.html实现对象拷贝的类,必须实现 Cloneable 接口,并覆写 clone() 方法创建一个指向对象的引用变量的拷贝,地址值是相同的,那么它们肯定是同一个对象, 这就叫做引用拷贝。创建了新的对象, 而不是把原对象的地址赋给了一个新的引用变量, 这就叫做对象拷贝深拷贝和浅拷贝都是对象拷贝浅拷贝被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对 “主” 对原创 2021-05-12 20:23:02 · 343 阅读 · 6 评论 -
Java并发之的DelayQueue简单介绍和使用
概念DelayQueue是一个支持延时获取元素的无界阻塞队列。队列使用PriorityQueue来实现。队列中的元素必须实现Delayed接口,在创建元素时可以指定多久才能从队列中获取当前元素。只有在延迟期满时才能从队列中提取元素。队列的头部,是延迟期满后保存时间最长的delay元素,是最接近过期的元素。没有过期元素的话,使用poll()方法会返回null值使用场景DelayQueue非常有用,可以将DelayQueue运用在以下应用场景。缓存系统的设计:可以用DelayQueue保存缓存元素的原创 2021-04-22 12:36:03 · 551 阅读 · 0 评论 -
Java校验字符串是否包含空格
亲测有效.String s ="hello world";if (s.contains(" ")){System.out.println("有空格");}原创 2021-04-22 10:12:33 · 6543 阅读 · 0 评论 -
线程池内部结构(组成)
Java线程池包含4个部分,线程池的工作原理,是生产者消费者模式的(1)线程池管理器(ThreadPool):就是负责创建和销毁线程池的(2)工作线程(PoolWorker):就是线程池中的一个线程(3)工作任务(Task):这个就是线程池里的某个线程需要执行的业务代码,这个是你自己编写的业务逻辑(4)任务队列(TaskQueue):这个是扔到线程池里的任务需要进行排队,要进任务队列...原创 2021-03-08 17:24:03 · 619 阅读 · 0 评论 -
序列化相关概念
在分布式场景,比如我想给服务B的一个实体类传输到服务A中,给对象转换成可以传输的字节流数据,这就是序列化.把一个存储在内存里面的数据转换成可传输和可存储的对象这就是序列化.在rpc框架的话,序列化是必须存在的.(一)serialVersionUID 序列化版本号这是一个版本号,如果不定义的话,会自己生成一个,serialVersionUID 是一种安全校验的机制,序列化对象的id和反序列化对象的id是一致的,这样的话就能对序列化的安全性做一个识别.如果序列化时候的id和反序列化的原创 2021-03-06 22:17:43 · 253 阅读 · 0 评论 -
Java OOM 内存溢出分析
编写OOM程序package com.example.demo;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;@RestControllerpublic class TestController { @GetMapping("/hello")原创 2021-02-12 12:18:05 · 261 阅读 · 3 评论 -
win10本地 Java死锁检查,使用jstack工具
Java死锁检查,使用jstack工具死锁代码直接运行就会出现死锁,原因是因为加锁顺序不一致会导致死锁public class DeadLockSample extends Thread { private String frs; private String second; public DeadLockSample(String name, String frs, String second) { super(name); this.frs = frs; this.second原创 2021-02-05 08:46:27 · 841 阅读 · 0 评论 -
并发-线程池[老的,有时间我重新整理一下]
并发-线程池[老的,有时间我重新整理一下]文章是直接从我本地word笔记粘贴过来的,排版啥的可能有点乱,凑合看吧,有时间我会慢慢整理为什么要用线程池?平时开发的时候基本不太用线程,用线程池更多一点Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。Java创建一个线程出来,虚拟机要去跟操作系统申请的,给这个线程去分配资源,也就说创建原创 2021-01-31 15:21:57 · 541 阅读 · 0 评论 -
04.JDK对synchronized锁的更多优化措施
04.JDK对锁的更多优化措施1.逃逸分析如果jdk在分析编译的时候发现,一个对象不会逃逸方法外或者线程外,则可针对此变量进行优化:在写代码的时候,即使方法加了synchronized关键字,编辑器也会把你这个方法的锁消除掉.2.锁消除虚拟机的运行时编译器在运行时如果检测到一些要求同步的代码上不可能发生共享数据竞争,则会去掉这些锁。如果JVM检测到某段代码不可能存在共享数据竞争,JVM会对这段代码的同步锁进行锁消除。在动态编译同步块的时候,JIT编译器可以借助一种被称为逃逸分析(Escape原创 2021-01-31 15:04:37 · 249 阅读 · 0 评论 -
03.synchronized锁升级降级问题
03.synchronized锁升级降级问题概述现代的(Oracle)JDK 中,JVM 对此进行了大刀阔斧地改进,提供了三种不同的 Monitor 实现,也就是常说的三种不同的锁:偏斜锁(Biased Locking)、轻量级锁和重量级锁,大大改进了其性能。所谓锁的升级、降级,就是 JVM 优化 synchronized 运行的机制,当 JVM 检测到不同的竞争状况时,会自动切换到适合的锁实现,这种切换就是锁的升级、降级。当没有竞争出现时,默认会使用偏斜锁。JVM 会利用 CAS 操作(compa原创 2021-01-31 15:04:08 · 4994 阅读 · 2 评论 -
02.synchronized原理
概述在 Java 早期版本中,synchronized 属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,时间成本相对较高,这也是为什么早期的 synchronized 效率低的原因。庆幸的是在 Java 6 之后 Java 官方对从 JVM 层面对原创 2021-01-31 15:03:18 · 191 阅读 · 0 评论 -
01.Synchronized概述
synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为"互斥区"或"临界区",如果加了Synchronize 修饰符 就变成线程安全了分析:当多个线程访问myThread的run方法时,以排队的方式进行处理(这里排对是按照CPU分配的先后顺序而定的),一个线程想要执行synchronized修饰的方法里的代码:1 尝试获得锁2 如果拿到锁,执行synchronized代码体内容;拿不到锁,这个线程就会不断的尝试获得这把锁,直到拿到为止,而且是多个线程同时去竞争这把锁。(也就是会有锁原创 2021-01-31 15:01:54 · 162 阅读 · 0 评论 -
ThreadLocal里面的泛型不能是static修饰的变量 *
概念当ThreadLocal里面存储的是static修饰的类或者变量也会出现线程不安全问题,因为在ThreadLocal里面持有的是对象的本身的引用,对于static变量而言,所有的类共享了static修饰的类或者变量的引用.在ThreadLocal存放的是同一个对象的引用,所以多个线程看到的都是同一个对象的实例.所以ThreadLocal对static修饰的类或者变量不具备线程隔离.代码演示static修饰了变量import utils.SleepTools;/** * 类说明:Thre原创 2020-10-28 18:14:08 · 758 阅读 · 0 评论 -
Java的ThreadLocal演示代码
概念概念https://blog.youkuaiyun.com/qq_41489540/article/details/109339052没用ThreadLocal出现线程安全问题/** * 没用ThreadLocal 五个线程共享了 num变量 * 此时出现了线程安全问题 */public class demo1 { private static int num = 0; /** * 结果下个线程的值是上一个线程改变的值 * 因为 num 是线程共享的 */ public原创 2020-10-28 18:15:08 · 271 阅读 · 0 评论 -
Java多线程之TheadLocal概念 *
概述ThreadLocal是实现线程封闭的最好方法。ThreadLocal内部维护了一个Map,Map的key是每个线程的名称,而Map的值就是我们要封闭的对象。每个线程中的对象都对应着Map中一个值,也就是ThreadLocal利用Map实现了对象的线程封闭。是线程级别隔离的局表变量,即使是static变量,对于不同的线程也是不共享的,每个线程都互相独立的,互相看不见,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变原创 2020-10-28 18:10:02 · 340 阅读 · 1 评论