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

React状态管理常见面试题目(一)

1. Redux 如何实现多个组件之间的通信?多个组件使用相同状态时如何进行管理?

Redux 实现组件通信

Redux 是一个集中式的状态管理工具,通过共享一个全局 store 来实现多个组件之间的通信。

  • 通信机制
    1. 所有状态保存在 Redux 的全局 store 中。
    2. 使用 mapStateToPropsuseSelector 获取状态。
    3. 通过 dispatch 分发动作更新状态。
    4. 状态变化后,所有订阅该状态的组件自动重新渲染。
示例
import React from 'react';
import { createStore } from 'redux';
import { Provider, useSelector, useDispatch } from 'react-redux';const initialState = { count: 0 };// Reducer
const counterReducer = (state = initialState, action) => {switch (action.type) {case 'INCREMENT':return { count: state.count + 1 };case 'DECREMENT':return { count: state.count - 1 };default:return state;}
};// Store
const store = createStore(counterReducer);// Component A (Increment)
function Increment() {const dispatch = useDispatch();return <button onClick={() => dispatch({ type: 'INCREMENT' })}>Increment</button>;
}// Component B (Display)
function Display() {const count = useSelector((state) => state.count);return <div>Count: {count}</div>;
}// App
function App() {return (<Provider store={store}><Increment /><Display /></Provider>);
}
  • 多个组件共享状态
    • 所有组件从 store 中读取状态。
    • 当状态更新时,订阅了该状态的组件会自动重新渲染。

2. Redux 中间件的实现原理是什么?

中间件原理

Redux 中间件通过对 dispatch 方法进行拦截和增强,允许在动作分发(dispatch)和到达 Reducer 之间执行自定义逻辑。

  • Middleware 核心代码
    const loggerMiddleware = (store) => (next) => (action) => {console.log('Action:', action);let result = next(action); // 执行下一个中间件或 Reducerconsole.log('New State:', store.getState());return result;
    };
    
使用中间件的流程
  1. 创建中间件(如日志、异步操作)。
  2. 使用 applyMiddleware 将中间件添加到 store
  3. 中间件在每次 dispatch 时被调用。
示例
import { createStore, applyMiddleware } from 'redux';const logger = (store) => (next) => (action) => {console.log('Dispatching:', action);let result = next(action);console.log('State after dispatch:', store.getState());return result;
};const store = createStore(counterReducer, applyMiddleware(logger));

3. 什么是 React 的状态提升?使用场景有哪些?

状态提升

状态提升是指将多个子组件需要共享的状态提升到它们的共同父组件中,父组件负责管理状态并通过 props 将状态和更新函数传递给子组件。

使用场景
  • 多个组件需要共享同一个状态。
  • 一个组件的状态变化会影响另一个组件。
  • 示例:表单输入同步、计数器共享。
示例代码
function Parent() {const [count, setCount] = React.useState(0);return (<div><ChildA count={count} /><ChildB increment={() => setCount(count + 1)} /></div>);
}function ChildA({ count }) {return <div>Count: {count}</div>;
}function ChildB({ increment }) {return <button onClick={increment}>Increment</button>;
}

4. Redux 中如何设置初始状态?

设置初始状态的两种方式
  1. 在 Reducer 中定义

    const initialState = { count: 0 };const reducer = (state = initialState, action) => {switch (action.type) {case 'INCREMENT':return { count: state.count + 1 };default:return state;}
    };
    
  2. 创建 Store 时传入

    const preloadedState = { count: 5 };
    const store = createStore(reducer, preloadedState);
    

5. React 组件间共享数据的方法有哪些?

  1. 通过 props 传递

    • 适用于父子组件之间的数据共享。
  2. 通过 Context API

    • 用于避免多层级的 props 传递。
    const MyContext = React.createContext();
    <MyContext.Provider value={sharedValue}><Child />
    </MyContext.Provider>;
    
  3. 通过 Redux

    • 适合全局状态管理。
  4. 自定义 Hook

    • 用于共享逻辑和状态。
    function useSharedState() {const [state, setState] = React.useState(initialValue);return [state, setState];
    }
    

6. 请描述点击按钮触发到状态更改的数据流向

  1. 用户点击按钮。
  2. 触发事件处理函数,调用 dispatch
  3. dispatchaction 传递给 Reducer。
  4. Reducer 根据 action 更新状态。
  5. Redux store 通知订阅的组件,重新渲染。

7. 什么是 Flux?它的设计思想是什么?有哪些应用场景?

Flux

Flux 是 Facebook 提出的单向数据流架构,解决复杂组件间的状态管理问题。

核心设计思想
  1. 单向数据流
    • 数据流动方向为:Action -> Dispatcher -> Store -> View
  2. 集中式状态管理
    • 状态集中存储在 Store 中。
  3. 事件驱动
    • Action 是状态变化的唯一来源。
