自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ether.js的calldata

• calldata 就是告诉合约 “我调用哪个函数,参数是什么” 的二进制数据。• calldata 指的是一笔 合约调用的输入数据(Input Data)。• data(= calldata):告诉合约你要调用哪个函数、传什么参数。ethers.js 会帮你自动编码 calldata,并打包到交易里。calldata = 函数签名 + 编码后的参数。✅ (b) 如果你想查看 calldata。这样你就可以手动拿到 calldata。📌 1️⃣ 什么是 calldata?

2025-07-16 22:22:45 439

原创 为什么要用erc165识别erc721或erc1155

• 前端 dapp:在用户输入一个 NFT 合约地址后,先通过 supportsInterface 判断它是不是 ERC721 或 ERC1155,再决定用什么方式去展示和交互。• 你想调用一个 NFT 合约的 safeTransferFrom,但你先要确定它真的是 ERC721 或 ERC1155。• 链上合约:比如一个 NFT 拍卖合约,收到一个 NFT 资产地址,要先确认它是 ERC721 才安全接收。• ERC721、ERC1155 都是基于 ERC165 来声明自己支持的接口。

2025-07-16 22:10:10 304

原创 ethers.js-8-bigNmber和callstatic模拟

• BigNumber 支持 .add() .mul() .div() .toString() 等方法。console.log(“预计会 mint:”, minted.toString());• ethers.js 使用 ethers.BigNumber(不是 BigInt)。预演写交易(不发交易) contract.callStatic.xxx()➡️ ETH(字符串) -> Wei(BigNumber)➡️ Wei(BigNumber) -> ETH(字符串)

2025-07-15 17:21:27 474

原创 ethers.js-7-事件的检索,监听,过滤

ethers.providers.JsonRpcProvider 是最常用的 provider,直接通过 HTTP JSON-RPC 协议连接以太坊节点。创建一个 provider 对象,让你可以通过 HTTP 请求这个 RPC 节点,读取链上的区块、交易、合约数据,监听事件等。在 ethers.js 里,ethers.providers 是用来和区块链节点(比如以太坊节点)通信的模块。

2025-07-15 15:07:56 411

原创 ether.js—6—contractFactory以部署ERC20代币标准为例子

合约工厂 (ContractFactory) ethers.js 的一个工具,用来根据 ABI + bytecode 创建和部署合约。deploy() 调用后会把合约字节码发送到链上,触发矿工打包,返回部署后的合约实例(有地址)部署合约 把你的 Solidity 代码变成机器能跑的字节码,发上链,得到一个合约地址。Bytecode 合约编译后生成的二进制机器码,用来真正部署到链上。1️⃣ 编译你的合约,拿到 ABI 和 Bytecode。ABI 描述合约的方法签名,告诉 JS 怎么跟合约交互。

2025-07-14 23:36:48 359

原创 ethers.js-5–和solidity的关系

ethers.js 用的是 Solidity 编译出来的 bytecode + ABI,来在链上部署(deploy)或调用(call / sendTransaction)合约。它们好像都能做一样的事?• 如果你在 Solidity 合约里根本没写 mint,那么 ethers.js 就算想 mint(),链上也不会有这个函数可调用。• 例如:你的前端写的 mint() 就依赖 Solidity 里有 mint 函数。• 它可以发起 mint,但只是调用 Solidity 合约里写好的 mint()。

2025-07-14 23:31:16 516

原创 ethers.js-4-wallet

✅ ethers.Wallet 也是模拟 EOA 的类,能管理私钥,发起交易,签署消息。✅ 钱包就是管理 EOA 的工具(比如 MetaMask、钱包 APP)合约账户 CA 没有私钥,由合约代码控制,只能被交易调用。EOA 是区块链里非常核心的概念,我来详细给你解释。2️⃣ 连接到 Provider(才能发起链上交易)✅ 有 私钥,用私钥可以生成 地址(公钥哈希)[Wallet 类] ≈ [EOA账户的封装]外部账户 EOA 有私钥控制,可以发起交易。✅ 可以主动发起交易(比如转账,调用合约)

2025-07-14 15:51:27 325

原创 ether.js—3—contract

