
Java
文章平均质量分 69
0warnings0errors
这个作者很懒,什么都没留下…
展开
-
Java Lock最佳实践
在进行并发操作时,通常需要加锁操作来保证一致性。Java类库中提供了几种用于替代synchronized的锁,比如ReentrantLock,具体实现可能还有基于Redis等其他形式的锁,在JDK官方文档中,给出了加锁的最佳实践:正确加锁操作Lock l = ...;l.lock();try { // access the resource protected by this lock} finally { l.unlock();}unlock操作放在finally无可厚非,这里主要原创 2021-09-27 19:16:57 · 365 阅读 · 0 评论 -
Java四种引用类型及常见应用场景
Java具有四种不同强度的引用类型:强引用:被强引用关联的对象不会被回收,一般通过new来构造对象时,就会返回一个强引用。Object obj = new Object()软引用:通过SoftReference来构造,会在内存不足时回收,一般可用于缓存等场景,比如MyBatis中缓存的装饰器就有SoftCache类型。在Class.java中用于保存反射数据弱引用:通过WeakReference来构造,会在下次GC时回收,也可用于缓存场景,MyBatis缓存装饰器WeakCache。线程类原创 2021-09-26 19:10:19 · 445 阅读 · 0 评论 -
Java8下Collectors.toMap方法当key重复时报错信息错误
现象:在Java 8下,使用Collectors.toMap聚合流数据,如果key重复时,会报错如下:明明是key重复,并且错误信息前缀是Duplicate key,后边却是value1。分析:查看Collectors.toMap源码如下toMap最终是调用了Map.merge方法,传入的mergeFunction是throwingMerger直接抛出异常,日志信息使用的是第一个参数u。传入的mapSupplier是HashMap对象(HashMap::new)。所以最终会调用到HashMap原创 2021-09-26 10:20:38 · 6620 阅读 · 0 评论 -
MyBatis原理——用户交互接口SqlSession
目录概述SqlSession提供的交互方式1. 基于Statement ID2. 基于Mapper接口SqlSession执行分析创建SqlSession的方式SqlSessionManagerSqlSessionTemplate概述正如其名,SqlSession代表着一次SQL会话,是MyBatis提供给用户的顶层接口,用户通过它来访问数据库。源码对该类的注释如下:/** * The primary Java interface for working with MyBatis. * Throu原创 2021-01-19 21:46:37 · 420 阅读 · 0 评论 -
Java SPI机制及在数据库连接中的实现
目录SPI是什么使用场景使用方法数据库连接中的应用Java SPI的不足SPI是什么SPI全称Service Provider Interface。是Java提供的一套用来被第三方实现或者扩展的API,它可以用于框架扩展和替换组件。是一种 “基于接口的编程+策略模式+配置文件” 组合实现的动态加载机制。换句话说,就是框架提供接口,具体实现交给组件提供方。整体机制如下(来源 高级开发必须理解的Java中SPI机制):使用场景正如前边所说,SPI适用于:调用者根据业务需求,启用、扩展、或者替换框架的实原创 2020-11-10 18:02:41 · 604 阅读 · 0 评论 -
MyBatis原理——传统JDBC操作数据库
目录传统方式操作数据库DriverManger与DataSource传统方式操作数据库传统方式使用JDBC操作数据库主要有以下几步:加载数据库驱动,并注册从DriverManager获取数据库连接从连接创建Statement对象给Statement对象传入SQL语句及参数调用Statement对应的执行方法,操作数据库对于查询语句,返回ResultSet,遍历即可得到所要查询的数据关闭资源举一个简单的例子:假设在本地部署好了MySQL数据库,并有个名为test的数据库,库中有个简单的原创 2020-11-10 16:52:54 · 305 阅读 · 0 评论 -
《Java Puzzlers》——类
文章目录继承中的同名字段使用类库中类的名字命名问题命名问题续跨包访问方法作用域字段隐藏私有成员同一性名字重用术语表继承中的同名字段问题:class Base { public String className = "Base";}class Derived extends Base { private String className = "Derived";}public class PrivateMatter { public static void main(原创 2020-09-23 20:54:57 · 194 阅读 · 0 评论 -
MyBatis学习笔记——MyBatis updateByExample方法和updateByExampleSelective方法的区别
使用 MyBatis,通常会使用 MyBatis Generator 插件逆向生成一套接口和.xml映射文件, 来简化数据库SQL操作。在进行数据库的更新时,通常会用到映射出来的mapper的两个更新方法:updateByExample(Record recode, RecordExample example) 和 updateByExampleSelective(Record recode, RecordExample example)。这里记录下两者区别。updateByExample 方法对应的x原创 2020-09-07 16:09:54 · 2531 阅读 · 0 评论 -
Spring Boot+Vue项目 微博系统(8):记住我功能配置源码分析
这里再多说下,对于记住我功能,同样可以查看RememberMeConfigurer,看看是怎么实现的:public final class RememberMeConfigurer<H extends HttpSecurityBuilder<H>> extends AbstractHttpConfigurer<RememberMeConfigurer<H>, H> { private static final String DEFAULT_REMEM原创 2020-09-01 09:47:49 · 578 阅读 · 0 评论 -
《Java Puzzlers》——高级谜题
文章目录有毒的括号等价的自反性、传递性和对称性原生类型泛型序列化问题匿名内部类的继承常量表达式随机shuffle的公平性最终章,一些小知识有毒的括号问题:给定一个合法的 Java 表达式,添加一个注解赋值顺序的括号就变成不合法的了。解决方案:补码的不对称性,给最小负数加一个括号就不合法了。等价的自反性、传递性和对称性不符合自反性,例如 Double.NaN == Double.NaN 为 false;符合对称性;不符合传递性,由于整数与浮点数之间的转换有可能会出现丢失精度的问题,所以可能破坏原创 2020-08-31 20:41:16 · 271 阅读 · 0 评论 -
Mybatis学习笔记——selectByExample方法和selectByExampleWithBLOBs方法区别
使用 MyBatis,通常会使用 MyBatis Generator 插件逆向生成一套接口和.xml映射文件, 来简化数据库SQL操作。在使用 selectByExample(RecordExample example) 进行数据库的查找时,发现长字段(实践时为 description varchar(256))获取结果为 null 。而其他字段则正常,查看该方法对应的xml配置文件如下:<select id="selectByExample" parameterType="cn.novalue.c原创 2020-08-16 11:16:29 · 3556 阅读 · 0 评论 -
《剑指offer》Java题解
文章目录数组中重复的数字二维数组中的查找原地替换字符串空格从尾到头打印链表重建二叉树二叉树的下一个结点用两个栈实现队列斐波那契数列变态青蛙跳台阶旋转数组的最小数字矩阵中的路径机器人的运动范围剪绳子二进制中1的个数数值的整数次方打印从1到最大的n位数O(1)时间内,删除链表中给定结点删除链表中重复的结点正则表达式匹配表示数值的字符串调整数组顺序使奇数位于偶数前边并保持相对顺序链表中倒数第k个结点链表中环的入口结点反转链表合并两个排序的链表二叉树的镜像对称的二叉树顺时针打印矩阵包含min函数的栈栈的压入、弹出序原创 2020-08-15 22:16:44 · 442 阅读 · 0 评论 -
LinkedHashMap源码分析及LRU缓存的实现
目录前言HashMap前言网上对用LinkedHashMap实现LRU缓存算法的博客有很多,在这篇文章的最后,我也会基于LinkedHashMap实现一个简单的LRU缓存。如果单看实现的话很简单,但如果只是会实现总会感觉不踏实,其实这里边有很多值得学习的地方。这里我会先从LinkedHashMap的源码入手,通过源码分析它是如何在HashMap的基础上实现Linked的。如果只想看实现可以从目录直接跳转。HashMap要说LinkedHashMap就绕不过HashMap,因为从源码中(甚至是命名中)原创 2020-05-21 20:21:47 · 258 阅读 · 0 评论