自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 kafka知识点整理

目录消息队列的两种模式点对点模式发布订阅模式kafka重要概念消息队列的两种模式点对点模式每个消息只有一个接收者,一旦消息被消费,消息就会删除发布订阅模式每个消息可以有多个消费者,消费完不会被删除,消息默认保存7天(可指定配置log.roll来修改);同一个消费者组内的多个消费者可以当作一个整体,他们共用一个offset(即不会重复消费消息);kafka重要概念producer(生产者)生产者负责往MQ中写入消息consumer(消费者)消费者负责从MQ中读

2021-09-21 22:29:46 313

原创 JAVA并发编程学习笔记10-volatile

JAVA并发编程学习笔记10-volatile概念JMM(JAVA内存模型)常见概念可见性指令重排序概念volatile关键字是由JVM提供的最轻量级的同步机制,它能保证内存可见性和防止指令重排序。JMM(JAVA内存模型)常见概念原子性:保证指令不会受到上下文切换的影响有序性:保证指令不会受到CPU并行优化的影响可见性:保证指令不会受到CPU缓存的影响可见性多核CPU,由于CPU速度远大于内存速度,故在CPU和内存之间,存在缓存,可以一定程度降低两者之间的差距。但也因此出现了主存和缓

2020-12-22 23:41:15 224 1

原创 JAVA并发编程学习笔记09-LockSupport