应用场景
  • 单页面应用(SPA)。
  • 需要共享状态的复杂组件结构。
  • 比如,购物车、社交网络应用等。

8. React 状态管理器的核心精髓是什么?

  • 状态集中管理

    • 使用全局 store 保存共享状态,组件从 store 获取状态。
  • 不可变性

    • 状态是不可变的,任何更新都返回一个新状态。
  • 单向数据流

    • 数据从 store 流向组件,组件通过 action 修改状态。

9. redux-saga 的实现原理是怎样的?

实现原理

redux-saga 是一个基于 Generator 函数的 Redux 中间件,用于处理复杂的异步逻辑。它通过 take, call, 和 put 等 Effect 来控制异步操作。

核心流程
  1. Saga 监听特定的 actiontake)。
  2. 使用 call 执行异步任务。
  3. 使用 put 触发新的 action
示例
import { call, put, takeEvery } from 'redux-saga/effects';
import axios from 'axios';function* fetchData(action) {try {const data = yield call(axios.get, '/api/data');yield put({ type: 'FETCH_SUCCESS', payload: data });} catch (e) {yield put({ type: 'FETCH_ERROR', message: e.message });}
}function* mySaga() {yield takeEvery('FETCH_REQUEST', fetchData);
}

10. React 状态管理 MobX 的设计思想是什么?

MobX 的设计思想
  1. 响应式编程

    • 状态变化时,视图自动更新,无需手动监听。
  2. 基于观察者模式

    • 数据(observable)被观察,组件(observer)监听其变化。
  3. 面向对象

    • 状态可以封装在类中,符合传统的 OOP 编程习惯。

11. Redux 中如何处理异步请求?

Redux 不能直接处理异步请求,需要通过中间件(如 redux-thunkredux-saga)。

使用 redux-thunk

redux-thunk 允许在 dispatch 函数中返回异步函数:

const fetchData = () => async (dispatch) => {dispatch({ type: 'FETCH_REQUEST' });try {const response = await fetch('/api/data');const data = await response.json();dispatch({ type: 'FETCH_SUCCESS', payload: data });} catch (error) {dispatch({ type: 'FETCH_ERROR', payload: error });}
};

以上是详细的回答和示例代码,希望对你理解这些概念有所帮助!

1. 当 React 的多个组件有自己的 state,同时需要维护一些公共状态时,该如何设计和管理这些状态?

当多个组件有自己的局部状态,同时需要共享公共状态,可以采用以下方法进行设计和管理:

1.1 Context API
  • 使用 React 的 Context API 维护公共状态,避免繁琐的 props 传递。
  • 局部状态仍然使用 useStateuseReducer

示例

const CounterContext = React.createContext();function Parent() {const [count, setCount] = React.useState(0);return (<CounterContext.Provider value={{ count, setCount }}><ChildA /><ChildB /></CounterContext.Provider>);
}function ChildA() {const { count } = React.useContext(CounterContext);return <div>Count: {count}</div>;
}function ChildB() {const { setCount } = React.useContext(CounterContext);return <button onClick={() => setCount((prev) => prev + 1)}>Increment</button>;
}
1.2 使用 Redux
  • 适合管理复杂的共享状态。
  • 将公共状态存储在 Redux store 中,局部状态仍然独立管理。

示例

const initialState = { count: 0 };
const reducer = (state = initialState, action) => {switch (action.type) {case 'INCREMENT':return { count: state.count + 1 };default:return state;}
};const store = createStore(reducer);
1.3 结合 Context 和局部状态
  • Context 提供共享状态,局部状态通过组件内的 useState 单独管理,避免全局状态过于复杂。

2. Redux 和 Flux 的区别是什么?

特性FluxRedux
数据流多个 Store,可多向通信单一 Store,单向数据流
状态管理状态分散在多个 Store 中状态集中管理在全局 Store 中
更新机制Dispatcher 广播 ActionReducer 根据 Action 返回新状态
设计复杂度需要自己实现 Dispatcher 和 StoreRedux 提供完整解决方案
易用性灵活但需手动管理API 简单,约束明确

3. MobX 和 Redux 状态管理有什么区别?

特性MobXRedux
核心理念响应式编程,基于观察者模式强制单向数据流
状态管理状态分布式管理状态集中式管理
学习曲线简单易学,语法自然需要理解 Redux 的核心概念
性能小范围状态更新整体状态更新(需要优化)
异步处理内置支持,直接写普通异步代码需通过中间件(如 Thunk/Saga)实现
复杂性灵活但容易失控明确但可能显得冗长

4. Redux 有哪些优缺点?

