自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 收藏
  • 关注

原创 1. SpringBoot-使用

@SpringBootApplication@EnableAutoConfiguration@ServletComponentScan

2022-06-02 01:24:01 126

原创 3. Tomcat 调优

SpringBoot嵌入式启动Tomcat。法法

2022-06-02 00:25:35 129

原创 2. Tomcat 源码分析

Tomcat启动流程分析:各种组件如何统一管理?用Lifecycle管理启动、停止、关闭。解耦。Connector 设计:使用管道模式。管道与阀门。管道是就像一条管道把多个对象连接起来,整体看起来就像若干个阀门嵌套在管道中,而处理逻辑放在阀门上。Tomcat 的定制阀门:管道机制给我们带来了更好的拓展性,例如,你要添加一个额外的逻辑处理阀门是很容易的。JVM 类加载器:双亲委派模型。Tomcat中的类加载器:

2022-06-01 20:51:14 178

原创 1. Tomcat体系架构

Tomcat 是一款轻量级 Web 应用服务器,是一款优秀的 Servlet 容器实现。有两种:Tomcat 中请求处理方式:Tomcat 中的 Connector:三种传输协议:三种I/O方式:如何选择协议及I/0方式:Tomcat 8.5 特点:

2022-06-01 18:57:16 173

原创 工作岗位方法

分解法 + Buffer。

2022-06-01 17:21:43 86

原创 5. 一致性协议

是一种思想,具体实现方式有很多。优点:缺点:与2PC区别:优点:缺点:Leader 集群工作机制中的核心,作用如下:Follower 集群工作机制中的跟随者,作用如下:Observer 3.30以上版本提供,和 follower 功能相同,但不参与任何形式投票,作用:ZAB 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性;消息广播:崩溃恢复:

2022-06-01 17:13:40 109

原创 程序员职业发展

职责:一般需要求助别人或和别人一起完成一个任务。职责:负责产品核心复杂功能的方案设计、编码实现负责疑难 bug 分析、解决模块级的系统设计完成较为复杂的任务帮助别人快速解决问题职责:领导一众高手,完成一个系统,大多是分布式、高并发的系统架构平台。职责:提高领导力,如定期召开团队会议讨论问题。职责:一般团队超过 20 人。国内 CTO 偏重于研发管理,相当于技术总监的 PLUS,大部分是领导技术团队开发各类产品,解决技术问题,管理不同的项目,排期交付,是技术、业务融合的领袖。CTO 做的事情,是商业、产品、技

2022-06-01 17:10:09 939

原创 InnoDB 底层解析

InnoDB 是以页为基本单位在内存和磁盘间交互数据,页的大小一般为 16KB。1. 行格式记录在磁盘上的存储方式称为行格式。有 4 种类型的行格式:CompactRedundantDynamicCompressed1.1 指定行格式CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称1.2 Compact变长字段:VARCHAR、VARBINARY、TEXT、BLOB。NULL:每个允许存储 NULL 的列对应一个二进制位,为 1 表示该列为 N

2022-05-31 16:12:08 317

原创 索引000000

B+ 树:数据只存储在叶子节点上,非叶子节点只存储索引信息。叶子节点在逻辑上串联,物理上分散。该 B+ 树高度为 2每叶子页(LeafPage)4 条记录扇出数为 5叶子节点(LeafPage)由小到大(有序)串联在一起扇出:每个索引节点(Non-LeafPage)指向每个叶子节点(LeafPage)的指针。扇出数:索引节点(Non-LeafPage)可存储的最大关键字个数 + 1。普通索引:即一个索引只包含单个列,一个表可以有多个单列索引唯一索引:索引列的值必须唯一,但允许有空值

2022-05-24 18:52:04 64

原创 MySQL 锁

1. 锁MySQL 的锁机制比较简单,最显著的特点是不同的存储引擎支持不同的锁机制,比如:MyISAM 和 MEMORY 存储引擎采用的是表级锁(table-level locking);InnoDB 存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。2. 锁的类型表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。gap

2022-05-24 16:46:23 106

原创 2. 分库分表-2 MyCat

1. 典型的分片规则按照用户 ID 求模,将数据分散到不同的数据库,具有相同数据用户的数据都被分散到一个库中。按照日期,将不同月甚至日的数据分散到不同的库中。按照某个特定的字段求摸,或者根据特定范围段分散到不同的库中。数据切分的经验:第一原则:能不切分尽量不要切分。第二原则:如果要切分一定要选择合适的切分规则,提前规划好。第三原则:数据切分尽量通过数据冗余或表分组(Table Group)来降低跨库 Join 的可能。第四原则:由于数据库中间件对数据 Join 实现的优劣难以把握,而且实

2022-05-24 10:26:29 403 1

