自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

主要作为个人的笔记用,Not For Everyone。

男人又老又丑不要紧,最重要的是要有才华。——秋雅

  • 博客(79)
  • 资源 (37)
  • 收藏
  • 关注

原创 ES6 核心特性及优化的难点

痛点ES5 及之前ES6 解决方案变量提升/全局污染varlet/constthis 绑定混乱需要保存引用或 bind箭头函数继承复杂手动原型操作代码组织困难数据提取繁琐逐一遍历解构赋值回调地域多层嵌套字符串拼接+ 号连接模板字符串属性冲突手动检查Symbol这些特性极大地提升了代码的可读性、可维护性和开发效率。

2026-05-08 15:17:40 217

原创 React生态学习路线

针对 React 生态的学习路径,建议按照**“核心基础 → 必选工具 → 高级模式 → 生态扩展”**的顺序来推进。这样既能避免一开始就被过多选择淹没,又能循序渐进地建立完整的知识体系。

2026-04-03 14:44:52 422

原创 为什么要用“Spec“来驱动AI编程

总的来说,AI编程领域的“spec”远不止是一份文档。它是连接人类意图与AI执行的桥梁,是保障AI生成代码质量与可控性的核心,更是推动软件工程从“人工驱动”迈向“人机协同”新范式的关键。无论你是开发者还是技术管理者,理解和拥抱“spec”,都将是在AI时代保持竞争力的重要一步。

2026-03-13 10:32:48 789

原创 使用开源免费的组件构建一套分布式微服务技术选型推荐

使用开源免费的组件构建一套分布式微服务技术选型推荐

2025-09-18 15:13:10 472

原创 认识Binlog

binlog记录的是数据库变更事件,并不是直接等同于 SQL 语句本身。具体记录的内容取决于你选择的复制格式:是基于语句(SBR),还是基于行(RBR)。如果是UPDATE语句修改了 3 条数据,会将这 3 条数据分别作为独立的事件记录,而会将整个UPDATE语句作为一个事件。在主从复制中,binlog会按照记录的方式将变更数据同步到从库:如果是 RBR,则会逐条同步每一行的数据;如果是 SBR,则是一次性同步整个 SQL 语句。

2025-03-03 17:22:06 815

原创 Java技术面试(一面)

如何面试别人

2024-08-16 16:54:26 1431 1

原创 总是给数据库表字段设置默认值的好处

通过设置字段不能为空,可以确保每条记录都包含必要的数据,从而保证了数据的完整性。例如,在用户表中,用户名字段不能为空可以确保每个用户都有一个有效的用户名。避免空值问题在数据库查询和数据处理过程中,空值(NULL)可能会导致各种问题,如计算错误、逻辑错误等。通过设置默认值,可以避免这些潜在问题,使数据处理更加稳定和可靠。通过设置默认值,可以确保在缺少明确值时,字段总是有一个一致的值。例如,如果性别字段的默认值设置为'未指定',就不会出现性别为空的情况,从而保证数据的一致性。优化性能。

2024-06-19 19:18:58 1578 2

原创 自定义线程池,实现父线程MDC的自动拷贝

以上两个Wapper,包括这个匿名类线程池,不难看出他们都是代理类,应用了代理模式进行增强。这个匿名类线程池在execute前,把线程用MDCRunnable包装了一个,于是线程就有了自动拷贝MDC的能力,目前这是最简单的一种方式。

2024-05-31 23:52:23 700

原创 Java异常体系

ThrowableException(受检查异常)(非检查异常)Error。

2024-05-31 15:15:13 601

原创 TransmittableThreadLocal原理

TransmittableThreadLocal(简称TTL)是阿里巴巴开源的一个Java库,用于解决线程池中线程本地变量传递的问题。其底层原理主要是基于Java的机制并对其进行扩展,以支持在父子线程间以及线程池中任务切换时,能够传递和继承变量的值。: TTL继承自但与不同的是,TTL解决了在已经存在的线程(如线程池中的线程)之间传递值的问题。: 对于异步任务,TTL确保了即使在异步执行的上下文中,父线程的状态也能被正确地传递给处理该任务的子线程。

