备战大厂面试,Mybatis核心原理必不可少.学会Mybatis你不会吃亏

外包三年给整废了,备战两月终拿到 4 家大厂 offer,阿里 P6+ 这回稳了 这三年的时间,算是给我人生上了一课。文字可能会比较多,但大部分的情况都和全国 99%的软件行业外包情况完全匹配。希望能给你们一些参考。 第一次进入外包公司 开始面试的时候,找了两个月,一开始外包公司直拒,投递了 Factory Club,中控,医惠科技等等,可是都没有回音。11 月份已经没有多少工作机会了,迫切的需要一份工作,于是海投,我进入第一家外包公司。 由于我这是第一次进外包公司,所以连薪水都没有多要,最后自己通过公司进入了工行杭研中心,开始外包的坑之路~~(签合同的时候,还签了保密协... 阅读详情

带着问题思考本次分享

2020 下半年在公司组织了一场关于 Mybatis 核心原理的分享,掌握底层源码不仅能够更好的排查问题,同时也能够借鉴其中优秀的设计。正好赶上金三银四面试季,这里就梳理出以下几个问题供大家参考

  • Mybatis 与 JDBC 的关系
  • .xml 文件定义 SQL 语句如何解析
  • Mybatis 中 Mapper 接口的存储与实现
  • Mybatis SQL 的执行过程
  • Mybatis 中分页如何实现

本次分享内容依据 Mybatis-3-3.4.x 源码

持久层的那些事

什么是 JDBC

JDBC(JavaDataBase Connectivity)就是 Java 数据库连接, 说的直白点就是 使用 Java 语言操作数据库

本来我们是通过控制台或客户端操作的数据库, JDBC 是用 Java 语言来发送 SQL 语句

JDBC 原理

最初 SUN 公司希望提供一套 能够适用所有数据库的 API, 但是在实际操作中却发现这是项基本不可能完成的任务

因为各个厂商所提供的 数据库差异实在太大, 所以 SUN 公司与数据库厂商讨论出的就是:由 SUN 公司提供出一套访问数据库的规范 API, 并提供相对应的连接数据库协议标准, 然后各厂商根据规范提供一套访问自家数据库的 API 接口

最终:SUN 公司提供的规范 API 称之为 JDBC, 各厂商提供的自家数据库 API 接口称之为 驱动

JDBC 架构图

什么是 Mybatis

Mybatis 是一款优秀的 ORM(持久层)框架,使用 Java 语言 编写

前身是 apache 的一个开源项目 iBatis,2010 年迁移到 google code 并正式改名为 Mybatis

ORM 持久层 指的是 : 将业务数据存储到磁盘,也具备长期存储能力,只要磁盘不损坏,如果在断电情况下,重启系统仍然可以读取数据

Mybatis 与 JDBC 的关系

在没有持久层框架之前, 想要代码中操作数据库都必须通过 JDBC 来操作, 接下来一个例子来说明两者之间的关系

JDBC 操作数据库

JDBC

相信大家都在实际项目中使用过 Mybatis, 可以联想一下, 平常我们工作中, 是否做过以下事情:

  • 是否装载过数据库驱动?
  • 是否从驱动中获取数据库连接?
  • 是否创建过执行 SQL 的 Statement?
  • 是否自行将数据库返回结果转换成 Java 对象?
  • 是否关闭过 finally 块中的三个对象?

看到上面的灵魂拷问, 就可以对本次分享的第一个问题作出解答:

Mybatis 针对 JDBC 中重复操作做了封装, 同时扩展并优化部分功能

Mybatis 关键词说明

📖 如果在阅读文章前没有接触过 Mybatis 源码相关的内容, 建议将下述名词多看几遍再向下阅读

SqlSession

负责执行 select、insert、update、delete 等命令, 同时负责获取映射器和管理事务; 其底层封装了与 JDBC 的交互, 可以说是 mybatis 最核心的接口之一

SqlSessionFactory

负责创建 SqlSession 的工厂, 一旦被创建就应该在应用运行期间一直存在, 不需要额外再进行创建

SqlSessionFactoryBuilder

主要是负责创建 SqlSessionFactory 的构造器类, 其中使用到了构建者设计模式; 仅负责创建 SqlSessionFactory

Configuration

Mybatis 最重要的配置类, 没有之一, 存储了大量的对象配置, 可以看源码感受一下

MappedStatement

MappedStatement 是保存 SQL 语句的数据结构, 其中的类属性都是由解析 .xml 文件中的 SQL 标签转化而成

Executor

SqlSession 对象对应一个 Executor, Executor 对象作用于 增删改查方法 以及 事务、缓存 等操作

ParameterHandler

Mybatis 中的 参数处理器, 类关系比较简单

StatementHandler

StatementHandler 是 Mybatis 负责 创建 Statement 的处理器, 根据不同的业务创建不同功能的 Statement

ResultSetHandler

ResultSetHandler 是 Mybatis 负责将 JDBC 返回数据进行解析, 并包装为 Java 中对应数据结构的处理器

Interceptor

Interceptor 为 Mybatis 中定义公共拦截器的接口, 其中定义了相关实现方法

Mybatis 架构设计

架构图

Mybatis 分层架构图

基础支持层

反射模块

反射在 Java 中的应用可以说是相当广泛了, 同时也是一把双刃剑。 Mybatis 框架本身 封装出了反射模块, 提供了比原生反射更 简洁易用的 API 接口, 以及对 类的元数据增加缓存, 提高反射的性能

类型转换

类型转换模块最重要的功能就是在为 SQL 语句绑定实参时, 将 Java 类型转为 JDBC 类型, 在映射结果集时再由 JDBC 类型转为 Java 类型

另外一个功能就是提供别名机制, 简化了配置文件的定义

日志模块

日志对于系统的作用不言而喻, 尤其是测试、生产环境上查看信息及排查错误等都非常重要。主流的日志框架包括 Log4j、Log4j2、S l f4j 等, Mybatis 的日志模块作用就是 集成这些日志框架

资源加载

Mybatis 对类加载器进行了封装, 用来确定类加载器的使用顺序, 用来记载类文件以及其它资源文件, 感兴趣可以参考 ClassLoaderWrapper

解析器模块

解析器模块主要提供了两个功能, 一个是封装了 XPath 类, 在 Mybatis 初始化时解析 Mybatis-config.xml 配置文件以及映射配置文件提供功能, 另一点就是处理动态 SQL 语句的占位符提供帮助

…

核心处理层

配置解析

在 Mybatis 初始化时, 会加载 Mybatis-config.xml 文件中的配置信息, 解析后的配置信息会 转换成 Java 对象添加到 Configuration 对象

📖 比如说在 .xml 中定义的 resultMap 标签, 会被解析为 ResultMap 对象

SQL 解析

大家如果手动拼写过复杂 SQL 语句, 就会明白会有多痛苦。Mybatis 提供出了动态 SQL, 加入了许多判断循环型标签, 比如 : if、where、foreach、set 等, 帮助开发者节约了大量的 SQL 拼写时间

SQL 解析模块的作用就是将 Mybatis 提供的动态 SQL 标签解析为带占位符的 SQL 语句, 并在后期将实参对占位符进行替换

SQL 执行

SQL 的执行过程涉及几个比较重要的对象, Executor、StatementHandler、ParameterHandler、ResultSetHandler

Executor 负责维护 一级、二级缓存以及事务提交回滚操作, 举个查询的例子, 查询请求会由 Executor 交给 StatementHandler 完成

StatementHandler 通过 ParameterHandler 完成 SQL 语句的实参绑定, 通过 java.sql.Statement 执行 SQL 语句并拿到对应的 结果集映射

最后交由 ResultSetHandler 对结果集进行解析, 将 JDBC 类型转换为程序自定义的对象

插件

插件模块是 Mybatis 提供的一层扩展, 可以针对 SQL 执行的四大对象进行 拦截并执行自定义插件

插件编写需要很熟悉 Mybatis 运行机制, 这样才能控制编写的插件安全、高效

接口层

接口层只是 Mybatis 提供给调用端的一个接口 SqlSession, 调用端在进行调用接口中方法时, 会调用核心处理层相对应的模块来完成数据库操作

问题答疑

.xml 文件定义 Sql 语句如何解析

Mybatis 在创建 SqlSessionFactory 时, XMLConfigBuilder 会解析 Mybatis-config.xml 配置文件

Mybatis 相关解析器

Mybatis 解析器模块中定义了相关解析器的抽象类 BaseBuilder, 不同的子类负责实现解析不同的功能, 使用了 Builder 设计模式

BaseBuilder

XMLConfigBuilder 负责解析 mybatis-config.xml 配置文件

XMLMapperBuilder 负责解析业务产生的 xxxMapper.xml

…

mybatis-config.xml 解析

XMLConfigBuilder 解析 mybatis-config.xml 内容参考代码 :

parseConfiguration

XMLConfifigBuilder#parseConfiguration() 方法将 mybatis-config.xml 中定义的标签进行相关解析并填充到 Configuration 对象中

xxxMapper.xml 解析

XMLConfifigBuilder#mapperElement() 中解析配置的 mappers 标签, 找到具体的 .xml 文件, 并将其中的 select、insert、update、delete、resultMap 等标签解析为 Java 中的对象信息

具体解析 xxxMapper.xml 的对象为 XMLMapperBuilder, 具体的解析方法为 parse()

parse

到这里就可以对当前问题作出答复了

Mybatis 创建 SqlSessionFactory 会解析 mybatis-config.xml, 然后 解析 configuration 标签下的子标签, 解析 mappers 标签时, 会根据相关配置读取到 .xml 文件, 继而解析 .xml 中各个标签

具体的 select、insert、update、delete 标签定义为 MappedStatement 对象, .xml 文件中的其余标签也会根据不同映射解析为 Java 对象

MappedStatement

这里重点说明下 MappedStatement 对象, 一起看一下类中的属性和 SQL 有何关联呢

MappedStatement

MappedStatement 对象中 提供的属性与 .xml 文件中定义的 SQL 语句 是能够对应上的, 用来 控制每条 SQL 语句的执行行为

Mapper 接口的存储与实现

在平常我们写的 SSM 框架中, 定义了 Mapper 接口与 .xml 对应的 SQL 文件, 在 Service 层直接注入 xxxMapper 就可以了

也没有看到像 JDBC 操作数据库的操作, Mybatis 在中间是如何为我们省略下这些重复繁琐的操作呢

这里使用 Mybatis 源码中的测试类进行验证, 首先定义 Mapper 接口, 省事直接注解定义 SQL

AutoConstructorMapper

这里使用 SqlSession 来获取 Mapper 操作数据库, 测试方法如下

primitiveSubjects

创建 SqlSession

#1 从 SqlSessionFactory 中打开一个 新的 SqlSession

获取 Mapper 实例

#2 就存在一个疑问点, 定义的 AutoConstructorMapper 明明是个接口, 为什么可以实例化为对象?

动态代理方法调用

#3 通过创建的对象调用类中具体的方法, 这里具体聊一下 #2 操作

SqlSession 是一个接口, 有一个 默认的实现类 DefaultSqlSession, 类中包含了 Configuration 属性

Mapper 接口的信息以及 .xml 中 SQL 语句是在 Mybatis 初始化时添加 到 Configuration 的 MapperRegistry 属性中的

MapperRegistry#addMapper

#2 中的 getMapper 就是从 MapperRegistry 中获取 Mapper

看一下 MapperRegistry 的类属性都有什么

MapperRegistry

config 为 保持全局唯一 的 Configuration 对象引用

knownMappers 中 Key-Class 是 Mapper 对象, Value-MapperProxyFactory 是通过 Mapper 对象衍生出的 Mapper 代理工厂

再看一下 MapperProxyFactory 类的结构信息

MapperProxyFactory

mapperInterface 属性是 Mapper 对象的引用, methodCache 的 key 是 Mapper 中的方法, value 是 Mapper 解析对应 SQL 产生的 MapperMethod

📖 Mybatis 设计 methodCache 属性时使用到了 懒加载机制, 在初始化时不会增加对应 Method, 而是在 第一次调用时新增

cachedMapperMethod

MapperMethod 运行时数据如下, 比较容易理解

MapperMethod 运行状态

通过一个实际例子帮忙理解一下 MapperRegistry 类关系, Mapper 初始化第一次调用的对象状态, 可以看到 methodCache 容量为0

MapperRegistry 运行状态

我们目前已经知道 MapperRegistry 的类关系, 回头继续看一下第二步的 MapperRegistry#getMapper() 处理步骤

getMapper

核心处理在 MapperProxyFactory#newInstance() 方法中, 继续跟进

newInstance

MapperProxy 继承了 InvocationHandler 接口, 通过 newInstance() 最终返回的是由 Java Proxy 动态代理返回的动态代理实现类

看到这里就清楚了步骤二中接口为什么能够被实例化, 返回的是 接口的动态代理实现类

Mybatis Sql 的执行过程

根据 Mybatis SQL 执行流程图进一步了解

Mybatis-SQL执行流程

大致可以分为以下几步操作:

📖 在前面的内容中, 知道了 Mybatis Mapper 是动态代理的实现, 查看 SQL 执行过程, 就需要紧跟实现了 InvocationHandler 的 MapperProxy 类

执行增删改查
@Select(" SELECT * FROM SUBJECT WHERE ID = #{id}")
PrimitiveSubject getSubject(@Param("id") final int id); 

我们以上述方法举例, 调用方通过 SqlSession 获取 Mapper 动态代理对象, 执行 Mapper 方法时会通过 InvocationHandler 进行代理

MapperProxy

在 MapperMethod#execute 中, 根据 MapperMethod -> SqlCommand -> SqlCommandType 来确定增、删、改、查方法

📖 SqlCommandType 是一个枚举类型, 对应五种类型 UNKNOWN、INSERT、UPDATE、DELETE、SELECT、FLUSH

execute

参数处理

查询操作对应 SELECT 枚举值, if else 中判断为返回值是否集合、无返回值、单条查询等, 这里以查询单条记录作为入口

Object param = method.convertArgsToSqlCommandParam(args);
result = sqlSession.selectOne(command.getName(), param); 

convertArgsToSqlCommandParam_new

参数解析

📖 这里能够解释一个之前困扰我的问题, 那就是为什么方法入参只有单个 @Param("id"), 但是参数 param 对象会存在两个键值对

继续查看 SqlSession#selectOne 方法, sqlSession 是一个接口, 具体还是要看实现类 DefaultSqlSession

selectOne

因为单条和查询多条以及分页查询都是走的一个方法, 所以在查询的过程中, 会将分页的参数进行添加

selectList

执行器处理

在 Mybatis 源码中, 创建的执行器默认是 CachingExecutor, 使用了装饰者模式, 在类中保持了 Executor 接口的引用, CachingExecutor 在持有的执行器基础上增加了缓存的功能

CachingExecutor#query

delegate.query 就是在具体的执行器了, 默认 SimpleExecutor, query 方法统一在抽象父类 BaseExecutor 中维护

BaseExecutor#query

BaseExecutor#queryFromDatabase 方法执行了缓存占位符以及执行具体方法, 并将查询返回数据添加至缓存

queryFromDatabase

BaseExecutor#doQuery 方法是由具体的 SimpleExecutor 实现

doQuery

执行 SQL

因为我们 SQL 中使用了参数占位符, 使用的是 PreparedStatementHandler 对象, 执行预编译SQL的 Handler, 实际使用 PreparedStatement 进行 SQL 调用

PreparedStatementHandler_query

返回数据解析

将 JDBC 返回类型转换为 Java 类型, 根据 resultSets 和 resultMap 进行转换

handleResultSets

5.4 Mybatis 中分页如何实现

通过 Mybatis 执行分页 SQL 有两种实现方式, 一种是编写 SQL 时添加 LIMIT, 一种是全局处理

SQL 分页
<select id="getSubjectByPage" resultMap="resultAutoMap">
    SELECT * FROM SUBJECT LIMIT #{CURRINDEX} , #{PAGESIZE}
</select> 
拦截器分页

上文说到, Mybatis 支持了插件扩展机制, 可以拦截到具体对象的方法以及对应入参级别

我们添加插件时需要实现 Interceptor 接口, 然后将插件写在 mybatis-config.xml 配置文件中或者添加相关注解, Mybatis 初始化时解析才能在项目启动时添加到插件容器中

pluginElement

由一个 List 结构存储项目中全部拦截器, 通过 Configuration#addInterceptor 方法添加

InterceptorChain

重点需要关注 Interceptor#pluginAll 中 plugin 方法, Interceptor 只是一个接口, plugin 方法只能由其实现类完成

ExamplePlugin

Plugin 可以理解为是一个工具类, Plugin#wrap 返回的是一个动态代理类

wrap

这里使用一个测试的 Demo 看一下方法运行时的参数

AlwaysMapPlugin

虽然是随便写的 Demo, 但是与正式使用的插件并无实际区别

插件运行状态

结言

相对于 Spring 而言,Mybatis 足够的轻巧,属于入门级的框架源码,但是里面用到的设计模式却不少,可以借鉴其中的设计进行套用业务代码。同时,掌握了 Mybatis 之后对阅读 SpringCloud、Dubbo 源码提供了不小的帮助,这里也希望看过文章的小伙伴对 Mybatis 的理解能加深印象

当然,怎么说也是框架源码,不可能通过一篇文章全部掌握,读者可以把源码下载多跑几个 Demo,Mybatis 源码中测试类覆盖很全面,不用担心没有方向。如果文章对你有帮助那就点个关注支持下吧,祝好。

最后

最近我整理了整套《JAVA核心知识点总结》,说实话 ,作为一名Java程序员,不论你需不需要面试都应该好好看下这份资料。拿到手总是不亏的~我的不少粉丝也因此拿到腾讯字节快手等公司的Offer

Java进阶群

好了,以上就是本文的全部内容了,如果觉得有收获,记得三连,我们下期再见。

SSL证书验证:VMware Horizon Client的安全隐患与临时解决方案 本文深入分析了VMware Horizon Client中SSL证书验证失败的安全隐患,提供了临时解决方案与长期防御策略。针对自签名证书、证书链断裂等常见问题,文章详细解析了风险成因,并给出分级响应方案,帮助企业平衡安全与效率。通过实战案例和自动化脚本,指导IT管理员构建主动防御体系,有效降低中间人攻击风险。 阅读详情

相关推荐

PCB设计实践(三十二)PCB设计遇到大电流时的设计技巧

本文系统阐述10A至数百安培PCB设计的六大关键技术。载流能力优化强调铜厚选择(2-4oz)、线宽计算及并联结构;热管理提出散热孔阵列、铜基板嵌入等方案;布局策略包括功率分区和低阻抗路径设计;材料工艺推荐铝基板、陶瓷基板等高效解决方案;安全设计涵盖电气隔离与保护电路;验证环节需结合热仿真与实测。典型150A电机驱动板案例显示,通过4oz铝基板、散热孔阵列等设计,可实现温升≤45℃的稳定运行。核心在于铜厚线宽协同、主动散热及严格验证。

致力于硬件设计、人工智能知识及技术的分享,不断鞭策自己成长,共同进步! 4232

MyBatis之【配置mybatis】

1、添加框架的步骤 (1)添加依赖 (2)添加配置文件 步骤: 1、新建库建表 2、新建maven项目,选quickstart模板 3、修改目录,添加缺失目录,修改目录属性 4、修改pom.xml文件,添加MyBatis的依赖,添加Mysql的依赖 5、修改pom.xml文件,添加资源文件指定 <resource> <directory>src/main/java</directory> <includes> <.

weixin_48485216的博客 1721

【CubeMX】STM32G474 HRTIM 死区时间与互补PWM实战解析

本文深入解析STM32G474的HRTIM高分辨率定时器在互补PWM生成与死区时间配置中的应用。通过CubeMX工具详细演示时钟配置、单路PWM基础、互补输出与死区时间设置,并结合逆变器等电力电子实战案例,帮助开发者避免直通风险,优化系统性能。

efc12345678的博客 746

MyBatis的核心配置与简单应用

在不同的映射文件中,元素的子元素的id可以相同,MyBatis通过元素的namespace属性值和子元素的id联合区分不同的Mapper.xml文件。很多时候,执行插入操作后,需要获取插入成功的数据生成的主键值,不同类型数据库获取主键值的方式不同,下面分别对支持主键自动增长的数据库获取主键值和不支持主键自动增长的数据库获取主键值的方式进行介绍。是一个配置属性的元素,该元素的作用是读取外部文件的配置信息。使用元素执行更新操作非常简单。

qq_56444564的博客 1062

通俗傻瓜式理清光栅化渲染和光线追踪渲染的原理

用通俗语言傻瓜式的讲清楚光栅渲染和光线追踪渲染的原理,方便没有相关理论基础的朋友理解入门。

qq_37366618的博客 2万+

Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的理论简述和python仿真实现(附源码)

经典论文Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的学习与编程仿真,提供源码

m0_59701926的博客 1239

Mybatis配置详解

MyBatis采用了不同的架构和设计理念,封装了JDBC底层操作,并提供了更方便、高效的CRUD编程接口以及自动参数映射和结果集处理,大大简化了数据库开发。

drhnb的博客 8937

Android系统开发工程师面试指南与参考答案

本文整理了Android系统开发工程师面试常见问题与参考答案。核心内容涵盖:1)Framework层定制方法,如修改HAL和系统服务;2)ANR问题分析工具(systrace)与解决方案;3)性能优化实践,包括开机加速和功耗管理;4)四大组件工作机制与应用案例;5)Native崩溃调试技巧。文章强调通过AOSP源码研究、工具使用和项目案例准备来提升面试表现,重点考察应聘者的系统开发深度和实操能力。参考答案均基于实际开发经验,提供可量化的优化成果说明。