原创 1. 分库分表-1 MySQL 架构

1. MySQL 可扩展设计数据库扩展解决了什么问题?做热备份,保证多活,方便故障切换负载均衡、读写分离1.1 主从架构:Master-Slaves在实际应用场景中,MySQL 复制 90% 以上都是一个 Master 复制到一个或者多个 Slave 的架构模式。缺点:master 不能停机,停机就不能接收写请求。slave 过多会出现延迟。由于 master 需要进行常规维护停机了,那必须要把一个slave提成master,会存在某一个 slave 提成 master 后,存在

2022-05-22 22:54:09 460

原创 5. JVM 性能优化

1. 内存溢出内存溢出的方式:栈溢出堆溢出方法区溢出本级内存直接溢出1.1 栈溢出StackOverflowError:方法自己调用自己,死递归导致的溢出。OutOfMemoryError:栈内存分配有限,每个线程占据一个内存空间,比如 1M,如果线程多了,会导致内存溢出。1.2 堆溢出1.3 方法区溢出方法区垃圾回收效率很低,因此在加载动态语言、CGLIB、JSP、OSGI 时可能会内存溢出。1.4 本地直接内存溢出限制了本地直接内存的大小,分配时超过了其大小。2. 内

2022-05-22 14:23:55 271

原创 4. 执行子系统

1. class 文件Class文件是一组以8位字节为基础单位的二进制流,类似于结构体的伪结构来存储数据:只有两种数据类型:无符号数和表,无符号数属于基本的数据类型,以u1、u2、u4、u8。表是由多个无符号数或者其他表作为数据项构成的复合数据类型。class 文件结构详解:魔数与Class文件的版本常量池访问标志类索引、父类索引与接口索引集合字段表集合方法表集合属性表集合2. 字节码指令指令分类:加载和存储指令运算指令类型转换指令对象创建与访问指令操作数栈管理

2022-05-22 10:45:09 121

原创 3. 垃圾回收

1. 判断对象是否存活判断对象存活的方式:引用计数算法:会发生循环引用问题可达性分析在 Java 中可作为 GC Roots 的对象有:方法区中类静态属性引用的对象。方法区中常量引用的对象。虚拟机栈(本地变量表)中引用的对象。本地方法栈 JNI(Native方法)中引用的对象。finalize 理论上可以把对象拯救,但是不保证 finalize 一定执行。2. 引用类型强引用 =软引用 SoftReference弱引用 WeakReference虚引用 Phanto

2022-05-21 10:13:58 107

原创 2. JVM 中对象

1. 对象分配虚拟机遇到一条 new 指令时:对象划分内存方式有:指针碰撞、空闲列表。在对象划分内存时解决并发安全问题的方式:本地线程缓冲(TLAB)、CAS + 失败重试。2. 对象内存布局对象包括对象头、实例数据、对齐填充。对象头包括 hashcode/GC 回收年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等。3. 对象访问方式对象访问有 2 种方式:使用句柄直接指针句柄是一种特殊的智能指针 。句柄与普通指针的区别在于:指针包含的是引用对象的内存地址,而句

2022-05-20 18:56:59 170

原创 1. 泛型

1. 泛型是什么泛型有泛型类、泛型接口、泛型方法。class HashMap<K,V>interface Generator T method(T t)2. 为什么我们需要泛型不需要写 addInt(int x, int y)、addFloat(float x, float y) 这种代码,使用泛型后修改为: T add(T x, T y)3. 虚拟机是如何实现泛型的泛型中的 T、K、V 等都会被擦除为 Object,但编译器在编译后会加上强制类型转换,如:使用泛型的代码

2022-05-20 18:42:30 122

原创 1. 内存区域

1. 概览线程私有的区域是用来运行指令的,线程共享的区域是用来存储数据的。2. 线程私有区域线程私有区域是用来运行指令的。2.1 程序计数器程序计数器指向当前线程正在运行的字节码指令的地址(行号)。为什么需要程序计数器?Java 是多线程的,在运行过程中需要线程切换,程序计数器保证在多线程情况下程序正常执行。程序计数器是 JVM 中唯一不会发生 OOM 的内存区域。2.2 栈为什么 JVM 要使用栈?可以很好地兼容方法调用方法这一个过程。1. 虚拟机栈大小设置:-Xss。存储当

2022-05-19 14:09:50 217

原创 0. 前置

1. Java SE 体系架构2. 虚拟机种类HotSpot VMJRockit VMJ9 VMDalvik VM3. 未来的 Java 技术4. JVM 执行流程概览

2022-05-19 12:49:46 120

原创 1. Netty 入门 1

