自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Long-Tai

高级Java开发工程师,CSDN博客专家,掘金年度人气作者。专注高并发、中间件、分布式、框架底层源码等知识分享

  • 博客(116)
  • 资源 (1)
  • 收藏
  • 关注

原创 深入理解 Spring @Import 不同方式注册 Bean

每日一言苦,是人生的必经过程。人生就是一个 “享受” 痛苦和磨难的过程,这个过程是值得体会和拥有的前言Spring 在 3.0 版本之前都是通过 .xml 配置文件的形式来描述配置信息在配置文件中显示声明 bena 标签或者扫描特定包下的类来注册 IOC 容器 Bean 对象等操作@Import 是 Spring 3.0 之后通过 JavaConfig 方式提供注册 IOC Bean 的注解需要配合 @Configuration 注解共同使用才能起作用,因为只有这样才会被 Spring .

2020-11-27 23:57:55 6070 3

原创 说点不一样的 Spring 注册 IOC Bean 方式

学习方法之多看:代码(别人的代码 or 源码)、规范(JEP、JSR)、论文(Paper) 等前言Spring 的出现是对广大 Java Web 开发者的福音,帮助我们解决了众多问题并且提供了很多便利写此文章主要来说明对于 Spring IOC 容器中注册 Bean 的方式主要有哪几种如果你以为我会告诉你@Bean@Import、@ImportSelector…@Service、@Component…很遗憾的说:格局小了兄弟…虽然这篇文章是作者看 Mybatis S..

2020-11-25 23:07:44 5622

原创 万字图文 | 聊一聊 ReentrantLock 和 AQS 那点事(看完不会你找我)

男生魅力最重要的部分,是有勇气面对失败;而生活的美好之处,恰恰在于它的不确定性前言AbstractQueuedSynchronizer(AQS)是 Java 并发编程中绕不过去的一道坎,JUC 并发包下的 Lock、Semaphore、ReentrantLock 等都是基于 AQS 实现的。AQS 是一个抽象的同步框架,提供了原子性管理同步状态,基于阻塞队列模型实现阻塞和唤醒等待线程的功能文章从 ReentrantLock 加锁、解锁应用 API 入手,逐步讲解 AQS 对应源码以及相关隐含流..

2020-11-18 00:03:16 8287 4

原创 使用 Maven 打包 SpringBoot 项目将源码 source.jar 一并打包发布

本文大纲如下:0 前言1 打包源文件1.1 maven-source-plugin1.2 mvn install1.3 mvn deploy1.4 mvn source:jar2 注意事项3 后记前言在我们查看源码或者将自己项目打成 Jar 包发布出去的时候,存在这种情况整个包下的 .class 文件空空如也,其中的变量命名也是比较随意,同时对应的注释也无法查看其原因就是因为项目的 xxx-source.jar 没有被发布,上图是 Nacos 相关源码,可以点击 Do

2020-11-11 21:04:30 3987 1

原创 躺在床上刷抖音,不如来写第一个 GO 程序入门篇

本文大纲如下:1 安装 GO 环境1.1 下载安装包1.2 安装 GO1.3 验证安装2 编码 GO 程序2.1 IDE 开发软件安装2.2 创建 GO 项目2.3 二分查找算法3 后记安装 GO 环境下载安装包访问 Go 国内镜像站 GO 下载页面,并在页面最上方的版本中选择你当前的系统版本,会下载最新版本的 Go 开发包因为是国内的镜像站,下载速度不受限制,速度相当可以,飞一般的赶脚~安装 GO作者是 MacOS,相信 Windos 也差不太多,傻瓜式

2020-11-11 10:09:00 632

原创 一文掌握多线程并发中 Thread 类 yield 方法具体作用

每日一言真爱的第一个征兆,在男孩身上是 胆怯,在女孩身上是 大胆。——雨果《悲惨世界》1. Thread.yield() 是什么通过 java.lang.Thread 类中的 yield() 方法可以实现让当前正在执行的线程让出 CPU 时间片线程状态 Running(运行中) 执行后会变为 Ready(就绪) 状态此时其它处于 Ready 状态 的线程可能获取到 CPU 时间片,也有可能是调用 yield() 方法的线程再次获得2. 线程状态我们查看下线程 Thread 中 St..

2020-11-01 17:01:19 1458

原创 Nacos 服务源码包安装 & Docker 安装