郑伟强dev的专栏 257

1、什么是 Mybatis?

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

IT匠人的博客 439

【Codecs系列】x265编码器(十二):子像素运动搜索

在基于块运动补偿的视频编码框架中,运动搜索是最为重要的环节之一,同时也是编码端最为耗时的模块。运动搜索包括整像素运动搜索和子像素运动搜索,其中整像素运动搜索已经有很多快速算法,比如经典的三步搜索法、菱形搜索、六边形搜索以及TZSearch等等;但子像素搜索的快速算法却比较少,本文主要讲解x265编码器中的子像素搜索方法以及相关的快速搜索方法。

优快云明星博主,认证博客专家,视频、Matlab领域优质创作者。 749

LangGraph 实战教程:搭建一个智能办公多Agent协作平台

只存储必要的信息:不要把所有的原始数据都存储在状态中,比如销售数据可以存储在数据库或向量数据库中,状态中只存储数据的 ID 或摘要。使用类型提示:避免类型错误,提高代码的可维护性。支持增量更新:LangGraph 默认支持状态的增量更新(通过reduce函数),比如messages列表可以通过追加新消息的方式更新,而不是每次都重新创建整个列表。Normal Edge 的定义非常简单,只需要在StateGraph对象(稍后会详细讲解)上调用add_edge# 创建一个 StateGraph 对象。

