- 博客(18)
- 收藏
- 关注
原创 exists/not exists 详细介绍
exists 是sql中的一个关键字,用于判断是否至少返回了一条数据,他的用途是父查询中根据 子查询返回的结果集是否存在来决定是否包含某行数据,其与in跟join等使用方式不通,其不关心返回了那些值,只关心是否有值返回。
2024-09-01 14:32:14
286
原创 双检锁创建单例为什么会出现空指针
上面错误双重检查锁定的示例代码中,如果线程 1 获取到锁进入创建对象实例,这个时候发生了指令重排序。当线程1 执行到 t3 时刻,线程 2 刚好进入,由于此时对象已经不为 Null,所以线程 2 可以自由访问该对象。以上代码 2,3 可能发生重排序,但是并不会重排序 1 的顺序。也就是说 1 这个指令都需要先执行,因为 2,3 指令需要依托 1 指令执行结果。看似没有问题,其实不然,出现空指针的原因是因为用new创建对象时并不是一个原子操作,使用java-c可以快速查看字节码。找了个图方便大家理解。
2024-06-16 16:40:44
281
2
原创 IOC与DI
ioc就是一个巨大的容器,里面保存很多对象的实例,主要设计ioc控制反转,即将对象的创建的控制权交给ioc,由ioc管理bean的创建及管理,ioc容器创建的对象叫做bean对象。那么怎么能将其加入到ioc容器中,那么就需要在类上加上@Component,为了更好的区分这个bean来自哪一层,又引入了@Controller (标注在控制层类上)@Service (标注在业务层类上)@Mapper(标注在数据访问层类上)那么我加入到了ioc容器中我如何实现将bean引入到我的类中去呢?
2024-06-02 15:02:14
356
原创 JDBC连接数据库
数据库连接池就相当于一个容器,负责分配管理连接我就给带入场景方便理解,我开了一个餐厅,此时我招聘了一个服务员进行上菜,上完一个菜我就将他辞退并重新招聘,这就是没用连接池。当服务员上完一个菜再进行下个菜的传递这就是使用了连接池,后者也是我们的常规做法,所以我们也尽量使用连接池的方式。
2024-06-02 01:51:26
1759
原创 什么是事务
原子性是指事务是一个不可分割的工作单位,整个事务中的所有操作要么全部提交成功,要么全部失败,在场景中可以理解为,我转给李四钱,李四收到钱,这就是成功,我给了李四钱,这时候出现了一些特殊情况导致李四没收到,那么这笔钱必须给我补回来。首先我给大家带入一个场景,我购买了李四的商品,在这时我需要为李四进行转账,那么我账户减少的钱跟李四账户增加的钱必须要同时成功,这就是事务。隔离性是指一个事务的执行不能有其他事务的干扰,事务的内部操作和使用数据对其他的并发事务是隔离的,互不干扰。隔离性(Isolation)
2024-06-01 23:57:20
211
原创 SQL注入
SQL注入(SQL lnjection)是发生在Web程序中数据库层的安全漏洞,是比较常用的网络攻击方式之一,他不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至修改数据库。也就是说,SQL注入就是在用户输入的字符串中添加SQL语句,如果在设计不良的程序中忽略了检查,那么这些注入进去的SQL语句就会被数据库服务器误认为是正常的SQL语句而运行,攻击者就可以执行计划外的命令或者访问未授权的数据。或者在登陆时进行攻击,删除用户表。
2024-06-01 23:47:53
205
原创 redis在如何在springboot中使用
当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为。JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为。database:指定使用Redis的哪个数据库,Redis服务启动后默认有16个数据库,编号分别是从0到15。在application.yml中添加读取application-dev.yml中的相关Redis配置。在test下新建测试类。
2024-05-29 23:56:03
188
原创 反射的使用
虽然说反射在开发中很少用到,但它可以帮助你去理解了解,都知道spring是基于动态代理来实现的,而动态代理又是基于反射的,也就是说你熟练掌握的了反射,你就熟练掌握了如何开发框架,哈哈哈哈开个玩笑。
2024-05-29 23:42:23
659
原创 Stream流
虽然说这是1.8的“新特性”,但我相信仍有部分同僚还没能掌握,当然这并不是什么多牛逼的技能,但其可以帮助我们能看懂同事写的代码,避免扯皮。这篇文章将会介绍stream流的使用,相信看完会有不小的收获,废话不多说,步入正题。
2024-05-28 23:56:06
876
原创 优雅的判空
在开发时最常见的异常就是空指针异常,在网上有个段子说程序员一日三空,常规的判断就是嵌套大量的if啥啥啥不等于 null如下;为了方便描述,这边建了三个实体类。
2024-05-28 22:03:34
207
原创 递归sql(mysql)
这是比较笼统的,递归sql主要用于遍历层次结构比如地理位置省下有各个地级市,地级市由各个县级市跟区,我要查出这省内的各个县级市,就要用到递归sql。默认终止次数是1000,在第1001报以下错误,不过应该不会有这么深的层次结构。是一个递归的查询子句,他会把查询出来的结果再次代入到查询子句中继续查询。注意:避免完成后直接没看到注意事项,所以写在前面,递归的终止条件,递归函数肯定都写过,递归sql就不一定了。这条sql就是所谓的递归sql了,有些场景可能就需要用到递归sql。
2024-05-27 22:25:23
244
原创 利用字典树进行字符串替换
先来介绍下什么是字典树吧,与大多数树状结构无异,都是从根节点出发下面有子节点,对子节点的管理是通过一个字典来进行管理的,也就是map,说到这很多朋友就反应过来了,为了方便理解我给附上图,bi站上的动画做的通俗易懂。"****"肯定都见过吧,我们最先想到的肯定是暴力for循环,那如果敏感词足够多呢,那么其效率可想而知,最近进行学习时发现了可以利用字典树进行实现这一个步骤。具体实现呢我这已经描述的非常清楚了,有不懂的可以评论区回复,并且在写这篇文章时自己发现了个小bug,不知道有没有眼尖朋友看出来。
2024-05-27 20:40:26
697
原创 异步任务CompletableFuture
CompletableFuture能够联想到的是Future,其次呢,其还实现了CompletionStage,这个作用呢就是对一些执行时间比较长的任务进行拆分。然后调用CompletableFuture.supplyAsync()跟allof().join()方法去完成任务的执行。在使用的时候呢需要提供一个线程池(线程工厂跟拒绝策略是默认的,为方便,为未指定,有需求可自行添加)
2024-05-19 23:48:18
155
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人