前言文章从 Alibaba Nacos 服务开始部署,介绍两种不同的方式进行安装分别是 安装包 以及 Docker 容器安装在这之前会对 Nacos 的相关概念进行梳理,如果已有对应的了解,直接跳过即可1. Naocs 初始1.1 Nacos 是什么Nacos 致力于帮助您 发现、配置和管理微服务Nacos 提供了一组简单易用的特性集,帮助您 快速实现动态服务发现、服务配置、服务元数据及流量管理Nacos Server 本身提供了已支持的全量功能,搭配不同框架有不同的实现Naco..

2020-10-30 14:22:19 720

原创 IDEA 最便捷创建 SpringBoot 父子 Module 项目(值得收藏)

前言作者正在筹备一个专题 《SpringCloud Alibaba源码解析》,会在正式发布 SpringCloud Alibaba 源码系列文章之前,将一些准备工作先做好创建 SpringBoot 父子模块项目Docker 安装 Nacos Server 端Docker 安装 RocketMQ 端…本篇文章从第一步开始详细讲解如何 《创建 SpringBoot 父子模块项目》如果将 SpringBoot 框架用作与单体项目,大多数可能不存在多模块的情况但是并不代表没有,因为父子模块..

2020-10-27 21:30:30 6302 10

原创 Linux 服务器 CPU 详细信息查看、物理 CPU 以及逻辑 CPU | 1024程序员节快乐~

