Java
文章平均质量分 70
Liu_Shihao
Null
展开
-
记录MacOS M1芯片(ARM64架构)使用docker-compose方式部署Kafka
amd架构的镜像非常好找,但由于博主是arm64架构的机器,所以一些开发环境非常的难找,所以在这里记录一下arm64环境部署Kafka。原创 2022-12-13 00:25:02 · 1878 阅读 · 3 评论 -
高性能队列Disruptor使用教程
Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。由于其高性能,获得了很多大奖。在美团技术团队它也有不少应用,有的项目架构借鉴了它的设计机制。从数据结构上来看,Disruptor是一个支持生产者 -> 消费者模式的环形队列。能够在无锁的条件下进行并行消费,也可以根据消费者之间的依赖关系进行先后消费次序。原创 2022-11-24 14:00:52 · 1103 阅读 · 2 评论 -
JavaSE项目打Jar包无法运行
目录一、简介二、打包步骤一、简介现在使用惯了SpringBoot的项目,突然间不知道JavaSE项目要怎么打包运行了记录一下错误一:刚开始使用了Maven打包,然后报错显示js-dzt-1.0-SNAPSHOT.jar中没有主清单属性二、打包步骤注意:一定要注意META-INF配置文件夹,并且与src文件夹同级!配置好之后:点击Build ——>Build Artifacts这样打包之后就可以正常运行了。...原创 2021-12-17 10:59:22 · 359 阅读 · 0 评论 -
自定义线程池的拒绝策略投递MQ队列
目录一、简介1.1 线程池的参数解释1.2 线程池工作流程1.3 线程池的四种拒绝策略二、代码实现2.1 实现Runnable接口2.2 创建线程池2.3 使用线程池三、测试一、简介在我们使用线程池的过程中,经常会遇到超出线程池的缓存队列、超出的最大线程数,这个时候,如果使用的是默认的拒绝策略即直接抛出异常,此时我们的数据就被丢弃了,程序会停止,我们也不知道,因为程序是并发执行的,如果使用了try catch 捕获异常让程序继续执行,但是被拒绝的线程数据已经被丢弃了,今天我们来学习通过自定义线程池的拒绝原创 2021-11-22 15:32:05 · 1321 阅读 · 0 评论 -
kaptcha生成验证码、图片通过流的形式响应到前端
一、简介二、代码实现2.1 Pom依赖 <!-- 验证码 --> <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> <exclusions> <原创 2021-09-15 17:04:57 · 592 阅读 · 0 评论 -
深入理解Java虚拟——GC垃圾收集技术
文章目录如何确定垃圾?1.引用计数法2.可达性分析法垃圾收集算法标记清除算法(Mark-Sweep)复制算法(copying)标记整理算法(Mark-Compact)分代收集新生代与复制算法老年代与标记整理算法Java虚拟机(JVM)你只要看这一篇就够了!如何确定垃圾?1.引用计数法在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单 的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用,如果一个对象被引用了了,那么原创 2021-06-06 22:02:22 · 164 阅读 · 2 评论 -
Java IO及BufferedReader.readline()的Bug
文章目录IO流BufferedReader.readline()方法Bug源码IO流流 : 流是一组有序的,有起点和终点的字节集合,是对计算机中数据传输的总称。即数据在两个设备间的传输称为流,流的本质是数据传输。Java-IO流BufferedReader.readline()方法Bug错误代码: File testTxt = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/test.txt");原创 2021-03-03 14:14:29 · 914 阅读 · 1 评论 -
Java集合
文章目录一、集合结构二、List2.1 ArrayList(有序、数组、查找更新效率高)2.2 Vector(数组、线程同步、效率低)2.3 LinkedList (有序、链表、添加删除效率高)三、Set3.1 HashSet(无序、去重)3.1.1 LinkedHashSet(插入顺序、去重)3.2 TreeSet(有序、去重)四、Map4.1 HashMap(数组+链表+红黑树)4.1.1 LinkHashMap(记录插入顺序)4.2 ConcurrentHashMap(线程安全、效率高)4.2.1原创 2021-03-02 17:45:39 · 194 阅读 · 0 评论 -
Java注解
文章目录一、概念二、4 种标准元注解三、自定义注解四、注解处理器五、注解结合切面实现其他功能一、概念Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation对象,然后通过该 Annotation 对象来获取注解中的元数据信息。二、4 种标准元注解元注解的作用是负责注解其他注解。 Java5.0 定义了 4 个标准的 meta-annotati原创 2021-02-26 15:23:22 · 115 阅读 · 0 评论 -
SpringBoot自定义注解+AOP实现用户操作行为记录
文章目录一、介绍二、pom依赖三、自定义注解四、切面类五、实体类六、Controller测试一、介绍需求:使用AOP切面,将用户所有的操作行为记录下来。二、pom依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <vers原创 2021-02-26 12:50:17 · 753 阅读 · 0 评论 -
Java反射
文章目录Java反射概念Java 反射 API获取 Class 对象的 3 种方法通过class对象创建对象实例Person和StudentJava反射概念在 Java 中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法,并且对于任意一个对象,都能够调用它的任意一个方法。这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制,很多优秀的开源框架都是通过反射完成的。Java 反射 API反射 API 用来生成 JVM 中的类、接口或则对象的信息。Clas原创 2021-02-26 10:29:31 · 110 阅读 · 1 评论 -
Java异常
文章目录异常分类异常处理抛出捕获Throw 和 throws 的区别全局异常处理及自定义异常异常分类Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 ExceptionError 类是指 Java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。Exception 又有两个分支,一个是运行时异常 RuntimeException,一个是编译器异常CheckedException。原创 2021-02-25 19:27:17 · 148 阅读 · 0 评论 -
Java将视频文件、图片文件转Base64编码
文章目录一、将视频通过Base64编码转成Txt文本二、从Txt文本中读取Base编码后的视频媒体信息一、将视频通过Base64编码转成Txt文本通过FileUtils.openInputStream()将视频文件转化成输入流。然后通过IOUtils.toByteArray()直接将流经过Base64编码为String。最后通过FileWriter直接将String写入即可。 @Test public void test() throws IOException { Stri原创 2020-12-24 19:01:33 · 3339 阅读 · 1 评论 -
什么是幂等性
文章目录一、介绍什么是幂等性?什么是接口幂等性?为什么需要实现幂等性?引入幂等性后对系统有什么影响?二、Restful API 接口幂等性如何?方案一:数据库唯一主键实现幂等性方案二:数据库乐观锁实现幂等性方案三:防重 Token 令牌实现幂等性三、代码TokenUtilService测试一、介绍什么是幂等性?幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相转载 2020-12-22 15:15:32 · 4367 阅读 · 0 评论 -
Java枚举的学习
一个简单的枚举public enum UserRole { //系统管理员 ROLE_ROOT_ADMIN, //订单管理员 ROLE_ORDER_ADMIN, // 普通用户 ROLE_NORMAL}自定义扩充枚举上面的枚举列子非常简单,仅仅只是单值的情形,而实际项目中用枚举往往只多值用法,比如,在里面加入角色名-角色编码的对应关系,这也是实际项目中常用的用法。public enum UserRole2 { ROLE_ROOT_ADM原创 2020-12-16 15:18:49 · 233 阅读 · 0 评论 -
Java的序列化与反序列化
序列化是干啥用的?序列化:把Java对象转换为字节序列。反序列化::把字节序列恢复为原先的Java对象。@Data@Builderpublic class Student implements Serializable { private String name; private Integer age; private Integer score;}package com.lsh.util;import com.lsh.model.Student;i原创 2020-12-16 10:58:46 · 271 阅读 · 0 评论 -
使用FastJson将Json字符串解析为对象
Fastjson的用法一、介绍漏洞描述:影响版本安全版本二、依赖三、语法对象转jsonjson转对象一、介绍近日,阿里云应急响应中心监测到fastjson爆发新的反序列化远程代码执行漏洞,黑客利用漏洞,可绕过autoType限制,直接远程执行任意命令攻击服务器,风险极大。漏洞描述:fastjson采用黑白名单的方法来防御反序列化漏洞,导致当黑客不断发掘新的反序列化Gadgets类时,在autoType关闭的情况下仍然可能可以绕过黑白名单防御机制,造成远程命令执行漏洞。经研究,该漏洞利用门槛较低,可绕原创 2020-09-18 09:11:19 · 1524 阅读 · 0 评论