2024-05-30 22:57:30 1567

原创 Java的序列化接口

当父类实现了接口并且定义了字段,子类是否需要再定义一个字段,取决于具体需求。尽管子类可以继承父类的,但为了确保子类的序列化版本一致性,建议在子类中显式定义字段。这不仅能避免由于自动生成导致的潜在问题,还能提供明确的版本控制。

2024-05-27 14:30:58 570

原创 SpringBoot自动化配置原理

创建配置类定义一个新的配置类,使用注解并包含@Bean方法。添加条件注解根据需要使用各种条件注解来控制配置类的加载。注册自动配置类在文件中注册新的自动配置类。Spring Boot 的自动化配置利用注解及其背后的机制(包括文件和条件注解)实现了在应用启动时自动装配 bean。通过这种方式,开发者可以专注于业务逻辑,而无需手动配置各种基础设施组件。

2024-05-26 00:05:29 633

原创 Spring Boot 如何使用 AOP 防止重复提交

首先,创建一个自定义注解。// 可以定义属性以配置注解,例如设置过期时间等。

2024-05-25 23:44:27 527

原创 在Spring Boot中Redis实现事务有哪些方式?

以上三种方式都可以在Spring Boot中实现对Redis的事务支持。选择哪种方式取决于具体的业务需求和使用场景。通常,使用Spring Data Redis的SessionCallback是较为直接和简便的方法,但对于更复杂的需求,可以考虑使用Lua脚本。

2024-05-20 16:57:11 835

原创 URL的写法建议

在 URL 的定义中,通常不建议使用驼峰写法(CamelCase),因为 URL 应该尽量保持易于阅读和输入。URL 中包含的字母大小写可能会导致访问错误或混淆,因为不是所有的服务器或网络设备都会把 URL 视为大小写不敏感。因此,推荐的好的写法是使用全部小写并通过短划线来分隔单词。这样不仅避免了大小写敏感的问题,也使得 URL 更加清晰易读。

2024-05-11 15:05:58 1820

原创 SpringBoot整合MyBatis步骤

在Spring Boot中整合MyBatis可以通过几种方式实现,主要包括使用官方的MyBatis Spring Boot Starter,或者通过手动配置。这是最简单的方式,因为Spring Boot Starter为我们自动配置了大部分的MyBatis设置。

2024-05-09 19:57:54 420

原创 SpringBoot如何实现动态数据源?

接下来,你需要实现,以便根据当前上下文确定应使用哪个数据源。@Override。

2024-05-09 18:55:06 822 1

原创 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 323

原创 Kubernetes如何实现零停机部署(zero-downtime deployment)?

在 Spring Boot 应用中实现优雅关闭(Graceful Shutdown),可以确保应用在停止之前有机会处理完当前正在执行的任务。通过上述的配置和代码实现,你的 Spring Boot 应用将能够在接收到停止信号时,优雅地完成正在处理的请求,然后再关闭。为了确保服务间的调用不会在更新过程中失败,你可能还需要考虑实现客户端重试机制和断路器模式,这些可以通过 Spring Cloud 的组件如。生命周期钩子可以用来执行关闭前的操作,例如稍微延迟关闭,以确保服务有足够的时间完成请求处理。

2024-04-19 17:35:33 1490

原创 Docker学习

compose目前已经完全支持Linux、Mac Os和Windows,在我们安装Compose之前,需要先安装docker。下面我们以编译好的二进制包方式安装在Linux系统中。# 设置文件可执行权限# 查看版本信息。

2024-04-09 23:11:55 1772

原创 Mysql索引失效的情况

MySQL索引的使用能够显著提高查询效率,但在某些情况下,索引可能不会被利用,这就是所谓的索引失效。理解和避免这些情况有助于优化查询性能。

2024-03-31 23:16:05 818

原创 HashMap、LinkedHashMap、TreeMap

