- 博客(22)
- 收藏
- 关注
原创 前端 vs 后端请求:核心差异与实战对比
• 作用域:DOM 访问、Cookie、LocalStorage、IndexedDB、fetch/XHR、WebSocket。- WebStorage(localStorage/sessionStorage):易受 XSS 窃取。防护:SameSite=Lax/Strict、双重 Cookie、Token 在 Header。│ 带预检 CORS │ ✅(两次) │ ✅(需 ACAC 头) │。- Cookie(双 Cookie):防 XSS,但仍需防 CSRF。
2025-08-24 22:33:38
1207
原创 聊天室全栈开发-保姆级教程(Node.js+Websocket+Redis+HTML+CSS)
最近在学习websocket全双工通信,想要做一个联机小游戏,做游戏之前先做一个聊天室练练手。跟着本篇博客,可以从0搭建一个属于你自己的聊天室。
2025-08-11 18:13:42
1870
10
原创 HTTP请求:“Ajax”宗门
传统浏览器中,<form>是发送 POST 请求的标准方式,其他方式(如插件)不具备通用性;DELETE、PUT 等方法无法通过原生 HTML 直接发送,需通过 “POST + 特殊参数” 的方式模拟,由服务器端转换处理;直到 Ajax(XMLHttpRequest)出现后,浏览器才支持直接发送任意 HTTP 方法(包括 DELETE、PUT),无需依赖表单或参数转换。Ajax 的核心是 “异步通信 + 局部更新。
2025-08-04 12:11:40
696
9
原创 揭秘JavaScript事件循环:单线程为何高效?
可以直接被JavaScript引擎执行的,不会引起堵塞的代码// 声明语句name:'张三',age:18// 赋值语句var a=1;// 打印语句// 函数return x+y;执行需要一定的时间会阻塞程序运行的代码。JavaScript引擎对于这种类型的代码并不关心他们的执行过程(即不等待执行结果)。而是等异步代码主动通知主进程说:”我执行完了!“,主进程空闲的时候通过事件循环机制调用对应的回调函数处理异步代码的返回结果。
2025-07-24 16:52:33
1076
5
原创 在Next.js里玩转pdf预览
在项目开发中,pdf预览是一个很常见的业务。各大公司为了保护自己的知识产权,也会对pdf预览进行限制,比如:不允许下载、打印,不允许提取文字等等。要想在实现预览功能的基础上还要附加这些限制,有很多中可选的方法。本篇文章主要从前端视角谈谈怎么实现这个业务。在开始讲解之前,需要先明确一点:使用纯前端的方法是无法完全避免用户窃取pdf的内容的,只能通过一些配置和脚本增加用户获取的难度。更安全的方法是后端对于pdf资源的请求加以限制,或者对pdf增加水印等等。
2025-07-16 16:16:01
606
7
原创 React useState原理解密:从源码到实战
useState是React Hooks的核心之一,理解它的底层原理有助于更好地是使用它。避免常见的陷阱(如闭包问题)写出更高效的组件更好的调试状态相关问题理解React的更新机制。
2025-07-12 22:08:09
469
6
原创 app Router VS pages Router(Next.js学习笔记)
本片文章主要对Next.js框架中的路由系统进行介绍,读者需要具备一定的JavaScript和react基础。相信通过本篇文章你会对Next.js框架的路由系统有更深的理解。app Router基于文件夹命名构建路由,pages Router基于每一个js文件构建路由。因此pages Router的路由更加自由,学习成本也相对较小。客户端组件和服务器组件是app Router独有的。顾名思义,客户端组件运行在浏览器环境中,可用于dom操作;
2025-06-21 20:42:35
589
原创 Electron通信流程
今天讲Electron框架的通信流程,首先我们需要知道为什么需要通信。这得益于Electron的多进程模型,它主要模仿chrome的多进程模型如下图:作为应用开发者,我们将控制两种类型的进程:主进程和渲染器进程。是一个允许在不同上下文之间传递消息的Web功能。就像, 但是在不同的通道上。// 消息端口是成对创建的。连接的一对消息端口// 被称为通道。// port1 和 port2 之间唯一的不同是你如何使用它们。消息// 发送到port1 将被port2 接收,反之亦然。
2025-06-08 09:47:44
1083
4
原创 快速上手Electron开发桌面应用(以Windows为例)
如果你一路跟随本教程下来,你应该已经建立了一个拥有静态用户界面的功能性 Electron 程序。增加渲染进程的网页应用代码复杂度深化与操作系统和 Node.js 的集成具体实现步骤请移步Electron文档进行学习,这里不再赘述。
2025-05-31 17:50:10
1695
原创 滑动窗口和动态规划的区别
滑动窗口和动态规划都是算法学习中的基础,也是常用算法。很多人搞不明白什么是动态规划,动态规划其实就是开辟一个空间用来存储子计算的结果,说白了就是用空间换时间,避免重复计算。
2025-01-19 21:47:16
817
原创 二叉树深度优先遍历
简介:写递归函数要明确递归三要素确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要确定每次递归的返回值是什么进而确定递归函数的返回类型确定终止条件:写完了递归算法,运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定单层递归的逻辑:确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。
2024-11-03 09:22:51
556
1
原创 git指令总结
git config --global user.email "your_email@example.com" :设置全局用户邮箱。git commit -m "Commit message" :提交暂存区的修改,并附上提交信息。git tag -a -m "Tag message" :创建一个带注释的标签。git reset --hard :回滚到指定的提交,丢弃之后的所有更改。git diff --staged :查看暂存区和上一次提交的差异。git init :在当前目录创建一个新的 Git 仓库。
2024-10-27 17:59:22
1468
原创 HTML5 hashchange事件
当浏览器 URL 的片段标识符(即 URL 中“#”后面的部分)发生变化时,会触发“hashchange”事件。这个事件可以用来实现单页应用程序(SPA)中的页面导航或状态切换,而无需进行整页刷新。
2024-10-13 17:24:02
820
原创 原生JavaScript实现轮播图(更改元素位置)
每一张图片均进行移动,具体思路是通过改变数组的排序,数组的排序由当前显示区域图片的序号决定,开启定时器每隔一段事件序号+1或者-1。
2024-10-06 19:05:34
374
原创 ES6 函数拓展
基本用法注意点:使用函数默认参数时,不允许有同名参数只有在未传递参数,或者参数为undefined时,才会使用默认参数,null值被认为是有效的值传递。函数参数默认值存在暂时性死区,在函数参数默认值表达式中,还未初始化赋值的参数值无法作为其他参数的默认值。
2024-09-22 17:53:42
619
原创 算法:冒泡排序
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。
2024-09-08 20:57:39
304
原创 ES6模块简介
在 ES6 前, 实现模块化使用的是 RequireJS 或者 seaJS(分别是基于 AMD 规范的模块化库, 和基于 CMD 规范的模块化库)。ES6 引入了模块化,其设计思想是在编译时就能确定模块的依赖关系,以及输入和输出的变量。ES6 的模块化分为导出(export) @与导入(import)两个模块。
2024-09-01 22:11:40
1869
原创 JavaScript this关键字
一般情况下,对于一般函数而言,函数的this指向调用者,对于箭头函数而言,它没有自身的this,但是它会继承父级作用域中的this。
2024-08-11 19:12:47
470
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