SuperAGI2025 222

spring整合mybatis的配置类

文章目录一、SpringConfig配置类:二、Mybatis的配置类三、JDBC配置类四、db.properties 一、SpringConfig配置类: @Configuration @ComponentScan(basePackages = "com.itheima.service") @Import({MybatisConfig.class,JdbcConfig.class}) public class SpringConfig {} 二、Mybatis的配置类 @Configuration p

javaren001的博客 1713

解决Home Assistant中安装的Advanced SSH & Web Terminal插件打开提示“502 Bad Gateway” 且弹窗提示“加载项似乎尚未准备就绪,它可能仍在启动中“问题

  在HomeAssistant的应用商店安装了【AdvancedSSH&WebTerminal】插件,但是打开这个终端连接到HomeAssistant的时候却提示“502BadGateway”且弹窗提示“加载项似乎尚未准备就绪,它可能仍在启动中,您想重试吗?”一直无法进入HomeAssistant的系统中

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2843

八股文知识点汇总——面试备战宝典

八股文知识点汇总——面试备战宝典 【下载地址】八股文知识点汇总面试备战宝典 《八股文知识点汇总——面试备战宝典》是为Java工程师量身打造的面试指南,汇集了各大互联网公司常见的面试题。内容涵盖MyBatis、ZooKeeper、Redis、Java并发编程及Spring等核心知识点,帮助求职者深入理解技术原理与实践应用。...

