自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式ID生成的几种方案(后续待补充)

使用数据库的ID自增策略,如MySQL的auto_increment。并且可以使用两台数据库分别设置不同步长,生成不重复ID的策略来实现高可用。Redis的所有命令操作都是单线程的,本身提供像incr和increby这样的自增原子命令,所以能保证生成的ID肯定是唯一有序的;算法核心思想是结合机器的网卡、当地时间、一个随机数来生成UUID;高可用性:确保任何时候都能正确的生成ID;本地生成,生成简单且性能好,没有网络消耗;唯一性:确保生成的ID是全网唯一的;

2024-04-09 11:55:55 561

原创 关于JVM的小总结(待补充)

线程私有线程共享。

2024-03-07 16:49:28 602

原创 关于装载类子系统

自定义类加载器(Custom ClassLoader):Java允许我们自定义类加载器,只需要继承java.lang.ClassLoader类,并重写findClass方法即可。这样可以让Java类具有动态加载和热加载的能力,提高了Java程序的灵活性。

2024-03-07 11:40:03 922

原创 关于三色标记算法

三色标记算法是一种用于垃圾收集得算法,主要用于解决在并发垃圾收集中可能出现得对象引用更新问题。在JVM中,这种算法主要应用于CMS(ConcurrentMarkSweep)收集器和G1(Garbage-first)收集器。

2024-02-19 14:52:08 970

原创 关于String 的创建与内存存储

字符串常量池(String Pool,也称 String Table),在 JDK1.7 之前存放在方法区内,在 JDK1.7 及之后版本,字符串常量池的位置更改到了堆内存中。

2024-02-18 16:56:12 932

原创 【关于forEach的一些问题】

