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

深入了解 React:从入门到高级应用

深入了解 React:从入门到高级应用

React 是由 Facebook 开发并维护的一个开源 JavaScript 库,用于构建用户界面。自2013年发布以来,React 在前端开发领域迅速崛起,成为最受欢迎的 UI 构建工具之一。无论是小型的单页应用(SPA)还是复杂的大型企业级应用,React 都能提供高效、灵活的解决方案。本文将全面、详细地介绍 React,包括其核心概念、工作原理、最佳实践以及生态系统。

目录:

  • 深入了解 React:从入门到高级应用
    • React 简介
      • React 的特点:
    • React 核心概念
      • 组件(Component)
        • 函数组件
        • 类组件
      • JSX
      • Props 和 State
        • Props
        • State
      • 生命周期
      • Hooks
    • React 渲染机制
      • 虚拟 DOM
      • React Fiber
    • React 生态系统
      • React Router
      • Redux
      • React Query
    • React 性能优化
    • React 测试
    • React 与其他框架的对比
      • React vs Angular
      • React vs Vue
    • React 进阶话题
      • Context API
      • Suspense 和 Concurrent Mode
      • 服务端渲染(SSR)
    • 总结

React 简介

React 是一个用于构建用户界面的 JavaScript 库。它通过组件化的思想将 UI 拆分成独立、可复用的模块,提升了开发效率并增强了应用的可维护性。React 不仅仅是一个视图层的框架,它还通过 React DOM 和 React Native 提供了跨平台的开发能力。

React 的特点:

  • 组件化:React 强调 UI 的组件化,组件是构建 React 应用的核心。每个组件管理自己的一部分 UI 和状态,可以在多个地方复用。
  • 声明式 UI:React 通过声明式的编程方式让 UI 随状态变化而自动更新。开发者不需要手动操作 DOM,React 会自动高效地更新视图。
  • 单向数据流:React 提供单向数据流的模式,数据从父组件流向子组件,避免了双向数据绑定可能引发的复杂性和性能问题。

React 核心概念

组件(Component)

React 的基本构建块是组件,组件可以是函数组件或类组件。函数组件是 React 中推荐的写法,使用起来更加简洁、灵活,并且可以通过 Hooks 实现更多功能。

函数组件
import React from 'react';const Greeting = ({ name }) => {return <h1>Hello, {name}!</h1>;
};export default Greeting;
类组件

虽然函数组件已经成为主流,但类组件依然被广泛使用,尤其是在处理生命周期或某些旧的 React 项目中。

import React, { Component } from 'react';class Greeting extends Component {render() {return <h1>Hello, {this.props.name}!</h1>;}
}export default Greeting;

JSX

JSX(JavaScript XML)是 React 推荐使用的语法扩展,它允许在 JavaScript 中直接书写类似 HTML 的标记。JSX 并不是一个新的语言,它只是 JavaScript 的语法糖。通过 Babel 等工具,JSX 最终会被转换为 React.createElement 函数调用。

const element = <h1>Hello, world!</h1>;

Props 和 State

Props

Props 是“属性”的缩写,表示组件外部传递给组件的数据。Props 是只读的,不能在组件内部修改。Props 的作用类似于函数的参数。

const Welcome = ({ name }) => {return <h1>Hello, {name}!</h1>;
};<Welcome name="React" />;
State

State 是组件内部的数据,通常用于保存用户交互或生命周期变化的结果。State 是可变的,改变 State 会触发组件重新渲染。

import React, { useState } from 'react';const Counter = () => {const [count, setCount] = useState(0);return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
};

生命周期

React 类组件有生命周期方法,分别在组件挂载、更新和卸载时调用。在函数组件中,通过 useEffect Hook 来模拟生命周期行为。

class MyComponent extends React.Component {componentDidMount() {console.log('Component mounted');}componentDidUpdate() {console.log('Component updated');}componentWillUnmount() {console.log('Component will unmount');}render() {return <div>My Component</div>;}
}

