- 博客(74)
- 资源 (1)
- 收藏
- 关注
原创 RabbitMQ集群架构笔记
RabbitMQ集群架构笔记 RabbitMQ 四种集群架构 主备模式 warren(兔子窝),一个主/备方案(主节点如果挂了,从节点提供服务,和ActiveMQ利用Zookeeper做主/备一样) 图中的consumer不仅仅是消费者,可以理解为需求方,通过HaProxy默认路由到主节点,默认也是master提供服务,而当master出现故障之后,下一次路由在HaProxy里配置了一些规则后,它会帮我们路由到备份节点,备份节点就会升级为主节点,而当原主节点修复完成后便会加入该集群,成为新主节点的备份
2022-02-21 00:40:54
2352
原创 socket、网络模型笔记
socket、网络模型笔记 Socket是什么? socket是一个文件,也是一个编程模型,本质上是一种管道文件 那么既然是一个文件,就会有文件描述符 同时也是编程接口(Stub) 客户端只有一种socket,即代表服务端的socket,而作为服务端,它有两种socket: Server Socket File 服务端Socket是虚拟抽象出来的概念,它里面存的是客户端Socket的文件描述符,是操作系统提供的编程模型 listen(80) clientsocket=serversocke
2022-02-18 14:33:23
725
原创 MySQL备份笔记
MySQL备份笔记 备份的分类维度 备份时数据库的状态 Hot Backup(热备):正常运行中直接备份 Cold Backup(冷备):完全停止后备份 Warm Backup(温备):数据库只读 备份文件的格式 逻辑备份:输出文本或SQL语句 物理备份(裸文件):备份数据库底层文件,如对于InnoDB来说,一般就是.idb文件以及其他元数据的文件 备份的内容 完全备份:备份完整数据 增量备份:备份数据差异 日志备份:备份Binlog(Binlog代表这一段时间内所有的数据差异,即数据变化的
2022-02-13 22:32:45
769
原创 MySQL刷脏
MySQL刷脏 脏页的产生 更新数据时,只更新了内存中的数据页,没有更新磁盘 内存中数据页和磁盘中数据页不一致,称为脏页 刷脏 将内存中数据页保存至磁盘 同时,删除与此页相关的redo log,推进check point 为什么要刷脏? 内存中的脏页太多,内存不足(会产生性能问题) redo log文件写满,需要推进check point(会产生性能问题) 系统空闲,提前刷脏,预防上述情况 MySQL关闭前,保存数据 避免被迫刷脏 正确告知InnoDB,服务器的硬盘性能 配置合理的脏页比例上
2022-02-12 12:20:04
1352
原创 进程间同步方式
进程间同步方式笔记 线程的同步方式 互斥锁(mutex) 读写锁(rwlock) 自旋锁(spin_lock) 条件变量(condition) 上述方式对进程并不适用,因为进程间的资源是相互独立的,而线程间共享着同一个进程的资源 进程间通信的方法 管道 # 匿名管道 netstat -anlp | grep 8080 cat server.log | grep ERROR | grep Thread man netstat | more 这里的"|“实际上就是管道的意思,”|“前面部分作为”|"后面的
2022-02-08 13:51:19
1903
原创 JMM笔记
JMM笔记 Java内存模型 JCP定义了一种Java内存模型,以前是在JVM规范中,后来独立出来成为JSR-133(Java内存模型和线程规范修订) 内存模型: 在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象 Java内存模型主要关注JVM中把变量值存储到内存和从内存中取出变量值这样的底层细节 对于Java内存模型,有些基本要求: 所有变量(共享的)都存储在主内存中,每个线程都有自己的工作内存;工作内存中保存该线程使用到的变量的主内存副本拷贝 线程对变量的所有操作(读
2022-01-25 23:54:49
233
原创 JVM笔记
JVM笔记 为什么Java可以跨平台 Java源码首先会被编译成字节码,再由不同平台的JVM进行解析,Java语言在不同的平台上运行时不需要进行重新编译,Java虚拟机在执行字节码的时候,把字节码转换成具体平台上的机器指令。 为什么JVM不直接将源码解析成机器码去执行 准备工作:每次执行都要进行各种语法、语义检查,不能保存下来,性能会受到影响 兼容性:也可以将别的语言解析成字节码 JVM如何加载.class文件 Class Loader:依据特定格式,加载class文件到内存 Executi
2022-01-24 21:05:22
688
原创 虚拟内存笔记
为什么要有虚拟内存 有些进程实际需要的内存很大,超过物理内存的容量,比如一个几十G的游戏,要运行在内存为8G的计算机上 由于多道程序设计,主存是同时可以存放多个进程的逻辑及数据的,这就使得每个进程可用的物理内存更加稀缺 不可能无限增加物理内存,物理内存总会有不够的时候 虚拟内存是什么 虚拟内存是操作系统内存管理的关键技术 使得多道程序运行和大程序运行成为现实 把程序使用内存划分,将部分暂时不使用的内存放置在辅存,这和局部性原理室友关系的,因为程序所使用的内存并不是一次性所有的数据都去读写,所
2022-01-20 13:43:29
246
原创 传输层协议笔记(TCP、UDP)
传输层协议笔记 TCP和UDP差别 端口 由传输层的主要作用:提供主机之间不同进程之间的通信可知,在网络层提供了IP地址之后我们需要定位到具体的某一个进程,而定位到具体进程的方式就是通过端口。 主机 — IP地址 主机网络进程 — 端口 套接字(socket) — IP地址 + 端口 端口实际上是一个数字,占16位,端口范围在:0~65535 UDP头部 UDP长度其实是标识UDP数据报文的长度有多长,而UDP校验和是UDP数据附加的标识,通过这个校验和就可以判断数据在传输过程是否有发生差错,也即校
2022-01-16 12:11:24
1790
原创 HTTP相关学习笔记
HTTP相关 HTTP/0.9 HTTP协议原型 设计缺陷 只支持GET方法 不支持多媒体内容 只有HTML对象 HTTP/1.0 广泛使用 增加多种方法 支持多媒体对象 无连接、无状态 … HTTP/1.1 更多的从性能及效率去考虑,为了提升性能、效率及减少带宽的使用,提出了很多革新的技术。 长连接 管道化 缓存处理 断点传输 … HTTP/2.0 性能进一步提升 二进制分帧 多路复用 首部压缩 服务端推送 … keep-alive 长连接 HTTP协议是处于应用层的协议,底层
2022-01-15 16:07:05
1519
原创 InnoDB逻辑存储结构
InnoDB逻辑存储结构 表空间(tablespace) 表空间指的是数据表在硬盘上的存储空间,也即我们所有的数据和数据表最终都是落在磁盘上的ibd文件中。在默认情况下所有表的数据都存在共享表空间中,也就是在默认情况下,InnoDB就一个ibdata1文件。然而每个表的数据也可以放在独占表空间中,也推荐大家使用独占表空间,因为在增删数据库的时候,ibdata1文件不会自动收缩。而且如果使用独占表空间,每个innodb表数据目录下都会有一个.ibd文件,用来存放对应表的数据和索引,这样的话在数据库崩溃
2021-12-12 12:03:13
1156
原创 MySQL软件架构
MySQL软件架构 客户端 客户端就是诸如我们平时所用到的Java连接数据库的JDBC等,主要是给MySQL Server发指令和发sql语句来完成我们想要达成的目的。 MySQL Server 从整体上看,MySQL Server就是连接了客户端和文件系统的桥梁,帮我们去处理了客户端发起的请求以及反馈从文件系统中获取的数据内容等。 连接器 顾名思义,连接器就是用来接收客户端的连接的,一般都是TCP连接。 缓存 当连接器连接到客户端并接收到一条Sql查询语句后,会先去缓存中查找,如
2021-12-12 12:01:14
935
原创 谈谈自己对B、B+树的一些理解
谈谈自己对B、B+树的一些理解 1、二叉查找树 Binary Search Tree 在正式谈谈B树、B+树之前先谈谈二叉树,在数据库主流的索引查找方式中,线性查找和二分查找我在这就不过多的赘述了,想必大家也很清楚他们的算法了,但是由于在磁盘中,很多时候我们并不能获取到相当大一片连续的物理空间,在其中碎片是非常多的,所以二分查找在数据量庞大的时候就无法找到中间的数据在哪,这也是二分查找的缺陷所在,因此,发展出了二叉查找树。那二叉树的数据结构如下图所示: 可以看到,在二叉查找树中,小于根节点的数都会被
2021-12-05 23:57:45
667
原创 使用Stream流完成按年份对已按时间降序排列的博客内容进行分组
使用Stream流完成按年份对已按时间降序排列的博客内容进行分组 在做自己的博客系统练手项目的时候想到可以做一个时间轴,按年份进行分类,并输出博客的创建时间以及博客标题,那实际上目前也已得知我只需要几个字段: 博客Id:用于点击博客标题的时候跳转详情页面 博客标题 创建时间 那么现在问题来了,我如果要进行根据年份排序,那这个返回的结果肯定是个集合,而这个集合中每一个都有一个年份字段,并且对应的就有一个博客响应参数的集合,有的家人可能就会想到,可以用map解决啊!而事实上,我们也知道HashMap并没有排
2021-11-21 00:52:07
2244
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
877
原创 kafka学习笔记-客户端操作
kafka学习笔记-客户端操作 kafka其实没有所谓单节点这一说,即使是一个节点也是一个节点的集群,所以kafka默认就是一个集群的形式。 kafka客户端API类型 AdminClient API:允许管理和检测Topic、broker以及其他kafka对象。类似服务器上命令行对topic等操作。 Producer API:发布消息到1个或多个Topic Consumer API:订阅一个或多个Topic,并处理产生的消息,相对比较复杂的API Streams API:高效地将输入流转换到输出流
2021-11-10 17:56:31
1514
原创 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
1429
原创 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
1417
原创 有关多个tomcat的配置
有关多个tomcat的配置 一、下载安装tomcat 下载tomcat的话我们可以去官网上下载免安装版 根据自己的需求选择对应的版本 以tomcat 9 举例,如果根据自己系统选择下载的压缩包,这个下载下来是免安装的,解压到目的位置之后配置即可用 二、配置 解压完后,我们可以右击此电脑 -> 属性 -> 高级系统设置 -> 环境变量 这里由于我之前配置过一个tomcat 8 ,所以在这个位置已经有了一个配置,同样的,我们在系统变量中新建一个变量,取另外一个名字
2021-08-02 10:07:52
827
原创 Redis学习笔记-哨兵模式
Redis学习笔记-哨兵模式 (自动选举主机的模式) 概述 主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,成本昂贵,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候我们优先考虑哨兵模式。Redis从2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题。 能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库 哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通
2021-07-13 23:10:23
284
原创 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
186
原创 Redis学习笔记-基本命令
Redis学习笔记-基本命令 五大数据类型 Redis-Key EXISTS keyname # 查看是否存在名为keyname的键 move keyname 1 # 移除当前数据库下名为keyname的键 EXPIRE keyname 10 # 设置该键的过期时间为10s ttl keyname # 查看该key剩余时间 type keyname # 查看该key是什么类型 String keys * # 获取全部的key append keyname "st
2021-07-13 22:57:29
1903
原创 Redis学习笔记-概述
Redis学习笔记-概述 什么是Redis Redis(Remote Dictionary Server),即远程字典服务 开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并在此基础上实现了master-slave(主从)同步 也被称之为结构化数据库 Redis能干嘛 内存存储、持久化,因为内存中数据是断电即失的,所以持久化很重要(rdb、aof) 效率高,可以用于
2021-07-13 11:44:42
170
原创 Spring学习笔记-自动装配Bean
Spring学习笔记-自动装配Bean 自动装配是Spring满足bean依赖的一种方式 Spring会在上下文中自动寻找,并自动给bean装配属性 在Spring中有三种装配的方式 在xml中显式的配置 在Java中显式配置 隐式的自动装配bean ByName 通过参数名进行自动装配,当容器发现Autowire属性被更改为byName时,会自动在容器上下文寻找,和自己对象set方法后面的值相对应的beanId 弊端:如果beanId与set方法后的名字不匹配,则无法装配 <bean
2021-06-29 11:59:42
215
原创 Spring学习笔记-整合MyBatis
Spring学习笔记-整合MyBatis 步骤 导入相关jar包 junit mybatis mysql数据库 spring相关的 aop织入 mybatis-spring <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.
2021-06-29 11:58:32
265
原创 Spring学习笔记-事务
Spring学习笔记-事务 回顾事务 把一组业务当成一个业务来做:要么都成功,要么都失败 事务在项目的开发中十分重要,涉及到数据的一致性问题 确保完整性和一致性 事务的ACID原则: 原子性:指一个事务是不可再分的工作单位,一个事务内的操作要么都执行,要么都不执行 一致性:指事务发生前后的逻辑保持一致性,事务的完整性约束没有被破坏 隔离性:多个事务间互相隔离,不会互相影响,防止数据破坏 持久性:事务一旦提交,就会被持久化至存储器中 Spring中的事务管理 编程式事务:需要在代码中进行事务的管理
2021-06-29 11:57:39
148
原创 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
180
原创 Spring学习笔记-IOC
Spring学习笔记-IOC IOC理论推导 原来的一个业务开发流程: 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
190
原创 Spring学习笔记-AOP
Spring学习笔记-AOP 什么是AOP AOP(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP在Spring中的作用 提供声明式事务;允许用户自定义切面 横切关注点:跨越
2021-06-28 11:00:22
179
原创 MyBatis学习笔记--缓存
MyBatis学习笔记–缓存 简介 什么是缓存[Cache]? 存在内存中的临时数据 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高效率,解决了高并发系统的性能问题。 为什么使用缓存? 减少和数据库的交互次数,减少系统开销,提高系统效率 什么样的数据能使用缓存? 经常查询并且不经常改变的数据 MyBatis缓存 MyBatis包含一个非常强大的查询缓存特性,它可以非常方便的定制和配置缓存。缓存可以极大地提
2021-06-22 14:52:29
163
原创 Java学习笔记-生产者消费者问题
Java学习笔记-生产者消费者问题 synchronized 我们可以使用synchronized来解决生产者消费者问题,比如当num为0时,使B线程等待,唤醒A线程让其加1,当num为1时使A线程等待,并唤醒B线程让其减1 public class PCSyn{ public static void main(String[] args){ // 获取资源对象 Data data = new Data(); // 让其执行十次
2021-06-01 17:47:51
189
原创 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
233
原创 设计模式-抽象工厂模式
设计模式-抽象工厂模式 定义 抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们具体的类 适用场景 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节 强调一系列相关的产品对象(属于同一产品族) 一起使用创建对象需要大量的重复代码 提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现 优点 具体产品在应用层的代码隔离,无需关心创建的细节 将一个系列的产品统一到一起创建 缺点 规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难 增加了
2021-05-31 20:06:31
170
原创 设计模式学习笔记-工厂模式
设计模式学习笔记-工厂模式 作用 实现了创建者和调用者的分离 详细分类 简单工厂模式 用来生产同一等级结构中的任意产品(对于增加新的产品,必须要扩展已有的代码) 工厂方法模式 用来生产同一等级结构中的固定产品(支持增加任意产品) 抽象工厂模式 围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂 在工厂模式中该满足的OOP七大原则中 开闭原则 依赖倒置原则 迪米特法则 核心本质 实例化对象不适用new,用工厂方法代替 将选择实现类,创建对象统一管理和控制,从而将调用
2021-05-31 16:10:06
348
1
原创 设计模式-单例模式
设计模式-单例模式 单例类只能有一个实例 单例类必须自己创建自己的唯一实例 单例类必须给其他所有其他对象提供这一实例 一、饿汉式 所谓饿汉式就是在类创建的时候就已经将该实例创建,并以后不会发生改变,所以是线程安全的 当类初始化的时候已自动完成实例化,但是也因此可能会出现内存空间浪费的情况 public class Hungry{ // 私有化构造参数,保证所有的外部成员无法实例化该对象,保证了内存空间中只有一个对象 private Hungry(){} // 在类创建时
2021-05-30 22:32:36
351
原创 MyBatis学习笔记-ResultMap
MyBatis学习笔记-ResultMap 解决属性名与字段名不一致的问题 resultMap 结果集映射 resultMap元素是MyBatis中最重要最强大的元素 resultMap的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述他们的关系就行 resultMap最优秀的地方在于,虽然已经对它相当了解了,但是根本不需要显式地用到它们 数据库:id name pwd 实体类:id name password <!--结果集映射-->
2021-05-29 18:42:31
197
原创 MyBatis学习笔记-Map
MyBatis学习笔记-Map public 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
157
原创 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
137
原创 MyBatis学习笔记-配置解析
MyBatis学习笔记-配置解析 mybatis-config.xml MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据
2021-05-29 18:37:59
252
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