JAVA并发编程学习笔记09-LockSupport基本使用关键方法1.先调用park()再调用unpark()方法2.先调用unpark()再调用park()方法原理区别wait()和notify()基本使用关键方法park():使当前线程暂停,类似wait()方法unpark(Thread thread):唤醒指定线程,类似notify()方法1.先调用park()再调用unpark()方法@Slf4jpublic class Test { public static voi

2020-12-21 17:54:28 168

原创 JAVA并发编程学习笔记08-ReentrantLock

JAVA并发编程学习笔记08-ReentrantLock区别synchnorized二级目录三级目录区别synchnorized可中断可设置超时时间可设置公平锁需要手动开关锁支持多个条件变量二级目录三级目录

2020-12-17 16:57:05 140

原创 JAVA并发编程学习笔记07-死锁

JAVA并发编程学习笔记07-死锁什么是死锁如何避免死锁方法1:按相同顺序加锁方法2:设置过期时间什么是死锁由于直接将synchronized关键字加在方法上,会造成同步代码区域过广,导致并发效率很低,故往往会优化只加尽可能少的代码块,减少锁的粒度,但也因此会出现死锁的情况。@Slf4jpublic class Test03 { public static void main(String[] args) { Object lockA = new Object();

2020-12-12 00:12:01 128

原创 JAVA并发编程学习笔记06-synchronized及锁优化

JAVA并发编程学习笔记06-synchronized及锁优化monitor二级目录三级目录monitor二级目录三级目录

2020-12-07 18:05:20 128

原创 JAVA并发编程学习笔记05-线程通信

JAVA并发编程学习笔记05-线程通信两个线程之间的通信(保护性暂停)多个线程之间的通信(消息队列)两个线程之间的通信(保护性暂停)针对两个线程实现信息通信,可以通过中间对象实现。@Slf4jpublic class Test03 { public static void main(String[] args) throws InterruptedException { GuardedObject guardedObject = new GuardedObject();

2020-12-04 16:54:14 100

原创 JAVA并发编程学习笔记03-线程状态

线程状态操作系统层面JAVA层面区别和联系操作系统层面1.初始状态:线程创建但未运行2.可运行状态:处于可以运行的状态,但未获取到时间片,一但系统分配时间片,就会转换为运行状态3.运行状态:处于正在运行的状态4.阻塞状态:调用了阻塞API,如处于IO操作等,系统会自动让其进入阻塞状态,不会进行时间片竞争,直到被唤醒,然后变为可运行状态5.终止状态:程序运行结束JAVA层面定义在Thread类的State枚举中,分为如下6种。1.NEW:线程创建了,但未调用start()方法2.RUN

2020-12-01 14:48:51 79

原创 JAVA并发编程学习笔记04-多线程常用方法

多线程常用方法Object类waitnotifynotifyAllThread类joinsleepinterruptObject类waitwait():无期限的等待,直到被notify()或notifyAll()方法唤醒,或被interrupt()方法打断;wait(long timeout):效果同wait(),区别在于最多等待指定毫秒值的时间;wait(long timeout, int nanos):同上,多一个参数是指纳秒值,但实际上该纳秒值并不准确,无论输入多少,相当于毫秒值加一;

2020-11-30 18:32:32 127

原创 JAVA并发编程学习笔记02-创建线程的三种方式

创建线程的三种方式方式一:继承Thread类方式二:实现Runnable接口方式三:FutureTask + Callable总结方式一:继承Thread类继承Thread类,重写run方法public class Test01 { public static void main(String[] args) { new Task01().start(); }}class Task01 extends Thread { @Override publ

2020-11-29 22:28:02 130

原创 记录关于serializable接口的重温理解

背景之前使用serializable接口,仅仅知道它是用来序列化的,但为什么要实现,没思考过,今天想到了,就深入的理解了下,在此记录。serializable的作用简单的说,序列化和反序列化其实是对象和二进制流的相互转换,像什么网上很大博客写的,什么写入Mysql的时候啊,什么网络传输的时候啊,压根没关系,那些本质都是调用对象的get、set方法,跟序列化不沾边,平常Web开发,只有在将对象写入磁盘的时候,也就是IO相关的操作才会涉及。serializable的使用场景这里有一篇博客写的比较精准

2020-10-10 13:55:01 103

原创 AOP失效的原因之一(踩坑)

背景项目需求,需要检测其他同事的部分功能,自然想到的切面编程,按照网上的流程,很容易就完成了AOP的触发,但最近突然发现,之前的一个AOP突然就失效了切面代码@AfterReturning(pointcut = "save()", returning = "result")publicvoid afterApiChange(JoinPoint joinPoint, SwaggerResultUtil<String> result) { // 业务代码}切点代码public

2020-09-29 13:59:44 1274

原创 自定义多数据源JDBC连接池

背景公司需要对各个客户的数据库进行统一管理,故涉及到对多个不同数据库进行连接,传统的数据库连接池无法满足需求,故结合网上的自定义数据库连接池,进行的改进,代码如下注意由于代码处于公司环境,有直接使用肯定是会有报错,相信这种简单的修补是绝大部分开发同志的基本功,我也就没有单独大环境去调整,重在整体架构代码一:自定义连接类import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.sql.*;import java.u

2020-08-24 16:39:25 819

原创 tk.mybatis默认insert方法,使用@GeneratedValue无效的坑,提示id不能为null

坑了一小时,试了各种配置,最后发现,是数据库没有为ID设置自增,记录一下。

2020-08-07 00:54:08 1893 2

原创 关于页面预览和pdf导出功能的实践和思路

方案一:前端爬虫这个方案是基于node的一个工具,名字叫nightmare(没有深入了解,可自行搜索),通过后端启动调用,传入指定的url,就能将对应的网址爬取成pdf,这个方案是我个人感觉很不错的一种。优点:pdf高清,无需配置对应的模板缺点:个人感觉其实没啥大的缺点,可能需要点学习成本。公司由于护网行动,node直接访问url时,走域名访问,端口不能回流,走ip访问,nginx不给开ip访问权限,最终不了了之。方案二:基于开源软件wkhtmltox 网上有很多相关资料,官网使用教程也很

2020-07-15 15:21:42 349

原创 Mysql如何以每两小时为维度进行统计

Mysql统计每两小时

2020-07-15 14:55:41 2009

原创 JAVA并发编程学习笔记01-基本概念

JAVA并发编程学习笔记进程和线程的区别并发编程的三个概念可见性功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入进程和线程的区别百度往往得到的答案是:“进程是资源分配的最小单位,线程是CPU调度的最小单位”,十个有九个看不明白,

2020-06-24 16:48:42 147

原创 排序算法---堆排序(JAVA)

思路代码// 堆排序public static void heapSort(Integer[] arr) { heapSort(arr, arr.length - 1);}/** * * @param arr 要排序的数组 * @param lastIndex 数组中未排好序的最后一位索引 */private static void heapSort(I...

2019-08-15 23:17:45 153

原创 排序算法---归并排序(JAVA)

思路代码// 归并排序public static void mergeSort(Integer[] arr) { mergeSort(arr, new int[arr.length], 0, arr.length-1);}// 归并排序private static void mergeSort(Integer[] arr, int[] temp, int start,...

2019-08-15 22:08:50 102

原创 二叉树的遍历(JAVA)---前序、中序、后序、层序

二叉树对象: class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }前序、中序、后序:最初看到二叉树遍历时,第一反应就是从上往下一层一层的遍历,也就是所谓的层序遍历。后来看了许多博客的遍历顺序,就很纳闷,这个莫名其妙的顺序是怎么记得...

2019-08-13 23:29:38 148

原创 排序算法---快速排序(JAVA)

思路代码 public static void quickSort(Integer[] arr) { quickSort(arr, 0, arr.length-1); } public static void quickSort(Integer[] arr, int left, int right) { if (left > right) { ret...

2019-08-13 22:46:17 108

原创 排序算法---希尔排序(JAVA)

思路代码 public static void shellInsert(Integer[] arr) { // 设置初始步长为数组长度的一半 int distance = arr.length / 2; while (distance > 0) { for (int i = 0; i < distance; i++) { // 如果该组数据...

2019-08-13 22:32:34 115

原创 常用消息队列(ActiveMQ、RabbitMQ、RocketMQ、Kafka)及其特点

1.为什么要引入消息中间件?削峰若系统在部分时段有大量超出系统压力上线的请求进入,MQ可以通过将短期压力分散开来。例如每日19:00公司有抽奖活动,每分钟有20万个请求,持续10分钟,而公司的抽奖系统只能支撑每分钟10万的请求,这时候可以先将请求积压在MQ中,待活动结束,一共积压100万条消息,然后再由抽奖系统花费10分钟慢慢的消化MQ中的消息。这就是削峰,将原本10分钟内的请求分摊到20...

2019-08-12 23:13:27 274

原创 VMware创建Linux虚拟机

https://www.centos.org/download/1.VMware的安装(VMware 15)一直以来都是用的这款软件配置的虚拟机,然后用的也挺方便,个人使用,用的网友分享的激活码,网上度娘一大堆,随便试了一个就成功了,软件版本是VMware 15。安装比较简单,直接下载了输个激活码就OK了,这里就不再作过多的介绍。注:之前有过因为WMware版本问题导致虚拟机怎么都起不...

2019-07-21 21:47:32 223

原创 排序算法---插入排序(JAVA)

思路代码 public static void main(String[] args) { Integer[] arr = new Integer[]{1,1,3,5,2,1,2,4,-1,1,7}; insertSort(arr); System.out.println(new ArrayList<>(Arrays.asList(arr))); ...

2019-07-16 00:20:09 114

原创 排序算法---选择排序(JAVA)

思路代码 public static void main(String[] args) { Integer[] arr = new Integer[]{1,1,3,5,2,1,2,4,-1,1,7}; selectSort(arr); System.out.println(new ArrayList<>(Arrays.asList(arr))); }...

2019-07-15 23:55:27 116

原创 排序算法---冒泡排序(JAVA)

思路代码(注释)public static void main(String[] args) { Integer[] arr = new Integer[]{1,1,3,5,2,1,2,4,-1,1,7}; bubbleSort(arr); System.out.println(new ArrayList<>(Arrays.asList(arr)));}// 冒泡排序...

2019-07-15 23:20:53 92

原创 JVM内存区域

线程私有的数据区域的生命周期与线程相同,依赖用户线程的 ‘启动/结束’ 而 ‘创建/销毁’,(在Hotspot VM内,每个线程都与操作系统的本地线程直接映射,因此部分线程私有 的内存区域随着线程的’创建/销毁’而’创建/销毁’)线程私有1.程序计数器一块较小的内存空间,可以看作当前线程所执行的字节码行号的指示器(想象debug时的场景),若执行的是Native方法,则计数器的值为空,...

2019-07-02 21:34:38 122

原创 JS中关于数组的相关api

1.遍历1.erery() : 返回值为boolean类型,每次遍历的结果都为true则返回true,有任何一个返回不为true时,则返回false;var array = [1, 2, 3, 4, 5];var flag = array.every(function (element, index, arr) { // 不写return时返回undefined if (e...

2019-07-01 23:12:10 305

原创 JAVA提高ZXING对图片中的二维码的识别率(第二弹)

背景继上一次使用做二维码识别,公司需要高识别率的二维码识别,但ZXING实在是太弱了,对于那种二维码占比很小、图片对比度不高的,识别率低的令人咋舌,后来引入了opencv,加上恶补了一些图像处理的基础知识,总算有一个能看的过去的识别率了(但公司最后还是决定去买现成的产品。。。被嫌弃!!!)思路上一篇文章说到了灰化、二值化处理图片来增加识别率,整体效果不是太明显,本次识别的主要思路是,先定位,...

2019-06-21 00:11:42 9728 7

原创 JAVA提高ZXING对图片中的二维码的识别率(第一弹)

背景java开发,公司最近需要在对凭证识别的过程中加入二维码识别,在网上搜索后,选定了两款开源工具,分别是谷歌的ZXING,以及QRcode,但本地测试后发现,QRcode相对于ZXING效果还是要差一点。但ZXING主要还是针对移动端开发多点,网上大部分用ZXING的都是android,优化相关的也都是Android相关的,诸如ZXING和ZBAR结合使用(吐槽,ZBAR好像java用不了,或...

2019-03-10 21:43:49 9266 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除