- 博客(875)
- 收藏
- 关注
原创 JVM调优实战及常量池详解(阿里巴巴Arthas详解)
Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,可以方便的定位和诊断线上程序运行问题。
2025-01-07 10:08:29
681
原创 Java技术杂谈
线程安全 - 如果线程执行过程中不会产生共享资源的冲突,则线程安全。线程不安全 - 如果有多个线程同时在操作主内存中的变量,则线程不安全实现线程安全的三种方式1)互斥同步。
2025-01-06 15:42:39
856
原创 JVM对象创建与内存分配机制深度剖析
大量的对象被分配在eden区,eden区满了后会触发minor gc,可能会有99%以上的对象成为垃圾被回收掉,剩余存活的对象会被挪到为空的那块survivor区,下一次eden区满了后又会触发minor gc,把eden区和survivor区垃圾对象回收,把剩余存活的对象一次性挪动到另外一块为空的survivor区,因为新生代的对象都是朝生夕死的,存活时间很短,所以JVM默认的8:1:1的比例是很合适的,让eden区尽量的大,survivor区够用即可,而在JAVA中对象就是可以被进一步分解的聚合量。
2024-12-26 16:34:56
839
原创 JVM内存模型深度剖析与优化
对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。
2024-12-26 16:16:36
935
原创 从JDK源码级别彻底剖析JVM类加载机制
commonLoader:Tomcat最基本的类加载器,加载路径中的class可以被Tomcat容器本身以及各个Webapp访问;catalinaLoader:Tomcat容器私有的类加载器,加载路径中的class对于Webapp不可见;sharedLoader:各个Webapp共享的类加载器,加载路径中的class对于所有Webapp可见,但是对于Tomcat容器不可见;
2024-12-11 17:41:12
1080
原创 Mysql全局优化与Mysql 8.0新特性详解
从上图可以看出SQL及索引的优化效果是最好的,而且成本最低,所以工作中我们要在这块花更多时间。
2024-12-11 16:31:06
1079
原创 Mysql锁机制与优化实践以及MVCC底层原理剖析
MVCC机制的实现就是通过read-view机制与undo版本链比对机制,使得不同的事务会根据数据版本链对比规则读取同一条数据在版本链上的不同版本数据。
2024-10-26 15:39:59
1082
原创 Mysql事务原理与优化最佳实践
我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了,用一整套机制来解决。接下来的,我们会深入讲解这些机制,让大家彻底理解数据库内部的执行原理。
2024-10-26 15:17:58
683
原创 Mysql索引优化实践进阶
count(1)跟count(字段)执行过程类似,不过count(1)不需要取出字段统计,就用常量1做统计,count(字段)还需要取出字段,所以理论上count(1)比count(字段)会快一点。count(*) 是例外,mysql并不会把全部字段取出来,而是专门做了优化,不取值,按行累加,效率很高,所以不需要用 count(列名)或count(常量)来替代 count(*)。并且 join_buffer 里的数据是无序的,因此对表 t1 中的每一行,都要做 100 次判断,所以内存中的判断次数是。
2024-10-19 17:38:00
902
原创 Mysql索引优化实践
以社交场景APP来举例,我们一般会去搜索一些好友,这里面就涉及到对用户信息的筛选,这里肯定就是对用户user表搜索了,这个表一般来说数据量会比较大,我们先不考虑分库分表的情况,比如,我们一般会筛选地区(省市),性别,年龄,身高,爱好之类的,有的APP可能用户还有评分,比如用户的受欢迎程度评。索引下推会减少回表次数,对于innodb引擎的表索引下推只能用于二级索引,innodb的主键索引(聚簇索引)树叶子节点上保存的是全行数据,所以这个时候索引下推并不会起到减少查询全行数据的效果。
2024-10-19 16:51:35
615
原创 Explain详解与索引优化最佳实践
扫描全索引就能拿到结果,一般是扫描某个二级索引,这种扫描不会从索引树根节点开始快速查找,而是直接对二级索引的叶子节点遍历和扫描,速度还是比较慢的,这种查询一般为使用覆盖索引,二级索引一般比较小,所以这种通常比ALL快一些。:相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行。这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名(例:film.id)
2024-10-17 09:39:53
1139
原创 Shiro权限框架-分布式统一权限系统(11)
1、系统需求【1】前后端分离在第十章中我们已经实现,使用jwt的令牌实现,重写DefaultWebSessionManager,从ServletRequest获得jwtToken作为会话sessionIdpackage com.itheima.shiro.core.impl;import com.itheima.shiro.utils.EmptyUtil;import io.jsonwebtoken.Claims;import org.apache.shiro.web.servlet.
2022-04-03 11:28:48
1408
原创 Shiro权限框架-Springboot+Shiro+Jwt前后端分离鉴权(10)
1、前后端分离会话问题【1】问题追踪 前面我们实现分布式的会话缓存,但是我们发现此功能的实现是基于浏览的cookie机制,也就是说用户禁用cookie后,我们的系统会就会产生会话不同的问题【2】解决方案 我们的前端可能是web、Android、ios等应用,同时我们每一个接口都提供了无状态的应答方式,这里我们提供了基于JWT的token生成方案1、用户登陆之后,获得此时会话的sessionId,使用JWT根据sessionId颁发签名并设置过期时间(与session过期时间相同)返
2022-04-03 11:19:15
584
原创 Shiro权限框架-在线并发登录人数控制(9)
1、实现原理在实际开发中,我们可能会遇到这样的需求,一个账号只允许同时一个在线,当账号在其他地方登陆的时候,会踢出前面登陆的账号,那我们怎么实现 自定义过滤器:继承AccessControlFilter 使用redis队列控制账号在线数目 实现步骤: 1、只针对登录用户处理,首先判断是否登录2、使用RedissionClien创建队列3、判断当前sessionId是否存在于此用户的队列=key:登录名 value:多个sessionId4、不存在则放入队列尾端==>
2022-04-03 11:16:16
1014
原创 Shiro权限框架-限制密码重试次数(8)
1、实现原理保证原子性: 单系统:AtomicLong计数 集群系统:RedissionClient提供的RAtomicLong计数1、获取系统中是否已有登录次数缓存,缓存对象结构预期为:"用户名--登录次数"。2、如果之前没有登录缓存,则创建一个登录次数缓存。3、如果缓存次数已经超过限制,则驳回本次登录请求。4、将缓存记录的登录次数加1,设置指定时间内有效5、验证用户本次输入的帐号密码,如果登录登录成功,则清除掉登录次数的缓存思路有了,那我们在哪里实现呢?我们
2022-04-03 11:14:07
1115
原创 Shiro权限框架-实现分布式会话SessionManager(7)
1、会话的问题2、分布式会话实现思路【1】原理分析 所有服务器的session信息都存储到了同一个Redis集群中,即所有的服务都将 Session 的信息存储到 Redis 集群中,无论是对 Session 的注销、更新都会同步到集群中,达到了 Session 共享的目的。 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是 Session。客户端浏览器再次访问时只需要从该 .
2022-04-03 11:11:33
229
原创 Shiro权限框架-Realm缓存机制(6)
1、Realm缓存机制意义在上面我们自定了自己的realm,但是我们发现在认证和授权的时候,程序需要频繁的访问数据库,这样对于数据库的压力可想而知,那我们怎么处理呢?2、Realm缓存机制实现思路【1】缓存机制图解【2】原理分析此时我们对UserBridgeServiceImpl的实现类里面的逻辑加入了自定义的SimpleCacheService缓存服务接口,简单来说实现了在认证和鉴权时不需要每次都去查询数据库,而是把认证和鉴权信息放入到redis缓存中,以减低数据库的访问.
2022-04-03 11:07:32
969
原创 Shiro权限框架-Springboot集成Shiro(5)
1、技术栈主框架:springboot响应层:springMVC持久层:mybatis事务控制:jta前端技术:easyui2、数据库设计【1】数据库图解sh_user:用户表,一个用户可以有多个角色sh_role:角色表,一个角色可以有多个资源sh_resource:资源表sh_user_role:用户角色中间表sh_role_resource:角色资源中间表【2】数据库脚本sh_userCREATE TABLE `sh_user` (
2022-04-03 11:03:57
212
原创 Shiro权限框架-Web项目集成Shiro(4)
1、Web集成原理分析【1】web集成的配置还记得吗,以前我们在没有与WEB环境进行集成的时候,为了生成SecurityManager对象,是通过手动读取配置文件生成工厂对象,再通过工厂对象获取到SecurityManager的。就像下面代码展示的那样 /** * @Description 登录方法 */private Subject shiroLogin(String loginName,String password) { //导入权限ini文件构建权限工厂
2022-04-03 10:47:00
286
原创 Shiro权限框架-Shiro入门(3)
1、身份认证【1】基本流程流程如下: 1、Shiro把用户的数据封装成标识token,token一般封装着用户名,密码等信息 2、使用Subject门面获取到封装着用户的数据的标识token 3、Subject把标识token交给SecurityManager,在SecurityManager安全中心中,SecurityManager把标识token委托给认证器Authenticator进行身份验证。认证器的作用一般是用来指定如何验证,它规定本次认证用到哪些Realm 4
2022-04-02 21:57:23
188
原创 Shiro权限框架-Shiro概述(2)
1、Shiro简介【1】什么是Shiro? Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。【2】Shiro 的特点 Shiro 是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点:· 易于理解的 Java Security API;· 简单的身份认证(登录),支持多种数据源(LDAP,JDBC 等);· 对
2022-04-02 21:27:34
208
原创 Shiro权限框架-权限系统的整体概念(1)
1、什么是权限 权限管理,一般指根据系统设置的安全策略或者安全规则,用户可以访问而且只能访问自己被授权的资源,不多不少。权限管理几乎出现在任何系统里面,只要有用户和密码的系统。权限管理在系统中一般分为: 访问权限 一般表示你能做什么样的操作,或者能够访问那些资源。例如:给张三赋予“店铺主管”角色,“店铺主管”具有“查询员工”、“添加员工”、“修改员工”和“删除员工”权限。此时张三能够进入系统,则可以进行这些操作 数据权限 一般表示某些数据你是否属于你,或者
2022-04-02 21:24:40
190
原创 项目打包和自动化部署
一. 项目部署和DevOps1.1. 传统的开发模式在传统的开发模式中,开发的整个过程是按部就班就行:但是这种模式存在很大的弊端:工作的不协调:开发人员在开发阶段,测试和运维人员其实是处于等待的状态。等到测试阶段,开发人员等待测试反馈bug,也会处于等待状态。 线上bug的隐患:项目准备交付时,突然出现了bug,所有人员需要加班、等待问题的处理;1.2. DevOps开发模式DevOps是Development和Operations两个词的结合,将开发和运维结合起来的模式:.
2022-03-27 20:23:30
5623
1
原创 Kubernetes-k8s(2)
6. Pod控制器详解6.1 Pod控制器介绍Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类:自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建 控制器创建的pod:kubernetes通过控制器创建的pod,这种pod删除了之后还会自动重建什么是Pod控制器Pod控制器是管理pod的中间层,使用Pod控制器之后,只需要告诉Pod控制器,想要多少个什么样的Pod就可以了,它会创建出满足
2022-03-22 14:14:56
432
原创 Kubernetes-k8s(1)
1. Kubernetes介绍1.1 应用部署方式演变在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响 虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境 优点:程序环境不会相互产生影响,提供了一定程度的安全性 缺点:增加了操作系统,浪费了部分资源
2022-03-22 10:33:11
230
原创 消息中间件-ActiveMQ-消息队列与发布订阅
1.消息中间件产生的背景2.消息中间件概述4.点对点与发布订阅5.消息中间件应用场景6.市面上消息中间件 产品7.window下 ActiveMQ安装8.JMS可靠消息机制9.SpringBoot整合ActiveMQ消息中间件产生的背景1.在网络通讯中,Http请求默认采用同步请求方式,基于请求与响应模式2.在客户端与服务器进行通讯时,客户端调用服务端接口后,必须等待服务端完成处理后返回结果给客户端才能继续执行,这种情况属于同步调用方式。3.如果服务器端发生网络延
2022-03-20 21:32:03
316
原创 微服务技术-Dubbo分布式服务治理框架-SpringBoot整合Dubbo
1.Dubbo支持协议方式2.SpringBoot2.0整合Dubbo框架3.浅谈为什么放弃Dubbo,选择SpringCloud4.当当网改造Dubbo、Dubbox介绍Dubbo支持的协议Dubbo支持Dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,但是Dubbo官网是推荐我们使用Dubbo协议的。Springboot整合Dubbo注意:SpringBoot1.0版本与SpringBoot2.0整合版本区别很大。
2022-03-20 21:01:24
244
原创 分布式协调工具-Zookeeper
什么是ZookeeperZookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证Z
2022-03-20 20:51:13
365
原创 微服务技术-Dubbo分布式服务治理框架-负载均衡原理分析
1.什么是Dubbo服务框架2. 分析Dubbo架构原理3.RPC框架中负载均衡是如何设计的4.软负载与硬件负载均衡之间的区别5.Dubbo负载均衡与Nginx负载均衡区别6.基于Zookeeper实现Dubbo动态负载均衡什么是Dubbo1.一款分布式服务框架 2.高性能和透明化的RPC远程服务调用方案3.SOA服务治理方案每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中。Dubbo注册中心Dubb
2022-03-20 20:41:23
193
原创 微服务技术-Dubbo分布式服务治理框架-服务注册与发现
1.Dubbo分布式服务治理框架产生的背景2. 为什么需要对服务实现服务治理3. 什么是Dubbo分布式服务治理框架3. Dubbo支持常用四种注册中心4. Dubbo分布式服务治理框架优缺点5. Dubbo底层架构架构原理6. Dubbo服务注册与发现原理7.Dubbo分布式治理快速入门8.部署DubboAdmin平台什么是Dubbo1.一款分布式服务框架 2.高性能和透明化的RPC远程服务调用方案3.SOA服务治理方案每天为2千多个服务提供大于30
2022-03-20 20:26:06
318
原创 SpringBoot高级应用(2)
01-SpringBoot高级-今日内容SpringBoot自定配置 SpringBoot事件监听 SpringBoot流程分析 SpringBoot监控 SpringBoot部署02-SpringBoot自动配置-Condition-1Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载相应的Bean@Conditional要配和Condition的实现类(ClassCondition)进行使用ClassConditio
2022-03-18 10:49:58
188
原创 SpringBoot概述与入门(1)
01-今日内容Spring概述、快速入门 SpringBoot配置 SpringBoot整合02-SpringBoot概述SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率SpringBoot功能1)自动配置Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪.
2022-03-18 10:23:57
84
原创 彻底解决分布式事务
1、分布式事务产生的背景2、解决分布式事务基本思想Base和CAP理论3、柔性事务与刚性事务区别4、理解解决分布式事务核心思想软状态与最终一致性思想5、分布式事务常见解决方案>>>5.1 传统模式使用Jta+Atomikos>>>5.2 2PC与3PC实现的区别>>>5.3 使用阿里巴巴TCC补偿框架>>>5.4 使用可靠消息模式>>>5.5 使用LCN框架解决分布式事务(重点)
2022-03-15 22:38:19
89
原创 消息中间件-RabbitMQ解决分布式事务和消息幂等性问题
1、RabbitMQ消费者补偿机制2、如何合适选择重试机制3、消费者如果保证消息幂等性,不被重复消费3、RabbitMQ手动应答与自动应答模式4、基于RabbitMQ实现分布式事务最终一致性5、RabbitMQ死信队列,保证消息的高可用-------------1.RabbitMQ 死信队列-俗称备胎队列。2.分析RabbitMQ 解决分布式事务问题(重点)3.RabbitMQ 解决分布式事务三点核心概念4.基于路由模式RoutingKey实现分布式事务Rabbi
2022-03-15 22:21:44
168
原创 消息中间件-SpringBoot整合RabbitMQ
RabbitMQ消息确认机制问题产生背景: 生产者发送消息出去之后,不知道到底有没有发送到RabbitMQ服务器, 默认是不知道的。而且有的时候我们在发送消息之后,后面的逻辑出问题了,我们不想要发送之前的消息了,需要撤回该怎么做。 解决方案: 1.AMQP 事务机制 2.Confirm 模式事务模式:txSelect 将当前channel设置为transaction模式txCommit 提交当前事务txRollback 事务回滚RabbitMQ...
2022-03-14 22:58:24
100
原创 消息中间件-RabbitMQ高级队列
1、为什么需要使用索引?2、数据结构Hash、平衡二叉树、B树、B+树区别3、机械硬盘、固态硬盘区别5、Myisam与Innodb B+树的区别6、MySQL中的索引什么数据结构7、B+树中的节点到底存放多少为什么需要使用索引?MySQL官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。白话文:索引就像书的目录一样可以非常快速的定位到书的页码。如果向mysql发出一条sql语句请求,查询的字段没有创建索引的话,可能会导致全表扫描,这样的话查
2022-03-14 22:49:23
94
原创 消息中间件-RabbitMQ环境搭建
1.RabbitMQ课程介绍2.RabbitMQ与其他MQ有什么不同3.Windows环境搭建4.RabbitMQ管理平台介绍5.VirtualHost与权限管理6.RabbitMQ简单与工作队列7.RabbitMQ消息Ack应答模式8.RabbitMQ持久化机制9.RabbitMQ订阅模式10.RabbitMQ路由模式11.SpringBoot整合RabbitMQ12.RabbitMQ幂等性解决方案RabbitMQ简介RabbitMQ是一个由e...
2022-03-14 22:32:12
94
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人