gitblog_06755的博客 456

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

大厂技术面试核心考察点与应届生备战指南

技术面试是评估工程师综合能力的重要环节,其核心在于考察候选人的算法思维、系统设计能力和问题解决逻辑。算法数据结构作为计算机科学基础,需要掌握从时间复杂度分析到实际业务场景转化的能力。系统设计则关注分层架构思维,包括需求量化、技术选型依据等工程实践要点。在互联网高并发场景下,分布式系统设计和调试能力尤为重要,如处理事务边界、保证幂等性等常见挑战。本文结合大厂面试真题,详解如何通过分层训练法和STAR-L应答策略,系统提升技术面试通过率,特别适合准备校招的应届生参考。

weixin_30386713的博客 418

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Github上疯传的BATJ一线大厂面试 “备战” 手册终开源!(职业规划,跳槽,实操,面试真题全有)

前言: 受疫情影响,很多人今年上半年根本不敢跳槽找工作,甚至相当多的程序员遭遇了裁员、调岗、降薪等! 好在金九银十季到了,我特地整理了这份【Java Github 超硬核面试 “备战” 手册】!除了Java各种技术专题知识、大厂面试真题,我也会分享一些近些年自己开发和工作过程中的一些感悟、心得和无奈。 本仓库大部分内容来自我近几年的收集和整理,整体文章思路也是围绕着【面试备战计划】来进行整理的,主体内容包含:职业规划篇,跳槽篇,实操篇,一线大厂面试题篇,以及高频面试必备综合篇等知识内容。 如果你可以

