自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 13.react与next.js的特性和原理

• 底层原理:基于 Node.js,将 .js/.ts 文件导出为 handler,部署到 Vercel 等平台时作为无服务器函数(serverless function)运行。React 专注于构建组件,而 Next.js 是基于 React 的全栈框架,提供了页面路由、服务端渲染和全栈能力,让你能快速开发现代 Web 应用。• 场景:无需独立后端服务器,直接在 /app/api 或 /pages/api 下创建后端接口,如登录、数据库操作等。

2025-06-11 08:58:07 322

原创 12.vite,webpack构建工具

• 也就是说你跑 npm run dev 的时候,Next.js 内部自动帮你起了一个 Webpack-based dev server,你看不到 vite.config.js,但能跑,是因为 Next 帮你封装好了。构建后,最终可能只生成一两个 JavaScript 文件,一个 CSS 文件,压缩优化过的图片,整体体积很小,加载很快,用户体验更好。这些文件是高度优化的,体积更小,性能更好。简单说,构建(英文叫 build),就是把你写的前端代码,经过一系列处理,变成浏览器能高效运行的最终文件。

2025-06-06 14:19:06 604

原创 11. vue pinia 和react redux、jotai对比

我用编号和清晰的文字帮你对比介绍 Vue 的 Pinia,和 React 的 Redux、Jotai,分中英文简要介绍、特性、底层原理、使用场景。这样看起来更简洁明了。• 中文:Pinia 是 Vue 3 官方推荐的状态管理库,比 Vuex 更简洁和模块化。• 中文:Jotai 是一个基于原子状态概念的极简灵活状态管理库,专为 React 设计。• 中文:Redux 是一个可预测的状态容器,广泛用于 React 中管理复杂状态。• 模块化设计,支持多个 store,状态、getter、action 分明。

2025-06-05 15:15:04 663

原创 9.axios底层原理,和promise的对比(2)

可以的,小T很肯定地告诉你:你完全可以直接使用 Promise 来发 HTTP 请求,比如用原生 fetch + Promise 就可以实现网络请求功能👇。Axios 所有操作都是 Promise 化的,便于使用 async/await,也方便链式 .then() 调用。你可以把 Axios 理解为在 Promise 的基础上,做了很多贴心的“增强封装”,避免你自己重复造轮子,比如。你可以把 Axios 理解为在 Promise 的基础上,做了很多贴心的“增强封装”,避免你自己重复造轮子,比如。

2025-06-05 11:03:52 920

原创 10.vue.js中封装axioa(3)

Vue 项目中如何封装和使用 Axios 的完整结构与示例,项目结构目录(含 Axios 封装)├── src/│ ├── api/ # 所有 API 接口文件│ │ └── user.js # 示例:用户相关接口│ ├── utils/ # 工具函数│ │ └── request.js # Axios 封装文件。

2025-06-05 10:52:28 387

原创 8.axios Http网络请求库(1)

一句话总结Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js,帮助你轻松发送请求、接收响应。📌 Axios 是什么?Axios 是一个 轻量级的 HTTP 请求库,支持浏览器和 Node.js 环境。它封装了 XMLHttpRequest(浏览器)和 http 模块(Node.js),让我们用更简单、统一的方式进行网络通信。✨ 有什么特性?• 支持 Promise API(可用 async/await)• 自动转换 JSON 数据。

2025-06-05 10:49:12 938

原创 7.Demo Js执行同步任务,微任务,宏任务的顺序(3)

l一个包含 同步任务、微任务(Promise)、宏任务(setTimeout) 的例子,lJS 是怎么调度这些任务的。• await Promise.resolve() 会暂停 test() 剩下的部分,把后面的逻辑变成微任务。console.log(‘同步任务 1’);console.log(‘同步任务 2’);console.log(‘同步任务 3’);console.log(‘宏任务 1’);console.log(‘微任务 1’);console.log(‘微任务 2’);

2025-06-04 17:28:38 190

原创 6.promise在哪个线程执行?(2)

真正的“异步”工作(比如请求、定时器、文件读写)由浏览器或 Node 的后台线程/模块处理完成,完成后通过事件队列再通知主线程执行后续逻辑**。答案是:JavaScript 引擎(如 V8)+ 执行环境(如浏览器、Node.js)共同实现了事件循环机制,包括微任务队列的调度。微任务队列(Microtask Queue):是一个专门用于存放**“Promise 的回调函数”**等细粒度任务的小任务队列。• Promise.then() 里的任务进了微任务队列。

2025-06-04 17:25:11 625

原创 5.Promise,async,await概念(1)

