- 博客(205)
- 收藏
- 关注
原创 Map和Set小总结【温习】
Map 和 set 是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有: ①直接遍历,时间复杂度为O(N) ,元素如果比较多效率会非常慢 ②二分查找,时间复杂度为O(logN),但搜索前必须要求序列是有序的。
2023-11-26 19:19:22
1005
原创 关于反射、枚举以及Lambda表达式你了解多少呢?快来看看吧~
Java的反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意方法和属性,既然能拿到,那我们就可以修改部分类型信息。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。但是常量举例有不好的地方,例如:可能碰巧有个数字1,但是他有可能误会为是RED,现在我们可以直接用枚举来进行组织,这样一来,就拥有了类型,枚举类型。而不是普通的整形1./*** User:龙宝*/优点:将常量组织起来统一进行管理。
2023-11-26 18:02:31
1012
原创 MySQL索引,你真的学会了?索引底层原理是什么?索引什么时候失效,你知道吗?
1.1、索引定义索引是一种帮助MySQL提高查询效率的数据结构1.2、索引的优点加快数据查询的速度1.3、索引的缺点维护索引需要耗费数据库资源索引需要占用磁盘空间当对表的数据进行增删改时,因为要维护索引,速度会受到影响。
2023-11-21 22:26:20
314
原创 Redis集群,你真的学会了吗?
小伙伴们肯定多少对哈希表的基本思想会有一点了解的,我就不具体解释了~在这里的分片方式中,简单来说就是借助一个哈希函数把key映射到整数,再针对数组的长度求余,就可以得到一个数组下标啦~说明一:把key映射到整数因为求余中,当然是要求该数为整数,而key值不一定为整数,所以我们借助映射来得到每个不同的key所对应的整数。例如使用md5,就可以将一个字符串经过一系列的数学变换将其转换为一个整数【十六进制,并且计算出的所有字符串的长度都是固定的;
2023-11-13 22:32:55
347
原创 【MySQL习题】各个视频的平均完播率【全网最详细教学】
视频id2001在2021年10月有3次播放记录,观看时长分别为30秒、24秒、34秒,视频时长30秒,因此有两次是被认为完成播放了的,故完播率为0.667;视频id2002在2021年9月和10月共2次播放记录,观看时长分别为42秒、30秒,视频时长60秒,故完播率为0.000。:视频完播率是指完成播放次数占总播放次数的比例。简单起见,结束观看时间与开始播放时间的差>=视频时长时,视为完成播放。计算2021年里有播放记录的每个视频的完播率(结果保留三位小数),并按完播率降序排序。
2023-11-10 12:03:06
368
原创 cookie、session和Token的区别?JWT又是什么?单点登录又是什么?头大?快进来看看,一文帮你捋清楚~
JWT是JSON WEB TOKEN的缩写,它是基于RFC7519标准定义的一种可以安全传输读的JSON对象,由于使用了数字签名,所以是可信任和安全全的。之所以使用JWT,是因为Token是属于无状态的,每个人定制的规则不同,生成的的结果就会不同。所以目前,多数都是采用JWT为统一令牌标准~业务线越来越多,就会有更多业务系统分散到不同域名下,就需要「一次登录,全线通用」的能力,叫做「单点登录」。
2023-11-06 21:57:13
555
原创 项目开发,测试人员主要要做什么事情?流程是什么样子的?
首先我们先看一下,大致的一个人员分配哈:这个图,我们只是大致画一下,因为项目经理都没画出来(偷笑~).产品经理:从用户那边做调研然后做分析,最终会得出一个项目的需求文档(需求说明书),之后这个文档会分别给开发一份,测试一份,UI设计人员一份当他们拿到文档后,会各自先阅读一下该文档,并做出相应记录。之后会组织大家一起开个会,讨论一下,讨论什么呢?讨论各部门对需求的理解,确认大家的理解是否一致,并且要站在各自的角度上对文档进行查漏补缺。
2023-10-22 23:27:04
274
原创 OJ项目【登录】——验证码、失败登录多次账户冻结、用户密码加密,我是如何实现的?
前端代码,我只展示核心代码,其他的代码需要小伙伴们自行编写哦~项目是Spring项目,需要小伙伴们有一点点Spring基础~我这些实现方式,只是一个参考,并不是最优解~
2023-10-16 18:00:42
547
1
原创 OJ项目——用户的登录拦截,我是如何实现的?
另外,本文还会涉及到session相关知识,大家可以看看,能够更好地理解本篇上述只是建议对知识点不熟悉的伙伴,或者不了解相关知识的伙伴。有基础的伙伴,可以直接往下看哦~@Overrideregistry.addInterceptor(new LoginInterceptor()) //实现的拦截器.addPathPatterns("/**") //拦截所有请求.excludePathPatterns("/css/**") //以下都是不拦截的请求好啦,本篇介绍就到这里啦,后续持续更新~
2023-10-15 00:02:33
649
原创 OJ项目——最核心业务->用户刷题,手把手教会你【SpringMVC+MyBatis】
看到OJ,大家都会想到牛客呀~LeetCode呀~等等这些刷题网站,那如果我们自己来设计一个这样的网站,你可以吗?现在自己心里画个问号哈~像标题所说,今天我们讨论的是如何实现OJ项目中最核心的业务,那它最核心的业务是什么呢?当然就是支持用户刷题呀,也就是说要检查用户提交的代码是否正确用户提交的代码,你打算怎么做来检查他的代码是否能编译通过、运行、所有测试用例都能跑过?接着上述问题,如果你想到的是起一个线程来解决,请问:用户提交的代码编译或者运行抛异常了怎么办?
2023-10-13 09:31:04
380
原创 分布式锁——什么是看门狗?什么是redlock算法?带你全面了解~
我们在前面学习中,都有了解关于线程安全的问题,那引发这个问题的关键就是,多个线程去修改了同一个公共资源引发的“一票多卖”的问题,例如Java中就可以使用synchronized来保证线程安全。但这种方法只是在同一进程下管用,当我们引入了分布式系统后,是多个进程在工作,那多个进程在多个主机下,想要同时修改数据库中的某些公共资源而引发的问题,我们该如何解决呢?这里就要使用到分布式锁了。其本质上就是使用一个公共的服务器来记录加锁状态。
2023-09-28 14:47:47
657
1
原创 【面试必备】缓存的更新策略-缓存雪崩-缓存穿透-缓存预热-缓存击穿~
缓存,其实核心实现的就是能够更快访问到数据~更快既然是一个比较级的关系,那么就是会有一个相对关系,谁对谁来说更快,谁对谁来说访问速度更快,是谁谁的缓存。举例理解:你把钱存在银行,每次买东西之前,你需要去银行取钱,然后再来付款,这个过程就会比较麻烦;这种情况下,你可以取一小部分钱放在口袋里,每次买东西付款时直接从口袋里取钱,这个过程就会相对来说更加高效了。此时口袋相对银行来说访问速度更快,就可以使用口袋作为银行的缓存,大大提高办事效率~
2023-09-27 15:31:38
119
原创 逼自己看完后,面试遇到Redis哨兵相关提问,轻松秒杀!!!
哨兵-监控主节点。哨兵节点通过心跳包,判定redis服务器是否正常工作。如果心跳包没有如约而至,就说明redis服务器挂了~ 但是这里不能排除是因为网络波动的影响,因此只能单方面的认为这个redis节点挂了,也就是主观下线~
2023-09-24 23:36:53
120
原创 带你深入学习Redis主从复制,学习心跳包、主从结构,全量复制、部分复制等
心跳包机制的实现:主从节点彼此都有心跳检测机制,各自模拟成对方的客户端进行通信主节点:默认,每个10s给从节点发送一个ping命令,从节点收到后返回pong从节点:默认,每隔1s就给主节点发送一个特定的请求,机会上报当前从节点的复制数据的进度(offset)默认等待响应时间:60s,超过时间,就会判定对方出事了,就会断开复制客户端连接。从节点恢复连接后,心跳机制继续进行
2023-09-21 01:05:12
311
原创 逼自己看完,Redis持久化你就掌握了!!!
这里所说的持久化,其实就是将数据存储在硬盘上。我们都知道redis的特点就是快,他快就是因为他将数据存储在内存中。但是数据存储在内存中时,重启进程或者重启主机后,数据就不存在。而如果在使用Redis时,重启进程或重启主机后数据就不存在了,就太鸡肋了~
2023-09-18 23:31:39
161
原创 三分钟学会一个新技能——在spring中操作redis
spring中是对redis的原生命令进行了封装,这里的封装和jedis封装不同,他很多封装后的命令对应的方法与原生命令有所差距,所以在使用时,大多数命令根据英文意思是可以猜到命令含义的,如果不认识的可以去官网中查看,其所指的是哪个命令~上述调用的是opsForValue就是指的是数据类型为string时的接口,后面的get就是string命令中的get命令~和原生命令有些出入,详细的可取官网看,这里只是一个简单了解举例~同上述使用flushall一样,其他原生命令都可以在这里这样写~
2023-09-15 08:56:19
161
原创 三分钟学会一个新技能——使用Java操作Redis
我们之前学习Redis命令时,直接在Linux服务器中所提供的redis客户端上使用的,也就是说Redis服务器和客户端在同一台主机上。而现在我们使用Java去操作Redis,一般Java开发都是在Windows上,也就是在自己的电脑上的,就会导致一个问题,客户端和服务器不在同一台主机上。这种情况下,切记可不敢去云服务器上把这个端口开放哈!!!因为太容易被攻击了~这个情况,我们有两个解决办法~
2023-09-14 23:00:46
356
原创 Redis-渐进式遍历scan的使用
前面的博客中,我们有提到使用keys *来获取所有的key,但这种办法,当Redis中存储的有很多key时,实行此命令所耗费的时长就会很长,不符合使用规范,redis一般情况下,都会要求命令执行时,短平快~因此提出使用渐进式遍历,也就是说,在不能使用keys *的情况下,我又想获取redis中的所有的key,就需要使用渐进式命令,所谓渐进,就是循序渐进,我们一次取出一点,直到取完~渐进式命令,有一组命令,我们暂时只介绍一种scan,其他命令的使用都是一样的~
2023-09-13 17:28:44
385
原创 Redis-带你深入学习数据类型zset
score member和key vlaue的区别;score有两个特殊取值:inf 无穷大 ,-inf无穷小 ---二者的绝对值都是无限大的~zset中使用的是member和score【score为一个浮点数】,而不是键值对key value;排行榜——使用redis的zset实现排行榜,能够实时的保证排行榜的更新~
2023-09-13 16:28:03
789
原创 Redis带你深入学习数据类型set
UV:用户访问服务器,会产生一个UV,但同一个多次访问不会使UV增加,所以使用set统计UV,能够很好的做到去重~或者例如:我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行。注:当集合中存放的都是整数,且数量不是特别多的情况下,内部编码是intset,此时虽然是无序的,但我。例如最常见的“人物画像”,给相应的用户打上对应标签后,针对性给该用户推送他可能感兴趣的话题。例如QQ中有一个功能叫做你可能认识的人~可能还是有处理的,相对来说还是有序的,从小到大 排列~
2023-09-10 22:26:58
605
原创 Redis-带你深入学习数据类型list
但是,并不是所有的最新列表都能用list类型实现,因为对于频繁更新的列表,list类型的分页可能导致列表元素重复或漏掉,举个例子,当前列表里由表头到表尾依次有(E,D,C,B,A)五个元素,每页获取3个元素,用户第一次获取到(E,D,C)三个元素,然后表头新增了一个元素F,列表变成了(F,E,D,C,B,A),此时用户取第二页拿到(C,B,A),元素C重复了。注:lpop和rpop在redis6之后就增加参数了,可以指定删除前几个或后几个,例rpop key count。好啦,本期到这里了,下期见~
2023-09-09 18:48:38
777
原创 Redis-带你深入学习数据类型Hash【面试重点】
对的,这两种方法有各自的优缺点,具体使用按照具体的业务场景来选择就好,相对来说,9存储结构化的数据,使用hash其实是更加适合滴~【结构化数据-->类似于数据库表这种的】redis中存储数据本身就是以键值对的形式,而这里的hash类型,指的是redis的key value中的value是以键值对的形式存储的,也就是说,键值对中的值也是键值对~,需要我们先取出json,然后解析出内部的value值,做出修改后,再合成json,后再存入key中指定的field处~使用string来存储。好啦,我们下期见咯~
2023-09-07 14:40:53
132
原创 Redis中,带你深入了解数据类型string!!!
实际工作中,一个web应用可能是存在多个应用服务器的,如果说每个应用服务器都各个存储自己的session,那如果一个用户发送1个请求前,进行了登录信息验证,而后续又发送了三个请求,但这三个请求恰巧被发送到了另外3台应用服务器中,那这三个应用服务器都是没有改用户的session的,就会让用户进行登录操作,此时就是出现一个用户需要返回多次登录,用户的体验感非常不好~而在redis中,就不会存在这些问题,因为Redis中不会进行任何的编码转换,存什么就是什么,例如可以存整数,字符串,JSON等都是支持的~
2023-09-06 11:38:46
106
原创 Redis是单线程模型,为什么效率还这么高呢?【面试】
我们在之前的学习中,例如在TCP的学习中,编写了一个回显服务器。在这里面,我们采用的方法就是使用一个线程来管理一个socket,并且要给每个客户端都分配一个socket,那在实际情况中,必然是会有多个客户端的,也就是会同时存在多个socket。我们仔细观察会发现,每个客户端和服务器之间并不是无时无刻的传输数据,大多数时间都是在等待中。因此就提出了IO多路复用,使用一个线程来管理多个socket。
2023-09-04 17:06:29
113
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