对于函数组件,可以使用 useEffect 来模拟生命周期方法:

import React, { useEffect } from 'react';const MyComponent = () => {useEffect(() => {console.log('Component mounted');return () => {console.log('Component will unmount');};}, []); // 空数组表示只在挂载和卸载时执行return <div>My Component</div>;
};

Hooks

React 16.8 引入了 Hooks,函数组件可以通过 Hooks 实现更多的功能,最常用的 Hooks 包括:

  • useState:用于管理组件状态
  • useEffect:用于处理副作用(如数据获取、DOM 操作等)
  • useContext:用于访问上下文(Context)
  • useReducer:用于更复杂的状态管理
  • useMemouseCallback:用于性能优化
import React, { useState, useEffect } from 'react';const Example = () => {const [count, setCount] = useState(0);useEffect(() => {document.title = `You clicked ${count} times`;}, [count]);return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
};

React 渲染机制

虚拟 DOM

React 使用虚拟 DOM 来提高性能。虚拟 DOM 是 React 对真实 DOM 的一种抽象,它在内存中模拟了 UI 的结构。当组件的 state 或 props 改变时,React 会首先在虚拟 DOM 中计算出变化,然后将最小的差异更新到真实 DOM。这样可以避免不必要的 DOM 操作,从而提高性能。

React Fiber

React Fiber 是 React 16 引入的一种新的渲染引擎,主要用于优化 React 渲染的性能,尤其是大规模应用中的渲染过程。它将渲染任务切割成小块,分批次处理,这样可以提高 UI 响应速度,避免长时间的 UI 卡顿。


React 生态系统

React Router

React Router 是 React 的官方路由库,用于处理 SPA(单页应用)的路由。通过 React Router,可以在应用中创建不同的页面组件,并根据 URL 的变化来切换不同的视图。

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';const App = () => (<Router><Switch><Route path="/" exact component={Home} /><Route path="/about" component={About} /></Switch></Router>
);

Redux

Redux 是一个流行的状态管理库,适用于需要跨多个组件共享状态的应用。它通过统一的 store 管理全局状态,并通过 dispatch 分发 action 来改变状态。

// Redux 示例代码
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);

React Query

React Query 是一个强大的数据获取库,专门用于处理与服务器的数据交互,它支持缓存、自动重试、分页等功能。

import { useQuery } from 'react-query';const fetchData = async () => {const response = await fetch('https://api.example.com/data');return response.json();
};const DataFetchingComponent = () => {const { data, isLoading } = useQuery('data', fetchData);if (isLoading) return <div>Loading...</div>;return <div>Data: {JSON.stringify(data)}</div>;
};

React 性能优化

  1. PureComponentReact.PureComponentReact.Component 的一个优化版,它通过浅比较 props 和 state 来决定是否需要重新渲染加载组件,从而减少不必要的渲染。
import React, { PureComponent } from 'react';class MyComponent extends PureComponent {render() {return <div>{this.props.name}</div>;}
}
  1. React.memo:对于函数组件,可以使用 React.memo 来实现类似于 PureComponent 的效果,即通过浅比较 props 来优化性能。
const MyComponent = React.memo(({ name }) => {return <div>{name}</div>;
});
  1. useMemo 和 useCallback:这两个 Hook 可以用来优化性能,避免不必要的计算和函数重建。
  • useMemo 用于缓存计算结果,避免每次渲染时都进行昂贵的计算。
import React, { useMemo } from 'react';const MyComponent = ({ data }) => {const expensiveCalculation = useMemo(() => {return data.reduce((acc, item) => acc + item, 0);}, [data]);return <div>{expensiveCalculation}</div>;
};
  • useCallback 用于缓存函数,避免每次渲染时都创建新的函数引用,适用于传递给子组件的回调函数。
