当前位置: 首页 > news >正文

前端线上错误日志收集与定位指南

想象一下:你的Web应用上线后,用户反馈“按钮点不动”或“页面白屏”,但你却无从下手!前端线上错误如JavaScript异常、网络失败,稍不注意就让用户流失,业务受损。令人抓狂的是,80%的错误悄无声息,只有用户投诉才暴露问题!好在,系统化的日志收集与定位能让你化被动为主动,快速揪出bug。正如X大神@wesbos所说:“没有日志,前端开发就像盲人摸象!”本文将带你从零搭建前端错误监控体系,用Sentry、LogRocket等神器让问题无处遁形,线上稳定性一飞冲天!

如何捕获前端线上错误?哪些工具能高效收集日志?如何从海量日志中定位问题根因?

端错误管理需结合自动捕获、工具集成和日志分析,覆盖JavaScript错误、网络问题和用户交互异常。以下是核心方案与实战案例,助你快速上手。

端错误管理需结合自动捕获、工具集成和日志分析,覆盖JavaScript错误、网络问题和用户交互异常。以下是核心方案与实战案例,助你快速上手。

1. 全局错误捕获:防患于未然

场景:捕获未处理的JavaScript异常和Promise错误。
方法:使用window.onerror和window.addEventListener监听全局错误。


代码

window.onerror = (message, source, lineno, colno, error) => {console.error(`Error: ${message} at ${source}:${lineno}:${colno}`);// 发送到后端日志服务fetch('/log', {method: 'POST',body: JSON.stringify({ message, source, lineno, colno, stack: error?.stack })});
};window.addEventListener('unhandledrejection', (event) => {console.error(`Promise Rejection: ${event.reason}`);fetch('/log', {method: 'POST',body: JSON.stringify({ type: 'promise', reason: event.reason })});
});

案例:某电商网站因未捕获Promise错误,导致支付失败未被发现;加全局监听后,24小时内定位问题,挽回90%用户。
实践:在项目入口文件(如index.js)添加上述代码,配合后端日志接口。

框架特定错误处理

// React错误边界
class ErrorBoundary extends React.Component {componentDidCatch(error, info) {const errorData = {message: error.message,stack: error.stack,componentStack: info.componentStack,timestamp: new Date().toISOString()};sendErrorToServer(errorData);}
}// Vue错误处理器
Vue.config.errorHandler = (err, vm, info) => {const errorData = {message: err.message,stack: err.stack,component: vm?.$options?.name,lifecycleHook: info,timestamp: new Date().toISOString()};sendErrorToServer(errorData);
};

 

网络请求错误监控

// 拦截fetch请求
const originalFetch = window.fetch;
window.fetch = async function(...args) {try {const response = await originalFetch(...args);if (!response.ok) {const errorData = {type: 'fetch_error',url: args[0],status: response.status,timestamp: new Date().toISOString()};sendErrorToServer(errorData);}return response;} catch (error) {const errorData = {type: 'fetch_exception',url: args[0],message: error.message,stack: error.stack,timestamp: new Date().toISOString()};sendErrorToServer(errorData);throw error;}
};

2. 集成Sentry:专业错误监控

场景:需要详细的错误上下文(浏览器、设备、用户操作)。
方法:集成Sentry SDK,自动收集错误、堆栈和用户行为。


代码

import * as Sentry from '@sentry/browser';Sentry.init({dsn: 'YOUR_SENTRY_DSN',environment: 'production',release: 'app@1.0.0',tracesSampleRate: 1.0
});// 示例:手动捕获错误
try {doSomething();
} catch (error) {Sentry.captureException(error);
}

案例:某社交平台用Sentry监控,捕获React组件异常,发现特定浏览器版本导致白屏,2小时修复上线。
实践:注册Sentry,获取DSN,按文档配置SDK,启用Source Map以精确定位代码行。

3. LogRocket:复现用户场景

场景:需查看用户操作路径和错误发生时的页面状态。
方法:用LogRocket录制用户会话,结合错误日志和视频回放。


代码

import LogRocket from 'logrocket';LogRocket.init('YOUR_APP_ID');// 关联用户身份
LogRocket.identify('user123', {name: 'John Doe',email: 'john@example.com'
});// 捕获自定义日志
LogRocket.log('User clicked checkout button');

