自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(377)
  • 资源 (1)
  • 收藏
  • 关注

转载 深入挖掘 FST 快速序列化压缩内存的利器的特性和原理

FST 序列化全称是 Fast Serialization Tool,它是对 Java 序列化的替换实现。JDK 提供的序列化提升了 10 倍,体积也减少 3-4 倍多支持堆外 Maps,和堆外 Maps 的持久化支持序列化为 JSON。

2024-04-11 02:35:05 27

转载 Dubbo Serialize 层的多种序列化算法

在本课时,我们首先介绍了 Java 序列化的基础知识,帮助你快速了解序列化和反序列化的基本概念。然后,介绍了常见的序列化算法,例如,Arvo、Fastjson、Fst、Kryo、Hessian、Protobuf 等。最后,深入分析了 dubbo-serialization 模块对各个序列化算法的接入方式,其中重点说明了 Hessian2 序列化方式。

2024-04-11 01:52:29 20

转载 应用技术架构 —— 单体架构 & 垂直架构 & SOA 架构

数字化 IT 从业者知识体系》的初衷是为 IT 从业者提供的系统性的数字化知识体系,内容涵盖管理实践、工程实践、技术实践三个层次,涉及软件开发方法、应用技术架构、应用部署与管理、软件交付与协作四大方面。随着互联网的出现和发展,软件用户的数量的急剧增长,应用的用户规模指数级增长,具有海量用户的应用变得普遍。1968 年的软件危机产生了软件工程,并且催生了面向对象的高级语言,例如 1972 的 C 语言,同时产生了我们的单体式的技术架构,单体架构的特点是所有代码逻辑都耦合在一个项目中。

2024-04-07 18:46:50 23

转载 业务架构模式的演进(单体架构、垂直架构、SOA架构、微服务架构)

面向服务架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。这个概念有些难理解,我们可以从垂直架构的不足来理解SOA架构做了什么。同样都是对系统进行拆分,SOA在垂直架构的基础上,抽离出重叠的功能作为公共的服务,来解决重复造轮子的问题。

2024-04-07 18:45:06 20

转载 【进阶篇】Redis实战之Redisson使用技巧详解,干活!

ps:创建 RedissonClient 对象实例的方式多钟多样,可以直接通过在代码中设置 Redis 服务的相关参数创建,也可以通过加载 JSON 格式、 YAML 格式或者 Spring XML 配置文件来创建,详细的参数配置可用移步上文提到的 Redisson 开发文档。但是两者并没有进一步深化,只给了你操作 Redis 数据库的工具,而 Redisson 则是基于 Redis、Lua 和 Netty 建立起了一套的分布式解决方案,比如分布式锁的实现,分布式对象的操作等等。

2024-03-31 00:49:12 132

转载 【有料】@Transactional 竟也能解决分布式事务?

Spring的本地事务大家都很了解,也经常用,并不支持的跨库事务,那么为什么Sharding-JDBC中却能支持呢?,因此在非硬件、网络的情况下都是可以正常回滚的,一旦因为网络、硬件故障,可能导致某个数据源。)是无法保证跨库的分布式事务,不要被Sharding-JDBC的假象迷惑了。此时很多人都迷糊了,Sharding-JDBC中的本地事务真的是可以保证。拆分成对应数据源的SQL,然后在不同数据源中的执行,最终会提交或者回滚。,这个类就不必多解释了,在学习JDBC的时候应该都有所接触,直接和。

2024-01-05 17:11:38 132

转载 【有料】mysql中B+Tree和B-Tree的区别

