自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 资源 (1)
  • 收藏
  • 关注

原创 从源码层面分析Kafka Broker 网络模型、副本机制

背景驱动学习:kafka是业界消息中间件之楷模,他从网络设计、副本同步机制设计的很优秀,业界也很多公司都使用了kafka,当初我在腾讯的内部后端serve有些场景也是通过Kafka解耦和实现一次性语义,我们公司目前kafka使用的场景也比较多例如tracking收集数据,前端能效组采集接口数据,埋点、大数据平台实时流计算,基本都使用kafka作为采集端,完成数据上报。心得感受:第一次看kafka broker的源码的时候,我是一个不懂scala语言的人,刚开始看这个代码很难受,过来这个难受时期,你会

2021-12-29 14:35:30 406

原创 GO 函数闭包与自执行函数学习

函数学习1、自执行函数和闭包 在js中也有这个概念,这样可以加深我们对函数的里面+自执行函数1、1 通过学习javascript我们再来深入学习go的语法,在javascript的意思就是自己调用自己(function ( a, b) { console.log("a=" + a +"b="+b)})(1,2);// result = a =1 b =21、2 在GO...

2020-04-12 19:58:36 1115

原创 springmvc源码分析之一

springmvc其实就是对servlet的封装看源码需要搞清楚一下几个问题springmvc是如何和servlet整合springmvc是如何与ioc整合一、springmvc是如何与servlet整合servlet 3.0 规范提到总结 : servlet容器在启动的时候回加载实现 ServletContainerInitializer 位置放到META-INF/servi...

2019-11-29 15:43:50 104

原创 数据结构与算法

一线Owner精神owner需要做哪些事情的?需求评审总体方案编写、工作时间评估协调开发资源、测试资源上线后质量、数据转化需求评审在任何一个公司都会有需求评审这个过程,做为一个owner在需求评审前,你首先要熟悉需求,然后看看需求是否有可以优化的点,需求中是否存影响原来系统的运行质量,如果影响应该采用什么样的方案才能达到预期的评估模型,或者需求中,有没有不明确的地方,需求产品补充什么,一定要明确,不然做出来的东西不符合预期,改动起来很麻烦,这个一定需要需求左移。总体方案编写、工作时间评

2021-06-17 22:33:50 179 1

原创 第一篇: Redis源码分析(数据结构)

背景:在高并发的场景下面,我们离不开缓存,那么缓存到底是什么实现了, 由此我想到的就是去看Redis源码,他的实现是由C语言实现,那么做为一个java、golang程序员,我们如何看懂呢? 其实秉承着语言都是相通的特性,就是开始分析Redis源码。Redis数据结构分析第一个: 我们先弄明白 SDS 其实就是定义redis 5中数据类型的数据结构定义SDS:字符串即 Simple Dynamic String(即简单动态字符串),其中动态的含义是内存的分配是动态的,sds的定义如下:struc

2020-11-08 19:19:50 545

原创 缓存与数据库 一致性分析

缓存与数据库 一致性分析(双写)1、1 Read Pattern 读模式总结: 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。1、2 Write Pattern 写模式更新与write是一样的,先写数据库,然后在写缓存,为什么? 下面我用一张图说明缓存写总结: 更新的时候,先更新数据库,然后再删除缓存缓存删除​ 异常分析:​ 1、删除缓存失败,也不会出现不一致的现象​ 2、删除数据库失败,但是缓存的数据也就删除,

2020-09-06 19:00:59 1858

原创 Tomcat源码分析

Tomcat源码导读分析背景: tomcat是一个web服务器,为什么被很多公司使用呢,肯定有他们的优点,带着这个原因,我就开始阅读源码,其实我们不熟悉源码也能工作,为什么我需要需要源码呢。更多的是学习别人在源码中的一些设计思想,例如spring、mybatis 等很多有些的开源框架,他们在设计组件的思想,设计模式如何在组件中灵活的使用。spring为什么会这么火,我觉得就是他的设计很完美,容器化思想,切面技术,基于他有诞生了很多项目,springboot、springcloud,springclouda

2020-08-15 10:26:12 722

原创 二、条件、循环