案例:某在线教育平台通过LogRocket回放,发现用户在特定设备上因网络延迟触发错误,优化后转化率提升20%。
实践:注册LogRocket,添加SDK,分析会话录像定位交互问题。

4. 自定义日志:精细化监控

场景:记录关键操作(如API调用、用户点击)以辅助调试。
方法:封装日志工具,设置日志级别(如debug、error),发送到后端。


代码

class Logger {constructor() {this.levels = ['debug', 'info', 'warn', 'error'];this.currentLevel = 'info';}log(level, message) {if (this.levels.indexOf(level) >= this.levels.indexOf(this.currentLevel)) {const timestamp = new Date().toISOString();console[level](`[${level.toUpperCase()}] ${timestamp}: ${message}`);fetch('/log', {method: 'POST',body: JSON.stringify({ level, message, timestamp })});}}info(message) { this.log('info', message); }error(message) { this.log('error', message); }
}const logger = new Logger();
export default logger;// 使用
logger.info('User logged in');
logger.error('API request failed');

案例:某金融应用通过自定义日志记录API调用,定位超时问题,优化后响应时间缩短50%。
实践:将上述Logger类集成到React/Vue项目,结合后端日志平台(如ELK)。

5. 日志分析与警报:主动响应

场景:从海量日志中筛选关键问题,及时通知团队。
方法:用Datadog或Splunk分析日志,设置警报规则。


代码(Datadog配置示例):

// 配合后端日志接口,发送到Datadog
fetch('https://api.datadoghq.com/v1/logs', {method: 'POST',headers: { 'DD-API-KEY': 'YOUR_API_KEY' },body: JSON.stringify({message: 'Checkout error',level: 'error',tags: ['frontend', 'production']})
});

案例:某零售网站用Datadog设置错误率警报,发现第三方支付接口异常,1小时内切换备用接口,避免损失。
实践:注册Datadog,配置日志摄入,设置错误频率警报。

 基础定位流程

  1. 查看错误类型‌:区分是JS运行时错误、资源加载错误还是API请求错误
  2. 检查错误堆栈‌:优先查看stack属性中的调用链信息
  3. 定位源代码‌:根据错误信息中的文件名、行号和列号定位问题代码
  4. 重现问题‌:尝试在开发环境复现相同错误

 基础定位流程

  1. 查看错误类型‌:区分是JS运行时错误、资源加载错误还是API请求错误
  2. 检查错误堆栈‌:优先查看stack属性中的调用链信息
  3. 定位源代码‌:根据错误信息中的文件名、行号和列号定位问题代码
  4. 重现问题‌:尝试在开发环境复现相同错误

具体案例分析

案例1:未定义变量错误
// 错误日志示例
{"message": "Uncaught ReferenceError: userInfo is not defined","source": "https://example.com/static/js/main.js","line": 42,"column": 15,"stack": "ReferenceError: userInfo is not defined\n    at getUserProfile (main.js:42:15)\n    at initUser (main.js:38:3)\n    at onPageLoad (main.js:12:5)","timestamp": "2025-05-04T09:30:15.123Z"
}

定位步骤‌:

  1. 查看main.js第42行第15列
  2. 检查getUserProfile函数中对userInfo的使用
  3. 确认变量是否正确定义或导入
案例2:API请求失败
javascriptCopy Code
// 错误日志示例
{"type": "fetch_error","url": "/api/orders/123","status": 500,"timestamp": "2025-05-04T10:15:22.456Z","requestHeaders": {"Content-Type": "application/json","Authorization": "Bearer xxx"},"responseText": "Internal Server Error"
}

定位步骤‌:

  1. 检查后端日志中对应时间点的/api/orders/123请求
  2. 确认请求参数是否正确
  3. 如果是500错误,查看后端异常堆栈

 

案例3:跨域错误
javascriptCopy Code
// 错误日志示例
{"message": "Access to fetch at 'https://api.example.com/data' from origin 'https://app.example.com' has been blocked by CORS policy","stack": "Error: Failed to fetch\n    at fetchData (main.js:87:15)","timestamp": "2025-05-04T11:20:33.789Z"
}

定位步骤‌:

  1. 检查请求URL是否正确
  2. 确认后端是否配置了正确的CORS头
  3. 对于复杂请求,检查预检请求(OPTIONS)是否通过