由于B+树的非叶节点不存放实际数据,因此每一节点所能容纳的元素数量比B-树多,树高比B-树小,其优点是减少了磁盘的访问次数。虽然B+树找到记录所需的比较次数比B-树多,但一次磁盘访问的时间相当于数百次内存比较的时间,所以实际上B+树的性能可能会更好,而B+树的叶节点也可以用指针连接在一起,方便顺序遍历(例如查看一个目录下的所有文件,一次磁盘访问的所有。而B+树中每一个记录的查找时间基本相同,都需要从根节点到叶节点,并且在叶节点中再比较一下关键字。在这一点上,B-树的性能似乎比B+树好,

2024-01-03 10:06:36 316

转载 Spring-AOP-基于注解的AOP通知执行顺序

通知的选取规则五大通知类型中,环绕通知功能最为强大,因为。如果需要记录异常信息,使用异常通知。其他通知,只能做记录工作,不能做处理,所以执行顺序其实对整个程序影响不大,没有必要太深究。

2023-11-28 19:23:18 515

转载 多种方法解决java.util.NoSuchElementException:java.util.NoSuchElementException: No value present error in j

你学到了多种方法来解决java8流中的错误。转自:https://juejin.cn/post/7131915267398975519。

2023-11-19 04:08:05 3554

转载 redis cluster集群管理工具redis-trib.rb命令小结-运维笔记

设置了--master-id,则以该节点作为新节点的master,如果没有设置--master-id,则调用get_master_with_least_replicas方法,寻找slave数量最少的master节点。没有传递–weight的节点的权重默认为1。--from :需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递--from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入。

2023-11-16 01:29:26 330

转载 【有料】dubbo负载均衡之RoundRobin

承接上文,本文继续来看dubbo的加权RoundRobin负载均衡策略。可以看到,上面的策略能够一定程度上保证请求不会持续打在一个节点上,相对平均。dubbo的RoundRobin其实参考了nginx的负载均衡,逻辑类似,下面来看下dubbo的实现。那么,有没有一种方式,可以让请求平均但不连续的打到某一个节点?考虑有三个节点 A(5)、B(1)、C(1),括号内是该节点的服务负载能力,假设有10个请求(R),下面是普通RoundRobin的做法。注:参考 dubbo源码版本 2.7.1,欢迎指正。

2023-11-08 12:34:19 120

转载 RPC框架:从原理到选型,一文带你搞懂RPC

而 Spring Cloud 就像品牌机,在 Spring Source 的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外的东西,就需要对其基础有足够的了解。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。Spring Cloud 基于 Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。

2023-10-19 17:26:03 1950

转载 【有料】Spring IoC实现原理(附思维导图)

这里,再次做一个知识点的总结:IoC 是一种概念和设计思想,Guice,Spring,Jboss都实现了这种理念,Spring将其发扬光大Spring IoC 容器实现基于反射技术IoC 的3种类型,Spring IOC 支持2种,构造函数注入和属性注入Spring 容器工厂分为两种:ApplicationContext、BeanFactory。异同点:1. BeanFactory 在启动的时候不会去实例化 Bean,ApplicationContext 在启动的时候会。

2023-10-17 11:17:30 126

转载 【有料】面试必杀技,讲一讲Spring中的循环依赖

Spring中的循环依赖一直是Spring中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到Spring中比较高阶的问题,那么循环依赖必定逃不掉。如果你回答得好,那么这就是你的必杀技,反正,那就是面试官的必杀技,这也是取这个标题的原因,当然,本文的目的是为了让你在之后的所有面试中能多一个必杀技,专门用来绝杀面试官!本文的核心思想就是,当面试官问:“请讲一讲Spring中的循环依赖。”的时候,我们到底该怎么回答?主要分下面几点什么是循环依赖?

2023-10-15 03:35:27 69

转载 程序员必备基础:加签验签

A公司这边的商户,发起转账时,A公司先用C公司的公钥,对请求报文加密,加密报文到达C公司的转账系统时,C公司就用自己的私钥把报文揭开。假设在加密的报文在传输过程中,被中间人Actor获取了,他也郁闷,因为他没有私钥,看着天鹅肉,又吃不了。本来想修改报文,给自己账号转一个亿的,哈哈。A在发起转账时,用Actor的公钥,对请求报文加密,加密报文到在传输过程,Actor又截取了,这时候,他用自己的私钥解密,然后修改了报文(给自己转一个亿),再用C的公钥加密,发给C公司,C公司收到报文后,继续用自己的私钥解密。

2023-10-10 11:13:27 912

转载 【有料】一口气说出前后端 10 种鉴权方案~

最经典的莫过于 APP 内嵌 H5 的使用场景,当用户从 APP 进入内嵌的 H5 时,我们希望 APP 内已登录的用户能够访问到 H5 内受限的资源,而未登录的用户则需要登录后访问。短信验证码的作用就是证明当前操作页面的用户与输入手机号的用户为相同的人,那么实际上只要我们能够获取到当前手机使用的手机卡号,直接使用这个号码进行登录,不需要额外的操作,这就是。对于两个网站 A 和 B,在登录 A 网站的时候用 B 网站的帐号密码,就是联合登录,或者登录 B 网站的时候使用 A 网站的帐号密码,也是联合登录。

2023-09-25 12:41:21 232

转载 【有料】类的静态变量和静态方法能否被子类继承?

如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情况。3). 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。//结果同上,输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和静态方法可以被继承。//输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和静态方法可以被继承。

