标签: 后端相关

晚风 | 2024-06-18 | 后端相关Java

盘点历届 Java 语言的关键字,一定有你不认识的

在 Java 编程语言中,关键字是具有特殊含义的保留字,它们用于表示语言中的特定功能和操作。 了解和正确使用这些关键字对于编写高效、可靠的 Java 程序至关重要。 今天通过这篇文章,我们一起来了解一下相关的关键字以及含义。 一、关键字汇总 二、访问控制 ✓表示可以访问,x表示不能访问 2.1、private(私有化) private 关键字是访问控制修饰符,可以应用于内部类、方法或类的变量字段。只能在声明 private(内部)类、方法或字段的类中引用这些类、方法或字段。在类的外部或者对于子类而言,它们是不可见的。 2.2、default(缺省) default:关键字是可以应用于类、方法或类的变量字段的访问控制修饰符。当没有指定类的访问权限的时...

 647 |  0 |  0 后端相关Java

晴天 | 2024-06-17 | 后端相关Spring 全家桶

一张长图透彻理解SpringBoot 启动原理,架构师必备知识,不为应付面试!

虽然Java程序员大部分工作都是 CRUD ,但是工作中常用的中间件必须和Spring集成,如果不知道Spring的原理,很难理解这些中间件和框架的原理。 一张长图透彻解释 Spring启动顺序 Timeout重构 (2).jpg 测试对Spring启动原理的理解程度 我举个例子,测试一下,你对Spring启动原理的理解程度。 1. Rpc框架和Spring的集成问题。Rpc框架何时注册暴露服务,在哪个Spring扩展点注册呢?init-method 中行不行? 2. MQ 消费组和Spring的集成问题。MQ消费者何时开始消费,在哪个Spring扩展点”注册“自己?init-method 中行不行? 3. SpringBoot 集成Tomcat问题。如果出现已开启Http流量,Spring还未启动完成,怎么办?Tomcat何时开启端口,对外服务? SpringBoot项目常见的流量入口无外乎 Rpc、Http、MQ ...

 581 |  1 |  0 后端相关Spring 全家桶

青木 | 2024-06-17 | 后端相关Spring 全家桶

面试官:说说Spring事务传播机制?

Spring 事务传播机制是指,包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。 既然是“事务传播”,所以事务的数量应该在两个或两个以上,Spring 事务传播机制的诞生是为了规定多个事务在传播过程中的行为的。比如方法 A 开启了事务,而在执行过程中又调用了开启事务的 B 方法,那么 B 方法的事务是应该加入到 A 事务当中呢?还是两个事务相互执行互不影响,又或者是将 B 事务嵌套到 A 事务中执行呢?所以这个时候就需要一个机制来规定和约束这两个事务的行为,这就是 Spring 事务传播机制所解决的问题。 Spring 事务传播机制有哪些? Spring 事务传播机制可使用 @Transactional(propagation=Propagation.REQUIRED) 来定义,Spring 事务传播机制的级别包含以下 7 种: 1. Propagation.REQUIRED:默认的事务传播级别,它表示如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 2. Propagation.SUPPORTS:如果当前存在事务,则加入该事务;如果...

 553 |  0 |  0 后端相关Spring 全家桶

OOM | 2024-06-14 | 后端相关Spring 全家桶

用 Arthas 定位 Spring Boot 接口的超时问题,让应用起飞~

背景 公司有个渠道系统,专门对接三方渠道使用,没有什么业务逻辑,主要是转换报文和参数校验之类的工作,起着一个承上启下的作用。 最近在优化接口的响应时间,优化了代码之后,但是时间还是达不到要求;有一个诡异的100ms左右的耗时问题,在接口中打印了请求处理时间后,和调用方的响应时间还有差了100ms左右。比如程序里记录150ms,但是调用方等待时间却为250ms左右。 下面记录下当时详细的定位&解决流程(其实解决很简单,关键在于怎么定位并找到解决问题的方法) 定位过程 分析代码 渠道系统是一个常见的spring-boot web工程,使用了集成的tomcat。分析了代码之后,发现并没有特殊的地方,没有特殊的过滤器或者拦截器,所以初步排除是业务代码问题 分析调用流程 出现这个问题之后,首先确认了下接口的调用流程。由于是内部测试,所以调用流程较少。 Nginx -反向代理  渠道系统 公司是云服务器,网络走的也是云的内网。由于不明确问题的原因,所以用排除法,首先确认服务器网络是否有问题。 先确认发送端到 Nginx Host

 621 |  1 |  0 后端相关Spring 全家桶