最佳实践建议

  1. 错误分级‌:根据影响程度将错误分为致命、严重、警告等级别
  2. 采样上报‌:对高频非关键错误进行采样上报,避免数据过载
  3. 敏感信息过滤‌:避免记录用户敏感数据到日志中
  4. 实时报警‌:对关键错误设置实时报警机制
  5. 定期分析‌:每周/月进行错误趋势分析,识别系统性问题

前端错误监控已成为开发刚需。Gartner 2024报告显示,90%的企业因前端错误导致用户流失,日志收集需求激增。X平台(如@dotey)热议Sentry的Source Map和LogRocket的会话回放,称其“让调试像看电影”。
开源社区(如OpenTelemetry)推动了日志标准化,GitHub上Sentry的star数超3万,反映开发者对可靠监控的追求。企业场景中,错误监控不仅是技术需求,还关乎业务增长,如电商通过优化错误处理提升转化率。这些趋势凸显了日志收集在前端开发中的核心地位。

总结

全局捕获、Sentry、LogRocket、自定义日志和日志分析——这五大方案构建了前端错误监控的完整闭环。它们不仅帮你快速定位问题,还提升了用户体验和业务稳定性。前端开发不仅是代码,更是责任——通过日志收集,你能让应用更可靠,用户更满意。掌握这些技巧,你的线上系统将稳如磐石,调试效率一飞冲天!

在当前前后端分离、复杂组件化的开发趋势下,前端负责的交互越来越多,线上故障也更频繁地暴露于用户端。一份 2024 年前端性能调研显示,超 58% 的严重前端问题最终靠错误日志才得以定位。这表明:前端错误日志不是可选项,而是保障线上质量的标配。

**看不见的问题最致命,看得见的日志最安全。**前端质量的核心,是一套可观测、可追踪、可响应的日志系统!

 

相关文章:

前端线上错误日志收集与定位指南

想象一下:你的Web应用上线后,用户反馈“按钮点不动”或“页面白屏”,但你却无从下手!前端线上错误如JavaScript异常、网络失败,稍不注意就让用户流失,业务受损。令人抓狂的是,80%的错误悄无声息…...

可视化魔法指南

🎨 ECharts数据可视化魔法指南 🌟 ECharts:数据的艺术画笔 #mermaid-svg-ARwFHUrXBJ03Gpo9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ARwFHUrXBJ03Gpo9 .error-icon{fill:#552222;}#mermaid-svg-ARwFHUr…...

使用ffmpeg截取MP3等音频片段

可以使用以下命令通过 ffmpeg 截取 MP3 音频文件的指定片段: ffmpeg的安装方法参考:linux 安装包方式安装ffmpeg,并在环境中设定或指定ffmpeg地址_linux 通过ffmpeg访问地址-CSDN博客 ffmpeg -ss [start_time] -i input.mp3 -to [end_time] -codec copy output.mp3 参数说…...

FFmpeg(7.1版本)编译生成ffplay

FFmpeg在编译的时候,没有生成ffplay,怎么办? 1. 按照上一篇文章:FFmpeg(7.1版本)在Ubuntu18.04上的编译_ffmpeg-7.1-CSDN博客 在build.sh脚本里配置了ffplay 但是,实际上却没有生成ffplay,会是什么原因呢? 2. 原因是编译ffplay的时候,需要一些依赖库 sudo apt-get i…...

CAN学习之--不使用收发器进行通讯测试

在实际调试或者学习CAN通讯过程中,在需要进行CAN调试的时候,但是手头有只有MCU的评估板,没有CAN的收发器,比如ATA6561、MCP2518这类芯片的时候,该怎么办呢? 因为我们知道,CAN收发器只是做信号的…...

律所项目管理全攻略:人力分配 / 案件管控 / 知识沉淀三维度解析(附专用工具清单)

引言:律所项目管理破局 ——从经验驱动到体系化运营 在法律服务行业数字化转型加速的背景下,律所项目管理能力已成为决定服务质量、客户满意度及团队效能的核心竞争力。从人力分配失衡导致的效率损耗,到案件流程模糊引发的客户信任危机&…...

Linux电源管理(7)_Wakeup events framework

