java
文章平均质量分 68
鲲鹏飞九万里
过好每一天,就是过好这一生。
展开
-
理解Netty的核心概念
理解Netty的核心概念原创 2024-07-04 01:21:07 · 172 阅读 · 0 评论 -
maven pom relativePath属性的作用
Maven POM文件中的 relativePath属性原创 2024-03-30 18:15:21 · 778 阅读 · 0 评论 -
创建springboot项目的两种方式
创建SpringBoot的两种方式原创 2024-03-30 18:14:19 · 664 阅读 · 0 评论 -
ArrayList使用迭代器在遍历的时候,调用remove方法会不会报错
ArrayList中使用迭代器遍历元素的时候,调用remove 方法会不会报错。原创 2022-10-29 18:54:55 · 1146 阅读 · 0 评论 -
常见排序算法要点
常见算法要点:选择排序、交换排序、插入排序、归并排序原创 2022-09-18 17:31:03 · 318 阅读 · 0 评论 -
Guava中的使用
Guava的使用:基础功能、集合、缓存、EventBus、反射、并发、字符串功能原创 2022-08-14 19:39:35 · 975 阅读 · 0 评论 -
java8概要
Java8:函数、stream、Optional、ComparableFuture原创 2022-08-07 19:55:28 · 127 阅读 · 0 评论 -
Guava的反射工具
Guava 的反射工具原创 2022-08-07 15:29:45 · 368 阅读 · 0 评论 -
Guava的EventBus
Guava的EventBus:本质上就是发布订阅模式。原创 2022-08-06 22:34:47 · 205 阅读 · 0 评论 -
Guava的Service
Guava的Service:带有状态的服务原创 2022-07-31 17:44:45 · 480 阅读 · 0 评论 -
Gauva的ListenableFuture
Guava的LinstenableFuture:强烈建议把Future都换成ListenbaleFuture。原创 2022-07-31 15:59:15 · 270 阅读 · 0 评论 -
Guava的缓存
Guava的缓存:使用性、操作、过期策略、主动移除、清理何时发生,刷新、特性。原创 2022-07-30 18:47:28 · 402 阅读 · 0 评论 -
Guava-字符串工具
Guava字符串工具:Joiner、Splitter、CharMatcher、Charsets、Strings原创 2022-07-27 23:46:24 · 418 阅读 · 0 评论 -
Guava的基础功能与集合
Guava中的基础功能和集合原创 2022-07-24 18:28:45 · 8096 阅读 · 1 评论 -
一张图了解Java8
一张图了解Java8原创 2022-07-08 00:33:57 · 256 阅读 · 0 评论 -
Java并发编程-Java线程池
Java多线程,线程池基础原创 2022-06-05 23:26:59 · 122 阅读 · 0 评论 -
druid1.2.8源码阅读:第十天
druid1.2.8源码阅读:第十天文章目录druid1.2.8源码阅读:第十天一、keepAlive 实现方式一、keepAlive 实现方式与keepAlive相关的参数有两个:dataSource.setKeepAlive(true);dataSource.setKeepAliveBetweenTimeMillis(100000);用到keepAlive的地方:第一个地方:如果 idle 时间大于探活时间if (keepAlive && idleMillis >原创 2022-05-21 11:27:35 · 345 阅读 · 0 评论 -
druid1.2.8源码阅读:第九天
druid1.2.8源码阅读:第九天文章目录druid1.2.8源码阅读:第九天一、DestroyTask线程一、DestroyTask线程第一步: 获取锁try { lock.lockInterruptibly();} catch (InterruptedException e) { return;} 第二步:判断有没有初始化if (!inited) { return;}keepAliveCount连接:if (keepAliveCount >原创 2022-05-20 09:29:01 · 130 阅读 · 0 评论 -
druid1.2.8源码阅读:第八天
druid1.2.8源码阅读:第八天文章目录druid1.2.8源码阅读:第八天一、recycle()函数一、recycle()函数 /** * 回收连接 */ protected void recycle(DruidPooledConnection pooledConnection) throws SQLException { final DruidConnectionHolder holder = pooledConnection.holder;原创 2022-05-19 08:40:29 · 153 阅读 · 0 评论 -
druid1.2.8源码阅读:第七天
druid1.2.8源码阅读:第七天文章目录druid1.2.8源码阅读:第七天一、关闭数据库连接一、关闭数据库连接 @Override public void close() throws SQLException { // 下面两段检查避免重复关闭 if (this.disable) { return; } DruidConnectionHolder holder = this.holder;原创 2022-05-19 08:37:22 · 330 阅读 · 0 评论 -
druid1.2.8源码悦读:第六天
druid1.2.8源码阅读:线程池的连接时如何创建的文章目录druid1.2.8源码阅读:线程池的连接时如何创建的一、背景二、锁和条件三、创建`CreateConnectionThread`线程实例,并启动线程一、背景在上次的源码阅读中,发现数据库连接池中连接的创建是通过CreateConnectionThread线程创建出来的。现在就来追踪下,这个实现的过程。二、锁和条件在初始化DruidDataSource实例的过程中,在调用父类DruidAbstractDataSource的构造方法时,原创 2022-05-17 08:35:06 · 219 阅读 · 0 评论 -
druid1.2.8源码悦读:第五天
druid1.2.8源码悦读_05文章目录druid1.2.8源码悦读_05一、回顾二、`dataSource.getConnectionDirect(maxWaitMillis)`2.1 进入一个无限循环:`for(;;)`2.2 调用`getConnectionInternal(maxWaitMillis)`(1)根据maxWaitMillis创建`nanos`(2)`connectCount++;`(3)`takeLast();`2.3 `takeLast();`(1)`emptySignal();原创 2022-05-15 00:25:35 · 262 阅读 · 0 评论 -
druid1.2.8源码悦读:第四天
druid1.2.8源码悦读:第四天文章目录druid1.2.8源码悦读:第四天一、回顾`getConnection()`中的`init()`二、创建`Connection`:`DruidPooledConnection`2.1 如果有filter,根据FilterChainImpl创建连接池一、回顾getConnection()中的init()在init()中,完成了三个动作:加载数据库驱动;创建了一个用于创建数据库连接的线程:createConnectionThread;创建了一个用于销毁原创 2022-05-14 23:14:16 · 218 阅读 · 0 评论 -
druid1.2.8源码阅读:第三天
druid1.2.8源码阅读:第三天文章目录druid1.2.8源码阅读:第三天一、创建连接1.1 `init()`方法(1)`JdbcUtils.getDbType`(2)根据DbType设置`cacheServerConfiguration`(4)校验参数设置的是否正确maxActive 连接池中最多支持多少个活动会话useGlobalDataSourceStat 为true的时候,timeBetweenLogStatsMillis 值不能大于0maxEvictableIdleTimeMillis 的原创 2022-05-14 18:12:40 · 394 阅读 · 0 评论 -
druid1.2.8源码阅读:第二天
druid1.2.8源码阅读:第二天文章目录druid1.2.8源码阅读:第二天一、问题二、当`new DruidDataSource()`时,在执行什么一、问题我在想如果我要开发一个数据源连接池,我会怎么做。简单的JDBC要经历如下步骤:第一步:加载数据库驱动;第二步:建立数据库连接;第三步:通过Statement执行SQL;第四步:从RestSet中获取返回结果;二、当new DruidDataSource()时,在执行什么调用父类DruidAbstractDataSource的构原创 2022-05-12 21:58:11 · 171 阅读 · 0 评论 -
druid1.2.8源码阅读:第一天
druid1.2.8源码阅读:第一天文章目录druid1.2.8源码阅读:第一天一、背景二、在本地启动MySQL,并简单测试JDBC2.1 在本地启动MySQL2.2 JDK11 之后没有jre文件夹,手动生成jre文件夹2.3 简单测试JDBC三、druid1.2.8 的源码结构一、背景2022年5月7日,看到秦老师在群里发消息说要组织源码活动。我之前没有源码阅读的经历,为了让自己也具备源码阅读的经验,积极的参与的这次活动。二、在本地启动MySQL,并简单测试JDBC2.1 在本地启动M原创 2022-05-11 00:52:54 · 306 阅读 · 0 评论 -
Java NIO及核心组件
Java NIO及核心组件文章目录Java NIO及核心组件一、Java IO的演进1.1 Java NIO和Java NIO.2 的区别二、Java NIO上三个重要组件(1)Channel(2)Buffer(3)Selector一、Java IO的演进发现一篇讲Netty的文章:深入理解Netty。在JDK1.4之前,在Java上所有的IO操作都是同步阻塞IO(BIO),因此那个时候对并发要求比较高的大型项目都用C/C++进行开发,因为C/C++可以直接使用操作系统提供的异步IO能力。JD原创 2022-03-08 21:54:54 · 367 阅读 · 0 评论 -
Unix网络IO模型
Unix 网络IO模型文章目录Unix 网络IO模型一、几个重要的概念1.1 文件描述符1.2 内核空间、用户空间、用户态、内核态二、Unix网络IO模型2.1 阻塞IO2.2 非阻塞IO2.3 IO多路复用2.4 信号驱动IO2.5 异步IO一、几个重要的概念在Unix网络IO模型中,有几个比较重要的概念:用户空间、内核空间、用户态、内核态、文件描述符。1.1 文件描述符文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。1.2 内核空原创 2022-03-07 21:31:52 · 516 阅读 · 0 评论 -
JAVA SPI服务发现
Java SPI 服务发现文章目录Java SPI 服务发现一、SPI概述二、使用Java SPI三、JAVA SPI示例一、SPI概述Java SPI提供了一种机制:为某个接口寻找服务实现的机制。调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略。参考:高级开发必须理解的Java中SPI机制二、使用Java SPI使用Java SPI,需要遵守如下约定:1、当服务提供者提供了接口的一种具体实现后,在jar包的META-INF/services目录下创建一个以“接口全限定名”为命名原创 2022-03-01 22:42:59 · 321 阅读 · 0 评论 -
实践常见的RPC框架:gRPC
实践常见的RPC框架:gRPC文章目录实践常见的RPC框架:gRPC一、gRPC介绍二、第一步:gRPC服务的定义(四种RPC服务方法)(1)简单RPC服务(2)服务端流形式的RPC(3)客户端流形式的RPC(4)双向流的PRC三、第二步:生成客户端和服务端代码3.1 方式一:手动执行protoc命令生成服务代码3.2 方式二:通过protobuf-base的代码生成器,直接生成编译后的class文件,不生成源代码3.3 从服务定义文件生成的classes3.4 API的稳定性3.5 高级组件(1)存根(原创 2022-02-27 21:54:26 · 722 阅读 · 0 评论 -
Protocol Buffers语法及使用
Protocol Buffers (Proto3)语法及使用文章目录Protocol Buffers (Proto3)语法及使用一、Protocol Buffers二、Proto3的语法2.1 定义消息类型2.2 声明字段的编号2.3 指定字段的规则*2.4 添加多个消息类型2.5 添加注释2.6 定义预留字段2.7 从`.proto`文件可以生成什么2.8 标量值类型2.9 默认值2.10 枚举2.11 为枚举类型添加预留值2.12 使用其他的消息体2.13 导入定义2.14 使用proto22.15原创 2022-02-24 22:11:31 · 647 阅读 · 0 评论 -
实践常见的RPC框架:Thrift
实践常见的RPC框架:Thrift文章目录实践常见的RPC框架:Thrift一、Thrift介绍二、Thrift使用示例2.1 安装Thrift编译器2.2 编写Thrift的IDL文件2.3 通过Thrift实现RPC功能(1) demo-thrift-api(2) demo-thrift-server 服务端代码(3) demo-thrift-client 客户端代码一、Thrift介绍维基百科上对Thrift的介绍如下:Thrift是一种接口描述语言和二进制通讯协议,[1]它被用来定义和创原创 2022-02-17 22:19:05 · 1000 阅读 · 0 评论 -
实践常见的RPC框架:Hessian
实践常见的RPC框架Hessian文章目录实践常见的RPC框架Hessian一、Hessian二、Hessian实践项目2.1 `demo-api` 定义Bean和服务接口2.2 `demo-hessian-client` 模拟客户端2.3 `demo-hessian-server` 服务端,实现了服务接口三、测试访问一、HessianHessian 是一个binary 协议的rpc框架,轻量级,使用起来比较简单。hessian的maven依赖:<dependency> <原创 2022-02-16 22:38:05 · 556 阅读 · 0 评论 -
自定义RPC框架:从脚手架到框架
自定义的RPC框架:从脚手架到框架文章目录自定义的RPC框架:从脚手架到框架一、RPC框架的关键点二、V1版:RPC脚手架三、V2版:RPC框架3.1 [`rpcfx-core`](https://github.com/hefrankeleyn/JAVARebuild/tree/main/projects/myrpcfxpro02/rpcfx-core) rpc框架的核心内容3.2 [`rpcfx-demo-api`](https://github.com/hefrankeleyn/JAVARebuild原创 2022-02-15 23:02:33 · 401 阅读 · 0 评论 -
利用sharding-proxy实现分库分表
利用sharding-proxy实现分库分表文章目录利用sharding-proxy实现分库分表一、启动一个mysql二、在sharding-proxy上面配置分库、分表的规则三、启动sharding-proxy,并测试四、将用户表拆成2个库,每个库16张表4.1 表结构4.2 sharding-sphere-prox的配置:五、利用sharding-sphere-ui 可以动态的修改配置一、启动一个mysql在上面创建两个库:ds_shop_1和 ds_shop_2,真实的环境中,应当使用两个my原创 2022-01-23 20:18:17 · 1611 阅读 · 0 评论 -
Java开发中总结的非常实用的工具代码
Java开发中总结的非常实用的工具代码文章目录Java开发中总结的非常实用的工具代码一、背景二、将数据写入excel文件一、背景Java项目开发过程中,经常遇到一些类似的功能需求,比如:内容写入excel、读取excel内容、下载文件等。这些功能对有一定开发经验的人员来说很容易就能实现。与其每次都要重新写类似的代码,不如将其总结出来,当再遇到类似的需求时,只需把代码直接复制过来,就可使用,这样就能大大加快我们开发的效率。二、将数据写入excel文件详细内容在:Java工具总结:将数据内容写入ex原创 2022-01-23 00:06:43 · 457 阅读 · 0 评论 -
Java开发中总结的非常实用的工具代码
Java开发中总结的非常实用的工具代码文章目录Java开发中总结的非常实用的工具代码一、背景二、将数据写入excel文件一、背景Java项目开发过程中,经常遇到一些类似的功能需求,比如:内容写入excel、读取excel内容、下载文件等。这些功能对有一定开发经验的人员来说很容易就能实现。与其每次都要重新写类似的代码,不如将其总结出来,当再遇到类似的需求时,只需把代码直接复制过来,就可使用,这样就能大大加快我们开发的效率。二、将数据写入excel文件详细内容在:Java工具总结:将数据内容写入ex原创 2022-01-23 00:01:19 · 246 阅读 · 0 评论 -
Java工具总结:将数据内容写入excel文件
Java工具:将数据内容写入excel文件基于使用POI,生成excel文件。原创 2022-01-22 23:32:34 · 12813 阅读 · 2 评论 -
MySQL读写分离的三种实现方案
MySQL读写分离的三种实现方案文章目录MySQL读写分离的三种实现方案一、搭建一个“一主两从”的MySQL集群二、读写分离实现:方案一2.1 配置多个数据源2.2 使用AbstractRoutingDataSource2.3 这个版本的缺点:三、读写分离实现:方案二3.1 通过ShardingSphere-jdbc 实现读写分离3.2 这个版本的缺点:四、读写分离实现:方案三4.1 通过ShardingSphere-Proxy 实现读写分离一、搭建一个“一主两从”的MySQL集群先搭建一个mysql原创 2022-01-20 22:34:28 · 16380 阅读 · 2 评论 -
读写分离V1:使用AbstractRoutingDataSource
读写分离V1:使用AbstractRoutingDataSource文章目录读写分离V1:使用AbstractRoutingDataSource一、AbstractRoutingDataSource 介绍二、pom依赖三、配置读写分离的数据源四、配置mybatis五、定义注解,并配置AOP,运行时切换数据源六、在service层使用注解,动态切换数据源七、参考一、AbstractRoutingDataSource 介绍根据定义的规则选择对应的数据源完整的代码:myreadwritesep-abstr原创 2022-01-16 22:52:08 · 659 阅读 · 0 评论