- 博客(95)
- 资源 (37)
- 收藏
- 关注
原创 认识Binlog
binlog记录的是数据库变更事件,并不是直接等同于 SQL 语句本身。具体记录的内容取决于你选择的复制格式:是基于语句(SBR),还是基于行(RBR)。如果是UPDATE语句修改了 3 条数据,会将这 3 条数据分别作为独立的事件记录,而会将整个UPDATE语句作为一个事件。在主从复制中,binlog会按照记录的方式将变更数据同步到从库:如果是 RBR,则会逐条同步每一行的数据;如果是 SBR,则是一次性同步整个 SQL 语句。
2025-03-03 17:22:06
664
原创 数据库设计——关系字段放置最佳实践
一对一和一对多使用的最多,他们不需要设计单独的关系表,只有真正的多对多才需要关系表。在实际的实践中,大部分情况下都用不到多对多。有些人把一对多也设计了关系表,这是不合理的,这会导致关系和关系对应的数据隔离,增加查询的复杂性。所以针对一对多,你在怀疑他是不是多对多时,只需要反方向看下是否也是一对多就可以了,如果不是,那么他不是多对多。一个学生可以选择多个课程,一个课程可以被多个学生选择,此时学生选课的关系需要一张单独的表来存储。一对多关系:将外键放在多的一侧,这是标准做法,确保数据完整性和查询效率。
2024-07-17 16:26:34
366
原创 总是给数据库表字段设置默认值的好处
通过设置字段不能为空,可以确保每条记录都包含必要的数据,从而保证了数据的完整性。例如,在用户表中,用户名字段不能为空可以确保每个用户都有一个有效的用户名。避免空值问题在数据库查询和数据处理过程中,空值(NULL)可能会导致各种问题,如计算错误、逻辑错误等。通过设置默认值,可以避免这些潜在问题,使数据处理更加稳定和可靠。通过设置默认值,可以确保在缺少明确值时,字段总是有一个一致的值。例如,如果性别字段的默认值设置为'未指定',就不会出现性别为空的情况,从而保证数据的一致性。优化性能。
2024-06-19 19:18:58
1085
2
原创 自定义线程池,实现父线程MDC的自动拷贝
以上两个Wapper,包括这个匿名类线程池,不难看出他们都是代理类,应用了代理模式进行增强。这个匿名类线程池在execute前,把线程用MDCRunnable包装了一个,于是线程就有了自动拷贝MDC的能力,目前这是最简单的一种方式。
2024-05-31 23:52:23
426
原创 TransmittableThreadLocal原理
TransmittableThreadLocal(简称TTL)是阿里巴巴开源的一个Java库,用于解决线程池中线程本地变量传递的问题。其底层原理主要是基于Java的机制并对其进行扩展,以支持在父子线程间以及线程池中任务切换时,能够传递和继承变量的值。: TTL继承自但与不同的是,TTL解决了在已经存在的线程(如线程池中的线程)之间传递值的问题。: 对于异步任务,TTL确保了即使在异步执行的上下文中,父线程的状态也能被正确地传递给处理该任务的子线程。
2024-05-30 22:57:30
1220
原创 Java的序列化接口
当父类实现了接口并且定义了字段,子类是否需要再定义一个字段,取决于具体需求。尽管子类可以继承父类的,但为了确保子类的序列化版本一致性,建议在子类中显式定义字段。这不仅能避免由于自动生成导致的潜在问题,还能提供明确的版本控制。
2024-05-27 14:30:58
474
原创 SpringBoot自动化配置原理
创建配置类定义一个新的配置类,使用注解并包含@Bean方法。添加条件注解根据需要使用各种条件注解来控制配置类的加载。注册自动配置类在文件中注册新的自动配置类。Spring Boot 的自动化配置利用注解及其背后的机制(包括文件和条件注解)实现了在应用启动时自动装配 bean。通过这种方式,开发者可以专注于业务逻辑,而无需手动配置各种基础设施组件。
2024-05-26 00:05:29
470
原创 在Spring Boot中Redis实现事务有哪些方式?
以上三种方式都可以在Spring Boot中实现对Redis的事务支持。选择哪种方式取决于具体的业务需求和使用场景。通常,使用Spring Data Redis的SessionCallback是较为直接和简便的方法,但对于更复杂的需求,可以考虑使用Lua脚本。
2024-05-20 16:57:11
636
原创 URL的定义建议使用驼峰写法吗?如果不建议好的写法是什么?
在 URL 的定义中,通常不建议使用驼峰写法(CamelCase),因为 URL 应该尽量保持易于阅读和输入。URL 中包含的字母大小写可能会导致访问错误或混淆,因为不是所有的服务器或网络设备都会把 URL 视为大小写不敏感。因此,推荐的好的写法是使用全部小写并通过短划线来分隔单词。这样不仅避免了大小写敏感的问题,也使得 URL 更加清晰易读。
2024-05-11 15:05:58
1257
原创 SpringBoot整合MyBatis步骤
在Spring Boot中整合MyBatis可以通过几种方式实现,主要包括使用官方的MyBatis Spring Boot Starter,或者通过手动配置。这是最简单的方式,因为Spring Boot Starter为我们自动配置了大部分的MyBatis设置。
2024-05-09 19:57:54
332
原创 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
235
原创 Kubernetes如何实现零停机部署(zero-downtime deployment)?
在 Spring Boot 应用中实现优雅关闭(Graceful Shutdown),可以确保应用在停止之前有机会处理完当前正在执行的任务。通过上述的配置和代码实现,你的 Spring Boot 应用将能够在接收到停止信号时,优雅地完成正在处理的请求,然后再关闭。为了确保服务间的调用不会在更新过程中失败,你可能还需要考虑实现客户端重试机制和断路器模式,这些可以通过 Spring Cloud 的组件如。生命周期钩子可以用来执行关闭前的操作,例如稍微延迟关闭,以确保服务有足够的时间完成请求处理。
2024-04-19 17:35:33
1137
原创 一个技术团队需要哪些基础设施?
6、SpringCloud相关:nacos、xxl-job、sentinel。4、一个产品文档PRD管理平台(可以和在线协同文档为同一个)5、技术相关:gitlab、maven私服、devops平台。3、一个Bug/问题处理平台(可以和需求管理平台为同一个)2、一个项目/需求管理平台。1、一个在线协同文档。
2024-04-12 21:47:45
184
原创 Docker学习
compose目前已经完全支持Linux、Mac Os和Windows,在我们安装Compose之前,需要先安装docker。下面我们以编译好的二进制包方式安装在Linux系统中。# 设置文件可执行权限# 查看版本信息。
2024-04-09 23:11:55
1586
原创 Mysql索引失效的情况
MySQL索引的使用能够显著提高查询效率,但在某些情况下,索引可能不会被利用,这就是所谓的索引失效。理解和避免这些情况有助于优化查询性能。
2024-03-31 23:16:05
650
原创 HashMap、LinkedHashMap、TreeMap
HashMap实现了Map接口,并且其底层是基于哈希表(散列表/数组)的数据结构。它使用键(Key)对象的哈希码来确定键值对(Entry)存储的位置。在Java 1.8及以后,当链表长度大于一定阈值(默认是8)时,链表会被转换为红黑树来提高搜索效率。
2024-03-31 21:52:15
2440
原创 12-Factor应用方法论
12-Factor应用方法论侧重于软件开发的最佳实践,确保了应用在任意云平台上都能有良好的可迁移性和减小与底层硬件的耦合度。12-Factor应用方法论是由Heroku的创始人Adam Wiggins提出的,旨在指导开发者构建应用以适应现代云平台,实现高的可移植性、伸缩性和可维护性。应用的进程应该能够迅速启动及优雅停止,从而实现更加快速的部署和弹性的伸缩性。后端服务如数据库、消息队列等,应该可以随时被连接或断开,而不影响应用的运行。应用应该自己提供服务对外的HTTP服务,而不依赖于外部的web服务器。
2024-03-31 17:52:28
644
原创 SpringCloud网关如何做限流?
是一个指向Spring Bean的引用,这个Bean需要实现接口,用于决定限流规则的作用对象(如用户、IP等)。以下是一个按请求路径进行限流的@Bean创建一个Zuul过滤器来实现限流逻辑,你可以使用Hystrix来控制并发量。// 每秒100个请求的速率@Override@Overridereturn -4;// 设置为高优先级@Override// 永远开启过滤@Overrideif (!// 限流发生时,拒绝访问// 返回429状态码// 设置返回的内容。
2024-03-30 11:25:32
1222
原创 SpringBoot启动过程
由于它们运行的时间点较早,容器可能还没有完全初始化,许多Bean可能还未被创建和注册,因此在这些组件中使用@Autowired注入其他的Bean通常是不可行的或者说行为是不确定的。这个列表提供了Spring Boot启动过程的一个相当详尽的视角,但是实际上在实际的应用中,基于不同的配置和自定义的组件,还可能涉及更多的步骤和细节。,它直接操作ApplicationContext的配置,这发生在容器的Bean定义被加载之前,因此此时容器里面还没有Bean可以被注入。
2024-03-30 10:50:20
1070
原创 安装虚拟机
在VMware中安装CentOS7(超详细的图文教程)_在vmware上安装centos-优快云博客终于有人把VMware虚拟机三种网络模式讲清楚了! - 知乎
2024-03-28 22:52:31
466
原创 为什么响应式编程无法从Threadlocal里获取数据?
响应式编程模型(如 Spring WebFlux)和传统的 Servlet 基于线程的模型(如 Spring MVC)在处理请求的方式上有显著不同。在传统的 Spring MVC 应用中,每个请求都是由一个固定的线程处理的,因此可以便利地使用。然而,在响应式编程模型中,因为处理流程可能在多个线程之间切换,所以无法保证整个请求处理链在同一个线程中执行。是跟随响应式流的,并且可以在响应式链中的不同操作和不同线程间保持数据的连贯性。的数据是绑定到特定线程的,当请求处理跳转到新的线程时,原线程的。
2024-03-28 10:22:26
726
原创 SpringBoot与Prometheus监控整合
参考:springboot实战之prometheus监控整合-腾讯云开发者社区-腾讯云https://www.cnblogs.com/skevin/p/15874139.htmlhttps://www.jianshu.com/p/e5dc2b45c7a4
2024-03-25 14:08:49
256
原创 SpringBoot多模块应用的模块设计
启动模块,所有的Congfig类也建议放在这里。为什么是所有的Config都放在这里,我认为放在这里使得配置类更加的集中,更加的好管理,也能更好的梳理配置,虽然有些配置也可以跟着自己的模块走,但是我还是觉得放在这里好些。有更多体会的建议留言。
2024-03-22 19:44:56
278
1
原创 如何实高可用性(HA)的 Nginx 集群
一、使用 LVS 将 Nginx 配置为高可用性集群为了实现高可用性(HA)的 Nginx 集群,可以使用 Linux Virtual Server (LVS) 作为负载均衡器。LVS 是 Linux 内核内置的负载均衡软件,它支持多种调度算法,如轮询、加权轮询等,可以将客户端请求分发到多个服务器,从而提高服务的可用性和扩展性。一、使用 LVS 将 Nginx 配置为高可用性集群1. 准备工作2. 安装和配置 LVSLVS 的配置通常涉及到两个层面:内核层面的 IPVS 配置和用户态的管理工具。
2024-03-22 19:22:58
1086
原创 在微服务架构中如何使用 Nginx 作为入口控制器或者服务网关
一、在 Kubernetes 中使用 Nginx 作为 Ingress Controller:一、在 Kubernetes 中使用 Nginx 作为 Ingress Controller:在微服务架构和容器化部署中,Nginx 常常被用来作为入口控制器(Ingress Controller)或者服务网关。Kubernetes 社区提供了官方的 Nginx Ingress Controller,你可以通过 Helm 或者直接使用 YAML 文件进行部署。
2024-03-22 18:39:00
2037
原创 Nginx常见面试题以及答案
答: Nginx 的优势在于处理静态文件、高并发连接时性能较好,内存消耗低,配置灵活,并且适合作为负载均衡器和反向代理。答: Nginx 的缓存功能可以存储来自后端服务器的响应结果,并在符合一定条件时直接使用缓存内容响应客户端请求,从而减少后端服务器的压力。它的主要优势包括使用较少的资源处理高并发连接、提供高度的可靠性、支持热部署、提供灵活的配置方式以及良好的负载均衡和缓存功能。location 指令可以匹配请求的URI,并根据不同的匹配结果,应用不同的配置,如代理设置、重写规则或返回不同的内容。
2024-03-22 18:14:19
9413
2
原创 什么是局部性原理?
局部性原理描述了一个倾向,即软件在执行过程中所需要访问的数据和指令,倾向于集中在一小块连续的地址空间内。缓存是一种小容量但速度极快的内存,位于CPU和主内存之间,用来临时存储最近或频繁访问的数据,以减少访问主内存的次数,从而提高整体系统性能。空间局部性(Spatial Locality):空间局部性则是指如果一个数据位置被访问,那么其附近的数据位置很可能很快也会被访问。例如,循环中使用的变量就可能展现出很强的时间局部性,因为在循环过程中,这些变量会被连续多次读取或修改。
2024-03-22 16:30:47
551
原创 FeignClient是否可以配置多个拦截器?
1、做法1、做法在Spring Cloud中,是一个声明式的Web服务客户端,让调用远程服务就像调用本地方法一样简单。拦截器可以用于在发送请求之前或者获得响应之后执行一些操作,比如添加公共的Header、记录日志、做一些统计等。在Feign中,拦截器是通过实现接口来定义的。如果你想为添加多个拦截器,可以声明多个的Bean。下面是如何定义和注册多个拦截器的步骤:1、创建多个实现了3、然后,你可以在接口上使用注解的当Feign准备发起请求时,所有注册的。
2024-03-22 16:23:28
1062
原创 什么是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
1058
原创 了解云原生
云原生应用开发一般来说主要是广大程序员的事情,云原生应用并不限于某一门编程语言,无论是Java、Python、Golang、PHP、前端开发等,需要掌握的是Docker与容器化(重点)、Kubernetes基础操作(基本入门就行)、微服务、GitOps等相关的内容,所学内容其实并不多,大部分都是交给工具和平台来搞定。云原生开发工程师除了比较核心的操作系统、网络相关的知识外,还需要掌握云原生时代的“C语言”Golang,同时需要了解Kubernetes编程和源码相关的知识。
2024-03-22 11:26:50
1228
原创 分布式事务协调器Seata
这是因为,Seata 通过全局事务 ID 和事务上下文的传递,确保所有相关的微服务调用都在同一个全局事务的范围内执行。: 在这个例子中,应用 A 和应用 B 的事务是分离的。应用 A 的数据库操作不会参与到应用 B 的全局事务中,因为全局事务的上下文是在调用链的下游应用 B 中创建的。在这种情况下,应用 B 的全局事务将不会自动包含应用 A 的任何数据库操作,因为全局事务的上下文是在应用 B 中创建的。: TM负责定义事务的范围,即开始和结束全局事务的边界,它会在适当的时机向TC注册并报告全局事务的状态。
2024-03-21 16:08:14
920
原创 Mysql面试题以及答案
1 基础1 基础1.1、MySQL有哪些数据库类型?数值类型有包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别表示 1 字节、2 字节、3 字节、4 字节、8 字节的整数类型。1)任何整数类型都可以加上 UNSIGNED 属性,表示无符号整数。2)任何整数类型都可以指定长度,但它不会限制数据的合法长度,仅仅限制了显示长度。包括 VARCHAR、CHAR、TEXT、BLOB。CHAR和VARCHARCHARCHARCHARCHAR(10)CHARCHAR。
2024-03-21 12:01:08
1374
原创 如何设计一个订单超过5分钟不支付就自动取消的设计?都有哪些方案?
当创建一个订单时,将这个订单的ID和过期时间(当前时间加上5分钟)一起放入支持延迟消息的消息队列中(如RabbitMQ的Delayed Message Plugin或者Kafka的延迟队列)。应用层定时器(Application-Level Timer): 在应用层面,使用编程语言内置的定时器API(例如Java的ScheduledExecutorService,或者Python的sched模块)来设置一个5分钟后执行的定时任务,任务的责任是检查和取消订单。接口,可以用来实现内存里的延迟队列。
2024-03-20 22:27:32
1339
原创 Redis面试题以及答案
在缓存系统的设计和运维中,"缓存击穿"、"缓存穿透"和"缓存雪崩"是三种常见的问题场景,它们各自描述了不同的异常情况,可能导致缓存系统的效率下降甚至崩溃。
2024-03-20 21:57:01
1336
原创 SpringCloud面试题以及答案
服务降级: 当出现请求超时、资源不足时(线程或者信号量),会进行服务降级,就是去返回fallback方法的结果。服务熔断: 当失败率(网络故障或者超时造成)达到阈值自动触发降级,是一种特殊的降级。服务隔离: 为隔离的服务开启一个独立的线程,这样在高并发情况下,也不会影响该服务。一般使用线程池实现(还有信号量方式实现)。8、服务降级和服务熔断的区别区别: 降级每个请求都会发送过去,而熔断不一定,达到失败率,请求就不会再去发送了。
2024-03-20 17:21:27
3625
原创 在Spring Boot中如何处理跨域请求(CORS)?
当浏览器执行跨源 HTTP 请求时,根据请求的类型,它可能首先发起一个预请求(preflight request),这是一种使用 OPTIONS 方法的 HTTP 请求,用来检查真实请求是否安全。不过,值得注意的是,确保 Nginx 的 CORS 设置与你的应用安全策略保持一致是非常重要的。如果你的 Web 应用中包含从其他源获取资源的需求(例如,前端应用从不同域名的 API 服务器请求数据),同源策略将默认阻止这种跨源 HTTP 请求。的跨域请求,并且允许特定的 HTTP 方法。
2024-03-20 15:29:34
1122
毕业论文在线虚线社区系统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关注的人