JS 引擎不会同步执行 .then() 的函数,而是将其放入微任务队列(microtask queue),等当前任务执行完后再运行。一个包含 同步任务、微任务(Promise)、宏任务(setTimeout) 的例子,JS 是怎么调度这些任务的。• await Promise.resolve() 会暂停 test() 剩下的部分,把后面的逻辑变成微任务。注册微任务 Promise.then(…

2025-06-04 17:17:14 773

原创 4.vue.js特性和原理

你可以把它理解成一个“中间人”,任何对原对象的读写,都要先经过这个中间人审查、加工、甚至阻止。Vue 将模板编译为 render 函数,生成虚拟 DOM(VNode),通过 Diff 算法对比新旧 VNode,最终只更新实际变更的 DOM 部分。Vue 构建工具(如 Vite)会将 .vue 文件编译成 JS 模块,分别处理模板(转成 render 函数)、逻辑代码和样式,实现模块化开发。Vue 核心库专注视图层,其他功能(如状态管理、路由)以独立库形式提供,按需组合,支持从轻量应用到大型项目的逐步扩展。

2025-06-04 10:13:32 532

原创 3. 简述node.js特性与底层原理

• 代码:lib/module.js、lib/internal/modules、src/module_wrap.cc。• C++ 层绑定:src/node_file.cc、src/fs_event_wrap.cc。• C++ 层绑定:src/stream_base.cc、src/tcp_wrap.cc。• libuv 层:deps/uv/src/unix/fs.c / fs-poll.c。• 核心文件:src/node.cc、src/env.cc。负责调度异步任务(定时器、I/O、Promise 等)。

2025-06-03 10:16:30 1153

原创 2.从0开始搭建vue项目(node.js,vue3,Ts,ES6)

开发中还会用到很多工具库,axios、vue-router、vant 等依赖,都是运行时需要的工具库,由 npm 统一管理。因为开发阶段你写的很多东西(比如 TypeScript、Vue 组件)浏览器不认识,得先通过 Node.js 环境来“预处理”、打包、转译。• 需要 浏览器或 Node.js 支持 ES6,或者通过构建工具(如 Vite)转译成老版本 JS(比如 ES5)才能运行。• 内置 npm(包管理器),让你方便安装和管理各种依赖(例如 axios、vue)。

2025-05-30 10:50:27 1117

原创 1.什么是node.js、npm、vue

一、Node.js 是什么?😺 定义:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,让你可以在浏览器之外运行 JavaScript 代码,主要用于服务端开发。😺从计算机底层说:什么是“运行环境”?“运行环境” = 能接收你写的高级语言代码,并把它翻译成 CPU 能执行的机器指令,然后 管理运行所需的一切资源(内存、I/O、线程等) 的一套系统。😺😺Node.js 是如何做到“运行 JS 代码”的?

2025-05-29 23:20:54 2231 1

原创 Springboot Starter机制

starter机制

2022-06-04 00:57:54 681

原创 (3)数组模拟环形队列

数组模拟环形队列对前面的数组模拟队列的优化,充分利用数组. 因此将数组看做是一个环形的。(通过取模的方式来实现即可)分析说明:尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在做判断队列满的时候需要注意 (rear + 1) % maxSize == frontrear == front [空]分析示意图代码实现import java.util.Scanner;public class CircleDemo { public static void ma

2022-05-10 17:13:58 426

原创 (2) 数组实现队列

队列队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出示意图:(使用数组模拟队列示意图)数组模拟队列思路1.队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图:其中 maxSize 是该队列的最大容量。2.因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front 及 rear 分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear 则是随着数据输入而改变,如图所示:3

2022-05-09 18:00:21 568

原创 (1)线性结构和非线性结构+稀疏数组

文章目录一、线性结构和非线性结构线性结构非线性结构二、稀疏数组 sparsearray一、线性结构和非线性结构数据结构包括:线性结构和非线性结构。线性结构线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息线性结构常见的有:数组、队列、

2022-05-08 00:42:58 582

原创 为什么重写equals方法,还必须要重写hashcode方法

原因:1.为了提高效率采取重写hashcode方法,先进行hashcode比较,如果不同,那么就没必要在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的,一个很好的例子就是在集合中的使用。我们都知道java中的List集合是有序的,因此是可以重复的,而set集合是无序的,因此是不能重复的,那么怎么能保证不能被放入重复的元素呢,但靠equals方法一样比较的话,如果原来集合中以后又10000个元素了,那么放入10001个元素,难道要将前面的所

2022-04-26 23:25:47 18718 3

原创 JWT鉴权

文章目录一、什么是JWT二、JWT能做什么三、JWT介绍以及和传统Session的区别1)基于传统的Session认证2)基于JWT认证四、JWT的构成和认证流程五、JWT的优缺点一、什么是JWTJSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a

