![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 55
Relian哈哈
分享知识和分享苹果是不一样的,苹果会越分越少,而知识并不会因为分享而减少,知识的分享更能激荡出不一样的火花
展开
-
Java字符串首字母大写高效方法
而我们通常会使用反射,通过对象获取其属性,并通过属性得到其getter、setter方法,而得到get、set方法时候需要属性首字母大写,而对象有可能几十个或者上百个属性。字符串首字母大写,我们通常的做法是:传统方法为先截取手字母,再转换为大写,然后在拼接,一个固然没事,但是上百个属性情况下对性能有一定影响。一种巧妙的方法就是通过字符的ASCII码值加减进行大小写转换计算机中大小写字母,ASCII码对照表从ASCII码对照表中国可以看出,大写字母与小写字母的ASCII值相差是32,.原创 2021-05-29 02:12:19 · 9487 阅读 · 0 评论 -
Spring下用Java导出CSV文件(java直接导出和第三方jar导出)
由于Csv格式简单,占内存少,生成的文件相对Excel小,可用各种编辑器打开等优点,导出类需求多用Csv格式之下并没有经过大数据量性能导出测试,若有大数据量级使用时可自行测试性能:Controller代码: @RequestMapping(value = "/export") public void getSkuList1(HttpServletResponse response){ String[] tableHeaderArr = {"id","姓名原创 2020-08-02 23:51:33 · 10876 阅读 · 11 评论 -
由 synchronized锁优化联想到用户态与内核态区别
我们知道synchronized的锁优化过程,从无状态-偏向锁-轻量级锁-重量级锁。优化点就是在多线程锁竞争时候避免线程过早地由用户态到内核态的转换,避免线程间频繁低在用户态和内核态间的切换,减少因CPU切换而中断耗费的时间。那为什么重量级锁竞争线程需要从用户态到内核态转变呢。这就需要知道用户态和内核态区别。一、用户态和内核态的概念(1)用户态(也称为目态),应用程序只能在用户态运行—...原创 2020-03-21 19:13:17 · 2437 阅读 · 6 评论 -
Java集合List按日期升序或降序四种方法
工作中常用到Java日期排序(升序或者降序),总结Java集合List按日期升序或降序常见的三种方法如下准备的类import lombok.AllArgsConstructor;import lombok.Data;@AllArgsConstructor@Dataclass Order { /** * 订单号 */ private String orderNum; /** * 付款时间 ...原创 2019-11-03 01:43:40 · 31052 阅读 · 11 评论 -
彻底弄懂StringBuffer与StringBuilder的区别
一问道StringBuffer与StringBuilder的区别,张口就来StringBuffer是线程安全的,因为它相关方法都加了synchronized 关键字,StringBuilder线程不安全。没错,确实如此,但是我们查看过源码会发现StringBuffer是从jdk1.0就开始了,StringBuilder是从jdk1.5开始的。于是我就产生这样一个疑问,既然已经有了StringBu...原创 2019-06-26 00:33:23 · 25914 阅读 · 11 评论 -
深入探究可重入锁ReentrantLock
转载https://www.imooc.com/article/37653 一、 概述本文首先介绍Lock接口、ReentrantLock的类层次结构以及锁功能模板类AbstractQueuedSynchronizer的简单原理,然后通过分析ReentrantLock的lock方法和unlock...原创 2019-05-27 23:58:47 · 172 阅读 · 0 评论 -
LinkedBlockingQueue与ConcurrentLinkedQueue的区别
队列是一种常见的数据结构,先进先出,在日常工作中有着高频率的使用。在 Java 中应用也更为广泛,是生产消费模型首选的数据结构,简化了开发,解耦生产与消费的关系。Java中 Queue 可以分为阻塞队列和非阻塞队列。要说这两者的区别,首先要了解一下阻塞队列与非阻塞队列的区别一、阻塞队列与非阻塞队列1、非阻塞队列非阻塞队列也就是一般的队列,没有阻塞队列的两个阻塞功能。其主要方法如...原创 2019-02-16 00:29:01 · 6601 阅读 · 4 评论 -
常见的java序列化/反序列化几种类型
Java序列化是指把Java对象转换为字节序列的过程,Java反序列化是指把字节序列恢复为Java对象的过程主要有两种用途: 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 在网络上传送对象的字节序列。不管什么用途我们都希望占用空间小,传输效率高,读写快。方式有多中,效率不同,常见的方式有jdk的ObjectOutputStream、json类库、javax的xml、goog...原创 2019-01-11 01:02:34 · 5096 阅读 · 0 评论 -
并发工具类CountDownLatch与CyclicBarrier的区别
在JDK的并发包里提供了几个非常有用的并发工具类,其中CountDownLatch、CyclicBarrier是最常用的两个。首先介绍下各自的简单使用1、闭锁CountDownLatch顾名思义,CountDownLatch扮演的是一个类似计数器的角色,等待计数器为零,也俗称闭锁。CountDownLatch首先初始化一个计数器,await方法之前的线程每执行一次计数器减一,直到计数器...原创 2018-03-12 23:11:08 · 222 阅读 · 0 评论 -
Executors四中线程类型对比
一、Executor框架先看Executor框架下的结构图1、ThreadPoolExecutorThreadPoolExecutor是Executor框架中最核心的类,它是线程的实现类,通过Executor框架的工具类Executors,可以创建3种类型的ThreadPoolExecutor,二中会详细说明。2、ScheduledThreadPoolExecutorSch...原创 2018-11-13 00:20:16 · 589 阅读 · 0 评论 -
Java线程池工作原理
Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池,所以我们就要认识并弄懂线程池,以便于更好的为我们业务场景服务。一、线程池的好处在开发过程中,合理地使用线程池大致有3个好处第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提...原创 2018-11-10 01:08:13 · 24497 阅读 · 6 评论 -
JVM性能监控与故障处理
JVM调优离不开一些命令工具,那就是jdk提供的一些命令工具,这些工具都非常稳定而且功能强大,能在处理应用程序性能问题、定位故障时发挥很大的作用。一、JDK的命令行工具JDK的jdk/bin提供了一系列监控命令这些命令行大多数是jdk/lib/tools.jar类库的一层薄包装,它们主要的功能代码是在tools类库中实现的JVM常用监控命令一览表名称 主要作用...原创 2018-10-17 01:07:43 · 760 阅读 · 0 评论 -
Java代码块与构造方法执行顺序
Java中一般有会区分静态代码块、构造代码块、构造函数执行顺序静态代码块依赖于类而生存的, 类加载时候最先执行,只执行一次构造代码块存在于类之下,依赖于对象而生存,不管是创建有参或者无参构造,每次创建对象时候都会执行,构造函数与类同名,无返回值,创建对象时候执行,创建对象时,对应参数的构造才会执行静态代码块、构造代码块、构造函数 执行顺序依次为:父类静态代码块=》子类静态...原创 2018-09-09 23:22:08 · 1695 阅读 · 0 评论