自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(341)
  • 资源 (2)
  • 收藏
  • 关注

原创 容器虚拟化原理

容器是一种打包应用及其运行环境的方式,为应用打包所有软件及其所依赖的环境,并且可以实现跨平台部署,它是一系列内核特性的统称。

2023-11-27 15:39:43 495 1

原创 虚拟机虚拟化原理

虚拟化就是通过模仿下层原有的功能模块创造接口来“欺骗”上层的机制。虚拟化可以通过资源管理技术,将物理存在的实体资源以虚拟机(Virtual Machine,VM)的形式抽象成一种逻辑表示。通常的做法是在整个系统架构中增加一个抽象层,负责分割下层的物理资源,然后组合成逻辑资源供上层使用。

2023-11-24 14:01:22 445 1

原创 云原生技术演进之路-(云技术如何一步步演进的,云原生解决了什么问题?)

云计算指IT基础设施的交付和使用模式,用户可以通过网络,以按需、易扩展的方式获得所需计算机资源。第一层次,是最底层的硬件资源,主要包括CPU(计算资源),硬盘(存储资源),还有网卡(网络资源)等。第二层次,用户不直接使用CPU、硬盘、网卡,厂商把操作系统(例如Windows、Linux)装好,把数据库软件装好,用户直接使用。第三层次,厂商不但要装好操作系统这些基本的,还要把具体的应用软件装好,例如FTP服务端软件、在线视频服务端软件等,用户可以直接使用服务。

2023-11-24 10:03:32 800

原创 【Go语言学习笔记】——Go语言常用内置包

strings包的字符串处理函数判断字符串包含字符串分割大小写转换修剪字符串比较字符串strconv包的常用函数Parse 类函数Parse类函数主要功能是将字符串转换为其他类型Format类函数Format类函数主要是将其他类型格式化成字符串time包

2023-03-14 18:09:07 370 1

原创 【Go语言学习笔记】数据

Goland数据结构

2023-03-08 13:43:59 443

原创 Git上传代码到新建仓库

Git 提交新项目到远程Git仓库

2022-12-08 16:24:16 409

原创 【Apache Kafka3.2】KafkaConsumer源码分析

与KafkaProducer不同的是,KafkaConsumer不是一个线程安全的类。为了便于分析,我们认为下面介绍的所有操作都是在同一线程中完成的,所以不需要考虑锁的问题。这种设计将实现多线程处理消息的逻辑转移到了调用KafkaConsumer的代码中,可以根据业务逻辑使用不同的实现方式。例如,可以使用“线程封闭”的方式,每个业务线程拥有一个KafkaConsumer对象,这种方式实现简单、快速。还可以使用两个线程池实现“生产者—消费者”模式,解耦消息消费和消息处理的逻辑。

2022-10-24 14:18:28 872

原创 Kafka设计原理——副本数据同步机制(watermark 和 leader epoch)

Kafka 内部备份机制的原理

2022-09-26 16:23:01 1438

原创 Kafka 设计原理——副本与ISR设计

一个Kafka分区本质就是一个备份日志,即利用多份相同的备份共同提供冗余机制来保持系统高可用性。

2022-09-26 15:19:35 815

原创 【Go语言学习笔记】函数

Go语言学习笔记——函数的定义和使用

2022-09-18 16:14:23 253

原创 【Go语言学习笔记】类型、表达式

goLand类型

2022-09-17 16:25:14 321

原创 【Apache Kafka3.2】KafkaProducer发送消息源码分析

KafkaProducer发送消息流程

2022-09-16 15:59:00 912

原创 Kafka设计原理——consumer rebalance概览及过程

这个分配过程就被称为rebalance,consumer成功地执行rebalance后,组订阅topic的每个分区只会分配给组内的一个 consumer实例。consumergroup的rebalance本质上是一组协议,它规定了一个consumergroup是如何达成一致来分配订阅topic的所有分区的。offset,但是rebalance之后该group产生了新一届的group成员,而这次延迟的offset提交携带的旧的generation信息,因此这次提交会被consumer group拒绝。

