自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JMM&synchronized&volatile详解

文章目录一、什么是JMM模型?JMM不同于JVM内存区域模型JMM存在的必要性二、数据同步八大原子操作同步规则分析并发编程的可见性,原子性与有序性问题JMM如何解决原子性&可见性&有序性问题volatile内存语义硬件层的内存屏障总结一、什么是JMM模型?Java内存模型(Java Memory Model简称JMM)是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。JVM运行程序的实体

2021-10-01 15:50:46 185

原创 操作系统底层工作的整体认识

文章目录一、冯诺依曼计算机模型详解计算机五大核心组成部分二、CPU指令结构控制单元运算单元存储单元CPU缓存结构CPU读取存储器数据过程CPU为何要有高速缓存带有高速缓存的CPU执行计算的流程CPU运行安全等级操作系统内存管理执行空间保护内核线程模型用户线程模型进程与线程虚拟机指令集架构栈指令集架构寄存器指令集架构总结一、冯诺依曼计算机模型详解现代计算机模型是基于-冯诺依曼计算机模型计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作

2021-10-01 14:30:50 223

原创 Mysql索引优化实战一

文章目录一、示例表一个不容易理解的综合例子:Mysql如何选择合适的索引常见sql深入优化Order by与Group by优化优化总结:Using filesort文件排序原理详解索引设计原则索引设计实战总结一、示例表CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', `age` int(11) NOT

2021-09-08 15:09:10 342

原创 一条SQL在MySQL中是如何执行的

文章目录一、MySQL的内部组件结构二、查询缓存三、分析器四、优化器五、执行器六、bin-log归档总结一、MySQL的内部组件结构大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。Server层主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。Store层存储引擎层负责数据的存储和提取。其架构模式是插件式的,支

2021-09-07 18:40:27 117

原创 Explain详解与索引最佳实践

文章目录一、Explain工具介绍二、Explain分析示例explain 两个变种explain中的列三、索引最佳实践索引使用总结:总结一、Explain工具介绍使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中二、Explain分析示例参考

2021-09-07 16:06:49 241 2

原创 mysql索引底层数据结构与算法

文章目录一、索引的本质,数据结构B-Tree结构B+Tree结构hash结构MyISAM存储引擎索引实现InnoDB存储引擎索引实现索引最左前缀原理总结一、索引的本质,数据结构B-Tree结构B+Tree结构load第一次最多16kb,16384 字节。一个节点可以放1170个元素第二层一个节点也可以放1170元素,叶子节点data假设1kb,也可以放16kb。所有元素个数为1170117016,大概2000多万的数据索引,数据高度仅仅为3。在ram中查找速度相较于一次磁盘IO可以忽

2021-09-06 11:22:57 95

原创 redis核心设计原理

文章目录一、二、总结一、二、总结

2021-09-02 10:28:00 136

原创 Redis 6.0 新特性

文章目录ziplist底层设计一、多线程2. client side caching3. ACL 是对于命令的访问和执行权限的控制,默认情况下,可以有执行任意的指令,兼容以前版本二、总结ziplist底层设计一、多线程redis 6.0 提供了多线程的支持,redis 6 以前的版本,严格来说也是多线程,只不过执行用户命令的请求时单线程模型,还有一些线程用来执行后台任务, 比如 unlink 删除 大key,rdb持久化等。redis 6.0 提供了多线程的读写IO, 但是最终执行用户命令

2021-09-01 20:27:59 314

原创 Redis缓存设计与性能优化

文章目录一、多级缓存架构二、缓存设计缓存穿透缓存失效(击穿)缓存雪崩热点缓存key重建优化缓存与数据库双写不一致开发规范与性能优化一、键值设计二、命令使用三、客户端使用总结一、多级缓存架构二、缓存设计缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。造成缓存穿透的基本原因有两个:第一, 自身业务代码或者数据出现问题。

2021-09-01 20:27:39 154

原创 Redis高可用集群之水平扩展

