自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(222)
  • 收藏
  • 关注

原创 Java秋招关于面试储备技能指南——系统性突破技术壁垒,掌握面试主动权!

Java秋招面试技能储备指南!—— 系统性突破技术壁垒,掌握面试主动权亲爱的开发者,当你翻开这份指南时,你正站在Java技术栈的广袤疆域前,而秋招的战场已悄然拉开序幕。在激烈的竞争中,技术深度决定offer高度,知识体系决定认知边界。这不是一份简单的知识点罗列,而是我们结合数十家一线大厂(阿里、腾讯、字节、美团等)近年Java岗位面试真题,提炼出的 「高频考点全景图」 和 「能力跃迁路线」。无论你是初探Java世界的学子,还是渴望突破瓶颈的进阶者,我们都将共同拆解三个核心问题:考什么?

2025-07-09 13:19:26 2844

原创 程序员研究架构框架

于是我们将事件广播出去,由一个单独的视图服务来接收这些事件,并形成一个物化视图(materialized view),这些数据已经join过,处理过,放在一个单独的查询库中,等待查询,这是一个典型的以空间换时间的处理方式。我亲身经历,有个技术人员一定要把原来单元测试框架的xml初始数据改为json,他的原话是”json看的更舒服”,但是改完后,我们的单元测试反而难落地了,原因是原来的单元测试框架有个工具是可以将表中的数据自动生成xml的,而改成json后,我们必须手写json数据了。

2025-07-29 19:34:26 63

原创 Spring

关键路径:容器初始化 → 配置元数据加载 → BeanDefinition注册 → 依赖关系推导 → 对象实例化 → 属性填充(字段/Setter) → 初始化回调(@PostConstruct) → 业务使用 → 销毁处理(@PreDestroy)原文链接:https://blog.youkuaiyun.com/2401_83384536/article/details/149647399。版权声明:本文为优快云博主「程序员小景」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

2025-07-29 19:32:40 67

原创 Java进阶:Mybatis笔记

BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch();ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map内,供下一次使用。

2025-07-28 14:35:31 134

原创 速览 MyBatis:关键功能与实践技巧

MyBatis是一款功能强大的ORM框架,帮助开发者在Java程序中高效地与数据库进行交互。

2025-07-28 14:34:58 232

原创 Java开发常用框架组件篇(一)【Mybatis】

❝MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。❞——来自官网。推荐大家按照官方的来回答。全称为Object Relational Mapping。对象-映射-关系型数据库。

2025-07-28 14:33:02 601

原创 Mybatis面试题二

它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.getB().getName()方法的调用。答:、、、、,加上动态sql的9个标签,其中 为sql片段标签,通过 标签引入sql片段, 为不支持自增的主键生成策略标签。

2025-07-28 14:31:38 567

原创 javaEE之常用框架Mybatis

2、Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。1、Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。1、基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;

2025-07-28 14:30:52 172

原创 SpringBoot集成MyBatis的SQL拦截器实战

/ 作用在字段上// 运行时生效// 脱敏类型(手机号、身份证号等)// 脱敏类型枚举PHONE, // 手机号ID_CARD // 身份证号通过SQL拦截器,我们用极少的代码实现了SQL监控和数据脱敏,避免了修改大量业务代码。

2025-07-28 14:28:55 498

原创 MyBatis 面试题

1、Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。2、MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

2025-07-28 14:23:34 701

原创 Mybatis-Plus高级特性的深入分析及Spring快速整合

MyBatis-Plus 作为 MyBatis 的增强工具,提供了诸多高级特性:内置通用 Mapper 和 Service,支持 Lambda 查询,减少 SQL 编写;动态 SQL支持多租户、逻辑删除和动态表名;插件扩展提供分页、性能分析、乐观锁等插件;:内置通用 Mapper 和通用 Service,减少大量模板代码。:提供条件构造器、代码生成器、分页插件等实用功能。高级特性如多租户、动态表名等可以应对复杂业务需求。自动填充、乐观锁等特性简化了常见业务场景的实现。:自动处理创建时间、更新时间等字段。

