自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(147)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java 多线程和锁知识笔记系列

说到Java的运行,就离不开进程和线程,这两个概念其实也是所有编程语言的核心。无论是什么语言,归根结底就是在操作CPU,让CPU分配相应的计算资源给应用程序。而线程就是CPU能够调度和分派的基本单元,多个线程组合在一起做一件事情就变成了进程。既然有了多线程,那么如何保证数据一致性,保证线程有序性就成了Java编程中的重中之重,因此又有了锁的概念。可以说线程和锁是Java编程中基础的基础,但是由于其不好理解因此很少会被当作Java的基础去介绍和讲解。

2021-01-18 16:26:48 389

原创 Mysql优化-深度讲解系列目录

前言笔者相信大多数同学都清楚Mysql的索引(Index)对查找数据的速度提升是有很大帮助的,了解的更深入的一些的同学可能也知道Mysql的索引模型是B+树。但是笔者发现网上对于这些知识非常的琐碎,不利于新入门的同学理解Mysql 索引底层的运作机制。本篇博客就是要从InnoDB开始一步一步的推导到Index的原理,当然这些都是笔者个人的理解和学到的内容,如果有错误的地方,欢迎大家指正,互相进步。【Mysql深度讲解InnoDB引擎与Index索引(一)】主要内容:InnoDB数据加载的原理,Inno

2020-12-11 15:41:27 654

原创 Apache Kafka API AdminClient 目录

前言最近工作上需要使用Java开发一个操作Kafka的Portal,因为使用命令行去操作比较反人类,尤其是需要进行大量的增删操作的时候。所以研究了一下Apache提供的官方JAVA API应用到了Portal上。在实施的过程中,发现这部分网上可用资料也比较稀少,即便找到几篇也十分的不详细,或者版本比较老旧,或者还在用Zookeeper提供的那一套API,更有甚者干脆互相抄,所以就决定写一个系列希望能帮助到大家了解AdminClient的使用。笔者使用的Porm依赖如下:<dependency&g

2020-10-12 17:36:38 2126

原创 Spring解读系列目录

最近因为工作需要笔者从官网从源码中学习了大量的Spring框架的内容,学习过程中发现有些同事对于怎么学习框架非常的迷惑和吃力,花了大量的时间也没有什么好的效果。我相信网上的各位同学一定也有这样的困惑。其实笔者认为学习框架固然枯燥,但是如果有钻研的劲头其实也可以做到很有成就感。看过笔者之前的贴子的同学应该有一个感觉,笔者进行这些理论研读的时候总是喜欢做一些小例子进行辅助理解。其实这也是笔者学习框架的一个特点吧,如果看到一个知识点,笔者会比较倾向把这个知识点模拟出来,然后通过对比大神的源码进一步分析理解,以达到

2020-08-27 11:04:01 2204

原创 Zookeeper 源码解读系列目录

前言由于Zookeeper 源码解读系列越写越多,文章内的连接已经不足以满足整理和检索这一个系列了。所以笔者决定单抽出一篇帖子来统一整理

2020-07-18 13:09:09 974

原创 简单实现一个Java的Retry方法

前言最近有一个需求,要调用外部API满足业务逻辑,然后就用到了重试机制,又联想到不止API,其实很多中间件,比如Reids、各类MQ、Kafka,这些涉及到连接失败的读取写入需求都应该有重试机制。虽然最终需求使用了Spring自带的Retry机制,但是这一套还是太重了,思考了下就写了一个简易Retry功能分享出来。主要是利用Java的lambda表达式和线程接口实现有返回值和无返回值的重试。代码public class Retry { public static <T> T re

2022-02-07 15:49:21 1463

原创 Java8使用Supplier启动ScheduledThread

前言项目开启立即启动定时任务是很多项目都会遇到的一个需求,如何利用Java提供的函数优雅的写出来,则十分考验一个猿人的功底。Supplier + ScheduledExecutorServiceJava8中给我们提供了一系列的函数式接口,能够活用这些函数式接口减少代码的冗余,使得代码更加易读就十分考验开发的功底,今天结合一个Run起来就批量启动的定时任务项目需求,做一个Supplier + ScheduledExecutorService的组合,直接贴代码供大家参考。先简单写两个任务类作为模拟定时启

2022-01-25 15:51:25 515

原创 object references an unsaved transient instance的一个解决思路

前言今天在测试环境上遇到这个问题,但是本地无法模拟出来这个问题,且网上解决办法完全不可参考,因此留下此文帮助不知所错的各位小伙伴们。本文涉及到的代码皆是伪码,涉及到的类也都是临时举例所用,只是提供一个追查类似问题的思路。首先当然要说一下,这个原因大概率还是Spring-JPA的@ManyToOne的注解的引发,网上有大把的关于如何强制持久化的例子,但是大部分都是告诉大家直接使用@ManyToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE})设置就好