原文链接:Linux电源管理(7)_Wakeup events framework 1. 前言 本文继续“Linux电源管理(6)_Generic PM之Suspend功能”中有关suspend同步以及PM wakeup的话题。这个话题,是近几年Linux kernel最具争议的话题之一,在国外Linux开发论坛&…...

Nvidia-smi 运行失败(Failed to initialize NVML: Driver/library version mismatch)

问题排查 在linux服务器上运行 nvidia-smi 命令,提示以下错误: Failed to initialize NVML: Driver/library version mismatch 首先查看内核驱动版本: cat /proc/driver/nvidia/version然后查看当前NVIDIA驱动版本: sudo dpkg …...

算法设计与分析实验题-序列对齐

基于 C 的序列最大对齐得分算法实现 在生物信息学和文本处理领域,序列对齐是一种常见的需求。本文将介绍如何使用 C 实现一个序列最大对齐得分算法,该算法可以计算两个序列在最优对齐方式下的最大得分。 问题描述 给定两个序列 S1 和 S2,我…...

第8章-1 查询性能优化-优化数据访问

上一篇:《 下一篇:《第7章-3 维护索引和表》》 在前面的章节中,我们介绍了如何设计最优的库表结构、如何建立最好的索引,这些对于提高性能来说是必不可少的。但这些还不够——还需要合理地设计查询。如果查询写得很糟糕&a…...

每日一题洛谷P1025 [NOIP 2001 提高组] 数的划分c++

P1025 [NOIP 2001 提高组] 数的划分 - 洛谷 (luogu.com.cn) #include<iostream> using namespace std; int n, k; int res 0; void dfs(int num,int step,int sum) {//判断if (sum n) {if (step k) {res;return;}}if (sum > n || step k)return;//搜索for (int i …...

【python】使用Python和BERT进行文本摘要:从数据预处理到模型训练与生成

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着信息爆炸时代的到来,海量文本数据的高效处理与理解成为亟待解决的问题。文本摘要作为自然语言处理(NLP)中的关键任务,旨在自动生成…...

WHAT - Rust 智能指针

文章目录 常见的智能指针类型1. Box<T> — 堆上分配的数据2. Rc<T> — 引用计数的共享所有权&#xff08;单线程&#xff09;3. Arc<T> — 原子引用计数&#xff08;多线程&#xff09;4. RefCell<T> — 运行时可变借用&#xff08;单线程&#xff09;…...

用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1(Client端)

这里我们来实现这个RPC的client端 为了实现RPC的效果&#xff0c;我们调用的Hello方法&#xff0c;即server端的方法&#xff0c;应该是由代理来调用&#xff0c;让proxy里面封装网络请求&#xff0c;消息的发送和接受处理。而上一篇文章提到的服务端的代理已经在.rpc.go文件中…...

CentOS 安装 Zellij 终端复用器教程

CentOS 安装 Zellij 终端复用器教程 简介 Zellij 是一个现代化的终端复用器&#xff0c;使用 Rust 语言编写。它提供了类似 tmux 的功能&#xff0c;但具有更友好的用户界面和更现代化的特性。本教程将详细介绍如何在 CentOS 7.9 系统上安装 Zellij。 前置条件 CentOS 7.9 …...

基于 SpringBoot + Vue 的校园管理系统设计与实现

一、项目简介 本系统以校园组织管理为主线&#xff0c;结合用户权限分离机制与模块化设计&#xff0c;实现对“单位类别、单位、通知推送、投票信息、用户回复”等内容的全流程管理&#xff0c;广泛适用于教育局、高校及下属组织的信息管理工作。 &#x1f3af; 项目亮点&…...

如何减少锁竞争并细化锁粒度以提高 Rust 多线程程序的性能?

在并发编程中&#xff0c;锁&#xff08;Lock&#xff09;是一种常用的同步机制&#xff0c;用于保护共享数据免受多个线程同时访问造成的竞态条件&#xff08;Race Condition&#xff09;。然而&#xff0c;不合理的锁使用会导致严重的性能瓶颈&#xff0c;特别是在高并发场景…...

【人工智能agent】--dify通过mcp协议调用工具

