- 博客(242)
- 收藏
- 关注
原创 Java面试题及答案(2025)
当线程 A 持有独占锁a,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b,并尝试获取独占锁 a 的情况下,就会发生 AB 两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出来。
2025-01-04 16:34:47
852
原创 SpringBoot 将 jar 包和 lib 依赖分离,Dockerfile 构建镜像
Spring Boot 是一个非常流行的 Java 开发框架,它提供了很多便利的功能,例如自动配置、快速开发等等。在使用 Spring Boot 进行开发时,我们通常会使用 Maven 或 Gradle 进行项目构建。本文将为您介绍如何使用 Maven 将 Spring Boot 项目打包成可执行的 JAR 文件,并将 JAR 文件和依赖库分离,以便于在 Docker 容器中部署。
2025-01-04 16:19:35
151
原创 三万字 SpringBoot 日志全解析
日志,是开发中熟悉又陌生的伙伴,熟悉是因为我们经常会在各种场合打印日志,陌生是因为大部分时候我们都不太关心日志是怎么打印出来的,因为打印一条日志,在我们看来是一件太平常不过的事情了,特别是在宇宙第一框架Springboot的加持下,日志打印是怎么工作的就更没人关注了。但是了解日志框架怎么工作,以及学会Springboot怎么和Log4j2或Logback等日志框架集成,对我们扩展日志功能以及优雅打印日志大有好处,甚至在有些场景,还能通过调整日志的打印策略来提升我们的系统吞吐量。
2025-01-04 16:18:59
647
原创 Mybatis-flex代替繁琐的JPA,撸码更快乐了
最近在新的SpringBoot项目中采用JPA来作为数据库的持久层。刚开始得益于Spring框架自带,IDEA也有丰富的支持;可以自行匹配数据库字段,接口中方法可以直接提示,支持JPQL,原生SQL等方式。写起来也是非常顺手。但是当业务中有一些复杂一点的需求,在JPA中实现就非常麻烦,且不直观。本文不是批判JPA和Mybatis-plus的不足,也不会来对比他们的写法优劣。主要是介绍从编码生产力方面解决我日常写代码的一些问题和带来哪些便利。
2025-01-04 16:18:22
736
原创 终极 Nginx 配置指南(全网最详细)
但是如果你需要追求更高的性能,那么可以添加其他的优化,只需要根据一些搜索到的文章内容copy过来就行了,nginx主要还是配置多一些,但是理解了整体结构和脉络的话,其实就还是蛮简单的。这里就不做过多的讲解了。一般来说,都需要将动态资源和静态资源分开,将静态资源部署在Nginx上,当一个请求来的时候,如果是静态资源的请求,就直接到nginx配置的静态资源目录下面获取资源,如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给后台应用去处理,从而实现动静分离。)进行匹配,对特定的请求进行处理。
2025-01-04 16:17:51
3754
原创 公司弃用 Nginx,选择这款工具
今天,我们很高兴有机会在此介绍 Pingora,这是我们使用 Rust 在内部构建的新 HTTP 代理,它每天处理超过 1 万亿个请求,提高了我们的性能,并为 Cloudflare 客户带来了许多新功能,同时只需要我们以前代理基础架构的三分之一的 CPU 和内存资源。随着 Cloudflare 规模的扩大,我们已经超越了 NGINX 的处理能力。多年来它一直运作良好,但随着时间的推移,它在我们规模上的局限性意味着我们有必要构建一些新的东西。
2025-01-04 16:17:16
742
原创 MySQL 官宣:支持读写分离了!!
我们一直在等待的 MySQL 读/写分离功能 现在终于可以使用了!在规模上,我们在副本之间分配读取,但这必须在应用程序中以某种方式进行管理:指向在某个地方写入并在其他地方读取。在 MySQL 8.2 中,现在能够识别读取和写入,并将它们路由到主实例(如果是 InnoDB 集群),或者路由到异步复制源以进行写入,将其路由到辅助实例或副本以进行读取。。
2025-01-04 16:16:46
270
原创 这才是JDK推荐的线程关闭方式
不推荐强制销毁线程,会导致资源无法被释放,进行中请求无法正常处理完,导致业务数据处于不可知的状态。Java推荐优雅退出线程。业务层可以使用字段标记,定期检查是否需要退出任务。Thread.interrupt中断目标线程、isInterrupted查询中断位标记。使用Thread.interrupt处理中断也可以优雅退出,但需要上下层堆栈都要关注中断,不得吞掉中断。
2025-01-04 16:07:20
758
原创 分享一次 ShardingJDBC 亿级数据分表真实经验
从入职以来写了一年的业务代码,突然接到来自领导的技术需求,说要给我们的借款、还款申请单分表。查看了一下借款表,只有几千万数据,再看还款表已经两亿多了,为了提高数据查询效率,降低数据库的压力。确实可以考虑分表了。另外......这是入职一年以来第一个非业务需求!回想在进公司之前,面试的时候经常会有问到分库分表的面试官,问的完全不知道怎么回答。因为没有过实际的经验,那时候总感觉分库分表是个很难很难,很高大上的东西。
2025-01-04 16:06:40
1014
原创 如何用 Java Stream 写出 “高效率、干净、简洁” 的代码?
(flatMap 用于将流中的一个元素转换为一个流,然后将所有转换后的流组装成一个流)如下代码为:将 lists 流中的等于 1 的元素过滤出来,并打印结果。Java 8 添加了一个新的抽象称为流 Stream API,可以让你以一种声明的方式处理数据。在并行流中,流会将集合分成多个子集,然后多线程并行处理这些子集中的元素。在串行流中,每个元素都是由同一个线程处理的,因此操作是顺序执行的。映射操作,可以对流中的每个元素提取并转换。迭代操作,可以用于遍历流中的每一个元素。操作,可以将流中的元素映射为对应。
2025-01-04 16:05:53
298
原创 极简版Java敏感词检测工具
/ 实例:更多检测特性// 1.邮箱检测(邮箱等个人信息,默认未启用。String text = "楼主好人,邮箱 sensitiveword@xx.com";System.out.println("是否存在邮箱:" + wordList.toString());// 2.连续数字检测(一般用于过滤手机号/QQ等广告信息,默认未启用。text = "你懂得:12345678";// 默认检测 8 位。
2025-01-04 16:05:17
323
原创 工厂+策略模式的妙用~
可以看到,业务逻辑那里,通过调用工厂的getStrategy方法传入用户类型来获取具体策略,然后调用策略的buy方法就好了,这样的好处就是,将来不管怎么扩展,我们都不需要更改这里的代码,只需要,继续实现策略接口,然后实现具体的业务逻辑就好啦,是不是很优雅呢~我相信聪明的小伙伴们,一眼就能发现弊端,虽然业务逻辑进行了封装,但是,这也注入太多策略了,而且,还是不能避免使用大量的 if else,那么这样还需要如何进行优化呢?
2025-01-04 16:04:38
348
原创 难道你还在为短链跳转烦恼?
短链跳转是一种通过将长链接转换为短链接的方式,以便在互联网上进行链接共享和传播的技术。通常情况下,长链接可能由于包含大量参数或者较长的路径而显得复杂且不易记忆,而短链则是将原始长链接通过特定算法转换为较短的链接,使得它更容易分享、传播和展示。短链跳转服务通常由第三方提供,用户可以将需要缩短的长链接提交到该服务,服务会返回一个短链接,当用户访问这个短链接时,会被重定向到原始的长链接地址。这种服务通常还提供了统计功能,可以跟踪短链接被点击的次数、访问来源等信息,帮助用户了解链接的传播效果。
2025-01-04 16:03:43
889
原创 顶级 Javaer 常用的 14 个类库
事实上,它的抽象接口,可以实现Avro、Protobuf、CSV等格式数据的加载,但我们最长使用的,就是它的JSON解析。这些类库,是我在工作中最长用到的,也是关注最多的。其实,一个Spring就够大家折腾的了,但Spring的功能有时候仍然不够,因为它本身更多的是一个整合型的工具,我们不得不关注到更底层的技术。它的测量精度非常高,可达纳秒级别。其实我是有私心的,也只有在使用Netty开发一些网络应用的时候,我才能理直气壮的不引入Spring这个目前变得越来越重的家伙,还我一个清清爽爽的世界。
2025-01-04 15:59:57
991
原创 毕业入职腾讯,工作三年薪资待遇变化
对于写操作,ConcurrentHashMap 使用 CAS 操作来实现无锁的更新,这是一种乐观锁的实现,因为它假设没有冲突发生,在实际更新数据时才检查是否有其他线程在尝试修改数据,如果有,采用悲观的锁策略,如 synchronized 代码块来保证数据的一致性。在技术派实战项目中,我们将文章的基本信息和文章详情做了垂直分表处理,因为文章的详情会占用比较大的空间,并且更新频繁,而文章的基本信息占用的空间比较小,且更新频率较低。第一步,从根节点开始,因为比 25 大,所以从右子树开始。
2025-01-02 19:59:13
1800
原创 妙用MyBatis-Plus,12个实战技巧解锁新知识
今天我们来聊聊,这可是一个能让我们开发更高效、代码更简洁的好工具。如果你曾经和MyBatis打过交道,那你一定知道它是一款功能强大的 ORM 框架,但也有一些使用上的麻烦。幸运的是,MyBatis-Plus的出现让这些麻烦都变得不值一提,就像是给了我们一把全新的钥匙,打开了性能和可维护性的“大门”。今天就跟大家分享12个我觉得特别有用的MyBatis-Plus优化技巧,让你像外婆做羊肉汤一样,煮出一锅既香浓又高效的代码。
2025-01-02 19:56:33
712
原创 SpringBoot整合Canal+RabbitMQ监听数据变更~
在这个场景中,Canal 作为 MySQL binlog 的监听者,能够捕获数据库表的所有变化(比如插入、更新、删除)。这些变化会通过 RabbitMQ 发送到消息队列中,其他服务可以异步消费这些数据并进行处理,比如更新缓存、触发后续业务逻辑等。这个架构有很多好处,尤其是在解耦和异步处理上,系统的稳定性和扩展性都能得到有效提升。
2025-01-02 19:55:50
658
原创 对线面试官:Spring事务能更改数据库的隔离级别么?
先给大家回顾一下什么是事务。我们知道,事务是一个数据库操作的最小单位,它包含了多个步骤,每个步骤都要么完成,要么全部失败,这样才能确保数据的一致性和完整性。原子性(Atomicity):事务中的所有操作要么都成功,要么都失败,不能只完成其中的一部分。一致性(Consistency):事务执行前后,数据库的状态要保持一致,不能破坏数据的完整性。隔离性(Isolation):多个事务并发执行时,它们之间的干扰应该尽量避免。事务隔离级别就是用来控制这个干扰的。持久性(Durability)
2025-01-02 19:55:18
891
原创 Java判断null,Optional和工具类真香?还是if(obj == null)更靠谱?
你可能在开发项目时,碰到过这样的需求:从一个对象中获取某个属性,而这个对象有可能是null。例如,你在处理一个Hyperlink对象,想从中获取link但是,这个hyperlink对象可能是null,这就导致了空指针异常(为了避免这种异常,咱们需要在拿到link之前判断一下hyperlink是不是null,对吧?在判断null的场景中,Optional和传统的null检查各有优缺点。选择哪种方式,关键在于你对代码的需求:是追求简洁易懂,还是性能至上。
2025-01-02 19:54:47
531
原创 MySQL主从复制了解过吗?它是怎么工作的?
从库有一个专门的 I/O 线程,它会连接到主库上的 log dump 线程,拉取主库的 binlog 日志。比如,如果你有一个需要频繁读取数据的系统,使用主从复制可以把大部分读操作分担到从库,减轻主库的压力,从而提高系统的整体性能。:从库会创建一个回放 binlog 的线程,这个线程会读取 relay log 中的内容并执行其中的 SQL 语句,从而更新自己的数据存储。值得注意的是,虽然复制是异步的,但如果配置得当,主从库的差异应该非常小,基本上能够实现数据的一致性。以下是一些常见的面试问题和回答。
2025-01-02 19:54:10
731
原创 Java提供了哪些IO方式? NIO如何实现多路复用?
今天我们来聊聊 Java 中的 IO 和 NIO,特别是 NIO 如何实现多路复用。这个话题看似很技术,但实际上它直接影响着我们在开发高效系统时的选择。尤其是在面对高并发场景时,了解这些机制的工作原理和优势就显得尤为重要。
2025-01-02 19:53:19
737
原创 原来count(*)是接口性能差的真凶
面对count(*)性能差的问题,我们可以通过多种手段进行优化。最常见的优化方式包括使用缓存、引入二级缓存、使用异步查询、多线程优化等。如果数据量非常大且查询条件复杂,可以考虑使用列式存储数据库如ClickHouse来提高查询性能。最后,虽然count(*)看起来是一个简单的查询,但它的背后牵涉到很多性能优化的问题。希望通过今天的分享,大家在面对性能瓶颈时能有更多的解决方案。其实,这个问题和写代码一样,都是不断尝试和积累经验,才最终找到最合适的解决方案。count(*)
2025-01-02 19:52:48
1016
原创 支付宝二面:你们公司项目中的 Java 多线程一般用在哪些场景?
有个朋友在支付宝的二面被问到这个问题,顿时就懵了。老实说,多线程是Java开发中不可或缺的技术,尤其是在我们做Web开发时,往往要面对各种性能优化问题。那么多线程到底是怎么在实际开发中发挥作用的呢?让我来给大家好好聊聊这个话题。
2025-01-02 19:51:47
734
原创 分布式环境下,如何实现高可靠性分布式锁?
分布式锁确保在分布式环境中,某个共享资源在同一时刻只能被一个节点或线程访问,避免了传统本地锁在多节点环境中的同步问题。分布式锁通常由外部组件(如 Redis、Zookeeper)实现,这些组件提供了高可用的锁服务,确保锁在节点故障或网络分区情况下的可靠性。
2025-01-02 19:49:05
966
原创 SpringBoot封装AI模块,快速实现智能化
国内支持SDK调用的优秀开源AI平台智谱AI(ZhipuAI): 智谱AI是一家专注于大模型技术的公司,由清华大学计算机系知识工程实验室技术成果转化而来。智谱AI提供了包括对话模型、视觉模型、代码生成模型等多种AI模型,并提供了开放平台供开发者使用和集成。智谱AI的SDK可以用于快速集成其AI能力,如对话、图像识别等功能。百度飞桨(PaddlePaddle): 百度飞桨是中国首个开源深度学习平台,提供丰富的API和SDK,支持多种深度学习模型的开发和部署。腾讯AI Lab: 腾讯AI Lab提供了多种AI技
2025-01-02 19:48:25
831
原创 sql语句优化的30种方法
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:可以这样查询:5.下面的查询也将导致全表扫描:若要提高效率,可以考虑全文检索。对于连续的数值,能用 between 就不要用 in 了:7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编
2024-12-30 21:40:29
649
原创 毕业入职腾讯,工作三年薪资待遇变化
AOF 的工作流程分为四个步骤:命令写入、文件同步、文件重写、重启加载。三分恶面渣逆袭:AOF工作流程1)当 AOF 持久化机制被启用时,Redis 服务器会将接收到的所有写命令追加到 AOF 缓冲区的末尾。2)接着将缓冲区中的命令刷新到磁盘的 AOF 文件中,刷新策略有三种:always:每次写命令都会同步到 AOF 文件。everysec(默认):每秒同步一次。如果系统崩溃,可能会丢失最后一秒的数据。no:在这种模式下,如果发生宕机,那么丢失的数据量由操作系统内核的缓存冲洗策略决定。
2024-12-30 21:39:18
1097
原创 向量数据库Chroma极简教程
目前向量数据库在AI中的应用越来越重要,但很多厂商更倾向于将向量数据库隐藏在产品内部,用户感知不到很多向量数据库的使用细节。但大模型的学习终究是建立在开源代码之上的,学习Chroma可以让我们快速了解向量数据库的基本原理,也有利于我们未来更好地理解大模型。
2024-12-30 21:27:25
3509
3
原创 保姆级指南,从0到1打造你的个人开源项目
各位好久不见,有些小伙伴可能知道大概1年多以前我开始维护log-record[1]项目(Java业务操作日志记录框架)。这期间项目陆陆续续更新迭代、发布新版本,一路走来也踩了不少坑。这篇文章主要是想给希望开始写开源项目的同学们一些开源项目维护的实操建议,也算是给自己梳理一下做一个开源项目需要注意的事项。此外,本文讨论的个人开源项目仅限于代码为主的项目。像一些新闻、教程、电子书、工具集锦类开源仓库,不在本文的讨论范围内。
2024-12-30 21:26:07
1070
原创 深度掌握Java Stream流操作,让你的代码高出一个逼格
我们都知道,从 Java8 开始,jdk 新增加了一个 Stream 类,用来补充集合类,它的强大,相信用过它的朋友,能明显的感受到,不用使用for循环就能对集合作出很好的操作。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
2024-12-30 21:24:24
744
原创 Java 面试八股文【10w字】
(3)@EnableConfigutarion:最关键的一个注解,他拥有两个子注解,其中@AutoConfigurationpackageu会将启动类所在包下的所有组件到容器中,@Import会导入一个自动配置文件选择器,他会去加载META_INF目录下的spring.factories文件,这个文件中存放很大自动配置类的全类名,这些类会根据元注解的装配条件生效,生效的类就会被实例化,加载到ioc容器中。*当前读读取的是数据的最新版本,并且当前读返回的记录都会上锁,保证其他事务不会并发修改这条记录。
2024-12-29 15:44:26
835
原创 Nginx 配置高性能静态网站 - 缓存、Gzip、跨域和防盗链
本篇博客对配置Nginx静态网站中的缓存、Gzip、跨域和防盗链等四个知识点在之前的生产实践中遇到的问题进行归纳和总结,分享出来,以方便同学们有更好的成长。Nginx 配置高性能静态网站。
2024-12-29 15:39:21
940
原创 Nginx想实现动态封禁IP(详细教程来了)
以上,便是 Nginx+Lua+Redis 实现的 IP 黑名单功能,具有如下优点:配置简单轻量,对服务器性能影响小。多台服务器可以通过共享 Redis 实例共享黑名单。动态配置,可以手工或者通过某种自动化的方式设置 Redis 中的黑名单。
2024-12-29 15:37:50
1103
原创 徒手从零搭建一套ELK日志平台(万字教程)
日志分析是运维工程师解决系统故障,发现问题的主要手段日志主要包括系统日志、应用程序日志和安全日志系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误ELK是一个开源的数据分析平台,由三个开源项目Elasticsearch、Logstash和Kibana组成,因此被称为ELKELK主要用于处理和分析大量的日志数据,支持实时搜索、数据可视化和分析。
2024-12-29 15:34:32
1977
原创 高手必会的 IDEA Debug 使用技巧
Debug功能是我们平时学习或工作中,最常用的IDEA功能之一。可用来追踪代码流程,确认运行过程中参数变化,分析定位程序的错误,线上问题追踪,也可以用以学习第三方框架等。程序从一个黑盒,开启Debug功能后,就变的一丝不挂了,我们能明白每一步发生了什么,以及为什么发生。看到这里你也许会说:“Debug有什么难的,点开Debug,一直下一步,梭哈到底不就完了吗,费那事干嘛?”那如果,你想回退怎么办,或你想更改参数值怎么办,重新发一次请求么?再或者需要远程调试时,你咋办,这些都是我们接下来要全面学习的内容。
2024-12-29 15:33:19
1258
原创 IDEA中最好用的 HTTP 请求插件
在后端SpringBoo开发中,都需要一个接口测试工具,从一开始的postman,到现在的国产测试工具,数不胜数,而最方便的莫过于在IDEA中就可以调试,因为IDEA插件中有能力分析出当前项目所编写的Controller数据,可以进行统计,更方便我们发起http请求,不需要复制url到别的测试工具了,今天就推荐一款,名叫Cool Request,他纯免费、开源。插件名称:Cool Request文档链接:plugin.houxinlin.com作用:简化SpringBoot后端接口调试流程。
2024-12-29 15:32:43
726
原创 Java面试指南(后端 offer 收割机)
Spring、Spring Boot/Cloud、Dubbo、JVM、集合、多线程、JPA、MyBatis、MySQL、大数据、Docker、Servlet、JavaWeb、Redis、算法等,几乎覆盖了所有 Java 相关的面试真题!深知后端成长不易,他爆肝两个月,从面试官视角出发,结合今年 3、4 月最新后端市场风向,整理出了这份超牛的《后端 offer 收割机养成指南》,内含。他是现任阿里后端 Leader,在后端行业深耕近十年,见证了互联网的飞速发展,也见证了无数后端人的成长。【大厂真题全面解析】
2024-12-29 15:31:39
398
原创 Git高手指南:掌握这些命令就足够了
若指定远程仓库名或远程仓库名与分支名的组合,则只获取对应远程仓库或分支的信息。获取后的远程分支信息会存储在本地的远程跟踪分支中,可用于后续的合并或查看操作。若指定远程仓库名和分支名,则只拉取指定远程仓库和分支的信息并合并到当前分支。不会修改历史提交记录,而是通过创建一个反向的提交来抵消指定提交的效果,适用于需要在不改变历史提交顺序的情况下撤销某个提交的情况。选项查看远程仓库的详细信息(包括远程仓库的 URL 和对应的本地分支名);若指定远程仓库名和分支名,则将指定本地分支推送到远程仓库的对应分支。
2024-12-29 15:29:01
722
原创 公司新来一个同事,后端开挂,3 行代码写出 8 个接口
仅仅是查询,一张表(对应客户端的 model)就要两个接口了,如果再加上增删改,批量改批量删,还有统计,那就得有 8 个接口了!回想下,代码才写了 3 行,就实现了包括增删改查等各种操作的 8 个接口以及这么多种查询!这 3 行代码其实是为了做权限管理!那 8 个没啥用的 Hello World 接口就得 24 行代码了!改下全局配置,不做权限校验,那就连一行代码都不用写了!像个人博客、非商业的新闻资讯网站这种可以没有权限控制的,更不用说还要写 XML 配置 的其它库了!任意结构,任意内容,任意组合,
2024-12-29 15:26:34
588
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人