自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【gogogo专栏】golang并发编程

goroutine在go语言中叫做协程,相当于java中线程的概念,使用起来也非常简单,在方法前面加个go就行了。go Run() 例如这样就是开启一个新的协程去跑Run方法channel是用来负责协程之间的通信的,可以理解为一个管道,我们首先举一个最简单的例子,箭头表示读取,这样就表示往管道里面读入和获取一个数了。c1

2023-11-08 16:09:47 716 3

原创 【gogogo专栏】context包的使用

总的来说,context包包含了很多方法来进行协程协程间的通信,可以帮助我们很好的完成多个协程的相互操作。

2023-11-02 20:33:53 208

原创 【gogogo专栏】指针

作为一个大学划水,毕业一直写java的程序员来说,多多少少对于指针有点陌生,由于近期需要转go,正好学到指针这里,就来探究下指针的使用场景和用法吧。首先我们来看下以下这个简单的例子,主方法通过形参将a传递进方法changeValue,然后这个方法将值改变了,那么主方法得到的值是否会改变呢?因为两个值存在于不同的地址中,所以值没有改变,为了使上述方法能让值得到修改,我们需要通过指针传入地址来让修改的变量值在当前地址中进行修改。运行后我们发现打印的a的值为1,a并没有因为changeValue这个方法而改变。

2023-08-14 15:41:19 221

原创 Kafka架构和使用场景

Kafka架构

2022-09-16 16:24:52 1816 1

原创 Redisson读写锁和分布式锁详解

Redisson读写锁和分布式锁

2022-08-27 15:14:12 1697 2

原创 SpringBoot利用Pipeline批量插入redis数据

Pipeline的使用

2022-08-27 14:26:27 1808

原创 RabbitMQ消息可靠性问题

RabbitMQ消息可靠性问题

2022-08-24 18:00:44 880

原创 RabbitMQ的高可用方案

RabbitMQ的高可用方案

2022-08-02 17:08:38 1272

原创 RabbitMQ消息分发机制

RabbitMQ消息分发机制及运行原理

2022-08-01 17:48:59 1085

原创 手把手教你安装RabbitMQ(基于CentOS7系统)

RabbitMQ安装教程

2022-07-29 14:57:59 2978 4

原创 线程池核心原理

线程池核心原理

2022-07-21 15:16:40 636

原创 聊聊并发安全集合ConcurrentHashMap

ConcurrentHashMap详解

2022-07-14 16:48:32 859

原创 从SimpleDateFormat的线程安全问题看ThreadLocal

ThreadLocal解决线程安全问题

2022-07-07 14:02:38 510

原创 一文带你吃透阻塞队列

学习阻塞队列,看这一篇就够了

2022-07-05 16:50:47 669

原创 Spring源码系列

Spring源码系列之IOC与DI通俗易懂的讲IOC和DISpring中的概念通俗易懂的讲IOC和DI首先我们再看源码之前要清楚什么是IOC和DI,以及它的一些简单实现方法。IOC我们可以理解为是一个共享充电桩(容器),里面存放着各种各样的充电宝,DI可以理解为给每个充电宝插上数据线(实例化)。我们从拿到一个项目时,可以得到的信息有限,想要启动的时候讲类注入到IOC容器中,并通过DI将其实例化,可分解为以下几步。读取配置文件,从配置文件拿到项目路径。根据项目路径去找到打包的文件夹,扫描到其

2022-05-08 12:09:56 458

原创 Spring Security比你想象的要简单

Spring Security比你想象的要简单Spring Security简介依赖导入功能整合后端获取权限信息前端获取权限信息总结Spring Security简介Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护基于 Spring 的应用程序的事实标准。Spring Security 是一个专注于为 Java 应用程序提供身份验证和授权的框架。像所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以轻松扩展以满足自定义需求

2022-03-14 11:27:31 5457

原创 反射工具包JOOR、Hutool与原生反射对比