import React, { useCallback } from 'react';const MyComponent = ({ onClick }) => {const handleClick = useCallback(() => {console.log('Button clicked');onClick();}, [onClick]);return <button onClick={handleClick}>Click me</button>;
};
  1. Lazy Loading(懒加载):使用 React.lazySuspense 可以实现组件的懒加载,只有当组件需要渲染时才加载相关代码,减少初始加载时间。
import React, { Suspense, lazy } from 'react';const MyComponent = lazy(() => import('./MyComponent'));const App = () => {return (<Suspense fallback={<div>Loading...</div>}><MyComponent /></Suspense>);
};

React 测试

React 提供了多种测试工具和方法,用于保证代码的质量和稳定性。

  1. Jest:Jest 是 React 推荐的测试框架,支持单元测试、集成测试和快照测试等功能。
// Counter.js
import React, { useState } from 'react';const Counter = () => {const [count, setCount] = useState(0);return (<div><p>{count}</p><button onClick={() => setCount(count + 1)}>Increment</button></div>);
};export default Counter;
// Counter.test.js
import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import Counter from './Counter';test('increments counter', () => {const { getByText } = render(<Counter />);const button = getByText(/Increment/i);fireEvent.click(button);getByText('1');
});
  1. React Testing Library:React Testing Library 是一个专门用于 React 组件测试的库,强调从用户交互的角度进行测试,避免关注实现细节。
import { render, fireEvent } from '@testing-library/react';
import MyComponent from './MyComponent';test('button click updates state', () => {const { getByText } = render(<MyComponent />);fireEvent.click(getByText('Click me'));getByText('You clicked 1 times');
});

React 与其他框架的对比

React vs Angular

  • 学习曲线:Angular 是一个完整的前端框架,内置了很多功能(如路由、表单验证、HTTP 请求等),学习曲线较陡。而 React 是一个库,专注于 UI 构建,学习起来相对简单。
  • 架构:Angular 使用 MVVM(Model-View-ViewModel)架构,适合大型应用开发。React 使用组件化的方式,开发者可以根据需求自由选择工具,如路由、状态管理等。
  • 双向数据绑定:Angular 提供了双向数据绑定,而 React 则是单向数据流,数据从父组件流向子组件,这使得 React 更易于调试和维护。

React vs Vue

  • 学习曲线:Vue 的学习曲线通常被认为比 React 更平缓,特别是对于初学者。Vue 结合了模板和组件的思想,适合渐进式开发。
  • 灵活性:React 提供了更多的灵活性和自由度,开发者可以根据需求选择合适的工具链,而 Vue 提供了更多的默认约定,使得开发过程更加简洁。
  • 生态系统:React 拥有更庞大的社区和生态系统,支持更多的第三方库。Vue 的生态也在迅速发展,但总体上相对较小。

React 进阶话题

Context API

React Context 提供了一种方式,能够让我们在组件树中传递数据,而不需要通过 props 层层传递。它特别适用于全局状态(如主题、语言等)管理。

import React, { createContext, useContext } from 'react';const ThemeContext = createContext();const ThemedComponent = () => {const theme = useContext(ThemeContext);return <div style={{ background: theme.background }}>Hello, World!</div>;
};const App = () => {const theme = { background: 'lightblue' };return (<ThemeContext.Provider value={theme}><ThemedComponent /></ThemeContext.Provider>);
};

Suspense 和 Concurrent Mode

React 16.6 引入了 Suspense,它允许你将异步加载的组件包装起来,React 会在组件加载时显示一个备用内容。Concurrent Mode 是 React 在 18 中的实验性特性,它通过并发渲染来提升 React 应用的响应速度和用户体验。

import React, { Suspense, lazy } from 'react';const LazyComponent = lazy(() => import('./LazyComponent'));const App = () => (<Suspense fallback={<div>Loading...</div>}><LazyComponent /></Suspense>
);

服务端渲染(SSR)

React 支持服务端渲染(SSR),即在服务器端生成 HTML 页面,然后将其发送到客户端,这样可以提高页面加载速度和 SEO(搜索引擎优化)。Next.js 是一个基于 React 的流行框架,它提供了开箱即用的 SSR 支持。

