当前位置: 首页 > 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…...

jenkins 出现 Jenkins: 403 No valid crumb was included in the request

文章目录 前言解决方式:1.跨站请求为找保护勾选"代理兼容"2.全局变量或者节点上添加环境变量3.&#xff08;可选&#xff09;下载插件 the strict Crumb Issuer plugin4.重启 前言 jenkins运行时间长了&#xff0c;经常出现点了好几次才能构建&#xff0c;然后报了Je…...

【前端面试】list转树、拍平, 指标,

这个题目涉及的是将一组具有父子关系的扁平数据转换为树形结构&#xff0c;通常称为“树形结构的构建”问题。类似的题目包括&#xff1a; 1. 组织架构转换 给定一个公司的员工列表&#xff0c;每个员工有 id 和 managerId&#xff0c;其中 managerId 表示该员工的上级。任务…...

游戏引擎学习第43天

仓库 https://gitee.com/mrxiao_com/2d_game 介绍运动方程 今天我们将更进一步&#xff0c;探索运动方程&#xff0c;了解真实世界中的物理&#xff0c;并调整它们&#xff0c;以创建一种让玩家感觉愉悦的控制体验。这并不是在做一个完美的物理模拟&#xff0c;而是找到最有趣…...

NVM:安装配置使用(详细教程)

文章目录 一、简介二、安装 nvm三、配置 nvm 镜像四、配置环境变量五、使用教程5.1 常用命令5.2 具体案例 六、结语 一、简介 在实际的开发和学习中可能会遇到不同项目的 node 版本不同&#xff0c;而出现的兼容性问题。 而 nvm 就可以很好的解决这个问题&#xff0c;它可以在…...

matlab测试ADC动态性能的原理

目录 摘要&#xff1a; 简介&#xff1a; 动态规范和定义 动态规格&#xff1a; 双面到单边的功率谱转换 摘要&#xff1a; 模数转换器&#xff08;adc&#xff09;代表了接收器、测试设备和其他电子设备中的模拟世界和数字世界之间的联系。正如本文系列的第1部分中所概述…...

PostgreSQL JSON/JSONB 查询与操作指南

PostgreSQL 提供了强大的 JSON 和 JSONB 数据类型及相关操作&#xff0c;适用于存储和查询半结构化数据。本文将详细介绍其常用操作。 1. 基础操作 1.1 JSON 属性访问 ->: 返回 JSON 对象中的值&#xff0c;结果为 JSON 格式。 SELECT {"a": {"b": 1…...

【Isaac Lab】Ubuntu22.04安装英伟达驱动

目录 1.1 禁用nouveau驱动 1.2 安装必要的依赖项 1.3 下载安装 1.4 查看是否安装成功 1.5 安装CUDA 1.5.1 下载 1.5.2 按照提示进行下载安装 1.5.3 添加环境变量 1.5.4 测试CUDA是否安装成功 1.1 禁用nouveau驱动 输入以下命令打开blacklist.conf文件 sudo vim /etc…...

JS,递归,处理树形数据组件,模糊查询树形结构数据字段

JS递归如何模糊查询树形结构数据,根据数据中的某一个字段值&#xff0c;模糊匹配 直接拿去使用就行 function filterTreeLabel(arr, label) {let result []arr.forEach((item) > {// if (String(item.POBJECT_NAME).toLowerCase().indexOf(label)!-1) {if (String(item.P…...

神州数码DCME-320 online_list.php 任意文件读取漏洞复现

0x01 产品描述: ‌神州数码DCME-320是一款高性能多业务路由器,专为多用户、多流量和多业务种类需求设计‌。它采用了...

nginx的内置变量以及nginx的代理

nginx的内置变量 客户端 命令含义$uri可以获取客户端请求的地址&#xff0c;包含主机和查询的参数$request_uri:获取客户端的请求地址&#xff0c;包含主机和查询参数。$host:请求的主机名&#xff0c;客户端—发送请求的url地址$http_user_agent获取客户端请求的浏览器和操作…...

ubuntu监测硬盘状态

安装smartmontools smartctl -l error /dev/sdk smartctl -i /dev/sda lshw -class disk smartctl -H /dev/sd 结果1&#xff1a; 结果2&#xff1a;PASSED&#xff0c;这表示硬盘健康状态良好 smartctl -a /dev/sdb sdk lsblk blkid 测试写入速度 time dd if/dev/zero of…...

3.2.1.2 汇编版 原子操作 CAS

基本原理说明 在 x86 和 ARM 架构上&#xff0c;原子操作通常利用硬件提供的原子指令来实现&#xff0c;比如 LOCK 前缀&#xff08;x86&#xff09;或 LDREX/STREX&#xff08;ARM&#xff09;。以下是一些关键的原子操作&#xff08;例如原子递增和比较交换&#xff09;的汇…...

InnoDB事务系统(二):事务的实现

事务隔离性由锁来实现。原子性、一致性、持久性通过数据库的 redo log 和 undo log 来完成。 redo log 称为重做日志&#xff0c;用来保证事务的原子性和持久性。undo log 用来保证事务的一致性。 有的 DBA 或许会认为 undo 是 redo 的逆过程&#xff0c;其实不然。redo 和 u…...

xdoj :模式匹配

模式匹配 题目描述&#xff1a; 接收信号中包含特定的信号模式&#xff0c;对接收信号进行检测&#xff0c;以统计特定模式出现的次数。 例如接收信号为 9 3 5 7 5 8 6 3 5 7 1 9 3 5 7&#xff0c;如果特定信号为 3 5 7&#xff0c;则接收信号中包含了 3 个特定模式。通过键…...

Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)

