自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

老汉健身的博客

主要是一些个人总结的笔记和分享

  • 博客(119)
  • 收藏
  • 关注

原创 【ES】MySQL语法版的ES来了,搜索引擎可以如此简单

MySQL版Elasticsearch,采用Mybatis-Plus一模一样的语法即可操作搜索引擎,这可能是最好用的Es开源框架.

2021-12-15 11:17:42 4279 5

原创 【SQL管理】-Flyway数据库版本管理利器从入门到入味

数据库版本管理神器Flyway,让数据库版本变更更自动,易用!

2022-04-02 11:05:26 3878

原创 Easy-Es高阶语法深度介绍

背景:接上篇Easy-Es核心功能深度介绍,本篇带大家深入源码和架构,一起探索Easy-Es(简称EE)的高阶语法是如何被设计和实现的.这里所谓的"高阶语法"并不一定就真的高阶,仅作为区别于MySQL语法,Es独有的一些语法,比如得分排序,聚合,分词查询,权重,高亮及Geo地理位置查询等.对于MySQL中已经有的方法,在Mybatis(简称MP)中也基本都已经有设计,我可以参考其API风格,但这部分"高阶语法"并无API可参考,到底如何设计才能做到简洁好用呢?要解决这个问题,除了要了解用户..

2022-03-08 09:09:17 1969 3

原创 Easy-Es核心功能深度介绍

Easy-Es核心功能深入源码介绍,想增涨技术的同学莫错过,都是干货!

2022-03-04 14:50:34 5313 1

原创 【maven】手把手教你如何把自己的Jar上传到maven中央仓库

前言:近期开源了Mybatis-Plus的Es版(ElasticSearch):Easy-Es,在框架正式上线Maven中央仓库的过程中,困难重重,经过多次努力,总算是成功上架了.尽管目前网上不乏这类教程,但都已经过时了,现在Maven中央仓库的上传地址以及首次上传的规则都有更新(2021年官方换了新版),按前人那些老方式,不仅不能帮你上传成功,还会让你走很多弯路,误入歧途,所以特开此文,帮助有需要的同胞,少走弯路.先来说一下首次上传的核心步骤,由于步骤中的过程相对较复杂,所以先抽象下基本思路,再展

2021-12-28 16:46:23 13070 19

原创 【ES】重磅预告 这可能是最好用的ES框架

差不多有半年没发技术博客了,这期间并没有在偷懒,而是在专注一款开源框架的开发.关于ES,基本大家都在用其官方封装好的RestLowLevelClient和RestHighLevelClient进行开发,但在使用过程中发现其功能虽然十分强大,但用起来却不太友好,总结了一下主要有如下痛点:Api对开发不太友好,即便很简单的查询,也要写大量代码 对于字段名需要以字符串的方式进行查询,代码中不可避免大的出现大量魔法值,一旦模型字段名称发生改变,就需要去改代码,还可能出现漏改,导致bug 语法不通用,需要

2021-10-24 18:09:09 633 3

原创 【代码质量】码农提升代码质量的三重境界

前言:文章的开头,我要先讲个段子(真实案例),玩过拳皇的同学应该对下面这张图不陌生(一不小心暴露年龄了):然鹅就在我工作的第三年,确实碰到了这样的代码,老夫掰起脚指头数了数,该同学写的代码里有整整13层if-else,对于这段代码,我直呼遭不住,这段代码后来被流传为一段佳话,无人能接手,接手一个跑路一个,于是余叹诗为:《码皇》 --- 被shit code 坑害过的码农键盘秃头保温杯,欲敲代码产品催;垃圾代码君莫笑,古来接手几人回?从工作伊始到现在,一直在被各种"...

2021-08-31 14:12:59 460

原创 【jvm】面试官求你别再问了-死锁,内存溢出及泄漏如何监控及解决(下)

前言:上篇介绍了通过基础命令的方式来监控及解决死锁,内存溢出及泄露问题,本篇主要介绍通过工具监控及解决这些问题,毕竟工欲善其事,必先利其器,好的工具可以让监控和解决问题事半功倍.好的监控工具有很多,中大型公司基本都有自己的监控工具和体系,本篇主要介绍开源的工具,常见的开源监控工具有jdk自带的jconsole,jvisovm以及Jprofiler等,Jdk自带的监控工具我在之前的博客中有总结(),本篇的主角是Jprofiler.1.工具监控的优劣优:高效,直观,使用简单,门槛低,效果好,小白也能轻松

2021-03-23 11:15:40 719

原创 【jvm】面试官求你别再问了-死锁,内存溢出及泄漏如何监控及解决(上)

