自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(192)
  • 资源 (1)
  • 收藏
  • 关注

原创 【入门必备】Java数据结构详解

数据结构入门必看!本文整理了稀疏数组、队列、链表、栈这几种经典的数据结构。快来一起敲代码吧!!!

2022-03-15 19:51:07 9147 21

原创 【设计模式】一文读懂工厂模式

工厂模式是创建对象的一种设计模式。简单来说,创建对象的地方我们就叫做工厂,在工厂中统一管理各种对象。我们通过统一的接口来指向新创建的对象。这里的工厂模式我们可以和策略模式结合来说,因为策略模式需要多种策略,我们就可以使用SpringBoot的自动注入功能,将不同类型的实现类注入到Map或者List中,从而实现工厂模式的效果。工厂模式的优点;解耦:工厂模式对象创建和使用分离;对象集中管理:将对象的创建全部管理到一起;针对简单的对象管理,不推荐使用工厂模式,可能会显得过于复杂了。

2024-08-08 18:30:22 333

原创 【设计模式】一文读懂策略模式

学习设计模式不仅仅是炫技,还可以让你 在看各种代码时如鱼得水。碰到一些典型的设计模式,还会惊讶于Coder的设计。今天来分享设计模式中的策略模式,也是最近在实习中看到的。其实策略模式在项目中的应用很多,封装不同的算法,然后只需要调用即可,这样即使你不会设置一些算法(策略),但是你可以拿到别人设计好的策略开箱即用。就像之前说的,策略模式会定义一系列算法,或者叫做策略 - Strategy。每个算法会独立封装在特定的类中,使用哪个策略,直接调用替换即可。

2024-08-06 19:20:36 728

原创 动态规划中的股票问题全解析

3、 dp数组初始化:dp[0][0]为第0天持有股票,dp[0][0] -= prices[i]。dp[0][1]表示第0天不持有股票,dp[0][1] = 0。一定是选最大的,所以 dp[i][1] = max(dp[i-1][0] - prices[i], dp[i - 1][1]);dp[i][j]中i表示第i天,j为[0 - 4]五个状态,dp[i][j]为第i天状态j所剩的最大现金。■ 操作一:第i天买入股票了,那么dp[i][1] = dp[i-1][0] - prices[i]

2024-04-28 11:32:33 906

原创 动态规划中的背包问题全解析

