- 博客(105)
- 收藏
- 关注
原创 Vue3 进阶
当我们只想让某个变量实现响应式的时候,采用 reactive 就会比较麻烦,因此 Vue 3 提供了 ref 方法进行简单值的监听,但并不是说 ref 只能传入简单值,它的底层是 reactive,所以 reactive 有的,ref 都有。是可以简化前端开发的复杂度,提高用户体验和性能,避免不必要的重绘和重排。将响应式对象 user 中的所有属性(即name、age和gender)转换成对应的 ref 对象,并返回一个由这些 ref 对象组成的对象,这些 ref 对象的变化也会影响原响应式对象的属性。
2024-03-16 09:27:53 1076
原创 Vue3入门
Vue3 在 Vue2 的基础上引入了 `Typescript` 重构了大量的代码,增加了很多新的特性,并发布了新一代的工程化工具 vite 。这些新的改动,让 Vue3 对我们的研发变得更加友好。
2024-03-15 17:27:37 1590
原创 JavaScript 知识点整理
根据维基百科解释 ECMAScript 规范是由 Netscape 的 Brendan Eich 开发的脚本语言的标准化规范。最初命名为 Mocha,然后是 LiveScript,最后是 JavaScript。ECMAScript 2015 (ES2015) 是第 6 版,最初称为 ECMAScript 6 (ES6),它添加了许多新功能,这些新功能后来成为 Web 开发人员工具包的重要组成部分。
2024-03-15 17:24:55 1179
原创 费曼学习法
费曼学习法是一种高效的学习方法,以理查德·费曼(Richard Feynman)的名字命名,他是一位杰出的理论物理学家和诺贝尔奖得主。费曼学习法的核心在于主动学习和教授,通过解释给别人来加深理解,同时发现和弥补自己的知识漏洞。费曼学习法的核心理念是将所学的知识简化和教授给别人,从而加深对知识的理解和掌握。这种学习方法能够帮助学生深入理解知识,并提高对知识的记忆和应用能力。
2024-03-13 09:11:30 268
原创 vuepress-theme-vdoing博客搭建教程
本博客使用的主题为:vuepress-theme-vdoing,相关介绍和使用方法可以参考该主题的官方文档官方文档快速上手
2024-03-12 11:03:43 1305
原创 24. 两两交换链表中的节点(图解递归和双指针)
通过递归调用,该函数会逐层向下处理链表,直到到达链表末尾。在每一层递归中,都会交换相邻的两个节点,并将结果传递给下一层递归。最终,当递归到最底层时,所有相邻节点都被成功交换,然后逐层向上返回,最终得到交换后的链表。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。这个函数的作用是将链表中的每两个相邻节点进行交换,并返回新的头节点。算法通过维护一个虚拟头节点,利用两个指针。在链表中遍历,不断交换相邻的节点。
2024-01-11 17:00:10 598
原创 项目初始化脚手架搭建
这是一个枚举类,用于定义系统中可能出现的错误码和对应的错误信息。枚举值必须是私有且不可变PARAMS_ERROR(40000, "请求参数错误"),NOT_LOGIN_ERROR(40100, "未登录"),NO_AUTH_ERROR(40101, "无权限"),NOT_FOUND_ERROR(40400, "请求的数据不存在"),FORBIDDEN_EEOR(40300, "禁止访问"),SYSTEM_ERROR(50000, "系统内部异常"),
2024-01-04 17:18:56 1203
原创 深入解析常见数据校验注解:@NotNull、@NotEmpty、@NotBlank、@Valid 使用示例
通过深入了解这些常见的数据校验注解,我们能够更好地保障程序接收到的数据的合法性。这些注解的使用不仅简单而且强大,为我们构建稳健的应用提供了有力的支持。在实际应用中,根据具体场景和需求选择合适的注解,结合异常处理,能够有效地提高程序的健壮性和安全性。
2023-12-29 10:15:55 975
原创 Apifox使用小记
cURL是一个用于发送 HTTP、HTTPS、FTP、SCP、SFTP 等请求的命令行工具和库。它支持多种协议和数据传输方式,可以在命令行中直接使用,也可以被集成到脚本和程序中,用于执行网络请求和数据传输操作。**发送 HTTP 请求:**通过 cURL,你可以发送 HTTP GET、POST、PUT、DELETE 等请求,并在命令行中查看响应结果。**文件上传和下载:**cURL 可以用来上传和下载文件,支持多种协议,如 FTP、SFTP 等。
2023-12-29 10:02:41 1291
原创 Git 知识梳理
版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。关键时刻,可以回退版本。除了项目源代码,你可以对任何类型的文件进行版本控制。Git Flow 是一种基于 Git 版本控制工具的分支管理工作流程,它定义了一套完整的分支模型,包括主分支、开发分支、功能分支、修复分支等,旨在优化团队协作、版本发布和代码质量等方面的工作流程。
2023-12-28 09:33:29 1525
原创 断墨寻径摘录
信息对单,知识对群。重现信息是记忆,生成新信息是学习。指令就是纯靠背、听、看知识。归纳就是实践总结,大脑自动产生意识。一个是由材料所带来的瓶颈,解决这种瓶颈的办法就是去搜集新材料。一些应试生容易犯的误区是不断去背诵已掌握的旧材料。另一个是由脑中的旧认识对新材料的抗拒所带来的瓶颈,解决这种瓶颈的方法是,先至少用一个实例性材料来让大脑意识到自己已有的认识是不足的,然后再继续学习。
2023-12-27 09:38:45 1090
原创 Redis 核心知识总结
RDB 快照就是记录某一个瞬间的内存数据,记录的是实际数据,而 AOF 文件记录的是命令操作的日志,而不是实际的数据。因此在 Redis 恢复数据时, RDB 恢复数据的效率会比 AOF 高些,因为直接将 RDB 文件读入内存就可以,不需要像 AOF 那样还需要额外执行操作命令的步骤才能恢复数据。哨兵(Sentinel)机制是 Redis 在 2.8 版本以后提供的。它的作用是实现主从节点故障转移。
2023-12-27 09:33:47 1508
原创 缓存背后的智慧:旁路、读写穿透和写回三种策略全面解析
问题:1、在写数据的过程中,可以先删除 cache,后更新 db 么?答:不可以,因为这样会导致数据库和缓存数据不一致的问题。举例:请求 1 先写数据 A,请求 2 随后读数据 A 的情况。db 的是新数据,cache 的是旧数据。2、在写数据的过程中,先更新 db,后删除 cache 就没有问题了吗?答:可能会有问题,但出现的概率非常小,因为【缓存】的写入速度比【数据库】的写入速度快很多。举例:请求 A 更新完数据库,但还未删除缓存,此时请求 B 命中了缓存并返回,就导致了数据不一致。
2023-12-26 09:59:29 1823
原创 实战指南:使用 Spring Cloud Stream 集成 Kafka 构建高效消息驱动微服务
SCS 是一个用于构建消息驱动微服务的框架,它基于 Spring Boot,提供了一种简化的方式来处理消息和事件的传递。它旨在为不同消息代理(如 Kafka、RabbitMQ、Apache Kafka 等)提供统一的编程模型,使开发者能够更轻松地在微服务架构中使用消息通信。Binder(绑定器):Binder 是 Spring Cloud Stream 的核心概念之一,它提供了与底层消息代理之间的连接和交互。
2023-12-26 09:43:26 3055
原创 Kafka入门及可视化界面推荐
*死信队列(Dead Letter Queue,简称 DLQ)**是消息中间件中的一种特殊队列。它主要用于处理无法被消费者正确处理的消息,通常是因为消息格式错误、处理失败、消费超时等情况导致的消息被"丢弃"或"死亡"的情况。当消息进入队列后,消费者会尝试处理它。如果处理失败,或者超过一定的重试次数仍无法被成功处理,消息可以发送到死信队列中,而不是被永久性地丢弃。在死信队列中,可以进一步分析、处理这些无法正常消费的消息,以便定位问题、修复错误,并采取适当的措施。
2023-12-25 09:42:10 3511
原创 RocketMQ 入门:MQ 基础概念、集群搭建与高可用配置,消息示例详解
Message Queue(消息 队列),从字面上理解:首先它是一个队列。FIFO 先进先出的数据结构 —— 队列。消息队列就是所谓的存放消息的队列。消息队列解决的不是存放消息的队列的目的,解决的是通信问题。1、同步通信情况下比如以电商订单系统为例,如果各服务之间使用同步通信,不仅耗时较久,且过程中受到网络波动的影响,不能保证高成功率。因此,使用异步的通信方式对架构进行改造。2、使用消息队列后。异步通信的情况下使⽤异步的通信方式对模块间的调⽤进行解耦,可以快速的提升系统的吞吐量。
2023-12-23 12:31:44 1127
原创 Spring Cloud Gateway官方文档学习笔记
请求转发到 “http://localhost:8080/flakey”,并在请求失败时进行最多 3 次的重试,重试的时间间隔为 10ms、20ms 和 40ms,最大不超过 50ms,仅对 GET 和 POST 方法的请求进行重试,并且仅在返回的 HTTP 状态码为 BAD_GATEWAY 时进行重试。该过滤器的作用是去重响应头,这个配置中定义了一个路由规则,它会将所有以 “/red/” 开头的请求转发到 “https://example.org”,并将 “/red/” 后面的路径。
2023-12-23 12:24:07 1696
原创 JWT 单点登录探析:原理、用途与安全实践
JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。通过数字签名的方式,以 JSON 对象为载体,在不同的服务终端之间安全的传输信息。JWT,因此,我们的。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。(JWT 存储在【客户端】)
2023-12-22 11:04:02 1307
原创 MyBatis:简介、优势和常见问题解答
ORM说白了就是建立数据库字段和Java对象(POJO)的一种映射关系技术而Mybatis由于建立这种映射需要我们手动编写SQL, 所以说它是半自动的。
2023-12-22 10:49:16 1065
原创 聊聊Spring Boot配置文件:优先级顺序、加载顺序、bootstrap.yml与application.yml区别详解
优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置。
2023-12-21 11:52:58 4668 3
原创 深入理解 Spring Boot:核心知识与约定大于配置原则
Spring Boot Starters 是 Spring Boot 提供的一组依赖项,用于快速启动常见的应用程序功能。简单来说,就是一系列依赖关系的集合。例如,如果想要快速启动一个 Spring Boot Web 应用程序,只需在项目中引入这个依赖即可。
2023-12-21 11:41:42 2864
原创 解密Spring的@Cacheable:打造强大字典转换器
当这个方法被调用时,Spring 会先检查缓存中是否已经存在了相同键的缓存数据,如果存在就直接返回缓存的结果,而不执行方法体;如果不存在,就执行方法体,并将方法的结果缓存起来,以备后续相同参数的方法调用直接使用缓存数据,提高执行效率。这样,对于相同的 `dictionaryType` 参数,方法的执行结果只需要计算一次,之后就可以直接从缓存中获取,避免了重复计算。
2023-12-20 10:01:26 982
原创 解密Spring框架:深入理解IoC和AOP的工作原理
Spring 循环依赖:简单说就是自己依赖自己,或者和别的 Bean 相互依赖。只有单例的 Bean 才存在循环依赖的情况,原型(Prototype)情况下,Spring 会直接抛出异常。原因很简单,AB 循环依赖,A 实例化的时候,发现依赖 B,创建 B 实例,创建 B 的时候发现需要 A,创建 A1 实例······无限套娃,直接把系统干垮。简单来说,Bean 代指的就是那些被 IoC 容器所管理的对象。工作流程:在应用程序运行时。
2023-12-20 09:40:43 1112
原创 Spring核心原理理解与总结
Spring Core 模块:提供了 Spring 框架的核心功能,包括 IoC(控制反转)和 AOP(面向切面编程)等,是整个 Spring 框架的基础。Spring Context 模块:建立在 Spring Core 模块之上,提供了一个框架式的上下文环境,用于管理 Bean 的生命周期和配置元数据等。提供了对 JDBC 的封装,简化了数据库访问的操作,包括了连接管理、事务管理、异常处理等。
2023-12-19 14:44:26 983
原创 Linux命令行实战指南:快速上手常用命令大全!
Linux常用指令包括文件和目录操作、系统信息和进程管理、网络操作、磁盘空间查看、部署时可能会用到的内存使用情况查看、后台运行程序以及作业控制等。这些指令可以帮助用户在Linux系统中进行各种操作和管理任务。
2023-12-19 14:36:03 951
原创 【网络篇】网络核心知识总结
HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说HTTP 协议自身不对请求和响应之间的通信状态进行保存。那么我们保存用户状态呢?使用 Session 机制。Session 机制的存在就是为了解决这个问题,Session 的主要作用就是:通过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。
2023-12-18 14:49:18 994
原创 【系统篇】硬件结构
冯诺依曼模型你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电脑上吗?64 位的操作系统可以运行在 32 位的电脑上吗?如果不行,原因是什么?如果 32 位指令在 64 位机器上执行,需要一套兼容机制,就可以做到兼容运行了。但是如果 64 位指令在 32 位机器上执行,就比较困难了,因为 32 位的寄存器存不下 64 位的指令;
2023-12-18 14:42:55 1545
原创 数据结构基础小结
数据结构,对应的英文单词是 data structure,是数据的组织、管理和存储格式,其使用目的是为了高效地访问和修改数据。数组是由有限个相同类型的变量所组成的有序集合,它的物理存储方式是顺序存储,访问方式是随机访问。利用下标查找数组元素的时间复杂度是 O(1),中间插入、删除数组元素的时间复杂度是 O(n)。链表是一种链式数据结构,由若干节点组成,每个节点包含指向下一节点的指针。链表的物理存储方式是随机存储,访问方式是顺序访问。(和数组相反)查找链表节点的时间复杂度是 O(n),
2023-12-17 14:21:04 1321
原创 JVM基础入门
所谓的 JVM 虚拟机,其实它本身是一个规范,是虚构出来的一台计算机。拥有自己的操作系统,是一个跨语言平台。为什么 JVM 虚拟机能够支持多种语言运行在上面呢?最关键的原因是就是因为 class 这个东西,我们可以说任何的语言,只要你能编译成 class,符合 class 文件的规范,你就可以扔在 Java 虚拟机上去执行。注意:JVM 只和 class 文件有关,与 java 无关。Java虚拟机 - 维基百科,自由的百科全书 (wikipedia.org)Java 软件 | Oracle 中国。
2023-12-17 14:17:52 217
原创 【并发篇】Java内存管理知识小结
Java 内存管理栈内存(Stack Memory)栈是线程私有的,每个线程都有自己的栈。用于存储局部变量、方法参数、返回地址以及一些基本数据类型。具有快速的分配和释放,因为采用"后进先出"(LIFO)的数据结构。栈内存的大小是有限的,一般由虚拟机预先定义。堆内存(Heap Memory):用于存储对象实例和数组等动态分配的对象。Java 中的垃圾回收(Garbage Collection)发生在堆内存,回收不再使用的对象。可以通过设置参数调整堆的大小,如 -Xmx(最大堆大小)和
2023-12-15 12:23:22 119
原创 【并发篇】深入理解Java线程池的运作原理
线程池就是管理一系列线程的资源池。当有任务要处理时,直接从线程池中获取线程来处理,处理完之后线程并不会立即被销毁,而是等待下一个任务。在 Java 5 之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免 this 逃逸问题。这是因为线程池的执行过程会等待构造完成后再进行任务的执行,从而避免了 this 逃逸问题的发生。什么是 this 逃逸问题?
2023-12-15 12:20:01 259
原创 【并发篇】Java关键字指南:Synchronized和Volatile的使用与区别
volatile 关键字是 Java 中用于保证变量可见性和禁止指令重排序优化的一种机制。只能保证单个变量的原子性,不能保证复合操作的原子性。
2023-12-14 10:03:27 294
原创 【并发篇】深入理解线程死锁、乐观锁与悲观锁
线程死锁是指:两个或多个线程互相持有对方所需要的资源而互相等待的状态,导致程序无法继续执行下去,进而陷入死循环,无法完成任务。乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源是否被其它线程修改了。优点不会造成线程阻塞缺点在并发更新的情况下,可能会出现 ABA 问题,需要使用版本号或时间戳等机制来解决。ABA 问题是: 在使用 CAS 算法时可能出现的一个问题。
2023-12-14 09:58:38 195
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人