2022-09-08 14:26:03 445

原创 Kafka生产者和消费者基本操作

Kafka生产者和消费者基本操作

2022-09-08 11:44:59 2537

原创 自动化运维工具Ansible的基本概念及Ansible playbook的基础用法

我们现在部署应用软件的方式是通过服务串联起来,运行在一系列分布式的计算资源上,并用各种不同的网络协议进行通信,常见的应用包括web服务、应用服务、SQL数据库等。你可以手动方式来搭建这些服务:安装服务器操作系统,ssh登录每一台,安装软件包,编辑配置文件等等。这些方式耗费大量时间还经常出错,特别是在做了3~4次之后,这些枯燥重复的手工劳动是令人非常痛苦的。

2022-09-07 16:29:29 1261

原创 Kafka的基本概念

Kafka的基本概念以及topic的基本操作

2022-07-08 17:04:06 1361

原创 Kubernetes常用概念及命令

kubeadm工作原理安装master在初始化master时,只需要执行kubeadm init命令即可:kubeadm init --pod-network-cidr 10.244.0.0/16 --kubernetes-version st able这个命令会自动:系统状态检查;生成token;生成自签名CA和client端证书;生成kubeconfig用于kubelet连接API server;为master组件生成static Pod manifest并放到/etc/Kuber

2022-02-21 11:30:33 1355

原创 Kubernetes初识——核心组件

核心组件etcd 保存了整个集群的状态;API Server 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册 和发现等机制;Controller Manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新 等Scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;Kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的 管理;Container Runtime 负责镜像管理以及 Pod 和容器的真

2022-02-21 10:26:56 697

原创 Kubernetes初识——基本概念了解

Kubernetes 基本概念了解

2022-01-10 16:49:45 430

原创 Mybatis源码解析(一)——Mybatis的核心组件

Mybatis的执行流程及核心组件各组件的作用:Configuration:用于描述Mybatis的主配置信息,其他组件可通过这个组件获取需要的配置信息;MappedStatement:用于描述Mapper中的SQL配置信息,是对Mapper XML配置文件中的sql标签或者Mapper接口中的sql注解配置信息的封装;SqlSession:为Mybatis提供的面向用户的API,表示和数据库交互时的会话对象,用于完成数据库的增删改查功能。SqlSession是Executor组件的外

2021-07-09 14:37:47 330

原创 Mysql工作原理——增删改类型undo日志格式介绍

事务回滚的需求:把为了回滚而记录的东西称为撤销日志,即undo日志。事务id给事务分配id的时机事务分为只读事务或者读写事务:只读事务中不可以对普通的表进行增、删、改操作,但可以对临时表做增、删、改操作。读写事务中可以对表执行增删改操作;如果某个事务执行过程中对某个表执行了增删改操作,那么InnoDB存储引擎就会给它分配一个独一无二的事务id。对于只读事务来说,只有在它第一次对某个用户创建的链式表执行增删改操作的时候才会为这个事务分配一个事务id,否则不分配。对于读写.

2021-02-22 13:53:14 1512

原创 Mysql工作原理——redo日志文件和恢复操作

redo日志刷盘时机log Buffer空间不足时log buffer 的大小是有限的,如果不停的往这个有限大小的log buffer里散入日志,很快就会被填满,如果当前写入log buffer的redo日志量已经占满了log buffer总容量的大约一半左右,就需要把这些日志刷新到磁盘上。事务提交时之所以使用redo日志主要是因为它占用的空间少,还是顺序写,在事务提交时可以不把修改过的Buffer Pool页面刷新到磁盘,但是为了保证持久性,必须要把这些页面对应的redo日志刷新到磁盘。后台线

2021-02-21 10:49:36 1951 3

原创 Mysql工作原理——redo日志概念及类别