HashMap实现了Map接口,并且其底层是基于哈希表(散列表/数组)的数据结构。它使用键(Key)对象的哈希码来确定键值对(Entry)存储的位置。在Java 1.8及以后,当链表长度大于一定阈值(默认是8)时,链表会被转换为红黑树来提高搜索效率。

2024-03-31 21:52:15 3097

原创 12-Factor应用方法论

12-Factor应用方法论侧重于软件开发的最佳实践,确保了应用在任意云平台上都能有良好的可迁移性和减小与底层硬件的耦合度。12-Factor应用方法论是由Heroku的创始人Adam Wiggins提出的,旨在指导开发者构建应用以适应现代云平台,实现高的可移植性、伸缩性和可维护性。应用的进程应该能够迅速启动及优雅停止,从而实现更加快速的部署和弹性的伸缩性。后端服务如数据库、消息队列等,应该可以随时被连接或断开,而不影响应用的运行。应用应该自己提供服务对外的HTTP服务,而不依赖于外部的web服务器。

2024-03-31 17:52:28 743

原创 SpringCloud网关如何做限流?

是一个指向Spring Bean的引用,这个Bean需要实现接口,用于决定限流规则的作用对象(如用户、IP等)。以下是一个按请求路径进行限流的@Bean创建一个Zuul过滤器来实现限流逻辑,你可以使用Hystrix来控制并发量。// 每秒100个请求的速率@Override@Overridereturn -4;// 设置为高优先级@Override// 永远开启过滤@Overrideif (!// 限流发生时,拒绝访问// 返回429状态码// 设置返回的内容。

2024-03-30 11:25:32 1565

原创 SpringBoot启动过程

由于它们运行的时间点较早,容器可能还没有完全初始化,许多Bean可能还未被创建和注册,因此在这些组件中使用@Autowired注入其他的Bean通常是不可行的或者说行为是不确定的。这个列表提供了Spring Boot启动过程的一个相当详尽的视角,但是实际上在实际的应用中,基于不同的配置和自定义的组件,还可能涉及更多的步骤和细节。,它直接操作ApplicationContext的配置,这发生在容器的Bean定义被加载之前,因此此时容器里面还没有Bean可以被注入。

2024-03-30 10:50:20 1123

原创 为什么响应式编程无法从Threadlocal里获取数据?

响应式编程模型(如 Spring WebFlux)和传统的 Servlet 基于线程的模型(如 Spring MVC)在处理请求的方式上有显著不同。在传统的 Spring MVC 应用中,每个请求都是由一个固定的线程处理的,因此可以便利地使用。然而,在响应式编程模型中,因为处理流程可能在多个线程之间切换,所以无法保证整个请求处理链在同一个线程中执行。是跟随响应式流的,并且可以在响应式链中的不同操作和不同线程间保持数据的连贯性。的数据是绑定到特定线程的,当请求处理跳转到新的线程时,原线程的。

2024-03-28 10:22:26 944

原创 SpringBoot多模块应用的模块设计

启动模块,所有的Congfig类也建议放在这里。为什么是所有的Config都放在这里,我认为放在这里使得配置类更加的集中,更加的好管理,也能更好的梳理配置,虽然有些配置也可以跟着自己的模块走,但是我还是觉得放在这里好些。有更多体会的建议留言。

2024-03-22 19:44:56 570 1

原创 Nginx常见面试题以及答案

答: Nginx 的优势在于处理静态文件、高并发连接时性能较好,内存消耗低,配置灵活,并且适合作为负载均衡器和反向代理。答: Nginx 的缓存功能可以存储来自后端服务器的响应结果,并在符合一定条件时直接使用缓存内容响应客户端请求,从而减少后端服务器的压力。它的主要优势包括使用较少的资源处理高并发连接、提供高度的可靠性、支持热部署、提供灵活的配置方式以及良好的负载均衡和缓存功能。location 指令可以匹配请求的URI,并根据不同的匹配结果,应用不同的配置,如代理设置、重写规则或返回不同的内容。