iron Man | 2024-06-12 | 后端相关Spring 全家桶

网易面试:SpringBoot如何开启虚拟线程?

虚拟线程(Virtual Thread)也称协程或纤程,是一种轻量级的线程实现,与传统的线程以及操作系统级别的线程(也称为平台线程)相比,它的创建开销更小、资源利用率更高,是 Java 并发编程领域的一项重要创新。 PS:虚拟线程正式发布于 Java 长期支持版(Long Term Suort,LTS)Java 21(也就是 JDK 21)。 虚拟线程是一种在 Java 虚拟机(JVM)层面实现的逻辑线程,不直接和操作系统的物理线程一一对应,因此它可以减少上下文切换所带来的性能开销。 操作系统线程、普通线程(Java 线程)和虚拟线程的关系如下: 1.虚拟线程使用 虚拟线程的创建有以下 4 种方式: 1. Thread.startVirtualThread(Runnable task) 2. Thread.ofVirtual().unstarted(Runnable task) 3. Thread.ofVirtual().fa...

 533 |  0 |  0 后端相关Spring 全家桶

花小染 | 2024-06-11 | Redis后端相关

百度面试:如何用Redis实现限流?

高并发系统有三大特征:限流、缓存和熔断,所以限流已经成为当下系统开发中必备的功能了。那么,什么是限流?如何实现限流?使用 Redis 能不能实现限流?接下来我们一起来看。 1.什么是限流? 限流是指在各种应用场景中,通过技术和策略手段对数据流量、请求频率或资源消耗进行有计划的限制,以避免系统负载过高、性能下降甚至崩溃的情况发生。限流的目标在于维护系统的稳定性和可用性,并确保服务质量。 使用限流有以下几个好处: 1. 保护系统稳定性 :过多的并发请求可能导致服务器内存耗尽、CPU 使用率饱和,从而引发系统响应慢、无法正常服务的问题。 2. 防止资源滥用 :确保有限的服务资源被合理公平地分配给所有用户,防止个别用户或恶意程序过度消耗资源。 3. 优化用户体验 :对于网站和应用程序而言,如果任由高并发导致响应速度变慢,会影响所有用户的正常使用体验。 4. 保障安全 :在网络层面,限流有助于防范 DoS/DDoS 攻击,降低系统遭受恶意攻击的风险。 5. 运维成本控制 :合理的限流措施可以帮助企业减少不必要的硬件投入,节省运营成本。 ...

 488 |  0 |  0 Redis后端相关

大牛猫 | 2024-06-10 | 后端相关Spring 全家桶

公司禁止在 SpringBoot 中使用 @Autowired 注解,为什么?

前言 Spring 官方已不推荐使用 Autowired 字段/属性注入 bean,一些大公司的新项目也明令禁止使用了。 说明 最近公司升级框架,由原来的 spring framework 3.0 升级到 5.0,然后写代码的时候突然发现 idea 在属性注入的 @Autowired 注解上给出警告提示,就像下面这样的,也是挺懵逼的,毕竟这么写也很多年了。 ❝Field injection is not recommended ❞ 查阅了相关文档了解了一下,原来这个提示是 spring framework 4.0 以后开始出现的,spring 4.0 开始就不推荐使用属性注入,改为推荐构造器注入和 setter 注入。 下面将展示了 spring 框架可以使用的不同类型的依赖注入,以及每种依赖注入的适用情况。 依赖注入的类型 尽管针对 spring framework 5.1.3 的文档只定...

 529 |  0 |  0 后端相关Spring 全家桶

蔡文姬 | 2024-06-10 | 后端相关

如何设计一个秒杀系统?

前言 如何从整体角度,去设计一个秒杀系统。秒杀系统主要有这几个特征: 瞬时间的流量特别高。过了秒杀的时间,流量就会瞬时结束 大批量用户同时请求极少数商品 在秒杀时间前,可能会有很多请求过来。比如在11点抢票开始,10点59分你可能会提前去刷新页面请求。 所以特意写篇文章给大家说说。秒杀系统,应该满足哪些方面: 1. 满足高并发,快速响应 秒杀系统的瞬时流量特别大,为了防止系统被打垮了,一般要 做压测 。测清楚你的系统支撑的最大并发是多少,确定系统的瓶颈点,让自己心里有底,最好预防措施。 压测完要分析整个调用链路,性能可能出现问题是网络层(如带宽)、Nginx层、服务层、还是数据路缓存等中间件等等。 要快速响应,前期还可以做一些优化。比如 页面资源静态化、缓存热数据预加载、 CDN加速 等等。 2. 防止超卖 做秒杀系统,最主要就是防止超卖问题。所以是要 加 分布式锁 ...

 370 |  0 |  0 后端相关