import React from 'react';const HomePage = () => <div>Hello from SSR!</div>;export default HomePage;

在 Next.js 中,您只需要将页面文件放在 pages 目录下,框架会自动为您处理 SSR 和路由。


总结

React 是一个功能强大且灵活的前端库,它通过组件化的方式帮助开发者高效地构建用户界面。随着 React 生态系统的不断发展,它已成为现代前端开发的主流选择。通过掌握 React 的核心概念、生命周期、Hooks、性能优化等技术,开发者能够构建出高效、可维护的前端应用。同时,借助 React 的生态工具(如 React Router、Redux、React Query 等),开发者能够更轻松地处理路由、状态管理和数据请求等任务。

希望本文能帮助您更好地理解和掌握 React,为您未来的开发之路提供支持!

相关文章:

深入了解 React:从入门到高级应用

深入了解 React&#xff1a;从入门到高级应用 React 是由 Facebook 开发并维护的一个开源 JavaScript 库&#xff0c;用于构建用户界面。自2013年发布以来&#xff0c;React 在前端开发领域迅速崛起&#xff0c;成为最受欢迎的 UI 构建工具之一。无论是小型的单页应用&#xf…...

华为云环境下LVS/DR架构的故障诊断优化

本文作者&#xff1a;刘涛 文章目录 前言1.LVS/DR集群的问题2.华为云环境3.问题排查3.1 检查LVS/DR模式配置3.1.1 RS服务器3.1.2 DS服务器 3.2 继续分析抓包结果3.2.1 调整tcpdump抓包过滤条件3.2.2 client向集群VIP发包3.2.3 DS服务器arp消息 3.3 查看丢包3.3.1 监控DS和RS服…...

Effective C++ 条款 22:将成员变量声明为 private

文章目录 条款 22&#xff1a;将成员变量声明为 private核心思想示例代码注意事项结论 条款 22&#xff1a;将成员变量声明为 private 核心思想 成员变量的封装性 将成员变量声明为 private 是面向对象设计的重要原则&#xff0c;有助于保持封装性。 为何使用 private&#x…...

ShardingSphere(分库分表)

ShardingSphere 高性能架构模式 读写分离架构&#xff1a; 基本原理是将数据库读写操作分散到不同的节点上&#xff0c;主库负责处理事务性的增删改操作&#xff0c;从库负责处理查询操作。避免由数据更新导致的行锁&#xff0c;来提升性能。 一主一从&#xff1a;可以将查…...

Visual Studio Code(VS Code)配置C/C++环境

一、Visual Studio Code安装 Visual Studio Code&#xff0c;下文中简称为VS Code的详细安装方法请参考VSCode安装教程&#xff08;超详细&#xff09;-CSDN博客 二、MinGW编译器下载与配置 1、MinGW介绍 MinGW(Minimalist GNU for Windows)是一款用于Windows 平台的轻…...

使用 OpenCV 在图像中添加文字

在图像处理任务中&#xff0c;我们经常需要将文本添加到图像中。OpenCV 提供了 cv2.putText() 函数&#xff0c;可以很方便地在图像上绘制文本&#xff0c;支持多种字体、颜色、大小和位置等参数。 本文将详细介绍如何使用 OpenCV 在图像中添加文字&#xff0c;介绍 cv2.putTe…...

高校网络安全_网络安全之道

需要对学校的网络进行安全防护&#xff0c;主要有这么几个痛点&#xff1a; 传统本地化产品难以及时更新情报库&#xff0c;应对新型攻击。 近年来&#xff0c;黑客和黑产团伙攻击手 段呈现多样化实战化&#xff0c;除传统僵木蠕外&#xff0c;各类新型、复杂甚至未知威胁高发…...

『大模型笔记』评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释