三者代码量的比较在分析比较三者之前,我们先比较直观的通过代码量来看看三者之间的区别。我们首先看一段反射的例子。原生反射实现JOOR实现Hutool实现首先从主观上来看JOOR和Hutool在api层面都精简了很多,并且对异常进行了封装,不强制捕获,而JOOR在Hutool的基础上又支持了链式编程。JOOR主要API那么我们来看下JOOR的主要APIpublic class JoorExample { public static void main(String[] args)

2021-08-09 16:52:14 1780

原创 使用CODEX为你的项目编制一套代码库目录/索引

灵感来源本文来自一片项目重构文章的启发,该文章作者一整年经历了 3 个代码十分混乱的项目,最大的收获就是摸索出了一个梳理烂代码的最佳实践——CODEX。原文路径:一个技术总监的忠告:精通那么多技术为何还是做不好一个项目?.文章作者的本意是重构项目时便于梳理项目结构提出的一个活的源代码索引。然而对于一些实践,借鉴了前者的经验,整理了一套基于idea的CODEX,可以在编写代码的时候按照规范将注释以特定形式输入,达成一个自动生成索引的功能,方便定位代码功能与位置。增加索引标签首先,我们可以为索引增加

2021-07-30 17:12:44 1235 2

原创 screw 一颗螺丝钉的使命

screw介绍对于screw,我们来看看作者是怎么定义它的。关于名字,想一个太难了,好在我这个聪明的小脑瓜灵感一现,怎么突出它的小,但重要呢?从小就学过雷锋的螺丝钉精神,摘自雷锋日记:虽然是细小的螺丝钉,是个细微的小齿轮,然而如果缺了它,那整个的机器就无法运转了,慢说是缺了它,即使是一枚小螺丝钉没拧紧,一个小齿轮略有破损,也要使机器的运转发生故障的…,感觉自己写的这个工具,很有这意味,虽然很小、但是开发中缺了它还不行,于是便起名为screw(螺丝钉)。screw的特点简洁、轻量、设计良好多数

2021-07-29 09:53:50 339

原创 如何优化代码中的if-else/switch

场景分析示例(包含异步+并发+线程池+反射+枚举+工厂模式+策略模式+单例模式+代理模式)模拟场景:有一群人分别属于A,B两个部门,此时A和B部门对于成年的标准不同,A部门认为大于18岁算成年,B部门认为大于等于18岁算成年,找出所有成年人。抽象场景:根据前端系统提供的一个策略执行一套组合操作,由于各个组合之间千变万化,且耗时较长,应采取并发进行不同的单步操作,且可能存在不同线程之间的结果依赖,最终需要满足可配置性,可扩展性,需满足开闭原则,且需要对单步结果和汇总结果进行统计处理,熔断降级,并记

2021-07-16 11:07:39 179

原创 ESB的体系结构

ESB的体系结构什么是ESBESB的产生ESB能够解决的问题ESB的内部结构ESB的瓶颈与弊端什么是ESB企业服务总线,即ESB全称为Enterprise Service Bus,指的是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。面向服务的体系结构已经逐渐成为IT集成的主流技术。面向服务的体系结构(service-oriented architecture,SOA)是一种软件系统设计方法,通过已经发布的和可发现的接口为终端用户

2021-07-14 15:14:50 1820

原创 你还不会用hystrix实现服务熔断降级吗?

如何利用hystrix实现服务熔断降级一:需求分析二:解决方案fallback和fallbackFactory区别配置中心开启Hystrix功能添加fallback属性创建回调类自定义异常全局异常捕获三:测试熔断一:需求分析如果一个服务不可用,例如网络延迟或者流量激增,则会影响依赖于这个服务的其他服务,导致雪崩效应。为了解决这种雪崩效应,使用熔断器Hystrix, 实现服务降级,服务限流的功能,并且为client提供健康的页面状态。二:解决方案使用熔断器或者服务降级,使得应用程序继续执行而不用等待修

2021-06-29 11:36:40 264

原创 并发编程的数据一致性问题

并发编程的数据一致性问题CPU的优化之路缓存优化MESI协议与可见性伪共享与缓存填充异步处理与指令重排解决CPU优化所带来的问题JMMvolatile关键词可见性非原子性避免指令重排CPU的优化之路我们需要了解数据一次性问题,首先需要知道CPU为了更好的性能做了哪些优化。缓存优化要了解数据一致性问题产生的原因,我们首先要了解数据的传输路径,我们首先来看下以下这张图。因为CPU的计算速率远大于IO等数据传输的速率,为了让CPU能持续稳定的007工作,使宝贵的CPU资源得到有效地利用,因此引入了

2021-05-26 20:16:42 758 1

原创 带你轻松搞定UML类图

什么是UML类图UML类图即是一种表现类与类之间关系的一种示意图,由于java是一种面向对象的语言,且万物皆对象,因此对象与对象之间,类与类之间,总是存在的某种不清不楚,不明不白的联系,类图就是一种可以让我们一眼看清这种复杂联系的简单示意图(其实一点都不简单~~~),然而面对复杂的各种符号,可能很多人摸不着头脑,比如下面一张图,很生动的表示了一些类之间的关系,可能第一次看会有点一脸懵逼,似懂非懂的感觉,然而看完本篇的讲解,再回过头来看这张图,肯定会有一目了然的感觉。单个类的符号含义-表示priva

2021-05-15 18:26:22 670 2

原创 解决阿里云服务器无法ping通的问题

添加安全组策略若想通过本地ping通阿里云服务器,则需要添加如下安全组策略。入方向添加ICMP协议出方向添加ICMP协议设置客户端对本服务器ping设置允许客户端对本服务器ping将icmp_echo_ignore_all的1改成0,即可本地ping或客户端对服务器的ping[root@jiangxj /]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all1[root@jiangxj /]# echo 0 >/proc/sy

2021-05-08 14:41:38 3488 1

原创 CSDN-markdown编辑器

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-05-08 14:30:34 70

原创 CompletableFuture在手,并发不愁!

CompletableFuture是什么?CompletableFuture是jdk8以来出现的一个专门处理并发的类库,是Future的加强版,集成了更多的方法以应对更加复杂的业务场景。本节内容需要有一定的函数式编程基础以及lambda表达式基础。传送门大家一起找出所有成年人结合之前业务中的场景,抽象出了这样一个模型,假设从数据库中得到一群人员信息,要筛选出所有成年人。此时可以将所有的返回结果全部存入一个map中,等待并发结束再去查看所有map中的结果。import java.util.Arr

2021-03-04 11:29:46 450 4

原创 通俗易懂的设计模式总结,带你彻底搞定设计模式。

设计模式总结七大设计原则一句话归纳七大设计原则GOF 23种设计模式设计模式简介设计模式分类一句话归纳23种设计原则七大设计原则一句话归纳七大设计原则设计原则一句话归纳目的开闭原则对扩展开放,对修改关闭减少维护带来新的风险依赖倒置原则高层不依赖低层更利于代码结构升级扩展单一职责原则一个类只干一件事便于理解,提高代码可读性接口隔离原则一个接口只干一件事功能解耦,高聚合,低耦合迪米特法则不该知道的不要知道只和朋友交流,不和陌生人说话,减少代

2021-02-09 15:22:11 190

原创 设计模式之策略模式

策略模式适用场景策略模式比较适合在同一套主框架下,有不同的策略可供用户选择的情况下使用。比如在同一套流程中采取不同的支付方式来支付,就可以采用策略模式。策略模式使用示例首先定义公共接口,使用不同的策略实现类来实现。public class MsgResult { private int code; private Object date; private String msg; public MsgResult(int code, String msg, Objec

2021-02-04 11:21:25 208

原创 设计模式之模板方法模式

模板方法模式是什么模板方法模式指的是将一个定制化流程拆分出来,在不改变整体流程的情况下进行定制化配置钩子,来达到不同的抽象实现。模板方法模式案例首先一套课程流程可能根据课程的不同有一个模板,多种实现。public abstract class AbstractCourse { public final void createCourse(){ //1、发布预习资料 postPreResourse(); //2、制作课件 cre

2021-01-29 17:07:20 80

原创 设计模式之委派模式

委派模式的定义委派模式是一种通过中间类对一个职责的委派来达到职责分明的一种设计模式。委派模式案例比如一个老板需要分配任务,此时他需要给项目经理分配任务,而项目经理则需要给每一个合适的人分配合适的任务,此时可以通过委派模式将任务分配给合适的人。public class Boss { public void command(String task,Leader leader){ leader.doing(task); }}public interface IEmpl

2021-01-29 16:05:08 99

原创 设计模式之桥接模式

什么是桥接模式桥接模式指的是为了避免接口与类之间的大量继承,不通过继承,而通过组合等其他方式搭建一个类似于桥之类的东西来实现不同维度的类之间的联系。桥接模式案例首先有一个信息接口,对于信息存在两个维度,一个是短信、邮件等信息类型,一种是紧急程度的维度,分为普通程度和紧急模式。首先由一个信息的接口。public interface IMessage { //发送消息的内容和接收人 void send(String message,String toUser);}public c

2021-01-27 22:10:54 117

原创 设计模式之组合服务

什么是组合服务组合服务指的是一个整体和个体操作的共同属性放在一个顶层接口或抽象类中,整体和个体作为这个类的子类根据不同的规则进行不同的实现。组合服务的使用组合服务常用的场景有一个文件目录可能存在文件和文件夹,而文件下下面又有文件和文件夹,这种情况为了解决类似List<List>这种多层次调用的问题可以将文件和文件夹抽象为一个目录,抽象方法如下:public abstract class Directory { protected String name; public

2021-01-26 23:55:33 426 1

原创 设计模式之装饰器模式

装饰器模式应用场景装饰器模式是一种类似于搭积木一样的模式,在底层会提供一个基础版本,可以在上面累加各种各样不同的配件,比如一个空房子,可以自由组合里面的家具。装饰器模式的使用首先需要写一个接口或抽象类,并且一个基础版本来继承这个接口。public abstract class BatterCake { protected abstract String getMsg(); protected abstract int getPrice();}public class BaseBa

2021-01-26 19:38:13 120

原创 你知道从BIO到NIO的进化史吗?

BIO到NIO的进化史IO是什么IO的几种类型同步并阻塞的BIO通过线程池实现同步非阻塞的BIO异步非阻塞的NIO的实现NIO的使用场景IO是什么IO可以简单地理解为是计算机与硬盘之间进行通讯一种方式,通过输入输出流来进行数据的交互。在java中存在了几种IO的接口,如常见的字节流和字符流。InputStream :字节输入流OutputStream :字节输出流Reader :字符输入流Writer :字符输出流在java应用程序层面通过调用native方法调用操作系统,从硬盘中或者

2021-01-19 17:34:07 216

原创 设计模式之享元模式

享元模式使用场景在平时的code中经常对某种相似度极高的对象进行多次操作,比如一个游戏地图内的一片树组成的森林。对于每棵树来说属性是相同的,仅仅是坐标不同,因此没必要每次创建的时候都创建一棵树,因此可以使用享元模式,共享树的公共属性,从而只用关注树的坐标即可。享元模式示例public class FlyWeightTest { public static void main(String[] args) { TreeNode treeNode1 = new TreeNode(0

2021-01-12 09:58:28 102

原创 设计模式之原型模式

原型模式实例原型模式主要用于对一个对象的克隆以及深拷贝,使对象所有属性进行复制的同时并不会造成相同地址的引用。首先可以实现Cloneable接口使对象可以实现克隆。再通过重写父类的clone方法来实现对象的克隆,如出现对象嵌套操作的话则需要实现深拷贝。public class PrototypeTest { public static void main(String[] args) throws CloneNotSupportedException { BaseInfo ba

2021-01-06 20:50:16 56

原创 设计模式之建造者模式

建造者模式实例在我们平时编码过程中如果遇到一些特别复杂的Model,或者Model中各个字段之间存在一些依赖关系的时候,为了避免逻辑混乱,可以使用建造者模式进行封装处理。首先建造者模式可以使用如下方法package 建造者模式.v1;public class BuildTest { public static void main(String[] args) {// Product product = new Product();// product.se

2021-01-06 20:49:41 89 1

原创 设计模式之抽象工厂模式

模式定义提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。以下我们来模拟编写一个数据库组件。public class AbstractFactoryTest { public static void main(String[] args) { IDatabaseUtils iDatabaseUtils = new OracleDatabaseUtils(); IConnection connection = iDatabaseUtils.get

2021-01-06 20:49:01 74

原创 设计模式之工厂方法模式

工厂方法模式我们在code的时候经常会遇到由于业务复杂,而不知道如何下手的情况,或者对于某个东西写出来很难扩展的情况。public class FactoryMethod { public static void main(String[] args) { Application application = new Application(); ProductA product = application.getObject(); product.

2021-01-06 20:47:56 56

空空如也

空空如也

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

TA关注的人

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