自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

原创 对公司招人限制985的思考

最后,用我技术老师的一句话来总结思考:人生没有白走的路,每一步走算数。有因必有果,每一步都铸就了今天的我们。

2024-03-13 11:56:18 243

原创 langchain学习-翻译工具

langchain作为大模型的框架,将使用大模型的流程进行抽象。让使用者可以比较简单的应用大模型进行开发。有点像java中的spring。或者说langchain想成为大模型开发中的"spring"。

2023-08-26 16:45:12 250

原创 Druid源码(八)-怎么设计连接池

通过2周的学习梳理,对Druid的怎么操作数据库有了一个粗浅的了解。同时随着对Druid的学习,我也一直思考一个问题,怎么样设计一个连接池呢?作为一个底层框架需要考虑哪些方面呢?这篇文章是我对这个问题的思考。总体上是从战略设计、战术设计总体2个层面分析。如图所示:战略设计Druid的目标是什么从Druid最早的一个tag(0.2)可以看出这个框架最早就明确要实现一些基本功能:连接池、过滤器、统计、代理、防火墙等。这几个包一直延续到了现在的版本。也就是说Druid的目标是实现一个高性能、高可用

2022-05-20 23:42:21 391

原创 Druid源码学习(七)-shirk逻辑

在前面介绍了DruidDataSource类的init方法中有三个线程:createAndLogThread()、createAndStartCreatorThread()、createAndStartDestroyThread() 分别是创建日志、创建连接,销毁线程。这个线程是守护线程。整体代码如下: public void shrink(boolean checkTime, boolean keepAlive) { try { lock.lockI

2022-05-19 23:20:07 278

原创 Druid源码学习(六)-统计stat之获取连接

统计功能算是Druid工具亮点之一了。统计可以帮助研发或者运维获取到数据连接实时的一些指标,从而能够更好的定位问题。 stat统计是从StatFilter开始。其中connection代码如下: public ConnectionProxy connection_connect(FilterChain chain, Properties info) throws SQLException { ConnectionProxy connection = null;...

2022-05-17 23:36:01 497

原创 Druid源码学习(五)-内置Filter的调用

上篇文章介绍了Filter是如何加载的。那么接下来就介绍Filter的关键类。Filter这个接口定义了Filter需要具备的功能,分成2部分:生命周期、必要操作。生命周期方法为了做更好的扩展。 void init(DataSourceProxy dataSource); void destroy();其他方法基本上都是与数据库操作有关的方法。这里注意一个细节就是其他接口方法定义的参数中都会包含FilterChain 这个参数。这个对象使用了责任链方式对Filter进行扩

2022-05-17 20:57:05 749

原创 Druid源码学习(五)-内置Filter加载

前面介绍完了连接池的大体流程,今天来梳理Druid中Filter的整体流程

2022-05-16 23:26:13 384

原创 Druid源码学习(四)-连接总结

通过前面几篇文章把获取数据库连接的逻辑粗略的梳理了一下。在这过程中我产生了以下几个问题:什么是连接池 在连接池模式下,获取连接应该注意哪些 可用进行哪些扩展带着以上的问题思考,画了一张思维导图。作为一个数据库连接池工具,应该把场景放宽。就是说数据库无论是单机、还是负载均衡亦或者是主从的方式都应该支持。所以第一层应该是数据库组成方式的支持。对于Druid这个项目源码,对负载均衡、主从方式的支持还没有分析到。所以这里不做介绍。本文先只介绍单机的情况。在单机的方式下,我把思路分为了3个阶段.

2022-05-14 23:46:32 495

原创 Druid源码学习(三)

前面介绍了Druid数据源获取连接的init 方法。那么作为数据连接池是如何获取连接以及释放连接的呢?今天就来学习连接池对连接的管理。获取连接获取数据库连接的代码如下所示: @Override public DruidPooledConnection getConnection() throws SQLException { return getConnection(maxWait); } public DruidPooledConnection

2022-05-13 23:38:35 585

原创 Druid源码学习(二)-init创建连接

总图JDBC获取连接DriverManager.getConnection(url, username, password);//getConnection 方法 private static Connection getConnection( String url, java.util.Properties info, Class<?> caller) throws SQLException { /* * When c.

2022-05-12 23:44:33 608

原创 Druid源码学习(二)-init方法的驱动加载

今天继续看DruidDataSource的init 方法。这个方法从字面意思上看是初始化的含义。也就是说在真正获取连接之前数据源还需要做一些工作。这里我会分几篇文章来总结自己的学习,因为init很复杂。第一篇文章会从头梳理一个问题: Druid连接池如果获取连接在介绍Druid之前,先回顾一下JDBC如果获取连接的。JDBC获取连接2步骤://1.加载驱动(开发推荐的方式)Class.forName("com.mysql.jdbc.Driver");String url = "jdb

2022-05-11 23:15:22 958

原创 Druid源码学习(一)

从有个测试用例看连接的建立:Demo0public class Demo0 extends TestCase { private String jdbcUrl; private String user; private String password; private String driverClass; private int initialSize = 10; private int minPoolSize = 1; priv

2022-05-10 23:10:19 627

原创 CAT集成阿里RocketMQ产品

背景在上面介绍了CAT如何做跨进程追踪的。公司项目采用业务垂直切分的方式开发、前后端也是分离方式。那么实时监控埋点的地方有如下几处:前端和后端交互 后端业务逻辑 数据库存储 远程PRC调用 消息队列消息队列介绍这里介绍的是阿里云RocketMQ产品。由于公司现阶段运维实力不足,所以对于中间件采用的策略是直接购买产品。这样可以减少运维成本,同时中间件的稳定性也得到了保证。使用的客户端版本是1.8.8Fianl。如果使用的版本是1.7.x 是没有spi这个包的。集成思路..

2021-06-01 15:01:53 333 3

原创 CAT集成Dubbo

背景在上面介绍了CAT如何做跨进程追踪的。公司项目采用业务垂直切分的方式开发、前后端也是分离方式。那么实时监控埋点的地方有如下几处:前端和后端交互 后端业务逻辑 数据库存储 远程PRC调用 消息队列RPC框架公司选用的RPC框架是apache dubbo ,版本是2.7.5 。dubbo是一款非常优秀的RPC框架。对于框架我就不做过多的介绍了。cat 集成 dubbo 首要考虑的就是让业务系统无感。那么优秀的框架一定有扩展点。在dubbo中可以使用Filter 来进行扩展。..

2021-05-28 23:37:39 700

原创 CAT集成spring boot

1.背景在上面介绍了CAT如何做跨进程追踪的。公司项目采用业务垂直切分的方式开发、前后端也是分离方式。那么实时监控埋点的地方有如下几处:前端和后端交互 后端业务逻辑 数据库存储 远程PRC调用 消息队列2.集成spring boot在git官网中有一个包是大家贡献的集成代码。里面就有各种的集成。里面就有和spring boot集成的代码。代码是直接使用了cat client包中catfilter这个类。这个类的逻辑比较复杂,分了不同的情况。然而公司系统结构中没有那么复杂。整体流程.

2021-05-25 15:09:12 1001 2

原创 CAT介绍

1.CAT的定位CAT是点评开源的一个实时监控系统,主要体现在监控报表Transaction、event、problem、heartbeat等,cat系统定制的监控模型以及定制的实时分析报表也是cat系统核心优势。这里强调了CAT相比于其他系统的二开优势。这也是我选择CAT作为公司正式环境实时监控系统的一个主要原因。相较于其他APM监控系统,大部分使用的是字节码agent技术。公司现在研发对agent以及字节码技术掌握度不高。使用这些技术的链路追踪系统在公司现在的环境下很难进行定制以及维护。.

2021-05-24 23:46:50 1775

原创 java内存模型(二)

上一篇介绍了java的内存结构,那么接下来总结java在多核多线程的环境下如何解决数据访问的复杂问题。二、JMM与线程规范我们知道,计算机按支持的指令大致可以分为两类:精简指令集计算机(RISC),代表是如今大家熟知的ARM芯片,功耗低,运算能力相对较弱。复杂指令集计算机(CISC) ,代表作是Intel的X86芯片系列,比如奔腾,酷睿,至强,以及AMD的CPU。CPU与缓存的结构如图 CPU接收到指令后,它会最先向CPU中的一级缓存(L1 Cache)去...

2021-04-02 00:14:43 54

原创 java内存模型(一)

在提到java的内存模型是,一般都会说堆栈、程序计数器、方法区等这些设计。这里我更觉得秦大哥的说明更加容易理解。那么接下来我会根据秦大哥的解释进行总结说明。一、内存结构:内存结构通常说的就是栈、堆这些结构。从逻辑结构上分为线程栈、堆内存、非堆内存。线程栈:为什么叫线程栈呢?因为首先这部分的数据结构是栈。每个线程都会有自己栈。JVM为每个新创建的线程都分配一个堆栈。线程栈包含了当前正在执行的方法链/调用链上的所有方法的状态信息。线程栈中保存了方法内的局部变量。线程栈有如下特点: 每个线程都.

2021-03-31 23:16:39 107

原创 JVM 类加载器

一、字节码与运行时程序的关系:写好的代码经过编译变成了字节码,并且可以打包成Jar文件。然后就可以让JVM去加载需要的字节码,变成持久代/元数据区上的Class对象,接着才会执行我们的程序逻辑。二、类的生命周期和加载过程一个类的生命周期包括以下几个方面:加载 验证 准备 解析 初始化 使用 卸载在这些过程中,1-5步骤被称作类加载。三、类加载时机提到类加载时机,有个细节需要记录的是:类会在哪些情况下被初始化?这里记录下一些情况。初始化何时会被触发:...

2021-03-11 22:33:59 95

原创 Java字节码(二)

一、字节码的执行模型VM是一台基于栈的计算机器。每个线程都有一个独属于自己的线程栈(JVMstack),用于存储 栈帧 (Frame)。每一次方法调用,JVM都会自动创建一个栈帧。 栈帧 由操作数栈 ,局部变量数组 以及一个 class引用 组成。 class引用 指向当前方法在运行时常量池中对应的class)。二、方法调用的常见指令invokestatic,顾名思义,这个指令用于调用某个类的静态方法,这是方法调用指令中最快的一个。invokespecial, 用来调用...

2021-03-05 23:39:56 85

原创 Java字节码(一)

一、什么是字节码:Java所有的指令有200个左右,一个字节(8位)可以存储256种不同的指令信息,一个这样的字节称为字节码(Bytecode)。字节码是由类型前缀和操作名称这两部分组成。二、java字节码文件编码过程在了解了字节码的含义之后,那么你是否想过一个问题,我们平时编写的是java文件,JVM运行的class文件,也就是字节码。一般这个转化IDE工具帮我们完成了,或者在命令行的情况下使用Javac命令进行编译。那么在整个编译过程经过了哪些步骤呢?如下图所示:看到这里..

2021-03-04 23:37:05 167 1

原创 JVM 基础知识

一、java的定义:Java也是一种编程语言,那么java的定义是:Java 是一种面向对象、静态类型、编译执行,有 VM/GC 和运行时、跨平台的高级语言。这里把java的特点说明的很清楚了。二、JDK、JRE、JVM的含义与关系:JDK(JavaDevelopmentKit)是用于开发Java应用程序的软件开发工具集合,包括了Java运行时的环境(JRE)、解释器(Java)、编译器(javac)、Java归档(jar)、文档生成器(Javadoc)等工具。简单的...

2021-03-02 23:39:52 121

原创 编程语言介绍

一、语言的发展历程:编程语言经历到现在大体上有3个发展历程:从最早的机器语言(01) → 汇编语言 → 高级语言。越是底层的语言执行速度越快,但是越难以理解,耗时越多,门槛越高。现在基本上不会有人去直接写机器语言。越是高级的语言,越是容易让人理解,开发效率高,门槛低一些。随着现在计算机处理速度越来越快,人们的生活节奏越来越快。人们对效率重视程度很高。自然使用高级语言来开发软件是必然的结果,是历史发展的趋势。所以在现在语言百花齐放的时代,也可以大胆的预测。现在变成语言都是高级语言。二、现.

2021-03-01 22:29:37 336

原创 soul源码学习-20210114

目标:运行soul-admin工程日志分析 运行soul-bootstrap工程日志分析 思考 总结1.运行soul-admin工程日志分析1.1在配置了mysql地址和用户名、密码后,启动成功。在启动日志中会发现有如下信息:Thu Jan 14 14:46:36 CST 2021 WARN: Establishing SSL connection without server's identity verification is not recommended. Accordi.

2021-01-15 00:34:19 547

原创 学习笔记2021-01-13

目标:下载soul源码 初步浏览soul的工程结构 成功启动soul-admin工程 成功启动soul-bootstrap工程 总结1.下载源码:soul 的github源码地址是: https://github.com/dromara/soulsoul 的gitee源码地址是: https://gitee.com/shuaiqiyu/soul?_from=gitee_searchsoul 文档查看的地址: https://dromara.org/zh-cn/docs/..

2021-01-14 00:11:31 300

proto buf2.6.1版本 可执行文件

proto buf 2.6.1 exe可执行文件.可以使用直接生成java代码

2017-12-13

空空如也

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

TA关注的人

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