评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释 文章目录 一. ELO Rating大模型的elo得分如何理解1. Elo评分的基本原理2. 示例说明3. 大模型中的Elo得分总结3个模型之间如何比较计算,给出示例进行解释1. 基本原理扩展到三方2. 示例计算第一场: A A…...

kafka的配置

server.properties server.properties模板 # broker id&#xff0c;多个broker服务器的话&#xff0c;每个broker id必须不同 broker.id1# kafka broker所在节点的 hostnamehostname10.1.1.1.3:9092# 处理网络请求的线程数 num.network.threads 8# 执行磁盘IO的线程数 num.io…...

Linux下Java通过JNI调用C++

以下为Demo流程 1.创建Java文件 public class HelloWord {// 声明本地方法public native void sayHello();static {// 加载本地库System.loadLibrary("hello");}public static void main(String[] args) {new HelloWord().sayHello();} } 2.编译生成.h头文件 在H…...

家政预约小程序数据库设计

目录 1 如何设计表结构1.1 用户表1.2 服务分类表1.3 服务表1.4 服务规格表1.5 订单表1.6 服务人员表1.7 评价表1.8 促销活动表1.9 投诉表1.10 年卡表1.11 派单表1.12 支付记录表1.13 通知记录表1.14 优惠券表1.15 用户优惠券表1.16 消息模板表1.17 积分记录表 经过一系列的设计…...

【Git学习】windows系统下git init后没有看到生成的.git文件夹

[问题] git init 命令后看不到.git文件夹 [原因] 文件夹设置隐藏 [解决办法] Win11 win10...

云手机群控能用来做什么?

随着云手机的发展&#xff0c;云手机群控技术逐渐从小众的游戏多开工具&#xff0c;发展为涵盖多个领域的智能操作平台。不论是手游搬砖、短视频运营&#xff0c;还是账号养成等场景&#xff0c;云手机群控都展现出了强大的应用潜力。本文将为大家详细解析云手机群控的应用场景…...

go下载依赖提示连接失败

1、现象 Go下载模块提示连接失败 dial tcp 142.251.42.241:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.…...

在线excel编辑(luckysheet)

项目地址&#xff1a;Luckysheet: &#x1f680;Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源。 可以下载项目使用npm安装运行&#xff0c;也可以用cdn 加载excel文件&#xff08;使用luckyexcel&#xff09;&#xff1a; …...

2024国赛A题第一问

第一问 板凳龙等距螺线匀速运动模型的建立 坐标系的建立 根据题意&#xff0c;舞龙队沿螺距为55cm的螺线顺时针进入&#xff0c;进入位置为螺线第16圈点A处&#xff0c;即整个螺线的最外侧点&#xff0c;设定其为 ( x 0 , y 0 ) (x_0,y_0) (x0​,y0​)。为了便于计算出题目要…...

【魅力golang】之-反射

1、引言 反射&#xff08;Reflection&#xff09;在 Golang中用于运行时检查和操作变量的类型和值。通过反射&#xff0c;可以实现动态类型处理&#xff0c;这在构建泛型代码、框架、序列化工具和动态代理等场景中非常有用。 2、什么是反射 反射是指程序在运行时能够动态地检…...

Java在 聊天管理系统中的应用

聊天管理系统已经成为人们日常沟通不可或缺的一部分。无论是企业内部的即时通讯&#xff0c;还是社交媒体平台的聊天功能&#xff0c;聊天管理系统都扮演着至关重要的角色。 Java 作为一种广泛应用的编程语言&#xff0c;凭借其强大的功能、良好的跨平台性以及丰富的类库&…...

记一次rac故障原因分析(虚拟化平台)

一 现象描述 XX客户于1月14号凌晨业务中断&#xff0c;检查数据库发现数据库集群宕机。 XX客户于2月14号春节初五早上业务异常&#xff0c;连接数据库无响应。 二 问题详细诊断 1月14号故障 1月14号凌晨2点&#xff0c;客户反馈业务中断&#xff0c;发现节点1无法连接&…...

opencv中的各种滤波器简介

在 OpenCV 中&#xff0c;滤波器是图像处理中的重要工具&#xff0c;用于对图像进行平滑、去噪、边缘检测等操作。以下是几种常见滤波器的简单介绍。 1. 均值滤波 (Mean Filter) 功能&#xff1a; 对图像进行平滑处理&#xff0c;减少噪声。 应用场景&#xff1a; 去除图像…...

文本数据处理

文本数据处理 一、数据转换与错误处理 &#xff08;一&#xff09;运维中的数据转换问题 在计算机审计及各类数据处理场景中&#xff0c;数据转换是关键步骤&#xff0c;涉及将被审计单位或其他来源的数据有效装载到目标数据库&#xff0c;并明确标示各表及字段含义与关系。…...

ThinkPHP 8开发环境安装

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《ThinkPHP 8高效构建Web应用 夏磊 编程与应用开发丛书 清华大学出版社》【摘要 书评 试读】- 京东图书 1. 安装PHP8 Windows系统用户可以前往https://windows.php.net/downloads/releases/archives/下载PHP 8.0版本&am…...

php怎么去除数点后面的0

在PHP中&#xff0c;我们可以使用几种方法来去除数字小数点后的0。 方法一&#xff1a;使用intval函数 intval函数可以将一个数字转化为整数&#xff0c;另外&#xff0c;它也可以去除小数点后面的0。 “php $number 123.4500; $number intval($number); echo $number; // 输…...

Database.NET——一款轻量级多数据库客户端工具

文章目录 Database.NET简介下载使用使用场景总结 Database.NET简介 Database.NET 是一个功能强大且易于使用的数据库管理工具&#xff0c;适用于多种数据库系统。它为开发者和数据库管理员提供了一个统一的界面&#xff0c;可以方便地管理和操作不同类型的数据库。 支持的数据…...

Unittest02|TestSuite、TestRunner、HTMLTestRunner、处理excel表数据、邮件接收测试结果

目录 八、测试套件TestSuite和测试运行器TestRunner 1、基本概念 2、创建和使用测试套件 3、 自动发现测试用例、创建测试套件、运行测试 4、生成html的测试报告&#xff1a;HTMLTestRunner 1️⃣导入HTMLTestRunner模块 2️⃣运行测试用例并生成html文件 九、unittest…...

protobuf学习使用

1、概述 protobuf是Google开发的一种语言中立、平台无关、可扩展的序列化结构数据格式。允许定义一次数据结构&#xff0c;然后可以使用各种支持的语言来生成代码&#xff0c;以轻松地读写这些结构到一个二进制流中&#xff0c;如网络传输或文件&#xff0c;Protobuf支持多种编…...

跟我学c++中级篇——C++中的缓存利用

一、缓存 学习过计算机知识的一般都知道缓存这个概念&#xff0c;大约也知道缓存是什么。但是如果是程序员&#xff0c;如何更好的利用缓存&#xff0c;可能就有很多人不太清楚了。其实缓存的目的非常简单&#xff0c;就是了更高效的操作数据。大家都听说过“局部性原理”&…...

Goland 安装与使用

GoLand安装 官方网址&#xff1a; JetBrains GoLand&#xff1a;不只是 Go IDE 1. 进入官网&#xff0c;点击下载&#xff1a; ​ 2. 如下图一步步安装 ​ ​ ​ ​ ​ 3. 如下图一步步安装...

cesium通过经纬度获取3dtiles 得feature信息

找到这里3dtiles的两种访问方式&#xff1a; 1.1 3DTileContent#getFeature 这里涉及3DTile 数据结构&#xff0c;暂不了解3DTile 数据结构&#xff0c;因此暂不使用。 1.2 scene.pick 本次使用 scene表示虚拟场景中所有 3D 图形对象和状态的容器&#xff1b;scene中…...

spring cloud gateway 3

**Spring Cloud Gateway 3** 是 Spring Cloud 生态系统中的一个重要组件&#xff0c;用于构建 API 网关&#xff0c;提供路由、监控、安全等关键功能。以下是关于 Spring Cloud Gateway 3 的详细介绍&#xff1a; ## 1. 什么是 Spring Cloud Gateway&#xff1f; **Spring Clou…...

青少年编程与数学 02-005 移动Web编程基础 03课题、流式布局

青少年编程与数学 02-005 移动Web编程基础 03课题、流式布局 一、流式布局二、网页示例HTML (index.html)CSS (styles.css) 三、精灵图精灵图的工作原理精灵图的优点精灵图的缺点精灵图的适用场景 四、轮播图HTML (index.html)CSS (styles.css)JavaScript (script.js) 课题摘要…...

【数据可视化复习方向】

1.数据可视化就是数据中信息的可视化 2.数据可视化主要从数据中寻找三个方面的信息&#xff1a;模式、关系和异常 3.大数据可视化分类&#xff1a;科学可视化、信息可视化、可视分析学 4.大数据可视化作用&#xff1a;记录信息、分析推理、信息传播与协同 5.可视化流程&…...

Spring Security 6 系列之九 - 集成JWT

之所以想写这一系列&#xff0c;是因为之前工作过程中使用Spring Security&#xff0c;但当时基于spring-boot 2.3.x&#xff0c;其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0&#xff0c;结果一看Spring Security也升级为6.3.0&#xff0c;关键是其风…...

大数据实验三

Python and anaconda 实验三数据预处理和轨迹聚类参考地址&#xff1a; https://www.hifleet.com/wp/communities/data/hangyundashujujishukechengshiyanzhinanshujuyuchulijiguijijuleichixugengxinzhong#post-2212https://www.hifleet.com/wp/communities/data/hangyundas…...

《计算机网络(第7版)-谢希仁》期末考试复习题和答案(总结整理)

目录 前言&#xff1a; 一、选择题。 二、填空题。 三、名词解释。 四、简答题。 前言&#xff1a; 这个自动标题自己带了序号&#xff0c;一开始想全部选项和题号都改过来的&#xff0c;结果一看一百多个全是&#xff0c;懒得改了 一、选择题。 1、广域网覆盖的地理范围…...

学习笔记 --C#基础其他知识点(持续更新)

C#中的同步和异步《一》 以下理解借鉴博客&#xff1a;借鉴博客地址1 异步编程&#xff08;Asynchronous&#xff09; 允许任务在后台执行&#xff0c;而不会阻塞调用线程。C#使用async和await关键字 async Task AsynchronousMethod() {// 等待异步操作完成await Task.Delay…...

STM32 高级 谈一下IPV4/默认网关/子网掩码/DNS服务器/MAC

首先可以通过 winr->输入cmd->输入ipconfig 命令可以查看计算机的各种地址 IPV4&#xff1a;是互联网协议第 4 版&#xff08;Internet Protocol version 4&#xff09;所使用的地址。它是一个 32 位的二进制数字&#xff0c;通常被分为 4 个 8 位的部分&#xff…...

智能家居实训室中,STC单片机驱动的“互联网+”智能家居系统设计

一、引言 随着经济的快速发展&#xff0c;人们对家居环境的智能化、网络化需求日益增强&#xff0c;智能家居的研究也因此受到了国内外相关机构的广泛关注。STC单片机凭借其卓越的性能和广泛的应用领域&#xff0c;成为了智能家居系统设计的优选方案。作为一种先进的微控制器&…...

esp32学习:用虫洞ESP32S3-EYE开发板快速实现USB摄像头(UVC免驱)

直接上干货&#xff1a;实现一个USB摄像头&#xff0c;免驱UVC设备。 硬件准备&#xff1a; 乐官方推荐的Cam开发板就是乐鑫带摄像头OV2604的esp32-s3-eye&#xff0c;我们虫洞esp32-s3-eye完全兼容这个板子哦&#xff0c;虫洞ESP32-S3-EYE 人脸识别 esp-cam升级 OpenCV LVGL …...

Python 面向对象编程 五(结束)组合

Python 面向对象编程 五&#xff08;结束&#xff09;组合 组合 组合 组合是面向对象编程中另一个流行的概念&#xff0c;它与封装也有一定关系。简单地说&#xff0c;组成是指在一个对象中包含一个或多个对象&#xff0c;从而形成一个真实世界的对象。包含其他类对象的类称为…...

基于微信小程序的校园访客登记系统

基于微信小程序的校园访客登记系统 功能列表 用户端功能 注册与登录 &#xff1a;支持用户通过手机号短信验证码注册和登录。个人资料管理 &#xff1a;允许用户编辑和更新个人信息及其密码。站内信消息通知&#xff1a;通知公告。来访预约&#xff1a;提交来访预约支持车牌…...

docker 部署mysql8

在Docker中部署MySQL 8是一个相对简单的过程。以下是基本的步骤&#xff1a; 拉取MySQL 8镜像&#xff1a; 使用Docker命令拉取最新的MySQL 8镜像&#xff1a; docker pull registry.openanolis.cn/openanolis/mysql:8.0.30-8.6创建并运行MySQL容器&#xff1a; 创建并运行MySQ…...

聊一聊 C#前台线程 如何阻塞程序退出

一&#xff1a;背景 1. 讲故事 这篇文章起源于我的 C#内功修炼训练营里的一位朋友提的问题&#xff1a;后台线程的内部是如何运转的 ? &#xff0c;犹记得C# Via CLR这本书中 Jeffery 就聊到了他曾经给别人解决一个程序无法退出的bug&#xff0c;最后发现是有一个 Backgrond…...

【编译原理】往年题汇总(山东大学软件学院用)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;编译原理_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...

【原创学习笔记】近期项目中使用的西门子V20变频器总结(上篇)

现场V20 22kW变频器如图所示 进线分别为L1,L2,L3,PE线&#xff0c;出现分别为U,V,W接电机 在西门子官网查询手册后&#xff0c;查询可知可以通过多种方式控制变频器&#xff0c;比如&#xff1a;面板&#xff08;BOP&#xff09;控制&#xff0c;端子&#xff08;NPN/PNP&…...

IndexOf Apache Web For Liunx索引服务器部署及应用

Apache HTTP Server 是一款广泛使用的开源网页服务器软件,它支持多种协议,包括 HTTP、HTTPS、FTP 等 IndexOf 功能通常指的是在一个目录中自动生成一个索引页面的能力,这个页面会列出该目录下所有的文件和子目录。比如网上经常看到的下图展现的效果,那么接下来我们就讲一下…...

Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集PI-FGSM介绍背景和动机算法原理算法流程 PI-FGSM代码实现PI-FGSM算法实现攻击效果 代码汇总pifgsm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexN…...

Casino Royale靶场wp

0x00 下载安装 https://download.vulnhub.com/casinoroyale/CasinoRoyale.ova 导入vmware启动 0x01 主机信息收集 0x02目录扫描 index.php 获取到一个域名 修改本地hosts 添加一行 路径&#xff1a;C:\Windows\System32\drivers\etc 192.168.2.20 casino-royale.local 点击…...

c/c++ 无法跳转定义

背景 对于嵌入式开发离不开交叉编译工作&#xff0c;采用vccode远程到虚拟机开发来说&#xff0c;总会遇到一个函数跳转问题。下面针对运用开发如何设置vscode保证函数能正确跳转大函数定义。 一、安装c/c插件 安装C/C Extension Pack插件&#xff0c;这插件包含有几个插件。…...

4.5 数据表的外连接

本次课程我们将继续的学习数据表的连接。因为数据表的连接是分为内连接和外连接的。内连接的语法&#xff0c;还有一些练习&#xff0c;我们都是学习到了。那么本次课程咱们就开始学习数据表的外连接语法。首先我来解释一下为什么要使用外连接这种语法。咱们首先看一条记录&…...