redo日志InnoDB存储引擎是以页为单位来管理存储的,并且在真正访问页面之前,需要把磁盘上的页缓存到内存中的BufferPool之后才可以访问,但是数据库事务又强调持久性,就是对于一个已经提交的事务,在事务提交后即使系统发生崩溃,这个事务对数据库中所做的更改也不能丢失。假设在事务提交后突然发生了某个故障,导致内存中的数据都失效了,但是由于我们只在内存Buffer Pool中修改了页面,所欲导致数据丢失。解决这个问题最简单的方法就是在事务完成之前把该事务的所有页面都刷新到磁盘。但是这种做法有两个问题

2021-02-20 13:49:01 719 1

原创 密码学的基本概念

基于密码学的安全通信基于对称加密算法的安全通信一般来说,对称加密算法的特此案就是在加密和解密中需要使用相同的密钥。基于对称加密算法的安全网络通信协议存在以下问题:密钥必须秘密地进行分配,而这通常只能采用物理的传输手段实现,对于自动化程度高和应用广泛的加密系统来说,这样做的代价是不可接受的;一旦加密密钥丢失,那么获得密钥的攻击者就有能力解密通信中的任何数据,并且可以假装成其中任何一方发送虚假信息而不被发觉;随着用户的增多,需要密钥个数会成平方级迅速增长。基于公开密钥算法的安全通信

2021-02-18 14:42:17 354 1

原创 Spring AOP的设计与实现——JDK动态代理、CGLIB动态代理

概念了解:Spring AOP面向切面编程、动态代理的理解深入理解SpringAOP中的动态代理JVM的动态代理特性在Spring AOP实现中,使用的核心技术是动态代理,这种动态代理实际上是JDK的一个特性。通过JDK的动态代理特性,可以为任意Java对象创建代理对象,通过Java Reflection API来完成。在代理模式的的设计中,会设计一个接口和目标对象一直的对象Proxy,它们都实现了同一个接口的方法。对目标对象方法的调用,往往就被代理对象给拦截了,通过这种拦截,为目标对象方法操

2021-01-13 17:08:25 674 1

原创 Spring IoC容器设计与实现——容器相关特性的实现(lazy-init属性和预实例化、FactoryBean、BeanPostProcessor、autowire、Bean依赖检查)

ApplicationContext和Bean的初始化及销毁对于BeanFactory,特别是ApplicationContext,容器自身也有一个初始化及销毁关闭的过程。ApplicationContext启动的过程是在AbstractApplicationContext中实现的,在这之前需要一些准备工作prepareBeanFactory()方法实现,这个方法中为容器配置了ClassLoader、PropertyEditor和BeanPostProcessor等,为容器启动做好了必要的准备工作。

2021-01-07 16:17:09 178 1

原创 Spring IoC容器设计与实现——IoC容器的依赖注入

Spring IoC容器设计与实现——IoC容器的初始化过程依赖注入的过程式用户第一次向IoC容器索要Bean时触发的,当然也有例外,就是可以通过控制lazy-init属性来让容器完成对Bean的预实例化,这个预实例化也是一个完成依赖注入的过程。getBean()方法就是触发依赖注入的接口定义。下来通过DefaultListableBeanFactory的基类 AbstractBeanFactory入手去看看getBean的实现。...

2021-01-06 17:05:39 162

原创 Spring IoC容器设计与实现——IoC容器的初始化过程

前言在面向对象系统中,对象封装了数据和对数据的处理,对象的依赖关系常常体现在对数据和方法的依赖上,这些依赖关系可以通过把对象的依赖注入交给框架或IoC容器来完成。依赖控制反转的实现有很多种方式,在spring中,IoC容器是实现这个模式的载体,它可以在对象生成或初始化时直接将数据注入对象中,也可以通过将对象引用注入到对象数据域中的方式来注入对方法调用的依赖。这种方案把对象的依赖关系有序地建立起来,简化了对象依赖关系的管理,很大程度上简化了面向对象系统的复杂性。IoC容器和依赖反转模式控制反转时关于

2021-01-04 20:10:09 282

原创 Spring——高级装配