2023-08-13 03:33:28 880

转载 【有料】JDK动态代理和CGLib动态代理的对比

JDK动态代理类实现了InvocationHandler接口,重写的invoke方法。JDK动态代理的基础是反射机制(method.invoke(对象,参数))Proxy.newProxyInstance()。

2023-07-14 19:46:17 133

转载 常见缓存问题处理-缓存热点key

希望通过本文,大家明白如何处理生产上遇到的热key问题。

2023-06-13 01:31:02 492

转载 【有料】面试官再问我如何保证 RocketMQ 不丢失消息,这回我笑了!

看完 RocketMQ 不丢消息处理办法,回头再看这篇kafka,有没有发现,两者解决思路是一样的,区别就是参数配置不一样而已。所以下一次,面试官再问你 XX 消息队列如何保证不丢消息?如果你没用过这个消息队列,也不要哭,微笑面对他,从容给他分析那几步会丢失,然后大致解决思路。最后我们还可以说出我们的思考,虽然提高消息可靠性,但是可能导致消息重发,重复消费。所以对于消费客户端,需要注意保证幂等性。但是要注意了,这时面试官可能就会跟你的话题,让你来聊聊如何保证幂等性,一定先想好再说哦。什么?

2023-06-12 01:41:36 339

转载 【有料】分布式服务限流实战,已经为你排好坑了

可以看到,在 0.1 秒内请求的 30 次请求中,除了初始的 10 个令牌以及随时间恢复的 1 个令牌外,剩下 19 个没有取得令牌的请求均返回了 false,限流脚本正确的将超过限制的请求给判断出来了,业务中此时就可以直接返回系统繁忙或接口请求太过频繁等提示。但实际上我们可以通过对限流两次请求之间的时间和令牌添加速度来计算得出上次请求之后到本次请求时,令牌桶应添加的令牌数量。生成的令牌放入令牌桶中存放,如果令牌桶满了则多余的令牌会直接丢弃,当请求到达时,会尝试从令牌桶中取令牌,取到了令牌的请求可以执行;

2023-05-31 19:29:11 179

转载 Github点赞接近100k的SpringBoot学习教程+实战推荐!牛批!

前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。然后,vhr(微人事)这个项目的话,是一个前后端分离的人力资源管理系统,后端基于 SpringBoot 开发,前端基于 Vue 开发,并且,项目加入常见的企业级应用所涉及到的技术点,例如 Redis、RabbitMQ 等。基于 Spring Boot 2.X 的开源项目。

2023-05-26 15:30:52 352

转载 Spring Ioc 实例化 Bean 对象有几种方式?

当我们指定Spring使用静态工厂方法来创建Bean实例时,Spring将先解析配置文件,并根据配置文件指定的信息,**通过反射调用静态工厂类的静态工厂方法,并将该静态工厂方法的返回值作为Bean实例,**在这个过程中,Spring不再负责创建Bean实例,方式二:利用静态factory方法创建,可以统一管理各个bean的创建,如各个bean在创建之前需要相同的初始化处理,则可用这个factory方法先进行统一的处理等等。1、可用于集成其他框架的bean创建管理方法。GoodsService实体类。

2023-05-25 16:38:34 59

转载 【略有料】BeanFactory 简介以及它 和FactoryBean的区别(阿里面试)

以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean接口的Bean,根据该Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FactoryBean本身,如果要获取FactoryBean对象,请在id前面加一个&符号来获取。存在的问题:层与层之间的依赖。service层要用dao层对象需要配置到xml配置文件中,至于对象是怎么创建的,关系是怎么组合的都交给了spring框架去实现。

2023-05-20 01:53:55 589

转载 mysql中utf8和utf8mb4区别

对于表行格式是 COMPACT或 REDUNDANT,InnoDB有单个索引最大字节数 768 的限制,而字段定义的是能存储的字符数,比如 VARCHAR(200) 代表能够存200个汉字,索引定义是字符集类型最大长度算的,即 utf8 maxbytes=3, utf8mb4 maxbytes=4,算下来utf8和utf8mb4两种情况的索引长度分别为600 bytes和800bytes,后者超过了768,导致出错:Error 1071: Specified key was too long;