今天使用流对一个需求列表进行分组,分组后得到一个map集合我需要循环着一个map集合,同时需要在循环外初始化一个变量,在循环内累加;代码如下:但是着端代码是存在问题的,直接就编译报错了;因为Lambda表达式中引用的局部变量必须是final或者effectively final的,这里count在Lambda表达式中被赋值,这使得它不再是final或effectively final的,因此编译器会报错;这样编译不再报错,但是运行结果,supplyCount始终 为0,createSupply(

2023-12-19 10:24:41 1153

原创 【redis实现自增流水并设置过期时间】

传递给它,并在Spring应用程序中使用该类来获取自增的两位流水号,并且每分钟重置。命令来实现递增操作。首先,我们根据当前日期和时间生成一个唯一的键,然后使用。如果还有其他问题,请随时提问。如果你需要一个自增的两位流水号,可以使用Redis的。如果递增后的值为1,表示新的一分钟开始了,我们使用。将流水号格式化为两位字符串,并返回生成的流水号。在这个修正后的示例中,我们使用Redis的。方法设置键的过期时间为1分钟。方法对该键的值进行递增操作。命令结合一些逻辑来实现。

2023-10-25 14:48:27 1256

原创 【Java常见的几种设计模式】

简述Java常见的几种设计模式

2023-10-13 10:47:44 265

原创 【给图片添加水印水印】

【代码】【给图片添加水印水印】

2023-07-25 13:37:54 221

原创 自己实现的security

自己实现的security

2022-09-20 11:00:47 121 1

原创 spring Security初体验

security整合

2022-08-29 16:13:08 133

原创 nginx和gateway的区别

gateway与nginx的区别

2022-08-24 18:47:22 5592 1

原创 MQ消息积压问题

消费积压

2022-06-29 13:58:53 351

原创 redis数据类型

五种常见类型:string、hash、list、set、zsetstring大多数场景可以用作缓存,value为json字符串hash购物车(用户ID作为hashKey,商品ID为内层key,商品的简单信息json作为value)listStack(栈) = LPUSH + LPOPQueue(队列) = LPUSH + RPOPBlocking MQ (阻塞队列) = LPUSH + BRPOP(有数据进来才读取,实现类似监听的功能)使用场景:微博消息,公众号消息,使用栈的结构,先进

2022-05-23 17:48:42 85

原创 springcloud-Ribbon

基本用法:注入一个RestTemplate,并使用@loadBalanced注解标注RestTemplate,从而使RestTemplate具备负载均衡的能力。当spring容器启动时,使用#loadBalanced注解修饰RestTemplate会被添加拦截器,拦截器中使用了LoadBalancerClient处理请求,从而达到负载均衡的目的。LoadBalancerClient是springCloud提供的一个非常重要的接口,他继承自ServicelnstanceChoose,该接口实现类是Rib

2022-05-22 21:27:17 211

原创 消息重复问题

在消息传递过程中,如果出现传递失败的情况,发送发会执行重试,重试的过程就又可能会产生重复消息,对使用消息队列的业务系统来说,如果没有对重复消息进行处理,就又可能会导致系统数据出现错误。消费重复的情况是必然存在在MQTT协议中,给出了三种传递消息是提供的服务质量标准,这三种服务质量从低到高依次是:At most once:至多一次;在消息传递时,最多会被送达一次,换一个说法就是,没有什么消息可靠性保证,允许丢消息,一般都是一些对消息可靠性要求不高的监控场景使用,可以接受数据少量丢失。At least

2022-05-20 16:28:29 994

原创 消息的可靠传递

检查是否丢失消息的方法我们可以利用消息队列的有序性来检验是否丢失消息:在producer端,我们给每个消息附加一个连续的递增序号,然后在consumer端来检查这个序号的连续性。如果消息没有丢失,consumer收到消息的序号必然是连续递增的,否则,我们可以通过确实的序号来确定丢失的是哪条消息,方便进一步排查大多数消息队列的客户端序号注入到消息中,在consumer收到消息的拦截器检测序号的连续性,这样不会入侵代码,也方便这部分检测的逻辑关闭或者删除。在分布式环境下需要注意以下这几个问题:首先,像

2022-05-17 16:48:02 188

原创 分布式事务

事务四大特性:1、原子性:事务作为一个整体,要么全部成功要么全部失败2、隔离性:多个事务并发执行时,事务与事务间相互独立,互不影响3、一致性:数据库操作的前后数据要保持一致4、持久性:已经提交的事务对数据库的修该是永久的。为什么要使用分布式事务当一个服务中有多个数据库操作,而且需要调用别的微服务的时候,本地的事务管理器无法管理本项目外的事务;当本项目中出现异常需要回滚时,无法回滚本项目外的事务,这就导致的数据不一致,本质上来说分布式事务就是为了保证数据库的数据一致性;CAP定理C:一致性

2022-05-13 10:38:00 331

原创 几种消息中间件的对比

消息队列的本质是将同步处理结果转换成异步处理,一步会带来相应的好处,但也有弊端。好处:1、可以在模块、服务、接口等不同粒度上实现解耦2、订阅/消费模式可以在数据粒度上解耦3、可提高系统的并发能力,集中力量办大事(同步部分),碎片时间做小时(异步部分)4、可提高系统可用性,因为缓冲了系统负载弊端:1、降低了数据一致性,如要保持强一致性,需要高代价的补偿(如分布式事务,对账)2、有数据丢失风险,如宕机重启,如果要保障队列可用,需要额外机制保障(如双或容灾)总体来说,消息队列的使用场景很多,如秒

2022-05-12 20:57:43 448 1

原创 关于JVM的垃圾回收

堆内存划分:老年代:年轻代:Eden区:Survivor区:(1)From(2)To分配策略1:优先在Eden区分配多数情况下,对象在Eden区分配,当Eden区没有足够空间分配时,虚拟机将发起一次minorGCMinor GC和Full GCMinor GC也称为Young GC 指发生新生代的垃圾收集动作,回收频率较高,回收速度快Full GC也成为了Major GC 一般会回收老年代、年轻代、方法区的垃圾,回收速度比Minor GC慢十倍。分配策略2:大对象直接进入老年代

2022-05-12 10:58:02 113

原创 JVM内存模型

1.类加载器启动类加载器扩展类加载器应用程序类加载器自定义加载器双亲委派模型如果一个类接受到请求,他首先将请求交给父类加载器,直至找到启动类加载器,如果父类加载器加载失败,当前类加载器才会自己加载类。2.运行时数据区线程共享:方法区、堆线程私有:虚拟机栈、本地方法栈、程序计数器3.执行引擎4.本地库接口类加载器将代码转换成字节,然后通过运行时数据区将字节码加载到内存中,执行引擎在内存中将字节码翻译成系统能够执行的命令,交由CPU执行而这个过程需要使用对应语言的本地库接口。...

2022-05-07 11:06:33 194

原创 spring bean 生命周期

1.实例化bean对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入一个尚未初始化的依赖容器会调用createBean进行实例化。对于ApplicationContext容器,当容器启动结束后,便实例化所有的bean,容器通过获取BeanDefinition对象中的信息进行实例化。并且这一步仅仅是简单的实例化,并未进行依赖注入,实例化对象呗包装在BeanWrapper对象中,BeanWrapper提供了设置对象属性的接口,从而避免了使用反射机制.

2022-05-07 10:42:16 71

原创 数据库的事务

A:原子性有undo log日志保证,它记录了需要回滚的日志信息,事物回滚时撤销已经执行成功的sqlC:一致性由其他三大特性保证、程序代码要保证业务上的一致性I:隔离性有MVVC来保证D:持久性由内存+redo log 来保证,MySQL修改数据同时在内存和redo log记录这次操作,宕机的时候可以从redo log恢复InnoDB redo log 写盘,InnoDB事物进入prepare状态,如果前面prepare成功,binlog写盘,再据需将事务日志持久化到binlog,如果持久化成功,

2022-05-05 10:36:34 1094

原创 数据库和缓存数据的一致性问题

1、先更新MySQL,再更新redis,如果更新redis失败,可能仍然不一致2、先删除redis缓存数据,再更新MySQL,再次查询的时候讲数据添加到缓存仲,这种方案解决1方案的问题,但是在高并发下性能比较低,而且仍然会出现数据不一致的问题,比如线程1删除了redis的数据,正在更新MySQL,此时另外一个查询再查询,那么会吧MySQL仲老数据又查到redis中。3、延时双删,步骤是:先删除redis缓存数据,再更新MySQL,延时几百毫秒再删除redis缓存数据,这样就算在更新MySQL时,其他线程

2022-05-05 10:26:19 1373

原创 MySQL锁

按照锁的粒度分类1、行锁:锁某行数据,锁粒度最小,并发度高2、表锁:锁整张表,所粒度最大,并发最低3、间隙锁:锁的是一个区间还可以分为:1、共享锁(读锁):一个事务给某行数据加了读锁,其他事务也可以读,但不能写2、排他锁(写锁):一个事务够某行数据加了写锁,其他事务不能再加读锁,且不能写还可以分为:1、乐观锁:并不会真正的去锁某行记录,而是通过一个版本号来实现2、悲观锁:上面的行锁,表锁都是悲观锁在事务隔离级别实现中,就需要利用锁来解决欢度(Innodb解决了幻读的问题)...

2022-05-05 10:18:40 501

原创 关于MySQL索引的一些总结

基本原理1、把创建了索引的列的内容进行排序2、对排序结果生成倒排表3、在倒排表内容上拼上数据地址4、在查询的时候,先拿到倒排表的内容,在取出数据地址链,从而拿到具体数据;B+树在MySQL中,一个page(页)就等于16KB在查询的时候,每个查询的最小单位是一个pageB+树就是在B树基础上,叶子节点之间多了个指针,结构如下图:索引类型:1.普通索引index :加速查找2.唯一索引主键索引:primary key :加速查找+约束(不为空且唯一)唯一索引:unique:加速查找+

2022-05-04 13:14:05 166

原创 MySQL索引及性能优化

性能下降的表现1.执行时间长2.等待时间长性能下降的原因查询语句写的不好,各种连接,各种子查询导致用不上所以或者没有建立索引建立的索引失效,建立了索引,在真正执行时,没有用上建立的索引管理查询太多join服务器调优及配置参数导致,如果设置的不合理,比例不恰当,也会导致性能下降,sql面man系统架构问题通用的优化方案设计优化:表的设计合理化(符合三大范式,有时候要进行反三大范式)索引优化:添加适当的索引sql优化:写出高质量的sql,避免索引失效架构优化:分表技术,主从复制,

2022-05-04 11:37:10 95

原创 2021-05-30

Spring资源管理Spring资源管理为什么 Spring 不使用 Java 标准资源管理?Java 标准资源管理Java URL 协议扩展基于 java.net.URLStreamHandlerFactory 扩展协议Spring 资源接口资源接口內建实现Spring Resource 接口扩展可写资源接口编码资源接口Spring 资源加载器Resource 加载器Spring 通配路径资源加载器通配路径 ResourceLoader路径匹配器Spring 通配路径资源扩展依赖注入 Spring Res

2021-05-30 20:49:01 106

原创 springboot源码解读

springboot:parent依赖原理起步依赖:spring-boot-starter-parent项目环境属性锁定:spring-boot-dependencies锁定依赖版本:小结:我们的项目继承spring-boot-starter-parent父级的作用是什么从上面可以看出:管理项目的maven插件锁定框架的依赖版本管理springboot配置文件spr...

2020-04-04 22:58:20 183

原创 POI常用API

依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> ...

2020-03-20 20:49:36 1730

原创 Shiro-官方文档及使用

普通web应用官方文档:shiro.iniOnce you choose at least one user store to connect to for Shiro’s needs, we’ll need to configure a Realm that represents that data store and then tell the ShiroSecurityManager a...

2020-03-14 19:16:52 1559

原创 Shiro-Shiro的架构

摘自官网:shiro的架构图:shiro的组成:Authentication:身份认证/登录,验证用户是不是拥有相应的身份;Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;Session Manager:话管理,即用户登录后就是...

2020-03-14 19:05:58 209

原创 springMVC源码解读

web.xml找到前端控制器:DispatcherServlet可以看到底层是HttpServlet,最底层为Servlet,所以我们找service方法找到FrameworkServlet的service要不走父类(HTTPServlet)的service,要不走processRequest方法;我们知道,HTTPServlet最终调用的是doget或者dopost之类的方法,而F...

2020-02-29 22:43:54 189

原创 Redis

Redis持久化:RDB:Redis默认的持久化机制,持久化要满足两个条件,每个多少分钟,和这段时间内修改(包含增删改,下同)了多少次(比如:10秒内修改了1次,满足这个条件就持久化一次),持久化后生成文件:dump.rdb默认有三种持久化方式:save 900 1 :900秒内修改一次save 300 10 :300秒内修改十次save 60 10000 :60秒内修改10...

2020-02-08 20:15:52 134

原创 jQuery的keyCode大全

字母和数字键的键码值(keyCode)按键键码按键键码按键键码按键键码A65J74S83149B66K75T84250C67L76U85351D68M77V86452E69N78W87553F70O79X88654G71P80Y897...

2020-01-20 19:50:37 576

原创 JSP底层探究

首先书写一个jsp页面:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>查...

2020-01-13 21:01:09 104

原创 mybatis缓存

一级缓存:一级缓存在mybatis是默认开启的;一级缓存的作用范围只在会话级别,即会话死亡,缓存也会跟着清空缓存清空的时机:执行添加,修改,删除,提交,关闭会话等操作会情况SQLSession张红的一级缓存数据;注:当没有配置连接池的时候,同一个会话里面查询两次才会使用一级缓存,这样就显得比较鸡肋但是当我们配置了线程池以后,连接池中有一定数量的常驻会话,这些会话是会循环使用不会关闭的...

2020-01-09 20:18:47 112

原创 mybatis框架的简单实现

本mybatis只是简单实现,实现mybatis的一部分核心功能。思路:解析配置文件,得到数据库配置及mapper相关信息创建实体类封装解析到的数据通过动态代理执行sql语句mapper实体类封装UserMapper.xml的数据:package com.zhijin.framwork;public class Mapper { private String id ;...

2019-12-29 22:51:11 85

原创 网络编程

UDPUDP协议的特点面向无连接的协议发送端只管发送,不确认对方是否能收到。基于数据包进行数据传输。发送数据的包的大小限制64KB以内因为面向无连接,速度快,但是不可靠。会丢失数据!UDP协议的使用场景:在线视频,网络语音等UDP协议相关的两个类DatagramPacket:数据包对象作用:用来封装要发送或要接收的数据,比如:集装箱DatagramSocket:发送对象...

2019-12-19 21:30:40 101

原创 注解

自定义注解格式:@interface 注解名 {}注解属性:属性的格式(适用八种数据类型和String类型)格式1:数据类型 属性名();格式2:数据类型 属性名() default 默认值;注解可以有属性,属性名必须带()在用注解的时候,属性必须赋值,除非这个属性有默认值!!value属性,如果只有一个value属性的情况下,使用value属性的时候可以省略value名称不写...

2019-12-19 21:09:38 94

空空如也

空空如也

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

TA关注的人

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