- 博客(48)
- 收藏
- 关注
原创 Spring Cloud Contract快速入门Demo
是 Spring 提供的一套工具,用于帮助开发者通过契约(Contract)驱动的方式进行微服务的测试和集成。它主要解决微服务之间通信时,如何确保服务提供者和消费者之间的接口保持一致的问题。
2024-11-15 14:31:24
735
原创 Hadoop 不再孤单:与 Spark、Hive、Flume 组合的强大威力
通过这篇文章,我们了解了如何设计一个基于Hadoop的分布式文件处理系统。如今在大数据领域单独使用Hadoop的还是比较少的,更多的是与其他大数据技术栈结合使用,形成一个完整的大数据生态系统。Hadoop作为大数据处理的基础框架,虽然功能强大,但在某些方面也存在一些局限性,比如实时处理能力不足、复杂的数据处理逻辑实现较为繁琐等。因此,许多企业会选择将Hadoop与其他技术结合,以满足不同的业务需求。
2024-11-15 14:30:25
969
原创 springboot中Controller常用注解
如果没有显式的注解,比如什么注解都没有,Spring 会自动查找请求中的参数(如 URL 查询参数或表单数据),并将它们绑定到方法的对应参数。允许将请求体(一般是 JSON 格式的数据)自动转换为 Java 对象,极大地简化了数据的解析和绑定过程。假设我们有一个前端发送 JSON 格式数据的 POST 请求,URL 为。因为其它请求格式中用的很少,所以这里不演示,但是其它请求格式都可以用。可以从 URL 中提取请求参数,并将它们绑定到方法的参数上。请求,但是其它的请求格式也可以使用。
2024-11-15 14:29:17
1180
原创 Java面试八股文必备闯关秘籍:基础篇
基本数据类型,如int,float,double,boolean,char,byte,不具备对象的特征,不能调用方法。装箱:将基本类型转换成包装类对象拆箱:将包装类对象转换成基本类型的值java为什么要引入自动装箱和拆箱的功能?答:主要是用于java集合中,List list=new ArrayList();例如:list集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象。
2024-11-15 13:49:44
1209
原创 Spring Cloud Contract快速入门Demo
是 Spring 提供的一套工具,用于帮助开发者通过契约(Contract)驱动的方式进行微服务的测试和集成。它主要解决微服务之间通信时,如何确保服务提供者和消费者之间的接口保持一致的问题。
2024-11-14 13:56:45
508
原创 Java实战:一行代码搞定耗时性能追踪
在开发过程中,性能监控和调试是我们经常面对的问题。虽然市面上有许多成熟的性能监控工具,但有时我们需要一个轻量级、灵活且优雅的解决方案。当然也可以自己手动在业务代码中进行追踪,比如先记录startTime,执行结束后再拿当前时间减去startTime,计算出耗时。但是毕竟会制造很多重复代码。本文将介绍如何设计和实现一个简洁而优雅的TimeTracker工具类,它不仅能满足基本的性能追踪需求,还支持了函数式接口、try-with-resources等多种调用机制。先来点经验总结,仁者见仁,智者见智。
2024-11-14 13:56:12
745
原创 Java 生成与解析大疆无人机 KMZ 航线文件
KMZ 航线文件本质上是一个 ZIP 格式的压缩文件,一个标准的 KMZ 文件结构如下。arduino代码解读复制代码res:资源文件夹,用来存储航线所需的辅助资源文件(如图片、数据等)。template.kml:模板文件,定义了航线的业务属性,便于用户快速编辑和调整。waylines.wpml:执行文件,包含了无人机执行航线任务时的具体执行细节。
2024-11-14 13:55:29
938
原创 史上最强Java 基础常见面试题整理!
反射是指在运行时动态地访问和操作类的信息。灵活性:可以在运行时获取类的信息、创建对象、调用方法等,提供了更大的灵活性。动态加载:支持在运行时动态加载和使用类,无需在编译时确定。框架和工具开发:便于开发通用的框架和工具,可适应不同的业务需求。插件机制:支持插件式的扩展,方便添加新的功能。XML 配置:与配置文件结合,实现基于配置的动态功能。类操作:对类进行各种操作,如修改属性、方法等。跨模块交互:方便不同模块之间的交互和集成。
2024-11-14 13:39:15
2109
原创 Java数据类型转换:从小白到高手,只需5分钟
在Java中,数据类型可以分为基本数据类型和引用数据类型。整数类型byte(1字节)、short(2字节)、int(4字节)、long(8字节)浮点类型float(4字节)、double(8字节)字符类型char(2字节),表示单个字符或Unicode字符布尔类型boolean,表示true和false,不参与数值运算Java的数值类型有一个“精度层次”,即从低精度到高精度依次是byte->short->int->long->float->double。这种精度层次影响了自动和强制转换的规则。
2024-11-13 14:04:02
893
原创 new Object到底占用多少内存空间?
通过 JOL 工具,深入剖析对象头、实例数据以及内存对齐的具体细节,了解 JVM 是如何管理和优化内存的。使用 JOL,可以验证内存结构,直观地观察 JVM 参数(如对象指针压缩、类指针压缩等)对对象布局的影响。JOL(Java Object Layout) 是一个由 OpenJDK提供的工具库,用于分析和展示 Java 对象的内存布局、对象头、对象大小以及各种内存偏移量等信息。它对于研究 Java 内存管理、理解对象布局和 JVM 内部机制非常有帮助。JOL 的核心功能对象布局分析。
2024-11-13 14:03:32
736
原创 SpringBoot集成redis
redisson是Redis官方推荐的一个客户端工具。它提供了使用Redis的最简单和最便捷的方法。除此之外,redisson还提供了可靠的分布式锁、布隆过滤器等功能。redisson中文文档。
2024-11-13 14:02:36
2399
原创 经典版Java面试题汇总(答案解析)
1.新生代有一个Eden区和两个survivor区,首先将对象放入Eden区,如果空间不足就向其中的一个survivor区上放,如果仍然放不下就会引发一次发生在新生代的minor GC,将存活的对象放入另一个survivor区中,然后清空Eden和之前的那个survivor区的内存。RMI对调用者是位置透明的,因为调用者感觉方法是执行在本地运行的对象上的。Java提供了一种叫做对象序列化的机制,他把对象表示成一连串的字节,里面包含了对象的数据,对象的类型信息,对象内部的数据的类型信息等等。
2024-11-13 13:21:23
1039
原创 再也不用熬夜查日志!ELK + 钉钉告警助你轻松应对系统异常
通过使用 ELK 构建日志收集系统,并结合钉钉机器人实现告警,系统的日志监控和问题发现能力得到了极大提升。运维人员不再需要逐一排查各个服务器上的日志,而是可以通过实时的钉钉告警快速应对异常。ElastAlert 提供了一种开源、低成本的告警方式,帮助团队及时发现系统中的异常,快速定位和解决问题。
2024-11-12 15:27:27
583
原创 MyBatis中的LanguageDriver的作用是什么
在 MyBatis 中,(语言驱动)的作用是用于解析和处理 SQL 语句的生成和执行。具体来说, 提供了一种机制,允许开发者自定义 SQL 语句的解析方式,以及如何将参数映射到 SQL 语句中。MyBatis 默认提供了一些标准的语言驱动,同时也支持自定义语言驱动以满足特定的需求。MyBatis 提供了两个默认的 实现:开发者可以实现自己的 ,以支持特定的 SQL 生成需求。例如,可以实现一个支持某种模板引擎的 ,或者实现一个支持特定 DSL 的 。xml代码解读复制代码typescrip
2024-11-12 15:26:47
386
原创 日志记录到文件-logback使用
作为后端开发人员都知道记录日志是非常必要的。当程序出现问题时,进行问题的排查定位查询日志是必要的依据。因此公司都会有自己的日志管理系统,采用ELK生态进行自建或者采购云服务。最早在项目中使用的是log4j,近几年接触到的项目都使用的是Logback,这也是SpringBoot默认支持的日志框架。因此本篇文章中的代码也是在该日志框架的基础上进行的编写。在这篇文章中不会进行Logback各个配置的介绍。在本文中会介绍下搭建项目时如何将公共的代码从业务系统中进行剥离。
2024-11-12 15:26:08
394
原创 2024年经典Java面试题汇总及答案解析
Spring是一个开源的Java框架,用于构建企业级应用程序。它提供了一种轻量级的、非侵入式的方式来开发Java应用程序,通过使用Spring框架,可以更加简化和加速Java应用程序的开发过程。Spring框架提供了一系列的模块,包括依赖注入、面向切面编程、事务管理、数据访问、Web开发等功能。其中最核心的特性是依赖注入(Dependency Injection,简称DI),它通过将对象之间的依赖关系交给Spring容器来管理,从而实现了松耦合和可测试性。
2024-11-12 13:32:42
1303
原创 表弟让我帮忙检查代码
表弟说用大模型分析,老是回答说存在问题,让换一种写法,但大模型的那些问题像是在专业的胡说,不太放心自己临时写的代码。但为了表弟面前表现的更专业,故将其代码去除所有业务信息,做了最简化处理让各位也来点评一下,博采众长。表弟刚参加工作半年,就遇到批量调用接口返回错误的问题,刚好是周五遇到让周六加班弄完,由于周六本是休息,表弟积极性很低,于是直接选择短平快的方式先应付上去,并且运行了一下,说日志有空指针报错,但核对了一下数据库数据正常,暂时没发现问题。
2024-11-11 13:35:51
306
原创 日志框架简介-Slf4j+Logback入门实践
随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息。因此,作为工程师,了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影响,但没有日志的应用程序是不完整的,甚至可以说是有缺陷的。优秀的日志系统可以记录操作轨迹监控系统运行状态和解决系统故障。在上文中已经提及,目前常用的日志框架有 Log4j,Log4j 2,Commons Logging,Slf4j,Logback,JUL。
2024-11-11 13:35:20
409
原创 学一学Spring中的自定义监听器
通过一个简单的自定义的监听器,从源码的角度分一下Spring中监听的整个过程,分析监听的作用。scala代码解读复制代码} }java代码解读复制代码。
2024-11-11 13:34:12
281
原创 20万字208道Java经典面试题总结(附答案)
所谓反射,是java在运行时进行自我观察的能力,通过class、constructor、field、method四个方法获取一个类的各个组成部分。在Java运行时环境中,对任意一个类,可以知道类有哪些属性和方法。这种动态获取类的信息以及动态调用对象的方法的功能来自于反射机制。序列化就是一种用来处理对象流的机制。将对象的内容流化,将流化后的对象传输于网络之间。
2024-11-11 13:21:27
2300
原创 SingleThreadScheduledExecutor线程池设计/场景案例/性能调优/场景适配(架构篇)
在多线程编程中,我们经常会遇到需要按特定顺序执行任务的场景,例如定时任务、周期性任务或者保证任务执行顺序的情况。正是为了满足这样的需求而设计的。它提供了一个单一的后台线程,用于顺序执行所有提交的任务,确保了任务的执行顺序与提交顺序相同。这种线程池特别适用于那些对任务执行顺序有严格要求的应用,如日志处理、事件调度等。通过,我们可以轻松地安排任务在未来的某个时间点执行,或者以固定的频率重复执行,同时保持代码的简洁性和易于管理。
2024-11-10 16:31:23
704
原创 DDD架构中assembler和converter的区别
DDD四层架构模式中,各层的对象我们需要借助assembler或converter来进行转换,但在实际项目中assembler和converter大家使用都很随意,很多项目中每一层都建了一个assembler目录,里面有的是 XxooAssembler,有的是 XxooConverter,看着也没什么规范也不知道是根据啥定义出来的,所以萌生了想要一探这两者区别的想法。
2024-11-10 16:30:44
932
原创 JVM类加载器辨析
在 IDE 中运行 Java 程序时,IDE(如 IntelliJ IDEA、Eclipse)会根据项目结构和依赖配置生成类路径,并传递给 JVM,所以不需要手动设置。现代 Java 项目通常使用构建工具(如 Maven 和 Gradle),这些工具在构建和运行时会自动生成并指定类路径。环境变量,指定 Java 应用程序的类路径。目录下,并在执行时自动生成完整的类路径,无需手动指定。,依此类推,直到请求到达最顶层的启动类加载器。,应用类加载器将会在这些路径中查找和加载类。环境变量,因此更常用的是使用。
2024-11-10 16:30:00
881
原创 2025年最新Java面试题(全网最细、附答案)
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出 的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒 底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的 方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这 样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而 导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时 所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
2024-11-10 15:39:23
1883
原创 Bean 的生命周期
Spring 源码十分庞大,创建Bean的逻辑更是错综复杂,假如对每个分支逻辑都事无巨细的研究分析,可能会陷入到 Spring 那庞大的逻辑沼泽中。因此我们仅需要将关注重心放在核心流程上,对于那些旁枝末叶点到即止。对主要的脉络关系进行梳理,建立一个清晰的印象。我们在使用Spring框架开发过程中,通过一些简单的注解或方法便可实现 bean 的创建与获取,这就是Spring IOC容器的魅力。
2024-11-09 15:25:07
909
原创 Java 源码中的 Unicode 逃逸问题,别被注释给骗了
众所周不知「恕我孤陋寡闻,我没看过这种用法」,Java 编译器编译代码时会解析 unicode 字符,而代码中存在特殊字符的 unicode 符号时,就会产生障眼。尤其是我这种头脑比较简单的人,只会写简单代码,一见到复杂绕绕的代码就懵了哇!在某种场合还是有用的,比如绕过平台的敏感词检测,之前发布某篇文章通不过的时候,转换成 unicode 编码就过去了。想起刚入行的时候,看过一本电子书《疯狂的 Java 讲义》,书中介绍了很多 Java 的奇怪玩法,现在大部分都忘记了。但对单例代码的漏洞,一直记忆犹新。
2024-11-09 15:23:47
142
原创 Java字节码增强库ByteBuddy
动态代理和 AOP(面向切面编程)ByteBuddy 可以用来创建动态代理,替代 Java 自带的,并且支持非接口类的代理。常用于 AOP 框架中,例如在方法执行前后插入逻辑,实现日志记录、事务管理、权限校验等功能。字节码增强可以对已有类的字节码进行增强,比如添加字段、方法或改变方法行为。适合用在框架和工具开发中,例如 Hibernate、Spring 等框架都可以通过 ByteBuddy 动态生成增强后的类,增加特定功能。Mock 框架。
2024-11-09 15:23:13
751
原创 java程序员面试常见面试题及答案整理
1.标识符可以由字母、数字、下划线和美元符号组成。2.标识符必须以字母、下划线或美元符号开头,不能以数字开头。3.标识符区分大小写,例如"myVariable"和"myvariable"是不同的标识符。4.标识符不能是Java的关键字,例如"public"、"class"等。5.标识符应具有描述性,以便于理解和维护代码。1.合法的标识符:myVariable, _count, $price, MAX_VALUE2.非法的标识符:2ndNumber, public, class。
2024-11-09 15:14:54
580
1
原创 全新Java基础面试问题及答案
一个程序中可以有多个类,但只能有一个类是主类。在 Java 应用程序中,这个主类是指包含 main()方法的类。而在 Java 小程序中,这个主类是一个继承自系统类 JApplet 或 Applet 的子类。应用程序的主类不一定要求是 public 类,但小程序的主类要求必须是 public 类。主类是 Java 程序执行的入口点。这里把符合以下条件的对象称为伪数组:1,具有length属性2,按索引方式存储数据。
2024-11-08 15:12:20
706
原创 Android“引用们”的底层原理
相信绝大多数开发者对WeakReference、SoftReference这种引用类都不会感到陌生。面试官们喜欢问:WeakReference和SoftReference有什么区别啊?一般适用于什么场景啊?但再往下就不会深究了。因为对应用开发而言,“会用”已经满足99%的需求,再多就事倍功半了。所以这种底层原理的文章大家就当饭后消遣,看不懂也没啥损失,因为它可能会有点难度。
2024-11-08 13:27:11
957
原创 Spring Boot集成Access DB实现数据导入和解析
microsoft office access是由微软发布的关联式数据库管理系统。它结合了 microsoft jet database engine 和 图形用户界面两项特点,是一种关系数据库工具。它在很多地方得到广泛使用,例如小型企业,大公司的部门,和喜爱编程的开发人员专门利用它来制作处理数据的桌面系统。它也常被用来开发简单的web应用程序.。
2024-11-08 13:26:16
442
原创 高级并发编程系列二(线程池:核心要点)
如果线程池中的线程数少了,比如:5个线程,需要处理的任务多了,比如:10个任务;如果线程池中的线程多了,比如:10个线程,需要处理的任务少了,比如:5个任务;这个问题我们做一个场景假设,有两个读取文件的任务,对于计算机来说,读取文件是一项比较重的任务,涉及到IO操作,通常会发生IO阻塞。如果线程池中的线程都在忙着处理任务,又来了新的任务,并且这个时候我们的线程数达到了最大,即不能再创建新的线程。如果以上问题,你都有了答案,那么我想你应该能够很好的理解线程池,并在项目中很好的应用了,那就让我们开始吧。
2024-11-08 13:25:30
767
原创 学一学SpringBoot中的自定义Starter
自己动手简单的封装、应用一个starter该starter的作用是被引入后,会对项目中Controller出现的异常做统一的处理及反馈starter的思想在实际开发过程被大量的应用java代码解读复制代码} }引入项目中可以根据实际业务抛出该异常typescript代码解读复制代码// 状态码 private String message;// 错误信息或成功提示 private T data;
2024-11-08 13:24:44
722
原创 java并发编程(4)-Random以及ThreadLocalRandom原理剖析
本篇主要内容是ThreadLocalRandom的原理剖析。ThreadLocalRandom是JDK7以后新增的随机数生成器。在生成随机的场景中,可能很多小伙伴很少用过这个类,甚至没用过,大部分用的还是Random为主。本篇我们先稍微聊聊Random,之后再来理解为什么有了Random了,还要再新增ThreadLocalRandom。
2024-11-07 13:42:40
591
原创 轻量级Nacos来了!占用资源极低,性能炸裂!
r-nacos是一款使用rust实现的nacos服务,对比阿里的nacos来说,可以提供相同的注册中心和配置中心功能。同时它占用的内存更小,性能也很优秀,能提供更稳定的服务。由于之后我们需要用到mall-swarm项目,这里简单介绍下它。mall-swarm项目(11k+star)是一套微服务商城系统,基于2024最新微服技术栈,涵盖Spring Cloud Alibaba、Spring Boot 3.2、JDK17、Kubernetes等核心技术。
2024-11-07 13:41:36
1026
原创 add()方法导致NPE?不可变集合singletonList的隐藏陷阱!
Collections.singletonList()创建的是不可变集合,在尝试对其进行添加或删除操作时会直接报错。因此在实际开发中,我们要慎用不可变集合,特别是在需要动态增删集合元素的场景下,应该优先选择ArrayList等可变集合。Collections类提供了很多方便的方法来创建集合,像singletonList()、emptyList()等不可变集合的创建方法在某些特殊场景下非常有用,但同时也容易引发NPE等异常。因此要熟悉并掌握工具类的特性和局限,避免不必要的坑。
2024-11-07 13:37:21
681
原创 史上最全Java八股文面试题合集!
整形:byte 8 short 16 int 32 long 64 位浮点类型:float、double字符类型:char 表示字符 utf-16布尔类型:boolean true/false因为 Java 程序编译之后生成.class 文件,不是能被硬件系统直接运行的代码,而是一种 “中间码”——字节码。然后不同的硬件平台上安装有不同的 Java 虚拟机(JVM),由 JVM 来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于 Java 编程者来说,不需要考虑硬件平台是什么。
2024-11-07 13:32:58
1159
原创 深入理解Java类:普通类、抽象类、接口、枚举类与内部类
定义:抽象类使用abstract关键字修饰,不能直接实例化。抽象方法:可以包含抽象方法(没有方法体),必须由子类实现。继承:抽象类可以包含具体方法,子类可以继承这些方法。
2024-11-06 13:43:29
300
原创 Jetpack Compose中的常见副作用的使用
副作用是指在函数式编程和声明式UI框架中,那些在函数执行过程中除了返回结果之外还产生的其他影响或操作。在Jetpack Compose这样的声明式UI框架中,副作用通常指的是那些在Composable函数中执行的操作,这些操作会在每次Composable函数被重新计算时执行,而不是只在函数首次调用时执行。这与命令式编程中的副作用有所不同,后者通常指的是在函数执行过程中改变全局状态或产生外部影响。掌握Jetpack Compose的副作用管理,能显著提升应用性能与可维护性。
2024-11-06 13:42:04
336
原创 一文讲透 Java 中的反射
反射是 Java 中的一个特性,它允许程序在运行时获取自身的信息,并动态地操作类或对象的属性、方法和构造函数。通过反射,我们可以在事先不知道确切类名的情况下实例化对象、调用方法和设置属性。反射机制的核心是Class对象,它代表一个类。Java 虚拟机(JVM)在加载类时会自动创建这个Class对象。从上面的示例中可以看出,以Declared为前缀的方法(如)用于检索所有字段或方法,无论其访问级别如何。相比之下,没有Declared的方法(如getField)仅检索公共字段或方法。
2024-11-06 13:41:31
425
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人