2023-05-11 19:52:16 931

转载 【有料】一文看懂MySQL的异步复制、全同步复制与半同步复制

(3) Master服务器接收到来自Slave服务器的IO线程的请求后,其上负责复制的IO线程会根据Slave服务器的IO线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的IO线程。MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从库上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。

2023-05-11 17:20:15 581

转载 【有料】MySQL的死锁系列- 锁的类型以及加锁原理

疫情期间在家工作时,同事使用了 insert into on duplicate key update 语句进行插入去重,但是在测试过程中发生了死锁现象:由于开发任务紧急,只是暂时规避了一下,但是对触发死锁的原因和相关原理不甚了解,于是这几天一直在查阅相关资料,总结出一个系列文章供大家参考,本篇是上篇,主要介绍 MySQL 加锁原理和锁的不同模式或类型的基本知识。后续会讲解常见语句的加锁情况和通过 MySQL 死锁日志分析死锁原因。

2023-05-11 02:41:05 162

转载 【有料】面试准备 -- Redis 跳跃表

如下,我们遍历了 level 3 后,记录下当前处在 5 这个节点,那接下来遍历是 5 往后走,发现 100 大于目标 66,所以还是继续下沉。跳跃表的查询是从顶层往下找,那么会先从第顶层开始找,方式就是循环比较,如过顶层节点的下一个节点为空说明到达末尾,会跳到第二层,继续遍历,直到找到对应节点。当然,跳跃表的修改,也是和删除查找类似,只不过是将值修改罢了,就不继续介绍了。跳跃表的删除和查找类似,都是一级一级找到相对应的节点,然后将 next 对象指向下下个节点,完全和链表类似。

2023-05-10 17:12:47 265

转载 【有料】Raft协议实战之Redis Sentinel的选举Leader源码解析

Raft协议是用来解决分布式系统一致性问题的协议,在很长一段时间,Paxos被认为是解决分布式系统一致性的代名词。但是Paxos难于理解,更难以实现,诸如Google大牛们开发的分布式锁系统Chubby都遭遇了很多坑。Raft协议设计的初衷就是容易实现,保证对于普遍的人群都可以十分舒适容易的去理解。另外,它必须能够让人形成直观的认识,这样系统的构建者才能够在现实中进行必然的扩展。本文从Redis Sentinel集群选择Leader的具体流程和源码分析,描述Raft协议中的选举Leader算法。

2023-05-10 16:59:41 525

转载 【有料】Java NIO - 基础详解

新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O 的不足,提供了高速的、面向块的 I/O。Standard IO是对字节流的读写,在进行IO之前,首先创建一个流对象,流对象进行读写操作都是按字节 ,一个字节一个字节的来读或写。而NIO把IO抽象成块,类似磁盘的读写,每次IO操作的单位都是一个块,块被读入内存之后就是一个byte[],NIO一次可以读或写多个字节。

2023-05-05 01:09:08 89

转载 【有料】Linux IO模式及 select、poll、epoll详解

blocking和non-blocking的区别调用blocking IO会一直block住对应的进程直到操作完成,而non-blocking IO在kernel还准备数据的情况下会立刻返回。synchronous IO和asynchronous IO的区别在说明synchronous IO和asynchronous IO的区别之前,需要先给出两者的定义。POSIX的定义是这样子的:两者的区别就在于synchronous IO做”IO operation”的时候会将process阻塞。

2023-05-05 00:55:49 248

转载 【有料】HashMap之resize详解

经过上期分享, 我们都知道HashMap在构建初始是可以指定table(hash槽)的长度的, 假设我们设定了2, 这时候有10万数据要插入, 最好的情况就是两边各是5万, 最差的情况就是一边是10万, 显然这个时候hash冲突已经很严重了, 为了解决冲突, 我们就需要对table进行扩容, 所以HashMap的扩容就是加长table的长度, 来减少hash冲突的概率;根据统计学的结果, hash冲突是符合泊松分布的, 而冲突概率最小的是在7-8之间, 都小于百万分之一了;这就悲剧了, 在循环里出不去了;

2023-04-26 17:29:25 411

转载 为什么HashMap的长度是2的整数次幂?