布朗熊 | 2024-06-07 | 后端相关

如何防止线上事故?从一次流水号重复引发的故障说起

最近我负责的系统出了一次生产事故,这次事故竟然是因为流水号重复导致的。今天来给大家分享一下。 1.问题背景 这个流水号的使用场景是上游 系统调用 下游接口时传入一个唯一 ID,流水号这个参数在联调或定位问题时很方便。 我们系统中的流水号是一个 32 位的字符串,为了能让上下游系统联动,下游系统接到上游传过来的这个 ID 后,会取前 23 位,再自己拼接剩下 9 位,传到自己要调用的下游系统,这样整个调用链通过请求 ID 就可以快速串起来。 2.流水号使用 在我的系统中,自己定义流水号的后 9 位,为了能够更清晰地从流水号中看到请求链上的系统调用关系,我们把流水号后 9 位定义成了系统编号(3位) + 子系统编号(2位) + 自增序列(4 位) 。 如下图,我的系统生成的流水号前 23 位来自上游,后 9 位是 001(系统编码) + 01(子系统编码) + (0 9999自增)。 ![图片](https://s...

 392 |  0 |  0 后端相关

渣渣辉 | 2024-06-07 | 后端相关Java

Java 泛型编程所说的类型擦除到底是什么?

什么是泛型 在 Java 中,不会泛型,寸步难行。泛型可能是一个 Java 初学者需要攻克的第一个难点。随便跟着一门教程或 任何一本《Java入门到精通》,前面关于变量、关键字、语法(if、while、for等等)这些基本上是一看就懂,而当内容来到泛型的时候,大部分人可能就突然感觉没那么轻松了。 如果没有编程经验的话,可能需要练习一段时间才能完全掌握泛型编程概念和技巧,这么说吧,有些人写了好几年代码,碰到泛型的时候可能还是不太熟练。 说到Java泛型,最明显的标志就是 < 。 泛型是什么呢?通俗的说就是一个类型是没有固定类型的,即可以是Integer 也可以是 Long,还可能是你自定义的类。 “泛型使类型(类和接口)能够在定义类、接口和方法时成为参数。与方法声明中使用的更熟悉的 形式参数 非常相似,类型参数为您提供了一种通过不同输入重复使用相同代码的方法。区别在于形式参数的输入是值,而类型参数的输入是类型。 ” 例如在类定义中使用泛型,最常见的 ArrayList public class ArrayList<E  extends

 417 |  0 |  0 后端相关Java

雨馨 | 2024-06-06 | 后端相关Java

Java线程池的实现原理及其在业务中的最佳实践

一、线程池简介 1.什么是线程池? 线程池是一种用于管理和复用线程的机制。 线程池的核心思想是预先创建一定数量的线程,并把它们保存在线程池中,当有任务需要执行时,线程池会从空闲线程中取出一个线程来执行该任务。任务执行完毕后,线程不是被销毁,而是返还给线程池,可以立即或稍后被再次用来执行其他任务。这种机制可以避免因频繁创建和销毁线程而带来的性能开销,同时也能控制同时运行的线程数量,从而提高系统的性能和资源利用率。 线程池的主要组成部分包括工作线程、任务队列、线程管理器等。线程池的设计有助于优化多线程程序的性能和资源利用,同时简化了线程的管理和复用的复杂性。 2.线程池有什么好处? 减少线程创建和销毁的开销,线程的创建和销毁需要消耗系统资源,线程池通过复用线程,避免了对资源的频繁操作,从而提高系统性能; 控制和优化系统资源利用,线程池通过控制线程的数量,可以尽可能地压榨机器性能,提高系统资源利用率; 提高响应速度,线程池可以预先创建线程且通过多线程并发处理任务,提升任务的响应速度及系统的并发性能; 二、Java...

 526 |  0 |  0 后端相关Java