目录 SET GET KEYS EXISTS DEL EXPIRE TTL redis中的过期策略是怎么实现的&#xff08;面试&#xff09; 上文介绍reids的安装以及基本概念&#xff0c;本章节主要介绍 Redis的基本使用命令的使用 Redis 是一个基于键值对&#xff08;KEY - VALUE&#xff09;存储的…...

LruCache(本地cache)生产环境中遇到的问题及改进

问题&#xff1a;单机qps增加时请求摘要后端&#xff0c;耗时也会增加&#xff0c;因为超过了后端处理能力&#xff08;最大qps&#xff0c;存在任务堆积&#xff09;。 版本一 引入LruCache。为了避免数据失效&#xff0c;cache数据的时效性要小于摘要后端物料的更新时间&…...

智慧公交指挥中枢,数据可视化 BI 驾驶舱

随着智慧城市的蓬勃发展&#xff0c;公共交通作为城市运营的核心枢纽&#xff0c;正朝着智能化和数据驱动的方向演进。通过整合 CAN 总线技术(Controller Area Network&#xff0c;控制器局域网总线)、车载智能终端、大数据分析及处理等尖端技术&#xff0c;构建的公交“大脑”…...

【计算机网络】期末考试预习复习|上

作业讲解 物理层作业 共有4个用户进行CDMA通信。这4个用户的码片序列为&#xff1a; A: (–1 –1 –1 1 1 –1 1 1)&#xff1b;B: (–1 –1 1 –1 1 1 1 –1) C: (–1 1 –1 1 1 1 –1 –1)&#xff1b;D: (–1 1 –1 –1 –1 –1 1 –1) 现收到码片序列&#xff1a;(–1 1 –…...

YOLOv8目标检测(四)_图片推理

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

AI工具如何深刻改变我们的工作与生活

在当今这个科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经从科幻小说中的概念变成了我们日常生活中不可或缺的一部分。从智能家居到自动驾驶汽车&#xff0c;从医疗诊断到金融服务&#xff0c;AI正以惊人的速度重塑着我们的世界。 一、工作方式的革新…...

springboot中——Logback介绍

程序中的日志&#xff0c;是用来记录应用程序的运行信息、状态信息、错误信息等。 Logback基本使用 springboot的依赖自动传递了logback的依赖&#xff0c;所以不用再引入依赖 之后在resources文件下创建logback.xml文件&#xff0c;写入 <?xml version"1.0" …...

【Tomcat】第一站:理解tomcat与Socket

目录 1. Tomcat 1.1 Tomcat帮助启动http服务器。 1.2 tomcat理解&#xff1a; 2. 计算机网络最基本的流程 2.1 信息是怎么来的&#xff1f; 2.2 端口是干什么的&#xff1f; 3. 简单的Socket案例 服务端 客户端 启动&#xff1a; 3.2 在Tomcat发送信息&#xff0c;看…...

TQ15EG开发板教程:使用SSH登录petalinux

本例程在上一章“创建运行petalinux2019.1”基础上进行&#xff0c;本例程将实现使用SSH登录petalinux。 将上一章生成的BOOT.BIN与imag.ub文件放入到SD卡中启动。给开发板插入电源与串口&#xff0c;注意串口插入后会识别出两个串口号&#xff0c;都需要打开&#xff0c;查看串…...

Java从入门到工作4 - MySQL

一&#xff1a;检测数据库网络 telnet 127.0.0.1 3306 注意ip和端口后之间是空格&#xff0c;不需要引号 二&#xff1a;SQL语法 1、创建结果集 SELECT 电视机 AS typeUNION SELECT 电冰箱UNION SELECT 洗衣机UNION SELECT 空调UNION SELECT 电脑UNION SELECT 热水器UNION…...

OpenShift 4 - 多云管理(2) - 配置多集群观察功能

《OpenShift / RHEL / DevSecOps 汇总目录》 本文在 OpenShift 4.17 RHACM 2.12 环境中进行验证。 文章目录 多集群观察技术架构安装多集群观察功能监控多集群的运行状态监控多集群的应用运行在被管集群监控应用运行在管理集群监控被管集群的应用运行 参考 多集群观察技术架构…...

【鸿睿创智开发板试用】RK3568 NPU的人工智能推理测试

目录 引言 驱动移植 例程编译 修改build.sh 执行编译 运行测试 部署libc的库文件 执行测试程序 结语 引言 鸿睿创智的H01开发板是基于RK3568芯片的&#xff0c;瑞芯微芯片的一大特色就是提供了NPU推理的支持。本文将对其NPU推理进行测试。 驱动移植 H01的开发板已经…...

iOS swift开发系列 -- tabbar问题总结

1.单视图如何改为tabbar&#xff0c;以便显示2个标签页 右上角➕&#xff0c;输入tabbar 找到控件&#xff0c;然后选中&#xff0c;把entrypoint移动到tabbar控件 2.改成tabbar&#xff0c;生成两个item&#xff0c;配置各自视图后&#xff0c;启动发现报错 Thread 1: “-[p…...

四、CSS3

一、CSS3简介 1、CSS3概述 CSS3 是 CSS2 的升级版本&#xff0c;他在CSS2的基础上&#xff0c;新增了很多强大的新功能&#xff0c;从而解决一些实际面临的问题。 CSS在未来会按照模块化的方式去发展&#xff1a;https://www.w3.org/Style/CSS/current-work.html …...

Three使用WebGPU的关键TSL

Three.js 使用 WebGPU 的关键 TSL TSL: three.js shader language 介绍 three.js 材质转为webgpu的关键流程, 从而引出 TSL. 1、关键类关系 WebGPURenderer|-- library: StandardNodeLibrary|-- _nodes: Nodes|-- _objects: RenderObjects|-- createRenderObject()StandardN…...