自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

二缺和傻宝宝的博客

互相学习 共同进步

  • 博客(106)
  • 收藏
  • 关注

原创 线程中断是怎么回事

线程中常用的阻塞方法,如sleep,join和wait 都会响应中断,然后抛出一个中断异常 InterruptedException。所以,当我们捕获到中断异常之后,应该保留中断信息,以便让上层代码知道当前线程中断了。当调用interrupt方法时,会把中断状态设置为true,然后park方法会去判断中断状态,如果为true,就直接返回,然后往下继续执行,并不会抛出异常。注意,这里并不会清除中断标志。park方法可以阻塞当前线程,如果调用unpark方法或者中断当前线程,则会从park方法中返回。

2023-07-21 15:22:34 147

原创 spring三级缓存总结

其实说到spring的三级缓存,也是经常被提到,自己也看过对应的源码,但是,总觉得自己还是没有真正的理解,为什么这样说呢,因为每次看到三级缓存相关的技术问题,自己心里感觉还是迷糊的,不知道为什么要有三级缓存,一级缓存不行吗,二级缓存是干啥的,以及和三级缓存的区别等,这些问题自己还是回答不出来,这样的情况其实还是对于知识的一知半解,并且缺乏总结如果想理解设计的原理,你可以把自己当作spring的设计者,遇到循环依赖的时候,应该怎么解决。

2023-07-17 22:21:34 340

原创 函数式编程总结与应用

函数式编程的总结和应用

2022-08-14 18:06:48 372 1

原创 编程思想重新理解

编程思想的重新理解

2022-08-14 15:52:14 251

原创 redis的事件机制

Redis的事件驱动程序

2022-07-10 21:19:33 594

原创 关于内存分析的一些解释和总结

关于mat工具比如如下的图片,分析时候很常见:刚看到这个类型的图片,不知道大家清不清楚各个颜色区域的含义,详情请参考这篇文章,对Actions的详细说明,左下角有一个说明,Retained Size,它代表的含义是:当实例A被回收时, 可以同时被回收的实例的Shallow Size之和;详细的可以参考这篇文章:Shallow Size和Retained Size详解with outgoing references——对象引用了哪些对象with incoming references——对象被哪

2021-10-31 00:59:11 200

原创 线上服务器内存优化(一)

在上篇文章<线上服务器内存不断飙升定位>基础上继续进行,问题定位到了,那就开始优化,本地缓存+线程池合理使用两大块;本地缓存已经在上篇文章说明了<项目中如何整合本地缓存>,改造上线后,在内存高的情况下,再次dump了内存快快照,发现内存泄露的情况好很多但是我还是发现一个现象就是每次服务器重启,内存都是一个直线上升的状态,直接先飙到快60%,然后才稳定下来,慢慢再增加这就很纳闷了,思考呗,啥原因导致的,边查资料边动手试一下;登录线上服务器,jmap -heap 17,执行命令

2021-10-30 17:35:43 242

原创 项目中如何整合本地缓存

