自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RabbitMQ集群架构笔记

RabbitMQ集群架构笔记RabbitMQ 四种集群架构主备模式warren(兔子窝),一个主/备方案(主节点如果挂了,从节点提供服务,和ActiveMQ利用Zookeeper做主/备一样)图中的consumer不仅仅是消费者,可以理解为需求方,通过HaProxy默认路由到主节点,默认也是master提供服务,而当master出现故障之后,下一次路由在HaProxy里配置了一些规则后,它会帮我们路由到备份节点,备份节点就会升级为主节点,而当原主节点修复完成后便会加入该集群,成为新主节点的备份

2022-02-21 00:40:54 2191

原创 socket、网络模型笔记

socket、网络模型笔记Socket是什么?​ socket是一个文件,也是一个编程模型,本质上是一种管道文件那么既然是一个文件,就会有文件描述符同时也是编程接口(Stub)客户端只有一种socket,即代表服务端的socket,而作为服务端,它有两种socket:Server Socket File服务端Socket是虚拟抽象出来的概念,它里面存的是客户端Socket的文件描述符,是操作系统提供的编程模型listen(80)clientsocket=serversocke

2022-02-18 14:33:23 584

原创 MySQL备份笔记

MySQL备份笔记备份的分类维度备份时数据库的状态Hot Backup(热备):正常运行中直接备份Cold Backup(冷备):完全停止后备份Warm Backup(温备):数据库只读备份文件的格式逻辑备份:输出文本或SQL语句物理备份(裸文件):备份数据库底层文件,如对于InnoDB来说,一般就是.idb文件以及其他元数据的文件备份的内容完全备份:备份完整数据增量备份:备份数据差异日志备份:备份Binlog(Binlog代表这一段时间内所有的数据差异,即数据变化的

2022-02-13 22:32:45 633

原创 MySQL刷脏

MySQL刷脏脏页的产生更新数据时,只更新了内存中的数据页,没有更新磁盘内存中数据页和磁盘中数据页不一致,称为脏页刷脏将内存中数据页保存至磁盘同时,删除与此页相关的redo log,推进check point为什么要刷脏?内存中的脏页太多,内存不足(会产生性能问题)redo log文件写满,需要推进check point(会产生性能问题)系统空闲,提前刷脏,预防上述情况MySQL关闭前,保存数据避免被迫刷脏正确告知InnoDB,服务器的硬盘性能配置合理的脏页比例上

2022-02-12 12:20:04 1212

原创 进程间同步方式

进程间同步方式笔记线程的同步方式互斥锁(mutex)读写锁(rwlock)自旋锁(spin_lock)条件变量(condition)上述方式对进程并不适用,因为进程间的资源是相互独立的,而线程间共享着同一个进程的资源进程间通信的方法管道# 匿名管道netstat -anlp | grep 8080cat server.log | grep ERROR | grep Threadman netstat | more这里的"|“实际上就是管道的意思,”|“前面部分作为”|"后面的

2022-02-08 13:51:19 1736

原创 JMM笔记

JMM笔记Java内存模型JCP定义了一种Java内存模型,以前是在JVM规范中,后来独立出来成为JSR-133(Java内存模型和线程规范修订)内存模型:在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象Java内存模型主要关注JVM中把变量值存储到内存和从内存中取出变量值这样的底层细节对于Java内存模型,有些基本要求:所有变量(共享的)都存储在主内存中,每个线程都有自己的工作内存;工作内存中保存该线程使用到的变量的主内存副本拷贝线程对变量的所有操作(读

2022-01-25 23:54:49 154

原创 JVM笔记

JVM笔记为什么Java可以跨平台Java源码首先会被编译成字节码,再由不同平台的JVM进行解析,Java语言在不同的平台上运行时不需要进行重新编译,Java虚拟机在执行字节码的时候,把字节码转换成具体平台上的机器指令。为什么JVM不直接将源码解析成机器码去执行准备工作:每次执行都要进行各种语法、语义检查,不能保存下来,性能会受到影响兼容性:也可以将别的语言解析成字节码JVM如何加载.class文件Class Loader:依据特定格式,加载class文件到内存Executi

2022-01-24 21:05:22 566

原创 虚拟内存笔记

为什么要有虚拟内存有些进程实际需要的内存很大,超过物理内存的容量,比如一个几十G的游戏,要运行在内存为8G的计算机上由于多道程序设计,主存是同时可以存放多个进程的逻辑及数据的,这就使得每个进程可用的物理内存更加稀缺不可能无限增加物理内存,物理内存总会有不够的时候虚拟内存是什么虚拟内存是操作系统内存管理的关键技术使得多道程序运行和大程序运行成为现实把程序使用内存划分,将部分暂时不使用的内存放置在辅存,这和局部性原理室友关系的,因为程序所使用的内存并不是一次性所有的数据都去读写,所

2022-01-20 13:43:29 163

原创 CopyOnWriteArrayList部分源码分析

CopyOnWriteArrayList部分源码分析为什么会保证线程安全

2022-01-19 12:52:47 235

原创 传输层协议笔记(TCP、UDP)

传输层协议笔记TCP和UDP差别端口​ 由传输层的主要作用:提供主机之间不同进程之间的通信可知,在网络层提供了IP地址之后我们需要定位到具体的某一个进程,而定位到具体进程的方式就是通过端口。主机 — IP地址主机网络进程 — 端口套接字(socket) — IP地址 + 端口端口实际上是一个数字,占16位,端口范围在:0~65535UDP头部UDP长度其实是标识UDP数据报文的长度有多长,而UDP校验和是UDP数据附加的标识,通过这个校验和就可以判断数据在传输过程是否有发生差错,也即校

2022-01-16 12:11:24 1656

原创 HTTP相关学习笔记

HTTP相关HTTP/0.9HTTP协议原型设计缺陷只支持GET方法不支持多媒体内容只有HTML对象HTTP/1.0广泛使用增加多种方法支持多媒体对象无连接、无状态…HTTP/1.1​ 更多的从性能及效率去考虑,为了提升性能、效率及减少带宽的使用,提出了很多革新的技术。长连接管道化缓存处理断点传输…HTTP/2.0性能进一步提升二进制分帧多路复用首部压缩服务端推送…keep-alive 长连接​ HTTP协议是处于应用层的协议,底层

2022-01-15 16:07:05 1390

原创 InnoDB逻辑存储结构

InnoDB逻辑存储结构表空间(tablespace)​ 表空间指的是数据表在硬盘上的存储空间,也即我们所有的数据和数据表最终都是落在磁盘上的ibd文件中。在默认情况下所有表的数据都存在共享表空间中,也就是在默认情况下,InnoDB就一个ibdata1文件。然而每个表的数据也可以放在独占表空间中,也推荐大家使用独占表空间,因为在增删数据库的时候,ibdata1文件不会自动收缩。而且如果使用独占表空间,每个innodb表数据目录下都会有一个.ibd文件,用来存放对应表的数据和索引,这样的话在数据库崩溃

2021-12-12 12:03:13 1022

原创 MySQL软件架构

MySQL软件架构客户端​ 客户端就是诸如我们平时所用到的Java连接数据库的JDBC等,主要是给MySQL Server发指令和发sql语句来完成我们想要达成的目的。MySQL Server​ 从整体上看,MySQL Server就是连接了客户端和文件系统的桥梁,帮我们去处理了客户端发起的请求以及反馈从文件系统中获取的数据内容等。连接器​ 顾名思义,连接器就是用来接收客户端的连接的,一般都是TCP连接。缓存​ 当连接器连接到客户端并接收到一条Sql查询语句后,会先去缓存中查找,如

2021-12-12 12:01:14 841

原创 谈谈自己对B、B+树的一些理解

谈谈自己对B、B+树的一些理解1、二叉查找树 Binary Search Tree​ 在正式谈谈B树、B+树之前先谈谈二叉树,在数据库主流的索引查找方式中,线性查找和二分查找我在这就不过多的赘述了,想必大家也很清楚他们的算法了,但是由于在磁盘中,很多时候我们并不能获取到相当大一片连续的物理空间,在其中碎片是非常多的,所以二分查找在数据量庞大的时候就无法找到中间的数据在哪,这也是二分查找的缺陷所在,因此,发展出了二叉查找树。那二叉树的数据结构如下图所示:可以看到,在二叉查找树中,小于根节点的数都会被

2021-12-05 23:57:45 564

原创 使用Stream流完成按年份对已按时间降序排列的博客内容进行分组

使用Stream流完成按年份对已按时间降序排列的博客内容进行分组在做自己的博客系统练手项目的时候想到可以做一个时间轴,按年份进行分类,并输出博客的创建时间以及博客标题,那实际上目前也已得知我只需要几个字段:博客Id:用于点击博客标题的时候跳转详情页面博客标题创建时间那么现在问题来了,我如果要进行根据年份排序,那这个返回的结果肯定是个集合,而这个集合中每一个都有一个年份字段,并且对应的就有一个博客响应参数的集合,有的家人可能就会想到,可以用map解决啊!而事实上,我们也知道HashMap并没有排

2021-11-21 00:52:07 1970 1

原创 修改gitee或者github等在本机的默认用户

修改gitee或者github等在本机的默认用户之前由于工作的缘故,我需要用到公司的邮箱从gitee上拉取项目,但我通过配置git的全局变量git config --global user.name "xxx"git config --global user.email "xxx@xxx.mail"仍然无法从远端获取,于是我发现,光是修改这个好像没什么用,还需要按照下述步骤修改:打开控制面板->凭据管理器->Windows凭据然后我们就能看到以下凭据:点击要修改的凭据,修改

2021-11-11 00:20:40 652

原创 kafka学习笔记-客户端操作

kafka学习笔记-客户端操作​ kafka其实没有所谓单节点这一说,即使是一个节点也是一个节点的集群,所以kafka默认就是一个集群的形式。kafka客户端API类型AdminClient API:允许管理和检测Topic、broker以及其他kafka对象。类似服务器上命令行对topic等操作。Producer API:发布消息到1个或多个TopicConsumer API:订阅一个或多个Topic,并处理产生的消息,相对比较复杂的APIStreams API:高效地将输入流转换到输出流

2021-11-10 17:56:31 1316

原创 kafka学习笔记-初始kafka

kafka学习笔记-初识kafka一、纠正误区​ kafka并不只是大家平时所认为的消息系统,在官网的介绍中又说到:“A distributed streaming platform”–一个分布式流媒体平台。kafka是基于zookeeper的分布式消息系统。​ kafka具有:高吞吐率高性能实时高可靠等二、安装kafka​ 官网下载地址:http://kafka.apache.org/downloads​ 下载完毕后将该压缩包放入服务器的自定义kafka目录下,执

2021-11-09 10:18:45 1331

原创 Springboot修改了application.yml或者.properties文件的引用后启动报错的问题

在工作的时候,很多情况下我们会使用定义生产、测试、开发等环境下所用的配置,然后在application.yml或者properties中引用相应的配置,偶然间我在修改配置中的showSql属性时,一启动项目就开始报错Caused by: java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(CoderResult.java:281) ~[?:1.8

2021-10-26 10:26:10 1251

原创 有关多个tomcat的配置

有关多个tomcat的配置一、下载安装tomcat​ 下载tomcat的话我们可以去官网上下载免安装版​ 根据自己的需求选择对应的版本​ 以tomcat 9 举例,如果根据自己系统选择下载的压缩包,这个下载下来是免安装的,解压到目的位置之后配置即可用二、配置​ 解压完后,我们可以右击此电脑 -> 属性 -> 高级系统设置 -> 环境变量​ 这里由于我之前配置过一个tomcat 8 ,所以在这个位置已经有了一个配置,同样的,我们在系统变量中新建一个变量,取另外一个名字

2021-08-02 10:07:52 714

原创 Redis学习笔记-哨兵模式

Redis学习笔记-哨兵模式(自动选举主机的模式)概述主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,成本昂贵,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候我们优先考虑哨兵模式。Redis从2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题。能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通

2021-07-13 23:10:23 132

原创 Redis学习笔记-Jedis

Redis学习笔记-Jedis什么是Jedis是Redis官方推荐的Java连接开发工具,使用Java操作Redis的中间件导入对应的依赖<!--导入jedis的包--><dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> &l

2021-07-13 23:01:36 109

原创 Redis学习笔记-基本命令

Redis学习笔记-基本命令五大数据类型Redis-KeyEXISTS keyname # 查看是否存在名为keyname的键move keyname 1 # 移除当前数据库下名为keyname的键EXPIRE keyname 10 # 设置该键的过期时间为10sttl keyname # 查看该key剩余时间type keyname # 查看该key是什么类型Stringkeys * # 获取全部的keyappend keyname "st

2021-07-13 22:57:29 1800

原创 Redis学习笔记-概述

Redis学习笔记-概述什么是RedisRedis(Remote Dictionary Server),即远程字典服务开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并在此基础上实现了master-slave(主从)同步也被称之为结构化数据库Redis能干嘛内存存储、持久化,因为内存中数据是断电即失的,所以持久化很重要(rdb、aof)效率高,可以用于

2021-07-13 11:44:42 102

原创 Spring学习笔记-自动装配Bean

Spring学习笔记-自动装配Bean自动装配是Spring满足bean依赖的一种方式Spring会在上下文中自动寻找,并自动给bean装配属性在Spring中有三种装配的方式在xml中显式的配置在Java中显式配置隐式的自动装配beanByName通过参数名进行自动装配,当容器发现Autowire属性被更改为byName时,会自动在容器上下文寻找,和自己对象set方法后面的值相对应的beanId弊端:如果beanId与set方法后的名字不匹配,则无法装配<bean

2021-06-29 11:59:42 116

原创 Spring学习笔记-整合MyBatis

Spring学习笔记-整合MyBatis步骤导入相关jar包junitmybatismysql数据库spring相关的aop织入mybatis-spring<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.

2021-06-29 11:58:32 173

原创 Spring学习笔记-事务

Spring学习笔记-事务回顾事务把一组业务当成一个业务来做:要么都成功,要么都失败事务在项目的开发中十分重要,涉及到数据的一致性问题确保完整性和一致性事务的ACID原则:原子性:指一个事务是不可再分的工作单位,一个事务内的操作要么都执行,要么都不执行一致性:指事务发生前后的逻辑保持一致性,事务的完整性约束没有被破坏隔离性:多个事务间互相隔离,不会互相影响,防止数据破坏持久性:事务一旦提交,就会被持久化至存储器中Spring中的事务管理编程式事务:需要在代码中进行事务的管理

2021-06-29 11:57:39 74

原创 Spring学习笔记--DI

Spring学习笔记–DI依赖注入构造器注入(在IOC篇已讲过)Setter方式注入依赖注入:Set注入依赖:bean对象的创建依赖于容器注入:bean对象中的所有属性,由容器来注入实体类:public class Student { private String name; private Address address; private String[] books; private List<String> hobbys;

2021-06-29 11:53:33 112

原创 Spring学习笔记-IOC

Spring学习笔记-IOCIOC理论推导原来的一个业务开发流程:UserDao 数据访问接口public interface UserDao{ void getUser();}UserDaoImpl 数据访问实现类public class UserDaoImpl implements UserDao{ @Override public void getUser(){ SyStem.out.println("获取到普通用户"); }}

2021-06-28 11:31:33 101

原创 Spring学习笔记-AOP

Spring学习笔记-AOP什么是AOPAOP(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP在Spring中的作用提供声明式事务;允许用户自定义切面横切关注点:跨越

2021-06-28 11:00:22 112

原创 MyBatis学习笔记--缓存

MyBatis学习笔记–缓存简介什么是缓存[Cache]?存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高效率,解决了高并发系统的性能问题。为什么使用缓存?减少和数据库的交互次数,减少系统开销,提高系统效率什么样的数据能使用缓存?经常查询并且不经常改变的数据MyBatis缓存MyBatis包含一个非常强大的查询缓存特性,它可以非常方便的定制和配置缓存。缓存可以极大地提

2021-06-22 14:52:29 91

原创 Java学习笔记-生产者消费者问题

Java学习笔记-生产者消费者问题synchronized我们可以使用synchronized来解决生产者消费者问题,比如当num为0时,使B线程等待,唤醒A线程让其加1,当num为1时使A线程等待,并唤醒B线程让其减1public class PCSyn{ public static void main(String[] args){ // 获取资源对象 Data data = new Data(); // 让其执行十次

2021-06-01 17:47:51 123

原创 Java-synchronized&lock

Java学习笔记-synchronized&lock举例:卖票行为,当我们不使用锁来进行卖票行为时,我们会发现得到得结果并不是我们想要得结果public class SellTicket { public static void main(String[] args) { Ticket ticket = new Ticket(); new Thread(()->{for(int i = 0; i < 40; i ++) ticket2.se

2021-06-01 08:42:30 154

原创 设计模式-抽象工厂模式

设计模式-抽象工厂模式定义​ 抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们具体的类适用场景客户端(应用层)不依赖于产品类实例如何被创建、实现等细节强调一系列相关的产品对象(属于同一产品族) 一起使用创建对象需要大量的重复代码提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现优点具体产品在应用层的代码隔离,无需关心创建的细节将一个系列的产品统一到一起创建缺点规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难增加了

2021-05-31 20:06:31 88

原创 设计模式学习笔记-工厂模式

设计模式学习笔记-工厂模式作用实现了创建者和调用者的分离详细分类简单工厂模式用来生产同一等级结构中的任意产品(对于增加新的产品,必须要扩展已有的代码)工厂方法模式用来生产同一等级结构中的固定产品(支持增加任意产品)抽象工厂模式围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂在工厂模式中该满足的OOP七大原则中开闭原则依赖倒置原则迪米特法则核心本质实例化对象不适用new,用工厂方法代替将选择实现类,创建对象统一管理和控制,从而将调用

2021-05-31 16:10:06 205 1

原创 设计模式-单例模式

设计模式-单例模式单例类只能有一个实例单例类必须自己创建自己的唯一实例单例类必须给其他所有其他对象提供这一实例一、饿汉式所谓饿汉式就是在类创建的时候就已经将该实例创建,并以后不会发生改变,所以是线程安全的当类初始化的时候已自动完成实例化,但是也因此可能会出现内存空间浪费的情况public class Hungry{ // 私有化构造参数,保证所有的外部成员无法实例化该对象,保证了内存空间中只有一个对象 private Hungry(){} // 在类创建时

2021-05-30 22:32:36 248

原创 MyBatis学习笔记-ResultMap

MyBatis学习笔记-ResultMap解决属性名与字段名不一致的问题resultMap结果集映射resultMap元素是MyBatis中最重要最强大的元素resultMap的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述他们的关系就行resultMap最优秀的地方在于,虽然已经对它相当了解了,但是根本不需要显式地用到它们数据库:id name pwd实体类:id name password<!--结果集映射-->

2021-05-29 18:42:31 111

原创 MyBatis学习笔记-Map

MyBatis学习笔记-Mappublic int updateUserByMap(Map<String,Object> map);<update id="updateUserByMap" parameterType="map"> update user set name = #{name}, pwd = #{pwd} <where> id = #{id} </where></update>注意:

2021-05-29 18:41:56 89

原创 MyBatis学习笔记-生命周期和作用域

MyBatis学习笔记-生命周期和作用域生命周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KI7odEBA-1622284851250)(C:\Users\10098\AppData\Roaming\Typora\typora-user-images\image-20210519085945209.png)]SqlSessionFactoryBuilder一旦创建了SqlSessionFactory,

2021-05-29 18:41:13 84

原创 MyBatis学习笔记-配置解析

MyBatis学习笔记-配置解析mybatis-config.xmlMyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。properties(属性)settings(设置)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)environments(环境配置)environment(环境变量)transactionManager(事务管理器)dataSource(数据

2021-05-29 18:37:59 121

erlang 24.2安装包

erlang最新安装包

2021-12-25

空空如也

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

TA关注的人

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