MCP Client 发起工具调用的实体&#xff0c;也就是 Dify 工作流或 Agent。它通过 Dify 平台提供的标准化接口&#xff08;工具节点&#xff09;来请求服务。 MCP Server / Host 提供实际服务的端点。在这个例子中&#xff0c;就是模拟 API 服务器 上的各个API (/api/pump/st…...

Review --- Redis

Redis redis是什么? Redis是一个开源的,使用C语言编写的,支持网络交互的&#xff0c;key-value数据结构存储系统,支持多种语言的一种非关系型数据库,它可以用作数据库&#xff08;存储一些简单的数据&#xff0c;例如新闻点赞量&#xff09;&#xff0c;**缓存&#xff08;秒…...

Sql刷题日志(day8)

一、笔试 1、right:提取字符串右侧指定数量的字符 right(string,length) /*string&#xff1a;要操作的字符串。length&#xff1a;要从右侧提取的字符数 */ 2、curdate():返回当前日期&#xff0c;格式通常为 YYYY-MM-DD 二、面试 1、自变量是不良体验反馈&#xff0c;因…...

【Science Advances】普林斯顿大学利用非相干光打造可重构纳米光子神经网络

(导读 ) 人工智能对计算性能需求剧增&#xff0c;电子微处理器发展受功耗限制。光学计算有望解决这些问题&#xff0c;光学神经网络&#xff08;ONNs&#xff09;成为研究热点&#xff0c;但现有 ONNs 因设计缺陷&#xff0c;在图像分类任务中精度远低于现代电子神经网络&#…...

2025-05-07 Unity 网络基础8——UDP同步异步通信

文章目录 1 UDP 概述1.1 通信流程1.2 TCP 与 UDP1.3 UDP 分包1.4 UDP 黏包 2 同步通信2.1 服务端2.2 客户端2.3 测试 3 异步通信3.1 Bgin / End 方法3.2 Async 方法 1 UDP 概述 1.1 通信流程 ​ 客户端和服务端的流程如下&#xff1a; 创建套接字 Socket。用 Bind() 方法将套…...

K8S - 金丝雀发布实战 - Argo Rollouts 流量控制解析

一、金丝雀发布概述 1.1 什么是金丝雀发布&#xff1f; 金丝雀发布&#xff08;Canary Release&#xff09;是一种渐进式部署策略&#xff0c;通过逐步将生产流量从旧版本迁移至新版本&#xff0c;结合实时指标验证&#xff0c;在最小化风险的前提下完成版本迭代。其核心逻辑…...

手持小风扇方案解说---【其利天下技术】

春去夏来&#xff0c;酷暑时节&#xff0c;小风扇成为外出必备的解暑工具&#xff0c;近年来&#xff0c;随着无刷电机的成本急剧下降&#xff0c;小风扇也逐步从有刷变无刷化了。 数量最大的如一箱无刷马达&#xff0c;其次三相低压无刷电机也大量被一些中高端风扇大量采用。…...

Qt开发:枚举的介绍和使用

文章目录 一、概述二、Qt 中定义和使用枚举2.1 普通枚举的定义方式2.2 使用枚举 三、配合 Qt 元对象系统使用枚举3.1 使用 Q_ENUM&#xff08;Qt 5.5 及以上&#xff09;3.2 示例&#xff1a;枚举值转字符串3.4 示例&#xff1a;字符串转枚举值 四、枚举与字符串相互转换五、枚…...

HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录

前言 在开发运动类应用时&#xff0c;集成地图功能以及实时记录运动轨迹和公里数是核心需求之一。本文将详细介绍如何在 HarmonyOS 应用中集成百度地图 SDK&#xff0c;实现运动跟随以及运动公里数的记录。 一、集成百度地图 SDK 1.引入依赖 首先&#xff0c;需要在项目的文…...

“胖都来”商标申请可以通过注册不!

近日“胖都来”被网友认为是蹭“胖东来”品牌流量在互联网上引起争议&#xff0c;看到许多自媒体说浙江这家公司已拿到“胖都来”的注册商标&#xff0c;普推知产商标老杨经检索后发现是没有的&#xff0c;只是申请受理。 对于商城类主要类别是在35类广告销售&#xff0c;核心是…...

【Django】中间件