1. 使用示例public class EchoServer { private final int port; public EchoServer(int port) { this.port = port; } public void start() throws InterruptedException { final EchoServerHandler serverHandler = new EchoServerHandler();

2022-05-04 14:32:37 56

原创 2. Netty 入门 2

1. Netty 核心组件EventLoop(Group)ChannelChannelHandlerChannelPipelineChannelFutureChannel、EventLoop(Group) 、ChannelFuture、ChannelHandler、ChannelPipeline 再理解:Channel:相当于 SocketChannelFuture:异步通知EventLoop:控制、多线程处理、并发ChannelHandler:充当了所有处理入站和出站数据的应用程序逻

2022-05-04 13:54:10 462

原创 2. 网络编程

1. InetAddresspublic class UseInet { public static void main(String[] args) throws UnknownHostException { InetAddress address = InetAddress.getByName("www.baidu.com"); System.out.println(address); InetAddress address2 = InetAd

2022-04-24 14:51:10 91

原创 2. Nginx 配置文件

1. 配置文件结构main:全局设置events:设定 nginx 的工作模式及连接数上限http:服务器相关属性server:虚拟主机设置upstream:上游服务器设置,主要为反向代理、负载均衡相关配置location:URL匹配特定位置后的设置2. 配置全解析#定义Nginx运行的用户和用户组user www www;#nginx进程数,建议设置为等于CPU总核心数。worker_processes 8; #全局错误日志定义类型,[ debug | info | no

2022-04-22 22:31:17 2168

原创 1. Nginx 概览

1. Nginx在架构体系中的位置与功用网关虚拟主机:为不同域名/ip/端口提供服务路由:使用反向代理,整合后面服务为一个完整业务静态服务器:mvvm模式中,用来发布 html/css/js/img负载集群:使用upstream,负载多个tomcat。2. 架构设计核心模块正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动机制、进程管理等核心功能。标准 HTTP 模块提供 HTTP 协议解析相关的功能,如:端口配置、网页编码设置、HTTP 响应头设置等。可选 HT

2022-04-22 22:24:09 658

原创 3. 源码

1. 命令行客户端总体:具体流程:ZooKeeperMain main = new ZooKeeperMain(args); 创建连接,2 个线程(SendThread、EventThread),并启动。main.run();SendThread.run()EventThread.run()2. 命令行服务端

2022-04-22 19:39:11 97

原创 4. Zookeeper 示例

1. 分布式锁创建临时节点实现分布式锁,实现的是独占锁。public interface Lock { void lock(); void unlock();}public abstract class ZkAbstractLock implements Lock { private static String connectStr = "192.168.67.139:2184"; public static String path = "/lock";

2022-04-20 16:48:59 2199

原创 2. Zookeeper 客户端

1. 客户端指令create [-e][-s] path data [acl]:-e:临时节点;-s:顺序节点set [-s][-v version] path data:-v:指定版本号更新get [-s][-w] path:-s:列出节点详情;-w:添加 watcherls [-s][-w][-R] path:-s:列出节点详情;-w:添加 watcher;-R:列出节点的级联节点stat [-w] path:-w:添加 watcherdelete path:删除节点deleteall p

2022-04-20 14:30:23 1970

原创 1. Zookeeper 理论

1. 分布式理论分布式中遇到的问题:网络分区由于网络延迟导致的分布式节点中只有部分能够进行正常通信,另一部分则不能,我们将这种现象叫做网络分区,俗称“脑裂”,当网络分区出现时会存在局部小集群,小集群完成了原来需要全部节点参与的分布式事务请求,这对分布式一致性挑战很大。三态成功、失败、超时。当出现超时现象时,就无法确定请求是否被处理成功。通信异常节点故障分布式特点:分布性对等性并发性缺乏全局时钟故障随时会发生1.1 CAP一致性(C)数据在分布式环境下的多个副本之间能

2022-04-20 12:59:26 2998

原创 2. RocketMQ 基础 2 - 消息发送

1. 环境搭建<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.8.0</version></dependency>2.普通消息2.1 发送1. 同步发送public class SyncProducer { public st

2022-04-20 02:38:40 392

原创 1. RocketMQ 基础 1

1. 为什么要使用消息中间件消息中间件属于分布式系统中一个子系统,关注于数据的发送和接收,利用高效可靠的异步消息传递机制对分布式系统中的其余各个子系统进行集成。消息中间件的作用:应用解耦。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。使用消息中间件,系统的耦合性就会降低。比如物流系统发生故障,需要几分钟才能来修复,在这段时间内,物流系统要处理的数据被缓存到消息队列中,用户的下单操作正常完成。当物

2022-04-20 00:57:00 80

原创 4. Hystrix

1. 服务雪崩雪崩是系统中的蝴蝶效应,导致其发生的原因多种多样,有不合理的容量设计,或者是高并发下某一个方法响应变慢,亦或是某台机器的资源耗尽。从源头上我们无法完全杜绝雪崩源头的发生,但是雪崩的根本原因来源于服务之间的强依赖,所以我们可以提前评估。当整个微服务系统中,有一个节点出现异常情况,就有可能在高并发的情况下出现雪崩,导致调用它的上游系统出现响应延迟,响应延迟就会导致 Tomcat 连接本耗尽,导致该服务节点不能正常的接收到正常的情况,这就是服务雪崩行为。2. 服务隔离如果整个系统雪崩是由于一个

2022-04-20 00:40:40 281

原创 3. Ribbon

1. 配置@SpringBootApplication@EnableEurekaClientpublic class MicroWebApplication { @Bean //负载均衡注解 @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { Sp

2022-04-16 22:54:22 250

原创 2. Eureka

1. Eureka 用户认证导入用户认证依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>security.basic.enabled=truespring.security.user.name=admins

2022-04-16 22:18:04 389

原创 1. 搭建简单的微服务框架

1. 注册中心搭建导入 SpringBoot:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> <!-- looku

2022-04-16 21:02:50 620

原创 5. MySQL 底层执行原理

1. 索引合并MySQL 一般情况下执行一个查询时最多只会用到单个二级索引,但存在有特殊情况,在这些特殊情况下也可能在一个查询中使用到多个二级索引,MySQL 中这种使用到多个索引来完成一次查询的执行方法称之为:索引合并/index merge。1.1 Intersection 合并等值匹配SELECT * FROM order_exp WHERE order_no = ‘a’ AND expire_time = ‘b’; MySQL 使用 order_no 索引查出满足的数据,使用 expire_

2022-04-16 19:40:29 555

原创 4.性能优化

1. 调优金字塔架构调优:采用更适合业务场景的架构能最大程度地提升系统的扩展性和可用性。在设计中进行垂直拆分能尽量解耦应用的依赖,对读压力比较大的业务进行读写分离能保证读性能线性扩展,而对于读写并发压力比较大的业务在 MySQL 上也有采用读写分离的大量案例。MySQL 调优:需要确认业务表结构设计是否合理,SQL 语句优化是否足够,该添加的索引是否都添加了,是否可以剔除多余的索引等等。硬件和 OS 调优:使用什么样的磁盘阵列(RAID)级别、是否可以分散磁盘 IO、是否使用裸设备存放数据,使用哪种

2022-04-16 13:00:41 728

原创 3. MySQL 表设计

1. 三范式要想设计—个好的关系,必须使关系满足一定的约束条件,此约束已经形成了规范,分成几个等级,一级比一级要求得严格。满足这些规范的数据库是简洁的、结构明晰的。一般满足三范式就可以了。1.1 第一范式每一列属性都是不可再分的属性值,确保每一列的原子性;两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据;单一属性的列为基本数据类型构成;设计出来的表都是简单的二维表。满足第一范式。1.2 第二范式第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是

2022-04-14 16:46:50 1411

原创 2. 事务

1. 什么是事务事务是 DBMS 执行过程中的一个逻辑单位。这个逻辑单位由一个有限的数据库操作序列构成,不可分割,要么全部成功,要么全部不成功。2. 事务的 4 大特性原子性(Atomicity)一个事务必须被视为一个不可分割的最小单元,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不能只执行其中的一部分操作。一致性(Consistency)一致性是指事务将数据库从一种一致性转换到另外一种一致性状态,在事务开始之前和事务结束之后数据库中数据的完整性没有被破坏。持久性(

2022-04-14 15:34:54 758

原创 1. MySQL 概述

1. MySQL 体系结构MySQL 体系结构分为连接层、服务层、存储引擎层。MySQL 的存储引擎层是插件式的,并且是基于表的,而不是基于数据库的,也就是不同的表可以使用不同的存储引擎,而不是整个数据库使用同一个存储引擎。...

2022-04-14 00:17:21 523

原创 1. 缓存

1. 缓存分类1.1 客户端缓存常见的客户端缓存有页面缓存、浏览器缓存、APP 上的缓存。1.2 服务器缓存常见的服务器缓存有数据库缓存、应用级缓存、平台级缓存(Redis)。1.3 网络中的缓存常见的网络中的缓存有 Web 代理中的缓存(正向代理、反向代理)、边缘缓存(比如 CDN)。1. CDN2. 缓存会遇到的问题2.1 缓存穿透2.2 缓存击穿2.3 缓存雪崩2.4 缓存热点3. 常见缓存算法常见的缓存算法有 LRU(最近最少使用)、LFU、FIFO。...

2022-04-12 22:26:16 395

空空如也

空空如也

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

TA关注的人

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