![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 58
songchuan1993
这个作者很懒,什么都没留下…
展开
-
@Valid注解
java @valid注解入参校验。原创 2022-11-22 14:45:14 · 222 阅读 · 1 评论 -
三次握手,四次挥手
名词解析**TCP/IP协议:**TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。**IP协议:**网际互连协议(Internet Protocol),是TCP/I原创 2021-12-15 17:21:33 · 3385 阅读 · 0 评论 -
cookie,session,token
Cookie1.定义某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据(通常经过加密)。也就是说如果知道一个用户的Cookie,并且在Cookie有效的时间内,就可以利用Cookie以这个用户的身份登录这个网站。2.结构Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。3.数量限制各浏览器之间对cookie的不同限制,在进行页面cookie操作的时候,应该尽量原创 2021-12-15 15:58:40 · 1191 阅读 · 0 评论 -
clone方法是深拷贝还是浅拷贝?
Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?①使用new操作符创建一个对象②使用clone方法复制一个对象那么这两种方式有什么相同和不同呢?new操作符的本意是分配内存。程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构原创 2021-06-18 16:15:50 · 4235 阅读 · 0 评论 -
Spring 事务的传播机制
https://zhuanlan.zhihu.com/p/148504094转载 2020-11-11 17:21:54 · 118 阅读 · 0 评论 -
HashMap底层数据结构详解(解疑)
HashMap底层数据结构详解一、HashMap底层数据结构JDK1.7及之前:数组+链表 JDK1.8:数组+链表+红黑树关于HashMap基本的大家都知道,但是为什么数组的长度必须是2的指数次幂,为什么HashMap的加载因子要设置为0.75,为什么链表长度大于等于8时转成了红黑树?HashMap添加元素分析当添加元素时,会通过哈希值和数组长度计算计算下标来准确定位该元素应该put的位置,通常我们为了使元素时分布均匀会使用取模运算,用一个值去模上总长度,例如:index=hashCo原创 2020-09-03 11:29:54 · 569 阅读 · 0 评论 -
HashMap源码全面详细分析
在做 HashSet源码分析 时,发现其底层用的是HashMap,所以今天来研究下 HashMap的源码。1.变量 /** * 默认初始容量16,必须是2的幂 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; /** * 最大容量,2的30次幂 */ static final int MAXIMUM_CAPACITY = 1 << 30; /*原创 2020-08-24 16:08:10 · 84 阅读 · 0 评论 -
面试准备:HashMap源码分析
简介HashMap最早出现在JDK1.2中,底层基于散列算法实现。HashMap 允许 null 键和 null 值,是非线程安全类,在多线程环境下可能会存在问题。1.8版本的HashMap数据结构:为什么有的是链表有的是红黑树?默认链表长度大于8时转为树结构Node是HhaspMap中的一个静态内部类 ://Node是单向链表,实现了Map.Entry接口staticclassNode<K,V>implementsMap.Entry<...原创 2020-07-29 16:52:57 · 102 阅读 · 0 评论 -
HashSet源码简单分析
刚做完 ArrayList源码全面详细分析 ,又对hashset产生了兴趣,HashSet里的属性和方法可比arraylist少太多了,稍微一分析发现,HashSet底层是HashMap,HashSet的基本所有方法都是去调用HashMap的,看来有必要抽时间好好研究一番HashMap了。HashSet 常用方法 public int size() { return map.size(); } public boolean isEmpty() {原创 2020-07-29 12:05:55 · 88 阅读 · 0 评论 -
ArrayList源码全面详细分析
昨天在公众号看了一篇 LinkedList源码分析非常感兴趣,于是又自己研究了一下ArrayList的源码。1.常量 /** * 默认初始容量 10 */ private static final int DEFAULT_CAPACITY = 10; /** * 空数组,初始化和赋值为空数组的时候使用 */ private static final Object[] EMPTY_ELEMENTDATA = {}; /原创 2020-07-29 10:44:41 · 134 阅读 · 0 评论 -
LinkedList源码分析
注:本文所有方法和示例基于jdk1.8概述LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列,它是基于双向链表实现的,是线程不安全的,允许元素为null的双向链表。源码分析1. 变量/***集合元素数量**/transientintsize=0;/***指向第一个节点的指针*Invariant:(first==null&&last==null)||*(f...原创 2020-07-27 13:54:00 · 99 阅读 · 0 评论 -
JAVA集合和JSON转换
Java集合和json相互转换,可以使用 谷歌的Gson.jar 或者 阿里的fastJson.jar在此记录一下两种方法。 /** * 集合和json相互转换 * 使用阿里的fastJson.jar */ private static void test18() { List<AATestVo> list = new ArrayList<>(); list.add(new AATestVo("s",12原创 2020-07-17 18:12:18 · 857 阅读 · 0 评论 -
记录两种获取年月日时分秒的方法
前几天改别人代码,有一个业务是从时间中获取年月日时分秒,分别存入数据库的6个字段中,他用了转成yyyyMMddHHmmss的字符串再截取的方式,这么写有点low!Java有现成的工具类可以用,Calendar就可以,最近又发现String.format也可以,所以把两种都整理一下。1.Calendar/** * Calendar获取年月日时分秒 * @param date */ private static void test10(Date date) {原创 2020-07-13 17:41:42 · 1143 阅读 · 0 评论 -
order by和limit混用隐患
工作中遇到两个bug,一个是分页查询第一页和第二页数据有重复,另一个是导出到EXCEL中的数据顺序和分页查询的顺序不一致。研究发现,隐患产生原因:(1)order by 和 limit 混用(2)order by 后面的字段存在重复 或 null解决方法:order by 多加一个非空且唯一的字段兜底,例如: order by xxx1,xxx2,idid非空且唯一,用它兜底完美解决。至于原因的具体分析,链接如下:添加链接描述...原创 2020-06-02 18:07:05 · 194 阅读 · 0 评论 -
JAVA分批插入数据库
以mysql为例:mysql的sql语句是有最大长度限制的,默认是1M,可配置,超过最大长度就会报错。在实际工作中遇到批量插入几千条上万条数据的时候,有长度超限隐患,这时可以使用分批插入,代码如下: /** * 分批插入-公共方法 * @param objects:数据集合 * @param subSize:单次插入的条数 */ public static <E> List<List<E>> splitTo(Li原创 2020-06-02 17:32:47 · 2891 阅读 · 2 评论 -
foreach循环中add/remove抛异常java.util.ConcurrentModificationException原因深入分析
我们都知道集合循环删除元素,要使用iterator和while循环,不能用for和foreach。for循环正向遍历不抛异常,但会导致删除不完全,for反向遍历是可以的。foreach会抛出异常java.util.ConcurrentModificationException,具体原因是什么呢?先来看一段代码,摘自阿里巴巴的java开发手册List<String> list =...原创 2020-05-07 15:11:45 · 835 阅读 · 0 评论 -
优雅地关闭流:try-with-resource
JDK1.7之后有了try-with-resource处理机制。首先被自动关闭的资源需要实现Closeable或者AutoCloseable接口,因为只有实现了这两个接口才可以自动调用close()方法去自动关闭资源。写法为try(){}catch(){},将要关闭的外部资源在try()中创建,catch()捕获处理异常。其实try-with-resource机制是一种语法糖,其底层实现原理仍然是...原创 2020-04-28 15:10:13 · 1108 阅读 · 0 评论 -
为什么重写equals方法一定要重写hashcode方法
1.我们在重写equals方法的同时,不对hashcode方法进行重写的话,默认地还是会使用Object类自带的hashcode方法,这样就会出现在某些情况下,明明两个对象的equals方法判断相等了,但是它们的hashcode居然不一样,这是不符合规范的。对于hashcode,Java中有如下规定:两个对象相等,hashcode一定相等两个对象不等,hashcode不一定不等hashco...原创 2020-04-22 17:05:51 · 170 阅读 · 0 评论 -
String.split()高级用法
String.split(String regex) 内部掉用的是String.split(String regex,0)方法 public String[] split(String regex) { return split(regex, 0); }使用String.split(String regex,int limit)按照指定的分隔符regex,分隔字...原创 2020-04-15 16:26:48 · 286 阅读 · 0 评论 -
cron表达式:获取下次执行时间
项目开发中遇到一个需求,根据cron表达式获取下一次执行时间,网上搜了下资料很多,选了一种,亲测可行。 private Date getNextTriggerTime(String cron){ if(cron == null || !CronExpression.isValidExpression(cron)){ return null; ...原创 2020-04-03 17:06:36 · 1676 阅读 · 0 评论 -
Aviator表达式
最近做的一个数据质量管理项目中,使用了aviator表达式来对数据进行筛选。很好用,记录一下。它是直接把表达式转成了字节码文件,交给jvm运行,和Java契合度很高,同时保证了轻量级,高效率。aviator使用文档...原创 2020-04-03 16:15:24 · 787 阅读 · 0 评论 -
cron表达式:按周执行时需留意
cron表达式前几天使用cron表达式做任务的自动调度,使用按周执行的时候,遇到一个问题。比如cron = 0 15 10 ? * 1 2020 ,我想要的是 2020年每周一的10:15执行,结果实际每次都是周二的10点15才执行,折腾半天发现,外国对于周几的定义和中国是不一样的,中国1-7对应周一至周日,外国是1-7对应周日至周六!所以使用时要注意这一点,解决办法有两种:注意cron...原创 2020-04-03 15:49:49 · 20311 阅读 · 3 评论