2025-07-28 14:17:41 164

原创 MyBatis框架基础教程

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。SQL注入问题:MyBatis使用#{}可以有效防止SQL注入,${}有注入风险。MyBatis也支持使用注解代替XML配置:​​​​​​。二级缓存:Mapper级别的缓存,需要手动配置开启。2. 创建Mapper接口​​​​​​​。4. 使用MyBatis​​​​​​​。1. 创建实体类​​​​​​​。1. 动态SQL​​​​​​​。2. 结果映射​​​​​​​。3. 关联查询​​​​​​​。解除SQL与程序代码的耦合。

2025-07-28 14:16:07 225

原创 Mybatis

SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。简单地说,就是通过在用户可控参数中注入 SQL 语法,破坏原有 SQL 结构,达到编写程序时意料之外结果的攻击行为。

2025-07-28 14:14:53 208

原创 Spring Boot 与 MyBatis

mybatis:config-location: classpath:mybatis-config.xml # 指定全局配置文件(可选)- Spring Boot简化了MyBatis的配置:通过Starter和自动配置,无需手动定义和事务管理器- 代码结构更清晰:实体类、Mapper接口、XML文件分层明确,符合Spring Boot的约定- 灵活性保留:仍支持XML配置复杂SQL和自定义MyBatis全局参数。

2025-07-27 17:12:32 480

原创 Mybatis基本原理介绍

万变的外表终将迷惑人们的双眼,只要抓住核心我们永远不会迷茫!3、SqlSession对象完成和数据库的交互:a、用户程序调用mybatis接口层api(即Mapper接口中的方法) b、SqlSession通过调用api的Statement ID找到对应的MappedStatement对象 c、通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象 d、JDBC执行sql。

2025-07-27 17:11:09 623

原创 Java知识点:SSM框架(Mybatis)

mybatis是针对数据库的优化框架,是对JDBC框架的整体优化,他将业务代码和sql语句分开,降低了代码的耦合度还有两个持久层的框架 一个是JDBC 另外一个是 HibernateJDBC性能最高 hibernate开发效率最高hibernate是不需要直接编写sql语句的但是这也意味着他的运行效率最低curd语句里面就只有read语句的返回类型是比较复杂的,其余三个增删改的返回值都是int,没什么好说的在多表查询中有可能出现列与属性名不一致的问题前面我们已经学过两种方法解决。

2025-07-27 17:10:19 429

原创 这些 SpringBoot 默认配置不改,迟早踩坑!

彼时 SpringBoot 初兴,万象更新,号称“开箱即用”“约定优于配置”,一时间风靡四方。开发者趋之若鹜,纷纷称快,仿佛自此架构之重可卸、配置之繁可省,一行main()即可气定神闲、纵横沙场。然则时光久远,方知此言非虚,却也未尽其真。所谓默认,不过是你未曾开口,框架自作主张。表面无碍,实则步步杀机,线上事故十有八九,皆因“未曾配置”的“默认”。回首往昔,实堪自嘲。曾自诩熟稔底层、精通原理,然于这些藏于阴影处的默认设定,竟茫然不觉。

2025-07-27 17:08:12 465

原创 深入理解 Java 中的 volatile:从底层原理到实践

volatile通过 MESI 协议 维护缓存一致性,通过 内存屏障 保证可见性和有序性,最终通过 happens-before 规则 定义多线程间的内存语义。• 核心价值:轻量级同步,适用于状态标志、双重检查锁定等场景。• 局限性:无法替代锁或原子类,需根据场景选择合适方案。理解volatile的底层原理,能帮助开发者写出更高效、更安全的并发代码。另外,风浪越大越多挑战,现在就是准备面试跳槽的好时机。

2025-07-27 17:04:44 364

原创 Java面试基础-并发编程

