React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)
React
React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么,Fiber架构,面试向面试官介绍,详细解释
用户:
React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么,Fiber架构,面试向面试官介绍,详细解释
元宝:
- 引用 14 篇资料作为参考
- React Hooks 的原理-CSDN博客
- 常见的 React 库架构设计
- React 如何实现 hooks
- 自定义React Hook的设计与实现
- React hooks的原理和机制,帮我解释下 - CSDN文库
- React 中不适当的 Hooks 使用问题及解决方案
- 2025.04.19react面试题-CSDN博客
- 为什么不能在循环、条件或嵌套函数中调用 Hooks?
- 理解 React 的Fiber 架构-阿里云开发者社区
- 前端 - 浅谈Fiber架构的工作流程 - 个人文章 - SegmentFault 思否
- React框架的Fiber架构_fiber框架-CSDN博客
- 前端 - 文心快码帮你解大厂面试题:React底层如何管理hooks? - 个人文章 - SegmentFault 思否
- react - 谈谈 React Hook 的设计模式 - 《前端技术文档》 - 极客文档
- 终极 React 面试学习计划,一站式搞定下一次面试!
以下是针对React Hook实现架构、使用限制及Fiber架构的面试向详解,结合技术原理与面试表达技巧,助你从容应对技术深度考察:
一、React Hooks的实现架构
1. 底层数据结构:链表存储
- 核心机制:Hooks的状态依赖Fiber节点的memorizedState属性,该属性是一个单向链表。
- 工作流程:
- 首次渲染(Mount):依次创建Hook节点并串联成链表,存储状态(如useState的初始值、useEffect的回调函数)。
- 更新渲染(Update):按相同顺序遍历链表,复用或更新状态。
- 示例:
function Component() {
const [count, setCount] = useState(0); // Hook节点1
useEffect(() => { /…/ }, []); // Hook节点2
// 链表结构:{ memorizedState: [state1] -> [effect2] }
}
#### 2. Hooks的分类实现
- 状态类Hook(如useState):
在链表节点中存储state值和dispatch函数,更新时触发Fiber的调度(scheduleUpdateOnFiber)。
- 副作用Hook(如useEffect):
存储回调函数和依赖数组,在commit阶段被添加到副作用队列,异步执行。
- 缓存类Hook(如useMemo):
依赖数组变化时重新计算值,否则返回缓存结果。
---
### 二、为什么Hooks不能在循环、条件或嵌套函数中使用?
#### 1. 根本原因:链表依赖固定顺序
- 渲染流程:React通过Hook的调用顺序匹配链表节点。若顺序变化,会导致状态错乱。
- 错误示例:```jsx
if (condition) {const [data, setData] = useState(null); // 条件中调用Hook
}
const [count, setCount] = useState(0); // 后续Hook顺序可能错位
- 当condition变化时,链表节点数量或顺序改变,count可能错误指向data的节点。
2. 设计约束与解决方案
- 规则强制:ESLint插件eslint-plugin-react-hooks自动检测违规调用。
- 替代方案:
将条件逻辑移入Hook内部,而非外部控制调用:
const data = useMemo(() => condition ? fetchData() : null, [condition]);
---
### 三、Fiber架构如何支撑Hooks?
#### 1. Fiber的核心革新
- 问题背景:React 15的同步递归渲染阻塞主线程,导致卡顿。
- 解决方案:
Fiber将渲染拆分为可中断的异步任务单元,通过优先级调度实现流畅交互。
- 双缓存机制:
|树类型|作用|
|current树|当前屏幕上显示的树|
|workInProgress树|内存中构建的新树,完成后替换current|树类型作用current树当前屏幕上显示的树workInProgress树内存中构建的新树,完成后替换current
#### 2. Hooks与Fiber的协作流程
```mermaid
graph LRA[组件渲染] --> B[Reconcile阶段]B --> B1{遍历Fiber树}B1 --> B2[创建/更新Hooks链表]B2 --> C[生成Effect队列]C --> D[Commit阶段]D --> D1[同步更新DOM]D1 --> D2[执行Effect副作用]
- 关键点:
- Reconcile阶段:构建Hooks链表,可中断(高优先级任务可插入)。
- Commit阶段:同步更新DOM并执行Effect,不可中断。
四、面试表达建议(结构化回答)
1. Hook架构简述
“Hooks的实现依赖Fiber节点的状态链表,每个Hook调用对应链表的一个节点。首次渲染时创建链表,更新时按相同顺序复用节点,这是为什么需要固定调用顺序的根本原因。”
2. F架构核心价值
“Fiber通过任务拆分和双缓存机制,将渲染过程从同步改为异步可调度。例如,高优先级的用户交互可中断低优先级的渲染,避免界面卡顿。Hooks的状态管理正是基于Fiber的memorizedState链表实现的。”
3. 违规使用Hooks的后果
“若在条件中使用Hook,第二次渲染时若条件不成立,链表节点缺失会导致后续Hooks状态错位——比如本应指向useState的节点被useEffect占用,引发数据错误或崩溃。”
五、进阶话题(展示深度)
- Hooks的性能优化:
useMemo/useCallback通过依赖数组避免重复计算,但过度使用可能适得其反。 - Concurrent Mode与Hooks:
useTransition等新Hook利用Fiber调度实现优先级插队(如用户输入优先于列表渲染)。
总结:
- Hooks本质:基于Fiber链表的状态管理,顺序是生命线。
- Fiber基石:异步可中断调度为Hooks提供基础设施。
- 面试技巧:用“链表顺序→Fiber调度→用户体验”串联技术逻辑,彰显系统理解。
掌握这些原理,面试时既能精准回答,又能主动引导技术讨论,展现架构级认知!
React生命周期
无状态VS有状态组件
受控组件VS非受控组件
用户:
前端面试封装一个组件 , 如果这个组件同时需要支持受控和非受控用法 , 你会怎么做
元宝:
- 引用 10 篇资料作为参考
- 浅谈 React组件设计之受控和非受控组件_react组件兼容受控-CSDN博客
- 深入理解受控组件、非受控组件
- 浅谈 React组件设计之受控和非受控组件在开发一个React组件时,可以创建一个灵活的组件,能够在受控和非受控两种模式 - 掘金
- React中的受控组件与非受控组件:理解与实战_react中的非受控组件都有啥-CSDN博客
- React 受控和非受控组件概念梳理+重定义+封装useMergedValue Hook受控组件和非受控组件 一直以来在 - 掘金
- React受控组件和非受控组件 - 全玉 - 博客园
- React 受控非受控 - 个人文章 - SegmentFault 思否
- Vue 中的受控与非受控组件 - 栖息地 - 博客园
- Vue 中的受控与非受控组件-CSDN博客
- 受控组件与非受控组件在现代前端开发中,组件化思想已经成为一种主流趋势。在Vue 框架中,受控组件和非受控组件是两个重要 - 掘金
在封装同时支持受控和非受控模式的组件时,核心在于动态判断控制权归属,并通过合理的状态管理实现两种模式的兼容。以下是具体实现方案和最佳实践:
🔧 一、核心实现原理
1. 控制权判断逻辑
- 受控模式:当父组件传入 value 时,组件状态完全由外部控制。
- 非受控模式:未传入 value 时,组件内部通过 useState 管理状态。
const isControlled = props.value !== undefined; // 关键判断
2. 状态管理策略
- 内部维护状态 internalValue,初始值根据模式设定:
const [internalValue, setInternalValue] = useState(
isControlled ? props.value : props.defaultValue || ‘’
);
- 最终展示值由控制权决定:```javascript
const displayValue = isControlled ? props.value : internalValue;
3. 变更处理逻辑
- 统一处理用户输入事件(如 onChange):
const handleChange = (e) => {
const newValue = e.target.value;
// 非受控模式:更新内部状态
if (!isControlled) setInternalValue(newValue);
// 所有模式:触发父组件回调
props.onChange?.(newValue);
};
#### 4. 默认值同步
- 非受控模式下,若父组件更新 defaultValue,需同步到内部状态:```javascript
useEffect(() => {if (!isControlled) setInternalValue(props.defaultValue);
}, [props.defaultValue]);
📝 二、完整组件代码示例
import React, { useState, useEffect } from 'react';const HybridInput = (props) => {// 1. 判断控制权const isControlled = props.value !== undefined;// 2. 内部状态初始化const [internalValue, setInternalValue] = useState(isControlled ? props.value : props.defaultValue || '');// 3. 同步默认值变更(非受控模式)useEffect(() => {if (!isControlled && props.defaultValue !== undefined) {setInternalValue(props.defaultValue);}}, [props.defaultValue]);// 4. 统一变更处理const handleChange = (e) => {const newValue = e.target.value;if (!isControlled) setInternalValue(newValue);props.onChange?.(newValue);};// 5. 动态取值const displayValue = isControlled ? props.value : internalValue;return (<input value={displayValue}onChange={handleChange}{...props} // 传递其他属性(如placeholder)/>);
};
⚠️ 三、关键注意事项
- Props命名规范
- 受控属性:value + onChange
- 非受控属性:defaultValue(初始化后不再响应外部更新)
- 状态同步边界
- 避免在受控模式下修改 internalValue,防止状态冲突
- 若父组件动态切换模式(如从受控切非受控),需用 key 强制重置组件
- 性能优化
- 非受控组件避免不必要的渲染:使用 useMemo 优化派生状态
- 复杂组件建议分离受控/非受控逻辑到自定义Hook(如useMergedState)
- API设计原则
场景 | 所需Props | 组件行为 |
---|---|---|
完全受控 | value + onChange | 值完全由父组件控制 |
完全非受控 | defaultValue | 内部管理状态 |
混合模式 | 同时提供上述两类Props | 优先受控,缺省时非受控 |
💡 四、面试回答技巧
- 核心思想
“通过 value !== undefined 动态切换控制权,内部状态作为非受控兜底,同时保证 onChange 回调始终触发。” - 设计价值
“这种模式平衡了灵活性与可控性:- 非受控模式简化简单场景代码(如表单提交)
- 受控模式满足复杂状态同步需求(如实时校验、联动表单)”
- 边界案例
“若父组件在受控模式传 undefined,会意外触发非受控逻辑,因此需明确约定 value 类型为非空值。”
注:此方案适用于React/Vue等主流框架(Vue实现需调整状态API)。Ant Design等库的Input/Select组件均采用此模式实现。
GIT命令
手撕
自定义Hooks
import { useRef, useEffect, useCallback } from 'react';function useRedHook(fn, delay) {const timerRef = useRef();const savedFn = useRef(fn);useEffect(() => {savedFn.current = fn;}, [fn]);const start = useCallback(() => {if (timerRef.current) clearInterval(timerRef.current);timerRef.current = setInterval(() => savedFn.current(), delay);}, [delay]);useEffect(() => {return () => clearInterval(timerRef.current);}, []);return { start };
}// 使用示例
function Counter() {const [count, setCount] = useState(0);const { start } = useRedHook(() => setCount(c => c + 1), 1000);return (<div><div>{count}</div><button onClick={start}>Start Counting</button></div>);
}
实现带过期时间的Local Storage
const expirableStorage = {set(key, value, expireIn, unit = 'milliseconds') {const units = {milliseconds: 1,seconds: 1000,minutes: 60 * 1000,hours: 60 * 60 * 1000,days: 24 * 60 * 60 * 1000};const expires = Date.now() + expireIn * units[unit];localStorage.setItem(key, JSON.stringify({ value, expires }));},get(key) {const itemStr = localStorage.getItem(key);if (!itemStr) return null;try {const item = JSON.parse(itemStr);if (Date.now() > item.expires) {localStorage.removeItem(key);return null;}return item.value;} catch (e) {console.error('数据解析失败', e);return null;}},cleanAllExpired() {Object.keys(localStorage).forEach(key => {this.get(key); // 利用get自动清理});}
};// 使用示例
expirableStorage.set('session', { user: 'Bob' }, 30, 'minutes');
setInterval(() => expirableStorage.cleanAllExpired(), 60 * 1000); // 每小时自动清理class ExpirableStorage {set<T>(key: string, value: T, expireMs: number): void {const expires = Date.now() + expireMs;localStorage.setItem(key, JSON.stringify({ value, expires }));}get<T>(key: string): T | null {const itemStr = localStorage.getItem(key);if (!itemStr) return null;const item = JSON.parse(itemStr) as StorageItem<T>;if (Date.now() > item.expires) {localStorage.removeItem(key);return null;}return item.value;}
}
计网
Http无状态——>有状态
改进的地方
用户:
前端面试问项目有什么改进的地方,可以从哪些方面进行阐述,面试官更喜欢
元宝:
- 引用 11 篇资料作为参考
- 前端或移动开发岗位招聘面试题与参考回答2024年.docx-原创力文档
- 面试官:你是如何对前端项目进行优化的?_项目怎么做优化 面试题-CSDN博客
- 前端面试项目中的难点亮点 - CSDN文库
- 【前端面试必杀技】前端面试中如何完美回答项目难点与亮点
- 前端或移动开发岗位招聘面试题与参考回答(某大型集团公司) - 豆丁网
- 从页面卡顿到流畅如丝,前端开发优化前后大揭秘-CSDN博客
- 前端性能优化实战秘籍:10个策略让你的页面飞起来 - CSDN文库
- 前端性能优化:实用技巧与策略-阿里云开发者社区
- 前端面试策略+项目梳理+项目经验阐述_前端面试项目经验-CSDN博客
- web前端面试怎么介绍项目经验 • Worktile社区
- 前端面试总被问“项目难点”?3步教你高情商回答,让面试官眼前一亮!
在前端面试中,当被问及“项目有哪些改进空间”时,面试官不仅关注你的技术敏感度,更希望考察你的全局视角、问题拆解能力和技术前瞻性。以下是五个高价值改进方向及阐述策略,结合技术原理与业务价值,让回答脱颖而出:
🛠 一、性能优化(最易量化,必选方向)
1. 加载性能提升
- 核心策略:
- 资源压缩:图片转 WebP/AVIF 格式 + 压缩(体积降低 60%+)
- 代码分割:路由级懒加载(React.lazy) + 组件级按需加载(减少首包体积 30%+)
- CDN 加速:静态资源分发 + HTTP/2 多路复用(降低 TTFB 40%)
- 效果量化:
“通过 Lighthouse 监控,首屏加载从 4.2s → 1.8s,Lighthouse 性能分从 62 → 92”
2. 运行时性能优化
- 渲染卡顿解决:
- 虚拟滚动(react-window)处理 10W+ 数据列表,帧率保持 60fps
- 动画改用 CSS3 Transform/Opacity(避免重排) + Web Workers 分流计算
- 内存泄漏防控:
- 使用 Chrome DevTools Memory 定位未销毁事件监听器/定时器
🎨 二、用户体验升级(凸显产品思维)
1. 交互体验优化
- 加载态设计:骨架屏(Skeleton Screen) + 智能预加载(预测用户行为)
- 微交互反馈:按钮点击动效、数据提交进度条(降低用户焦虑)
- 错误边界处理:友好 Toast 提示 + 异常降级方案(如 API 失败时展示缓存数据)
2. 无障碍(A11y)增强
- 语义化标签:
- 焦点管理:键盘导航支持 + aria-* 属性标注(符合 WCAG 2.1 标准)
⚙️ 三、工程化进阶(体现架构能力)
1. 自动化提效
- CI/CD 流水线:Git Hook 拦截 ESLint 错误 + Jenkins 自动部署预览环境
- 监控体系:Sentry 捕捉前端错误 + Performance API 统计关键指标(FCP, TTI)
2. 质量保障
- 单元测试覆盖:Jest + React Testing Library 覆盖核心组件(覆盖率 > 80%)
- 类型安全:TypeScript 替换 JavaScript,减少 30% 运行时类型错误
🔄 四、技术深度突破(展示钻研精神)
1. 性能瓶颈攻坚
- 关键案例:
“针对大数据表格渲染卡顿,采用 Intersection Observer API 实现视口渲染,DOM 节点数减少 90%”
- 技术原理:
对比虚拟滚动 vs 分页的渲染机制差异,说明选择依据
2. 新技术落地
- WebAssembly:Rust 重写核心算法(如图像处理),性能提升 5 倍
- PWA 离线化:Service Worker 缓存关键资源,二次访问秒开
🤝 五、协作与维护性(团队价值)
1. 代码可维护性
- 组件抽象:提取高频业务组件(如表单校验器),复用率提升 40%
- 状态管理优化:Zustand 替代 Redux,减少样板代码 50%
2. 知识沉淀
- 技术文档:编写组件使用规范 + 性能优化 Checklist
- 工具链统一:ESLint + Prettier + Husky 强制代码规范
💡 回答技巧:用 STAR 模型包装案例
| **维度** | **话术模板** |
|------------|-----------------------------------------------------------------------------|
| **Situation** | “在电商详情页项目中,首屏图片过多导致 LCP 指标超标(>4s)” |
| **Action** | “引入 `<picture>` 标签适配 WebP,配合 Intersection Observer 实现懒加载” |
| **Result** | “LCP 降至 1.3s,移动端跳出率下降 25%” |
⚠️ 避坑指南
- 忌空泛描述:避免“优化性能”“增强体验”等表述,替换为具体技术点(如“启用 HTTP/2 多路复用”)
- 关联业务价值:每个改进点需指向业务指标(如“转化率提升 15%”)
- 前瞻性建议:补充未来规划(如“计划用 Vite 替换 Webpack 加速 HMR”)
最后点睛:面试官更期待听到你如何发现改进点(如 Lighthouse 审计、用户反馈分析),而不仅是解决方案。突出你的技术判断力与落地执行力,让改进方案成为你技术深度的最佳背书。
发展趋势:无虚拟DOM&打包工具
用户:
前端前沿,详细解释“”前端无虚拟DOM、尤雨溪打包工具的发展趋势“”
元宝:
- 引用 11 篇资料作为参考
- Vue开始抛弃虚拟DOM,前端框架渲染模式正在经历一场革命
- Vue 放大招!尤雨溪官宣「无虚拟 DOM」版本,前端框架要变天了?
- Vue框架去除虚拟DOM:性能提升之路-易源AI资讯 | 万维易源
- 《虚拟 DOM 与Diff 算法:高效渲染的幕后英雄》-CSDN博客
- 虚拟DOM构筑现代前端框架的高效基石-百度开发者中心
- 尤雨溪 VoidZero 公司推出新一代ts文件打包工具 tsdown!
- Rolldown 1.0 Beta发布:尤雨溪引领Rust背景下的高效JS打包工具_应用_Web_性能
- Rolldown 1.0 Beta发布:尤雨溪引领的高效JS打包新选择_工具_Rollup_的开发
- 前端构建工具进化论:从Grunt到Turbopack的十年征程-CSDN博客
- 2025年了,前端构建工具成啥样了?
- 前端开发工具链的演进与应用趋势.docx-原创力文档
以下是关于“前端无虚拟DOM”和“尤雨溪打包工具发展趋势”的深度解析,结合技术原理与行业趋势,分两部分呈现:
一、前端无虚拟DOM:渲染模式的革命性突破
1. 虚拟DOM的局限性
虚拟DOM通过JavaScript对象模拟真实DOM结构,依赖Diff算法比对差异后更新视图。其核心问题在复杂场景下日益凸显:
- 性能瓶颈:Diff算法时间复杂度达O(n³),高频更新时(如数据可视化)CPU负载激增。
- 内存占用:需存储完整虚拟DOM树,移动端低内存设备压力显著。
- 冗余计算:运行时需处理虚拟DOM与真实DOM两层抽象,编译效率低下。
2. 无虚拟DOM的核心原理
新一代框架(如Svelte、Vue Vapor)通过编译时优化彻底规避虚拟DOM:
- 静态分析模板:编译阶段解析模板结构,生成直接操作DOM的代码(如element.textContent = count)。
- 细粒度响应式:数据变更时精准定位绑定节点,跳过全量Diff(如Vue Vapor的响应式代码生成)。
- 原生API调用:直接调用document.createElement等浏览器API,减少抽象层开销。
3. 性能实测对比
|指标|虚拟DOM框架(React)|无虚拟DOM框架(Vue Vapor/Svelte)|
|首次加载体积|较大(含运行时库)|极小(仅编译后代码)|
|万级列表滚动帧率|40-50 FPS|稳定60 FPS|
|内存占用|高(双倍DOM存储)|低(无额外结构)|
|数据来源:Vue Vapor实验测试,移动端渲染速度提升超30%。| | |
指标虚拟DOM框架(React)无虚拟DOM框架(Vue Vapor/Svelte)首次加载体积较大(含运行时库)极小(仅编译后代码)万级列表滚动帧率40-50 FPS稳定60 FPS内存占用高(双倍DOM存储)低(无额外结构)数据来源:Vue Vapor实验测试,移动端渲染速度提升超30%。
4. 实践挑战与应对
- 生态兼容:第三方库(如动画组件)依赖虚拟DOM API → Vue Vapor提供兼容层逐步迁移。
- 动态渲染限制:v-html等运行时模板需保留虚拟DOM路径。
- 调试体验:浏览器DevTools需增强直接DOM更新的追踪能力。
5. 未来趋势
- 混合模式:Vue主版本保留虚拟DOM支持跨平台,Vapor模式供性能敏感场景选用。
- AI辅助优化:结合代码生成模型(如Copilot)预测DOM操作逻辑,提升编译效率。
二、尤雨溪打包工具:Rust驱动的工具链进化
1. 工具演进背景
前端构建工具历经三个阶段:
- 任务自动化(2012-2014):Grunt/Gulp处理文件合并。
- 模块化构建(2015-2019):Webpack/Rollup支持代码分割。
- 原生加速时代(2020-2025):Rust/Go工具链(esbuild、SWC)崛起。
2. Rolldown与tsdown的核心突破
尤雨溪团队通过Rust重构工具链,实现性能数量级提升:
- Rolldown:兼容Rollup API的Rust打包器,性能对标esbuild。
- 增量构建比Webpack快10倍,Tree Shaking效率提升30%。
- 与Vite深度集成,替代Rollup作为生产打包引擎。
- tsdown:专为TypeScript库优化的构建工具。
- 基于Oxc(Rust编写的TypeScript编译器),比SWC快40%。
- 零配置支持DTS声明文件生成,迁移命令兼容tsup生态。
3. 技术设计哲学
- 性能优先:Rust的内存安全性与并发模型,解决JS工具链的CPU瓶颈。
- 渐进式替代:Rolldown兼容Rollup插件,降低迁移成本。
- 垂直整合:Oxc(解析)+ Rolldown(打包)形成高性能工具链闭环。
4. 行业影响与趋势
- 构建工具分层:
graph LR
开发环境 --> Vite[原生ESM按需编译]
生产打包 --> Rolldown[Rust高性能打包]
库开发 --> tsdown[TypeScript专属优化]
- 前端工具链Rust化:esbuild/SWC/Rolldown推动生态转向系统级语言。
- 智能化编译:结合AST分析实现自动代码分割、按需Polyfill注入。
三、技术变革的底层关联
-
共同目标:极致性能
- 无虚拟DOM减少运行时计算,Rust工具链加速编译时,共同解决前端应用性能瓶颈。
-
开发范式迁移:
|传统模式|新一代方案|
|运行时虚拟DOM Diff|编译时静态分析|
|JS工具链打包|Rust工具链原生加速|传统模式新一代方案运行时虚拟DOM Diff编译时静态分析JS工具链打包Rust工具链原生加速
-
开发者行动建议:
- 性能敏感项目:试点Vue Vapor + Rolldown组合,如可视化大屏、实时通信应用。
- 工具链升级:逐步将Babel/Terser替换为Oxc/tsdown,提升CI/CD效率。
“没有最好的方案,只有最合适的方案”——无虚拟DOM并非完全取代虚拟DOM,Rust工具链也非否定JavaScript生态,而是通过场景化优化拓展前端技术的可能性边界。
相关文章:

React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)
React React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么,Fiber架构,面试向面试官介绍,详细解释 用户: React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么,Fiber架构,面试向面试官介绍&#x…...

Web APIS Day01
1.声明变量const优先 那为什么一开始前面就不能用const呢,接下来看几个例子: 下面这张为什么可以用const呢?因为复杂数据的引用地址没变,数组还是数组,只是添加了个元素,本质没变,所以可以用con…...

关于 ffmpeg设置摄像头报错“Could not set video options” 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/148515355 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...

Linux系统:进程间通信-匿名与命名管道
本节重点 匿名管道的概念与原理匿名管道的创建命名管道的概念与原理命名管道的创建两者的差异与联系命名管道实现EchoServer 一、管道 管道(Pipe)是一种进程间通信(IPC, Inter-Process Communication)机制,用于在不…...

使用python进行图像处理—图像变换(6)
图像变换是指改变图像的几何形状或空间位置的操作。常见的几何变换包括平移、旋转、缩放、剪切(shear)以及更复杂的仿射变换和透视变换。这些变换在图像配准、图像校正、创建特效等场景中非常有用。 6.1仿射变换(Affine Transformation) 仿射变换是一种…...

使用homeassistant 插件将tasmota 接入到米家
我写一个一个 将本地tasmoat的的设备同通过ha集成到小爱同学的功能,利用了巴法接入小爱的功能,将本地mqtt转发给巴法以实现小爱控制的功能,前提条件。1需要tasmota 设备, 2.在本地搭建了mqtt服务可, 3.搭建了ha 4.在h…...
VUE3 ref 和 useTemplateRef
使用ref来绑定和获取 页面 <headerNav ref"headerNavRef"></headerNav><div click"showRef" ref"buttonRef">refbutton</div>使用ref方法const后面的命名需要跟页面的ref值一样 const buttonRef ref(buttonRef) cons…...

【笔记】结合 Conda任意创建和配置不同 Python 版本的双轨隔离的 Poetry 虚拟环境
如何结合 Conda 任意创建和配置不同 Python 版本的双轨隔离的Poetry 虚拟环境? 在 Python 开发中,为不同项目配置独立且适配的虚拟环境至关重要。结合 Conda 和 Poetry 工具,能高效创建不同 Python 版本的 Poetry 虚拟环境,接下来…...

多模态学习路线(2)——DL基础系列
目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization(RMSNorm) 二、激活函数 1. Sigmoid激活函数(二分类&…...

[10-1]I2C通信协议 江协科技学习笔记(17个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17...

AWSLambda之设置时区
目标 希望Lambda运行的时区是东八区。 解决 只需要设置lambda的环境变量TZ为东八区时区即可,即Asia/Shanghai。 参考 使用 Lambda 环境变量...

RFID推动新能源汽车零部件生产系统管理应用案例
RFID推动新能源汽车零部件生产系统管理应用案例 一、项目背景 新能源汽车零部件场景 在新能源汽车零部件生产领域,电子冷却水泵等关键部件的装配溯源需求日益增长。传统 RFID 溯源方案采用 “网关 RFID 读写头” 模式,存在单点位单独头溯源、网关布线…...

[C++错误经验]case语句跳过变量初始化
标题:[C错误经验]case语句跳过变量初始化 水墨不写bug 文章目录 一、错误信息复现二、错误分析三、解决方法 一、错误信息复现 write.cc:80:14: error: jump to case label80 | case 2:| ^ write.cc:76:20: note: crosses initialization…...

Unity-ECS详解
今天我们来了解Unity最先进的技术——ECS架构(EntityComponentSystem)。 Unity官方下有源码,我们下载源码后来学习。 ECS 与OOP(Object-Oriented Programming)对应,ECS是一种完全不同的编程范式与数据架构…...

uni-app学习笔记二十七--设置底部菜单TabBar的样式
官方文档地址:uni.setTabBarItem(OBJECT) | uni-app官网 uni.setTabBarItem(OBJECT) 动态设置 tabBar 某一项的内容,通常写在项目的App.vue的onLaunch方法中,用于项目启动时立即执行 重要参数: indexnumber是tabBar 的哪一项&…...

7种分类数据编码技术详解:从原理到实战
在数据分析和机器学习领域,分类数据(Categorical Data)的处理是一个基础但至关重要的环节。分类数据指的是由有限数量的离散值组成的数据类型,如性别(男/女)、颜色(红/绿/蓝)或产品类…...

【字节拥抱开源】字节团队开源视频模型 ContentV: 有限算力下的视频生成模型高效训练
本项目提出了ContentV框架,通过三项关键创新高效加速基于DiT的视频生成模型训练: 极简架构设计,最大化复用预训练图像生成模型进行视频合成系统化的多阶段训练策略,利用流匹配技术提升效率经济高效的人类反馈强化学习框架&#x…...

本地部署drawDB结合内网穿透技术实现数据库远程管控方案
文章目录 前言1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 前言 在数字化浪潮席卷全球的背景下,数据治理能力正日益成为构建现代企业核心竞争力的关键因素。无论是全球500强企业的数据中枢系统,还是初创…...

可视化预警系统:如何实现生产风险的实时监控?
在生产环境中,风险无处不在,而传统的监控方式往往只能事后补救,难以做到提前预警。但如今,可视化预警系统正在改变这一切!它能够实时收集和分析生产数据,通过直观的图表和警报,让管理者第一时间…...

多模态大语言模型arxiv论文略读(112)
Assessing Modality Bias in Video Question Answering Benchmarks with Multimodal Large Language Models ➡️ 论文标题:Assessing Modality Bias in Video Question Answering Benchmarks with Multimodal Large Language Models ➡️ 论文作者:Jea…...

【向量库】Weaviate概述与架构解析
文章目录 一、什么是weaviate二、High-Level Architecture1. Core Components2. Storage Layer3. 组件交互流程 三、核心组件1. API Layer2. Schema Management3. Vector Indexing3.1. 查询原理3.2. 左侧:Search Process(搜索流程)3.3. 右侧&…...
PostgreSQL 对 IPv6 的支持情况
PostgreSQL 对 IPv6 的支持情况 PostgreSQL 全面支持 IPv6 网络协议,包括连接、存储和操作 IPv6 地址。以下是详细说明: 一、网络连接支持 1. 监听 IPv6 连接 在 postgresql.conf 中配置: listen_addresses 0.0.0.0,:: # 监听所有IPv4…...
python数据结构和算法(1)
数据结构和算法简介 数据结构:存储和组织数据的方式,决定了数据的存储方式和访问方式。 算法:解决问题的思维、步骤和方法。 程序 数据结构 算法 算法 算法的独立性 算法是独立存在的一种解决问题的方法和思想,对于算法而言&a…...
视觉slam--框架
视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图? 建图并没有一个固定的形式和算法…...

统计按位或能得到最大值的子集数目
我们先来看题目描述: 给你一个整数数组 nums ,请你找出 nums 子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 。 如果数组 a 可以由数组 b 删除一些元素(或不删除)得到,…...
npm install 相关命令
npm install 相关命令 基本安装命令 # 安装 package.json 中列出的所有依赖 npm install npm i # 简写形式# 安装特定包 npm install <package-name># 安装特定版本 npm install <package-name><version>依赖类型选项 # 安装为生产依赖(默认&…...
Spring Boot 与 Kafka 的深度集成实践(二)
3. 生产者实现 3.1 生产者配置 在 Spring Boot 项目中,配置 Kafka 生产者主要是配置生产者工厂(ProducerFactory)和 KafkaTemplate 。生产者工厂负责创建 Kafka 生产者实例,而 KafkaTemplate 则是用于发送消息的核心组件&#x…...
【学习记录】使用 Kali Linux 与 Hashcat 进行 WiFi 安全分析:合法的安全测试指南
文章目录 📌 前言🧰 一、前期准备✅ 安装 Kali Linux✅ 获取支持监听模式的无线网卡 🛠 二、使用 Kali Linux 进行 WiFi 安全测试步骤 1:插入无线网卡并确认识别步骤 2:开启监听模式步骤 3:扫描附近的 WiFi…...
后端下载限速(redis记录实时并发,bucket4j动态限速)
✅ 使用 Redis 记录 所有用户的实时并发下载数✅ 使用 Bucket4j 实现 全局下载速率限制(动态)✅ 支持 动态调整限速策略✅ 下载接口安全、稳定、可监控 🧩 整体架构概览 模块功能Redis存储全局并发数和带宽令牌桶状态Bucket4j Redis分布式限…...

vue3 手动封装城市三级联动
要做的功能 示意图是这样的,因为后端给的数据结构 不足以使用ant-design组件 的联动查询组件 所以只能自己分装 组件 当然 这个数据后端给的不一样的情况下 可能组件内对应的 逻辑方式就不一样 毕竟是 三个 数组 省份 城市 区域 我直接粘贴组件代码了 <temp…...