文章目录一、启动集群二、集群操作总结一、启动集群Redis3.0以后的版本虽然有了集群功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,今天就来带大家看看redis高可用集群如何做水平扩展,原始集群(见下图)由6个节点组成,6个节点分布在三台机器上,采用三主三从的模式启动整个集群/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8001/redis.conf/usr/local/r

2021-08-26 14:16:22 96

原创 Redis缓存高可用集群

文章目录一、Redis集群方案比较二、Redis高可用集群搭建三、Java操作redis集群四、Redis集群原理分析Redis集群选举原理分析总结一、Redis集群方案比较哨兵模式在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,

2021-08-26 14:16:11 272

原创 Redis持久化、主从与哨兵架构详解

文章目录一、Redis持久化RDB快照(snapshot)AOF(append-only file)Redis 4.0 混合持久化二、Redis主从架构Redis主从工作原理三、Redis哨兵高可用架构总结一、Redis持久化RDB快照(snapshot)在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。比如说, 以下设置会让 Redi

2021-08-26 14:15:56 80

原创 Redis核心数据结构与高性能原理

文章目录一、Redis安装二、五种数据结构String结构与应用场景Hash结构与应用场景Redis集群架构List结构与应用场景Set结构与应用场景ZSet有序集合结构和应用场景三、Redis的单线程和高性能Redis是单线程吗?Redis 单线程为什么还能这么快?Redis 单线程如何处理那么多的并发客户端连接?四、其他高级命令Info:查看redis服务运行信息,分为 9 大块,每个块都有非常多的参数,这 9 个块分别是:总结一、Redis安装下载地址:http://redis.io/down

2021-08-13 14:01:43 167

原创 电商项目07

文章目录一、电商项目搜索实战(上)图灵商城搜索效果实现:ES索引库表结构分析索引数据准备检索DSL语句构建Postman测试java代码实现二、总结一、电商项目搜索实战(上)图灵商城搜索效果实现:es存的字段不需要和mysql一模一样,主要看要搜索哪些字段。 根据关键字查询、根据品牌查询、商品类别、商品属性信息、价格区间、是否有库存、排序(销量、价格、 上架时间等)ES索引库表结构分析一个商品有很多属性,每个属性,每个属性有很多属性值。** 创建索引库**PUT product

2021-08-11 14:25:16 808

原创 JVM调优实战及常量池详解

文章目录一、阿里巴巴Arthas详解Arthas使用场景Arthas使用GC日志详解JVM参数汇总查看命令Class常量池与运行时常量池符号引用字符串常量池字符串常量池设计原理八种基本类型的包装类和对象池总结一、阿里巴巴Arthas详解Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,可以方便的定位和诊断线上程序运行问题。Arthas 官方文档十分详细,详见:https://alibaba.github.io/arthas

2021-08-10 13:56:08 176

原创 垃圾收集器G1&ZGC详解

文章目录一、G1收集器(-XX:+UseG1GC)G1垃圾收集分类二、ZGC收集器(-XX:+UseZGC)颜色指针ZGC触发时机三、如何选择垃圾收集器安全点与安全区域总结一、G1收集器(-XX:+UseG1GC)G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征.G1将Java堆划分为多个大小相等的独立区域(Region),JVM目标是不超过2048个Region(JVM源

2021-08-09 15:22:13 578

原创 JVM调优工具详解及调优实战

文章目录一、前置启动程序JmapJstackJinfoJstat二、垃圾回收统计堆内存统计新生代垃圾回收统计新生代内存统计老年代垃圾回收统计老年代内存统计元数据空间统计JVM运行情况预估系统频繁Full GC导致系统卡顿是怎么回事内存泄露到底是怎么回事总结一、前置启动程序事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用Jmap此命令可以用来查看内存信息,实例个数以及占用内存大小jmap -histo 14660 #查看历史生成的实例jmap -hist

2021-08-09 14:42:31 133

原创 垃圾收集器ParNew&CMS与底层三色标记算法详解

文章目录一、垃圾收集算法分代收集理论标记-复制算法标记-清除算法标记-整理算法二、垃圾收集器1.1 Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)1.2 Parallel Scavenge收集器(-XX:+UseParallelGC(年轻代),-XX:+UseParallelOldGC(老年代))1.3 ParNew收集器(-XX:+UseParNewGC)1.4 CMS收集器(-XX:+UseConcMarkSweepGC(old))亿级流量电商系统如何优

