自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 (一)数据结构和算法的框架思维

种种数据结构,皆为数组(顺序存储)和链表(链式存储)的变换。数据结构的关键点在于遍历和访问,即增删查改等基本操作。种种算法,皆为穷举。穷举的关键点在于无遗漏和无冗余。熟练掌握算法框架,可以做到无遗漏;充分利用信息,可以做到无冗余。

2025-03-31 15:25:23 693

原创 (三)Redis内存兜底策略——内存淘汰及回收机制

在算法的选择上,Redis需要能够快速地查询添加删除数据,也就是说查询、添加、删除的时间复杂读需为O(1)。哈希表能保证查询数据的时间复杂度为O(1)。Redis内存淘汰机制是指在Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据Redis提供了八种内存淘汰策略,分别是:noeviction:不会淘汰任何键,达到内存限制后返回错误allkeys-random:在所有键中,随机删除键volatile-random:在设置了过期时间的键中,随机删除键。

2025-03-21 16:43:59 607

原创 (二)缓存更新的四种策略及选取建议

缓存更新是指在数据发生变化时,保持缓存和数据库的数据一致性的问题。如果缓存和数据库的数据不一致,会导致用户看到过期或者错误的数据,影响业务逻辑和用户体验。不同于以上三种,应用程序无需等待数据的刷新,也无需自己去触发数据的刷新,而是后台服务来完成这些操作。

2025-03-21 16:13:26 972

原创 (一)redis十种数据类型及底层原理

string 是 Redis 最基本的数据类型,它可以存储任意类型的数据,比如文本、数字、图片或者序列化的对象。一个 string 类型的键最大可以存储 512 MB 的数据。string 类型的底层实现是 SDS(simple dynamic string),它是一个动态字符串结构,由长度、空闲空间和字节数组三部分组成。embstr:占用64Bytes的空间,存储44Bytes的数据raw:存储大于44Bytes的数据int:存储整数类型embstr和raw存储字符串数据,int存储整型数据。

2025-03-21 15:45:59 734

原创 (四)Redis的三种持久化策略及选取建议

RDB持久化策略是指在一定的时间间隔内,将Redis内存中的数据以二进制文件的形式保存到硬盘上。这个二进制文件就是一个快照,它记录了某个时刻Redis内存中的所有数据。RDB持久化策略可以通过配置文件或者命令来触发,配置文件中可以设置多个条件,当任意一个条件满足时,就会执行一次快照操作。save 900 1 # 900秒内执行一次 set 操作 则持久化1次save 300 10 # 300秒内执行10次 set 操作,则持久化1次。

2025-03-21 14:10:51 978

原创 什么是 Docker?

Docker 使用 C/S 框架。客户端负责与 Docker 守护进程(Daemon) 进行对话,而守护进程负责繁重的构建、运行、分发 Docker 容器的工作。Docker 客户端和守护进程可以在同一操作系统中运行,或者通过客户端与远程的 Docker 守护进程进行连接。Docker 客户端和守护进程之间通过使用 REST 接口,基于 UNIX socket 或网络接口进行通信。另外还有一个 Docker 客户端叫作 Docker Compose,让你可以同时管理多个容器。

2025-03-17 11:35:05 776

原创 Java Concurrent 包

并发编程中通用的工具类。包括一些标准化,可扩展的小的实现结构(框架),和一些实用但却枯燥且不易实现的工具类。以下为主要组件的简易描述。另参考 java.util.concurrent.locks 和 java.util.atomic 包。

2025-03-16 02:03:43 797

原创 (五)缓存问题之缓存雪崩、缓存击穿和缓存穿透与布隆过滤器

缓存异常会面临的三个问题:缓存雪崩、击穿和穿透。其中,缓存雪崩和缓存击穿主要原因是数据不在缓存中,而导致大量请求访问了数据库,数据库压力骤增,容易引发一系列连锁反应,导致系统奔溃。不过,一旦数据被重新加载回缓存,应用又可以从缓存快速读取数据,不再继续访问数据库,数据库的压力也会瞬间降下来。因此,缓存雪崩和缓存击穿应对的方案比较类似。而缓存穿透主要原因是数据既不在缓存也不在数据库中。因此,缓存穿透与缓存雪崩、击穿应对的方案不太一样。

2025-03-11 20:54:38 696

原创 Java 中的死锁

这样虽然避免了循环等待,但是这种方法是比较低效的,资源的执行速度回变慢,并且可能在没有必要的情况下拒绝资源的访问,比如说,进程c想要申请资源1,如果资源1并没有被其他进程占有,此时将它分配个进程c是没有问题的,但是为了避免产生循环等待,该申请会被拒绝,这样就降低了资源的利用率。这样的话,资源的利用率会得到提高,也会减少进程的饥饿问题。释放已经保持的资源很有可能会导致进程之前的工作实效等,反复的申请和释放资源会导致进程的执行被无限的推迟,这不仅会延长进程的周转周期,还会影响系统的吞吐量。

2025-03-11 20:02:25 616

原创 spring-boot-starter-parent 项目的作用

当我们使用 Spring Initializr 创建 Spring Boot 项目时,发现总会继承一个 spring-boot-starter-parent 作用父类。假如不继承就不能用了吗?这个父类的作用是什么呢?在深入探究之前我们需要先了解一下 Maven 的继承特性。

2025-03-10 19:18:50 742

原创 序列化与反序列化

将对象持久化后,可以将其存储到磁盘或数据库中,以便后续读取和恢复对象的状态;在网络传输中,将对象序列化后,可以通过网络传递到远程节点,实现分布式系统间的通信和数据交互;:通过序列化,可以将对象转换成通用的格式,以便在不同平台、不同语言之间传递和交互;:通过序列化与反序列化,可以实现对象的尝试克隆,即创建一个与原对象完全相同的新对象。总结一下,序列化与反序列化就是在对象与特定格式(如二进制、JSON、XML等)之间转换的过程,可以实现数据持久化、数据传输以及跨平台和跨语言通信等功能。

2025-02-27 14:41:20 868

原创 Arch&Win10双磁盘双系统安装及相关知识

双磁盘安装Arch Linux 和 Windows 10,Winodws 10先于Arch安装,通过 Grub 引导。本文成功案例是在虚拟机(VMWare 14 pro)中实现,过程中出现的问题(如os-prober无法检测到 windows 系统)已解决,详见 Q&A 部分。

2022-01-27 11:10:25 5564

空空如也

空空如也

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

TA关注的人

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