什么是 CPUCPU: (Central Processing Unit)也称为中央处理器, 主要通过内部总线, 建立起芯片内各部件之间的信息传输通路如何查看 CPU 详细信息我们平常在操作 Linux 服务器时, 如何能够知道服务器的 CPU 的详细信息呢[xxx@xxx ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c16: CPU 核心数Intel®: 服务器 CPU 品牌英特尔Xeon®: 英特尔微处理器(至强..

2020-10-24 15:57:56 825 1

原创 Python3 如何使用 GitLab API 进行批量的合并分支, 亲测可用!

文章前言每周五上午十二点前需要将项目上各组开发分支合并软集仓库分支, 需要在十个项目上进行 merge程序员一般都是 很讨厌麻烦, 所以编写此脚本进行 批量 merge, 统一进行合并另外, 如果项目经历上线或者修复 bug 等情况, 需要合并分支至 uat、release、master 等分支, 也是能够满足此脚本使用情况类似于这种功能性脚本, 一般习惯使用 Python 来编写, 通过 GitLab 提供的 REST API 进行调用GitLab 提供了非常丰富的 REST API..

2020-10-13 16:48:09 1881 22

原创 【剑指Offer】面试官问如何解决 AtomicInteger “ABA“ 问题

前言上一篇文章 《通过 JDK 原子并发类 AtomicInteger 彻底掌握 CAS 无锁算法》和大家聊了聊 Atomic 相关的概念, 也说了下 AtomicInteger 的实现原理同时也说了 Atomic 的不足:1、多线程高并发对共享资源读写操作会导致自旋过度2、“ABA” 问题今天这篇文章就来聊一聊如何解决 “ABA” 问题ABA 问题背景AtomicInteger 存在的一个问题, 也是大部分 Atomic 相关类存在的, 就是 ABA 问题简短来说, 就是线程一获取..

2020-10-03 13:49:32 1190 1

原创 【剑指Offer】通过 JDK 原子并发类 AtomicInteger 彻底掌握 CAS 无锁算法

前言如果要聊原子类相关的话题, 可以先从基本的概念开始1、原子类为了解决什么样的问题?答: 为了解决并发场景下无锁的方式保证单一变量的数据一致性2、什么情况下存在并发问题?答: 多个线程同时读写同一个共享数据时存在多线程并发问题解决并发安全问题的方式有很多种方式, 著名的就是 JDK 并发包 concurrent, 为了并发而存在的非原子计算大家应该都知道, 类似于代码中的 i++ 操作, 虽然是一行, 但是执行时候是分为三步的从主存获取变量 i变量i值+1新增后变量i值写.

2020-10-01 10:27:38 831

原创 【剑指Offer】一文掌握 Redisson 分布式锁原理(值得收藏)

ReentrantLock 重入锁在说 Redisson 之前我们先来说一下 JDK 可重入锁: ReentrantLockReentrantLock 保证了 JVM 共享资源同一时刻只允许单个线程进行操作实现思路ReentrantLock 内部公平锁与非公平锁继承了 AQS[AbstractQueuedSynchronizer]1、AQS 内部通过 volatil 修饰的 int 类型变量 state 控制并发情况下线程安全问题及锁重入2、将未竞争到锁的线程放入 AQS 的队列中通过 L...

2020-09-26 23:24:07 3013 1

原创 【剑指Offer】Redis 分布式锁的实现原理看这篇就够了

前言分布式锁相信大家一定不会陌生, 想要用好或者自己写一个却没那么简单想要达到上述的条件, 一定要 掌握分布式锁的应用场景, 以及分布式锁的不同实现, 不同实现之间有什么区别分布式锁场景如果想真正了解分布式锁, 需要结合一定场景; 举个例子, 某夕夕上抢购 AirPods Pro 的 100 元优惠券如果使用下面这段代码当作抢购优惠券的后台程序, 我们一起看一下, 可能存在什么样的问题很明显的就是这段流程在并发场景下并不安全, 会导致优惠券发放超过预期, 类似电商抢购超卖问题想一哈有什.

2020-09-26 17:13:21 9677 17

原创 Java 项目导入 IDEA 后没有 Maven 侧边栏

前言今天从 GitHub 拉下了 Redisson 源码, 导入我的 2019.3 IDEA 后, 往常项目应该能够自动加载但是这次失常了, 项目没有正常加载, 而且最关键的右侧连个 Maven 框都没有, 多熟悉的按钮解决思路从网上查阅后, 其实也很简单, 点击 IDEA 菜单栏上的 Help -> Find Action在弹出框中输入 Maven, 选择就 OK 了, 问题解决...

2020-09-19 17:45:14 2603

原创 【剑指Offer】JDK 线程池使用不当引发的饥饿死锁问题

01、前言使用线程池时会忽略死锁问题, 但是只要代码写的"六"没啥是不可能的文章代码及部分理念引自 线程池使用不当也会死锁02、什么是死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程死锁定义来源: 死锁-百度百科简化来说就是: 一组相互竞争资源的线程因为互相等待,导致"永久"阻塞的现象我们通过一个 Demo 简单理解下publi

2020-09-18 23:28:26 823

原创 【剑指Offer】谨慎使用 Java8 新特性 ParallelStream并行流

01、前言在说 parallelStream 之前, 一定要了解 Stream 以及它的基本操作推荐大家看一波之前的文章 解放双手,Stream 居然还有这波神操作02、什么是 ParallelStream上文讲到的 Java8 Stream 流在执行时候是串行化的, 如果说任务执行的耗时比较长, 可以使用 Stream 的 “兄弟流” ParallelStream防止误导, 并非耗时就一定要使用并行, 根据不同的业务场景, 合理的使用即可parallelStream 是一种并行流, 意思为

2020-09-17 10:07:25 2045 2

原创 【剑指Offer】如何处理 JDK 线程池内线程执行异常

前言上次写了 【剑指 Offer】如何解决 JDK 线程池中不超过最大线程数下快速消费任务宽哥瞅了后没有被怼, 心想不枉我上周天看了一天的线程池源码啊 ????场景太过温馨, 必须记录下来不过还好, 后面没有像往常一样被怼 ????️言归正传哈, 本篇 《如何处理 JDK 线程池内线程执行异常》 文章适合哪些小伙伴阅读呢工作中使用线程池却不知异常的处理流程, 以及不知如何正确处理抛出的异常带着问题看文章1、线程池如何输出打印运行任务时抛出的异常?2、线程池 execute()、sub

2020-09-14 09:56:41 758

原创 【剑指Offer】JDK 线程池如何保证核心线程不被销毁

前言很早之前那个时候练习线程池, 就是感觉线程池类似于 ArrayList 这种集合类结构, 将 Thread 类存储, 来任务了就进行消费, 然鹅…线程包装类线程池并不是对 Thread 直接存储, 而是对 Thread 进行了一层包装, 包装类叫做 Worker线程在线程池中的存储结构如下:private final HashSet<Worker> workers = new HashSet<Worker>();先看一下 Worker 类中的变量及方法privat

2020-09-10 23:24:36 1377 1

原创 【剑指Offer】如何解决JDK线程池中不超过最大线程数下快速消费任务

前言文章需要对线程池执行任务流程有一定的了解记得之前我写通过模版设计来解决 线程池参数自定义痛点, 然后宽哥在下面灵魂发问, 也就是咱们这篇文章讲到的重点来来来, 我给大家复制粘贴出来如何解决 JDK 线程池中不超过最大线程数下即时快速消费任务, 而不是在队列中堆积因为最近业务落地改造中需要线程池, 又去看了一遍源码, 防止线上埋雷, 也再次回顾了这个问题然后发现网上也有这种问题提问, 虽然是不同的提问, 但是核心思想是一致的, 点击跳转业务是多变的, 而 JDK 中的线程池消费流程

2020-09-10 23:23:38 970

原创 【剑指Offer】一文搞懂项目使用的 Mybatis 架构设计(值得收藏)

Mybatis 架构设计分享1、带着问题思考本次分享2、持久层的那些事2.1 JDBC什么是 JDBCJDBC 原理2.2 Mybatis什么是 MybatisMybatis 与 JDBC 的关系3、Mybatis 关键词说明SqlSessionSqlSessionFactorySqlSessionFactoryBuilderConfigurationMappedStatementExecutorParameterHandlerStatementHandlerResultSetHandlerIntercep

2020-09-03 21:19:26 810 1

原创 Mybatis 中理解分页如何使用 Interceptor 接口实现

通过 Mybatis 执行分页 SQL 有两种实现方式, 一种是编写 SQL 时添加 LIMIT, 一种是全局处理01、SQL 分页<select id="getSubjectByPage" resultMap="resultAutoMap"> SELECT * FROM SUBJECT LIMIT #{CURRINDEX} , #{PAGESIZE}</select>02、拦截器分页上文说到, Mybatis 支持了插件扩展机制, 可以拦截到具体对象的方法以及对

2020-09-03 21:15:49 520

原创 Mybatis Sql 执行全链路, 跟踪返回结果

01、前言根据 Mybatis SQL 执行流程图进一步了解02、Mybatis Sql 的执行过程大致可以分为以下几步操作:???? 在前面的内容中, 知道了 Mybatis Mapper 是动态代理的实现, 查看 SQL 执行过程, 就需要紧跟实现了 InvocationHandler 的 MapperProxy 类03、执行增删改查@Select(" SELECT * FROM SUBJECT WHERE ID = #{id}")PrimitiveSubject getSubjec

2020-09-03 21:13:19 837

原创 Mybatis 中 Mapper 接口的存储与实现

01、前言在平常我们写的 SSM 框架中, 定义了 Mapper 接口与 .xml 对应的 SQL 文件, 在 Service 层直接注入 xxxMapper 就可以了也没有看到像 JDBC 操作数据库的操作, Mybatis 在中间是如何为我们省略下这些重复繁琐的操作呢这里使用 Mybatis 源码中的测试类进行验证, 首先定义 Mapper 接口, 省事直接注解定义 SQL这里使用 SqlSession 来获取 Mapper 操作数据库, 测试方法如下02、创建 SqlSession#1

2020-09-03 21:09:47 896

原创 Mybatis 中 .xml 文件定义 <select|insert|update|delete> 语句如何解析

1、前言Mybatis 在创建 SqlSessionFactory 时, XMLConfigBuilder 会解析 Mybatis-config.xml 配置文件2、Mybatis 相关解析器Mybatis 解析器模块中定义了相关解析器的抽象类 BaseBuilder, 不同的子类负责实现解析不同的功能, 使用了 Builder 设计模式XMLConfigBuilder 负责解析 mybatis-config.xml 配置文件XMLMapperBuilder 负责解析业务产生的 xxxMappe

2020-09-03 21:06:47 803

原创 什么是持久层? JDBC 演变的 Mybatis 架构分析

前言ORM 持久层指的是:将业务数据存储到磁盘,也具备长期存储能力,只要磁盘不损坏,如果在断电情况下,重启系统仍然可以读取数据01、JDBC1.1 什么是 jdbcJDBC(JavaDataBase Connectivity)就是 Java 数据库连接, 说的直白点就是使用 Java 语言操作数据库本来我们是通过控制台或客户端操作的数据库, JDBC 是用 Java 语言来发送 SQL 语句1.2 Jdbc 原理最初 SUN 公司希望提供 一套能够适用所有数据库的 API, 但是在实际操作中却

2020-08-24 13:21:09 664

原创 你不知道的 mybatis 四大核心组件!

01、Executor一个 SqlSession 对应一个 Executor 对象,这个对象负责增删改查的具体操作1.1 组件类图如图所示, Exeutor 是一个顶层的接口, 有两个实现类, 分别是 BaseExecutor、CachingExecutor1.2 BaseExeutor抽象类, 采用了模版设计模式, 实现了 Exeutor 接口, 针对接口提供了默认实现, 并提供了额外的抽象方法, 由不同的实现类来负责实现不同的功能抽象类下有三(其实是四个)个不同功能的实现类: Simpl.

2020-08-16 21:35:17 1482

原创 mybatis mapper 接口注册流程源码解析

01、前言在正式介绍 mapper 接口注册源码分析之前, 首先来介绍什么是 mapper, 再其次说明下 mapper 与 sql 关联的两种方式可能比较多的同学使用的是 xml 的方式, 没有接触过注解定义; 注解定义SQL语句本质上是一种轻量级的配置02、mapper 接口2.1 什么是 mapper 接口mapper 接口是用于执行自定义SQL语句相关的方法可以在 mapper 接口定义方法上添加SQL方法注解或者使 mapper 接口绑定 xml 文件2.2 使用注解定义 sql.

2020-08-06 20:40:14 435

原创 mybatis @SelectProvider 注解, 打赌你没有用过

01、前言为什么会写这篇文章, 因为在看到 MapperAnnotationBuilder 构造方法初始化时, 发现了四个从未见过的注解public MapperAnnotationBuilder(Configuration configuration, Class<?> type) { ... sqlAnnotationTypes.add(Select.class); sqlAnnotationTypes.add(Insert.class); sqlAnn.

2020-07-28 23:32:52 2079 1

原创 docker 安装 elasticsearch & kibana, 杜绝安装启动报错!

01、前言虽然工作中不是第一次接触 elasticsearch (后面简称 es), 但是由于之前有公司环境撑着, 都是一些正式的数据, 所以一直没在本地搭建相关的环境这次要往 es 里边存放 大量测试数据, 为了不影响测试环境使用还是本地搭一套吧02、elasticsearch 介绍es 是基于 lucene 的的基础上开发而成的, 提供了一套分布式、高扩展、高实时的搜索与数据分析引擎, 使用 Java 语言开发以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名03、ela.

2020-07-23 15:57:34 1235

原创 一直在使用JDK动态代理, 不明白原理如何实现?

01、前言本来动态代理知识点并不在最近文章列表中, 但是在 mybatis 注册 mapper 接口使用到了, 知其然知其所以然本篇文章是围绕 JDK 动态代理来进行说明, 需要读者掌握基本的反射、类加载器相关知识02、动态代理分类动态代理属于是静态代理设计模式的一种扩展, 常见的有三种实现方式, 分别是JDK 动态代理JAVASSIST 动态代理基于 ASM 封装的 CGLIB03、JDK 动态代理流程壹. 运行时为接口创建代理类的字节码文件贰. 通过类加载器将.class 字节码

2020-07-19 09:37:41 953

原创 mybatis configuration 核心构建流程

configuration 配置类就是 mybatis 的核心大管家, mybatis 核心的配置信息基本上都存放在这里01、Configuration 创建在之前解析 SqlSessionFactory 的时候, build() 实现并没有详细解读, 而今天源码解析的主人公 Configuration 就在此方法中被初始化这里以字节流的 build() 重载方法构建举例public SqlSessionFactory build(InputStream inputStream, String..

2020-07-10 20:10:25 974

原创 mac 使用 docker 安装单机版 kafka, 亲测有效

这篇文章极其适用于只听说过 kafka, 没有实际用过, 然后还心痒难耐的同学docker-compose 安装 kafka没有 docker 的同学网上找篇博客安装单机版 kafka 安装使用 wurstmeister/kafka-docker 的镜像这里假设你已经有了 docker 以及 docker-compose 的环境报错:Killed: 9mac 上 docker 安装成功后是自带 docker-compose 的, 但是在执行 docker-compose 相关命令时, 可能会.

2020-07-06 16:42:17 2352 2

原创 Mybatis SqlSession 如果面试官问如何创建?

阅读文章能够收获SqlSessionFactoryBuilder,SqlSessionFactory、SqlSession相关知识“建议结合mybatis 源码[1]、mybatis 官网[2]阅读, 可以下载不同版本的源码, 本文根据3.4.x解读, 不同版本源码存在细微差别为防止不必要的麻烦, 直接下载3.4.x版本的 mybatis 源码, 文章中测试代码是在org.apache.ibatis.autoconstructor目录下建立新的文件夹进行测试01、相关概...

2020-07-05 00:17:09 5079

原创 为什么大家都在学Python?Python到底好在哪?

01、python 产生背景Python 是著名的“龟叔”Guido van Rossum 在 1989 年圣诞节期间, 为了打发无聊的圣诞节而编写的一个编程语言02、python 编程地位通过TIOBE排行榜来看一下python的地位根据图片可以看出: 排名位居第三位, 除了编写操作系统贴近硬件的 C 和 广泛应用于企业开发的 Java, python 是谁都不服, 而且排名相对稳定。19 年和 20 年都是第三位, 并无明显浮动所以想要学习 python, 却还没入手的同学可以放心大胆的学了

2020-07-03 13:56:37 5416

原创 0202年了!你还不知道模版方法设计模式?

什么是 Template ?模版方法设计模式是一种行为型设计模式。官方定义理解比较隐晦,翻译成中文意思是这样的模板方法模式在一个方法中定义一个 算法骨架,并将某些步骤推迟到 子类中实现。模板方法模式可以让子类在 不改变算法整体结构的情况下,重新定义算法中的某些步骤。这里通过一个模版方法的UML类图来方便理解通俗来讲 : 定义一个抽象类 AbstractTemplate,并定义一个或若干抽象方法 abstractMethod由子类去继承抽象类的同时实现抽象方法, 在抽象类的 operation

2020-06-27 14:26:19 4999

原创 程序员内功心法之适配器模式

01、什么是Adapter模式?适配器模式的英文翻译是 Adapter Design Pattern,是一种 结构型模式。根据名字可以看出,这个模式就是用来做适配的,它能够将不兼容的接口转换为兼容的接口Adapter 可以认为是一种 补救模式,原因在于原接口不能满足客户端使用,所以需要一个转换层来进行适配如果能够在设计之初就能考虑到逻辑上的变数,可以极大程度上避免使用 Adapter1.1 模式中的角色目标接口 Target : 客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口原接口

2020-06-19 12:08:20 1362

原创 只知道项目中使用了Mybatis,却不知道为什么?

01、什么是框架众所周知,mybatis是一个ORM框架。那么什么是框架呢框架就是我们软件开发中的一套解决方案,不同的框架同来解决不同的问题1.1 框架的作用框架内部封装很多的细节,使开发者可以使用极简的方式来完成自己的功能,大大的提高了开发效率02、什么是MyBatis那什么是mybatis呢?mybatis是一款优秀的ORM(持久层)框架,使用Java语言编写前身是apache的一个开源项目iBatis,2010年迁移到google code并正式改名为myb..

2020-06-17 15:10:01 1722

原创 设计模式白话说 | 什么是设计模式?设计模式有什么好处?如何高效学习设计模式?

简介:为什么要开展设计模式这个专栏?设计模式对于开发而言无疑是一把‘神兵利器’的存在【用不好也是伤敌一千自损八百】。在JAVA底层包的源码,各大流行框架的代码设计中充满了设计模式的踪迹。无疑,掌握了设计模式,无论对于代码开发设计或阅读框架源码都是很有好处的。【难道你不想隔壁MM同事投来看大牛的目光么????】使用了设计模式的代码都拥有**高内聚、低耦合**的特性。什么是高内聚?什么是低耦合?对扩展开放,对修改关闭。专栏中每一篇设计模式的讲解都是在项目中实际应用的如果本专栏对你有用,欢迎点赞、关注、转载,由于

2020-05-25 10:03:43 1949

原创 Docker实战系列 | 查看 Docker 容器的PID

简介:在使用Docker创建容器后,使用docker ps 命令无法知道容器在宿主机对应的PID1. 解决方式1.1 docker container top[xxx@single xxx]# docker container top <container>1.1.1 以redis示例[xxx@single xxx]# docker container top redis从输出结果中可以看到redis容器的PIDPID USER .

2020-05-20 10:26:37 14871 2

Mybatis 架构设计分享.pdf

Mybatis 架构设计分享,掌握 JDBC 与 Mybatis 关系等底层源码知识,图解 Mybatis 底层源码流程

2020-10-24

空空如也

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

TA关注的人

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