前言关于springboot整合缓存分析可以参考之前的一篇文章(https://blog.csdn.net/buyaoshuohua1/article/details/119843101);这次主要是分析如果整合本地缓存,比如cafe,其实这个也不麻烦,网上的案例很多,这里说一下结合项目整合时候遇到的问题,因为项目中已经使用redis作为缓存,引入redis依赖。<!-- redis 配置--> <dependency> <grou

2021-10-24 00:03:10 181

原创 线上服务器内存不断飙升定位

前言线上服务应用,4核8G的配置,在之前没有配置GC参数的时候,默认是jdk8的并发垃圾回收(JDK8中默认使用组合是: Parallel Scavenge GC 、ParallelOld GC),堆的分配参数也不太合理,这里就不细说了,导致重启后两三天,内存就超过80%,就会收到报警,不胜其烦。优化历程第一次优化:先优化jvm参数配置,可以参考如下网址,在上边填写好服务器信息和日志的路径后,就能生成JVM参数,可以一用;????:https://account.heapdump.cn/配置如

2021-09-26 22:51:43 1165

原创 gc日志简单分析

前言gc日志的分析还是可以看出系统的一些问题,吞吐量,gc暂停时间,年轻代和年老代的分配比例等,其中吞吐量和暂停时间是两个比较重要的指标,接下来,我们来简单演示下,随着jvm参数的变化,gc的一些情况。准备工作JMeter工具下载 http://jmeter.apache.org/download_jmeter.cgigc在线分析工具 https://gceasy.io/本地启动一个tomcat 可以访问一个demo,并找到catalina.sh,分别添加如下jvm参数,进行验证过程

2021-09-25 17:36:39 391 1

原创 代码重构之去掉if-else判断

前言最近在对接一个业务功能,用到了前人写的代码功能点,需要在上边做功能,之前的写法就是if-else的判断,已经有四个这样的判断,而我这次的功能,如果要在之前的基础上继续开发的话,需要再加两个if-else判断,这样开发起来是快,但是凭着好的习惯来说,我还是想把这块代码重构下,方便后续代码的可读性和可扩展性。其实去掉if-else这样的写法,一定是有个前提的,就是代码已经有点堆砌,并且随着后续业务的发展,还有可能继续增加,在这样的前提下就需要考虑进行代码重构了。至于重构方式,其实是通用的,基本上就是

2021-09-25 00:20:30 416

原创 代码重构之枚举使用(策略模式思想)

前言目前项目是为服务的架构,进行业务的拆分,但是服务之间的交互使用的是http->RestTemplate的方式,这样的方式就没办法像rpc那样通过接口的方式进行直接调用,这个需要单独对调用的地址路径进行定义。比如订单的创建方法url:http://域名/模块名/order/create(http://order-provider/order-api/stock/sub),库存的扣减方法url:http://域名/模块名/order/create(http://stock-provider/st

2021-08-29 14:34:22 223

原创 Spring cache缓存应用与总结

前言现在项目中大家基本都会使用到缓存,本地缓存,Spring引入缓存,或者是直接使用三方缓存的API进行缓存的操作,基本离不开这三种,如果项目没有使用springboot的话,有些配置还需要自己手动去引入,因为没有与Spring进行自动集成,今天我们讨论的是在springboot的基础上进行缓存的使用,以redis和Spring默认缓存为例进行说明Spring的缓存抽象Spring Cache 只负责维护抽象层,具体的实现由自己的技术选型来决定,将缓存处理和缓存技术解除耦合。使用Spring缓存

2021-08-21 21:31:24 1496

原创 Eureka核⼼源码剖析6--Eureka Client下架服务

具体实现方法:com.netflix.discovery.DiscoveryClient#shutdowncom.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient#cancel

2021-08-16 23:40:11 77

原创 Eureka核⼼源码剖析5--Eureka Client注册服务和刷新缓存,心跳续约

启动过程:Eureka客户端在启动时也会装载很多配置类,我们通过spring-cloud-netflix-eureka-client-2.1.0.RELEASE.jar下的spring.factories⽂件可以看到加载的配置类引⼊jar就会被⾃动装配,分析EurekaClientAutoConfiguration类头如果不想作为客户端,可以设置eureka.client.enabled=false回到主配置类EurekaClientAutoConfiguration思考:EurekaClient启

2021-08-16 23:31:32 168

原创 Eureka核⼼源码剖析4 - Eureka Server服务续约接⼝(接受客户端续约)

InstanceResource的renewLease⽅法中完成客户端的⼼跳(续约)处理,关键代码:registry.renew(app.getName(), id, isFromReplicaNode);com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl#renewreplicateInstanceActionsToPeers() 复制Instance实例操作到其它节点 private void replicateInstanceAc

2021-08-15 03:10:54 115

原创 Eureka核⼼源码剖析3 - Eureka Server服务注册接⼝(接受客户端注册服务)

ApplicationResource类的addInstance()⽅法中代码:registry.register(info, “true”.equals(isReplication));com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl#register - 注册服务信息并同步到其它Eureka节点PeerAwareInstanceRegistryImpl#replicateToPeers() :复制到Eureka对等节点Pee

2021-08-15 01:37:21 78

原创 Eureka核⼼源码剖析2-Eureka Server服务接⼝暴露策略

在Eureka Server启动过程中主配置类注册了Jersey框架(是⼀个发布restful⻛格接⼝的框架,类似于我们的springmvc)org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration#jerseyFilterRegistration注⼊的Jersey细节扫描classpath下的那些packages呢?已经定义好了对外提供的接⼝服务,在Jersey中叫做资源,扫描的包在core里边

2021-08-14 18:48:15 132

原创 Eureka核⼼源码剖析1-Eureka Server启动过程

⼊⼝:SpringCloud充分利⽤了SpringBoot的⾃动装配的特点观察eureka-server的jar包,发现在META-INF下⾯有配置⽂件spring.factoriesspringboot应⽤启动时会加载EurekaServerAutoConfiguration⾃动配置类。EurekaServerAutoConfiguration类⾸先观察类头分析图中的 1)需要有⼀个marker bean,才能装配Eureka Server,那么这个marker 其实是由@EnableEure

