<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dhaibo1986的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/dhaibo1986</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; dhaibo1986]]></copyright><item><title><![CDATA[linux centos7环境下修改oracle19c监听IP并重启]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/125917145</link><guid>https://blog.csdn.net/dhaibo1986/article/details/125917145</guid><author>dhaibo1986</author><pubDate>Thu, 21 Jul 2022 18:39:11 +0800</pubDate><description><![CDATA[在linux服务器centos7上新安装的oracle19c，结果发现客户端怎么都连不上。可以看到监听端口的ip为127.0.0.1。是本地回环路由。其他服务器无法访问这个地址。]]></description><category></category></item><item><title><![CDATA[在windows上配置git支持多账号]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/125899956</link><guid>https://blog.csdn.net/dhaibo1986/article/details/125899956</guid><author>dhaibo1986</author><pubDate>Wed, 20 Jul 2022 20:31:35 +0800</pubDate><description><![CDATA[现在大多数人都采用git进行版本管理，在git下面进行开发被越来越多的程序员所接受。还有越来越多的人参与开源社区的建设。现在有一个问题就是，在windows环境下，如何在git客户端上通过sshkey的方式配置多个账号。不需要输入git的用户名和密码，使得更加方便高效。...]]></description><category></category></item><item><title><![CDATA[在windows上编译Inlong所遇到的问题]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/124512456</link><guid>https://blog.csdn.net/dhaibo1986/article/details/124512456</guid><author>dhaibo1986</author><pubDate>Sat, 30 Apr 2022 20:34:42 +0800</pubDate><description><![CDATA[1.Hadoop相关的问题
在windows中，由于Inlong的很多单元测试用例都需要用到hadoop的相关组件进行测试。可以采用winunits配合测试，winutils是windows上专门配合hadoop和yarn测试的工具。
在github上下载该工具：
git clone https://github.com/steveloughran/winutils.git

之后选择一个版本，配置环境变量：
HADOOP_HOME    D:\workspace\github-work\winutils\]]></description><category></category></item><item><title><![CDATA[使用docker部署golang http服务时遇到的一个问题]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/123335282</link><guid>https://blog.csdn.net/dhaibo1986/article/details/123335282</guid><author>dhaibo1986</author><pubDate>Mon, 07 Mar 2022 17:29:04 +0800</pubDate><description><![CDATA[需要使用docker将golang的httpserver容器化。在这个过程中遇到了一个弱智问题，特此记录。
1.背景
1.1 问题描述
问题描述：
docker镜像启动成果之后，通过curl不能访问：
[root@hecs-205828 ~]# curl -XGET http://127.0.0.1:8360/hello
curl: (56) Recv failure: Connection reset by peer

1.2 webserver代码
go文件：main.go
package main

]]></description><category></category></item><item><title><![CDATA[架构训练营模块二作业]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121968513</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121968513</guid><author>dhaibo1986</author><pubDate>Thu, 16 Dec 2021 10:14:36 +0800</pubDate><description><![CDATA[分析一下微信朋友圈的高性能复杂度
【作业要求】

对照模块2讲述的复杂度分析方法，分析微信朋友圈的复杂度。
针对各个复杂度，画出你的架构设计方案（无需做备选方案，只需要最终的方案即可）。
给出你的架构方案中关键的设计理由。
3~5页PPT 即可，涵盖复杂度分析、架构设计、设计理由。
【提示】
分析过程可以参考模块2第5课的实战案例，但是不需要将分析过程一一列举出来。
如果某个地方被卡主了，请及时联系助教或者老师讨论。

朋友圈复杂度分析：
业务复杂度：朋友圈的业务复杂度比较低，只有内容发布、查看和评论和点赞]]></description><category></category></item><item><title><![CDATA[架构训练营模块一作业]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121837965</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121837965</guid><author>dhaibo1986</author><pubDate>Thu, 09 Dec 2021 18:22:59 +0800</pubDate><description><![CDATA[画出微信的业务架构图。



“学生管理系统”毕设架构设计
假设今年学校毕业设计要求提升，要求做真正可运行的学生管理系统，学院对毕设的具体要求如下：
① 要求可以通过公网域名访问；
② 要求至少3 人合作完成；
③ 能够支撑管理1000 个学生；
④ 答辩的时候会根据架构方案来进行打分，不推荐太简单和太复杂的方案。
你找了2 个好朋友一起来做这个项目，你们的基本情况如下：
① 大家都会Java，但是有一个是PHP 高手；
② 大家经济条件一般。
作业要求：
① 对照面向复杂度架构设计方法论，构思2 个以上.]]></description><category></category></item><item><title><![CDATA[Druid源码阅读10-DruidDataSource中的一些计数器]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121430733</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121430733</guid><author>dhaibo1986</author><pubDate>Fri, 19 Nov 2021 20:48:50 +0800</pubDate><description><![CDATA[在Druid连接池的工作过程中，会用到一些计数器对Druid的情况进行判断。然后根据计数器的数据采取一系列操作，整理如下:
1.统计类的计数器




变量名
类型
说明




connectCount
long
getConnectionInternal被调用之后就会增加，意味着连接被get的次数。


closeCount
long
连接调用recycle中，包括回收、关闭等情况，成功之后会增加，标识连接关闭的次数。


recycleCount
long
连接调用recycle成功之后才会增加，不包]]></description><category></category></item><item><title><![CDATA[Druid源码阅读9-DruidDataSource和DruidConnection中的状态]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121407085</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121407085</guid><author>dhaibo1986</author><pubDate>Thu, 18 Nov 2021 18:20:57 +0800</pubDate><description><![CDATA[DruidPooledConnection中的状态：




字段
类型
所在类
默认值
说明




closed
volatile   boolean
DruidPooledConnection
false
关闭状态，recycle到连接池中的连接会修改为true。但是这个状态通常只在checkStateInternal中单独使用。判断连接是否关闭需要结合(closed  or disable)


disable
volatile   boolean
DruidPooledConnection
fal]]></description><category></category></item><item><title><![CDATA[Druid源码阅读8-DruidDataSource的removeAbandoned机制]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121384904</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121384904</guid><author>dhaibo1986</author><pubDate>Wed, 17 Nov 2021 18:39:18 +0800</pubDate><description><![CDATA[有关于Druid的removeAbandoned机制，在getConnection源码中介绍过。removeAbandoned实际上就是Druid的泄露检测机制。主要的参数有：




参数
说明




removeAbandoned
如果连接泄露，是否需要回收泄露的连接，默认false；


logAbandoned
如果回收了泄露的连接，是否要打印一条log，默认false；


removeAbandonedTimeoutMillis
连接回收的超时时间，默认5分钟；


removeAbandon]]></description><category></category></item><item><title><![CDATA[Druid源码阅读7-DruidDataSource的recycle过程]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121363454</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121363454</guid><author>dhaibo1986</author><pubDate>Tue, 16 Nov 2021 19:40:09 +0800</pubDate><description><![CDATA[Druid中的Connection在使用之后，要进行回收，而回收连接的方法就是recucle方法。
回收的主要目的是将连接的状态清空/重置之后，放置到连接池的connections数组的尾部，然后发送连接池lock的notEmpty条件变量通知消息，让等待的消费者线程来获取连接。
1.回收过程
回收方法首先要做的是，判断回收线程是否为同一个线程。如果不是，则打印日志输出。
if (logDifferentThread //
    &amp;&amp; (!isAsyncCloseConnectionEna]]></description><category></category></item><item><title><![CDATA[Druid源码阅读6-PreparedStatementPool源码及使用场景分析]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121342475</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121342475</guid><author>dhaibo1986</author><pubDate>Mon, 15 Nov 2021 20:19:11 +0800</pubDate><description><![CDATA[**在阅读DruidDataSource源码的过程中，发现DruidConnectionHolder有个特别的属性PreparedStatementPool statementPool。
根据经验可知，这是DruidPreparedStatement进行缓存的cache。我们在使用PreparedStatement的过程中，由于PreparedStatement对sql语句的解析和参数的注入是分开的，
因此，加入cache之后，可以在同一个连接上，对相同sql,不同参数的请求进行复用。
1.开启参数
如果要]]></description><category></category></item><item><title><![CDATA[Druid源码阅读5-DruidDataSource的shrink过程]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121312110</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121312110</guid><author>dhaibo1986</author><pubDate>Sat, 13 Nov 2021 23:23:03 +0800</pubDate><description><![CDATA[shrink方法是DestroyTask线程中回收连接的具体执行方法。
首先获得锁：
try {
    lock.lockInterruptibly();
} catch (InterruptedException e) {
    return;
}

之后，要判断初始化状态是否完成，如果采用异步初始化，可能DestoryTask线程已经启动，但是连接池还没有初始化完成。
if (!inited) {
    return;
}

之后对连接池中的连接进行遍历，connections中，可连接的连接数记]]></description><category></category></item><item><title><![CDATA[Druid源码阅读4-DruidDataSource的getConnection过程]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121267489</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121267489</guid><author>dhaibo1986</author><pubDate>Thu, 11 Nov 2021 14:38:53 +0800</pubDate><description><![CDATA[DruidDataSource连接池实现了javaX.sql包中，DataSource接口的全部方法。getConnection也来自于javaX.sql.DataSource接口。
而DruidPooledConnection也实现了接口java.sql.Connection。
这样就能在各种场景中通过这个接口来获取数据库连接。
1.fileter处理–责任链模式
在执行getConnection方法的过程中，首先确认DataSource是否完成了初始化。由于 init方法采用了Double Check机]]></description><category></category></item><item><title><![CDATA[Druid源码阅读3-DruidDataSource连接池的基本原理]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121251236</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121251236</guid><author>dhaibo1986</author><pubDate>Wed, 10 Nov 2021 16:34:39 +0800</pubDate><description><![CDATA[DruidDataSource数据库连接池的的本质，实际上是一个利用ReentrentLock和两个Condition组成的生产者和消费者模型。
1.DruidDataSource中的锁
在DruidAbstractDataSource类中，定义了一个非常重要的锁，几乎所有的线程都使用到了这个锁。
//可重入锁 lock
protected ReentrantLock                            lock;
//非空条件变量
protected Condition         ]]></description><category></category></item><item><title><![CDATA[Druid源码阅读2-DruidDataSource的init过程]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121233998</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121233998</guid><author>dhaibo1986</author><pubDate>Tue, 09 Nov 2021 18:24:03 +0800</pubDate><description><![CDATA[DruidDataSource的使用都是创建DruidDataSource对象，set配置参数之后，调用init方法。
通过mock测试实例化DruidDataSource：
DruidDataSource ds = new DruidDataSource();
ds.setUrl("jdbc:fake:dragoon_v25masterdb");
ds.setUsername("tddl5");
ds.setPassword("tddl5");
ds.setFilters("stat");
ds.init]]></description><category></category></item><item><title><![CDATA[Druid源码阅读1-DruidDataSource数据结构]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121215459</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121215459</guid><author>dhaibo1986</author><pubDate>Mon, 08 Nov 2021 20:26:42 +0800</pubDate><description><![CDATA[DruidDataSource是DruidCP最关键的类之一，承载了连接池的启动、关闭、以及连接的获取和管理等功能。
其内部关键的的数据结构如下表:




name
type
说明




connections
volatile DruidConnectionHolder[]
pool的关键数组，存放连接，实际上是DruidConnectionHolder的数组。Connection由DruidConnectionHolder持有


evictConnections
DruidConnectionHo]]></description><category></category></item><item><title><![CDATA[kafka-manager(cmak)安装及使用]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121150323</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121150323</guid><author>dhaibo1986</author><pubDate>Thu, 04 Nov 2021 20:10:42 +0800</pubDate><description><![CDATA[1.软件下载
kafka-manager 工具目前改名为cmak,下载地址为：https://github.com/yahoo/CMAK/releases/tag/3.0.0.5
现在下载最新版本的cmak文件：
cmak-3.0.0.5.zip
将该文件下载并放置到/opt/software目录。
此外，根据官网描述，要求jdk版本为jdk11。
jdk-11.0.13_linux-x64_bin.tar.gz
下载路径https://www.oracle.com/java/technologies/do]]></description><category></category></item><item><title><![CDATA[kafka3.0集群搭建过程]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121129050</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121129050</guid><author>dhaibo1986</author><pubDate>Wed, 03 Nov 2021 19:53:13 +0800</pubDate><description><![CDATA[1.环境说明
服务器资源规划如下表:




IP
hostname
部署资源




192.168.162.201
m162p201
zookeeper,kafka


192.168.162.202
m162p202
zookeeper,kafka


192.168.162.203
m162p203
zookeeper,kafka


操作系统版本(三个节点均相同)：
[root@m162p201 software]# lsb_release -a
LSB Version:    :core-4.1]]></description><category></category></item><item><title><![CDATA[RabbitMQ在Springboot下的使用]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121101855</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121101855</guid><author>dhaibo1986</author><pubDate>Tue, 02 Nov 2021 15:43:22 +0800</pubDate><description><![CDATA[在springboot下操作rabbitMQ。
1.pom文件配置
pom文件配置如下：
  &lt;!-- Spring Boot --&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter&lt;/artifactId&gt;
        &lt;/depen]]></description><category></category></item><item><title><![CDATA[RabbitMQ 3.9.8 的rpm安装方式]]></title><link>https://blog.csdn.net/dhaibo1986/article/details/121081700</link><guid>https://blog.csdn.net/dhaibo1986/article/details/121081700</guid><author>dhaibo1986</author><pubDate>Mon, 01 Nov 2021 15:48:34 +0800</pubDate><description><![CDATA[文章目录1.rpm包下载2.rpm安装3.配置及启动rabbitmq4.遇到的一些常见的错误4.1 端口被占用错误4.2 增加用户报错
之前采用源码的方式安装erlang,之后再来安装rabbitMQ，这种方式有一些复杂。现在参考官网，可以直接用rpm安装。本文对安装过程进行描述。
官方参考Installing on RPM-based Linux (RedHat Enterprise Linux, CentOS, Fedora, openSUSE)
1.rpm包下载
需要安装的操作系统信息：
[root@]]></description><category></category></item></channel></rss>