优点
  1. 单向数据流:状态管理清晰,易于调试。
  2. 集中式管理:全局 Store 提供了统一的数据源,易于跟踪状态。
  3. 社区支持:丰富的生态系统和中间件支持。
  4. 可预测性:状态更新逻辑纯粹且可预测。
缺点
  1. 样板代码多:需要编写 Action、Reducer 等,复杂场景下代码较多。
  2. 学习成本高:需掌握 Redux 的核心概念和中间件。
  3. 性能问题:不优化时可能导致性能瓶颈。

5. Redux 的中间件是什么?有哪些常用的 Redux 中间件?

中间件定义

Redux 中间件是对 dispatch 方法的增强,用于在 action 到达 Reducer 前执行额外的逻辑。

常用中间件
  1. redux-thunk

    • 支持异步 action,允许 action 返回函数而不是对象。
    const fetchData = () => async (dispatch) => {const data = await fetch('/api').then((res) => res.json());dispatch({ type: 'DATA_LOADED', payload: data });
    };
    
  2. redux-saga

    • 使用 Generator 函数管理异步操作。
    function* fetchDataSaga() {const data = yield call(fetch, '/api');yield put({ type: 'DATA_LOADED', payload: data });
    }
    
  3. redux-logger

    • 打印 action 和状态变化的日志,便于调试。

6. Redux 的 store 是什么?

  • Redux Store 是整个应用的状态容器,用于存储和管理全局状态。
  • 它通过以下方法与应用交互:
    1. getState:获取当前状态。
    2. dispatch:分发 action
    3. subscribe:订阅状态变化。

创建 Store

import { createStore } from 'redux';
const store = createStore(reducer);

7. Redux 中如何重置状态?