2021-08-07 16:08:11 181

原创 JVM内存分配机制详解

文章目录一、对象的创建1.类加载检查2.分配内存3.初始化零值4.设置对象头5.执行方法二、总结一、对象的创建对象创建的主要流程:1.类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。new指令对应到语言层面上讲是,new关键词、对象克隆、对象序列化等。2.分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在

2021-08-05 16:49:11 607

原创 JVM内存模型深度剖析与优化

文章目录一、JDK体系结构Java语言的跨平台特性JVM整体结构及内存模型二、JVM内存参数设置总结一、JDK体系结构Java语言的跨平台特性JVM整体结构及内存模型补充一个问题:在minor gc过程中对象挪动后,引用如何修改?对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起

2021-07-28 15:30:48 111

原创 JVM类加载机制

文章目录一、类加载运行全过程二、类加载器和双亲委派机制双亲委派机制总结一、类加载运行全过程当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到JVM。package com.example.jvm;public class Math { public static final int initData = 666; public static User user = new User(); public int compute()

2021-07-27 22:13:30 93

原创 MySQL技术内幕 InnoDB存储引擎

文章目录一、InnoDB体系架构缓冲池InnoDB关键特性二、文件日志文件表空间文件重做日志文件三、索引与算法B+树B+树插入操作B+树的删除操作B+树索引聚集索引辅助索引(非聚集索引)联合索引是指对表上的多个列进行索引覆盖索引锁脏读不可重复读事务A原子性C一致性I隔离性D持久性事务的实现redoundo总结一、InnoDB体系架构缓冲池InnoDB关键特性插入缓冲两次写自适应哈希索引异步IO刷新邻接页二、文件日志文件错误日志慢查询日志查询日志二进制日志

2021-07-27 11:38:12 65

原创 Java编程思想-网络编程

文章目录一、机器的标识二、服务器和客户机三、端口:机器内独一无二的场所四、套接字五、POST 的概念总结一、机器的标识当然,为了分辨来自别处的一台机器,以及为了保证自己连接的是希望的那台机器,必须有一种机制能独一 无二地标识出网络内的每台机器。早期网络只解决了如何在本地网络环境中为机器提供唯一的名字。但Java 面向的是整个因特网,这要求用一种机制对来自世界各地的机器进行标识。为达到这个目的,我们采用了IP (互联网地址)的概念。IP 以两种形式存在着: (1) 大家最熟悉的DNS(域名服务)形式。

2021-07-27 10:12:53 113

原创 HTTPS协议

文章目录一、HTTPSSSL/TLS摘要算法对称加密、非对称加密二、总结一、HTTPSSSL/TLS摘要算法md5,sha1,sha2,sha1 256对称加密、非对称加密异或实现对称加密,原文异或密钥=密文,密文异或密钥=原文。非对称算法复杂,效率低二、总结...

2021-07-26 12:54:37 44

原创 TCP协议

文章目录一、TCP协议TCP报文TCP连接管理如何进行握手连接状态查看TCP四次挥手字节流的协议二、数据可靠性传输停止等待协议重传机制总结一、TCP协议客户端可以主动往服务器写数据,服务器也可以主动往客户端写数据TCP报文源端口(发送端随机生成),目的端口(三次握手之前一定要知道端口是多少),序列号,应答数,保证可靠传输,TCP连接管理如何进行握手抓3次请求连接状态查看TCP四次挥手等待两个2MSL时间,如果ACK j+1丢失了会不断重发,服务端还有一次FIN seq

2021-07-26 12:23:43 59

原创 从一个HTTP请求来看网络分层原理

文章目录一、复杂的网络一个HTTP请求的分层解析过程二、 HTTP协议HTTP报文格式请求行报文格式响应行报文格式HTTP头字段常用头字段三、HTTP请求的完整过程当用户在浏览器输入网址回车之后,网络协议都做了哪些工作呢?总结一、复杂的网络丢失 -> 重传 -> 重复 -> 被人篡改 -> 完整性校验 -> 不同介质信号转换 -> 距离太远信号衰减。一个HTTP请求的分层解析过程域名解析成ip地址,构造一个DNS请求报文,应用层调用传输层的UDP相关

2021-07-26 11:52:30 370

原创 事务隔离级别与传播属性

文章目录一、事务的隔离级别二、事务的传播属性总结一、事务的隔离级别脏读:一个事务读取到另一个事务没有提交的数据不可重复读:在同一个事务中,执行同一条语句,这时别的事务把数据更改了,导致查出来的数据不同幻读:在一个事务两次查询中的数据笔数不一致解决幻读最好使用分布式锁解决,在数据库解决效率低二、事务的传播属性总结...

2021-07-26 11:19:20 61

原创 深入理解Java虚拟机

文章目录一、JVM整体架构JVM由三个主要的子系统构成二、JVM类加载器三、JVM内存结构四、JVM执行引擎总结一、JVM整体架构JVM由三个主要的子系统构成.java文件通过javac变异成.class文件,通过JVM虚拟机运行,JVM虚拟机类加载子系统把.class装载入到内存中。二、JVM类加载器三、JVM内存结构四、JVM执行引擎总结...

2021-07-26 10:59:01 72

原创 SpringCloud微服务面试

文章目录一、Eureka1.0已经不维护闭源了,那么注册中心这块的微服务可以用什么?zuul 和 Gateway之间的技术选型怎么理解?二、总结一、Dubbo缺点语言绑定Java。SpringCloud具有语言扩展性,也有不错的性能,做的后端架构,对于网络传输性能要求不是特别高。Eureka1.0已经不维护闭源了,那么注册中心这块的微服务可以用什么?很多公司还会使用Eureka,理由:他足够健壮,足够稳定。1.0在民间还在更新维护,市场占有率太大,有很多程序员去贡献代码,非常成熟,出任何问题

2021-07-24 22:15:08 120

原创 微服务架构之分布式事务解决方案

文章目录一、微服务微服务概述二、分布式事务三、XA/JTA规范四、柔性事务CAP理论BASE理论最大努力通知方案TCC两阶段补偿型方案TCC与XA/JTA对比基于Rocket MQ的方案要是通过这两阶段怎么封装一个框架去实现TCC?总结一、微服务微服务概述dubbo和springcloud是流行的微服务框架,电商网站架构二、分布式事务假如下单操作,需要调用库存微服务和交易微服务,在传统的一个war包的项目中,用Spring提供的事务注解可以实现,但是微服务架构中不可以使用,因为Spri

2021-07-24 19:47:33 1014

原创 TCP半包粘包问题

文章目录一、TCP半包粘包问题示例与分析二、如何解决TCP半包粘包问题?拆包解决思路Netty拆包的基类Netty常用编码器基于长度的协议的解码器基于分隔符的解码器基于包头不固定长度的解码器总结一、TCP半包粘包问题示例与分析TCP层不管包,不知道什么是半包,半包粘包是应用层的概念。二、如何解决TCP半包粘包问题?拆包解决思路Netty拆包的基类Netty常用编码器基于长度的协议的解码器基于分隔符的解码器基于包头不固定长度的解码器总结...

2021-07-24 14:07:14 111

原创 Java是如何实现异常处理的?

文章目录一、二、总结一、二、总结

2021-07-24 12:30:15 141

原创 如何高效实现单例(Sinleton)设计模式

文章目录一、如何高效实现单例(Sinleton)设计模式单例模式的基本概念单例模式的不同实现方式及各自优势饿汉式懒汉式懒汉式 + synchronized懒汉式+Double CheckVolatile懒汉式+Double Check + Volatile内部类Holder单例模式实现的问题枚举(Enum)单例模式实现总结总结一、如何高效实现单例(Sinleton)设计模式单例模式的基本概念单例模式的不同实现方式及各自优势饿汉式懒汉式懒汉式 + synchronized懒汉式+D

2021-07-23 18:28:54 145

原创 Java零拷贝

文章目录一、什么是零拷贝哪里用到了零拷贝零拷贝Linux IO流程传统数据传送零拷贝内存映射Java NIO - MappedByteBuffersendfile - Linux 2.1Java NIO - FileChannel.transferToNetty中的零拷贝二、怎么实现零拷贝通过CompositeByteBuf实现零拷贝通过wrap操作实现零拷贝通过slice操作实现零拷贝通过FileRegion实现零拷贝总结一、什么是零拷贝哪里用到了零拷贝零拷贝Linux IO流程dma

2021-07-23 17:46:42 60

原创 Mysql索引底层数据结构

文章目录一、索引相关面试题说下索引底层数据结构什么是聚集索引InnoDB表为什么必须有主键InnoDB表主键为什么推荐使用自增的整形二、Mysql索引B+树原理MyISAM索引实现InnoDB索引实现主键索引与非主键索引的区别总结一、索引相关面试题说下索引底层数据结构什么是聚集索引InnoDB表为什么必须有主键InnoDB的表数据文件,本身就是一个索引结构的文件,必须需要主键,mySQL会给InnoDB的表自动生成一个主键,他的数据文件按照索引结构存储。InnoDB表主键为什么推荐使用自增的

2021-07-23 17:04:30 128

原创 Spring AOP原理实现

文章目录一、Spring AOP原理什么是AOP场景底层实现AOP相关术语总结一、Spring AOP原理什么是AOP场景底层实现两种技术都应用到了,被代理的对象是接口类型的话就默认使用Java动态代理,非接口的代理类或者加入会使用CGLIB代理。Java只允许单继承多实现,已经继承Proxy了,所以必须是接口。AOP相关术语总结...

2021-07-23 16:17:21 63

原创 HashMap底层实现

文章目录一、什么是哈希什么是数组什么是链表二、HashMap的使用数组链表HashMapget操作三、面试是线程安全的吗?HashMap数据结构是什么?JDK8对HashMap优化哪块,为何要优化?1.71.8HashMap和HashTable和ConcurrentHashMap区别总结一、什么是哈希什么是数组什么是链表二、HashMap的使用数组链表HashMapget操作三、面试是线程安全的吗?非线程安全的,put时在addEntry里面有一个扩

2021-07-23 15:57:27 59

原创 Java并发类库中的线程池

文章目录一、Executor框架的基本组成ThreadPoolExecutor线程池大小选择策略线程池工作流程二、线程池工作流程三、线程池实例分析总结一、Executor框架的基本组成ForkJoinPool主要是把我们的任务细分成多个小任务,根据CPU多核处理能力,把任务分配到多个核心上处理,最后再合并返回。ScheduledThreadPoolExecutor主要是对上面的线程池做了增强,加了调度的逻辑。建议使用Executors创建线程池,里面的方法封装了上面几个线程池。ThreadP

2021-07-23 15:31:48 88

原创 什么情况下Java程序会产生死锁

文章目录一、死锁的基本概念二、死锁程序实例剖析三、怎么预防死锁发生总结一、死锁的基本概念一般在线无法修复,需要重启服务打上补丁。二、死锁程序实例剖析线程A拿到锁A睡眠1秒尝试获取锁B,睡眠1秒时,线程B进入,获取到锁B休眠一秒,尝试获取锁A,线程A醒来尝试获取锁B,获取不到,线程B尝试获取锁A获取不到,发生死锁。JVM自带的排查死锁工具 Jstack 端口号三、怎么预防死锁发生总结...

2021-07-23 13:35:50 145

原创 String、StringBuild、StringBuffer

文章目录一、String的基本特征二、String的引申说明String对象是否真的不可变?三、StringBuffer与StringBuilder应用场景总结一、String的基本特征被声明为final类,内部变量亦被final修饰典型的Immutable(不可变)类字符串常亮缓存hash可能需要被重新计算,所以没有被设置为final。值一旦确立之后,在内存上就不会被改变了。删除添加的操作字符串操作都是新建了一个字符串,不是原来的字符串了。被设置为Immutable类还有一个好处,

2021-07-23 11:47:48 161

空空如也

空空如也

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

TA关注的人

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