多线程并发执行任务时,涉及到共享资源的读写,需要保证程序执行操作的原子性。并发工具类CountDownLatch vs CyclicBarrier。:多个任务在单核上交替执行(逻辑上同时):多个任务在多核上同时执行(物理上同时)先说一下并发和并行的区别。CPU 核心内/共享。

2025-07-27 17:02:53 100

原创 Java多线程的应用经验总结

多线程是指一个进程中同时存在多个线程,这些线程可以并发运行。每个线程都有自己的执行序列,包括全局变量、堆内存和程序代码,同时也是计算机程序中的最小执行单元,这些线程共享同一进程分配的资源(CPU、内存等)。多线程的主要优点是提高了程序的性能和资源利用率,因为它们可以同时执行多个任务,充分利用多核处理器的优势。多线程充分利用多核处理器,有效地利用了计算机的资源(CPU、内存、IO等)。多线程应用程序可以同时执行多个任务,从而更快地完成工作,提高了性能。多线程可以将大型任务分解为多个小任务,易于管理和维护。

2025-07-27 17:01:31 213

原创 轻松掌握Java多线程-Lock接口与ReentrantLock

我们将实现一个线程安全的缓存系统,使用ReentrantLock来控制并发访问,并实现读写分离的效果。通过这个例子,我们可以看到ReentrantLock如何为我们提供比synchronized更强大的功能,同时也看到了使用Lock需要更加小心的资源管理。虽然使用起来比synchronized复杂一些,但提供了更多的控制选项,适用于需要高级同步功能的场景。在前面的学习中,我们已经熟悉了synchronized关键字的使用。:允许"插队",新来的线程可能比等待时间更长的线程先获得锁。

2025-07-27 17:00:48 463

原创 JAVA学习-多线程

线程(Thread)是一个程序内部的一条执行流程。程序中如果只有一条执行流程,那这个程序就是单线程的程序。多线程多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)。

2025-07-27 16:59:31 413

原创 Java多线程基础

yield():建议线程调度器暂停当前线程并让其他线程执行。它不保证其他线程会被调度。join():强制当前线程等待目标线程完成执行。它确保线程按顺序执行。sleep():暂停线程一段指定的时间,允许其他线程在此期间执行。

2025-07-27 16:58:28 742

原创 Java中的JVM是什么?如何帮助程序员更好地优化代码性能

更重要的是,懂 JVM,还能帮你优化代码性能,搞定各种线上问题。提到 JVM,很多同学瞬间脑子一片空白:“哎,JVM,我好像听过,但从来没搞懂它到底是啥。”更有甚者,把 JVM 想成了玄学,说它是“Java 程序员的内功心法”,一旦掌握,瞬间升天。并发是 Java 程序员绕不开的话题,但多线程带来的问题,比如死锁、线程过多导致的性能下降,也让人头疼。更重要的是,懂 JVM,能让你优化代码性能、排查疑难问题,成为团队里的核心人物。接下来,老韩用最接地气的方式,带你看懂 JVM,学会怎么用它“薅性能的羊毛”。

2025-07-25 15:02:21 579

原创 Java中的对象一定在堆上分配内存吗?

逃逸分析听起来很高大上,其实就是JVM在问:"这个对象会不会被外面的代码用到?HotSpot是Oracle公司开发的一种Java虚拟机(JVM),它是Java平台的标准JVM实现,广泛应用于生产环境。HotSpot虚拟机通过多种优化技术来提高Java程序的性能,包括即时编译(JIT)、垃圾回收(Garbage Collection)和运行时优化。Java对象不一定在堆上分配,JIT编译器会通过逃逸分析进行优化逃逸分析是性能优化的重要手段,可以减少GC压力写代码时适当考虑对象的生命周期,有助于JVM优化。

2025-07-25 15:01:00 572

原创 JVM核心技术 - 不可或缺的JVM

