![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 69
xiaolege_
目前重点研究Spring、Spring boot、Spring cloud、Kafka、Flink、Xxl-job、MySQL、Elastic search、Redis、Docker等,欢迎大家关注交流。
展开
-
关于SimpleDateFormat格式化无法精确到微妙、纳秒的处理
问题背景:根据时间字段拉取数据,由于平时测试环境时间字段都是DATE类型精度为0,用SimpleDateFormat格式化为yyyy-MM-dd hh:mm:ss然后拼接sql查询没有问题;但是前几天别人提供的数据为timestamp精度设置为6时间如:2022-01-21 11:07:18.123456,采用上面这种格式化日期后丢失精度导致数据缺失。面向百度编程。。。结果大家都说后面秒要几位小数就写几个S 于是乎我改成了yyyy-MM-dd hh:mm:ss.SSSSSS结果格式化出原创 2022-05-20 11:02:23 · 3221 阅读 · 0 评论 -
Java后台http client实现文件上传
最近接到一个需求,需要用到后台去调用远程服务器的文件上传接口实现文件上传,用到了httpClient的MultipartEntityBuilder实现。maven引用 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> &l原创 2021-04-21 13:54:37 · 1966 阅读 · 0 评论 -
Java执行shell命令传参带空格
Runtime.getRuntime().exec(cmdstring);如果此时cmdstring中的参数(例如cp文件时文件名)含有特殊符号空格,此时就会出现错误,因为源码会按照一些特殊字符(" \t\n\r\f",注意到其中含有空格)去切分cmdstring变为数组,所以有空格会导致错误,这种情况可以用命令数组实现,就是把cmdstring里的东西自己放到数组里,就不用源码去切分了就不会有问题,例:abc af.zip为一个文件名cmdstring=“cp abc af.zip dir”这..转载 2021-04-13 17:12:23 · 834 阅读 · 0 评论 -
ReentrantLock和Synchronized的区别和原理和示例
相似点:两个都是可重入锁,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的线程都必须阻塞在同步块外面等待,而进行线程阻塞和唤醒的代价是比较高的(操作系统需要在用户态与内核态之间来回切换,代价很高,不过可以通过对锁优化进行改善)。功能区别:相同点:1.它们都是加锁方式同步;2.都是重入锁;3. 阻塞式的同步;也就是说当如果一个线程获得了对象锁,...原创 2021-03-26 12:20:38 · 127 阅读 · 0 评论 -
保姆级 Java 后端线上问题排查常用命令收藏
内存瓶颈 CPU瓶颈 网络瓶颈 磁盘瓶颈 应用瓶颈 总结 内存瓶颈freefree是查看内存使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。free -h -s 3表示每隔三秒输出一次内存情况,命令如下[1014154@cc69dd4c5-4tdb5~]$freetotalusedfreesharedbuff/cacheavai...转载 2021-03-24 09:10:03 · 145 阅读 · 0 评论 -
Java对象的生命周期
java对象的生命周期包括 创建、使用、回收 三个过程,本文将详细剖析每个过程。一、对象的创建当运行时执行代码遇到new指令、反序列化、反射、克隆时会创建新的对象。创建对象的过程如下图:java虚拟机创建对象的过程-流程图.jpg对象创建过程中重要步骤的几点说明:分配内存:分配内存方式由两种,分别是指针碰撞和空闲列表。指针碰撞是指将内存划分为空闲的和用过的两块,这两块之间有一个指针作为分界点,当分配内存时将指针往空闲内存块移动。空闲列表是由虚拟机维护一个列表,记录哪块内存..转载 2021-03-20 11:02:35 · 247 阅读 · 0 评论 -
java全局锁和对象锁以及synchronized,ReentrantLock,Atomic 使用场景描述
对象锁:/*** 全局锁,对象锁的区别* @author Z7M-SL7D2**/class Person{ private static int COUNT = 10; // 同一时间只允许一个线程吃 public synchronized void eat() { System.out.print("开始吃 "); COUNT--; System.out.print(" 吃东...转载 2021-03-20 09:05:01 · 791 阅读 · 0 评论 -
java常用重构技巧
基本原则1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的并发访问;第二,控制实例的产生,以达到节约资源的目的;第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。2. 尽量避免随意使用静态变量要知道,当某个对象被定义为static变量所引用,那么GC通常是不会回收这个对象所占有的内存,如public c转载 2021-03-17 14:35:39 · 1293 阅读 · 0 评论 -
Java获取近几天的时间
/** * 获取过去或者未来 任意天内的日期数组 * @param intervals intervals天内 * @return 日期数组 */ public static ArrayList<String> test(int intervals ) { ArrayList<String> pastDaysList = new ArrayList<>(); ...原创 2021-03-01 11:06:11 · 703 阅读 · 0 评论 -
char和数字对应转换
package main;/*** Java中将一个字符与对应Ascii码互转* 1 byte = 8bit 可以表示 0-127*/public class GetCharAscii { /*0-9对应Ascii 48-57 *A-Z 65-90 *a-z 97-122 *第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字 */ public static void main(String[] ar...原创 2021-02-27 19:03:06 · 4327 阅读 · 0 评论 -
JAVA设计模式总结之23种设计模式
一、什么是设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多...转载 2021-01-20 15:10:22 · 226 阅读 · 0 评论 -
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
作者:云深i不知处blog.csdn.net/mu_wind/article/details/109516995先贴上几个案例,水平高超的同学可以挑战一下: 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里。 统计员工的最高薪资、平均薪资、薪资之和。 将员工按薪资从高到低排序,同样薪资者年龄小者在前。 将员工按性别分类,将员工按性别和地区分类,将员工按薪资是否高于8000分为两部分。 用传统的迭代处理也不是很难,但代码就显得冗余了,跟St转载 2020-11-11 10:04:51 · 230 阅读 · 0 评论 -
Java中Volatile关键字详解
Java中Volatile关键字详解阅读目录一、基本概念 二、Volatile原理一、基本概念先补充一下概念:Java 内存模型中的可见性、原子性和有序性。可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。 可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的转载 2020-10-16 17:56:25 · 72 阅读 · 0 评论 -
Java反射技术详解
!!!!!汇总!!!!!前言最近码代码过程中由于一些场景的需要,涉及到反射的设计和使用,故百度了一通,这里做个总结记录。相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替代了,java反射有个开源框架jOOR相信很多人都用过,不过我们还是要学习反射的基础语法,这样才能自己写出优秀的框架,当然这里所讲的反射技术,是学习Android插件化技术、Hook技术原创 2020-09-29 14:28:52 · 196 阅读 · 0 评论 -
关于java对象作为方法参数传递到一个方法后,对象内容是否发生改变的相关分析
问:当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递。在java语言中只有值传递参数;当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但是对象的引用(不是引用的副本)是永远不会改变的。 Java参数:不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,传值一般相对于传地址而言) 若...转载 2020-09-29 12:19:04 · 2553 阅读 · 0 评论 -
stopwatch计时器
spring提供的计时器StopWatch对于秒、毫秒为单位方便计时的程序,尤其是单线程、顺序执行程序的时间特性的统计输出支持比较好。一般为了记录某段代码的耗时排查问题会采用一下方法:麻烦,看着比较low。使用StopWatch代码量骤减,而且让代码看着舒服多了。StopWatch各计时器耗时及所占百分比(个人认为最有用的方法)简单应用示例:import org.spring...原创 2019-11-27 14:34:32 · 1199 阅读 · 0 评论 -
Java报错:java.math.BigDecimal cannot be cast to java.lang.String
大家应该都用遇到过此种情况,从数据库取count、sum等函数的值需要转化成Integer的时候出现java.math.BigDecimal cannot be cast to java.lang.String的报错错误代码:Integer.parseInt((String)map.get("count"))或者Integer.parseInt(map.get("count")....原创 2019-11-20 17:07:27 · 633 阅读 · 0 评论 -
java学习之路
基础阶段首先是基础阶段,在基础阶段,我们必须掌握Java基础,Mysql数据库,Oracle数据库,JDBC,Linux基础,Java8新特性,数据结构和算法,设计模式。对于基础阶段,我们所要掌握的就是基础,虽然是基础,但学起来也够呛。因为是初学者,所以基础阶段会有一点难度,但只要肯坚持,这些也没什么难的。对于Linux、数据结构、算法和设计模式我们掌握一些基础就行了,也没必要学得非常透彻。...转载 2019-09-26 14:31:08 · 74 阅读 · 0 评论 -
POI设置excel样式
//创建HSSFWorkbook对象(excel的文档对象) HSSFWorkbook wb = new HSSFWorkbook(); // 建立新的sheet对象(excel的表单) HSSFSheet sheet = wb.createSheet("sheet1"); ...原创 2019-09-20 14:01:27 · 773 阅读 · 0 评论