/ 可写(发交易)// 3. 创建 provider 和 signer(假设是浏览器内注入的 Metamask)• Provider:只能调用合约的 view 或 pure 函数(即只读,不花 gas)// 2. 标准 ERC20 ABI(这里只写几个方法)// 1. 合约地址(比如 USDT)// 6. 调用可写方法(转账)// 4. 创建合约实例。// 5. 调用只读方法。

2025-07-14 15:32:47 394

原创 25.Hybrid+安卓项目调试方法

本文总结了在 Hybrid 项目中进行调试的常见方式,覆盖前端 H5 调试、Android 原生调试、JSBridge 通信调试等场景,适用于项目开发期、联调期和线上问题排查。

2025-06-20 17:06:59 367

原创 24. 开发者常用工具:抓包,弱网模拟,元素检查

本文介绍浏览器开发者工具中三个常用功能:抓包并导入 Postman、模拟弱网环境、检查页面元素与样式。5. 接口会自动转换为 Postman 请求,可在 Headers、Query Params、Body 等部分进一步编辑与测试。弱网模拟可用于测试页面在 3G、慢速 4G 网络下的加载体验,尤其适用于移动端性能优化、懒加载验证等场景。通过 Elements 面板可以查看页面的 DOM 结构与 CSS 应用情况,适用于样式调试、结构分析。• 与 Postman 配合:可快速导入真实请求,进行接口测试与调试。

2025-06-20 11:47:11 364

原创 23.ssr和csr的对比?如何依赖node.js实现

• 企业一旦技术选型 React,全套都会用:Next.js(前端)、React Native(App)、React Admin(后台)、Storybook(组件库)Vue 默认是 CSR,但 Nuxt.js 提供了 SSR、SSG 能力,只是社区不太强调“CSR/SSR”这套说法而已。你刚才问的:Node.js SSR 请求内网、速度快、安全性高,Next.js 社区教程多、官方维护强,非常适合落地。其实 Vue.js 也有 SSR 和 CSR,只是默认用的是 CSR,不强调 SSR 而已。

2025-06-19 20:10:00 1027

原创 22.react和next.js、SSR与CSR的比较

React 是造车的零件,Next.js 是组装好的一辆车,还能让它跑得更快、更容易维护、更适合上线。// SSR 页面(默认行为) - app/page.tsx。• 更自由,需要你自己配置很多东西(如路由、打包、部署)• 默认 CSR,不适合 SEO 要求高的站点。• 基于 React,提供「约定式」结构和功能。2. 下载 JS、React 渲染页面。2. 服务端生成 HTML(含内容)• 更适合企业级、内容型网站、电商等。3. 浏览器收到渲染好的页面。// 纯 React 页面。

2025-06-19 19:27:16 390

原创 21.什么是JSBridge(1)

JSBridge 是 Android 官方 WebView 提供的 addJavascriptInterface() 能力 + 项目方(或三方库)封装的桥梁通信协议。核心类/方法:webView.addJavascriptInterface(JavaObject, “bridgeName”)这段代码:• 把你提供的 JavaObject 中所有用 @JavascriptInterface 注解的方法暴露给 JS。• JS 页面中就能通过 window.bridgeName.methodName(…) 调

2025-06-18 16:41:31 651

原创 20.jsBridge多页面交互与原生事件监听冲突问题

用 JSBridge.openNewHybridPage() 是多 WebView 容器跳转,需要你手动管理每个 WebView 的事件监听与状态清理,否则就会出现“回到上一页还在监听”的 Bug。JSBridge 打开页面方式和 Vue router.push 打开页面方式之间,在WebView 生命周期管理和事件监听行为上的差异,这是核心本质。在不离开当前页面的情况下,通过前端框架(Vue/React)动态切换页面视图,让用户感觉像在换页面,实则是在同一个页面内加载不同组件。

2025-06-18 11:50:12 456

原创 19.vue.js的style的lang=scss、less(2)

lang=“scss” 或 lang=“less” 是告诉 Vue 编译器:“我这段样式不是普通 CSS,而是 SCSS / LESS,需要先预处理。lang=“scss” 是用 Vue 来启用这些功能,适合中大型项目、组件库开发、多人协作。CSS 预处理器(SCSS、LESS)= 写 CSS 更像写程序,可维护、可复用、更高级。预处理器(如 SCSS、LESS)就是为了提升开发效率、模块化能力和可维护性而诞生的。普通 CSS 能写样式没错,但在真实项目中,CSS 的管理、复用、维护能力非常弱。

