- 博客(104)
- 收藏
- 关注
原创 “你基础不太行啊”
equals:Object类里的equals方法底层就是==,只不过我们平常使用的类都重写了该方法,比如String类将字符串中的每个字符取出来对比,最终比较的是字符串的值。重载:发生在同一类中,方法名需相同,参数类型,个数,顺序需不同,访问权限符与返回类型可相同可不同。==:对比的是栈中的值,对于基础数据类型比较的是变量值。String:被final修饰,不可变,每次操作都会新生成一个String对象。重写:发生在父子类中,实现类中。final修饰方法:该方法不可被重写,但可重载。
2023-12-16 18:53:26 150
原创 记一次校园双选会面试问到的题
redis里的锁,缓存击穿穿透血崩,布隆过滤。2m带宽被1w用户同时上传图片怎么处理。stringbuff build区别。谈谈boot和spring,常用注解。存储引擎myisam和innodb。有一些记不太清楚了,差不多这些。B+树,慢查询,sql优化。linux如何部署项目。左右内连接分别的效果。
2023-12-06 21:00:00 101
原创 并发编程(线程基础)
如果参数大于0,使用while判断线程是否存活,存活的话就一直判断当前线程执行的时间并且计算还需要等待的时间,如果等待时间小于等于0就跳出循环,否则就继续wait。- 如果join方法参数为0,则会调用isAlive()方法,检测线程是否存活,如果存活就调用wait方法,一直等待。因此,t.start()会导致run()方法被调用,run()方法中的内容称为线程体,它就是这个线程需要执行的工作。Callable可以抛出。而如果使用run()来启动线程,只是单纯的执行重写后的run方法,没有开启新线程。
2023-11-03 16:57:21 136
原创 Redis持久化(RDB、AOF)
RDB:Redis数据备份文件,也叫Redis数据快照,简单来说就是把内存数据保存的磁盘上,当Redis故障重启后,从磁盘中读取快照并恢复数据到Redis中。同时,Redis会在停机时自动进行一次RDB操作(主动停机,不是宕机)也可以在redis.conf文件下配置触发规则save 900 1– 表示在900秒内,redis中有1个key发生改变,那么就进行一次bgsave– 表示在300秒内,redis中有1个key发生改变,那么就进行一次bgsave。
2023-10-31 22:22:39 175
原创 MVCC(多版本并发控制)
当前事务或其它事务修改同一个数据时,会被undolog记录,并通过roll_point形成版本链,接着read view会根据里面维护的字段通过一定规则对比各个版本数据的隐式字段,最终匹配出可查询的版本具体为哪一个。当然,由于隔离级别不同,产生read view的时机不同,读取到的版本也不同,RC:每一次快照度都会产生read view、RR:第一次快照度后产生read view,后续复用。
2023-10-30 19:13:24 344
原创 redolog和undolog
redolog是基于的日志文件,也叫重做日志。用于记录数据页的物理变化,记录数据修改后的值。无论事务是否成功提交都会产生记录。当mysql产生故障,可以采用redolog日志恢复数据,同时redolog日志是顺序写入磁盘,也就是顺序IO,刷盘速率快。MYSQL事务的持久性就体现在这一方面。redolog包括两部分,一是内存中的日志缓冲区),一是(日志文件)。MYSQL执行一次DML语句,会先将记录写入redlog buff中,后在某一个时间点再一次性将这些记录写入redolog file。也就是。
2023-10-28 16:43:37 230
原创 MYSQL(事务)
事务:一组操作的集合,它是一个不可分割的单位,事务会将这些操作作为一个整体一起像系统提交,这些操作要么同时成功,要么同时失败四大特性(ACID)比如,A向B转账500元。原子性:都成功,或者都失败一致性:A扣减了500元,B必须增加500元隔离性:A向B转账的过程中,不受其它事务干扰持久性:事务提交后,要落盘(持久化)一个事务读到另一个还未提交事务的数据一个事务先后读取同一个事务两次,得到的数据不一致:一个事务在查询时没发现该数据,插入时却又发现该事务已存在,类似“幻影”
2023-10-26 22:29:34 276
原创 MYSQL(索引篇)
聚集索引:索引和数据放在一块,b+数的叶子节点保存了整行数据,有且只有一个,一般情况用主键作为聚集索引非聚集索引:索引和数据分开存储,b+数的叶子节点保存对应主键,可以有多个。一般自定义的索引都是非聚集索引回表的意思就是一次查询没有获得我们所需要的全部数据,可能只通过二级索引获得了主键值,需要使用该主键值回到聚集索引中重新查询到所有数据。为避免回表,可以采用覆盖索引或者在聚集索引列上进行查询覆盖索引:在select查询中,返回的数据在索引列上可以全部找到。
2023-10-26 17:26:38 226 1
原创 记 ==> 首次使用rabbitMQ优化项目
于是我便打算用rabbitMQ的directExchange模式进行消息发送,关注或者取关后把消息发布出去,不关注对帖子的拉取的行为,让监听者去慢慢的拉。这个模块大概功能是:用户发送的所有帖子都会添加到他的发件箱,当有个新用户关注了他,他发件箱内所有的博客都会被添加到关注他用户的收件箱里。我的理解是,这个接口的功能就是单纯的实现用户关注和取关,并不关注帖子的拉取和删除,并不该把这两个功能冗杂在一个方法里。当用户取关后,从用户收件箱内移除掉被取关博主的帖子。比如:A关注B,A的收件箱内添加B的帖子。
2023-04-13 23:13:52 536 1
原创 SpringBoot集成rabbitMQ后不会自动创建队列
当我使用了@RabbitListener注解后重新启动发现就可以自动创建了。配置,依赖都没问题,但是不会在启动的时候为我创建队列和交换机。以下是别的博主的解释,我也不是很懂。有没有大佬可以解答一下。
2023-04-13 18:30:46 1366 1
原创 RabbitMQ( 发布订阅模式 ==> TopicExchange)
Direct交换机与Topic交换机的差异?Topic交换机接收的消息RoutingKey必须是多个单词,以 . 分割Topic交换机与队列绑定时的bindingKey可以指定通配符#:代表0个或多个词*:代表1个词。
2023-04-12 23:14:03 846 2
原创 RabbitMQ( 发布订阅模式 ==> DirectExchange)
在使用fanoutExchange时,它只是无脑的向所有队列进行广播,不太灵活而用directExchange时,我们可以再发送消息到交换机,时指定一个bindingkey,它只会向完全匹配bindingkey的队列发送消息
2023-04-12 21:34:37 641
原创 RabbitMQ( 发布订阅模式 ==> FanoutExchange )
我们将做一些完全不同的事情——我们将向多个消费者传递消息。这种模式被称为“发布/订阅”。
2023-04-12 14:50:42 627
原创 RabbitMQ (工作队列:Work Queues)
当任务量过多,或者任务量过重,我们可以采用Work Queues来提高处理任务的速度通过设置prefetch: 1,来根据消费者能力协调每个消费者的任务消费数量
2023-04-11 23:39:57 614
原创 记录SpringBoot上传图片至阿里云OSS时踩到的坑
MultipartFile超过最大上传大小,字段文件超过其允许的最大大小为1048576字节。请求超时问题:status = cancle
2023-04-07 11:17:56 833
原创 解决后端无法对前端的ajax请求重定向
ajax是一种异步http请求方式,它可以在不刷新页面的情况下向后台发送请求并获取响应数据,但是它不能自动进行页面重定向。
2023-04-07 11:00:13 2473
原创 Spring Cloud ( openFeign 服务发现、配置、公共client抽取 )
feign快速入门,feign连接池配置,日志配置,抽取公共feign-api
2023-03-13 22:22:02 3041 1
原创 JAVA“基础不牢地动山摇“ ==> 重温 《内部类》
可以将一个类的定义放在里另一个类的内部,这就是内部类。广义上我们将内部类分为四种:成员内部类、静态内部类、局部(方法)内部类、匿名内部类。
2022-11-02 00:42:00 203
原创 SpringBoot( 整合篇 ==> springboot 2.7.x 整合 Swagger 3.0)
SpringBoot 2.7.x 整合 swagger3.0
2022-11-01 23:01:07 1896
原创 Redis( 缓存篇 ==> 互斥锁解决缓存击穿
我们可以在查询缓存未命中的时候添加一个互斥锁。这样一来,只有第一个进来的线程才可以拿到锁然后操作数据库,待操作结束后释放锁,未拿到锁的用户则等待一段时间重新查询缓存,知道缓存重建完毕后拿到数据方可结束。这样一来,只有第一个进来的线程才可以添加key并返回true,后面来的线程无法完成添加且返回false。我们在写一个释放锁的方法,在拿到锁的进程操作数据库结束后,把锁释放掉防止死锁。关于互斥锁这一部分,我们可以使用Redis里的setnx命令来模拟实现。
2022-10-29 21:46:04 2119
原创 Reids( 缓存篇 ==> 缓存穿透解决方案
当客户端发送的请求在Reids缓存中和数据库中都查询失败,我们设置一个空值缓存起来,这样即使用户访问了不存在的数据,也不会让请求直接穿透的数据库上。注意:缓存空值的过期时间不宜太长,假设我们之后真的添加了新数据,也不会造成过久的数据不一致问题。
2022-10-29 00:38:58 712
原创 Redis( 缓存篇==> 缓存击穿、雪崩、穿透现象
缓存穿透:指客户端请求的数据在Redis缓存、数据库中都不存在。当数据库中也没有数据,则永远无法添加缓存到Redis。当遇到大量的请求同时访问时,请求会直接穿透到数据库上,给数据库造成很大的压力。缓存雪崩:指许多key在同一时刻大量过期,或Redis直接宕机,大量的请求直接打到数据库上,造成数据库瞬时压力过大。缓存击穿:指一个被高并发访问的key(一般存在于秒杀活动中)突然过期、失效,且重建缓存的业务逻辑较为复杂,在缓存重建的过程中,无数的请求直接打到数据库上,造成数据库压力过大。
2022-10-29 00:14:31 389
原创 Redis( 缓存篇 ==> 超详细的缓存介绍与数据一致性解决方案 & 代码实现
图文并茂的向你描述什么是缓存,以及java开发中如何采取正确的策略去解决缓存一致性问题。超级详细~~
2022-10-20 00:46:16 1433 1
原创 Redis( 基础篇 ==> StringRedisTemplate的使用
StringRedisTemplate它的key和Value默认就是String方式,我们不用自己再去定义RedisTemplate的配置类。
2022-10-16 23:32:48 18041
原创 Redis( 基础篇 ==> SpringDataRedis的使用
SpringData是Spring中数据操作的模块,包含了对各种数据库的集成。其中对Redis的集成模块,就是SpringDataRedis的特点如下:提供了对不同Redis客户端的整合(Lettuce和Jedis(上一章提到的))提供了统一API来操作Redis支持Redis的发布订阅模型支持Redis哨兵和Redis集群支持基于Lettuce的响应式变成支持基于JDK、JSON、字符串,Spring对象的序列化和反序列化支持基于Redis的JDKCollection实现。
2022-10-16 19:18:39 841
原创 SpringMvc( 拦截器介绍 & 使用
拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法执行在指定的方法调用前后执行预定的代码阻止原始方法的执行。
2022-10-11 00:09:58 201
原创 Redis( 基础篇 ==> Jedis入门 & Jedis连接池
Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。在企业中用的最多的就是Jedis。Jedis提供了完整Redis命令,而Redisson有更多分布式的容器实现。但是,Jedis的实例不是I线程安全的,我们还需要使用Jedis连接池来为我们创建一些安全可靠的实例。
2022-10-10 23:01:29 2434
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人