2022-04-25 23:04:25 2101

原创 死锁问题(产生条件、解决问题)

什么是死锁?所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 因此我们举个例子来描述,如果此时有一个线程A,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。则会陷入死锁产生死锁的原因?可归结为如下两点:a. 竞争资源系统中的资源可以分为两类:1.可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,CPU和主存均属于可剥夺性资源;2.另一类资源是不可

2022-04-25 10:40:42 913

原创 处理高并发问题思路

文章目录1.先考虑一个最简单的系统架构2.系统集群化部署3.数据库分库分表 + 读写分离4.缓存集群引入5.引入消息中间件集群结语1.先考虑一个最简单的系统架构假设刚刚开始你的系统就部署在一台机器上,背后就连接了一台数据库,数据库部署在一台服务器上。我们甚至可以再现实点,给个例子,你的系统部署的机器是4核8G,数据库服务器是16核32G。此时假设你的系统用户量总共就10万,用户量很少,日活用户按照不同系统的场景有区别,我们取一个较为客观的比例,10%吧,每天活跃的用户就1万。按照28法则,每天高峰

2022-04-21 16:52:16 1024 1

原创 Java常见异常

遇到过异常吗,如何处理?在Java中,可以按照如下三个步骤处理异常:捕获异常 try将业务代码包裹在try块内部,当业务代码中发生任何异常时,系统都会为此异常创建一个异常对象。创建异常对象之后,JVM会在try块之后寻找可以处理它的catch块,并将异常对象交给这个catch块处理。处理异常 catch在catch块中处理异常时,应该先记录日志,便于以后追溯这个异常。然后根据异常的类型、结合当前的业务情况,进行相应的处理。比如,给变量赋予一个默认值、直接返回空值、向外抛出一个新的业务异常交给调用者

2022-04-21 16:16:26 176

原创 Spring 中的 bean 为什么默认单例?

文章目录单例bean与原型bean的区别单例bean的优势单例bean的劣势Spring提供了5种scope分别是singleton、prototype、request、session、global session。今天要介绍的是这五种中的前两种,也是Spring最初提供的bean scope singleton 和 prototype。官方文档:https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html单例bea

2022-04-21 16:06:35 228

原创 springboot启动失败:APPLICATION FAILED TO START

启动mian遇到APPLICATION FAILED TO START问题:如下图@SpringbootApplication注解包含的内容,可以扫描包中的类、自动配置等等。所以在包中没有数据源或者url,会显示启动失败APPLICATION FAILED TO STARTDescription:** Failed to configure a DataSource: ‘url’ attribute** is not specified and no embedded datasource co

2022-04-17 22:39:40 1884

原创 Redis

redisredis是什么?Remote Dictionary Server(Redis): key-value的存储系统,非关系数据库意大利: Salvatore Sanfilippo ANSI C 语言, 基于内存、分布式、可持久化的键值对数据仓库。redis的特点 支持持久化->内存–>磁盘 开源BSD协议,高性能key-value Redis实现单线程(目前版本) 五大类型:string, list,set,hash,zset 性能极高- 读速度 1100

2022-04-15 18:36:05 741

原创 springboot优雅的解决异常问题(demo)

需求:主要处理用户登录异常用户名不存在用户名密码不为空自定义异常/** * 定义系统异常 */public class AeipfException extends RuntimeException{ public AeipfException(String message) { super(message); }}/** * 用户名、密码不能为空 */public class AccountNotNulException extends A

2022-04-15 17:44:42 400

原创 什么是ORM框架?

ORM概念什么是“持久化”即把数据(如内存中的对象)保存的磁盘的某一文件中。常用的ORM半自动框架如Mybatis,全自动ORM框架JPA。JPA详解什么是持久层持久层(Persistence Layer),即实现数据持久化应用领域的一个逻辑层面,将数据使用者和数据实体相关联。持久化过程把数据永久载入数据库在载入磁盘中比如下面的代码,Springboot中的jpa框架添加居民信息residentsDao.save(residents)相当于把新创建的residents居民对象添加到数

2022-04-15 12:25:10 6662

原创 构造简易版hashmap(acm模式)