环境与profile在不同的环境中某个bean会有所不同,我们必须要有一种方法来配置,使其在每种环境下都会选择最为合适的配置。配置profile bean在构建bean的过程中需要根据环境决定哪个bean创建、哪个bean不创建。不过spring并不是在构建的时候做出这样的决策,而是等到运行时再来确定。spring3.1引入bean profile功能,将所有不同的bean定义整理到一个或多个profile中,再将应用部署到每个环境中,要确保对应的profile处于激活状态。使用注解@Profi

2020-12-29 14:29:19 237

原创 Spring对Bean Validation支持的核心API

spring虽然没有直接实现Bean校验这块JSR规范,但是从spring3.0开始,就提供了对Bean Valication的支持。BeanValidationPostProcessor能够去校验Spring容器中的Bean,从而决定允不允许它初始化完成,若校验不通过,在违反约束的情况下就会抛出异常,阻止容器的正常启动。public class BeanValidationPostProcessor implements BeanPostProcessor, InitializingBean {

2020-12-25 17:01:03 338

原创 Java 数据校验 Bean Validation

为什么要有数据校验传统的if-else判断参数是否合法的方法存在以下几个问题:需要写大量的代码来进行参数基本验证;需要通过文字注释来知道每个入参的约束是什么;每个程序员的参数验证方式可能不一样,参数验证抛出的异常也不一样,导致后期几乎无法维护;如上会导致代码冗余和一些管理的问题,最好是将验证逻辑与相应域模型进行绑定。Bean Validation是标准,它的参考实现除了Hibernate Validator外还有Apcache BVal。Bean Validation标准接口的

2020-12-25 15:04:44 1062 1

原创 Mysql —— InnoDB中的Buffer Pool

为了调节磁盘和CPU的效率,InnoDB存储引擎在处理客户端的请求时,当需要访问某个页的数据时,旧会把完整的页数据全部加载到内存中,在进行完读写后并不着急把该页对应的内存释放掉,而是将其缓存起来,这样将来有请求再次访问该页面时,就可以省去磁盘IO的开销。Buffer Pool 概述为了缓存磁盘的页,在Mysql服务器启动的时候就向操作系统申请一片连续的内存,起名为Buffer Pool(缓冲池),其大小可根据硬件配置决定。...

2020-12-14 17:18:21 290

原创 Mysql工作原理——基于规则的优化

Mysql依据一些规则将很糟糕的语句转换成某种可以比较高效执行的形式,这个过程被称为查询重写。条件化简移除不必要的括号((a = 5 AND b = c) OR ((a > c) AND (c < 5)))#化简后(a = 5 and b = c) OR (a > c AND c < 5)常量传递(constant_propagation)a=5 and b>a; #花间后a=5 and b>5;等值传递(equality_propagat

2020-12-03 15:30:23 326

原创 Mysql表连接原理

嵌套循环连接(Netsted-Loop Join)对于两表连接,驱动表只会被访问一遍,但是被驱动表却要访问好多遍,具体访问几遍取决于对驱动表执行单表查询后的结果集中的记录条数。对于内连接,选取哪个表为驱动表都没关系,而外连接的驱动表是固定的,也就是说左外连接的驱动表就是左边的那个表,而右外连接的驱动表就是右边那个表。两表连接的大致过程:选取驱动表,使用与驱动表相关的过滤条件,选取代价最低的单表访问方法来执行对驱动表的单表查询。对上一步中查询驱动得到的结果集中每一条记录都被分别到被驱动表中查找匹配.

2020-11-25 09:20:18 756

原创 单表访问方法

访问方法(access method)的概念我们平时所写的查询语句本质上只是一种声明式的语法,只是告诉Mysql我们要获取的数据符合哪些规则。之所以把Mysql执行查询的方式称为访问方法或访问类型,同一个查询语句可能使用多种不同的访问方法来执行,芮然最后查询结果都是一样的。CREATE TABLE single_table ( id INT NOT NULL AUTO_INCREMENT, key1 VARCHAR(100), key2 INT, key3 VARCHAR(100),

2020-11-24 10:26:00 170

原创 Mysql工作原理——InnoDB的表空间

独立表空间结构区(extent)表空间中的页太多了,为了更好管理这些页面,设计者提出了区的概念,对于16KB的页来说,连续64个页就是一个区,也就是说一个区默认占用1MB空间大小。不论是系统表空间还是独立表空间,都可以看成是由若干个区组成的,每256个区被划分为一组:其中extent 0 ~ extent 255这256个区算是第一个组,extent 256 ~ extent 511这256个区算是第二个组,extent 512 ~ extent 767这256个区算是第三个组(上图中并未画全第三

2020-11-23 15:41:36 373 2

原创 Mysql工作原理——InnoDB数据页结构

数据页结构数据页代表这块16KB大小的存储空间可以被划分为过个部分,不同部分有不同功能:记录在页中的存储我们自己存储的记录会按照我们制定的航格式存储到User Records部分。但是在一开始生成页的时候,并没有这个部分,每当插入一条记录,都会从Free Space部分去申请一个记录大小的空间划分到User Records部分,当Free Space部分的空间全部被替代之后,也就意味着这个页使用完了,如果还有新的记录插入的话,就需要去申请新的页。记录头信息的秘密先创建一个表:mysql&

2020-11-16 14:32:43 518

原创 Mysql工作原理——InnoDB行格式、数据页结构

存储引擎负责对表中的数据进行读取和写入,常用的存储引擎有InnoDB、MyISAM、Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Memory都不用磁盘来存储数据。InnoDB存储引擎数据会存储到磁盘上,在真正处理数据时需要先将数据加载到内存,表中读取某些记录时,InnoDB存储引擎不需要一条一条的把记录从磁盘读出来;InnoDB读取数据的方式将数据划分为若干页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般是16KB,当需要从磁盘中读

2020-11-13 15:40:33 179

原创 Mysql工作原理——服务器与客户端

MySQL整个运行需要服务端与客户端的共同参与,运行着的服务器程序和客户端程序本质上都是是计算机上的一个进程,所以客户端进程向服务器进程发送请求并得到回复的过程本质上是一个进程间通信的过程。MySQL支持下面三种通信方式:使用TCP/IP协议通信;命名管道和共享内存Unix域套接字文件服务器处理客户端请求客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。连接管理客户端采用以上的通信方式来与服务器建立连接,每当有一个

2020-11-13 11:03:44 1500

原创 重构——简化函数调用

Separate Query from Modifier(将查询函数和修改函数分离)某个函数既返回对象状态值,又修改对象状态;建立两个不同的函数,其中一个负责查询,另一个负责修改。动机如果某个函数只是向你传递一个值,没有任何看得到的副作用。那么你就可以任意调用这个函数,也可以把调用动作搬到函数的其他地方,简而言之,需要操心的事情少了。对于有副作用和无副作用两种函数之间的差异,下面是一条好规则:任何有返回值的函数,都不应该有看得到的副作用;对于看得到的副作用,最常见的优化办法是:将查询所得结果缓存于

2020-10-27 15:42:27 712

基于Hadoop的决策树识别银行贷款风险.rar

在Hadoop大数据平台的基础上构建了一个基于MapReduce框架并行化的C4.5决策树算法,并采用此算法设计了一套银行贷款的风险预测系统。算法结合MapReduce框架、HDFS 文件存储系统,使用Java语言编写,根据贷款人的各个特征属性信息增益率来选择决策点。其中包含对连续值属性、离散值属性的处理,采用后剪枝悲观剪枝的方法对决策树进行剪枝,以避免决策树出现过拟合的特征。系统包含数据导入、数据分析、结果展示等模块,操作简单、快捷,能准确预测贷款人的信誉情况,平均准确率达到65%~80%,而且与传统的决策树模型相比在性能方面有更好的提升。

2020-12-16

Java实现基于C4.5算法的决策树,实现银行贷款风险预测

使用Java实现基于C4.5算法的决策树,实现银行贷款风险预测,包括对离散属性和连续属性的处理。适用于离散属性、连续属性共存的数据。

2020-02-21

空空如也

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

TA关注的人

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