Java圈全能架构师的博客 368

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

大厂Java面试全流程解析与备战指南

Java作为企业级开发的核心语言,其技术栈深度与工程实践能力是大厂面试的重点考察维度。从JVM内存模型到Spring框架原理,面试官会通过渐进式问题链评估候选人的技术深度,典型场景包括ConcurrentHashMap扩容机制、循环依赖解决等热点问题。在分布式系统设计中,需要掌握Redis队列削峰、Lua脚本保证原子性等关键技术,这些能力在电商秒杀等高并发场景尤为重要。本文通过真实面试案例,详解大厂Java岗位从简历筛选到系统设计的全流程考察要点,特别适合准备冲击Tier1互联网公司的中高级开发者参考。

weixin_34387468的博客 464

大厂面试真题解析:java 集合 +spring+ 并发编程 +MyBatis

不知道最近面试是否顺利,是否会经常问到一些自己不熟悉的问题,不知道怎么去回答这些问题,今天小编给大家整理了 2022 年大厂经常问到了的一些面试真题及解析,内容点包含有 java 集合,jvm,并发编程,spring,mybatis,springMVC,微服务,Dubbo,netty,网络,zookeeper,kafka,rabbitMQreadis 缓存,数据库,设计模式。等一线大厂互联网大厂常问到的面试真题,大家可以学习下用来突击金三银四。ArrayList 和 Vector 的区别。说说 ArrayL

