
java
Java 语言学习 和 源码学习
凉快-Eric
我不喜欢背书 不代表糊涂
展开
-
判断参数实体必填的属性
自定义注解带有这个注解的属性可以为空其他的默认不能为空/** * @description: 参数字段可以为空的注解 * @Author: lk * @DateTime: 2022/04/15 11:30 */@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface FieldCanEmpty {}测试实体/** * @description: 测试实体 * @Autho原创 2022-04-15 11:05:44 · 1207 阅读 · 2 评论 -
java 正则验证 email、手机号格式是否正确
// 邮箱 private static final Pattern EMAIL_PATTERN = Pattern.compile("^\\w+([-+.]\\w+)*@[a-zA-Z0-9]+([-.][a-zA-Z0-9]+)*\\.[a-zA-Z0-9]+([-.][a-zA-Z0-9]+)*$"); public static boolean checkEmail(String email) { return EMAIL_PATTERN.matcher...原创 2021-04-28 10:17:10 · 707 阅读 · 2 评论 -
验证 google 订单
依赖 <dependency> <groupId>com.google.apis</groupId> <artifactId>google-api-services-androidpublisher</artifactId> <version>v3-rev20200909-1.30.10</version> </dependency>验证代码ClassP..原创 2021-04-27 11:53:10 · 1183 阅读 · 3 评论 -
手动分页工具类
/** * @author lk */public class PageUtil { /** * 开始分页 * * @param list 集合 * @param pageNum 页码 * @param pageSize 每页多少条数据 * @return 分页后的集合 */ public static List startPage(List list, Integer pageN...原创 2021-04-25 17:23:44 · 239 阅读 · 0 评论 -
web flux 上传视频
public Mono<Bolean> uplaodVideo(ServerWebExchange exchange){ Mono<MultiValueMap<String, Part>> multipartData = exchange.getMultipartData(); multipartData.flatMap((Function<MultiValueMap<String, Part>, Mono<Upload...原创 2021-04-25 17:09:57 · 431 阅读 · 0 评论 -
@builder 导致无参构造丢失
问题背景:在使用数据库框架的时候,由于实体同时使用了 @Data 和 @Builder加上字段顺序和数据库里的不一致,最终抛出异常在使用 @Builder 注解的是,会生成一个全参构造,导致无参构造消失无参构造是java自带的,如果你显式地写了构造函数,java自带地就会被覆盖掉在使用lombok的 @Data 注解,会生成1、get2、set3、tostring4、hashcode5、equals如果你想两个一起用,就需要:...原创 2020-11-23 11:41:57 · 2440 阅读 · 0 评论 -
对象创建过程 流程解析图 详细之极
我们在学的时候,不仅要知其然,还要知其所以然!所以今天我能总结了一张关于对象创建整体过程流程图。其中包括了1、对象的创建过程2、类的加载过程3、每个类加载过程的讲解4、类加载器的简单介绍原创 2020-06-26 11:30:23 · 748 阅读 · 0 评论 -
强软弱虚引用以及 ThreadLocal 的原理和内存泄露问题
四大引用强引用特点:只有对象没有被引用的时候,才会被回收。示例:Object o =new Object();软引用特点:内存不够的时候,软引用就会被GC掉实例:SoftReference<Object> o1 = new SoftReference<>(new Object());使用场景:缓存弱引用特点:系统只要GC,就会被回收掉实例:WeakReference<Object> o2 = new WeakReference<>(n原创 2020-05-19 10:45:46 · 859 阅读 · 1 评论 -
一篇文章快速搞懂 jvm 的内存模型
简介其实 jvm 是 Java Virtual Machine 的缩写,它其实是一种 java 虚拟机的一种设计规范,就像我们编程中的类一样,我们可以根据这个规范实例化出各种不同java 虚拟机。它的内存模型共包括这五大模块:堆方法区虚拟机栈本地方法栈程序计数器如下图:橙色的为线程共享的模块,而蓝色则是线程私有的,会随着线程的消失而消失。堆主要存储的就是对象的实例。大...原创 2020-04-27 16:49:44 · 308 阅读 · 3 评论 -
String intern 方法精准详解,有图有真相
相信看到这篇文章的人,对jvm的内存结构都有一定的了解。String 有属于自己的常量池,1.7 及其以前字符串常量池都是在方法区,1.7以后常量池就跑到堆里边。问题@Testpublic void test(){ String a = new String("abc"); String b = a.intern(); System.out.println(a ==...原创 2020-04-25 15:38:37 · 356 阅读 · 3 评论 -
并发编程中 线程协调工作的类
文章目录CountDownLatch - 门闩CyclicBarrier - 篱栅Exchanger - 交换机Semaphore - 信号量CountDownLatch - 门闩四个人相约出去上网,你告诉司机,等四个都上车了,您在开。所以每个人上车的时候,都会告诉司机,你来了。司机就会记录下来,当来的人够四个的时候,自己才能开车去往目的地。它常用的两个方法countDown() // 给...原创 2020-04-21 11:50:15 · 272 阅读 · 1 评论 -
最通俗的 HashMap 常见面试题
Map类的简略关系图:思维导图HashTable和HashMap的区别:1、HashMap 线程不安全,可以放空key(只能放一个)2、HashTable 线程安全,不可以放空key存放空Key的hash值放在数组的哪个位置上:存放在下标为0的位置上,也就是第一个链表的位置HashMap1.7和HashMap1.8有什么区别:1.7 底...原创 2020-04-19 11:15:14 · 684 阅读 · 3 评论 -
CAS 在Atomic类中的体现
Compare And Swap:比较和交换v(内存位置)a(旧的期望值)b(改变之后的值)数据在修改之前,旧的预期值和v中的值一致时,才能修改java中Atomic相关类就是使用的这种算法实现的。它和Synchronized相对:Synchoronized属于悲观锁,认为并发数据操作是一个大概率事件(总有刁民想害朕),我操作的时候,得把数据锁上,别人...原创 2020-04-12 15:16:22 · 280 阅读 · 0 评论 -
@Documented、@Retention、@Target 了解
/* * 被此注解标注的注解对象的注解类型信息,在生成文档的时候,也会被写入到文档中 * 默认是不会写入进去的 */@Documented/* * 表示注释在哪里记录 * SOURCE:源码级别,编译时就忽略 * CLASS:编译时在类文件中记录,但运行时不需要jvm保留(默认) * RUNTIME:不仅在类文件中记录,而且在jvm中保留,因此可以反读 */@Reten...原创 2020-03-15 09:14:26 · 787 阅读 · 0 评论 -
HashMap put方法的源码分析
背景知识:java1.7 HashMap用的是数组+链表实现的,同时采用的头插入法,存在死循环的问题java1.8 HashMap用的是数组+链表+红黑树实现的,采用尾插法实现的,解决了死循环的问题,今天分析的就是1.8 // 初始容量为16 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // ...原创 2020-03-11 08:52:07 · 360 阅读 · 0 评论 -
volatile 关键字如何保证内存可见性
为什么新线程对主线程进行的变量修改没有察觉?1、JIT编译器对新线程的代码进行优化,导致新线程在线程上下文中察觉不到变量的修改2、新线程可能会从本地缓存或是寄存器中获取变量数据,而不是从速度更慢的内存中获取volatile 关键字如何保证内存可见性?volatile标记的变量,会警告JIT编译器,标记volatile标记的变量可能会被其他线程修改,不要执行任何可能影响其访问顺...原创 2020-03-06 10:54:42 · 1250 阅读 · 0 评论 -
获取两个date之间的天数
创造实验数据// 现在的时间Date nowDate = new Date();// 设置三天后的时间Calendar c = Calendar.getInstance();c.setTime(nowDate);c.add(Calendar.DATE,3);Date afterThreeDay = c.getTime();默认向下取整天数// 一天的毫秒数lon...原创 2019-11-11 18:12:38 · 1220 阅读 · 8 评论 -
json 常用的参数解析方法
谷歌的Gson依赖:<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version></dependency>方...原创 2019-11-03 10:16:21 · 1363 阅读 · 2 评论 -
java 8 中 stream 流操作
流操作分为 中间操作 和 终止操作中间操作就是流中的数据进行一系列操作,所以一个流可以进行多个中间操作终止操作用于返回我们最终需要的数据,只能有一个终止操作放在最后优点:用起来非常的方便,而且提高代码的整洁度!中间操作常用的方法:List<Integer> list = Arrays.asList(10, 20, 30, 40, 40, 20);/...原创 2019-10-30 15:49:30 · 264 阅读 · 5 评论 -
抽象类和接口有什么区别
抽象类是实体的抽象它的特点:不可以实例化 可以写抽象方法(抽象方法:没有方法体,子类必须重写的方法) 它与接口相比,可以有自己的属性和有方法体的方法接口则是行为的抽象它的特点:普通方法不能有方法体 不能定义私有方法(之前是不可以定义的,但是定义成私有的就必须原地实现它,但是接口又不能实例化,所以没有意义)注意 :以上都是通常情况,但是java8的新特性加了缺省函数(...原创 2019-10-29 16:58:11 · 174 阅读 · 2 评论 -
线程
创建线程的几种方法:1. 继承Thread类,覆盖run方法2. 实现Runnable接口,实现run方法两种方式的区别:代码所放位置不同 集成Thread:线程代码存放在Thread子类run方法中 实现Runnable:线程代码存放在接口子类的run方法中 实现的好处:避免了单继承的局限性(推荐)多个线程同时启动的时候,会出现的问题...原创 2019-07-17 21:08:26 · 197 阅读 · 13 评论 -
String、== 和equals、final、abstract
String、StringBuffer、StringBuilder的区别String:对于String的每次修改都会创建一个新的String对象,不适用于字符串内容经常更换的条件。StringBuilder :在原有对象的基础上修改不会创建新的对象,非线程安全,性能高于StringBuffer,适用于单线程。StringBuffer : 在原有对象的基础上修改不会创建新的对象,线程安全...原创 2019-06-29 14:35:09 · 287 阅读 · 14 评论 -
java 数组与集合学习
数组与集合的区别:1. 内容: 数组存储同一种类型的元素, 集合可以存储不同类型的元素(我们这么做的时候很少)2. 长度: 数组 长度固定 集合长度不固定3. 元素的数据类型: 数组可以存储基本类型和引用类型 集合只能存储引用类型定义数组的两种方式:// 我们推荐而且常用第一种type[] arrayName;type ...原创 2019-06-09 11:29:53 · 289 阅读 · 7 评论 -
java、jdbc、jsp……的简单解释
java版本1. J2ME,功能有限,用于嵌入式设备。2. J2SE,包含原始的核心类库,用于桌面应用程序和浏览器中的applet3. J2EE,功能非常全面,用于数据处理和处理器端应用J2EE功能非常的全面,那就看看它的工作模式图:JDBC是什么?它是为java开发人员提供了一个行业标准API,可以在java应用与关系数据库之间建立起独立于数据库的连接,A...原创 2019-03-06 09:33:03 · 785 阅读 · 9 评论 -
java手写控件及事件
前言最近准备学习了JAVA的相关知识,编程的思路和C#大致相同的,但是手写窗体的代码,接触的不多(毕竟之前都是封装好的控件,直接拖就行了!),所以就多研究了一些,和大家分享分享! JAVA手写窗体控件研究为了自己的窗体中控件更加整齐灵活,我们可以把窗体设计为表格布局模式! 手写窗体控件,可没有之前拖控件那么简单,我们需要通过代码对控件的一些属性进行修改和设置!(在这...原创 2018-06-17 15:52:35 · 6241 阅读 · 25 评论