问题转换:求得石头重量总和,再分解为重量相同的两堆,剩下的就是最小的重量。/**dp[j] 为石头的最小重量 最小容量为 sum / 2石头重量、价值为stones[i]。*/sum += i;dp[0] = 0;i ++){j --){背包原问题:我们有i个物品,记作nums[i],并且每个物品价值为value[i],给定背包容量target,怎样才能装到背包的最大价值?背包问题的本质就是:给出一个数组或者取值范围,能否组成我们想要的target?

2024-04-11 14:36:42 801

原创 LRU算法中那些你不知道的事

Redis的LRU算法存在缓存污染的问题,比如应用一次读取了大量的数据,而这些数据只会被读取这一次,那么这些数据会留存在 Redis 缓存中很长一段时间,造成缓存污染。当 Redis 进行内存淘汰时,会使用随机采样的方式来淘汰数据,它是随机取 5 个值(此值可配置),然后淘汰最久没有使用的那个。注意,在这个LRU链表中,最常访问的元素我们放在了链表末尾,当元素满时,每次移除链表头的元素。如果使用传统的LRU算法,Redis不想维护一个较大的链表,占用内存空间。,用于记录此数据的最后一次访问时间。

2024-04-08 23:20:32 974

原创 Elasticsearch的倒排索引是什么?

Elasticsearch是基于 Apache Lucene【lusen】的搜索引擎,支持Restful API风格【可以使用常见的HTTP请求来访问】,并且搜索速度很快,可以提供实时的搜索服务。其实Elasticsearch的功能有很多,比如分布式存储、实时数据分析等很多方面。系统解耦。使用ES之后,我们的搜索功能就完全独立于数据库了,这样就不会影响到其他业务的性能。数据分析。深度分析用户行为,用户对于哪个社区感兴趣,对于哪一条帖子感兴趣,对我们来说至关重要。可以达到毫秒级的查询。

2024-04-01 20:49:58 1256

原创 5分钟看懂 Web3.0 钱包签名登录

可以恢复公钥,通过公钥可以获得公钥的address。最后将通过公钥获得的address和你的钱包地址进行对比,如果相同,我们就可以执行后续的登录逻辑了。Web3钱包,钱包中保存了自己的公钥和私钥信息,私钥用于签名,证明是你在进行当前行为,公钥用于验证,验证是本人的操作。比如我们的网站就是一个私人俱乐部,那么门口有一个保安需要验证我们(前端、用户)的身份,保安就是我们的后端服务。保安拿到你的签名和钱包地址,通过钱包地址从Redis中拿出纸条,利用拿出来的纸条和签名,通过。PS:MetaMask是做什么的?

2024-03-27 23:14:48 1019

原创 【原创】5分钟拿下Floyd算法

Floyd算法5分钟速通

2024-03-20 20:34:52 385

原创 【解锁未来】让微软Copilot介绍自己,再由ChatGPT润色文章,到底能成什么样?

今天突发奇想,如果让微软Copilot介绍自己,再由ChatGPT润色文章,到底能成什么样?

2023-11-25 16:30:11 1376 1

原创 【解锁未来】OpenAI:从创始到GPT4的发展

这是一个大型多模态模型,虽然在许多现实世界的场景中,它的能力还不如人类,但在各种专业和学术基准上,它已经能够表现出近似人类水平的性能。例如,GPT-4通过了模拟的律师考试,分数约为全部应试者的前10%。总的来说,OpenAI的发展历程充满了创新和突破,从其创始到GPT-4的发布,OpenAI一直在推动人工智能技术的发展,为人类带来了许多可能性。接下来的几年,OpenAI推出了多个开放平台,如OpenAI Gym和OpenAI API,这些平台为机器学习和自然语言处理提供了强大的工具。

2023-11-20 09:41:54 296

原创 【解锁未来】探索Web3的无限可能-02

简单地说,Web3 是加密货币的延伸,它以新的方式使用区块链来达到新的目的。区块链可以存储钱包中代币的数量、自我执行合同的条款或去中心化应用程序(dApp)的代码。并非所有区块链的工作方式都相同,但一般来说,代币被用来激励矿工处理交易。在像比特币这样的 "工作量证明 "链上,处理交易所需的复杂数学问题的解决是能源密集型设计。在 "权益证明 "链上,交易的处理只需要在链上拥有权益的验证者同意交易是合法的,这个过程的效率要高得多。在这两种情况下,交易数据都是公开的,但用户的钱包只能通过加密生成的地址来识别。

2023-11-02 18:37:32 299

原创 【解锁未来】探索Web3的无限可能性-01

还记得你第一次听说比特币吗?也许那只是一个关于新技术将改变一切的微弱嗡嗡声。也许你会有一种 "FOMO "的感觉,因为那些早早入场的人突然积累了一大笔财富–尽管你并不清楚这些 "钱 "可以合法地花在什么地方(真的很贵的披萨?) 也许你只是想知道自己的公司是否应该制定加密货币战略,以防比特币真的在你的行业中兴起,即使你并不真的关心它。最有可能的是,在比特币进入你的视线后不久–无论那是什么时候–就出现了崩盘。每隔一两年,比特币的价值就会下跌。

2023-10-21 17:45:37 661 1

原创 SpringMVC笔记

SpringMVC笔记

2023-06-22 16:36:12 1554

原创 Spring笔记

Spring学习笔记

2023-06-22 16:24:24 1634

原创 图解操作系统笔记

图集操作系统笔记

2023-06-22 16:08:36 830

原创 图解计算机网络笔记

图解计算机网络笔记

2023-06-22 15:49:20 2791

原创 图解Redis笔记

图解Redis笔记

2023-06-22 15:37:24 1493

原创 图解MySQL笔记

MySQL读书笔记

2023-06-22 15:28:14 1285

原创 【面试实战】校园管理平台项目

底层基于Spring Boot。权限模块【负责用户注册、登录、权限控制】,主要用到的技术是Spring Security、Interceptor拦截器。核心模块【首页、帖子、评论、私信、统一异常处理、统一记录日志】,异常处理和记录日志主要运用了Spring AOP的思想,针对项目中的代码进行一个横向的扩展。并且缓存用户的信息、验证码、登录凭证到Redis,减小数据库访问压力。项目介绍:项目基于Spring Boot,大体可以分为四个模块,权限、核心、性能、通知。

2023-06-21 18:48:14 1111

原创 【算法实战】双指针

法二:双指针,利用 i 和 j 倒序遍历来反转字符串。设置一个新的头节点指向链表头节点。法二:添加额外头节点法。

2023-06-12 18:11:31 65

原创 【面试实战】Java基础、集合问题全总结

可变性:String是不可变的,StringBuffer与StringBuilder是可变的。线程安全性:String线程安全;StringBuffer对 方法添加了同步锁,所以也是线程安全的;StringBuilder没有对方法加同步锁,所以是线程不安全的。性能:String每次进行改变的时候,都会产生一个新的对象;StringBuilder每次都会对对象本身进行操作,而不是产生新的对象;相同情况下,使用StringBuilder比使用StringBuffer可以获得一定(10-15%)的性能提升。

2023-06-04 17:10:00 802 1

原创 【面试实战】Kafka面试题

在处理大量数据时,kafka的性能更高,比如我们将event封装为Message存储到数据库,执行的是顺序批量操作。RabbbitMQ的效率要低于Kafka,但是RabbitMQ的消息可靠性更高。消费者负责将消息队列中的Event取出,并将其封装为Message对象,并持久化到数据库中保存。了解到除了Kafka还有其他的消息队列,比如RabbitMQ。是一个分布式流式处理平台,流平台一个关键的功能就是消息队列。

2023-05-31 20:47:16 957

原创 【面试实战】Redis项目实战

高并发:单台设备的 Redis 的 QPS(Query Per Second,每秒钟处理完请求的次数) 是 MySQL 的 10 倍,Redis 单机的 QPS 能轻松破 10w,而 MySQL 单机的 QPS 很难破 1w。的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

2023-05-28 19:19:46 1116 1

原创 【面试实战】MySQL数据库常见面试题

掌握这些,面试稳了……

2023-05-27 17:34:37 544

原创 【面试实战】操作系统面试实战

🙋‍♂答:PCB是进程控制块,用来描述进程。一个进程存在,必然会有一个PCB,如果进程消失,那么PCB也会消失。进程标识符、用户标识符;进程当前状态;进程优先级:进程抢占 CPU 时的优先级;CPU 中各个寄存器的值,当进程被切换时,CPU 的状态信息都会被保存在相应的 PCB 中,以便进程重新执行时,能从断点处继续执行。PCB通过链表进行组织,把具有相同状态的进程链在一起,组成各种队列。将所有处于就绪状态的进程链在一起,称为就绪队列;把所有因等待某事件而处于等待状态的进程链在一起就组成各种。

2023-05-25 20:24:42 762

原创 【面试实战】计算机网络面试实战

🙋‍♂答:IP地址用来标识网络中的唯一一台设备。IP 地址(IPv4 地址)由 32 位正整数来表示,IP 地址在计算机是以二进制的方式处理的。IP使用点分十进制来表示,也就是8位一组,共4组,用分割,再将每组转换为十进制。发送方发送数据,设置目标设备的IP地址作为数据包的目的地。路由:如果目标设备与发送方不再同一个子网内,发送方将数据包发送到默认网关中(路由器)。之后路由器查询路由表,根据目的地址转发给下一跳,直到数据包到达目标设备所在的子网。

2023-05-24 20:53:04 1039

原创 【面试实战】Spring基础、IoC、AOP、MVC、Mybatis、Spring Boot

🙋‍♂答:Spring Bean就是IoC容器所要管理的对象。通过注解的方式,我们可以告诉IoC容器管理什么对象。Spring装配对象的四个注解:@Component(组件):装配普通组件到IOC中。@Repository(仓库):装配持久化层到IOC中。@Service(业务):装配业务逻辑层到IOC中。@Controller(控制):装配控制层/表示层组件到IOC中。Before(前置通知):目标对象的方法调用之前触发After(后置通知):目标对象的方法调用之后触发。

2023-05-23 20:49:26 810

原创 【面试实战】Redis缓存设计

🙋‍♂答:简名达意。雪崩,就是大量缓存数据在同一时间失效,或者Redis宕机。此时有大量的用户请求无法在Redis处理。直接访问数据库,导致数据库压力剧增,可能造成数据库宕机、等一系列连锁反应,最终整个系统崩溃,这就是缓存雪崩的问题。🙋‍♂答:缓存击穿可以认为是缓存雪崩的子集。击穿,指的是某个热点数据过期,大量请求访问该热点数据,就无法从缓存中获取,导致MySQL服务器压力剧增,可能引发宕机等一系列问题,最终导致系统崩溃,就是缓存击穿的问题。🙋‍♂答:缓存穿透,就是大量请求访问。

2023-05-22 20:55:52 1149

原创 【面试实战】Redis过期删除与内存淘汰

🙋‍♂答:过期删除策略就是删除过期键值对采用的方法。Redis采用惰性删除 + 定期删除两种策略。惰性删除:就是在每次访问key的时候,都先对key的过期时间进行检查。如果过期,就删除,返回null给客户端;没有过期就正常返回。定期删除:会每隔10S 检查一次数据库,先从过期字典中随机抽取20个key,检查这20个key是否过期。如果key的过期数量大于25%,继续重复进行检查;反之停止继续删除。

2023-05-21 22:46:50 512

原创 【面试实战】Redis持久化面试题

🙋‍♂答:Redis的数据都是存储在内存中的,当Redis重启后,内存中的数据就会丢失,但是Redis实现了数据持久化的方式。主要通过AOF日志和RDB日志来实现。🙋‍♂答:RDB快照记录某一瞬间的内存数据,记录实际的数据。在恢复数据时,比AOF的效率更高。

2023-05-17 21:18:18 705

原创 【面试题】面试官:昨天问了MySQL,今天问问Redis

计算出剩余的空间大小,可以用来判断空间是否满足修改需求,如果不满足的话,就会自动将 SDS 的空间扩展至执行修改所需的大小,然后才执行实际的修改操作,所以使用 SDS 既不需要手动修改 SDS 的空间大小,也不会出现前面所说的缓冲区溢出的问题。因此, SDS 的 API 都是以处理二进制的方式来处理 SDS 存放在 buf[] 里的数据,程序不会对其中的数据做任何限制,数据写入的时候时什么样的,它被读取时就是什么样的。在更新数据的时候,只更新缓存,同时将缓存数据设置为脏的,然后立马返回,并不会更新数据库。

2023-05-08 22:40:21 494 1

原创 【面试题】面试官:说说你对MySQL的了解

今天给大家推荐几道常见的MySQL面试题,来试试你能答对几道?

2023-05-07 21:12:18 591

原创 【面试必备】Java集合面试题全总结

Java集合由哪两大接口派生而来?Collection接口,主要用于存放单一元素。下面有三个主要的子接口:List、Set、Queue。Map接口:主要用于存放键值对。List、Set、Queue、Map四者的区别?List中存储有序、可重复元素。Set中存储无序、不可重复元素。Queue按照特定顺序进行排序,存储有序、可重复元素。Map存储键值对。key是无序的,不可重复;value是无序的,可重复。如何选用集合?我们只需要存放元素值时,就选用Collection接口的集合。

2023-04-20 00:08:25 389

原创 【4.18】贪心算法入门必刷题

相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。那么根据prices可以得到每天的利润序列:(prices[i] - prices[i - 1])…(prices[1] - prices[0])。而i也是从0开始找的,如果碰到了最远的距离,说明不能继续往前走了,此时就要比较这个最远覆盖距离是否已经超过了界限。假如第0天买入,第3天卖出,那么利润为:prices[3] - prices[0]。

2023-04-18 23:13:13 671

原创 【4.17】贪心算法入门

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。

2023-04-17 22:32:31 375

原创 【4.14】今天讲两道TCP面试题

因为TCP是字节流的协议,TCP层必须要保证收到的字节数据是完整并且有序的,当序列号较低的TCP段在网络中丢失,即使序列号较高的TCP段已经被接受了,但是应用层也**无法从内核读取这段数据。HTTP/2多个请求是跑在一个TCP连接中的,当TCP连接丢包,整个TCP就要等待重传,那么就会阻塞该TCP连接中的所有请求,所以HTTP/2队头阻塞问题就是因为TCP协议导致的。因为TLS是在应用层实现的握手,TCP是在内核实现的握手,这两个握手过程无法结合在一起,总是得先完成TCP握手,才能进行TLS握手,所以。

2023-04-14 18:29:26 420

原创 【4.13(补)】二叉搜索树的遍历、插入、删除

二叉搜索树的删除涉及到五个方面,尤其要注意,当删除的节点左右都有子节点时,要将左子节点放到右子节点的最左边。这才符合二叉搜索树的原则。因为二叉搜索树是有序的,第一次找到p和q中间的值,就是最近的公共祖先。本题只需要找到空的节点进行插入即可。通过保存父节点的值,进行插入操作。通过函数的返回值,进行插入操作。

2023-04-14 11:17:20 403

原创 【4.10】回溯在二叉树中的应用

为叶子节点,则要在path中排除该节点。总之,本题需要使用父节点来判断节点是不是不满足条件的右子节点,如果是,就将其弹出即可。解法二:使用回溯算法,进入一个节点前,先增加该节点深度,退出一个节点后,减去该节点深度。构造一个二叉树,就在递归中去构造。函数返回结果就是上一层递归中父节点的左右子节点。在递归进右叶子节点后,只对右叶子节点进行操作即可。首先将所有的节点都加入path中。解法一:简单的层序遍历。

2023-04-11 00:15:39 325

原创 【leetCode 257】一道算法题延伸出的Java内存知识

在递归遍历中,如果我们使用全局变量,则每次递归中大家都共享这个变量。在这类查找路径的问题中就会出现一些错误。也就是当前深度优先到了一条路径,在转到另一条路径时,之前的结果还在全局变量中保存,但是此时已经不是我们想要的路径了。所以应对这种问题,我给出了两种方案每个dfs方法中定义一个局部变量。局部变量是保存在栈帧的局部变量表中,方法的调用需要通过栈来进行传递,每次调用方法,都有一个对应的栈帧被压入栈中,每一个方法掉用结束后,都有一个栈帧被弹出。这样一来,就可以避免全局变量出现的问题。

2023-04-09 21:06:42 293

【Java】Java集合框架思维导图。

xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有激发思维、记忆暂存、发散思维和集中思维的好处,还可以帮助我们理清事物关系,将混乱的关系一一理清。并且在使用思维导图时,大脑并不是一次性思考很多问题,而是一层一层地进行分析。思维导图被誉为是最有效的思维模式,有利于人脑的扩散思维的展开。 目前已经在全球范围得到广泛应用,大量的500强企业也在学习思维导图,中国应用思维导图也有20多年时间了。 有利于人们对所思考的问题进行全方位和系统的描述与分析,同时对所研究的问题进行富有逻辑的思考,有利于帮助大脑找到解决问题的关键因素或关键环节。

2022-04-13

空空如也

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

TA关注的人

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