- 博客(159)
- 资源 (37)
- 收藏
- 关注
原创 kubernetes学习
43、Pod详解-亲和性调度-podAntiAffinity。41、Pod详解-亲和性调度-nodeAffinity。42、Pod详解-亲和性调度-podAffinity。52、Pod控制器-Deployment-金丝雀发布。50、Pod控制器-Deployment-升级策略。51、Pod控制器-Deployment-版本回退。49、Pod控制器-Deployment-扩缩容。48、Pod控制器-Deployment-基础。33、Pod详解-生命周期-初始化容器。34、Pod详解-生命周期--钩子函数。
2024-04-19 18:27:03 149
原创 Kubernetes如何实现零停机部署(zero-downtime deployment)?
在 Spring Boot 应用中实现优雅关闭(Graceful Shutdown),可以确保应用在停止之前有机会处理完当前正在执行的任务。通过上述的配置和代码实现,你的 Spring Boot 应用将能够在接收到停止信号时,优雅地完成正在处理的请求,然后再关闭。为了确保服务间的调用不会在更新过程中失败,你可能还需要考虑实现客户端重试机制和断路器模式,这些可以通过 Spring Cloud 的组件如。生命周期钩子可以用来执行关闭前的操作,例如稍微延迟关闭,以确保服务有足够的时间完成请求处理。
2024-04-19 17:35:33 769
原创 一个技术团队需要哪些基础设施?
6、SpringCloud相关:nacos、xxl-job、sentinel。4、一个产品文档PRD管理平台(可以和在线协同文档为同一个)5、技术相关:gitlab、maven私服、devops平台。3、一个Bug/问题处理平台(可以和需求管理平台为同一个)2、一个项目/需求管理平台。1、一个在线协同文档。
2024-04-12 21:47:45 81
原创 Docker学习
compose目前已经完全支持Linux、Mac Os和Windows,在我们安装Compose之前,需要先安装docker。下面我们以编译好的二进制包方式安装在Linux系统中。# 设置文件可执行权限# 查看版本信息。
2024-04-09 23:11:55 1228
原创 Mysql索引失效的情况
MySQL索引的使用能够显著提高查询效率,但在某些情况下,索引可能不会被利用,这就是所谓的索引失效。理解和避免这些情况有助于优化查询性能。
2024-03-31 23:16:05 382
原创 HashMap、LinkedHashMap、TreeMap
HashMap实现了Map接口,并且其底层是基于哈希表(散列表/数组)的数据结构。它使用键(Key)对象的哈希码来确定键值对(Entry)存储的位置。在Java 1.8及以后,当链表长度大于一定阈值(默认是8)时,链表会被转换为红黑树来提高搜索效率。
2024-03-31 21:52:15 709
原创 12-Factor应用方法论
12-Factor应用方法论侧重于软件开发的最佳实践,确保了应用在任意云平台上都能有良好的可迁移性和减小与底层硬件的耦合度。12-Factor应用方法论是由Heroku的创始人Adam Wiggins提出的,旨在指导开发者构建应用以适应现代云平台,实现高的可移植性、伸缩性和可维护性。应用的进程应该能够迅速启动及优雅停止,从而实现更加快速的部署和弹性的伸缩性。后端服务如数据库、消息队列等,应该可以随时被连接或断开,而不影响应用的运行。应用应该自己提供服务对外的HTTP服务,而不依赖于外部的web服务器。
2024-03-31 17:52:28 545
原创 SpringCloud网关如何做限流?
是一个指向Spring Bean的引用,这个Bean需要实现接口,用于决定限流规则的作用对象(如用户、IP等)。以下是一个按请求路径进行限流的@Bean创建一个Zuul过滤器来实现限流逻辑,你可以使用Hystrix来控制并发量。// 每秒100个请求的速率@Override@Overridereturn -4;// 设置为高优先级@Override// 永远开启过滤@Overrideif (!// 限流发生时,拒绝访问// 返回429状态码// 设置返回的内容。
2024-03-30 11:25:32 752
原创 SpringBoot启动过程
由于它们运行的时间点较早,容器可能还没有完全初始化,许多Bean可能还未被创建和注册,因此在这些组件中使用@Autowired注入其他的Bean通常是不可行的或者说行为是不确定的。这个列表提供了Spring Boot启动过程的一个相当详尽的视角,但是实际上在实际的应用中,基于不同的配置和自定义的组件,还可能涉及更多的步骤和细节。,它直接操作ApplicationContext的配置,这发生在容器的Bean定义被加载之前,因此此时容器里面还没有Bean可以被注入。
2024-03-30 10:50:20 1002
原创 为什么响应式编程无法从Threadlocal里获取数据?
响应式编程模型(如 Spring WebFlux)和传统的 Servlet 基于线程的模型(如 Spring MVC)在处理请求的方式上有显著不同。在传统的 Spring MVC 应用中,每个请求都是由一个固定的线程处理的,因此可以便利地使用。然而,在响应式编程模型中,因为处理流程可能在多个线程之间切换,所以无法保证整个请求处理链在同一个线程中执行。是跟随响应式流的,并且可以在响应式链中的不同操作和不同线程间保持数据的连贯性。的数据是绑定到特定线程的,当请求处理跳转到新的线程时,原线程的。
2024-03-28 10:22:26 426
原创 SpringBoot与Prometheus监控整合
参考:springboot实战之prometheus监控整合-腾讯云开发者社区-腾讯云https://www.cnblogs.com/skevin/p/15874139.htmlhttps://www.jianshu.com/p/e5dc2b45c7a4
2024-03-25 14:08:49 216
原创 SpringBoot多模块应用的模块设计
启动模块,所有的Congfig类也建议放在这里。为什么是所有的Config都放在这里,我认为放在这里使得配置类更加的集中,更加的好管理,也能更好的梳理配置,虽然有些配置也可以跟着自己的模块走,但是我还是觉得放在这里好些。有更多体会的建议留言。
2024-03-22 19:44:56 109
原创 如何实高可用性(HA)的 Nginx 集群
一、使用 LVS 将 Nginx 配置为高可用性集群为了实现高可用性(HA)的 Nginx 集群,可以使用 Linux Virtual Server (LVS) 作为负载均衡器。LVS 是 Linux 内核内置的负载均衡软件,它支持多种调度算法,如轮询、加权轮询等,可以将客户端请求分发到多个服务器,从而提高服务的可用性和扩展性。一、使用 LVS 将 Nginx 配置为高可用性集群1. 准备工作2. 安装和配置 LVSLVS 的配置通常涉及到两个层面:内核层面的 IPVS 配置和用户态的管理工具。
2024-03-22 19:22:58 740
原创 在微服务架构中如何使用 Nginx 作为入口控制器或者服务网关
一、在 Kubernetes 中使用 Nginx 作为 Ingress Controller:一、在 Kubernetes 中使用 Nginx 作为 Ingress Controller:在微服务架构和容器化部署中,Nginx 常常被用来作为入口控制器(Ingress Controller)或者服务网关。Kubernetes 社区提供了官方的 Nginx Ingress Controller,你可以通过 Helm 或者直接使用 YAML 文件进行部署。
2024-03-22 18:39:00 492
原创 Nginx常见面试题以及答案
答: Nginx 的优势在于处理静态文件、高并发连接时性能较好,内存消耗低,配置灵活,并且适合作为负载均衡器和反向代理。答: Nginx 的缓存功能可以存储来自后端服务器的响应结果,并在符合一定条件时直接使用缓存内容响应客户端请求,从而减少后端服务器的压力。它的主要优势包括使用较少的资源处理高并发连接、提供高度的可靠性、支持热部署、提供灵活的配置方式以及良好的负载均衡和缓存功能。location 指令可以匹配请求的URI,并根据不同的匹配结果,应用不同的配置,如代理设置、重写规则或返回不同的内容。
2024-03-22 18:14:19 957
原创 什么是局部性原理?
局部性原理描述了一个倾向,即软件在执行过程中所需要访问的数据和指令,倾向于集中在一小块连续的地址空间内。缓存是一种小容量但速度极快的内存,位于CPU和主内存之间,用来临时存储最近或频繁访问的数据,以减少访问主内存的次数,从而提高整体系统性能。空间局部性(Spatial Locality):空间局部性则是指如果一个数据位置被访问,那么其附近的数据位置很可能很快也会被访问。例如,循环中使用的变量就可能展现出很强的时间局部性,因为在循环过程中,这些变量会被连续多次读取或修改。
2024-03-22 16:30:47 146
原创 FeignClient是否可以配置多个拦截器?
1、做法1、做法在Spring Cloud中,是一个声明式的Web服务客户端,让调用远程服务就像调用本地方法一样简单。拦截器可以用于在发送请求之前或者获得响应之后执行一些操作,比如添加公共的Header、记录日志、做一些统计等。在Feign中,拦截器是通过实现接口来定义的。如果你想为添加多个拦截器,可以声明多个的Bean。下面是如何定义和注册多个拦截器的步骤:1、创建多个实现了3、然后,你可以在接口上使用注解的当Feign准备发起请求时,所有注册的。
2024-03-22 16:23:28 262
原创 什么是Webhook 和 HTTP Endpoint?
当这个预设的事件被触发时,源系统将会向配置的HTTP endpoint 发送一个HTTP请求(通常是POST请求),这个请求包含了关于事件的信息,如事件类型、关联数据等。简单说,Webhook 是一种自动化的通知机制,它通过HTTP请求将事件信息从一个应用程序传递给另一个应用程序的HTTP endpoint;在Webhook的上下文中,HTTP endpoint 是接收事件通知的服务器URL。然而,在更广泛的Web服务上下文中,HTTP endpoint 可以是任何通过HTTP协议公开的服务接口。
2024-03-22 13:56:25 500
原创 了解云原生
云原生应用开发一般来说主要是广大程序员的事情,云原生应用并不限于某一门编程语言,无论是Java、Python、Golang、PHP、前端开发等,需要掌握的是Docker与容器化(重点)、Kubernetes基础操作(基本入门就行)、微服务、GitOps等相关的内容,所学内容其实并不多,大部分都是交给工具和平台来搞定。云原生开发工程师除了比较核心的操作系统、网络相关的知识外,还需要掌握云原生时代的“C语言”Golang,同时需要了解Kubernetes编程和源码相关的知识。
2024-03-22 11:26:50 714
原创 分布式事务协调器Seata
这是因为,Seata 通过全局事务 ID 和事务上下文的传递,确保所有相关的微服务调用都在同一个全局事务的范围内执行。: 在这个例子中,应用 A 和应用 B 的事务是分离的。应用 A 的数据库操作不会参与到应用 B 的全局事务中,因为全局事务的上下文是在调用链的下游应用 B 中创建的。在这种情况下,应用 B 的全局事务将不会自动包含应用 A 的任何数据库操作,因为全局事务的上下文是在应用 B 中创建的。: TM负责定义事务的范围,即开始和结束全局事务的边界,它会在适当的时机向TC注册并报告全局事务的状态。
2024-03-21 16:08:14 747
原创 Mysql面试题以及答案
需要注意的是,InnoDB里面只能存在一个聚集索引,原因很简单,如果存在多个聚集索引,那么意味着这个表里面的数据存在多个副本,造成磁盘空间的浪费,以及数据维护的困难。唯一索引:索引列中的值必须是唯一的,但是允许为空值。如果主键是自增的,数据在磁盘上就是顺序存储的,这对于按照主键顺序访问行的查询非常高效,因为它们可以顺序读取磁盘上的数据块。:B+树的非叶子节点不保存数据,只保存指向子节点的指针,这意味着相比于B树的同一高度,B+树可以有更多的分支,这样树的高度更低,查询时需要的磁盘I/O操作也就更少。
2024-03-21 12:01:08 874
原创 如何设计一个订单超过5分钟不支付就自动去掉订的设计?都有哪些方案?
当创建一个订单时,将这个订单的ID和过期时间(当前时间加上5分钟)一起放入支持延迟消息的消息队列中(如RabbitMQ的Delayed Message Plugin或者Kafka的延迟队列)。应用层定时器(Application-Level Timer): 在应用层面,使用编程语言内置的定时器API(例如Java的ScheduledExecutorService,或者Python的sched模块)来设置一个5分钟后执行的定时任务,任务的责任是检查和取消订单。接口,可以用来实现内存里的延迟队列。
2024-03-20 22:27:32 987
原创 Redis面试题以及答案
在缓存系统的设计和运维中,"缓存击穿"、"缓存穿透"和"缓存雪崩"是三种常见的问题场景,它们各自描述了不同的异常情况,可能导致缓存系统的效率下降甚至崩溃。
2024-03-20 21:57:01 767
原创 SpringCloud面试题以及答案
服务降级: 当出现请求超时、资源不足时(线程或者信号量),会进行服务降级,就是去返回fallback方法的结果。服务熔断: 当失败率(网络故障或者超时造成)达到阈值自动触发降级,是一种特殊的降级。服务隔离: 为隔离的服务开启一个独立的线程,这样在高并发情况下,也不会影响该服务。一般使用线程池实现(还有信号量方式实现)。8、服务降级和服务熔断的区别区别: 降级每个请求都会发送过去,而熔断不一定,达到失败率,请求就不会再去发送了。
2024-03-20 17:21:27 963
原创 在Spring Boot中如何处理跨域请求(CORS)?
当浏览器执行跨源 HTTP 请求时,根据请求的类型,它可能首先发起一个预请求(preflight request),这是一种使用 OPTIONS 方法的 HTTP 请求,用来检查真实请求是否安全。不过,值得注意的是,确保 Nginx 的 CORS 设置与你的应用安全策略保持一致是非常重要的。如果你的 Web 应用中包含从其他源获取资源的需求(例如,前端应用从不同域名的 API 服务器请求数据),同源策略将默认阻止这种跨源 HTTP 请求。的跨域请求,并且允许特定的 HTTP 方法。
2024-03-20 15:29:34 914
原创 过滤器 拦截器 Aop的区别
在 Spring 框架中,过滤器(Filter)、拦截器(Interceptor)和切面(AOP)都是用于在应用程序的不同层次上进行横切关注点(cross-cutting concerns)处理的技术。对于登录拦截这样的场景,拦截器通常是更好的选择,因为它提供了与 Spring MVC 紧密集成的方式,允许你在控制器方法处理之前执行逻辑,并根据需要控制是否继续处理请求或重定向到登录页面。将会拦截所有路径的请求,但排除了登录页面和静态资源的路径。这样的设置使得拦截器成为实现登录拦截的理想选择。
2024-03-20 15:02:47 815
原创 SpringBoot面试题及答案
为了增强这一功能,可以使用 DCEVM (Dynamic Code Evolution Virtual Machine),它是一个修改过的 JVM 版本,允许更多形式的热部署,包括添加/删除字段、方法等。这个过程会比冷启动快很多,因为 DevTools 采用了两个 ClassLoader,一个用于加载不会变更的类(如第三方库),另一个用于加载会变更的类(如你的代码)。虽然这种方法可以实现会话共享,但它限制了负载均衡器的灵活路由能力,并且如果服务实例宕机,会导致用户的会话丢失。
2024-03-20 13:58:27 787
原创 设计一个订阅年费制的saas系统一般需要做哪些设计
设计一个基于年费制的 SaaS (Software as a Service) 系统需要考虑多个方面,以确保系统既能满足业务需求,又能提供良好的用户体验并保持系统的安全、可靠和可维护性。
2024-03-20 11:23:09 299
原创 Spring Boot 提供了多种配置外部化的方式,这些配置来源具有以下的优先级顺序,从高到低
Apollo(阿波罗)是一个由携程框架部门开源的配置中心服务,旨在为分布式系统提供集中式的配置管理服务。在Spring Boot应用中集成Apollo后,Apollo中的配置属性将会和Spring Boot的本地配置文件(比如。以上列表是按照配置源的优先级排序的。如果你在多个位置定义了相同的属性,那么按照这个列表顺序,优先级越高的配置源将覆盖优先级较低的同名属性。属性来激活特定的配置文件和指定配置文件的位置,进一步提供灵活的配置管理。Spring Boot 允许你通过设置。)等共同作用于应用配置。
2024-03-20 10:49:01 405
原创 ThreadLocal为什么能实现线程数据隔离
为何能在多线程环境中保持线程局部变量独立性的原理。,所以不同线程看到的映射实际上是不同的。,所以它们保存的值是独立隔离的。),然后在当前线程对象内部查找或修改。实例是共享的,但是每个线程都有自己的。实例存取值,但也是线程隔离的。操作时,它会先获取当前线程(实例,作为映射的键,但是由于。因此每个线程既使通过同一个。类的一个字段存在的。,每个线程都有自己独立的。实例this作为键,与。的源码来进一步理解。方法会访问当前线程的。因此,关键点在于虽然。
2024-03-18 16:34:08 429
原创 Java开发手册①
说明:这个变量是针对一个线程内所有操作共享的,所以设置为静态变量,所有此类实例共享此静态变量, 也就是说在类第一次被使用时装载,只分配一块存储空间,所有此类的对象(只要是这个线程内定义的)都可 以操控这个变量。5. 【强制】注意 Math.random() 这个方法返回是 double 类型,注意取值的范围 0≤x<1(能够 取到零值,注意除零异常),如果想获取整数类型的随机数,不要将 x 放大 10 的若干倍然后 取整,直接使用 Random 对象的 nextInt 或者 nextLong 方法。
2023-09-19 17:43:52 247
转载 阿里云的各种产品都是干什么的?
OCS (Open Cache Service):基于内部Tair,增加一层Proxy,支持海量小数据的高速访问。SLB (Server Load Balance):基于LVS和Tengine实现的4层和7层负载均衡,有。OSS(Open Store Service):对任意大小数据对象提供高可用,高可靠的海量存储服务。当然,阿里云提供的服务不止上面这些,而且会根据应用场景和用户需求继续丰富和完善产品体系。OTS(Open Table Service):海量(结构化)数据存储和实时查询服务。
2023-06-28 15:06:10 148
原创 mybatis-generator生成的代码如何用or处理多个并列的条件
这个 newAndCreateCriteria 其实也是先创建了一个example,然后创建了一个条件Criteria放在了list里。也就是插件设计的时候本身就支持多个条件or的。可以看到or的源码,它就是创建条件然后往list里放,再结合xml是可以满足需求的。平时一个条件时一般这么写。
2023-04-26 14:35:26 612 1
原创 技术新人成长(转正)指南
感想业务价值,技术难度兴奋->迷茫->步入正轨总结阶段目标是否完成需要继续努力的地方(业务上,技术上(需要在业务中慢慢点亮技能点))未来规划。
2022-10-30 22:40:43 369
原创 接口性能提升方法
0、缓存1、加索引、索引优化2、并行调远程接口3、批量操作数据库(避免太多小事务、大事务)4、非核心操作异步/MQ5、合适的锁粒度6、合理优化代码6.1 逻辑优化 -> 方便使用其他优化手段6.2 压缩不必要的字段,减少序列化、反序列的时间,也能减少传输时间。6.3...
2022-05-18 17:29:58 336
原创 java内存中分页,分批方法
方法一1、批量方法接口定义public interface BatchAddCallback<T> { Integer batchAdd(List<T> list);}2、分页方法实现 @Override public Integer batchAdd(List list, BatchAddCallback callback) { if (list.size() <= BATCH_MAX_SIZE) {
2022-04-26 10:23:43 1300
原创 上线清单梳理
一、发布内容1.1 业务变更业务视角修改了哪些内容1.2 系统变更系统维度修改了那些应用、开了那些分支,以及相关人员。1.3 依赖变更主要包含外部系统的依赖,非本域依赖依赖的外部的系统1.4 发布依赖/顺序若有外部域系统依赖,发布顺序也需要评估外部域相关系统系统 -> 执行人 -> 顺序1.5 回滚依赖/顺序评估回滚影响面,确定回滚顺序,通知相关上下游,并在发布群进行报备。系统 -> 执行人 -> 顺序二、其他变更2.1..
2022-04-12 10:46:57 852
原创 详细设计模板
一、概述1.1 术语1.2 目标1.2.1 业务背景和目标1.2.2 系统目标二、业务流程分析2.1业务边界2.2 整体业务流程2.3业务用例三、整体方案分析3.1 系统整体架构3.2 领域模型设计3.3 数据模型设计3.4 应用系统协作关系四、接口设计五、详细改造点分析5.1 改造点15.2 改造点2六、测试建议七、稳定性分析及变更三板斧7.1 新增调用和调用量级业务量级或者本次改造涉及的新增系统调..
2022-04-12 10:32:33 797
毕业论文在线虚线社区系统asp.net实现BBS
2010-06-14
在线虚拟社区asp.net实现BBS源码
2010-06-14
"一事一议"政府部门之间项目审批应用系统源码
2010-01-08
.net基础教程PPT
2009-12-16
《我的收藏》能不能出个按照收藏时间进行展示的tab页?
2023-03-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人