- 博客(55)
- 资源 (1)
- 收藏
- 关注
原创 Hystrix与Feign集成
首先,确保你的项目依赖中包含了Spring Cloud Netflix Hystrix的依赖,这样Spring Cloud可以自动配置Feign客户端以使用Hystrix。:在你的配置文件(如application.yml或application.properties)中,需要启用Hystrix的支持,这通常是通过设置。属性,这提供了更灵活的异常处理能力,允许你在回退逻辑中访问到引发失败的异常。接口的类,这个类不仅能够提供回退逻辑,还可以根据异常情况定制化回退行为。接口的类,相较于直接使用。
2024-07-19 17:03:47 300 1
原创 java死锁检测
从上面的日志信息可以看到,两个线程分别在等待获取锁,而且可以发现线程执行代码行数。以上是通过可视化界面检测死锁,下面通过命令行来排查死锁。jvisualvm界面显示检测出死锁信息。打开命令行,执行jvisualvm命令。分别执行jps 和 jstack命令。通过线程堆栈信息,可检测到死锁信息。这里通过jps找到2453的进程号。
2024-07-17 11:58:14 178
原创 spring三级缓存
在Spring框架中,三级缓存机制是其解决循环依赖问题的关键设计之一,特别是在处理单例bean的循环依赖时。Bean的定义信息完全初始化完毕Bean被创建但尚未完成其全部初始化。
2024-07-16 13:56:01 875
原创 IO多路复用
IO多路复用(I/O Multiplexing)是一种在单个线程或进程中高效处理多个IO连接的技术,常用于网络编程和高并发服务器的开发中。它的核心思想是,不是为每个连接创建一个新的线程或进程来处理IO操作(这种方式在面对大量并发连接时会迅速消耗系统资源),而是使用一个或少量几个线程来监视多个IO通道(如socket连接),一旦某个通道准备好进行读写操作,就通知程序进行相应的处理。在使用这些技术时,程序首先会将关心的IO事件(如读、写)的文件描述符注册到内核的多路复用器中,然后调用相应的多路复用函数(如。
2024-06-30 16:39:09 408
原创 Java线程池
每种线程池的差异主要体现在线程的数量管理(固定、动态、单线程)、任务队列的处理机制(有界、无界、特定类型)、以及是否支持特定功能(如定时执行)。提供了便捷的方法来创建不同类型的线程池,但它生成的线程池配置往往是通用的,可能不完全符合特定应用的需求,有时可能导致资源耗尽或性能问题。,这样可以根据具体的应用场景来精细调整线程池的参数,如核心线程数、最大线程数、任务队列类型(如。等)等,从而更好地控制线程池的行为,提高系统的稳定性和性能。,也可能因创建过多线程而导致资源耗尽。创建的线程池虽然灵活,但由于其。
2024-06-30 15:58:19 318
原创 bean生命周期
当容器关闭或Bean不再需要时,容器会负责调用销毁方法,释放Bean所持有的资源,最后由Java垃圾回收机制回收Bean实例。: 容器会根据配置(如XML配置、注解配置等)对Bean的属性进行依赖注入,设置Bean所需的协作对象(即依赖)和其他配置值。在这个阶段,Bean会参与应用程序的业务流程,响应方法调用等。等),容器会调用这些接口的方法,让Bean能够感知到自己所在的环境。注解的方法完成,用于执行任何必要的设置或初始化逻辑。),在Bean销毁之前,这些方法会被调用。
2024-06-30 15:32:18 223
原创 AbstractQueuedSynchronizer同步器
(AQS)是Java并发包中的一个抽象类,位于包下,它是构建锁和其他同步器(synchronizers)的基础框架。AQS的核心思想是基于一个双向链表来管理线程的等待队列,并通过一个整型的state变量来表示同步状态,从而实现线程间的同步控制。
2024-06-28 16:07:56 277
原创 redis分布式事务
操作复杂度适合简单的单一键操作,而Lua脚本则能处理更复杂的多键事务和逻辑。原子性和性能:两者都能提供原子性操作,但Lua脚本在处理多步骤事务时能减少网络往返,提高性能。易用性方法使用简单,无需编写额外脚本;Lua脚本虽然灵活但增加了开发和维护的复杂度。根据实际需求选择合适的方法:如果只是简单的设置键值对并确保其唯一性,足够使用;而对于涉及多键的复杂事务逻辑,则推荐使用Lua脚本。
2024-06-28 15:15:06 563
原创 分布式事务与Seata详解
Seata是一款用于微服务架构的高性能分布式事务框架,其设计目标是解决分布式事务中的复杂性和性能问题,尤其适用于微服务环境。
2024-06-28 14:48:30 408
原创 CAP理论
CAP理论是分布式系统设计中的一项重要原则,由加州大学伯克利分校的计算机科学家Eric Brewer在2000年提出,并在2002年由Seth Gilbert和Nancy Lynch通过理论证明。CAP理论指出,在分布式系统中,无法同时实现一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三项特性。例如,银行交易系统可能更倾向于选择CP模型以确保数据的一致性,而社交媒体系统可能更倾向于AP模型以保证高可用性。
2024-06-27 15:35:20 213
原创 阻塞IO、非阻塞IO、异步IO的区别
异步IO是最先进的IO模型,它不仅不会阻塞线程,而且还会在IO操作完成后主动通知应用程序。也就是说,你只需要告诉操作系统你想做什么,然后继续执行其他任务,当IO操作完成时,操作系统会通过回调函数、事件通知等方式告知你。当没有数据可读时,你的程序不会被阻塞,而是可以立即返回并处理其他任务,只有当数据真正到达时,你才会被通知去读取。,这是一个阻塞调用,意味着调用线程将被挂起直到一个连接请求到达。时,线程将等待至少一个注册的通道有事件发生(例如,一个连接请求到达或数据可读)。在传统的阻塞IO模型中,示例中的。
2024-06-26 18:56:02 340
原创 k8s核心组件
Master组件: kube-apiserver:用于暴露Kubernetes API,任何资源请求或调用操作都是通过kube-apiserver提供的接口进行。它是Kubernetes集群架构的大脑,负责接收所有请求,并根据用户的具体请求通知其他组件工作。 etcd:配置存储中心,用于存储集群的所有配置信息,包括集群元数据:如各个节点(Node)的信息,包括节点名称、标签、状态等、资源使用情况、Pods、Services、Deployments、ReplicaSets、ConfigMaps、Secr
2024-06-17 15:15:03 466
原创 线程阻塞、等待、挂起概念讲解
线程阻塞 (Blocking)线程等待 (Waiting)线程挂起 (Suspending)解释:每个Java对象在内存中除了存储其实际数据外,还包含一个对象头,这个对象头中有一部分被称为Mark Word,它包含了对象的锁状态等信息。当一个线程试图通过关键字进入一个同步代码块或方法时,实际上是在尝试获取这个对象监视器的所有权。具体过程大致如下:尝试获取锁:线程执行到代码块或方法时,会尝试获取对象监视器锁。如果锁未被其他线程持有,当前线程就会成功获取锁,并继续执行。进入等待队列:如果锁已经被其他线程持有,那
2024-06-14 09:13:42 1320
原创 JVM垃圾回收器介绍
例如,为了提高吞吐量,垃圾回收器可能会采取更激进的策略,如更少的垃圾回收频率,但这可能导致每次垃圾回收时的停顿时间变长,从而增加延迟。反之,为了降低延迟,可能需要更频繁但更轻量级的垃圾回收,这又可能降低了整体的吞吐量。吞吐量百分比可通过参数设置,默认情况下,如果不进行特殊配置,JVM的吞吐量目标是99%,这意味着目标是将99%的时间用于应用程序的执行,而只留1%的时间用于垃圾回收。简单理解:如果吞吐量为98%,停顿时间2%(垃圾回收时间),怎么来停顿这2%的时间,可一次停顿,也可多次停顿,需要平衡。
2024-06-13 09:38:56 819
原创 TCP和UDP区别
当接收方检测到数据包的顺序混乱(比如收到了序列号更高的数据包但期待的是更低序列号的数据包),它会立即发送重复的ACK,告知发送方某个特定序列号的数据包未到达。:Bob收到数据包1后,他会向Alice发送一个确认应答(ACK),这个ACK中会包含他期望接下来收到的数据包的序列号。既然Bob已经收到了序列号为1的数据包,他的ACK就会声明他下一个期待接收的是序列号为2的数据包。:Bob收到数据包1后,他会向Alice发送一个确认应答(ACK),这个ACK中会包含他期望接下来收到的数据包的序列号。
2024-06-12 10:58:26 1262
原创 TCP三次握手过程
ack=x+1:告诉客户端下一个期望接收的数据包的序列号。ack=y+1:告诉服务器下一个期望接收的数据包的序列号。ACK(确认标志,Acknowledgment)SYN=1:告诉服务器,我要请求连接。确认了服务器发送的SYN+ACK包。B:能听得到,你能听得到我讲话吗?SYN=1:告诉客户端,同意连接。A:能听得到,那我们开始聊天吧!确认了客户端发送的SYN包。A:喂,能听得到我讲话吗?ACK=1: 表示客户端。ACK=1:表示服务器。
2024-06-11 15:27:35 577
原创 redis集群
Redis集群主要提供了三种常见的部署模式,每种模式都有其特定的应用场景和优缺点,下面是这三种模式的详细介绍:1. 主从复制(Master-Slave Replication)简介:这是Redis的基本集群模式,通过配置一个主节点(Master)和一个或多个从节点(Slave),主节点负责处理所有写操作,同时将数据变更同步到从节点。从节点通常用于读操作,可以提升读取性能和系统伸缩性。特点:提供数据冗余,提高可用性。 支持读写分离,可以水平扩展读操作。 自动故障恢复需配合Redis Sen
2024-06-04 11:06:59 393
原创 mysql集群
这个概念在MySQL官方文档中未直接提及,可能是对MySQL Replication的一种误解或者非正式用语,通常指的还是传统的主从复制配置,或者是对MySQL Group Replication的一种简化理解,强调的是多节点间的复制关系,但没有明确的官方定义。: 进一步扩展了InnoDB Cluster的概念,允许跨多个数据中心或地理区域的集群复制,提供地域级的灾难恢复能力。它基于Paxos共识算法,确保数据的一致性,自动处理节点间的冲突,并在节点故障时自动进行恢复,提供了更高的可用性和容错能力。
2024-05-31 14:25:22 206
原创 linux支持vGPU方案
no-opengl-files #只安装驱动文件,不安装OpenGL文件。-no-nouveau-check #安装驱动时禁用nouveau。-no-x-check #安装驱动时关闭X服务。问题处理:nvidia部分模块已经加载内核中的问题。
2024-04-26 13:44:34 428 2
原创 虚拟机备份和还原
备注:-f:源文件格式,-p:备份进度,-O:输出文件格式 ubuntu233.qcow2:源文件 ubuntu20.04_202306_233.raw:目标文件。备注:--name:虚拟机名字,--ram:内存大小,--vcpus:处理器数量,path:磁盘镜像文件路径。备注:出现该问题先删除:rmmod floppy;注意:eth0是否存在: dhclient eth0,如果不存在,查询可用的网络设备:ip a。2.1 打开hyper-v管理客户端,创建虚拟机交换机。2.3 启动虚拟机,配置网络。
2024-04-24 10:14:47 588 1
原创 rabbitmq集群配置
2,配置postStart函数,在Pod容器启动后执行的命令:脚本主要用于在RabbitMQ容器启动后,配置DNS,然后等待RabbitMQ服务启动并健康检查,最后判断并处理节点是否已加入集群的情况。RABBITMQ_ERLANG_COOKIE:设置Erlang Cookie用于节点间通信安全验证,值来自/nfs/rabbitmq/lib/.erlang.cookie文件内容。
2024-04-24 09:53:10 524 3
原创 rabbitmq集群概念讲解
Classic queues support dead letter exchanges (经典队列支持死信交换机):无法被消费的消息(包括:过期的消息、消息被拒绝且不重新入队、队列达到最大长度),这些消息称为死信,死信会被自动路由到死信交换机,进而转发至绑定死信交换器的队列中。故障处理的明确性: 经典镜像队列在处理故障时可能缺乏明确的、易于理解的语义,这可能导致用户在面对故障时难以做出正确的决策,或者在恢复过程中遇到不确定性。但是其他节点也能感知到这个队列的存在,且能代理客户端对该队列的请求。
2024-04-24 09:49:26 765
原创 vitess介绍
VTTablet :是一个位于 MySQL 数据库前面的代理服务器, Vitess 实现中每个 MySQL 实例前面都有一个 VTTablet 进程。Keyspace: 键空间(数据库):键空间(Keyspace) 是一种逻辑数据库,相当于 MySQL 中的 Database 概念。VTGate :是一个轻型代理服务器,它接收客户端请求,将流量路由到正确的vttablet,并将合并的结果返回给客户端。从应用的角度看,键空间就是一个单独的数据库,从键空间读数据就像从 MySQL 数据库读数据一样。
2024-04-24 09:31:47 508
原创 容器工作流
具体算法是,观察Job下的Pod已调度数量是否满足了最小运行数量,当Job的最小运行数量得到满足时,为Job下的所有Pod执行调度动作,否则,不执行。举例来说,有3个团队,共享一个集群上的资源池:A团队最多使用总集群的40%,B团队最多使用30%,C团队最多使用30%。目前某平台使用计算容器和解析容器,这两种容器目前通过rabbitmq消息来进行链接,形成容器工作流,使用容器工作流框架可以省去两个容器中间环节的控制,不需要再使用java代码对容器的操作,通过容器工作流框架即可控制容器之间的启动。
2024-04-24 09:10:45 627
原创 K8S探针分享
livenessProbe:存活探针,用于判断容器是不是健康;如果探测失败,Kubernetes就会重启容器。readinessProbe:就绪探针,用于判断是否可以将容器加入到Service负载均衡池中,对外提供服务。区别:如果提供了启动探测,其他两个探针将会被暂时禁用,直到满足配置,启动探针满足一次探测后,后续不再进行探测。上图中的配置如果容器启动时间超过20s,就会启动重启策略。如果调高失败次数,服务挂了以后不能及时重启服务。startupProbe:启动探针,判断容器内的应用程序是否已启动。
2024-04-23 17:26:23 1119
原创 mvnd安装手册
路径C:\ProgramFiles\maven-mvnd-1.0-m6-m39-windows-amd64\mvn\conf\settings.xml。2. 添加环境变量,路径:C:\Program Files\maven-mvnd-1.0-m6-m39-windows-amd64\bin。一:Windows安装(mac需下载对应的darwin安装包)3. 配置mvnd,和原来maven配置文件配置一致即可;5. idea配置: 需安装maven help插件。6. 重启idea和使用mvnd。
2024-04-23 17:11:49 233
原创 jar包分离配置
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--start--> <configuration> <!--这里对应项目的主入口--> <main.
2021-06-22 10:30:57 139
原创 面试知识点总结
switch表达式 https://www.html.cn/qa/other/20952.htmlbyte,short,int 整型类型,字符类型char,String类型,枚举类型。内存分页 和 物理分页 https://www.cnblogs.com/cocoxu1992/p/10974325.html内存分页:先从数据库获取所有的数据,缓存到内存,然后再进行分页;例如:Mybatis 使用 RowBounds 对象进行内存分页物理分页:使用 sql 语句的 limit 分页参数 在数据
2021-06-22 10:22:04 428
原创 zuul过滤器类型及生命周期
在Zuul中定义了4种标准的过滤器类型,这些过滤器类型对应于一个服务请求的典型生命周期。1,·PRE过滤器:在请求被路由之前调用,可用来实现身份验证、在集群中选择请求的微服务、记录调试信息等。2,·ROUTING过滤器:在调用目标服务之前被调用,通常可以用来处理一些动态路由。比如,A/B测试,在这里可以随机让部分用户访问指定版本的服务,然后通过用户体验数据的采集和分析来决定哪个版本更好。另外,还可以结合PRE过滤器实现不同版本服务之间的处理。3,·POST过滤器:在目标微服务执行以后,所返回的结
2020-09-09 10:54:07 1518 2
原创 spring配置加载顺序
对于一个标准的Spring Boot应用,可以通过多种方式进行配置。比如前面一直使用的配置文件(properties或yml)、命令行参数,此外还有系统环境变量、JVM的参数等。下面我们来了解一下这些配置方式。·命令行参数:命令行参数使用--xxx=xxx格式在启动时传递,比如:--server.port=2300,就是将服务的端口设置为2300。这里的参考可以是Spring Boot框架的参数,也可以是我们自定义的参数或属性配置。·从java:comp/env加载的JNDI属性。·Java系统
2020-09-08 15:47:31 655
原创 eureke注册一个服务实例需要的时间
在实际进行微服务架构开发过程中,经常会遇到一个服务实例上线后需要很长一段时间才能够被其他服务调用者获取和使用,并不能在微服务一上线就立即被获取到,这是Eureka的机制造成的。在Eureak服务治理环境下,一个微服务上线有三处缓存处理和一处延迟处理,经过这些处理后才能够被服务消费方获取到并使用,它们分别是:·Eureka服务器对服务注册列表进行缓存,默认时间为30秒。所以即使一个服务实例刚刚注册成功,它也可能不会立即在/eureka/apps端点的结果中出现。·Eureka客户端(服务消费方)对注册的服
2020-09-07 14:06:45 513
原创 eureka自我保护模式
之前我们提到Eureka设计哲学采用的是AP原则,也就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。因此,在Eureka中有一个自我保护模式,并默认开启。在自我保护模式下,Eureka服务器会保护服务注册表中的信息,不再注销任何服务实例。当开启自我保护模式时,在Eureka控制台将看到如图4-14所示的界面。在控制台将会以红色字体显示以下告警信息: EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTA...
2020-09-07 14:05:09 523
原创 eureka服务续约
当服务启动并成功注册到Eureka服务器后,Eureka客户端会默认以每隔30秒的频率向Eureka服务器发送一次心跳(可以在配置文件中通过eureka.instance.lease-renewal-interval-in-seconds属性进行更改)。发送心跳起始就是执行服务续约(Renew)操作,避免自己的注册信息被Eureka服务器剔除。续约的处理逻辑和与服务注册逻辑基本一致:首先更新自身状态,然后同步到其他Eureka服务器节点。对于Eureka服务器来说如果在默认的时间内(9...
2020-09-07 14:02:09 933
原创 db2常用操作语句及命令
1,db2 查询被锁定的表语句:select * from sysibmadm.LOCKS_HELD WITH ur; 其中 with ur表示带脏数据的查询,即使表被锁也可查询。2,db2查询自增序列的值语句:select * from sysibm.SYSSEQUENCES a where a.SEQNAME = 'seq_demo';其中seq_demo为创建的序列名,自增序列可作为主键。3,db2创建序列语句:create sequence seq_demo as int start wi.
2020-09-03 15:51:13 2137
原创 idea 连接远程服务器
1,打开idea设置搜索:Deployment2,输入远程服务器地址,端口号,账号,密码3,打开ssh和remote host窗口
2019-12-05 15:53:59 900
Java面试题.docx
2020-02-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人