一、条件if定义: 当条件表达式成立时,执行动作或者不成立执行动作 结构 if condition { // business code process } else { // business code process }总结:1、if后面为添加表达式;2、if后面可以跟多个表达式;switchswitch + conditionswitch循环forfor … range...

2020-07-05 14:04:50 149

原创 变量

变量一、变量的定义什么是变量、什么是常量, 什么是枚举变量:在内存中可以被改变的量;常量:在内存不可以改变的量,那么我们定义const类型的变量就需要赋值 ;枚举:在go语言中是一组常量集合如何使用上面变量、常量、枚举变量的定义func main() { //1、 定义变量 var num int = 1 fmt.Print(num) // 2、定义变量并自动检测类型 autoVariables:= 1 fmt.Println(autoVariables) }

2020-07-04 22:13:19 1399

原创 Go语言学习笔记

Go语言学习笔记一、变量二、条件、循环三、函数

2020-07-04 17:28:58 195

原创 GO语言--动态数据

什么是动态数组 动态数组就是不指定长度,使其长度自动变化。动态数组参数动态数组几个很重要的参数数组指针、长度、容量数组指针: 指向数组–>> 数组动态数组的使用第一种:// 定义数组 arr := []int{1,2,3} fmt.Println(arr, len(arr), cap(arr))打印: [1 2 3] 3 3第二种func main() { s1 := make([]int, 3) // 创建数组 fmt.Printl

2020-06-07 22:13:08 505

原创 实战Go web Hello world项目

实战Go web Hello world项目该项目有什么特性规范了http响应每层都有标准的接口路由与控制分离提供简洁的启动方法技术栈go环境mysqlgin 提供web化服务go mod 提供包管理工程结构响应输出代码结构分析包结构分析com.cndao : 提供数据库层操作model: 提示实体类service: 业务处理类web: 提供...

2020-04-23 14:33:59 242

原创 如何扩展Spring源码将配置文件中配置的类的属性自动注入的spring容器中

Spring提供了三方方式将Bean注入到spring容器中@Import()ImportBeanDefinitionRegistrarImportSelector实现思路通过读取配置文件中的属性到环境变量中,然后通过环境变量与spring容器提供的接口完成自动映射.实现步骤新建文件usr.id = musr.name = lisiusr.age = 10定义一...

2020-04-07 18:01:29 316

原创 TCP学习

TCP相关知识(学习总结)TCP历史及设计哲学TCP解决了那些问题TCP报文格式如果使用tcpdump分析网络报文三次握手建立连接三次握手过程中的状态变迁三次握手中的性能优化与安全问题数据传输与MSS分段重传与确认RTO重传定时器的计算滑动窗口 发送窗口与接收窗口窗口额滑动与流量控制操作系统缓冲与滑动窗口的关系如何减少报文提高网络效率拥塞控制(慢启动、拥塞避免、快速...

2020-04-06 22:46:26 161

原创 Dubbo路由目录分析

温馨提示 个人觉得,看源码最好的方式就是看源码中写的测试代码测试源码分析org.apache.dubbo.rpc.cluster.directory.StaticDirectoryTest#testStaticDirectorypublic void testStaticDirectory() { // 第一步: 路由服务Router Router rout...

2020-03-18 11:40:15 308

原创 Dubbo客户端调用源码分析

入口分析ReferenceBeanpublic class ReferenceBean<T> extends ReferenceConfig<T> implements FactoryBean, ApplicationContextAware, InitializingBean, DisposableBean{ // TODO}Spring相...

2020-03-12 22:44:21 222

原创 Springmvc源码分析

HandlerMappingAdapters

2020-03-02 22:49:15 98

原创 第一章 Netty源码分析

Java网络知识OSI网络模型三次握手四次挥手

2020-02-26 21:42:31 86

原创 第五章 责任链设计模式

责任链设计模式1、责任链设计模式有点类似于数据结构中的递归于回溯的两个过程2、也可以使用面向对象编程对象嵌入对象的方式实现(链表 --> 的作用是建立类之间的关系,C语言使用指针建立地址之前的关系)代码实现/** * 需求: * 1、 满200减20 * 2、 首次购减20 * 3、 第二单打9折 * ............. */public abstract...

2020-02-26 14:40:36 100

原创 第四章 单例模式

单例模式以下在单线程的情况理解改概念懒汉式懒汉式在类加载时不初始化,延迟加载。(配置文件)饿汉式在类加载时初始化,加载慢,获取对象快。饿汉式是线程安全的,懒汉式需要加synchronized,否则不安全。如何使用:将类的构造器声明为私有化,这就使得外部无法通过构造函数创建这个类的对象了。那么如何创建这个类的唯一那个对象呢?在该类中声明一个静态的私有的该类的变量。不初始...

2020-02-25 20:53:45 98

原创 第三章 建造者设计模式

建造者设计模式builder 设计模式如何理解,一个类负责组装,这时候就可以使用该模式理解图:描叙: 假如一个车有车架、发动机、等等部分构成那么就可以采用该设计模式使用场景:我们常用的lombok中的@Builder注解,mybatis源码中那个助理使用的很多。代码:创建建造者模式public class CarBuilder { private Ca...

2020-02-25 20:01:52 85

原创 第二章 工厂设计模式

工厂设计模式简单工厂对生产对象进行统一管理对外提供一个可调用的接口。

2020-02-24 23:28:00 103

原创 第一章 设计模式基础部分

常用设计模式分类创建模式静态工厂模式工厂方法模式抽象工厂模式单例模式建造者模式结构型模式桥接模式适配器模式装饰器模式代理模式组合模式行为模式模式方法模式策略模式观察者模式责任链模式命令行模式访问模式设计模式六大原则单一职责原则 (一个类负责一个一项职责)里氏替换原则 (子类可以扩展父类的功能,但不要改变父类原有的功能)依赖倒...

2020-02-24 23:13:24 101

原创 滑动窗口算法

滑动窗口算法他解决什么问题?把嵌套查询转换为单循环,降低时间复杂度。数组子字符串数组如果一个数组A 中间有任意数,求任意数组中子数据组连续的和。arr[] = {200,330,600};substring length is: k=2output value :330+600=930如果解决上面的问题通过暴力法可以解决该问题。采用嵌套循环。这...

2020-01-27 23:18:50 256

原创 SpringCloud ----OpenFeign源码分析

SpringCloud ----OpenFeign源码分析目录介绍第一步: 从官方下载源码第二步: 目录分析spring-cloud-openfeign-core: 支持注解、编解码、负载均衡、配置文件解析、动态代理spring-cloud-openfeign-dependencies: 依赖管理spring-cloud-starter-openfeign: 启动加载管理s...

2020-01-09 14:00:43 255

原创 springmvc源码解析之配置加载ContextLoadListener第二章

主入口初始化org.springframework.web.context.ContextLoader#initWebApplicationContextpublic WebApplicationContext initWebApplicationContext(ServletContext servletContext) { // 获取root上下文对象 if (servletCon...

2020-01-02 15:33:30 170 1

原创 Nginx从入门到实战

Nginx从入门到实战什么是Nginx,我们为什么要使用nginx。Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器代理如何理解代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务...

2020-01-01 18:22:27 253

原创 Mysql执行计划与批量insert语句

执行计划:id: 确定sql的执行的先后顺序1、id相同按照从上到下2、id不同大的优先执行3、id相同也有id不同、那么执行顺序是先执行id越大的先执行,如果在执行的过程中发现id相同就从上到下执行select_type:1、simple: 简单的sql查询语句不包含子查询或者union2、primary: 如果sql语句包含复杂的sql语句,那么最外层的sql为primary...

2019-12-29 20:20:43 616 2

原创 Redis 主从+哨兵搭建构建生产环境

Redis 搭建过程第一步: 从官方网站下载redis安装包第二步: 编译与安装step1 : mkdir /appsstep2: cp apps/step3 执行下载wget http://download.redis.io/releases/redis-5.0.7.tar.gzstep4 tar -zxvf redis-5.0.7.tar.gzstep5 cd...

2019-12-21 23:21:32 318

原创 MySql学习总结

MySql学习总结指标TPS Transactions Per Second (每秒传输的事务处理个数),这个指服务器每秒处理的事务数,支持事务的存储引擎如InnoDB等特有的一个性能指标。QPS Queries Per Second (每秒钟查询处理) 同时适应与InnoDB和MyISAM引擎等待时间: 执行Sql等待放回结果之间的等待时间TPS =(COM_COMMIT + CO...

2019-12-19 23:12:23 310

原创 Tomcat源码分析Bootstrap第二章

Bootstrap静态类初始化过程:加载工程目录路径 String userDir = System.getProperty("user.dir")加载catalina.home目录 String home = System.getProperty(Globals.CATALINA_HOME_PROP)总结、检查当前是否jvm传入参数。如果传入了就将他设置到系统变量中去。...

2019-12-14 16:30:50 82

原创 Tomcat源码分析

Tomcat源码分析一、Tomcat模块分析Server​ 代表tomcat服务(一个)Service​ 逻辑层(在一个server中可以允许有多个service)Connector处理连接(接收请求)Containerconnector接收的请求在Container完成业务处理​ Engin 表示整个Servlet引擎​ ...

2019-12-14 15:48:31 89

原创 Mybatis文件加载第九章

Mybatis文件加载Configutation:mappedRegister 注册接口的动态代理loadedResources 填充xml文件资源resultMaps 填充resultMapsqlFragments 填充sql元素mappedStatements 填充mappedStatmentkeyGenerators 填充KeyGeneratororg.apache.i...

2019-12-07 16:48:04 157

原创 MyBatis源码分析配置解析、分析第八章

配置文件分析Configuration这一章主要搞搞清楚一下几个问题如何解析核心配置文件如何解析mapper文件如何解析mapper接口XMConfigBuilder 读取核心配置xmlSqlSourceBuilder 解析sqlXMLScriptBuilder 读取mapper文件...

2019-12-06 18:27:39 153

原创 MyBatis源码分析缓存第七章

mybatis缓存如何设计呢?mybaits如何进行细粒度锁的控制如何生存key的。如何存入缓存带着问题我们一步一步的分析源码包结构org.apache.ibatis.cache.Cache 这个接口是如何放入读、写、删操作 类似于数据库的curd操作public interface Cache { /** * @return The identifier of t...

2019-12-05 17:32:46 243

原创 Mybatis基础组件反射模块第六章

学习该组件可以让你深入理解JDK反射机制。从解析配置文件获取到class对象然后在创建对象再对该对象进行赋值操作主要经过一下几个步骤获取到class的全类路径创建该类的对象对该对象进行赋值操作JavaBean规范JavaBean具有如下特征1、所有的属性都是私有的(通过 getter和setter 访问)2、拥有公有的无参数构造函数3、提供 setter/getter4、实...

2019-12-05 10:13:42 165

原创 Mybatis源码分析(数据源分析)第五章

数据源包结构、设计模式前面已经介绍org.apache.ibatis.datasource.DataSourceFactorypublic interface DataSourceFactory { // 设置属性 void setProperties(Properties props); // 获取数据源 DataSource getDataSource();}...

2019-12-04 20:29:25 108

原创 Springboot配置原理

注解bean实现的大致路径注解驱动Bean注册方式@ComponentScan@Component或者Configuration Class@BeanAnnotationConfigApplicationContext

2019-12-03 20:24:42 100

原创 Mybaits事物分析(基础组件)第四章

事物包结构源码分析org.apache.ibatis.transaction.Transaction// 定义一组标准接口public interface Transaction { /** * Retrieve inner database connection. * @return DataBase connection * @throws SQLExcept...

2019-12-03 18:16:09 91

原创 Mybaits 基础组件---日志分析第三章

LogFactory 日志工厂日志组件: 主要使用的工厂设计模式、适配器设计模式包目录mybaits为了兼容其他第三方组件,自己定义一个针对于mybaits的通用接口public interface Log { boolean isDebugEnabled(); boolean isTraceEnabled(); void error(String s, Throwab...

2019-12-03 18:08:35 119

缓存一致性问题与解决方案

在高并发下,由于时许的问题导致缓存中的数据与数据库中的数据不一致那么我们应该如何解决呢? 1、 锁能解决这种问题吗,不行为什么呢。 锁解决的是竞争问题。 2、单纯的消息中间件能解决吗,中间件可以保证时序,但是不能判断是否存在该消息 3、数据库的事务是否能解决呢? 事务解决的也是数据一致性的问题(业务层与数据库层面的一致性),看来这个也跟数据库的事务没有关系。 4、我们可以采用队列来实现,read的时候判断当前队列中是否存在删除操作,如果存在直接等待,如果没有直接执行,这个看样子是可以解决问题,当前这样会出现大量的线程阻塞、有可能还是出现timeout。

2020-09-06

空空如也

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

TA关注的人

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