方法 1:定义一个 RESET Action
const initialState = { count: 0 };const reducer = (state = initialState, action) => {switch (action.type) {case 'RESET':return initialState;default:return state;}
};// Dispatch 重置
store.dispatch({ type: 'RESET' });
方法 2:创建新 Reducer
const rootReducer = (state, action) => {if (action.type === 'RESET') {return undefined; // 清空状态}return appReducer(state, action);
};

8. Redux 状态管理器与将变量挂载到 window 对象中有什么区别?

特性Redux 状态管理器挂载到 window 对象
作用域控制状态在组件内访问,作用域明确全局变量容易污染命名空间
调试能力支持调试工具查看状态变化无法直接追踪变量变化
状态更新通过 Reducer 保持状态不可变全局变量可随意修改,易出错
组件通信统一数据流,方便跨组件共享需要手动管理数据流
扩展性支持中间件、插件扩展缺乏扩展能力

9. 什么是 React 的 contextType?它的作用是什么?

contextType
  • contextType 是 React 提供的一个类组件属性,用于订阅 Context 对象。
  • 在类组件中,可以直接通过 this.context 访问 Context 的值。
作用
  1. 提供跨组件共享数据的能力。
  2. 替代多层级的 props 传递。
示例
const MyContext = React.createContext('default value');class MyComponent extends React.Component {static contextType = MyContext; // 订阅 Contextrender() {return <div>Value: {this.context}</div>;}
}// 使用
<MyContext.Provider value="provided value"><MyComponent />
</MyContext.Provider>

输出Value: provided value

限制
  • 仅适用于类组件;函数组件可以使用 useContext 替代。

通过这些详细回答,希望能更清晰地理解 React 和 Redux 状态管理相关概念及其应用。

1. 在 Redux 中如何发起网络请求?

Redux 本身不支持直接发起网络请求,但可以通过中间件(如 redux-thunkredux-saga)来实现。

使用 redux-thunk
// Action creator
const fetchData = () => async (dispatch) => {dispatch({ type: 'FETCH_DATA_START' });try {const response = await fetch('/api/data');const data = await response.json();dispatch({ type: 'FETCH_DATA_SUCCESS', payload: data });} catch (error) {dispatch({ type: 'FETCH_DATA_FAILURE', error });}
};
使用 redux-saga
import { call, put, takeEvery } from 'redux-saga/effects';function* fetchDataSaga() {try {const response = yield call(fetch, '/api/data');const data = yield response.json();yield put({ type: 'FETCH_DATA_SUCCESS', payload: data });} catch (error) {yield put({ type: 'FETCH_DATA_FAILURE', error });}
}// Watcher Saga
function* watchFetchData() {yield takeEvery('FETCH_DATA_START', fetchDataSaga);
}

2. Redux 中间件如何获取 store 和 action?它们是如何处理的?

中间件获取 Store 和 Action

Redux 中间件通过函数链的形式接入 Redux 流程。中间件接收以下三个参数:

  1. store:通过 store.getState() 获取当前状态。
  2. next:调用以继续分发到下一个中间件或 Reducer。
  3. action:当前分发的动作。
中间件实现机制

中间件通过增强 dispatch 方法实现其功能:

const loggerMiddleware = (store) => (next) => (action) => {console.log('Dispatching:', action);const result = next(action); // 调用下一个中间件或 reducerconsole.log('Next State:', store.getState());return result;
};

3. 什么是 React 的 childContextTypes?它的作用是什么?

定义
  • childContextTypes 是 React 中的一个旧 API,用于声明子组件可以访问的上下文数据类型(在 Context API 之前)。
  • 它通过 getChildContext() 方法提供上下文。
作用

允许父组件向深层嵌套的子组件传递数据,而不需要通过 props 层层传递。

示例
import PropTypes from 'prop-types';class Parent extends React.Component {getChildContext() {return { theme: 'dark' };}render() {return <Child />;}
}Parent.childContextTypes = {theme: PropTypes.string,
};class Child extends React.Component {render() {return <div>{this.context.theme}</div>;}
}Child.contextTypes = {theme: PropTypes.string,
};

4. 在 React 中,如何使用 Context API?

使用 Context API 的步骤
  1. 创建 Context

    const MyContext = React.createContext(defaultValue);
    
  2. 提供 Context

    <MyContext.Provider value={value}>{children}
    </MyContext.Provider>
    
  3. 消费 Context

    • 类组件:使用 static contextType
    • 函数组件:使用 useContext 钩子。
示例
const ThemeContext = React.createContext('light');function App() {return (<ThemeContext.Provider value="dark"><Toolbar /></ThemeContext.Provider>);
}function Toolbar() {const theme = React.useContext(ThemeContext); // 消费 Contextreturn <div>Theme: {theme}</div>;
}

5. 请解释 Redux 的核心概念、设计思想、工作流程和工作原理

核心概念
  1. Store:存储应用状态。
  2. Action:描述状态变化的事件对象。
  3. Reducer:定义如何根据 action 更新状态。
  4. Middleware:扩展 dispatch 功能的插件。
  5. 单向数据流:状态流转的方向是固定的,易于维护。
设计思想
  • 状态管理的核心是单向数据流不可变状态
  • 状态只通过 dispatch(action) 和 Reducer 更新。
工作流程
  1. 用户触发 action
  2. dispatch 传递 action 到中间件。
  3. 中间件处理后,传递给 Reducer。
  4. Reducer 返回新状态并更新 Store。
工作原理

Redux 的内部通过以下机制保持状态流转:

  • 中间件拦截 dispatch,执行异步逻辑或扩展功能。
  • 状态更新由 Reducer 的纯函数返回新对象,保证不可变性。

6. Redux 是否建议在 Reducer 中触发 Action?为什么?

结论

Redux 不建议在 Reducer 中触发 action

原因
  1. Reducer 必须是纯函数
    • Reducer 不应有副作用(如触发异步操作或调度 action)。
  2. 破坏单向数据流
    • 在 Reducer 中触发 action 会导致状态更新流程复杂化。

7. Redux 的数据存储和本地存储有什么区别?

特性Redux 数据存储本地存储(LocalStorage)
作用范围当前运行的应用跨页面持久化
数据更新状态不可变,通过 action 更新可随意直接修改
生命周期随应用生命周期存在持久化,需手动清理
同步性即时更新组件手动检测变化

8. 什么是 redux-saga 中间件?它有什么作用?

定义

redux-saga 是 Redux 的异步中间件,用于管理复杂的异步流程。

作用
  1. 处理副作用:如 API 请求、定时器等。
  2. 流控制:优雅地处理并发任务、队列任务。
  3. 易测试:基于 Generator 函数,易于测试异步逻辑。
示例
function* fetchDataSaga() {const data = yield call(fetch, '/api/data');yield put({ type: 'DATA_SUCCESS', payload: data });
}

9. Redux 如何添加新的中间件?

步骤
  1. 引入中间件

    import { applyMiddleware, createStore } from 'redux';
    import thunk from 'redux-thunk';
    const store = createStore(reducer, applyMiddleware(thunk));
    
  2. 组合多个中间件

    const middlewares = [thunk, logger];
    const store = createStore(reducer, applyMiddleware(...middlewares));
    

10. Redux 请求中间件如何处理并发请求?

通过唯一标识管理并发请求

在 Action 中添加唯一标识,标记请求的起始和结束。

const fetchData = (id) => async (dispatch) => {dispatch({ type: 'REQUEST_START', id });const data = await fetch(`/api/data/${id}`).then((res) => res.json());dispatch({ type: 'REQUEST_SUCCESS', id, data });
};
通过 redux-saga 实现取消任务

使用 takeLatest 确保只保留最近的一次请求。

import { takeLatest, call, put } from 'redux-saga/effects';function* fetchData(action) {const data = yield call(fetch, `/api/data/${action.id}`);yield put({ type: 'DATA_SUCCESS', payload: data });
}function* watchFetchData() {yield takeLatest('FETCH_REQUEST', fetchData);
}

通过以上回答,全面覆盖了 Redux 中如何处理网络请求、状态管理和中间件扩展。

相关文章:

React状态管理常见面试题目(一)

1. Redux 如何实现多个组件之间的通信?多个组件使用相同状态时如何进行管理? Redux 实现组件通信 Redux 是一个集中式的状态管理工具&#xff0c;通过共享一个全局 store 来实现多个组件之间的通信。 通信机制&#xff1a; 所有状态保存在 Redux 的全局 store 中。使用 ma…...

.NET周刊【12月第2期 2024-12-08】

国内文章 终于解决了.net在线客服系统总是被360误报的问题&#xff08;对软件进行数字签名&#xff09; https://www.cnblogs.com/sheng_chao/p/18581139 升讯威在线客服与营销系统由.net core和WPF开发&#xff0c;旨在开放、开源、共享。开发者为解决360与其他国产管家的误…...

YOLOv8目标检测(七)_AB压力测试

YOLOv8目标检测(一)_检测流程梳理&#xff1a;YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集&#xff1a;YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型&#xff1a;YOLOv8目标检测(三)_训…...

多个图片转换为PDF文件

将多个图片转换为PDF文件在Python中可以通过多个库来实现&#xff0c;其中最常用的库之一是Pillow&#xff08;用于图像处理&#xff09;和reportlab&#xff08;用于生成PDF&#xff09;。不过&#xff0c;对于直接图片转PDF的操作&#xff0c;更推荐使用Pillow配合PyMuPDF&am…...

【递归,搜索与回溯算法 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(一)

找出所有子集的异或总和再求和 题目解析 算法原理 解法 决策树 这种决策使得每一次递归都是有效的递归&#xff0c;每一个节点都是最终的结果&#xff0c;所以这棵决策树是不用剪枝的&#xff0c;也没有递归出口的&#xff1b; 注意 决策树执行添加元素…...

对 MYSQL 架构的了解

MySQL 是一种广泛使用的关系型数据库管理系统&#xff0c;其架构主要包括以下几个关键部分&#xff1a; 一、连接层 客户端连接管理&#xff1a;MySQL 服务器可以同时处理多个客户端的连接请求。当客户端应用程序&#xff08;如使用 Java、Python 等语言编写的程序&#xff09;…...

深入解析 StarRocks 物化视图:全方位的查询改写机制

小编导读&#xff1a; 本文将重点介绍如何利用物化视图进行查询改写。文章将全面介绍物化视图的基本原理、关键特性、应用案例、使用场景、代码细节以及主流大数据产品的物化视图改写能力对比。 物化视图在 StarRocks 中扮演着至关重要的角色&#xff0c;它是进行数据建模和加速…...

k8s常见问题及debug

ERROR1 ErrImagePull pod pending 外网无法方位集群服务 kubectl 命令失败 Pod Error 进入容器失败 pod重启 Running not ready CrashLoopBackOff PV/PVC helm install...

Winnows基础(2)

Target 了解常见端口及服务&#xff0c;熟练cmd命令&#xff0c;编写简单的 .bat 病毒程序。 Trail 常见服务及端口 80 web 80-89 可能是web 443 ssl心脏滴血漏洞以及一些web漏洞测试 445 smb 1433 mssql 1521 oracle 2082/2083 cpanel主机管理系统登陆&#xff08;国外用的…...

(14)D-FINE网络,爆锤yolo系列

yolo过时了&#xff1f;传统的yolo算法在小目标检测方面总是不行&#xff0c;最新算法DEIM爆锤yolo&#xff0c;已经替yolo解决。 一、创新点 ​ 这个算法名为DEIM&#xff0c;全称是DETR with Improved Matching for Fast Convergence&#xff0c;其主要创新点在于提出了一…...

关于数据流图绘制和使用上的一些个人经验

假设我们需要开发一个项目进度管理系统&#xff0c;在这个项目进度管理系统之中&#xff0c;我们需要开发一个功能&#xff1a;项目成员的列表。我们具有这样的业务需求&#xff1a; 在项目进度管理系统中&#xff0c;我们需要知道参与项目的人员到底有哪些&#xff0c;并且项目…...

Leetcode Hot 100 【二叉树】104. 二叉树的最大深度

104. 二叉树的最大深度 已解答 简单 相关标签 相关企业 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3…...

雅思真题短语梳理(八)

126员工流动率高 high staff turnover 127(多)负担一些工作任务 cover some duties / an increased workload 128不满 feel upset and resentful 129偏向性待遇 preferential treatment 130介入帮忙 step in and help 131切实的好处 tangible benefits 132挽留 staff retention…...

Codeforces Round 993 (Div. 4)个人训练记录

Codeforces Round 993 (Div. 4) 只选择对我有价值的题目记录 E. Insane Problem 题目描述 给定五个整数 k k k&#xff0c; l 1 l_1 l1​&#xff0c; r 1 r_1 r1​&#xff0c; l 2 l_2 l2​ 和 r 2 r_2 r2​&#xff0c;Wave 希望你帮助她计算满足以下所有条件的有序对 …...

java-io流

根据流的方向&#xff1a; 输入流&#xff08;InputStream/Reader&#xff09;&#xff1a;从数据源读取数据到程序中。输出流&#xff08;OutputStream/Writer&#xff09;&#xff1a;将数据从程序写入到目的地。 根据流处理信息的大小&#xff1a; 字节流&#xff08;Byte S…...

数据可视化

数据可视化 数据可视化 数据可视化主要目的&#xff1a;借助于图形化手段&#xff0c;清晰有效地传达与沟通信息。数据可视化可以把冰冷的数字转换成图形&#xff0c;揭示蕴含在数据中的规律和道理。 常用的数据可视化库&#xff1a; D3.js 目前 Web 端评价最高的 Javascri…...

CompletableFuture使用详解

一、 CompletableFuture介绍 平时多线程开发一般就是使用Runnable&#xff0c;Callable&#xff0c;Thread&#xff0c;FutureTask&#xff0c;ThreadPoolExecutor这些内容和并发编程息息相关。相对来对来说成本都不高&#xff0c;多多使用是可以熟悉这些内容。这些内容组合在…...

【长期有效】短链接生成-短链接-短网址-短链接生成接口-短链接转换接口-短网址URL生成-短链接-短网址-短域名-短链接

短链接API接口的作用主要体现在以下几个方面&#xff1a; 一、链接缩短与分享优化 短链接API接口的主要功能是将长链接转换为短链接。这种转换使得链接更加简洁、易读和易分享&#xff0c;尤其在社交媒体、电子邮件、短信等字符受限或按字符计费的场合中&#xff0c;短链接能…...

使用Idea自带的git功能进行分支合并

文章目录 1.背景描述2.分支切换3.分支合并的具体操作4.将在local环境下&#xff0c;从dev合并到qas分支上的代码&#xff0c;推送到远端 1.背景描述 目前在开发的当前项目有四个分支&#xff0c;master(主分支)、pre(预生产分支)、qas(测试分支)、dev(开发分支)&#xff1b; …...

工业摄像机基于电荷耦合器件的相机

工业摄像机系列产品及其识别技术的详细介绍&#xff1a; 一、工业摄像机概述 工业摄像机是利用光学成像技术获取视觉信息&#xff0c;并通过图像处理算法分析这些信息的设备。它通常具有高图像稳定性、高传输能力和高抗干扰能力等特性&#xff0c;适用于各种复杂的工业环境。 …...

【期末大作业】使用Python熟练掌握面向对象

引言 在编程学习过程中&#xff0c;构建项目是一个非常有效的方式&#xff0c;不仅能巩固和应用所学的知识&#xff0c;还能通过实践来解决实际问题。本文将通过几个经典的项目示例来展示如何用面向对象的方式设计和实现一个完整的系统&#xff0c;包括学生成绩管理系统、图书…...

JAVA:代理模式(Proxy Pattern)的技术指南

1、简述 代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理,以控制对这个对象的访问。通过代理模式,我们可以在不修改目标对象代码的情况下扩展功能,满足特定的需求。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什…...

【MAC】深入浅出 Homebrew 下 Nginx 的安装与配置指南

硬件&#xff1a;Apple M4 Pro 16寸 系统&#xff1a; macos Sonoma 15.1.1 Nginx 是一款高性能的 Web 服务器和反向代理服务器&#xff0c;广泛应用于全球各地的网站和企业应用中。本文将详细介绍如何在 macOS 环境下使用 Homebrew 安装、启动、管理以及优化配置 Nginx&#x…...

【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】

【华为OD-E卷-寻找关键钥匙 100分&#xff08;python、java、c、js、c&#xff09;】 题目 小强正在参加《密室逃生》游戏&#xff0c;当前关卡要求找到符合给定 密码K&#xff08;升序的不重复小写字母组成&#xff09; 的箱子&#xff0c;并给出箱子编号&#xff0c;箱子编…...

SQL MID()

SQL中的MID()函数是一个用于从指定位置开始截取字符串中指定长度的子串的函数。这个函数在数据库查询和数据处理中经常被使用&#xff0c;特别是在需要从较长的文本字段中提取特定信息时。 MID()函数的基本语法是&#xff1a;SELECT MID(column_name, start, length) FROM tab…...

Sui 基金会任命 Christian Thompson 为新任负责人

Sui 基金会是专注于推动 Sui 蓬勃发展的生态增长与采用的机构。近日&#xff0c;基金会宣布任命 Christian Thompson 为新任负责人。在 Sui 主网发布的开创性一年里&#xff0c;Sui 凭借其无与伦比的速度、可扩展性和效率&#xff0c;迅速崛起为领先的 Layer 1 区块链之一&…...

ViEW生命周期

Vue的生命周期是指Vue实例从创建到销毁的整个过程&#xff0c;包括多个阶段和对应的钩子函数。以下是Vue生命周期的详细说明&#xff1a; 1. **创建阶段**&#xff1a; - beforeCreate&#xff1a;在实例初始化之前调用&#xff0c;此时数据观测和事件配置尚未完成&#xff0c;…...

[蓝桥杯 2019 国 B] 排列数

目录 前言 题解 思路 疑问 解答 前言 对于本篇文章是站在别人的基础之上来写的&#xff0c;对于这道题作为2019年国赛B组的最难的一题&#xff0c;他的难度肯定是不小的&#xff0c;这道题我再一开始接触的时候连思路都没有&#xff0c;也是看了两三遍别人发的题解&#x…...

python 中执行from elasticsearch import Elasticsearch,AsyncElasticsearch 报错

在 Python 中执行 from elasticsearch import Elasticsearch, AsyncElasticsearch 时,如果提示 AsyncElasticsearch 不存在,可能是因为以下几个原因: 1. 安装的 elasticsearch 库版本不匹配 AsyncElasticsearch 是在 elasticsearch 库的较新版本中引入的。如果你安装的版本…...

git 删除鉴权缓存及账号信息

在Windows系统下 清除凭证管理器中的Git凭据 按下Win R键&#xff0c;打开“运行”对话框&#xff0c;输入control&#xff0c;然后回车&#xff0c;打开控制面板。在控制面板中找到“用户账户”&#xff0c;然后点击“凭据管理器”。在凭据管理器中&#xff0c;找到“Windows…...

浏览器要求用户确认 Cookies Privacy(隐私相关内容)是基于隐私法规的要求,VUE 实现,html 代码

Cookie Notices and Cookie Consent | Cookiepedia 1. 法律法规要求 许多国家和地区的隐私法律要求网站在存储或处理用户数据&#xff08;包括 Cookies&#xff09;之前必须获得用户的明确同意&#xff1a; GDPR&#xff08;欧盟通用数据保护条例&#xff09; 要求&#xff…...

数据结构:栈和队列的实现

栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO &#xff08; Last In First Out &#xff09;的原则。 压栈&#xff1a;栈…...

2024.12.21辩论赛感受

背景 今天辩论赛的双方论点是&#xff1a; 正方&#xff1a;寒假留在研发中心的收获大 反方&#xff1a;寒假去做其他事情的收获 辩论赛&#xff0c;为了锻炼自己&#xff0c;选择了不想选择以及相对不好辩论的反方。出现的状况有一下几点&#xff1a; 1.发现自己脑子完全跟不…...

JAVA:组合模式(Composite Pattern)的技术指南

1、简述 组合模式(Composite Pattern)是一种结构型设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它使客户端对单个对象和组合对象的使用具有一致性。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什么是组合模式 组合模式…...

圣诞快乐(h5 css js(圣诞树))

一&#xff0c;整体设计思路 圣诞树h5&#xff08;简易&#xff09; 1.页面布局与样式&#xff1a; 页面使用了全屏的黑色背景&#xff0c;中央显示圣诞树&#xff0c;树形由三层绿色的三角形组成&#xff0c;每一层的大小逐渐变小。树干是一个棕色的矩形&#xff0c;位于三角…...

移植 OLLVM 到 LLVM18,修复控制流平坦化报错

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 前言 把 OLLVM 移植到 LLVM18 后&#xff0c;发现 -fla&#xff08;控制流平坦化&#xff09;并不能正常使用。 关于移植过程可以参考这篇文章 【移植 OLLVM…...

MFC/C++学习系列之简单记录——序列化机制

MFC/C学习系列之简单记录——序列化机制 前言简述六大机制序列化机制使用反序列化总结 前言 MFC有六大机制&#xff0c;分别是程序启动机制、窗口创建机制、动态创建机制、运行时类信息机制、消息映射机制、序列化机制。 简述六大机制 程序启动机制&#xff1a;全局的应用程序…...

【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析

文章目录 1. 计算机网络有哪些分类2. 计算机网络中协议与标准的区别3. 计算机网络拓扑有哪些结构4. 常用的网络设备有哪些&#xff0c;分属于OSI的哪一层5. IEEE802局域网标准有哪些 【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析 1. 计算机网络有哪些分类 计算…...

Python中的上下文管理器:从资源管理到自定义实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 Python中的上下文管理器(Context Manager)为资源管理提供了强大的支持,尤其在处理文件、网络连接、数据库连接等需要精确控制生命周期的…...

STM32 高级 物联网通信之CAN通讯

目录 CAN通讯介绍 物理层 协议层 CAN的帧(报文)种类 1 数据帧(发送单元->接受单元) 2 远程帧(接受单元->发送单元) 3 错误帧(发送方发送数据错误会发送的状态帧) 4 过载帧(接收方放不下会发送到的状态帧) 5 帧间隔(状态) 数据帧介绍 远程帧介绍 C…...

如何求解小于等于x的正整数因子y的个数总和

G ( X , Y ) X 的因子 Y 个数 G(X,Y) X的因子Y个数 G(X,Y)X的因子Y个数 例如 G ( 8 , 2 ) 3 G(8,2)3 G(8,2)3 G ( 12 , 2 ) 2 G(12,2)2 G(12,2)2 F ( X , Y ) ∑ i 1 X G ( i ) F(X, Y) \sum_{i1}^{X} G(i) F(X,Y)i1∑X​G(i) 直接上结论 F ( X , Y ) X Y 1 ⋯ X…...

Epic游戏使用mod

以土豆兄弟为例&#xff1a; 第一步&#xff1a;获取 SteamCMD 下载官方 Steam 控制台客户端 (steamCMD) 1. 下载好后打开&#xff0c;是一个在 cmd 窗口的运行的命令行 2. 输入以下代码登录 login anonymous 第二步&#xff1a; 确认自己要下载的游戏 ID 和 mod ID 然后…...

前端:纯前端快速实现html导出word和pdf

实现html导出word&#xff0c;需要使用两个库。 html-docx-js和file-saver 导出word的js方法 > npm install html-docx-js >npm install file-saver js引入 import FileSaver from “file-saver”; import htmlDocx from “html-docx-js/dist/html-docx”; /**导出…...

Windows装Docker至D盘/其他盘(最新,最准确,直接装)

前言 Docker的默认安装路径为 C:\你的用户名\AppData\Local\Docker\wsl这样安装常常会导致C盘爆满。目前现有博客的安装方法往往不能把docker的container和image也装在非C盘。本博客旨在用最简单的方式&#xff0c;把Docker Deskstop的images和container装在D盘中。 安装前&a…...

2024 年 IA 技术大爆发深度解析

摘要&#xff1a; 本文旨在深入剖析 2024 年 IA 技术大爆发所引发的多方面反响。通过对产业变革、经济影响、就业市场、社会影响、政策与监管以及未来展望等维度的探讨&#xff0c;揭示 IA 技术在这一关键时期对全球各个层面带来的深刻变革与挑战&#xff0c;并提出相应的思考与…...

现代 CSS 布局与响应式设计实战指南

作为一名前端开发者&#xff0c;我经常被问到&#xff1a;"为什么你的页面布局这么流畅&#xff1f;响应式适配这么完美&#xff1f;"今天&#xff0c;我就来分享一下在实际项目中常用的 CSS 布局技巧和响应式设计方案。 现代布局三剑客&#xff1a;Flex、Grid 和 C…...

react 项目打包二级目 使用BrowserRouter 解决页面刷新404 找不到路由

使用BrowserRouter package 配置 &#xff08;这部分代码可以不做配置也能实现&#xff09; {"homepage": "/admin",}vite.config 配置 export default defineConfig({base: /admin])BrowserRouter 添加配置项 <BrowserRouter basename/admin>&l…...

Yolo11改进策略:Block改进|使用FastVit的RepMixerBlock改进Yolo11,重参数重构助力Yolo11涨点(全网首发)

文章目录 摘要FastViT:一种使用结构重新参数化的快速混合视觉变换器1、简介2、相关工作3、体系结构3.1、概述3.2、FastViT3.2.1、重新参数化跳过连接3.2.2、线性训练时间过参数化3.2.3、大核卷积4、实验4.1、图像分类4.2、鲁棒性评价4.3、3D Hand网格估计4.4、语义分割和目标检…...

2.6 网络面试问题

tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程&#xff0c;服务端开放一个IP端口&#xff0c;收到连接后&#xff0c;服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...

02-10.python入门基础一Python模块与包(二)

五、Python 包的概念 &#xff08;一&#xff09;包的定义与结构 在 Python 中&#xff0c;“包”&#xff08;Package&#xff09;是一种按照目录来组织模块的方式&#xff0c;它允许开发者将相关的模块集合在一起&#xff0c;形成一个更具逻辑性和结构性的代码单元。 从物…...