基础知识篇主要介绍 JVM 的基础知识、JDK 相关的各种工具用法,深入分析篇讲解各种 GC 算法、如何进行 JVM 的 GC 日志、线程、内存等各类指标进行分析和问题诊断,再结合作者的实际分析调优经验,以及对于常见的 JVM 面试问题进行分析和解答,为学习者梳理清楚 JVM 的整体知识脉络,带来最全面的 JVM 一线经验和实用技巧。

2025-07-25 14:56:44 228

原创 Java JVM原理与性能调优:从基础到高级应用

优先理解业务:不同应用类型(Web/计算/批处理)需要不同策略数据驱动决策:基于监控数据而非猜测进行调优循序渐进:每次只调整一个参数并观察效果权衡取舍:吞吐量 vs 延迟 vs 内存占用。

2025-07-25 14:54:48 483

原创 Java面试题:Spring篇

什么是控制反转?控制反转:IoC(Inversion of Control)反转是什么呢?反转的是两件事: 第一件事:我不在程序中采用硬编码的方式来new对象了。(new对象我不管了,new对象的权利交出去了。) 第二件事:我不在程序中采用硬编码的方式来维护对象的关系了。(对象之间关系的维护权,我也不管了,交出去了。控制反转:是一种编程思想。或者叫做一种新型的设计模式。由于出现的比较新,没有被纳入GoF23种设计模式范围内。Spring框架。

2025-07-25 14:52:47 710

原创 Spring 框架基础知识学习

在 Spring 中,构成应用程序主体由 Spring IoC 容器管理的对象称为 Bean。Bean 是由 Spring Ioc 容器实例化、装配和管理的对象。Bean 以及它们之间的依赖关系反映在容器使用的配置元数据中。Spring IoC 容器本身,并不能识别配置的元数据。为此,要将这些配置信息转为 Spring 能识别的格式——BeanDefinition 对象。BeanDefinition 是 Spring 中定义 Bean 的配置元信息接口,它包含:Bean 类名。

2025-07-25 14:46:28 590

原创 Spring最最核心的9大核心功能4

本节主要讲了实现IOC的几个核心的组件BeanFactory及其接口体系:BeanDefinition及其相关组件:BeanDefinitionReader和ClassPathBeanDefinitionScanner:读取资源,生成BeanDefinitionBeanDefinitionRegistry:存储BeanDefinitionBeanFactory核心实现:DefaultListableBeanFactory:IOC容器,同时实现了BeanDefinitionRegistry接口。

2025-07-25 14:41:24 399

原创 Spring最最核心的9大核心功能3

从上面的演示下来可以发现,其实每变化一步,其实就是获取对应泛型或者是父类等等对应的ResolvableType,父类或者是泛型参数又可能有泛型之类的,只需要一步一步获取就可以了,当需要获取到具体的class类型的时候,通过。BeanWrapper其实就数据绑定的核心api了,因为在Spring中涉及到数据绑定都是通过BeanWrapper来完成的,比如前面提到的Bean的属性的绑定,就是通过BeanWrapper来的。

2025-07-25 14:39:49 922

原创 Spring最最核心的9大核心功能2

SpringBoot配置文件是通过ResourceLoader来加载配置文件,读取文件的配置内容那么当配置文件都加载完成之后,这个配置应该存到哪里,怎么能够读到呢?这就引出了Spring框架中的一个关键概念,环境,它其实就是用于管理应用程序配置的。

2025-07-25 14:38:11 627

原创 Spring最最核心的9大核心功能,你清楚吗?

资源管理是Spring的一个核心的基础功能,不过在说Spring的资源管理之前,先来简单说一下Java中的资源管理。当在构建URL的时候,会去解析资源的访问协议,根据访问协议找到对应的URLStreamHandler的实现。接口,可以获取到资源的输出流,因为有的资源不仅可读,还可写,就比如一些本地文件的资源,往往都是可读可写的。方法,传入一个路径就可以加载到对应的资源,而这个路径不一定是本地文件,可以是任何可加载的路径。提供的方法可以看出,他可以加载多个资源,支持使用通配符的方式,比如。

2025-07-25 14:36:52 889

原创 Java学习汇总 - MySql

快照读:读取的是当前数据的可见版本,可能是会过期数据不加锁的 select 就是快照 当前读取的是数据的最新版本并且当前读返回的记录都会上锁,保证其他事务不会并发修改这条记录如update、insert、delete、select for undate(排他锁)、select lockin share mode(共享锁) 都是当前读。

2025-07-24 19:38:07 520

原创 Java 中的类加载器(Class Loaders in Java)二

内置类加载器足以满足大多数文件已经在文件系统中的情况。然而,在需要从本地硬盘或网络加载类的场景中,我们可能需要使用自定义类加载器。在本节中,我们将介绍自定义类加载器的一些其他用例,并演示如何创建一个。自定义类加载器不仅仅是在运行时加载类很有用。一些使用场景可能包括:帮助修改现有的字节码,例如编织代理根据用户需求动态创建类,例如在 JDBC 中,通过动态类加载在不同驱动实现之间切换在加载具有相同名称和包的类时实现类版本控制机制。

2025-07-24 19:36:02 856

原创 Java 中的类加载器(Class Loaders in Java)

类加载器(Class Loader)是一个负责加载类的对象。此外,类加载器在运行时动态地将 Java 类加载到 JVM(Java 虚拟机)中。它们也是 JRE(Java 运行时环境)的一部分。因此,多亏了类加载器,JVM 在运行 Java 程序时无需了解底层文件或文件系统。此外,JVM 并不是一次性将所有这些 Java 类加载到内存中,而是当应用程序需要时才会加载。这就是类加载器发挥作用的地方。它们负责将类加载到内存中。在本教程中,我们将讨论不同类型的内置类加载器及其工作原理。

2025-07-24 19:35:30 895

原创 7min到40s:SpringBoot启动优化实践

我们那会儿把一些重Bean,用});Spring虽然不推荐这种方式,但你实在不想等,能忍受短暂的延迟初始化,也可以考虑。当然,这种最好加点状态标记,不然还没初始化完就被用户访问到了。说到这我都困了,昨晚为了查一个的Bug又熬到一点半,对了,那个配置也可能影响启动性能,CGLIB代理会慢一点,但兼容性好。总之啊,优化Spring Boot启动不是靠一两招搞定的,是一层层剥皮,像洋葱一样。