2024-03-22 18:14:19 10246 2

原创 什么是局部性原理?

局部性原理描述了一个倾向,即软件在执行过程中所需要访问的数据和指令,倾向于集中在一小块连续的地址空间内。缓存是一种小容量但速度极快的内存,位于CPU和主内存之间,用来临时存储最近或频繁访问的数据,以减少访问主内存的次数,从而提高整体系统性能。空间局部性(Spatial Locality):空间局部性则是指如果一个数据位置被访问,那么其附近的数据位置很可能很快也会被访问。例如,循环中使用的变量就可能展现出很强的时间局部性,因为在循环过程中,这些变量会被连续多次读取或修改。

2024-03-22 16:30:47 874

原创 FeignClient是否可以配置多个拦截器?

1、做法1、做法在Spring Cloud中,是一个声明式的Web服务客户端,让调用远程服务就像调用本地方法一样简单。拦截器可以用于在发送请求之前或者获得响应之后执行一些操作,比如添加公共的Header、记录日志、做一些统计等。在Feign中,拦截器是通过实现接口来定义的。如果你想为添加多个拦截器,可以声明多个的Bean。下面是如何定义和注册多个拦截器的步骤:1、创建多个实现了3、然后,你可以在接口上使用注解的当Feign准备发起请求时,所有注册的。

2024-03-22 16:23:28 1517

原创 什么是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 1402

原创 了解云原生

云原生应用开发一般来说主要是广大程序员的事情,云原生应用并不限于某一门编程语言,无论是Java、Python、Golang、PHP、前端开发等,需要掌握的是Docker与容器化(重点)、Kubernetes基础操作(基本入门就行)、微服务、GitOps等相关的内容,所学内容其实并不多,大部分都是交给工具和平台来搞定。云原生开发工程师除了比较核心的操作系统、网络相关的知识外,还需要掌握云原生时代的“C语言”Golang,同时需要了解Kubernetes编程和源码相关的知识。

2024-03-22 11:26:50 1796

原创 分布式事务协调器Seata

这是因为,Seata 通过全局事务 ID 和事务上下文的传递,确保所有相关的微服务调用都在同一个全局事务的范围内执行。: 在这个例子中,应用 A 和应用 B 的事务是分离的。应用 A 的数据库操作不会参与到应用 B 的全局事务中,因为全局事务的上下文是在调用链的下游应用 B 中创建的。在这种情况下,应用 B 的全局事务将不会自动包含应用 A 的任何数据库操作,因为全局事务的上下文是在应用 B 中创建的。: TM负责定义事务的范围,即开始和结束全局事务的边界,它会在适当的时机向TC注册并报告全局事务的状态。

2024-03-21 16:08:14 1126

原创 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 1548

原创 如何设计一个订单超过5分钟不支付就自动取消的设计?

当创建一个订单时,将这个订单的ID和过期时间(当前时间加上5分钟)一起放入支持延迟消息的消息队列中(如RabbitMQ的Delayed Message Plugin或者Kafka的延迟队列)。应用层定时器(Application-Level Timer): 在应用层面,使用编程语言内置的定时器API(例如Java的ScheduledExecutorService,或者Python的sched模块)来设置一个5分钟后执行的定时任务,任务的责任是检查和取消订单。接口,可以用来实现内存里的延迟队列。

2024-03-20 22:27:32 1728

原创 Redis面试题以及答案

在缓存系统的设计和运维中,"缓存击穿"、"缓存穿透"和"缓存雪崩"是三种常见的问题场景,它们各自描述了不同的异常情况,可能导致缓存系统的效率下降甚至崩溃。

2024-03-20 21:57:01 1690

原创 SpringCloud面试题以及答案

服务降级: 当出现请求超时、资源不足时(线程或者信号量),会进行服务降级,就是去返回fallback方法的结果。服务熔断: 当失败率(网络故障或者超时造成)达到阈值自动触发降级,是一种特殊的降级。服务隔离: 为隔离的服务开启一个独立的线程,这样在高并发情况下,也不会影响该服务。一般使用线程池实现(还有信号量方式实现)。8、服务降级和服务熔断的区别区别: 降级每个请求都会发送过去,而熔断不一定,达到失败率,请求就不会再去发送了。