2021-12-02 20:01:10 927

原创 object references an unsaved transient instance - save the transient instance before flushing 解决过程。

前言本篇博客记录一个Spring JPA报错的解决方案。这个报错源自于一个需求的的改动,由于原始的接口执行过于缓慢,所以要改造成为异步通知模式,也因此遇到了这个报错,浪费了一上午时间。情景还原由于涉及到公司内部代码不便展示,以伪码还原整个过程。首先先把原本的结构模拟出来,以下类、方法皆为虚构,用于描述问题:@Entitypublic class Student{ @Id private long id; private String name; @ManyToOne priavte Sc

2021-08-31 16:08:48 1753

原创 Apache Kafka API AdminClient Scram账户的操作(增删改查)

很久没有更新Kafka API相关的文档了,因为笔者工作变动Kafka这部分内容在工作中接触的就相对于之前少了一些。但架不住kafka官方还是一如既往的勤奋,官方操作Scram账户的创建与删除这部分已经更新了好久了,这次也算是填坑吧,主要就是针对alterUserScramCredentials方法做一个功能说明和demo。给网上少之又少的Kafka API中文使用教程做个增补,本次基于Kafka API 2.8.0,同时适用于2.7.0版本。

2021-08-01 12:46:50 1477 8

原创 Macos下安装SZ RZ命令工具以及报错处理

这篇帖子就是集合了笔者在安装这俩命令时候遇到的坑以及处理办法。

2021-07-26 20:26:28 1693 2

原创 Java 线程知识笔记 (十二) 线程之间数据交互与顺序实例

前言考虑到之前写的博客太过于偏重理论性,这篇博客是Java线程的一个小的应用实例。我们的例子中会应用到线程中的wait,notifyAll,synchronized,volatile等等线程方法和关键字,来实现这个功能,也可以更好地让大家体会到这些线程相关的理论内容,在实际运行中有什么样子的表现。最后也会用Semaphore去从另一个思路实现相同的功能,用来提供另一种思路。更多线程知识内容请点击【Java 多线程和锁知识笔记系列】场景场景大意是:现在有三个线程,线程t1输出A,线程t2输出B,线程t3

2021-04-13 10:20:53 219

原创 Java 线程知识笔记 (十一) 实例区分synchronized锁住this、对象与类锁

笔者在【synchronized 用法与原理分析】一文中详细的讲解了synchronized的原理和用法,但是最近发现其实深究起来有些细微的方面还是不够牢固,比如synchronized锁住this,锁住普通对象,类锁等等,在实际使用中的具体表现并没有一个直观的展示。因此这篇博客就是对这部分内容进行一个展示,从实例出发来探究synchronized锁的种种表现,希望各位对synchronized有一个立体的认识。

2021-04-10 17:13:42 633

原创 Java 实例区分右移>>, 无符号右移>>>与<<左移

最近一段时间在研究算法,不可避免的就会涉及到Java中对数字的各种左移与右移的运算,同时这部分内容在JDK源码中也涉及不少,尤其是List,Map的扩容机制都使用到了这部分,但是在查找相关资料的时候,发现很多博客写的太过于理论,并不利于理解,笔者希望能从代码上给大家提供一个新的理解思路。博客将会从正负数,int,long等几个角度去分别说明其中的区别。

2021-04-08 15:44:54 291

原创 Eclipse SpringBoot Maven 打包所有依赖到Jar包

前言发现网上好多帖子内容过于陈旧,基本上没啥参考价值。其实这个问题很好解决,写出来共给后来人一个新的参考。笔者用Eclipse+Maven打包的项目是SpringBoot项目,打包出来含有依赖的Jar能够直接用java -jar xxx.jar命令运行。Maven打包成为含依赖的Jar包第一步:Maven Clean 等待运行完,显示SUCCESS。第二部:Maven Generate-Sources 等待运行完,显示SUCCESS。第三步:Maven Install 等待运行完,显示SUCC

2021-03-03 13:42:09 673

原创 Apache Kafka API AdminClient Scram账户的创建与删除

由于Apache官方一直没有提供AdminClient中对账户这一块的操作,因此这部分大多数时候都是用命令行去操作的,但是命令行毕竟不是很方便。为了解决这部分问题,笔者去读了Kafka Scala的源码,从中梳理出来这部分内容供给大家参考。

2021-03-02 15:48:23 1476 10

原创 Eclipse把Git项目转换成Springboot项目

前言这几天公司idea的license出问题了,不得已只好把项目迁移到eclipse去开发,折腾了好久才弄成。把注意事项总结下,省的以后在需要了。其实Git给我们提供了这种标准以后,我们可以在任何编译器里进行转换操作,仅仅是Idea项目转换为Eclipse项目,因此本文的标题才叫做Git项目转换成Springboot项目。这种形式十分类似于Web开发中前后端分离的概念,我们并不会把代码绑定到某一个编译器里,而是生成一个通用格式供给所有编译器使用,这么看来Git真实太伟大了。Spring Tools首先

2021-02-26 12:26:47 984

原创 Kafka 如何给集群配置SSL认证

主要提供一个实例说明给Kafka集群配置SSL/SALS双重安全认证,包括配置文件内容,验证的例子,报错处理等等内容。

2021-02-23 17:27:52 3160 3

原创 Kafka 如何给集群配置Scram账户认证

详细描述Kafka如何配置一个Scram账号认证的访问方式,以及注意事项,错误解决等等。

2021-02-19 20:28:23 5432 7

原创 Apache Kafka API AdminClient 查看账户权限

主要介绍了如何查看Kafka中账户的权限,以及权限的内容

2021-02-04 18:17:20 1137

原创 Apache Kafka API AdminClient Group ID 创建、删除、查询

介绍功能如下:查询Group ID列表,指定Group ID查询信息,创建Group ID并绑定到账户,删除Group ID并解除账户绑定等等。

2021-02-04 17:39:24 3488 2

原创 Apache Kafka API AdminClient 修改Topic的Partition

前言好久没有更新AdminClient的博客,主要是一直在摸索怎么用的,官网写的太简略,只能一边研究官网,一边研究源码注释。而且KafkaAPI更新速度飞一样,版本兼容也是个问题,刚刚知道怎么用的,版本过时了又得看新的。而且有些功能API没有提供,就只能去钻研Scala源码,好在和Java差不了很多,虽然不会写,但是勉勉强强能读懂,对于笔者正在开发的项目来说真是崩溃了。所以等笔者把这些内容整理整理,让大家操作Kafka更加顺手。下面就是开始博客正文了,更多内容请点击【Apache Kafka API Ad

2021-02-03 19:34:51 1618

原创 Java 线程知识笔记 (十) 常用的锁工具

本篇简单的介绍了ReentrantLock,ReentrantReadWriteLock,CountDownLatch,CyclicBarrier,Semaphore等等官网解释,以及使用场景和例子

2021-01-25 18:27:13 371

原创 Java 线程知识笔记 (九) 并发框架AQS详解

之前说锁的升级的时候,说到了自旋锁会空转几次尝试等待获取资源,其实这一系列的动作是有一个规范的这个规范叫做同步发生器AbstractQueuedSynchronizer ,简称AQS。同步发生器是用来构建锁用的,可以说是Java中同步组件的基础,在Java JDK的JUC包中:java.util.concurrent。我们常用的ReentrantLock,Semaphore等等用的都是这样一个架构,可以说是这些Lock工具的一个基础。

2021-01-22 17:01:04 192

原创 Java 线程知识笔记 (八) 单例模式的演变

前言很多同学都在学习Java的过程中听说过单例模式,或者在面试中遇到过类似的问题。单例模式算是老生常谈的问题了,其实就是一句话能说清楚事情:所谓单例模式,就是实例化过程中只实例化一次。无论有多少线程来访问,都只实例化一次,多个线程调用已经实例化好的对象,而不是重新创建一个。虽说简单但是还是有不少细节要深究一些,比如前面有些文章里说的DCL就是单例模式的实例之一。为什么要有单例模式既然要说单例模式还是从零开始,设想这样一个场景:远程办公,有一个任务文档要写,很多同事必然要打开这个文档去输入内容,如果给每

2021-01-20 21:59:36 176

原创 Java 线程知识笔记 (七) volatile实现机制

前言在任何编程语言中,多线程操作同一个数据都会带来数据不一致的问题,这是由于在多线程的情况下CPU分配时间片并不是按照线程创建顺序去分配的,具有一定的随机性。一个任务被首先创建出来,并不意味着这个特定的任务一定会首先执行,为了解决并发状态下数据不一致的问题,就有了Lock、synchronized、volatile等等一系列的解决方法。在这一系列之前的博客【Java 线程知识笔记 (五) synchronized 用法与原理分析】中我们已经详细的解析过synchronized实现原理和使用方法,本篇则会侧

2021-01-19 21:57:09 714 1

原创 Java 线程知识笔记 (六) 锁与锁的状态升级

本篇主要说了锁的概念,锁在对象头中格式,锁的状态,自旋锁,锁的升级等等内容。

2021-01-18 16:04:21 179

原创 Java 线程知识笔记 (五) synchronized 用法与原理分析

说到Java就必然会考虑到线程的问题,无论工作中学习中有没有直接接触过多线程开发,手写过线程调用,在这个底层已经到了多核多缓存的硬件时代,多线程是任何码农都绕不过的一个事情。只要有线程,就会有并发的现象,也同时会产生数据不一致。那么对于需要使用同一个数据的两个线程,就会产生冲突,那么就引出了锁的概念。锁有很多种本篇会针对性的说下synchronized这个关键字是如何保证线程的有序进行。

2021-01-18 15:44:34 346 2

原创 Java 线程知识笔记 (四) Executor与ThreadPool 其二

前言上一篇我们从源码里面探究了一个线程在线程池中是如何执行的,由于线程池有一个很大的框架,仅仅通过这点东西就说明白线程池,尤其是对于初学者来说更是难以理解。因此这篇将会对源码讲解中遗漏的一些内容,比如线程池的状态,以及线程池中线程是在哪里创建的等等做一个补漏,同时对线程池的基本内容进行一个概念性的阐述。

2021-01-13 21:58:50 144

原创 Java 线程知识笔记 (三) Executor与ThreadPool 其一

基本上已经把Java中线程有关的基础知识说了个大概。考虑到开启线程是一个开销很大的事情,如果每个子线程都在使用的时候做初始化等待分配等等一系列的事情,就会非常的影响程序的响应速度。为了解决这个问题,Java也是从1.5开始提出了线程池(ThreadPool)的概念。本篇就会着重对线程池进行一个讲解。

2021-01-11 15:55:17 323

原创 Java 线程知识笔记 (二) Callable与Future

本篇把有关Callable接口,Future接口和FutureTask类是如何使用的,以及结果集在底层是如何获取的,线程在FutureTask中的状态划分等等内容,从源码层面做了一个详细的分析。

2021-01-07 19:07:13 221

原创 Java 线程知识笔记 (一) Thread与Runnable

说到Java的运行,就离不开进程和线程,这两个概念其实也是所有编程语言的核心。无论是什么语言,归根结底就是在操作CPU,让CPU分配相应的计算资源给应用程序。而线程就是CPU能够调度和分派的基本单元,多个线程组合在一起做一件事情就变成了进程。线程可以说是Java中基础的基础,但是由于其不好理解因此很少会被当作Java的基础去介绍和讲解。这篇博客会对Java中线程的使用和部分方法源码做一个整理,对自己是一个基础巩固,顺带希望能帮助其他人更好的理解线程。

2021-01-06 18:17:13 245

原创 Mysqls深度讲解 – 锁

前言上一篇博客【Mysqls深度讲解 – 事务】详细说的了Mysql中的事务,以及多版本并发控制的实现方式,基本上多版本并发控制是为了提高数据库的并发效率而设置的。有了多版本并发控制的保证,Mysql在读数据的过程中就不需要一直对着某个资源进行加锁操作,依然可以获取数据保证事务正常进行。读数据可以使用多版本并发控制,但是写数据包括串行化 (Serializable)隔离级别就不能这么做了,这种情况下只能使用锁。因此锁依然是Mysql中必不可少的组成部分,本篇就详细讲一下Mysql中的锁。更多Mysql调优

2020-12-25 18:21:41 225

原创 Mysqls深度讲解 – 事务

本篇详细的讲解了什么是事务,以及Mysql中事物的操作开启、提交、回滚等等。然后针对隔离性做了一个详细的讲解,阐明了四种隔离级别的实现方法,以及特性优缺点。最后针对已提交读 (Read Commit)和可重复读 (Repeatable Read)引出Mysql中版本链的实现,以及ReadView的作用。

2020-12-23 17:08:25 308 1

原创 一个非常好用的数据结构在线工具地址,其他内容没有

这是一个非常好用的数据结构在线工具地址,其他内容没有

2020-12-22 18:09:20 98

原创 Mysql深度讲解InnoDB引擎与Index索引(四)

上几篇已经从理论上说明了索引能够对我们查询的效率起到比较大的帮助,以及一些基本的索引创建原则,那么有没有一个比较好的办法直观的比较两个索引的效率呢?当然是有的,它就是索引的选择性(Selectivity),指的是:不重复的索引值(也叫基数,Cardinality)与表记录数的比值,本篇就聊聊如何建一个高效的索引。

2020-12-22 17:59:58 321

原创 Mysql深度讲解 – 派生表

Mysql在查询语句中一般会使用自建表,这种自建表有临时表,派生表以及在之前的子查询优化的博客里面介绍的物化表。本篇就对遗漏的派生表做一个介绍,作为Mysql知识的补充。

2020-12-22 15:00:44 3666

原创 Mysql深度讲解 – explain关键字(二)

上篇对explain中的关键字table、id、select_type、type等四个字段做了详细的解释,本篇就把剩余的possible_keys、key、key_len、ref、rows、filtered、Extra几个字段说清楚他们的作用。

2020-12-22 11:27:37 290

原创 Mysql深度讲解 – explain关键字(一)

Mysql中给我们提供了explain关键字去分析一条sql执行的大概过程。比如工作中间常常会遇到执行效率很低的”慢sql”。有些sql语句一直执行的就很慢,有些sql只是偶发性的慢。所以有时候可能sql执行得慢并不是sql的问题,而是服务器资源被占满(比如表被锁,网络问题等等),无法获取执行sql的资源导致的慢,这时候其实还好。那么如果一个sql一直运行的效率比较低,那么就必须要用到explain关键字去分析sql,本篇就是要详细的说下explain关键字。

2020-12-21 17:25:52 324 1

原创 Mysql深度讲解 – 子查询优化

一般来说在正常的业务情况下大多数sql语句都会有子查询,一个表从另一个表里查询数据,本篇会通过几个例子列举这样的sql语句的优化思路。

2020-12-16 15:00:51 2131 1

ngdbc-2.4.59.jar

com.sap.db.jdbc.Driver ngdbc-2.4.59.jar SAPHANA数据库驱动

2019-08-14

Mars4.5.jar

最新的MARS包,打开即可用,极好的汇编工具,用于学习computer architecture必备工具

2016-08-31

空空如也

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

TA关注的人

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