import java.util.Scanner;public class Test3 { static class hashmap{ private int key; private String value; private String[] arr = new String[10]; int count; public hashmap() { } public void put(int key, Strin

2022-04-14 20:56:39 302

原创 java list、map、数组的迭代

list迭代for循环、foreach、Interatorpublic class Test2 { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); Random ran=new Random(); //循环添加元素 for (int i = 0; i < 10; i++) {

2022-04-13 16:36:11 304

原创 java比较器的使用

ComparableComparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。此外,“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。接口中通过x.compareTo(y)来比较x和y的大小。若返回负数,意味着x比y小;返回零,意味着x等于y;返回正数,意味着x大于y。ComparatorComparator 是比较器接口。若需要控制某个类的次序,而该类本

2022-04-11 20:03:04 581

原创 ConcurrentHashMap与Hansmap的区别

ConcurrentHashMap与Hansmap的区别HashMap是线程不安全的,因此为了解决线程安全问题,提出了两个类:HashTable和CurrentHashMap。HashTable相关操作都是对方法加synchronized的大锁,效率比较低。ConcurrentHashMap避免了对全局加锁改成了局部加锁操作,这样就极大地提高了并发环境下的操作速度。jdk1.7在JDK1.7中ConcurrentHashMap采用了数组+Segment+分段锁的方式实现。ConcurrentHa

2022-04-09 15:31:43 919

原创 为什么HashMap是非线程安全的?

HashMap 是非线程安全的, HashTable 是线程安全的,因为里面的方法使用了 synchronized 进行同步。但是 HashMap 为什么是非线程安全的呢?难道仅仅就是因为内部的方法没有 synchronized 关键字修饰吗?哒咩HashMap 底层是一个 Entry 数组,当发生 hash 冲突的时候,HashMap 是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了

2022-04-09 14:49:23 1017

原创 sprngboot常用注解

文章目录标题@SpringBootApplication标题@Component、@Service、@Controller、@Repository@ResponseBody@RestController标题@AutoWired、@Qualifier、@Resource@RequestMapping、@GetMapping、@PostMapping@Value、@ConfigurationProperties、@PropertySource@Configuration、@Bean@RequestParam、@

2022-04-03 11:29:44 590

原创 java的锁机制

文章目录常见锁公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁熟悉几个概念以后再细说一下java中的锁:Synchronized的实现:Lock锁常见锁公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。可重入锁可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁

2022-04-02 21:00:14 344

原创 Java中Stack和Deque的比较

在刷到leetcode84的单调栈解法,栈使用了Deque而不是Stack。leetcode 84为什么用Stack 不用Deque?确实如果没有对API有很仔细的研究,单纯从使用上来说,很难仔细发现他们中间的区别,虽然他们有很大不同。而实际在Java Doc里是建议用Deque替代Stack接口完成栈的功能,我们仔细看下Java Doc里对Stack是这样描述的:A more complete and consistent set of LIFO stack operations is prov

2022-04-02 12:55:20 1114

原创 http和https的比较

一、HTTP 和 HTTPS 的基本概念HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。它可以使浏览器更加高效。HTTP 协议是以明文方式发送信息的,如果黑客截取了 Web 浏览器和服务器之间的传输报文,就可以直接获得其中的信息。HTTP 原理:① 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,一般 TCP 连接的

2022-04-02 12:26:59 397

原创 mybatis日志、缓存

mybatis详解mybatismybatis日志log4j日志配置src下log4j.propertieslog4j.rootLogger=debug,stdout,logfile#console outputlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.SimpleLayoutlog4j.appender.stdout.Pattern

2022-03-31 16:23:55 165

原创 Java的MessageDigest类、MD5算法

什么是MD5算法MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash value),用于确保信息传输完整一致。原理:MD5是一种不可逆的算法,是一种散列函数,使用的是hash算法。输入任意长度的信息,经过处理,输出为128位的信息(数字指纹),不同的输入得到的不同的结果(唯一性)。在计算过程中原文的部分信息是丢失了的。所以不能从密文(散列值)反过来得到原文,即没有解密算法。MD

2022-03-27 14:26:19 1603

原创 redis持久化机制:RDB,AOF和混合式

Redis做为一种高性能缓存数据库,是如果实现的?总结持久化机制:RDB,AOF,混合式。RDB是快照文件,反映的是Redis在某一时刻的数据状态,缺点是当数据继续变化时,RDB无法持久化新的数据变化。AOF记录的是所有的操作日志,当从AOF持久化文件中恢复数据到REDIS时,会依次执行所有日志记录,但是缺点是多条hset或者set记录仅有最后一条能反映最终状态,(set多个人名,get一下只能获取到最后一个人的)因此中间状态有浪费内存之嫌,当然可以通过设置rewrite的阀值,压缩多余的中间状态记

2022-03-23 22:54:12 1325

原创 springboot的多模块开发

文章目录springboot的多模块开发1.创建项目springboot-high2.在项目中添加模块1)springboot-common模块2)springboot-domain模块3)springboot-service模块4)springboot-web模块多模块开发引入jpa的实体类问题springboot的多模块开发springboot-high​ |–springboot-common 模块 (DTO)​ |–springboot-domain 模块 (ent

2022-03-23 22:28:18 4916

空空如也

空空如也

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

TA关注的人

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