m0_46995061的博客 522

最新整理Java面试八股文,大厂必备神器

本文探讨了国内IT行业面试中广泛存在的"八股文"现象。文章首先解释八股文原指明清科举考试的固定格式文体,继而类比当前IT面试中标准化的技术问题考察方式。通过对比北美工程师侧重算法和设计的面试模式,分析国内采用八股文面试的原因:求职者众多、降低面试成本。文中列举了Java、JVM、多线程等常见技术领域的典型面试问题,并指出这种标准化考察虽非最优解,但符合当前国情。最后强调掌握大厂技术要求对程序员职业发展的重要性,建议多学习主流企业技术栈以提升竞争力。

2401_89221867的博客 1238

2025 年最全大厂面试真题解析:java 集合 +spring+ 并发编程 +MyBatis

这份面试总结比较多,就不一一的详细介绍了,粗略的将主要内容展示一下,其中含有 20+的知识点如需参考原件 pdf 学习+刷题可以在文末获取。

m0_50180963的博客 834

互联网大厂Java求职面试实战:核心技术全景详解

在互联网大厂Java求职面试中,面试官通常会从Java核心知识到分布式系统等多方面进行深入提问,考察应聘者的技术深度与业务理解。今天我们通过一个严肃的面试官和搞笑程序员谢飞机的对话,带你体验真实的三轮面试问答。文章最后附详细答案解析,助你备战大厂面试。