不过你说的是解释了源码右移背后的意义,没说为什么选择2^n, 其实你就只差一步了: 正是因为hash值就是要用低位的信息,那么结合&操作,&的另一个数最好低位全是1,这样&才有意义;,length-1 为奇数,奇数的二进制最后一位是 1,这样便保证了 hash &(length-1) 的最后一位可能为 0,也可能为 1(这取决于 h 的值),即 & 运算后的结果可能为偶数,也可能为奇数,因此,length 取 2 的整数次幂,是为了使不同 hash 值发生碰撞的概率较小,这样就能使元素在哈希表中。

2023-04-26 01:08:01 82

转载 30分钟学会UML类图

UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作。一般说来,在UML图中,只要掌握类图、用例图、时序图的使用,就能完成大部分的工作。也就是说,掌握UML的20%,就能做80%的事情。对于程序员来说,最频繁使用的莫过于类图。因此,这里我们只讲解UML类图。至于其它UML图,请在以后的工作中参阅更多UML学习资料继续学习。类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。

2023-04-18 20:52:56 586

转载 图解GC流程

我们应当知道,新创建的对象一般会被分配在新生代中。常用的新生代的垃圾回收器是 ParNew 垃圾回收器,它按照 8:1:1 将新生代分成 Eden 区,以及两个 Survivor 区。某一时刻,我们创建的对象将 Eden 区全部挤满,这个对象就是「挤满新生代的最后一个对象」。此时,Minor GC 就触发了。

2023-04-18 00:31:10 131

转载 【有料】面试官:来!聊聊线程池的实现原理以及使用时的问题

无论是在工作中,还是在书本中,我们都可以听到或者看到关于线程在使用时的一些建议:不要在代码中自己直接创建线程,而是通过线程池的方式来使用线程。使用线程池的理由大致可以总结为以下几点。1.降低资源消耗。线程是操作系统十分宝贵的资源,当多个人同时开发一个项目时,在互不知情的情况下,都自己在代码中创建了线程,这样就会导致线程数过多,而且线程的创建和销毁,在操作系统层面,需要由用户态切换到内核态,这是一个费时费力的过程。而使用线程池可以避免频繁的创建线程和销毁线程,线程池中线程可以重复使用。2.提高响应速度。

2023-04-16 17:22:06 158

转载 BFF 模式:微服务前端数据加载的最佳实践?

BFF 模式不仅有助于开发,而且有助于极大地改善用户体验。因此,在保持 BFF 专注于其前端的同时,考虑数据优化和聚合是非常重要的。此外,如果你以前没有使用过 BFF 模式,现在是时候开始了。延伸阅读BFF模式:微服务前端数据加载的最佳实践?_前端_Viduni Wickramarachchi_InfoQ精选文章。

2023-04-11 00:31:26 306

转载 【有料】BFF到底是什么?

当你发现相同业务的不同前端应用,通过API获取到数据后请求多个接口,或转换或过滤了一些响应数据,或都进行了相同的基于结果数据的进一步计算,此时,你需要考虑把这些代码迁移到BFF。一个BFF可以对接多个前端应用,取决于前端应用需求的相似度,如,相同业务不同平台(Android、iOS)的App。前面已经说了,BFF是后端的前端,既然他不是处于整个系统的底层,他有自己的后端,所以,一般BFF不应当包含数据库的操作。8、控制:BFF应当有能力根据前端应用的性质不同,控制哪些数据应当或不应该提供给哪个应用。

2023-04-11 00:25:51 582

转载 参数校验Spring的@Valid注解用法详解

现在员工对象 Employee 就 2 个字段,我们就写了 10 多行的代码验证,要是有20个字段,岂不是要写 100 多行代码?但这种方式只是抽了一个方法,有一种换汤不换药的感觉,虽然业务方法看起来清爽了很多,但书写代码量并没有下降,反而还多出了一个方法。然后再 Controller 对应方法上,对这个员工标上 @Valid 注解,表示我们对这个对象属性需要进行验证。如果你是 springboot 项目,那么可以不用引入了,已经引入了,他就存在于最核心的 web 开发包里面。

2023-04-07 11:46:41 293

转载 spring笔记-AnnotationAttributes

通常对注解的解析之后,需要对注解的信息进行对象存储转换,比如EnableMongoRepositories注解,有13个属性,如下定义。

2023-04-07 11:42:36 325

quartusII 8.1 破解软件

专门用于quartus II 破解,一键破解,永久使用,yes

2014-05-11

空空如也

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

TA关注的人

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