- 博客(62)
- 资源 (3)
- 收藏
- 关注
原创 hooks,mixin,pinia,vuex
简单来说,Pinia 在代码层面确实彻底去掉了 Mutation,但在 Vue DevTools 的 Timeline(时间线)中看到的 mutation,指的是 Vue 3 底层的“响应式变更事件”,而不是 Vuex 里的那个 Mutation。如果你在日常开发中遇到一些通用需求(比如防抖节流、监听元素尺寸、暗黑模式切换等),其实不必自己从头写,强烈推荐你去了解一下 Vue 官方团队维护的 VueUse 库,它内置了 200+ 个开箱即用的高质量 Hooks,能极大提升你的开发效率。
2026-05-23 17:27:04
292
原创 为什么响应式对象身上结构的数据会失去响应性?
这一步操作,相当于直接把 state 对象里 count 的原始值(比如数字 0)拷贝了出来,赋值给了一个全新的普通变量 count。在 Vue 3 中,从响应式对象(reactive)身上直接解构出来的数据会失去响应性,这其实是因为 JavaScript 的解构赋值机制与 Vue 3 的响应式原理(Proxy)产生了冲突。在 Vue 的 <template> 模板中,ref 会自动解包,所以你依然可以直接写 {{ count }},不需要写 .value。// 使用 toRefs 包裹后再解构。
2026-05-23 16:05:08
27
原创 vue2和vue3的路由变化
Vue 3 (Vue Router 4):使用 createRouter() 创建,通过引入 createWebHistory 等函数来配置模式。最核心的区别在于版本不兼容:Vue 3 必须搭配 Vue Router 4.x 使用,而 Vue 2 使用的是 Vue Router 3.x。* Vue 2 (Vue Router 3):使用 new VueRouter() 创建,通过 mode 属性来配置模式。区别点 Vue 2 (Vue Router 3) Vue 3 (Vue Router 4)
2026-05-23 15:48:22
236
原创 为什么history模式默认会请求后端资源?
解决这个问题的核心思路就是“兜底”:你需要配置后端服务器(Nginx、Apache 等),告诉它:“除了那些真实的静态资源(如 .js、.css、图片等)和真实的后端 API 接口外,任何找不到的路径,都请统一返回前端的 index.html”。简单来说,History 模式之所以会“默认变成请求后端”,是因为它的 URL 看起来和真实的后端接口路径一模一样,浏览器无法分辨它到底是一个前端页面还是一个后端资源,所以会老老实实地向服务器发起真实的 HTTP 请求。1. 核心原因:URL 的“欺骗性”
2026-05-23 15:44:08
421
原创 More than one row with the given identifier was found: 295085
More than one row with the given identifier was found: 295085
2022-11-14 14:35:41
757
原创 ShardingSphere分库分表
ShardingSphere是一款起源于当当网内部的应用框架。2015年在当当网内部诞生,最初就叫ShardingJDBC。2016年的时候,由其中一个主要的开发人员张亮,带入到京东数科,组件团队继续开发。在国内历经了当当网、电信翼支付、京东数科等多家大型互联网企业的考验,在2017年开始开源。并逐渐由原本只关注于关系型数据库增强工具的ShardingJDBC升级成为一整套以数据分片为基础的数据生态圈,更名为ShardingSphere。到2020年4月,已经成为了Apache软件基金会的顶级项目。...
2022-06-19 11:51:32
3611
原创 Sentinel规则持久化实战
1.Sentinel规则推模式原理分析改造拉模式的缺点:不够实时,需要找到对应的配置文件,并熟悉规则推模式可以直接在nacos控制台配置,配置中心推送给客户端生产环境下一般更常用的是 push 模式的数据源。对于 push 模式的数据源,如远程配置中心(ZooKeeper, Nacos, Apollo等等),推送的操作不应由 Sentinel 客户端进行,而应该经控制台统一进行管理,直接进行推送,数据源仅负责获取配置中心推送的配置并更新到本地。因此推送规则正确做法应该是 配置中心控制台/Sent
2022-01-22 22:47:40
552
原创 IntelliJ IDEA怎么设置注释颜色
点击settings选项 找到Editor>Color Scheme> Language Defaults找到Comment修改颜色即可,设置成我喜欢的绿色 #028102Color Scheme下面还有各种文件的颜色设置,顺便也设置了一下yaml格式的注释 颜色。...
2022-01-20 11:03:08
5929
原创 Alibaba微服务组件Nacos配置中心
01 Nacos配置中心实战引入依赖 <!--nacos配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </depende..
2022-01-17 22:58:28
1266
原创 Zookeeper分布式一致性协议ZAB
1、分布式一致性协议ZAB详解Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持崩溃恢复和原子广播的协议。整个 Zookeeper 就是在这两个模式之间切换。简而言之,当 Leader 服务可以正常使用,就进入消息广播模式,当 Leader 不可用时,则进入崩溃恢复模式。2、zookeeper集群崩溃恢复leader选举流程3、原子广播协议是什么半数节点以上...
2022-01-17 11:30:53
1444
原创 SpringBoot启动原理
springboot是如何通过一个@EnableXXX实现自动配置 的,就是因为依赖里面集成了各种spring-boot-starter-xxx,只要满足各种依赖里的XXXAutoConfiguration自动配置类上面的@ConditionalOnClass(xx.class)或者其他xxxProperties条件,就启用自动配置类了。1.为什么SpringBoot的jar可以直接运行<build> <plugins> <pl
2022-01-08 20:27:39
664
原创 SpringBoot自动装配核心源码
1.从Spring的IOC到SpringBoot的自动配置原理SpringBoot是一个脚手架,在spring的基础上构建,帮我们配置好了很多bean,管理bean还是由Spring IOC来做的。不管是配置xml还是javaconfig还是会经过spring变成BeanDefnition(xml中的bean的lazy,scope,autowire,class等定义信息由这个类的各个属性装载,class="com.xx.User"最后通过反射加载到spring的单例池中),再经过BeanFactor..
2022-01-08 13:15:14
541
原创 RabbitMQ概述与工作模式
1.什么是MQMQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。1.1 MQ的优势1.应用解耦:系统的耦合性越高,容错性就越低,可维护性就越低。使用 MQ 使得应用间解耦,提升容错性和可维护性。2.异步提速:提升用户体验和系统吞吐量(单位时间内处理请求的数目)。3.削峰填谷:提高系统稳定性。1.2 MQ的劣势1.系统可用性降低系统引入的外部依赖越多,系统稳定性越差。一旦 MQ 宕机,就会对业务造成影响。
2021-12-17 12:29:47
1596
原创 redis核心
Redis SDSSimple Dynamic String1.二进制安全的数据分配(不会丢失数据)2.提供了内存预分配机制,避免了频繁的内存分配3.兼容c语言函数库在c语言中字符串的表现形式为char data[] = "abc\0"; 以0表示字符串的结尾 如果出现本来就是\0字符做为字符串的话,会产生歧义char data[] = "a\0bc\0"; 所以redis改成了新的数据结构sds(string data structure) 保留了len,有多少读多少,不.
2021-12-11 16:57:14
679
原创 关于spring事务注解的一些理解
项目中一些事务相关的配置 <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="jpaTransaction...
2021-11-27 19:34:45
384
原创 idea远程调试tomcat
1.配置idea的remote debug选择jdk版本号,填写远程ip,端口2.配置tomcat的catalina.shapache-tomcat-8.5.39/bin/catalina.shexport JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'3.运行tomcat并debug参考链接:详述 IntelliJ IDEA 远程调试 Tomcat 的方...
2021-11-26 18:00:37
719
原创 Mybatis一级缓存和二级缓存
缓存的重要性是不言而喻的。使用缓存,我们可以避免频繁的与数据库进行交互,尤其是在查询越多、缓存命中率越高的情况下,使用缓存对性能的提高更明显。mybatis 也提供了对缓存的支持,分为一级缓存和二级缓存。但是在默认的情况下,只开启一级缓存(一级缓存是对同一个 SqlSession 而言的)。1. 一级缓存1.1什么是一级缓存同一个 SqlSession 对象, 在参数和 SQL 完全一样的情况先, 只执行一次 SQL 语句(如果缓存没有过期)。因为使用SelSession第一次查询后,My.
2021-10-24 16:22:05
1045
5
原创 记一次mysql建表报错
[DTF] Create table: `xxx`[ERR] 1171 - All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead意思是建表的复合主键每个都不能为空。
2021-08-27 15:12:35
2030
原创 js的map,filter,some,every,find,reduce,foreach用法
一、map()通过指定函数处理数组的每个元素,并返回处理后的数组。var numbers = [4, 9, 16, 25];function myFunction() { console.log(numbers.map(Math.sqrt)); // 2,3,4,5}map() 方法会将数组中元素依次传入方法中,并将方法的返回结果组成新数组返回。传入的function可以有自己的三个形参,currentValue, index,arr分别代表当前元素,元素索引,元素所属数组
2021-08-23 16:29:50
386
原创 REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。 缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系
2021-07-28 14:35:40
2103
1
原创 mysql备份工具mysqldump
由于navicat备份数据有些表结构会不一致,所以使用mysql自带dump工具。参考链接:https://www.cnblogs.com/markLogZhu/p/11398028.htmlhttps://blog.csdn.net/weixin_32916125/article/details/113426994
2021-07-22 15:14:21
385
原创 Tomcat控制台中文乱码问题解决
将tomcat控制台日志输出编码格式更改为GBK,修改tomcat根目录下conf/logging.properties文件中的ConsoleHandler.encoding=utf-8,这种方式能解决cmd控制台中文乱码,但不建议使用。因为更改了tomcat默认编码,如果我们使用idea启动tomcat,idea的默认编码不是GBK,就会同样产生idea控制台下tomcat乱码问题作者:电脑死机了链接:https://www.jianshu.com/p/7236d45cd1eb来源:简书著作权
2021-06-20 13:55:48
6965
4
原创 mysql中字段类型的区别
mysql中tinyint、smallint、int、bigint的区别tinyint从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据。存储大小为1 个字节。unsigned 是从 0 到 255 的整型数据。所以建表的时候 只能是tinyint(3),哪怕你建tinyint(100),他最大还是3位这么多。smallint从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。unsigned..
2021-05-25 14:07:42
836
1
原创 第4章 栈和队列
第4章 栈和队列栈(stack)是限定仅在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。栈的插入操作,叫作进栈,也称压栈、入栈。类似子弹入弹夹。栈的删除操作,叫作出栈,也有的叫作弹栈。如同弹夹中的子弹出夹。4.1栈的抽象数据类型对于栈来讲,理论上线性表的操作特性它都具备,可由于它的特殊性,所以针对它在操作上会有些变化。特别
2021-05-18 16:35:43
301
原创 第3章 线性表
第3章 线性表线性表( List ):零个或多个数据元素的有限序列。如果用数学语言来进行定义。可如下:若将线性表记为(a1,…,a1,ai,a+1,…,an),则表中a-1领先于a,a领先于 ai+1,称a1是 a的直接前驱元素,a+1是a的直接后继元素。当i=1,2,…,n-1时,a有且仅有一个直接后继,当i=2,3,…, n时,a有且仅有一个直接前驱。如图3-2-1所示。在较复杂的线性表中,一个数据元素可以由若干个数据项组成。3.1线性表的抽象数据类型线性表的抽象数据类型定义如下:ADT
2021-05-12 09:15:03
1358
原创 第2章 算法
第2章 算法算法(Algorithm)这个单词最早出现在波斯数学家阿勒·花刺子密在公元825年(相当于我们中国的唐朝时期)所写的《印度数字算术》中。如今普遍认可的对算法的定义是:**算法是解决特定问题求解步骤的描述,**在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。2.1两种算法的比较大家都已经学过一门计算机语言,不管学的是哪一种,学得好不好,好歹是可以写点小程序了。现在我要求你写一个求1+2+3+……+100结果的程序,你应该怎么写呢?大多数人会马上写出下面的C语言代码(或者其他
2021-05-08 10:33:47
279
原创 第1章 数据结构绪论
第1章 数据结构绪论数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。1.1数据结构起源数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。1968年,美国的高德纳(Donad E. Knuth)教授在其所写的《计算机程序设计艺术》第一卷《基本算法》中,较系统地阐述了数据的逻辑结构和存储结构及其操作,开创了数据结构的课程体系。同年,数据结构作为一门独立的课程,在计算机科学的学位课程中开始出现。也就是说,那之后计算机相关专业的学生开始接受《数据结
2021-05-07 10:04:02
263
原创 C++快速入门学习笔记(四)
三十一、链接和作用域前边我们已经开始创建由多个文件构成的项目,是时候再来讨论下更复杂的变量作用域了。简单的理解,变量的作用域就是你可以在什么范围内访问这个变量。一个在任何函数之前定义的变量可以在任何一个函数里使用(这是一个全局变量),而在某个函数里定义的变量只能在那一个函数里使用(这是一个局部变量)。那么,当一个项目由多个文件构成时,变量的作用域也会受到一定的影响!与作用域有关的另一个概念是链接,当你同时编译多个文件时:g++ -o test main.cpp rational.cpp每个源文件
2021-05-06 11:35:55
166
原创 C++快速入门学习笔记(三)
二十一、虚继承前一节的 student 示例程序看起来似乎已经解决了问题,但它存在着一些隐患。首先,在 TeachingStudent 类的 introduce() 方法里,我们不得不明确地告诉编译器应该使用哪一个属性。这对于 classes 属性来说是应该的,因为教一门课和上一门课有着本质的区别,而作为常识,助教生教的课程和他学的课程不可能一样!但是我们再深入考虑下,既然在 TeachingStudent 对象里可以继承两个不同的 classes 属性,那它是不是应该有两个不同的 name 属性呢
2021-04-30 10:40:48
407
原创 C++快速入门学习笔记(二)
十一、this指针和类的继承特殊的指针,thisclass Human {char name;Human(char name);}Human::Human(char name){ name = name;}我们看到,在”name= name”之前,所有的语法都没有任何问题:Human()构造器有一个名为name的参数虽然他与Human类里边的属性同名,但却是不相干的两样东西,所以并没有错。可是,问题是怎样才能让构造器知道哪个是参数,哪个是属性呢?这时候,就需要用到他了 –
2021-04-25 10:50:22
219
原创 C++快速入门学习笔记(一)
第一讲 C++语言与面向对象思想介绍C++是一种语言,仅仅是它的语法、特性、标准类库就已经是一门非常高深的课程,所以在开始学习的时候,必项先要打好基础。C语言有一个优点,即它的速度可以很快。写出来的程序可以很精练、简单、小巧,如果将C和C++相比较,C++就经常会为了解决某个问题绕一个大圈,所以代码量相对较大,并且里边有一些不是必项的代码。但C++有个绝对的优势,就是针对不同的对象去做实例化,这就是所谓的OO(Object Oriented:面向对象)思想。在面对对象的思想中,任何事物都可以被看做一个
2021-04-19 21:23:41
372
原创 汇编 第十六章 直接定址表
第十六章 直接定址表16.1 描述了单元长度的标号 1.本章讨论如何有效合理地组织数据,以及相关的编程技术 1.前面的课程中,我们一直在代码段中使用标号来标记指令、数据、段的起始地址 2.还可以使用一种标号,这种标号不但可以表示内存单元的地址,还表示了内存单元的长度 即:表示在此标号处的单元,是一个字节单元,还是字单元还是双字单元 2.例如 1.标号1 a : db 1,2,3,4,5,6
2021-04-17 16:58:36
314
1
原创 汇编 第十五章 外中断
第十五章 外中断CPU除了有运算能力,还有I/O能力15.1 接口芯片和端口1.在PC系统的接口卡和主板上,装有各种接口芯片,这些外设接口芯片的内部装有若干寄存器 CPU将这些寄存器当做【端口】访问2.外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的【端口】中3.CPU向外设的输出也是要先送入【端口】中,再由相关芯片送入到外设4.CPU可以向外设输出控制命令,这些控制命令也是先送到【端口】中,然后相关芯片根据命令进行相关工作5.可见:CPU与外部设备的交流是通过【端口】进行的
2021-04-17 11:46:23
294
2
原创 汇编 第十四章 端口
第十四章 端口我们前面讲过,各种存储器都和 CPU 的地址线、数据线、控制线相连。CPU在操控它们的时候,把它们都当作内存来对待,把它们总地看做一个由若干存储单元组成的逻辑存储器,这个逻辑存储器我们称其为内存地址空间(可参见1.15节)。在PC机系统中,和CPU通过总线相连的芯片除各种存储器外,还有以下3种芯片。(1)各种接口卡(比如,网卡、显卡)上的接口芯片,它们控制接口卡进行工作;(2)主板上的接口芯片,CPU通过它们对部分外设进行访问;(3)其他芯片,用来存储相关的系统信息,或进行相关的输入
2021-04-17 10:25:58
477
原创 汇编 第十三章 int指令
第十三章 int指令中断信息可以来自CPU的内部和外部,当CPU的内部有需要处理的事情发生的时候,将产生需要马上处理的中断信息,引发中断过程。在第12章中,我们讲解了中断过程和两种内中断的处理。这一章中,我们讲解另一种重要的内中断,由int指令引发的中断。13.1 int指令1.int格式:int n ;n为中断类型码 它的功能是引发中断过程2.CPU执行int n指令,相当于引发一个n号中断的中断过程,执行过程如下 1.取中断类型码 2.标志寄存器入栈,if=0,tf=
2021-04-17 09:45:04
962
原创 汇编 第十二章 内中断
第十二章 内中断引言和简介1.中断是CPU处理外部突发事件的一个重要技术2.它能使CPU在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行CPU原来的工作。3.引起中断的原因【即:发出中断请求的来源叫作中断源】4.根据中断源的不同,可以把中断分为:【软件中断】和【硬件中断】两大类, 而硬件中断又可以分为【外部中断】和【内部中断】两类12.1 内中断的产生1.外部中断一般是指计算机外设发出的中断请求,如:键盘中断、打印机中断、定时器中断。 外部中断是可
2021-04-15 21:49:52
671
ollydebug(英文版)
2021-05-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