weixin_44562659的博客 801

2025最新版Java面试必看的1000道面试解析,助你通过大厂面试

如今互联网行业用的最多就是 MySQL,然而对于高级 Web 面试者,尤其对于寻找 30k 下工作的求职者,很多 MySQL 相关知识点基本都会涉及,如果面试中,你的相关知识答的模糊和不切要点,基本大多稍好公司的面试官,基本也不会对你有兴趣,毕竟稍微量大的项目,最终都会让你去深入数据库,而且最终的大多瓶颈首先也会出现在数据库。在很多公司面试的过程中,都必不可少地考察 Redis 知识点的掌握。看面试题可以是为了面试,也可以是对自己学到的东西的一种查漏补缺,更加深刻的去了解一些核心知识点。

m0_46995061的博客 1005

2025 各互联网大厂面经及总结 + 大厂 Java 岗面试真题解析(进大厂必看攻略)

人人都想进大厂,基础很重要,要好好打磨,然后进阶部分理论加实践一起,方可事半功倍。很多 Java 开发者面试之前,可能没有较长的工作时间或者较为丰富的工作经验,所以不知道互联网公司或者一线互联网公司技术面试都会问哪些问题?再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。这里收集了一些同行程序员的大厂面试过程及总结予以参考)​。

sjkflw121150的博客 1450