2021-08-14 18:28:13 87

原创 Eureka是干什么的?

Eureka是干什么的?前言:之所以写这篇文章,第一个原因是刚入职的这家新公司,里边使用到了这个组件,但是却没有真正的推广开,还在摸索探讨阶段,自己之前学习springCloud的时候,有学习过相关内容,但是没有去总结一下,以至于现在你问Eureka是干嘛的,除了知道这个是个注册中心,其他的好像都是空白了,这样的感觉不太好。。。注册中心前言里边提到过Eureka是用于注册中心的,那么注册中心的作用又主要是干什么的?注册中心的本质是为了接耦服务提供者和服务消费者。透明化路由分布式微服务架构中,

2021-08-12 00:27:32 15155

原创 手写实现一致性Hash算法

普通Hash算法实现/** * 普通Hash算法实现 */public class GeneralHash { public static void main(String[] args) { // 定义客户端IP String[] clients = new String[]{"10.78.12.3","113.25.63.1","126.12.3.8"}; // 定义服务器数量 int serverCount = 5.

2020-11-14 16:18:06 356

转载 zk和eureka的区别(不错)

首先,一项技术被发布出来,被广泛应用,肯定是有道理的,一定有它适合的场景,zk保证的是一致性和分区容错性,eureka保证的是可用性和分区容错性.分析一下zk做注册中心的场景zk在生产环境中,如果master宕机,需要时间进行选举(据说30s~120s以上),在此期间是不能提供服务的注册和发现的(但是好像可以走dubbo的本地缓存,做到服务之间的通讯),这一点是忍不了吧,毕竟你干的就是服务发现的活啊.出现网络分隔的问题,各个zk节点彼此都不能发现对方,zk集群就会GG了,还是忍不了吧分析一下Eu

2020-09-02 00:22:11 944

转载 transfer-encoding:chunked的含义

通常,HTTP协议中使用Content-Length这个头来告知数据的长度。然后,在数据下行的过程中,Content-Length的方式要预先在服务器中缓存所有数据,然后所有数据再一股脑儿地发给客户端。如果要一边产生数据,一边发给客户端,WEB 服务器就需要使用"Transfer-Encoding: chunked"这样的方式来代替Content-Length。(不让服务器返回Transfer-Encoding:chunked,在客户端请求的时候可以使用http 1.0的协议。)Transfer-..

2020-09-02 00:03:15 787

原创 算法之字符串案例

子串查找(字符串匹配)首先,我们来定义两个概念,主串和模式串。我们在字符串 A 中查找字符串 B,则 A 就是主串,B 就是模式串。我们把主串的长度记为 n,模式串长度记为 m。由于是在主串中查找模式串,因此,主串的长度肯定比模式串长,n>m。因此,字符串匹配算法的时间复杂度就是 n 和 m 的函数。假设要从主串 s = “goodgoogle” 中找到 t = “google” 子串这种匹配算法需要从主串中找到跟模式串的第 1 个字符相等的位置,然后再去匹配后续字符是否与模式串相等。显然,从.

2020-08-12 23:02:20 682

原创 算法之数组的案例

例题,假设数组存储了 5 个评委对 1 个运动员的打分,且每个评委的打分都不相等。现在需要你:用数组按照连续顺序保存,去掉一个最高分和一个最低分后的 3 个打分样本;计算这 3 个样本的平均分并打印。要求是,不允许再开辟 O(n) 空间复杂度的复杂数据结构。我们先分析一下题目:第一个问题,要输出删除最高分和最低分后的样本,而且要求是不允许再开辟复杂空间。因此,我们只能在原数组中找到最大值和最小值并删除。第二个问题,基于删除后得到的数组,计算平均值。实现代码如下:pub..

2020-08-11 23:13:10 125

原创 算法练习之约瑟夫环

约瑟夫环是一个数学的应用问题,具体为,已知 n 个人(以编号 1,2,3…n 分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到 m 的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。这个问题的输入变量就是 n 和 m,即 n 个人和数到 m 的出列的人。输出的结果,就是 n 个人出列的顺序。这个问题,用队列的方法实现是个不错的选择。它的结果就是出列的顺序,恰好满足队列对处理顺序敏感的前提。因此,求解方式也是基于队列的先进先出.

2020-08-11 23:06:39 146

原创 TP50、TP90、TP99、TP999简易理解

TP50、TP90、TP99、TP999TP(Top Percentile)Top百分数,是一个统计学的术语,与平均数、中位数一样。是不是看着这句话很眼熟?在网上看了很多帖子,是这样解释这些指标的:TP50:满足百分之五十的网络请求所需的最低耗时。TP90:满足百分之九十的网络请求所需的最低耗时。TP99:满足百分之九十九的网络请求所需的最低耗时。TP999:满足千分之九百九十九的网络请求所需的最低耗时。例子例子大概是这样写的:有四次请求耗时分别为:10ms,1000ms,100m

2020-08-10 23:35:24 7220

原创 随笔小记

select count(1)判断数据是否存在优化业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下:##### SQL写法:SELECT count(*) FROM table WHERE a = 1 AND b = 2##### Java写法:int nums = xxDao.countXxxxByXxx(params);if ( nums > 0 ) { //当存在时,执行这里的代码} else { //当不存在时,执

2020-07-26 19:04:32 101

转载 端口访问被拒绝的解决方案

问题描述:比如在本机telent到192.168.8.170 主机的9000 端口,被拒绝。[zhu@hadoop log]$ telnet 192.168.8.170 9000Trying 192.168.8.170…telnet: connect to address 192.168.8.170: Connection refused 原因:原因有两个● 一个是被防火墙拦截● 或者该端口的监听地址为本机(127.0.0.1),如果这样的话,只有从本机发起的对端口的访问被允许,而外部主机访问被

2020-07-25 22:46:00 13228

原创 并发情况下保持逻辑的顺序性

并发情况下保持逻辑的顺序性在日常开发中,经常会使用到异步消息去处理业务,今天说的场景是使用mq的方式去消费消息,但是如果同时过来多条消息,需要你在处理时候,保证顺序执行,比如更新商品,前后时间同时发过来两条消息,如果不加以判断,会把最后更新那一次的数据覆盖;或者是处理单据信息,相同的订单同时过来三种不同的状态,但是要求你需要按照顺序去执行,这时候该怎么做?在这里我根据实际的业务,提供三种不同的实现思路。第一种,在发送消息之前,存入更新时间,消费时候,以最后一次更新的时间数据去消费;参考代码如下:

2020-07-24 23:26:46 858

原创 mysql索引理解

索引主键索引b+树的叶子结点包括整棵树所有的元素主键索引,默认从小到大排序,跟插入顺序无关页–内存跟磁盘进行交互的最小单元页—局部性原理 —4kb(操作系统)—减少磁盘io—两次指令可以只用一次ioinndb里边—>页–>16kb插入的时候,会根据主键id默认升序排列;如果没有主键索引,inndb会默认生成一列rowId当作主键索引,默认自增;当链表数据非常长的时候,inndb内部会进行分组,默认是6行为一组,跟页目录进行挂钩关联;链表查询本来就比较

2020-07-18 16:42:48 126

原创 zk笔记总结

z k基本概念zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据订阅/发布,负载均衡,命名服务,集群管理,分布式锁和分布式队列等功能;Leader,Follower,Observer角色的理解Observer不参与Leader的选举过程,不参与写操作过半成功策略,因此可以在不影响写性能的情况下提高集群的性能;(如果没有Observer角色,那么如果Follower节点很多的话,会导致这个投票的成本过高,造成集群瓶颈问题)leader处理

2020-07-05 20:35:56 288

原创 单例笔记总结

双重检测public class SingletonTest { // 定义一个私有构造方法 private SingletonTest() { } //定义一个静态私有变量(不初始化,不使用final关键字,使用volatile保证了多线程访问时instance变量的可见性,避免了instance初始化时其他变量属性还没赋值完时,被另外线程调用) private static volatile SingletonTest instance;

2020-07-04 18:49:21 141

原创 ApplicationContextAware和BeanFactoryAware获取bean实例

这两个接口在项目中的使用,主要是为了动态获取实例对象,两种场景第一种:获取的实例对象都实现了相同的接口或者继承了相同的父类,这样就可以实现代码的整洁复用;第二种:比如方法的调用,类里边的方法相互调用,如果想使用自定义注解的话,是不会生效的,但是如果借用ApplicationContextAware和BeanFactoryAware接口的方法实现,则可以让自定义注解生效,因为重新动态获取了一次实例;使用说明:必须保证SpringContextUtil该类被Spring容器管理,不然不会生..

2020-07-04 11:04:25 1159

转载 Linux下用ls和du命令查看文件以及文件夹大小

ls的用法ls -l |grep “^-”|wc -l或find ./company -type f | wc -l 查看某文件夹下文件的个数,包括子文件夹里的。ls -lR|grep “^-”|wc -l 查看某文件夹下文件夹的个数,包括子文件夹里的。ls -lR|grep “^d”|wc -l说明:ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等) grep "^-" 这里将长列表输出信息过滤一部分,只保留一般文件,如果只保

2020-07-01 12:25:19 664

原创 netty学习

NettyNetty认识Netty 是由 JBOSS 提供一个异步的、 基于事件驱动的网络编程框架。模型Netty 抽象出两组线程池, BossGroup 专门负责接收客 户端连接, WorkerGroup 专门负责网络读写操作。 NioEventLoop 表示一个不断循环执行处理 任务的线程, 每个 NioEventLoop 都有一个 selector, 用于监听绑定 在其上的 socket 网络通道。 NioEventLoop 内部采用串行化设计, 从消息的读取->解码->处理-

2020-06-26 01:08:53 178

原创 分布式原理概括

文章目录分布式原理知识点1Paxos算法一致性算法-RaftrpcNetty 模型分布式原理知识点1分布式与集群的区别:集群:多个人在一起作同样的事 。分布式 :多个人在一起作不同的事 。CAP理论和base理论CAP 理论含义是,一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A: Availability)和分区容错 性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的2个。选项描述C 一致性分布式

2020-06-25 19:48:27 366

原创 redis的内存淘汰机制---LRU算法

目录LRU原理 实现1 实现2LRU原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。实现1最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部; (...

2020-04-12 00:37:40 644

原创 springAop源码分析

首先,请带着以下疑问去看源码,1.aop的动态代理有jdk动态代理,也有cglib动态代理,最终如何选择?2.我们平常工作中面向切面编程到底是怎么实现的?3.AopContext.currentProxy()是干什么的,怎么使用?4.学习了ReflectionUtils.makeAccessible(method)工具类;开始:1.createAopProxy方法,获取代理...

2020-04-05 14:57:17 227

原创 springMvc和springAop实现原理对比

1.两者的实现思路是一样的,都会使用到jdk动态代理,当然aop可能也会用到cgilb代理实现;2.两个都会有拦截器,比如springMvc里边是叫拦截器或者过滤器,aop里边是切面,都会返回一个链路信息,mvc返回的是:HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器);aop返回的是cha...

2020-04-05 14:22:49 373

空空如也

空空如也

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

TA关注的人

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