2024-03-20 17:21:27 4984

原创 在Spring Boot中如何处理跨域请求(CORS)?

当浏览器执行跨源 HTTP 请求时,根据请求的类型,它可能首先发起一个预请求(preflight request),这是一种使用 OPTIONS 方法的 HTTP 请求,用来检查真实请求是否安全。不过,值得注意的是,确保 Nginx 的 CORS 设置与你的应用安全策略保持一致是非常重要的。如果你的 Web 应用中包含从其他源获取资源的需求(例如,前端应用从不同域名的 API 服务器请求数据),同源策略将默认阻止这种跨源 HTTP 请求。的跨域请求,并且允许特定的 HTTP 方法。

2024-03-20 15:29:34 1344

原创 过滤器 拦截器 Aop的区别

在 Spring 框架中,过滤器(Filter)、拦截器(Interceptor)和切面(AOP)都是用于在应用程序的不同层次上进行横切关注点(cross-cutting concerns)处理的技术。对于登录拦截这样的场景,拦截器通常是更好的选择,因为它提供了与 Spring MVC 紧密集成的方式,允许你在控制器方法处理之前执行逻辑,并根据需要控制是否继续处理请求或重定向到登录页面。将会拦截所有路径的请求,但排除了登录页面和静态资源的路径。这样的设置使得拦截器成为实现登录拦截的理想选择。

2024-03-20 15:02:47 1269

原创 SpringBoot面试题及答案

总的来说,虽然 Spring Boot 提供了强大的自动扫描和自动配置能力,但在一些情况下,手动导入配置类或组件类可以提供额外的控制和灵活性。被导入的类不在自动扫描的路径下。需要控制配置类的加载顺序。仅在特定条件下加载某些配置或组件。需要明确表达配置类之间的依赖关系。组织代码结构,使之更清晰和模块化。使用@Import注解是 Spring 强大功能的体现,它允许开发者根据实际需求选择最适合的配置管理方式。

2024-03-20 13:58:27 1051

deleted、deleted

deleted、deleted

2011-11-29

deleted、deleted

deleted、deleted

2009-09-22

deleted、deleted

deleted、deleted

2009-06-20

deleted、deleted

deleted、deleted

2009-06-20

deleted、deleted

deleted、deleted

2009-09-22

deleted、deleted

deleted、deleted

2009-06-20

deleted、deleted

deleted、deleted

2009-06-20

deleted、deleted

deleted、deleted

2009-05-12

deleted、deleted

deleted、deleted

2008-06-16

deleted、deleted

deleted、deleted

2010-06-14

deleted、deleted

deleted、deleted

2010-06-14

deleted、deleted

deleted、deleted

2010-05-12

deleted、deleted

deleted、deleted

2025-01-07

deleted、deleted

deleted、deleted

2009-09-22

deleted、deleted

deleted、deleted

2009-09-22

deleted、deleted

deleted、deleted

2009-09-26

deleted、deleted

deleted、deleted

2009-09-26

deleted、deleted

deleted、deleted

2009-09-26

deleted、deleted

deleted、deleted

2009-09-26

deleted、deleted

deleted、deleted

2009-12-16

deleted、deleted

deleted、deleted

2009-12-16

deleted、deleted

deleted、deleted

2009-12-16

deleted、deleted

deleted、deleted

2010-01-08

deleted、deleted

deleted、deleted

2010-03-15

友立GIF5.0安装动态图片处理软件

处理gif动态图片,你可以要他来处理,生成动态图片,放到QQ里当表情!

2009-09-22

daemon虚拟光驱,好用

这个好用,我一直再用的奥!也没有让输入码,不知道是不是本来就是免费的。反正这个是安装可使用!

2009-09-22

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

TA关注的人

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