自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis笔记1-雪崩、击穿和穿透

用户的数据一般都是存储在数据库中,数据库的数据是落在磁盘上的,而磁盘的读写速度特!别!慢!如果用户直接访问数据库,而且请求数量特!别!多!数据库就容易崩溃,所以为了避免直接访问数据库,会中Redis作为缓存层。Redis是内存数据库,读写速度比硬盘快,提高了系统性能。为了保证缓存、数据库的数据一致性,会给Redis数据设置过期时间,如果过期了,用户在缓存找不到,因此会访问数据库,然后更新到Redis里。应用RedisMySQL从缓存读取数据缓存过期缓存不存在从数据库读取数据返回数据库中的数据将数据加载

2022-06-07 16:59:10 177 1

原创 大厂测试流程

文章目录测试流程一、code review1.语法错误2.边界行为错误3.经验错误4.算法错误5.部分算法错误二、部署接口环境三、接口测试四、白盒测试总结测试流程一、code review通过code review可以发现5类错误,分别是语法错误、边界行为错误、经验错误、算法错误、部分算法错误1.语法错误大部分语法错误可以在IDEA环境中直接发现,也有部分语法错误在编译阶段通过,运行阶段才会被发现。2.边界行为错误比如经典的除数为0问题,会报错public class Main {

2022-05-27 10:51:11 219

原创 基础算法总结

目录1.判断素数2.判断回文2.1 数值型回文2.2 字符串回文3.最大公约数4.最小公倍数1.判断素数素数定义为在>1的自然数中,除了1和它本身以外不再有其他因数。要得到不大于某个自然数N的所有素数,只要在2-N中将不大于的素数的倍数全部划去即可。//判断素数public static boolean ll(int n){ if(n <= 1) return false;//1不是素数 for(int i = 2; i < Mat

2022-05-22 09:10:37 139

原创 事务持久性redolog

目录1.如何维护持久性?2.redo log 也要写入磁盘,为什么不直接将缓冲数据写到磁盘?3.redo log什么时候落盘?1.先说redo log位置2.事务提交前就可能会落盘4.什么时候刷脏?5.一条更新语句如何执行?redolog写入过程?1.如何维护持久性?使用redolog,当数据发生修改时,先在 redo log 里面记录本次操作,然后再修改缓冲区中的数据。在事务提交时或者提交前,调用fsync接口对redo log进行刷盘。如果MySQL数据库宕机了,

2022-03-19 16:44:58 980

原创 Java动态代理

1.代理动态代理是代理模式的一种,代理模式是:使用代理对象来代替对真实对象的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能。

2022-03-15 19:42:39 726

原创 JAVA反射

1.作用运行状态中,获取对象所属的类,构造对象,知道类的所有属性和方法,调用对象的属性和方法。这种动态获取信息和动态调用对象方法的功能称为Java语言的反射机制。2.反射原理将类的class文件读入到内存中,并放在运行时数据区的方法区内,然后在堆区中创建一个class对象,这个class对象是类加载的最终产品。(class对象:运行时的类型标识)class对象中包含了类的完整结构信息。可以通过class对象,看到类的结构,就好像镜子一样,所以称作“反射”。一般创建对象的时候,是先有的类,

2022-03-15 16:54:44 634

原创 Java面试

目录1.红黑树知道吗?介绍一下?2.默认加载因子是多少?为什么不是 0.6 或者 0.8 ?3.HashMap底层存储结构了解吗?4.为什么达到8才转为红黑树,而不是直接就用红黑树?5.红黑树后还会退化为链表吗?什么时候退化?6. JDK1.8 HashMap 的put流程?7. JDK1.8 HashMap扩容机制?8.1.7 1.8介绍ConcurrentHashMap实现?9. ConturrentHashMap JDK1.8put过程?10. Map有哪...

2022-03-10 20:18:40 576

原创 乐观锁和CAS

乐观锁一般采用CAS算法CAS算法思路:1.该算法认为不同线程对变量操作时,产生的竞争的情况比较少2.算法核心时对当前读取的变量值和内存中的变量旧值进行比较3.相等,代表没有其他线程对这个变量做修改,所以将变量值设为新值。4.否则,认为有其他线程对变量进行了修改,不进行任何操作。...

2022-03-10 10:28:27 348

原创 Redis5-为什么快

1.基于内存的数据库存在内存,减少了不必要的IO操作,操作速率快2.高效的数据结构1.简单动态字符串Redis字符串如果保存的对象是整数,就用int 存储,如果不能用整数表示,就用SDS来存储,SDS通过字符串的长度,预分配空间,可以高效计算长度,进行append操作。2.双向链表3.压缩列表4.哈希表链式哈希解决哈希冲突,随着链表长度的增加,查询会耗时,所以有了rehash,对哈希表长度进行扩展。渐进式rehash的方式,进行增删改查时,会将索引位置上所有的键值对进行迁

2022-03-10 10:18:21 532

原创 手写spring2

拿到spring配置类之后,构造方法内部 会解析配置类AppConfig类,即会解析当前AppConfig类中,或者类上面,有哪些spring提供的注解。解析配置类,主要就是看类中、类上的注解的。所以构造方法中,可以判断传进来的配置类,有没有注解ComponentScan拿到注解的对象之后,就可以获取里面的属性值,也就是扫描路径...

2022-03-08 22:34:07 200

原创 MySQL索引失效

1.对索引使用 左 或者 左右模糊匹配也就是 like %xx,like %xx% 的方式,会造成索引失效,走全表扫描因为索引 B+ 树是按照【索引值】有序排列 存储的,所以只能根据前缀进行比较2.对索引使用函数select ... where length(name) = 6; 索引失效,全表扫描因为索引保存的是索引字段的原始值,不止经过函数计算的值,所以走不了索引3.对索引使用表达式计算跟函数同样的道理4.对索引隐式类型转换加入用户列表,phone 字段是字符串类型,

2022-03-06 18:06:11 1181

原创 Redis

1、redis的数据结构2、redis为什么快3、缓存、击穿、穿透原因:解决:4、持久性:AOF文件 和 RDB快照5、主从复制机制

2022-03-05 10:29:39 256

原创 MySQL3-锁

1、锁类型从锁的粒度上讲,有表级锁、行级锁。强度上讲:意向共享锁、意向排他锁、共享锁(读锁)、排他锁(写锁)意向锁是表级别、共享锁 和 排他锁 是行级别行级锁又可分别2、在什么时候用next-key lock解决幻读3、死锁两个或两个以上的事务在执行过程中,因争夺资源而互相等待的现象。...

2022-03-05 10:21:16 141

原创 MySQL2-索引

1、索引种类2、覆盖索引3、聚族索引、非聚族索引、唯一索引、主键索引区别4、联合索引的最左匹配原则5、索引工作机制6、为什么选择B+树,而不是hash、跳表、B树、红黑树7、如何选择在哪些列上建索引...

2022-03-05 09:49:53 178

原创 MySQL1-事务

1.什么是事务由SQL语句构成,是访问并更新数据库中各种数据项的一个程序执行单元。事务操作中,要么做完,要么不做2.事务的特性,并分别解释ACID3.针对ACID的解决方式A原子性:undo log(回滚日志),C一致性,I隔离性(MVCC锁)、D持久性:redo log(重做日志)redo log、undo log、bin log4.针对隔离性4.1 事务并发会产生哪些问题,解释意思,举例说明脏读、不可重复读、幻读4.2 事务隔离级别,Innodb默认隔离级别,

2022-03-05 09:41:53 214

原创 小米-MySQL

MySQL:索引、事务和隔离、锁1.数据库的隔离级别,幻读举个例子,innodb如何解决幻读的?因为MySQL数据库可以连接多个客户端,所以MySQL服务器要同时处理多个事务。所以会产生脏读、不可重复度、幻读的问题。(问题严重性 从大到小)所以数据库的隔离级别有 读未提交、读已提交、可重复读、串行化(隔离级别从小到大)。幻读举例子:A事务查询数据库中存款 > 100万的记录,发现有5条,后来,事务B又插入了一条存款 > 100万的记录,并提交了事务。然后事务A再查询的时候,发现 > 100万

2022-03-03 20:37:10 184

原创 Redis4-主从复制

为了避免单点故障,所以要将数据备份到其他服务器上。这样即使一台服务器发生故障了,其他服务器也可以使用。redis 通过主从复制来保证多个服务器之间的数据一致性1.全量复制主从服务器第一次同步的时候,就是用的全量复制。这时候主服务器会有两个比较耗时的地方:生成RDB快照、传输RDB快照。为了避免多个从服务器和主服务器进行全量复制,所以把部分从服务器升级为【小组长】的角色,让【小组长】也可以管理部分从服务器。分摊主服务器的压力。2.基于长链接的命令传播第一次同步完成后,主从服务器会维护一

2022-03-02 11:06:39 550

原创 Redis3-RDB快照

1.如何生成快照1.save主线程来执行,但生成快照时间比较久,会阻塞主线程,导致写命令无法执行2.bgsave子线程来执行,所以不会阻塞主线程,写命令可以执行redis快照特点:全量快照,会把所有的数据都存到磁盘中,所以执行快照太频繁,会降低性能。但执行快照太少,可能会丢失很多数据。一般设置5分钟保存一次快照2.bgsave的时候,数据可以修改吗可以因为COW快照,顾名思义,当前时刻的照片,所以快照保存的是当时的数据,主线程修改数据可复制一份它要修改的数据,然后

2022-03-01 17:51:03 262

原创 Redis2-AOF

1.什么是AOF保存 写操作命令到日志里 的持久化方式,就是AOF(Append On File)的持久化功能。注意只记录写操作命令,不记录读。过程:redis收到用户的写操作命令后,先执行命令,再记录到AOF日志里。先写操作,后记录的优势:1.不需要额外的检查开销因为如果先记录,再执行的话。需要在记录之前,考虑语法是否正确,是否能执行。否则会出现记录完了,无法执行的情况。2.避免了写操作被阻塞。因为是写完之后,才记录的。不存在因记录出错,而阻塞后续 的写操作执行。坏处:

2022-03-01 17:37:47 330

原创 Redis1-雪崩、击穿、穿透

1.原因1.雪崩:大量数据同时过期、或者 Redis故障2.击穿:某个热点数据过期,高并发请求时在缓存中找不到,就会访问数据库,数据库崩溃3.穿透:数据不在缓存,也不在数据库中2.雪崩解决方案大量数据同时过期1.均匀设置过期时间将数据的过期时间加上一个 随机值,防止大量数据在同一时期过期2.互斥锁一个线程在访问数据的时候,如果发现数据不在redis里,就加个互斥锁,保证同一时间只有一个线程构建缓存(构建缓存就是,从数据库里读数据,放到redis缓存中),然后释放锁。如果那

2022-03-01 11:12:45 170 1

原创 JVM4-对象分配策略

1.优先在Eden区分配首先,new出来的对象都放在堆内存中,堆内存又划分为老年代、年轻代,年轻代又分为Eden区,Survivor区,Survivor区又分为From区和To区。大多数情况下,对象在新生代中Eden区分配,当Eden区没有足够空间进行分配时,虚拟机将发起一次MinorGC。MinorGC:发生在新生代的垃圾收集动作,频繁,速度快FallGC:老年代、年轻代、方法区的垃圾手机,,速度比MinorGC慢10倍以上2.大对象直接进行老年代大对象就是需要大量连续内存空间的对

2022-03-01 09:28:01 213

原创 线程和线程池

1.优势提前创建好了一堆线程,放在缓冲池中,需要的时候直接从缓冲池中取,用完了也不需要销毁,以便后续使用。1.降低资源消耗2.提高响应速度3.方便线程的管理2.参数1.corePoolSize:核心线程数2.maximumPoolSize:最大线程数3.keepAliveTime:线程存活时间4.unit:时间单位5.workQueue:任务队列前 5 个是必须的参数,后两个是非必须的6.threadFactory:线程工厂7.handler:拒绝策略,达

2022-02-28 22:07:28 43

原创 JVM3-垃圾回收器

垃圾回收器是具体实现,回收算法是方法论1.Serial 收集器单线程的收集器,一方面意味着只会使用一个CPU或一条线程去完成垃圾手机工作,另一方面,也意味着它进行垃圾收集时,必须暂停其他线程的所有工作,也就是 Stop the World(STW),直到它收集结束为止STW会带来不良的用户体验,所以后续的垃圾收集器,STW在不断缩短收集算法:新生代 复制,老年代 标记-整理优点:简单、高效、没有线程交互的开销 ,有很高的单线程收集效率2.ParNew 收集器是 Serial 收集

2022-02-27 20:27:18 136

原创 JVM2-垃圾回收算法

1.标记-清除标记出所有需要回收的对象,标记完成后统一回收会产生大量不连续的内存碎片,当有大对象需要连续空间时,有可能触发再次垃圾回收2.标记整理为了解决内存碎片,回收对象之后,集中整理内存区域,得到规整的内存区域得到大块内存,但效率低3.复制将内存划分为大小相同的两块,每次只用其中一块,当这一块内存用完了,就将还存活着的对象复制到另外一块上面,然后再把使用过的内存空间一次性清理掉。效率高,没碎片,适合朝生夕死的内存区域但内存利用率低,不适合对象存活率高的老年代使用4

2022-02-27 16:45:18 29

原创 JVM1-对象存活

1.如何判断对象是否存活1.引用计数法有一个对象A,当对象B对对象A产生引用时,A的引用计数器加一 ,当引用断开时,引用计数器的值减一。但是但对象A和B循环引用的时候,引用计数器的值无法为0,引用计数法就是当对象的引用计数器为 0 时,即无其他对象引用,判定为死亡,可以被回收。但存在循环引用问题,导致对象一致存活。2.可达性分析法从GC root根开始,向下直接找到对象,或者间接找到对象,称为对象可达,反之对象不可达。直接或间接可达的对象,即存活对象。2.对象的引用分类强

2022-02-27 16:29:50 175

原创 数据库隔离笔记

1.事务特性1.原子性:要么做完,要么不做,如果事务执行的过程中发生了错误,就会事务回滚,回到事务发生前的状态2.一致性:数据库的完成性不会受到破坏,比如数据库里面有个字段叫姓名,它由唯一性约束,也就是姓名不能重复,如果事务完成了,导致姓名不具有唯一性了,也就是名字可以重复,这就破坏了一致性,会撤销事务,返回初试状态。3.隔离性:允许多个并发的事务同时对数据读写和修改。隔离性可以防止多个事务并发执行时由于交叉执行导致的数据不一致问题。4.持久性:事务一旦提交完成,对数据库所做的修改是永久的,

2022-02-26 15:44:41 292

原创 hashmap、concurrenthashmap

1.结构1.1hashmap结构jdk1.7 数组和链表,jdk1.8 数组链表、红黑树数组成员类型 jdk1.7 叫 Entry,jdk1.8 叫 Node,数组中的每个节点存的是 key 、hash 、value 、next。hashmap使用拉链法解决hash冲突,但如果链表过长,会严重影响hashmap的查找性能。所以就有了红黑树。红黑树的时间复杂度是logn,链表的时间复杂度是n。红黑树与链表的转换条件:链表长度超过8 ,且数组长度达到了64,转红黑树,没到64,优先扩容。

2022-02-26 14:43:55 280

原创 volatile

1.作用多线程环境下数据获取时的可见性,禁止指令重排,弱原子性。可见性:就是一个线程修改了 volatile 关键字修饰的变量的值,其他线程会立刻知道这个修改。2.如何实现也就是靠什么实现的这些功能:缓存一致性协议 和 内存屏障缓存一致性协议,有很多种,常见的就是MESI(修改、独占、共享、无效)。MESI的小例子:两个核心共享某个数据,比如a = 0;(S状态),0 号核心修改了a的值,这时候 1 号核心中的 a 的值就无效了,但是 1 号核心如何知道它的 a 的值是无效的呢?

2022-02-26 14:28:16 80

原创 Redis3

5中数据类型,存储数据value1.字符串string,最大512M可以存二进制数据,序列化后的数据,json对象,图片都可2.哈希hash套娃了属实是类似于java中的map,一般用来存放java对象的全部属性数据上图map是一种redis,其中key是‘loginuser’,value是data,其中data又是一种map3.list列表等同于java中的list,有序可重复4.集合set等同于java中的set,无序,不可重复5.有序集合zset

2022-02-21 21:07:27 436

原创 Redis2

Redis是当今非常流行的基于KV结构的作为Cache(缓存)使用的NoSQL数据库key表示value的值?value是存储实际的数据的1.key常用命令1.keys:查看有哪些key,keys *(输出所有key),keys w*(输出以w开头的所有key),keys wo?d(输出wo d的key,其中?代表一个字符,*代表所有)2.exists:查看某个,某些key存在几个分别代表,活着1个,活着2个,活着3个,活着1个3.expire key seconds:设置k

2022-02-21 20:35:55 256

原创 Redis1

1.NoSQLnoSQL:not only SQL(不仅仅是SQL,也就是不仅仅是操作数据库。也解释为no-relational,非关系型数据库)。RDBMS:关系型数据库MySQL、Orical、SQL Server:都是关系型数据库(即RDBMS)。NoSQL(非关系型数据库)和RDBMS是并列的两种类别。2.为什么有NoSQL1.互联网用户量大,访问量大2.高并发(就是用户同时做一件事,可能会资源竞争)(用户同时买某东西)3.高可用,数据库宕机了,能很快恢复4.海量

2022-02-21 17:31:44 354

原创 手写spring7-AOP

AOP就是利用前面讲的,BeanPostProcessor来实现的,就是在初始化后来实现的。zhouyu包中新建一个接口,UserService然后UserServiceImpl类实现了这个接口然后spring容器会根据这个类,得到一个对象instance,然后依赖注入,Aware回调,然后初始化,然后到了初始化后方法执行初始化后方法:在这个方法中,当前如果这个bean是userService的话,就利用jdk的动态代理,生成代理对象proxyInstance先执行.

2022-02-17 17:13:50 64

原创 手写spring6-BeanPostProcessor

spring提供的一种扩展接口:BeanPostProcessor:Bean的后置处理器前面讲的spring提供的扩展接口总结:BeanNameAware接口实现回调,InitializingBean接口实现初始化BeanPostProcessor接口,用来在做某事之前、之后,完成某事。BeanPostProcessor有很多子接口,比如:InstantiationAwareBeanPostProcessor(实例化回调BeanPostProcessor)接口:实例化前方法、实例化后方法、属

2022-02-17 11:14:04 128

原创 手写spring5-初始化

到目前为止,createBean方法中,进行了1.依赖注入 :就是利用AutoWired将对象注入其中2.Aware回调:利用BeanNameAware接口,将自动赋值本对象的名称beanName下面进行第3步:初始化spring包中新建一个接口InitializingBean:然后在UserService类中实现接口和方法spring创建好userService对象之后,会来调afterPropertiesSet()方法,但具体这个方法里做什么事情,spring是不管的。可

2022-02-17 10:27:06 81

原创 手写spring4-Aware回调

希望spring自动给beanName属性赋值,赋的值是bean的名字userService。在spring包中新建一个接口BeanNameAware在UserService类,实现BeanNameAware接口,实现setBeanName方法,创建userService对象的时候,spring会调用serBeanName方法,把对象名字传进来。在createBean方法中添加如下代码:判断当前bean是不是实现了BeanNameAware接口如果是,则instance做强制..

2022-02-17 10:10:00 155

原创 手写spring3-createBean()、@Autowired

spring创建bean的详细步骤,即creatBean方法的实现在zhouyu包里新加了一个类,叫orderService然后注入到UserService中,orderService是userService的属性值,所以创建userService了之后,调用test()方法,orderService也能被打印出来。需要在spring包中写@Autowired注解在createBean中,把类的beanDefinition传进来,然后就能拿到userService的类claz

2022-02-17 09:30:27 163

原创 手写spring1

新建maven项目,项目里面什么都没有,pom.xml没有任何依赖java目录下建两个包:com.spring,和com.zhouyuspring包中新建,ZhouyuApplicationContext类,这是一个容器类。这个容器类里需要有构造函数,而且构造函数里面传class文件(spring的配置文件)。容器类里面还要有getbean方法。初始api:zhouyu包里面的Test类,用来测试我写的spring框架这里面需要一个参数,表示当前用户需要传给spring的一个sp

2022-02-16 15:20:36 856

原创 小而美博客笔记-1.登录用户

1.做登录页面login.html,登录成功后台首页index.html2.UserService(业务逻辑层)和UserReporsitory(DAO层)3.(控制器层)LoginController实现登录4.MD5加密5.登录拦截器1.登录页面login.htmlresources/templates/admin/login.html建立一个form表单,post方式提交请求2.登录成功后进入后台首页index.html3.dao包接口UserReporsi

2022-02-15 22:49:04 550

空空如也

空空如也

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

TA关注的人

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