2025最新版Java后端面试八股文,涵盖一线大厂面试内容

2025 年的互联网行业竞争越来越严峻,面试也是越来越难,一直以来我都想整理一套完美的,奈何难抽出时间,这套 1200+道的 Java 面试手册我整理了整整 1 个月,上传到 Git 上目前 star 数达到了 30K+(共 485 页,32W 字)阿里 P8 熬了一个月肝出这份 40W 字的 Java 面试手册,下面将这份笔记的内容以截图的形式展示给大家!

sjkflw121150的博客 1074

滴滴面试复盘:八股文背后的原理追问与备战体系

在技术面试中,八股文常被视作背诵题库,但真正的大厂面试官会把它当成高效的知识探针,通过连续追问考察候选人对原理的理解深度。从JVM内存模型、MySQL索引结构到Redis缓存一致性,八股题往往只是起点,面试官更关心你是否能基于底层机制解决真实工程问题。本文基于滴滴多轮面试的真实复盘,展示面试官如何从一道基础题层层深挖,并给出了一套以知识地图、三层答案和项目锚点为核心的备战体系,帮助Java开发者把八股文转化为可迁移的工程能力,从容应对大厂技术面试。

weixin_34332905的博客 320

八股文知识点汇总面试备战宝典:助你Java面试一臂之力

八股文知识点汇总面试备战宝典:助你Java面试一臂之力 【下载地址】八股文知识点汇总面试备战宝典 《八股文知识点汇总——面试备战宝典》是为Java工程师量身打造的面试指南,汇集了各大互联网公司常见的面试题。内容涵盖MyBatis、ZooKeeper、Redis、Java并发编程及Spring等核心知识点,帮助求职者深入理...

gitblog_06733的博客 447
上一篇: 2021面试还搞不懂MyBatis?快看看这阿里P8出的27道面试题! (含管案和思维导图)
下一篇: Redis是单线程的,但Redis为什么这么快?
Python_cola
博客等级 码龄5年 2031粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值