前言:最近面试发现很多面试官都挺喜欢问如何监控到线上的死锁,内存溢出及泄露,以及如何发现并解决?作为一名长期埋头工作的码农,问到这块知识点,答得不让面试官满意是很正常的,毕竟工作中的大部分情况都不是在处理死锁,内存溢出及泄露,长时间不碰的知识点实在是太容易忘了,这里再总结一番.在面试造航母,工作拧螺母的大背景下,程序员的竞争已经非常激烈了,企业需要用最少的钱,招能写的了代码,且出问题还具备解决能力的码农,吾等打工人只能硬着头皮往前冲!关于死锁,内存溢出,内存泄露的监控主要有两类方式,基础命令监控和工具监

2021-03-23 11:15:12 596 6

原创 【温故知新】-部署专题

从工作到现在,部署也经理几个阶段:石器时代(纯手工部署nohup java -jar xxx.jar &) -> 青铜时代(docker容器化部署 docker pull,docker run...)->第一次工业革命(idea集成docker插件,实现一键部署)->第二次工业革命(jenkins集成docker实现一键部署)->第三次工业革命(jenkins+docker+k8s一键部署),基本上现在市面上的互联网大厂,部署模式也逃不开"二三次工业革命"这两种方式,不过是在

2021-02-20 14:06:23 271

原创 【温故知新】-设计模式总结

前言:java一共有23种设计模式,其中常用的需要熟练掌握的大约有10种左右,剩余10几种了解即可,在合适的场景下使用设计模式不仅可以提供代码质量,对以后的代码维护和拓展也有很大好处.目录1.单例模式1.1什么是单例模式1.2单例模式的优势1.3单例模式的适用场景1.4单例模式的饿汉式和懒汉式1.5懒汉式的double-check2.工厂模式2.1什么是工厂模式2.2工厂模式的优势2.3工厂模式的适用场景2.4简单工厂模式和抽象工厂模式3...

2021-02-19 14:28:36 338

原创 【温故知新】-JUC包梳理

1.概念1.1JUC是什么1.2JUC底层AQS原理2.工具2.1线程池2.2CountDownLatch2.3CyclicBarrier2.4Semphare2.5ReentrantLock2.6Queue2.7volatile

2021-02-15 15:38:37 419

原创 【温故知新】-java开发中涉及的各种锁盘点

java开发中会碰到各种锁,这篇针对java开发中会碰到的锁进行归纳总结~1.概念1.1乐观锁,悲观锁乐观锁:比较乐观,认为存在并发的可能性比较小,所以采取乐观的态度加锁,在数据提交更新的时候才会去校验是否发生冲突,比如常见的CAS锁.悲观锁:比较悲观,认为并发存在且发生数据冲突的可能性较大,所以在整个数据处理过程中都加锁,其它线程在处理数据的时候需要阻塞,挂起.在并发和资源竞争不激烈的情况下,乐观锁的效率要比悲观锁高,在并发激烈的情况下,悲观锁更适合.1.2共享锁,排他锁悲观锁

2021-02-12 20:37:26 240 1

原创 【温故知新】-分布式微服务相关知识点梳理

1.什么是分布式,微服务,他们之间有什么区别?2.

2021-02-05 17:21:31 514 2

原创 【温故知新】-Spring相关知识点梳理

1.spring有哪些模块?spring的模块有:spring-core,spring-data,spring-web,spring-test,用下面这张网图来概括,更全面2.IOC底层实现原理IOC概念:IOC即控制反转,创建对象不再需要通过主动去new,而是通过中介(容器)进行获取,可以有效解耦.IOC实现:通过读取xml或注解中读取类的全路径等配置信息,将这些信息存放到beanDefinitionMap中,然后在用到的地方通过BeanFactory从beanDefinitio.

2021-01-14 14:04:08 395

原创 【温故知新】-MySQL相关知识点梳理

MySQL相关知识点灵魂十问目录1.mysql引擎2.mysql支持的锁3.mysql索引4.mysql索引底层数据结构5.mysql查询优化6.mysql索引优化7.事务8.分布式事务9.范式10.其它1.mysql引擎MySQL搜索引擎有十多种,常见的主要有MyIsam,Innodb,memory等myisam:不支持事务,读性能较高,支持表级锁.innodb:mysql默认的引擎,支持事务,写性能较高,支持行级锁,间隙...

2021-01-07 11:16:02 401

原创 【温故知新】-Redis相关知识点梳理