Django 中间件是 Django 框架里一个轻量级、可插拔的组件&#xff0c;它能在全局范围内对 Django 的请求和响应进行处理。中间件处于 Django 的请求处理流程之中&#xff0c;在请求抵达视图函数之前以及视图函数返回响应之后执行特定操作。以下是关于 Django 中间件的详细介绍&…...

电子电器架构 --- 48V架构的一丢丢事情

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

什么是Blender?怎么获取下载Blender格式文件模型

glbxz.com glbxz.com 官方可以下载Blender格式文件模型 BlenderBlender 是一个免费的开源程序&#xff0c;用于建模和动画&#xff0c;最初由一家名为 Neo Geo 的动画工作室作为内部应用程序开发&#xff0c;后来作为自己的程序发布。这是一个称职的程序&#xff0c;近年来由于…...

Ubuntu安装pgsql

​​一、通过 APT 安装&#xff08;推荐&#xff09;​​ 更新软件包列表 sudo apt update 安装 PostgreSQL 核心包及工具 sudo apt install postgresql postgresql-client postgresql-contrib • postgresql&#xff1a;数据库服务端 • postgresql-client&#xff1a;命令行…...

Qwen2-VL详解

一、引言 在人工智能领域,多模态大模型的发展备受关注。Qwen2-VL 作为一款先进的多模态模型,致力于克服现有方法在处理图像和视频数据时存在的不足,显著提升多模态信息的理解与交互能力。本文将全面且深入地阐述 Qwen2-VL 的创新理念、精妙的模型架构、严谨的训练流程、卓越…...

定长滑动窗口---初阶篇

目录 滑动窗口核心思想 定长滑动窗口套路 定长滑动窗口习题剖析 1456. 定长子串中元音的最大数目 643. 子数组最大平均数 I 1343. 大小为 K 且平均值大于等于阈值的子数组数目 2090. 半径为 k 的子数组平均值 2379. 得到 K 个黑块的最少涂色次数 2841. 几乎唯一子数组…...

以pytest_addoption 为例,讲解pytest框架中钩子函数的应用

钩子函数&#xff08;Hook Function&#xff09;的概念 钩子函数&#xff08;Hook Function&#xff09;是软件框架中预定义的回调接口&#xff0c;允许开发者在程序执行的特定阶段插入自定义逻辑&#xff0c;以扩展或修改框架的默认行为。在 pytest 中&#xff0c;钩子函数覆…...

数据智能重塑工业控制:神经网络在 MPC 中的四大落地范式与避坑指南

一、引言&#xff1a;工业控制的范式革命 在工业 4.0 的浪潮中&#xff0c;传统基于物理模型的控制方法&#xff08;如 PID、线性二次型调节器 LQR&#xff09;正面临前所未有的挑战。以石化行业为例&#xff0c;某炼油厂的催化裂化装置&#xff08;FCCU&#xff09;因反应机理…...

AB测试面试题

AB测试面试题 常考AB测试问答题(1)AB测试的优缺点是什么?(2)AB测试的一般流程/介绍一下日常工作中你是如何做A/B实验的?(3)第一类错误 vs 第二类错误 vs 你怎么理解AB测试中的第一、二类错误?(4)统计显著=实际显著?(5)AB测试效果统计上不显著?(6)实验组优于对…...

phpstudy升级新版apache

1.首先下载要升级到的apache版本&#xff0c;这里apache版本为Apache 2.4.63-250207 Win64下载地址&#xff1a;Apache VS17 binaries and modules download 2.将phpstudy中原始apache复制备份Apache2.4.39_origin 3.将1中下载apache解压&#xff0c; 将Apache24复制一份到ph…...

民宿管理系统6

普通管理员管理&#xff1a; 新增普通管理员&#xff1a; 前端效果&#xff1a; 前端代码&#xff1a; <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-f…...

【iOS】源码阅读(三)——内存对齐原理

文章目录 前言获取内存大小的三种常用方式sizeofclass_getInstanceSizemalloc_size 总结 前言 之前学习alloc相关源码&#xff0c;涉及到内存对齐的相关内容&#xff0c;今天笔者详细学习了一下相关内容并写了此篇博客。 获取内存大小的三种常用方式 获取内存大小的方式有很多…...

在 Ubuntu 中配置 Samba 实现「特定用户可写,其他用户只读」的共享目录