2025-07-24 19:34:14 356

原创 Java进阶SpringBoot自动配置的深入分析

下面我们通过一个完整的示例来演示如何创建自定义的自动配置。

2025-07-24 19:31:27 691

原创 JAVA网络编程基础速通

Java网络编程基于TCP/IP协议栈,Java网络编程的底层原理基于操作系统网络协议栈的封装,而java.net包则提供了高层抽象的核心组件,简化了网络通信的实现。Java通过JNI(Java Native Interface)调用本地C/C++代码,后者再调用操作系统的Socket API(如Linux的send()recv()或Windows的Winsock)应用层数据通过TCP/UDP封装成数据包,经过网络层(IP)、数据链路层和物理层传输,接收方则反向解封装。

2025-07-24 19:23:34 210

原创 Java基础简要总结二

第二部分主要从接口、内部类进行简要总结。‌‌:抽象类不能直接创建对象。‌‌:可以包含一个或多个抽象方法,这些方法没有具体的实现。‌‌:任何继承抽象类的子类必须实现(重写)所有抽象方法,否则该子类也必须被声明为抽象类。‌‌:可以包含普通方法和属性,这些方法和属性有具体的实现。提供形式,未提供任何具体实现方式接口类默认就是public的方法默认是public 抽象的接口实现->implements,可以多实现来实现“多重继承的效果”

2025-07-24 19:20:53 732

空空如也

空空如也

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

TA关注的人

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