1.Redis凭什么这么快?redis之所以这么快,总起来主要有以下几点:①基于单线程的设计,避免了多线程上线文切换的时间和锁开销.②基于内存,直接在内存存取,所以很快③采用了非阻塞IO多路复用机制④Redis精心设计的基于C语音的SDS字符串,提高了性能.(SDS字符串获取字符串长度的时间复杂度仅为O(1),且减少了修改字符串长度时内存重分配的次数,关于SDS具体可以百度,限于篇幅,这里不展开)2.Redis的五大数据类型是什么?Redis支持String,Hash,Li.

2021-01-04 18:49:26 428

原创 【温故知新】-JVM相关知识点梳理

1.jvm内存模型2.java类加载机制3.线程4.JVM内存区域5.JVM运行时内存6.JAVA的四种引用类型7.GC回收算法8.GC垃圾回收器9.JVM调优10.JAVA IO/NIO

2020-07-27 20:12:24 487

原创 【代码质量】-几个可以让代码快速变优雅的小技巧,你值得拥有!

一.多使用lombok的新特性lombok对每个java后端来说应该都不陌生,但对它的使用不应该仅停留在@Data,@Getter,@Setter...上,推荐多使用以下几个注解:@Builder让类转换为建造者模式,可以让类的创建和赋值变得更优雅,特别是在该类有很多属性需要设置的时候 Employee employee = new Employee(); employee.setName("lombok"); employee.setAge(

2020-05-14 18:13:28 442

原创 【java进阶】- jdk8-14新特性你真的了解吗?

前言:jdk从1.0开始到现在已经有24个年头了,jdk的大版本也整整迭代了13版,平均下来每2年就有一个新版本,事实上自从sun被oracle收购之后,jdk的迭代速度就像搭上了快车,几乎每半年就是一个版本,截至目前已经发行到jdk13了,然鹅大部分公司到现在用的最新版本也都没有超过jdk8,由于收费和设计(面向大公司)以及学习成本,使得大多数公司的jdk的版本选择滞后,但Jdk在迭代的过程中确...

2020-04-23 18:18:01 1917

原创 【NoSQL】聊一聊Redis的持久化机制和缓存淘汰策略

前言:Redis的持久化机制和缓存淘汰策略在各大厂面试题中经常有出现,除此之外在一些场景下,了解Reids的持久化机制和缓存淘汰策略可以帮助我们更好的设计技术方案,以及解决一些实际问题,所以本篇再深入聊一聊这些不常用的知识点,以此温故知新.1.Redis的持久化机制1.1Redis有哪些持久化机制我们知道,Redis的数据是存储在内存中的,以此来保证极高的IO性能,但内存与磁盘相比最大...

2020-04-02 19:55:40 295

原创 【高级部署】-Kubernetes K8S理论篇

前言:2019年已经过去了,在2019年阿里号称双11全面上云,为什么要上云?这你得问马云,开个玩笑...因为k8s的加持,让云发挥了更大价值,k8s的提供的弹性伸缩,使得云资源得到充分利用,目前全球三大云全部都支持k8s,加上k8s本身就是谷歌的亲儿子,在这样的背景下,k8s越来越流行,作为一名开发,学习k8s迫在眉睫,所以我开始上路了,你呢?1.什么是k8s?了解k8s是什么之前,...

2020-03-16 15:26:42 6381

转载 【学习路线】-成为顶尖Java工程师必须要看的十一本书!

学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处:1. 能出版出来的书一定是经过反复的思考、雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料2. 对着书上的代码自己敲的时候方便“看完书之后再次提升自我的最好途径是看一些相关的好博文“,我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和...

2020-03-12 10:44:20 412

原创 【大数据】Elastic Search入门,看这一篇就够了!

前言:Elastics Search(以后全部简称es)入门看这一篇就够了?是的,看这一篇就可以学习到es从入门到使用到生产的相关核心点,但Es家族庞大,如果深入学习或者去啃的话,没个一年半载是不可能的,所以仅这一篇也是在开玩笑了,光是Elastics Search + Logstash + Kibana (以后全部简称ELK)技术栈就有的学了,里面还涉及到这三大神器的很多插件及监控工具,一言难尽...

2020-03-11 17:09:02 3830 2

原创 【登录及鉴权】-盘点那些主流的开源登录及权限认证框架 (下)

前言:接上篇,上篇主要讲理论,下篇讲实战,结合代码演示SpringSecurity,Shiro,Oauth,jwt token以及单点登录等当下主流的登录及权限管理.在技术上我是个喜新厌旧的渣男,全篇以截至2020年2月最新的Springboot及其它包版本为例演示.完整的项目我已上传至GitHub,如有需要可以下载下来参考,地址:1.SpringSecurity新建一个Spri...

2020-02-24 20:18:00 3555

原创 【登录及鉴权】-盘点那些主流的开源登录及权限认证框架 (上)

登录和鉴权应该是一个完整的系统中几乎必不可少的部分,虽然现在已经有越来越多的框架帮我们简化了这部分工作量,大公司更是有自己专门的登录和权限控制系统,比如阿里的BUC和ACL,开发者仅需要通过简单的步骤便可接入功能完备的登录和权限控制系统,这部分通用能力下沉成为中间件,但没有开源,对小公司而言,登录和鉴权还是得依赖开源的框架,所以在此盘点一下当下最常用的几款登录和鉴权框架:spring-securi...

2020-02-01 19:41:00 6559

原创 【代码质量】-借助JDK8提供的CompletableFuture写出优雅的代码

前言:要写一手优雅的代码,背后要经历很多的积累和沉淀,有点类似台上一分钟,台下十年功.要让代码变得优雅有很多种方式,使用JDK8提供的新特性便是其中一种,虽然相较于设计模式对代码质量提升有限,但仍值得去学习和使用.本篇仅介CompletableFuture.早在JDK1.5中就提供了Future和Callable来获取异步任务的结果,但因为获取结果阻塞的原因,并没有真正实现异步带来的价值...

2020-01-29 22:45:24 482

原创 【代码质量】-如何避免写过多的if-else语句,从青铜到钻石级码农是如何重构的?

前言:开篇先放一张大神写的代码,反正我看到这张图第一反应就是佩服(画质有点渣,不过就算是4K蓝光我也看不懂里面的逻辑)如果在开发中写出这样一段代码,那么恭喜你,拥有铁饭碗了,连技术总监都拿你没办法,你走了这代码谁来维护?玩笑归玩笑,那么到底该如何避免在写代码中出现大量的if-else以及控制If-else的层级数?阿里巴巴的java技术开发手册其实已经给出了答案,我这里结合实际...

2020-01-09 17:59:38 1582 2

原创 【Springboot】-Springboot事件的发布和监听和guava eventbus

1.简介前面已经对观察者模式,监听者模式做了总结,但在实际开发中,直接使用这两种模式的情况相对较少,原因是直接采用这种模式虽然简单,但观察者和被观察者/监听者和被监听者 之间的依赖还是比较强,不够灵活。在Spring统治的天下,Bean与Bean之间往往会涉及到通讯,以此来实现业务解耦,举个具体的例子:比如一个电商系统,在用户下单完成之后,订单系统的任务就算是完成了,接下来可能会有积分系统...

2019-12-31 16:48:09 3863

原创 【大数据】5分钟快速快速搭建Solr企业级搜索引擎,附Java操作SDK实战搜索

前言:Solr是采用Java开发,基于Lucene的全文搜索服务器,性能强悍,使用简单,常被作为企业级应用的搜索服务器.Solr通过http协议和Json进行响应,所以用Solr搭建的搜素引擎可以跨语言使用,对企业应用而言非常友好.如果你想学习非常详细的Solr教程,建议可以去W3C进行学习:https://www.w3cschool.cn/solr_doc/solr_doc-g1az2fmd...

2019-12-03 22:18:09 518

原创 【大数据】Lucene全文搜索引擎入门篇(零基础小白也适用)

前言:Lucene是apache老爹开源的一款全文搜索引擎,虽然目前已被市面上一些更好用的搜索引擎逐步替代,但作为搜索引擎的鼻祖,仍然有必要学习一番,而且有了Lucene的基础之后,学习solr,elastichSearch也会更容易理解。看完本篇,你将了解到Lucene是什么,Lucene的使用场景,原理,什么是倒排索引,如何分词,以及如何使用lucene实战构建简易的搜索引擎等。目录...

2019-11-19 14:31:18 1511

原创 【代码质量】-阿里巴巴java开发手册(代码质量提升神器)学习笔记

前言:《阿里巴巴 Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,有了这些前人总结的经验,可以帮助我们写出高质量的代码,同时可以减少Bug数量,少踩坑,提高代码的可读性和易维护性。本篇仅作为学习笔记,总结和提炼一些阿里巴巴java开发手册中需要遵守的规则,同时也是为了加深印象,手打了一遍规约,通过此番学习,感觉收获颇多,非常值得一学。目录1.编程规约1.1命名风格...

2019-11-01 18:11:11 1263

原创 【源码分析专题】-阿里开源Nacos注册及配置中心 最佳长轮询 实现原理

前言:看完本篇,你将了解到web端常用的实时通讯技术种类及其适用场景,你将了解到几种不同的长轮询方式,以及它们的差异,最后将一睹互联网大厂Nacos的长轮询技术,从而在以后遇到消息推送场景/在线聊天/配置中心等需要长轮询技术的场景时,可以写出优雅又性能爆棚的代码,文中内容看起来较长,其实大部分篇幅是代码实现,可以选择跳过或者简单看看,里面的代码都是可以直接跑通的,不妨复制粘贴到IDE里运行看看效果...

2019-10-29 17:11:47 3627

原创 【数据结构】-树及森林 菜单实现 深度优先 广度优先 递归遍历

前言:树是一种非常有趣的数据结构,在大学时期有学过,但缺乏实际运用场景,所以学完后来就忘得差不多了...但工作以后才发现,树这种数据结构是那么重要和常见,用得好的话可以让你代码更优雅,性能更佳,为了让树里面的概念更易于理解,关于树的定义这块我尽量通俗,牺牲一些标准性,提高可读性,不至于像读大学课本上对树的定义那样难懂.1.基本概念1.1定义树:是由结点或顶点和边组成的(可能是非线性的)...

2019-10-25 10:07:42 1704 4

原创 【设计模式】-监听者模式和观察者模式的区别与联系

前言:监听者模式和观察者模式在平时开发中或在Spring源码中经常有碰到,两者乍看上去好像差不多,但为何会分为两种不同的设计模式?究竟是人性的扭曲还是道德的沦丧?让我们一起走进本篇,深入解析两者的异同和使用场景。目录1.介绍1.1监听者模式介绍1.2观察者模式介绍2.相同之处3.不同之处4.使用场景1.介绍1.1监听者模式介绍当范围对象的状态发生变化的...

2019-10-17 10:17:25 3659 3

原创 【设计模式】-11监听者模式

目录1.什么是监听者模式2.监听者模式的组成(成员)3.代码实现4.思考1.什么是监听者模式监听者模式在现实中无处不在,举个常见的例子,我们经常在电影片段中看到,当信号侦察兵接收到上级下发的某个指令信号,会立即执行相应动作.在古代,亦有烽火台,当烽火台被点燃时,远处哨兵观察到烟雾后会立刻通知士兵开始防御外敌... 类似这种收到某个"信号"后立即做出相应反馈的,在编程领...

2019-10-16 16:26:43 1507

原创 【心路历程】-2019新计划-下(后端成长之路)

接上篇:https://blog.csdn.net/lovexiaotaozi/article/details/85616167本篇继续下半年规划,之所以会有下半年规划,是因为我觉得做事之前事先规划真的太重要了,凡事预则立,不预则废,没有规划就没有章法,以至于时间利用的效率低下,目前来看上半年的规划还算比较成功,里面95%的东西都学完了,除了一些源码没学完.也得益于上半年的规划和学习,今年顺利...

2019-08-26 23:08:09 907

原创 【mysql】-mysql读写分离后性能到底能提高多少(实测)

尽人皆知,Mysql通过读写分离分库分表后性能会有提升,那么如果仅配置主从复制,读写分离到底能提升多少呢?网上逛了一圈也没有找到什么可以参考的数据,还是实践出真知,自己实际测一番便可知晓.环境描述:项目我采用生产环境的一个项目,数据也拷贝了一份(核心几张表数据均超百万),然后选取了其中一个并发度最高的接口,且该接口既有读操作又有写操作.打压工具我用截止目前发帖时间jmeter最新版...

2019-06-17 18:17:10 7893 3

原创 【高并发专题】-高并发下前后端常用解决方案总结(全套)

鲁迅说过:如果你也想戴上高级Java程序员这顶高帽子,那么高并发相关解决方案你必须深入骨髓.高并发场景下,主要解决几个问题:①请求的响应时间变长,如何才能减少请求响应时间,提升用户体验.②数据的安全,在高并发多线程场景下,由于竟态条件,指令重排等影响,很容易出现数据不安全问题,需要避免.③高并发场景下,容易造成服务器过载,造成单点故障....为了改善高并发带来的种种问题,已...

2019-06-14 19:01:35 3470

原创 【高并发专题】-JUC-AQS及拓展组件详解

本篇主要介绍AQS原理及其构建的各种同步装置和锁.AQS是类AbstractQueuedSynchronizer的缩写,位于java.util.concurrent包下,可以用来构建锁,各种同步装置.其底层的数据结构如下图:是基于链表实现的FIFO队列,队列中维护了等待线程的各种信息.AQS内部使用int类型的state来表示状态,state=0表示还没有线程获取锁,1表示已有线程...

2019-06-12 15:42:27 315

空空如也

空空如也

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

TA关注的人

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