需求目标 所有认证用户可访问 Samba 共享目录 /path/to/home&#xff1b;**仅特定用户&#xff08;如 developer&#xff09;**拥有写权限&#xff1b;其他用户仅允许读取&#xff1b;禁止匿名访问。 配置步骤 1. 设置文件系统权限 将目录 /home3/guest 的所有权设为 develo…...

配置指定地址的conda虚拟Python环境

创建指定路径的 Conda 环境 在创建环境时&#xff0c;使用 --prefix 参数指定自定义路径&#xff1a; conda create --prefix/your/custom/path/my_env python3.8 说明&#xff1a; /your/custom/path/my_env&#xff1a;替换为你希望存放环境的路径&#xff08;如 D:\projec…...

从彼得·蒂尔四象限看 Crypto「情绪变迁」:从密码朋克转向「标准化追求者」

作者&#xff1a;Techub 精选编译 撰文&#xff1a;Matti&#xff0c;Zee Prime Capital 编译&#xff1a;Yangz&#xff0c;Techub News 我又带着一篇受彼得蒂尔&#xff08;Peter Thiel&#xff09;启发的思想杂烩回来了。作为自封的「蒂尔学派」信徒&#xff0c;我常透过他…...

VS Code 常用插件

React Auto Import - ES6, TS, JSX, TSX Auto Rename Tag ES7 React/Redux/React-Native snippets Markdown Markdown All in One Markdown Preview Enhanced Other Prettier - Code formatter 格式化代码 Live Server 本地服务器实时预览与自动刷新...

深入探讨 UDP 协议与多线程 HTTP 服务器

深入探讨 UDP 协议与多线程 HTTP 服务器 一、UDP 协议&#xff1a;高效但“不羁”的传输使者 UDP 协议以其独特的特性在网络传输中占据一席之地&#xff0c;适用于对实时性要求高、能容忍少量数据丢失的场景。 1. UDP 的特点解析 无连接&#xff1a;无需提前建立连接&…...

Node.js入门指南:开启JavaScript全栈开发之旅

Hi&#xff0c;我是布兰妮甜 &#xff01;Node.js让JavaScript突破了浏览器的限制&#xff0c;成为全栈开发的利器。作为基于V8引擎的高性能运行时&#xff0c;它彻底改变了JavaScript只能做前端开发的局面。本文将带你快速掌握Node.js的核心用法&#xff1a;环境搭建与模块系统…...

【STM32F1标准库】理论——通信协议:串口

目录 一、简介 二、连接方式 三、串口参数与时序 1.参数 2.时序 四、STM32实现串口通信的方法 1.使用软件模拟 2.使用硬件外设 杂谈 1.通信的目的 2.常见可以使用串口通信的模块 3.串口常用电平标准 4.串口从波形反推数据 5.奇偶校验 一、简介 命名&#xff1a;USART&#…...

轻松管理房间预约——启辰智慧预约小程序端使用教程

欢迎您使用《启辰智慧预约》场所预约小程序&#xff0c;您可以通过本小程序预约会议室/活动室等&#xff0c;并在预约审批通过后&#xff0c;获取临时开锁密码&#xff0c;开锁密码会在预约时间前30分钟生效。以下是本程序的使用流程。 一、创建单位&#xff08;新用户注册&am…...

如何在自己的服务器上部署静态网页并通过IP地址进行访问

文件放置 cd /var目录 新建www目录 进入www目录 新建html目录用于放置文件以及相关资源 修改配置文件 sudo nano /etc/nginx/sites-available/default修改index部分的html文件名 修改端口映射避免80冲突 重启Nginx sudo systemctl restart nginx打开浏览器访问即可 h…...

802.11s Mesh 组网框架流程

协议标准 使用 802.11s (标准 Mesh 协议) 基础流程框架 连接流程本质&#xff1a;Beacon → Peer Link → HWMP 路径发现 → 数据传输。mesh与easymesh的区别 阶段详解 阶段1:Beacon广播 作用&#xff1a;周期性宣告Mesh网络存在&#xff0c;同步参数&#xff08;如Mesh …...

gitcode 上传文件报错文件太大has exceeded the limited size (10 MiB) in commit

登陆gitcoe&#xff0c;在项目设置->提交设置 ,勾选提交文件限制&#xff0c;修改限制的大小。 修改完后&#xff0c;重新提交代码。...