2025-06-14 20:01:51 1299

原创 18.vue.js的scoped样式隔离?原理和使用?(1)

✅ 一句话理解:什么是 scoped在 Vue 单文件组件 (.vue) 中使用 scoped,可以让这个组件的 CSS 只影响自己,不影响外部,也不被外部影响。这段样式只会应用于当前组件的 .title,不会影响页面中其他 .title。

2025-06-14 19:59:14 608

原创 17.vue.js响应式和dom更新

/ 还是旧的 “hello”// ✅ DOM 已更新。你提到的这个问题非常专业,而且直击 Vue 的响应性本质 —— 响应是“实时”的,但 DOM 更新却不是立即同步的。“一轮”指的是 JavaScript 的同步任务阶段,Vue 会在这轮执行完、进入微任务队列后,再统一刷新 DOM。下面我来系统地解释这个核心概念,让你彻底明白为什么 Vue 页面响应是“四时的”,而 DOM 更新“不是实时的”。响应式数据更新是同步的(你写完马上变了),而 DOM 更新是异步的(你看见的页面还没变)。

2025-06-14 19:32:28 774

原创 16.vue.js watch()和watchEffect()的对比?(追踪依赖)(3)

✔️ 上面 watchEffect 会根据你运行时访问的路径自动收集依赖,比如你只有在 a.value > 5 的时候才访问 b.value,Vue 也能动态追踪到这个路径。Vue 文档中关于 watch vs watchEffect 的依赖追踪时机差异 的描述,非常关键,下面我帮你深度解析这个区别。👉 因为 watch 是在副作用函数运行前就决定监听哪些依赖的(即你指定的 a),它不会在副作用执行时追踪新的依赖。✔️ 这里你只监听了 a,即使你在回调中用了 b,b 的变化不会触发 watch 再次执行。

2025-06-14 19:19:49 914

原创 15.vue.js的watch()和watchEffect()(2)

onInvalidate 就是 watchEffect 中的“清理钩子”,你可以在里面取消或废弃上一次副作用,保证只有最新的数据才会被应用,从而完美避免异步请求中的竞态问题。这也是绝对正确的,而且是使用 watchEffect + async 的 常见陷阱,所以我才强调 onInvalidate。你可能会先收到第2次请求的结果,然后第1次的结果又晚到了,把数据“写回去了”。老的 fetch 请求即使返回,它的结果也会被忽略。多个异步请求先后发出,但后发的请求先返回,结果被先发的旧数据覆盖了。

2025-06-14 18:55:27 1057

原创 14.vue.js的watch()的注意事项(1)

只监听state ,监听不到id的变化吗?A:Vue 3 中确实有一套跟 “深层 / 浅层” 有关的工具,它们用来控制 响应式系统的行为,而不是直接控制 watch 的深度监听。因为 state 本身(这个对象的引用)没变,只是它里面的属性变了。当你用 watch() 监听一个对象时,Vue 默认只监听它的“引用变化”,不会深层追踪子属性的变化。• 当你知道你不需要监听内部属性,比如只监听 API 结果是否更新,不关心结果结构。这 只能监听整个 state 对象的引用是否变化,而不是它内部某个属性的变化。

2025-06-14 18:07:28 1030

原创 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 516

原创 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 660

原创 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 742

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

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

2025-06-05 11:03:52 956

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

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

2025-06-05 10:52:28 401

原创 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 996

原创 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 207

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

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

2025-06-04 17:25:11 656

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

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

2025-06-04 17:17:14 796

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

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

2025-06-04 10:13:32 574

原创 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 1195

原创 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 1142

原创 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 2335 1

原创 Springboot Starter机制

starter机制

2022-06-04 00:57:54 691

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

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

2022-05-10 17:13:58 431

原创 (2) 数组实现队列

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

2022-05-09 18:00:21 581

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

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

2022-05-08 00:42:58 589

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

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

2022-04-26 23:25:47 18789 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 2114

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

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

2022-04-25 10:40:42 921

空空如也

空空如也

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

TA关注的人

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