
JAVA之路
文章平均质量分 63
step by step
zhihuan祉幻
这个作者很懒,什么都没留下…
展开
-
MySQL-全局锁,表锁,行锁分析
今天我们来研究下数据库的锁,首先数据库锁的设计就是用来处理并发问题的,作为多用户共享的资源,出现并发访问的时候,数据库就要合理的控制访问资源的规则,锁????就是用来实现这些访问规则的重要数据结构!根据锁的范围大小,MySQL里面的锁一共可以分为全局锁,表级锁,行锁三大类。下面我们来一一介绍下这些锁:全局锁:全局锁就是对整个数据库实例加锁,加了全局锁之后我们的整个数据库就会变成只读的状态,其他线程的操作都会阻塞,比如数据的增删改,修改表结构,建表等语句。MySQL提供了一个加全局锁的命令就是Flu原创 2021-11-27 21:27:16 · 592 阅读 · 0 评论 -
MySQL-事务是怎么实现的?
*懒得多说废话: *ACID:原子性,一致性,隔离性,持久性原子性:表示事务是最小的执行单位,该操作不能再被拆分, 保证事务的要么全部成功,要么就不执行。一致性:表示数据库进行事务的操作后,由一个正确的状态到另一个正确的状态隔离性:并发访问数据库的时候,事务与事务之间的操作不会互相受影响,是独立的。持久性:在数据库进行事务的操作后,是能成功的永久的保存到磁盘里的,即使数据库发生故障也不影响;当数据库上有多个事务同时执行的时候就可能会出现脏读,不可重复读,幻读的问题脏读:当一个事务A正在访原创 2021-11-24 09:39:10 · 662 阅读 · 0 评论 -
MySQL-一条更新语句是怎么执行的
上一篇博客我们简单讲述了一条查询语句在MySQL中是怎么执行的,现在我们再来看看一条更新语句在MySQL中是怎么执行的(前提是InnoDB引擎):比如我们有这么一条sqlupdate user set age=age+1 where user_id = 1;首先确实的是他还是会走在我上一篇的查询语句运行的文章中那些流程,然后在走到执行器这一步的时候开始不一样了:在执行器先找引擎找到user_id = 1的这一行(如果这一行在内存中的话就直接返回这一行,内存中没有的话就要先从磁盘中读取到内存中再返原创 2021-11-20 09:39:23 · 605 阅读 · 0 评论 -
MySQL-一条查询语句是怎么执行的
MySQL基础架构图:总体上来说,MySQL是分为Server层跟存储引擎层两个部分的Server层:包含连接器,查询缓存,分析器,优化器,执行器等大多数核心的服务功能,以及所有的内置函数。存储引擎:主要负责数据的存储和提取,它其实是相当于一个插件来的。我们熟知的有InnoDB,MyISAM,Memory等存储引擎,在MySQL5.5.5之后默认的存储引擎就是InnoDB下面就让我们来跟随一条sql的内部执行过程,它在MySQL里都经历了什么概括:客户端先要与数据库进行连接,才能查原创 2021-11-14 12:02:04 · 928 阅读 · 0 评论 -
Java基础-HashMap中containsKey方法的时间复杂度分析
现有场景是两个User对象的List,A中只有id跟用户名,B中有id跟登录时间,现在我们要把他们合成一个完成的User的List我们直接暴力的的解法就是两个for循环,然后判断id是否相等,相等就给A中复制对应的登录时间。这样这段代码时间复杂度就是O(n^2)然后一般的推荐做法就是我们将其中一个list转为Map,id为key,对象或者直接登录时间为value,然后只需要一遍for循环然后通过containsKey判断id,然后直接进行赋值,那么这样我们整体的时间复杂度就是O(n)了这里我们就来探究原创 2021-06-14 18:14:08 · 3577 阅读 · 1 评论 -
Spring-ApplicationContextAware接口的使用
多日前在项目中使用了ApplicationContextAware这个接口,用来初始化策略类供选择不同的短信平台发送短信。抱着不能copy进来能用就完事了,必须要去弄懂为什么这么用的心态,还是多方学习实践,总结出该文ApplicationContextAware接口的意义:首先,我们都知道ApplicationContext是spring的容器吧,我们那些bean对象啊都是放在这个容器的,那么aware的意思是“知道的,察觉的”,即该接口的字面意思就是通晓spring容器,说人话就是我可以通过实现这个原创 2021-06-14 16:44:56 · 1493 阅读 · 4 评论 -
Spring-Spring是如何解决循环依赖的(浅谈)
首先,稍微看过一点spring源码中有关bean的生命周期那部分的就有了解过:bean对象的实例化跟初始化这两个概念:实例化:创建当前的bean对象,但是还未对属性进行赋值。初始化:对bean对象的属性进行赋值了解完这两个概念之后:我们通过下面的例子来了解spring是怎么解决循环依赖这个问题的@Componentclass A { private B b; public void setB(B b){ this.b = b; } ...}@Componentclass B原创 2021-06-14 11:55:51 · 173 阅读 · 0 评论 -
web安全-如何形象地理解JWT
我·原创 2019-09-28 16:07:06 · 403 阅读 · 0 评论 -
设计模式-常用的23个设计模式和简述
引自书《Design Patterns》作者:Erich Gamma,Richard Helm,Ralph Johnson,John VlissidesAbstract Factory——抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。Adapter——适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容二不能一起工作的那...原创 2019-10-17 22:23:17 · 300 阅读 · 0 评论 -
Java基础-StringBuilder类型和StringBuffer类型与String类型相互转换
将String类转换成StringBuilder类:String s = “某某某”;StringBuilder sb = new StringBuilder(s);将StringBuilder转换成String类(同StringBuffer类转换成String类)StringBuilder sb = new StringBuilder();String s = “”+sb;将Stri...原创 2019-10-18 21:34:05 · 1139 阅读 · 0 评论 -
算法-整数反转
给出一个整数,要让他每一位上的数进行反转例如:输入:123输出:321输入:-123输出:-321且要考虑溢出情况,比如输入的值在int的范围内,但是反转之后就溢出了就返回0;题解: // 初始化一个long类型的变量 long count = 0; // 逻辑运算 进行反转数据 while(x!=0){ ...原创 2019-10-28 21:00:24 · 377 阅读 · 0 评论 -
计算机网络-三次握手的过程最形象解释
满足客户端A和服务端B建立起通讯的条件是:A和B都要知道彼此的发送和接受能力1. A发送一个信息,B接收到了:B就知道了自己的接收跟A的发送能力是正常的2.B返回一个响应消息,A接收到了:A就知道了自己的发送能力,接受能力,B的发送能力跟接收能力是正常的。但是此时B还不知道A的接收能力,跟自己的发送能力正常否,A是否有收到我的回应信息?3.A再根据B的响应信息做出反应,B接收到了:B就知道了...原创 2020-03-17 19:01:55 · 416 阅读 · 0 评论 -
算法-刷题遇到链表类的题目什么思路?
就tm的用指针,一个不够 那就两个双指针,双指针不优雅?就快慢双指针。基本时间复杂度控制在O(n) 或者)O(m+n)(其实也就是O(n))原创 2020-10-27 11:35:18 · 226 阅读 · 0 评论 -
算法-LRU淘汰算法加跟LinkedHashMap源码
前言:刷leetcode的每日一题的时候碰到这题,然后百度了LRU,发现这类算法被称之为淘汰算法:FIFO:First In First Out,先进先出LRU:Least Recently Used,淘汰最近最久未使用LFU:Least Frequently Used,淘汰最近使用次数最少的正文:目前就只讨论LRU吧。leetcode上提到了这题的解法最好是希望我们自己能用HashMap+双向链表的解法手动造轮子去实现的。我最开始也是这么做的。写了一个下午,提交无数遍终于通过了之后发现官方题原创 2020-05-26 16:03:01 · 440 阅读 · 0 评论 -
Java基础-Java之为什么重写equals方法之后一定要重写hashCode方法?
**牢记这一点:java里定义两个对象hashCode相等,equals不一定相等;equals相等的话,它hashcode一定相等我们拿HashSet举例:首先我们知道它是没有顺序,不重复的;那么如何判断新添加的值跟已有的值不重复,就需要先hashCode计算一下位置;然后位置上有值的话就用equals判断值是否相等,如果相等。就说明重复了,插不进来,返回flase;好,假设你不重写hashcode。假设set里面已经有"张三"了,现在再插入一个"张三",你hashcode不重写计算出来的位置原创 2020-12-23 14:32:23 · 381 阅读 · 5 评论 -
Java基础-IO-实体类为什么最好需要序列化
什么是序列化?序列化可以保存我们实体类的状态,就是保存当前的类中属性的状态到硬盘中,保证下次或者在其他服务里可以接着使用这个类中的属性的时候,就是序列化。序列化注意的点?序列化只序列对象的属性,不管方法静态类成员不序列化,因为静态属性是属于类的,我们序列化是针对目前的对象状态transient关键字修饰的属性不序列化什么场景需要序列化?需要对对象进行IO操作持久化Mybatis开启了二级缓存且配置文件中readOnly属性默认为false在分布式系统中传递当前实体类对象· 需要对原创 2021-06-12 17:29:09 · 2728 阅读 · 1 评论