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

React进阶之react.js、jsx模板语法及babel编译

React

  • React介绍
    • React官网初识
    • React学习
      • MVC
      • MVVM
  • JSX
    • 外部的元素props和内部的状态state
      • props
      • state
  • 生命周期
    • constructor
    • getDerivedStateFromProps
    • render
    • componentDidMount()
    • shouldComponentUpdate
    • getSnapshotBeforeUpdate(prevProps, prevState)
  • 创建项目
    • CRA:create-react-app
      • create-react-app源码解析
        • packages
          • package/create-react-app
            • index.js
            • createReactApp.js

React介绍

React官网初识

react 官网
react github

团队中选型时候,如果没有历史包的话,就选择最新的react,如果有历史包的话,选择不影响历史包升级的版本
但是最新的也容易踩到坑

在React19中,主要看 新特性和带来的提升即可
在这里插入图片描述
新特性:
在这里插入图片描述
在这里插入图片描述
form类似于 react/field-form
在这里插入图片描述
这里的use可以理解为,添加响应式的逻辑
在这里插入图片描述
性能上的提升:
ref可以作为props,平常项目中使用的是improve API 去关联,而无法用props来关联
在这里插入图片描述

React学习

React 中小厂用的不多,但是大厂用的都是React
React:构建web和原生交互界面的库,React组件本质上就是一个函数

  1. 像Vue一样支持组件的方式去拓展
  2. 支持原生元素标签,并且能够在标签中通过js的方法去执行
  3. 接收props,和state

与Vue相比较的话,React有一个典型的特性,React是单向数据流的
我们的视图是由我们的交互所决定的
ui视图 = render(data) 由数据所触发ui视图的变化

官网中,把这些内容看完就足够了
在这里插入图片描述

MVC

MVC model view controller
是一个架构的设计思路
controller:控制器 操纵数据导致视图变化
modal:数据
view:视图 视图中事件的触发也能够触发controller

// model
var myapp = {}; // 创建这个应用对象myapp.Model = function() {var val = 0;this.add = function(v) {if (val < 100) val += v;};this.sub = function(v) {if (val > 0) val -= v;};this.getVal = function() {return val;};* 观察者模式 /var self = this, views = [];this.register = function(view) {views.push(view);};this.notify = function() {for(var i = 0; i < views.length; i++) {views[i].render(self);}};
};// view
myapp.View = function(controller) {var $num = $('#num'),$incBtn = $('#increase'),$decBtn = $('#decrease');this.render = function(model) {$num.text(model.getVal() + 'rmb');};/  绑定事件  /$incBtn.click(controller.increase);$decBtn.click(controller.decrease);
};// controller
myapp.Controller = function() {var model = null,view = null;this.init = function() {/ 初始化Model和View /model = new myapp.Model();view = new myapp.View(this);/ View向Model注册,当Model更新就会去通知View啦 /model.register(view);model.notify();};/ 让Model更新数值并通知View更新视图 */this.increase = function() {model.add(1);model.notify();};this.decrease = function() {model.sub(1);model.notify();};
};// init
(function() {var controller = new myapp.Controller();controller.init();
})();

MVVM

MVVM: model viewModel view 数据的双向绑定

// model
var data = {val: 0
};// view
<div id="myapp"><div><span>{{ val }}rmb</span></div><div><button v-on:click="sub(1)">-</button><button v-on:click="add(1)">+</button></div>
</div>// controller
new Vue({el: '#myapp',data: data,methods: {add(v) {if(this.val < 100) {this.val += v;}},sub(v) {if(this.val > 0) {this.val -= v;}}}
});// Vue是不是MVVM?React呢?
// 严格来讲都不是。
// Vue操作的是虚拟的dom,而不是真实的dom节点,通过ref.current获取的结果,从虚拟上能够直接指向真实dom                                                                                                                                                                                                                                                                                                                 
// React:ui = render (data) 单向数据流
// Vue:   ref 直接操作DOM,跳过了ViewModel

JSX

function VideoList({ videos, emptyHeading }) {const count = videos.length;let heading = emptyHeading;if (count > 0) {const noun = count > 1 ? 'Videos' : 'Video';heading = count + ' ' + noun;}return (<section><h2>{heading}</h2>{videos.map(video =><Video key={video.id} video={video} />)}</section>);
}

模板化的语言写法,需要注意的是,怎样将模板化的语言写法,转化为对象,最终转化为我们真实的dom

Vue和React都是通过AST去转化的,将我们这样的模板语言转化为js对象的能力:通过 babel
babel 是 js的compiler
compiler是代码执行之前,需要将代码从一种格式转换为另一种格式,方便后续代码的识别和执行
runtime是jsx代码中最终去消费babel编译后的产物,交由给_jsxs去做运行时的逻辑
babel
babel 本质:core-js,定义的js的各种各样的ecma标准都能做到

在这里插入图片描述

babel:将jsx模板写法转化为js对象的能力
jsx本质:借助于Babel的 @babel/preset-react 提供的包的能力转换出来的js对象,在compiler代码编译过程中做到的

绑定事件:
这个事件称之为,合成事件,并不是直接绑定到元素上的,通过驼峰的方式,将方法绑定到属性上
在这里插入图片描述
写业务开发的市场饱和了,要求是写业务代码基础上,能够将写业务代码的工具能掌握好

外部的元素props和内部的状态state

类似于函数

function bar(a,b){const d=1
}

a,b就像是props,而d就像是state

function Welcome(props) {return <h1>Hello, {props.name}</h1>;
}class Welcome extends React.Component {render() {return <h1>Hello, {this.props.name}</h1>;}
}

props和state是怎么影响视图逻辑的?

组件的本质要么是类,要么是函数

props

export default function Profile(){return (<Avatarperson={{name:'Lin Lanying',imageId:'1dx5qh6'}}size={100}/>)
}interface IAvatarProps(){person?: Record<string,any>;size?: number|string;
}function Avatar(props: IAvatarProps){const {person,size=10}=props;
}

也可以这样作解构:

function Avatar({person,size}){const {person,size=10}=props;
}

state

useXXX => hooks的标志

import { sculptureList } from './data.js';
import { useState } from 'react';export default function Gallery() {const [index,setIndex]=useState(0) //hooksconst [showMore,setShowMore]=useState(false) //hooksfunction handleClick() {setIndex(index+1)}function handleMoreClick() {setShowMore(!showMore)}let sculpture = sculptureList[index];return (<><button onClick={handleClick}>Next</button><h2><i>{sculpture.name} </i> by {sculpture.artist}</h2><h3>  ({index + 1} of {sculptureList.length})</h3><button onClick={handleMoreClick}>{showMore?'Hide':'Show'} details	</button>{ showMore && <p>{sculpture.description}</p>}<img src={sculpture.url} alt={sculpture.alt}/>	</>);
}

<></> => react 属性中得 Fragment 不表示任何意义,只是提供了一个容器。因为react只能接收一个根节点,因此能使用Fragment将根节点聚合起来

生命周期

在这里插入图片描述

  1. constructor:通过类引入constructor
  2. getDerivedStateFromProps:通过props的不同来找到state的区别
  3. render:实际渲染的动作
  4. Render阶段:react是虚拟dom,这个阶段是在内存中去执行的,并没有真正渲染
  5. Commit阶段:创建真实dom
  6. shouldComponentUpdate:判断组件是否需要更新,减少组件没有必要的重复渲染
  7. getSnapshotBeforeUpdate:上一次更新前的内容,提供了上一次的props和state
  8. componentDidUpdate:执行更新完之后的生命周期
  9. componentWillUnmount:组件卸载之前

constructor

class Counter extends Component {constructor(props) {super(props);this.state = { counter: 0 };this.handleClick = this.handleClick.bind(this);}handleClick() {// ...}
class Counter extends Component {constructor(props) {super(props);this.state = { counter: 0 };this.handleClick = this.handleClick.bind(this);}handleClick() {// ...}

这里this.handleClick = this.handleClick.bind(this);为什么有这样的写法?
因为,创建这个类后,最终消费的是这个类所创建的实例,<Counter />
这里的this.handleClick = this.handleClick.bind(this);是将对应的方法绑定到实例里面,如果不做这个事情的话,只是绑定到了构造类里,并没有绑定到这里要用的实例上

getDerivedStateFromProps

class Form extends Component {state = {email: this.props.defaultEmail,prevUserID: this.props.userID};static getDerivedStateFromProps(props, state) {// 每当当前用户发生变化时,// 重置与该用户关联的任何 state 部分。// 在这个简单的示例中,只是以 email 为例。if (props.userID !== state.prevUserID) {return {prevUserID: props.userID,email: props.defaultEmail};}return null;}// ...
}

render

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

componentDidMount()

class ChatRoom extends Component {state = {serverUrl: 'https://localhost:1234'};componentDidMount() {this.setupConnection();}componentDidUpdate(prevProps, prevState) {if (this.props.roomId !== prevProps.roomId ||this.state.serverUrl !== prevState.serverUrl) {this.destroyConnection();this.setupConnection();}}componentWillUnmount() {this.destroyConnection();}// ...
}

shouldComponentUpdate

class Rectangle extends Component {state = {isHovered: false};shouldComponentUpdate(nextProps, nextState) {if (nextProps.position.x === this.props.position.x &&nextProps.position.y === this.props.position.y &&nextProps.size.width === this.props.size.width &&nextProps.size.height === this.props.size.height &&nextState.isHovered === this.state.isHovered) {// 没有任何改变,因此不需要重新渲染return false;}return true;}// ...
}

getSnapshotBeforeUpdate(prevProps, prevState)

不怎么经常使用的API,应用场景少

class ScrollingList extends React.Component {constructor(props) {super(props);this.listRef = React.createRef();}getSnapshotBeforeUpdate(prevProps, prevState) {// 我们是否要向列表中添加新内容?// 捕获滚动的​​位置,以便我们稍后可以调整滚动。if (prevProps.list.length < this.props.list.length) {const list = this.listRef.current;return list.scrollHeight - list.scrollTop;}return null;}componentDidUpdate(prevProps, prevState, snapshot) {// 如果我们有快照值,那么说明我们刚刚添加了新内容。// 调整滚动,使得这些新内容不会将旧内容推出视野。//(这里的 snapshot 是 getSnapshotBeforeUpdate 返回的值)if (snapshot !== null) {const list = this.listRef.current;list.scrollTop = list.scrollHeight - snapshot;}}render() {return (<div ref={this.listRef}>{/* ...contents... */}</div>);}
}

创建项目

pnpx create-react-app my-app

在这里插入图片描述
package.json:
这里的scripts里的指令本质:如何搭建一个自定义的webpack配置
在这里插入图片描述
CRA是脚手架,react-scripts是用CRA写的,CRA是用webpack写的

CRA:create-react-app

create-react-app

在这里插入图片描述
安装react,react-dom,react-scripts,基于cra-template模板安装的
创建git-commit
提供方法,react-scripts

create-react-app源码解析

create-react-app源码

  • docusaurus 静态站点,包含了这些的说明
    • website 静态站点
    • docs 静态站点的说明
      在这里插入图片描述
  • .github
    • PULL_REQUEST_TEMPLATE.md
    • workflows 工作流,包含构建,通过github的钩子做的一些事情
  • packages 多包结构
  • lerna.json 基于lerna的多包结构
    {"lerna": "2.6.0","npmClient": "yarn","useWorkspaces": true,  //使用多包管理"version": "independent", //每个包的版本号不需要一致"changelog": {  //更新添加元素"repo": "facebook/create-react-app","labels": {"tag: new feature": ":rocket: New Feature","tag: breaking change": ":boom: Breaking Change","tag: bug fix": ":bug: Bug Fix","tag: enhancement": ":nail_care: Enhancement","tag: documentation": ":memo: Documentation","tag: internal": ":house: Internal","tag: underlying tools": ":hammer: Underlying Tools"},"cacheDir": ".changelog"}
    }
    
  • tasks 测试用例 通过shell脚本去写的 和test结合去用的,怎样基于测试用例执行事件
  • test
  • .alexrc rc,runtime config 运行时的配置
packages
  • cra-template 模板
  • create-react-app 由这个执行

pnpx create-react-app 命令

执行的是 create-react-app的package.json中的bin的指令,node作为二进制执行的入口,这个命令等效于在create-react-app目录下执行 node ./index.js命令
在这里插入图片描述

package/create-react-app
index.js
'use strict';const currentNodeVersion = process.versions.node; //20.12.2
const semver = currentNodeVersion.split('.'); //通过.分割node版本号
const major = semver[0]; //获取第一位数字,即主版本号,如20if (major < 14) { //主版本号小于14的话就退出console.error('You are running Node ' +currentNodeVersion +'.\n' +'Create React App requires Node 14 or higher. \n' +'Please update your version of Node.');process.exit(1);
}
//执行CRA的init方法
const { init } = require('./createReactApp');init();
createReactApp.js

主要内容:

  1. commander

pnpx create-react-app -h

罗列指令及功能
在这里插入图片描述

pnpx create-react-app --info

输出环境信息
在这里插入图片描述

  1. init方法
function init() {const program = new commander.Command(packageJson.name).version(packageJson.version).arguments('<project-directory>').usage(`${chalk.green('<project-directory>')} [options]`).action(name => {projectName = name; //自己定义的项目名字,这里就是my-app}).option('--verbose', 'print additional logs').option('--info', 'print environment debug info').option('--scripts-version <alternative-package>','use a non-standard version of react-scripts').option('--template <path-to-template>','specify a template for the created project').option('--use-pnp').allowUnknownOption().on('--help', () => {console.log(`    Only ${chalk.green('<project-directory>')} is required.`);console.log();console.log(`    A custom ${chalk.cyan('--scripts-version')} can be one of:`);console.log(`      - a specific npm version: ${chalk.green('0.8.2')}`);console.log(`      - a specific npm tag: ${chalk.green('@next')}`);console.log(`      - a custom fork published on npm: ${chalk.green('my-react-scripts')}`);console.log(`      - a local path relative to the current working directory: ${chalk.green('file:../my-react-scripts')}`);console.log(`      - a .tgz archive: ${chalk.green('https://mysite.com/my-react-scripts-0.8.2.tgz')}`);console.log(`      - a .tar.gz archive: ${chalk.green('https://mysite.com/my-react-scripts-0.8.2.tar.gz')}`);console.log(`    It is not needed unless you specifically want to use a fork.`);console.log();console.log(`    A custom ${chalk.cyan('--template')} can be one of:`);console.log(`      - a custom template published on npm: ${chalk.green('cra-template-typescript')}`);console.log(`      - a local path relative to the current working directory: ${chalk.green('file:../my-custom-template')}`);console.log(`      - a .tgz archive: ${chalk.green('https://mysite.com/my-custom-template-0.8.2.tgz')}`);console.log(`      - a .tar.gz archive: ${chalk.green('https://mysite.com/my-custom-template-0.8.2.tar.gz')}`);console.log();console.log(`    If you have any problems, do not hesitate to file an issue:`);console.log(`      ${chalk.cyan('https://github.com/facebook/create-react-app/issues/new')}`);console.log();}).parse(process.argv);if (program.info) {console.log(chalk.bold('\nEnvironment Info:'));console.log(`\n  current version of ${packageJson.name}: ${packageJson.version}`);console.log(`  running from ${__dirname}`);return envinfo //是一个会将当前环境都输出的包.run({System: ['OS', 'CPU'],Binaries: ['Node', 'npm', 'Yarn'],Browsers: ['Chrome','Edge','Internet Explorer','Firefox','Safari',],npmPackages: ['react', 'react-dom', 'react-scripts'],npmGlobalPackages: ['create-react-app'],},{duplicates: true,showNotFound: true,}).then(console.log);}if (typeof projectName === 'undefined') {console.error('Please specify the project directory:');console.log(`  ${chalk.cyan(program.name())} ${chalk.green('<project-directory>')}`);console.log();console.log('For example:');console.log(`  ${chalk.cyan(program.name())} ${chalk.green('my-react-app')}`);console.log();console.log(`Run ${chalk.cyan(`${program.name()} --help`)} to see all options.`);process.exit(1);}// We first check the registry directly via the API, and if that fails, we try// the slower `npm view [package] version` command.//// This is important for users in environments where direct access to npm is// blocked by a firewall, and packages are provided exclusively via a private// registry.checkForLatestVersion() //检查最新的版本号.catch(() => {try {return execSync('npm view create-react-app version').toString().trim(); //执行这个命令可以得到最新的版本号} catch (e) {return null;}}).then(latest => {if (latest && semver.lt(packageJson.version, latest)) {//有最新版本且没有升级到最新的版本,提示要升级到最新的版本了console.log();console.error(chalk.yellow(`You are running \`create-react-app\` ${packageJson.version}, which is behind the latest release (${latest}).\n\n` +'We recommend always using the latest version of create-react-app if possible.'));console.log();console.log('The latest instructions for creating a new app can be found here:\n' +'https://create-react-app.dev/docs/getting-started/');console.log();} else {const useYarn = isUsingYarn(); //判断是否使用yarncreateApp(projectName,program.verbose,program.scriptsVersion,program.template,useYarn,program.usePnp);}});
}
  1. checkForLatestVersion 获取最新的版本号
function checkForLatestVersion() {return new Promise((resolve, reject) => {https  //通过http发送get请求读取版本号.get('https://registry.npmjs.org/-/package/create-react-app/dist-tags',//版本号res => {if (res.statusCode === 200) {let body = '';res.on('data', data => (body += data));res.on('end', () => {resolve(JSON.parse(body).latest);});} else {reject();}}).on('error', () => {reject();});});
}
  1. isUsingYarn():判断是否使用yarn
function isUsingYarn() {return (process.env.npm_config_user_agent || '').indexOf('yarn') === 0; //使用环境变量判断是否使用yarn
}
  1. createApp()
function createApp(name, verbose, version, template, useYarn, usePnp) {const unsupportedNodeVersion = !semver.satisfies(// Coerce strings with metadata (i.e. `15.0.0-nightly`).semver.coerce(process.version),'>=14');if (unsupportedNodeVersion) {console.log(chalk.yellow(`You are using Node ${process.version} so the project will be bootstrapped with an old unsupported version of tools.\n\n` +`Please update to Node 14 or higher for a better, fully supported experience.\n`));// Fall back to latest supported react-scripts on Node 4version = 'react-scripts@0.9.x';}const root = path.resolve(name);const appName = path.basename(root);checkAppName(appName);fs.ensureDirSync(name);if (!isSafeToCreateProjectIn(root, name)) {process.exit(1);}console.log();console.log(`Creating a new React app in ${chalk.green(root)}.`);console.log();// 首先创建一个最基础版const packageJson = {name: appName,version: '0.1.0',private: true,};// 写入fs.writeFileSync(path.join(root, 'package.json'),JSON.stringify(packageJson, null, 2) + os.EOL);const originalDirectory = process.cwd();process.chdir(root);if (!useYarn && !checkThatNpmCanReadCwd()) {process.exit(1);}if (!useYarn) {const npmInfo = checkNpmVersion();if (!npmInfo.hasMinNpm) {if (npmInfo.npmVersion) {console.log(chalk.yellow(`You are using npm ${npmInfo.npmVersion} so the project will be bootstrapped with an old unsupported version of tools.\n\n` +`Please update to npm 6 or higher for a better, fully supported experience.\n`));}// Fall back to latest supported react-scripts for npm 3version = 'react-scripts@0.9.x';}} else if (usePnp) {const yarnInfo = checkYarnVersion();if (yarnInfo.yarnVersion) {if (!yarnInfo.hasMinYarnPnp) {console.log(chalk.yellow(`You are using Yarn ${yarnInfo.yarnVersion} together with the --use-pnp flag, but Plug'n'Play is only supported starting from the 1.12 release.\n\n` +`Please update to Yarn 1.12 or higher for a better, fully supported experience.\n`));// 1.11 had an issue with webpack-dev-middleware, so better not use PnP with it (never reached stable, but still)usePnp = false;}if (!yarnInfo.hasMaxYarnPnp) {console.log(chalk.yellow('The --use-pnp flag is no longer necessary with yarn 2 and will be deprecated and removed in a future release.\n'));// 2 supports PnP by default and breaks when trying to use the flagusePnp = false;}}}run(root,appName,version,verbose,originalDirectory,template,useYarn,usePnp);
}
  1. setCaretRangeForRuntimeDeps()
function setCaretRangeForRuntimeDeps(packageName) {const packagePath = path.join(process.cwd(), 'package.json');const packageJson = require(packagePath);if (typeof packageJson.dependencies === 'undefined') {console.error(chalk.red('Missing dependencies in package.json'));process.exit(1);}const packageVersion = packageJson.dependencies[packageName];if (typeof packageVersion === 'undefined') {console.error(chalk.red(`Unable to find ${packageName} in package.json`));process.exit(1);}// 手动注入react,react-dommakeCaretRange(packageJson.dependencies, 'react');makeCaretRange(packageJson.dependencies, 'react-dom');fs.writeFileSync(packagePath, JSON.stringify(packageJson, null, 2) + os.EOL);
}

手动注入react,react-dom,然后将 cra-template 模板拼上去,就生成了cra代码

  1. 后面就是判断依赖,告诉有哪些异常,异常的话就过滤删除

CRA主要做的事:读取用户的输入,根据用户输入创建出对应的模板,写入到指定的目录下

相关文章:

React进阶之react.js、jsx模板语法及babel编译

React React介绍React官网初识React学习MVCMVVM JSX外部的元素props和内部的状态statepropsstate 生命周期constructorgetDerivedStateFromPropsrendercomponentDidMount()shouldComponentUpdategetSnapshotBeforeUpdate(prevProps, prevState) 创建项目CRA&#xff1a;create-…...

渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法

目录 原理 XML语言解释 什么是xml语言&#xff1a; 以PHP举例xml外部实体注入 XML语言结构 面试题目 如何寻找xxe漏洞 XEE漏洞修复域防御 提高版本 代码修复 php java python 手动黑名单过滤(不推荐) 一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区 原理 XXE&…...

macOS安装Gradle环境

文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21&#xff0c;如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新&#xff08;截止2024.9.13&#xff09;Oracle JDK操作记录 安装Gradle 下载Gradle&#xff0c;解压将其存放到资源java/env目录…...

openwrt下oaf插件编译安装,实现上网行为监控

文章目录 入门级APP青少年模式设备屏幕使用时间电脑浏览器使用时间限制Surpal 介绍安装使用进阶级专业级旁路由方案openwrt路由器固件编译OAF(Open App Filter)安装编译带有oaf的固件固件烧写设备上电启动应用特征库设置黑白名单及应用访问限制骨灰级ref守护孩子视力,用科技“…...

Top期刊算法!RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测

Top期刊算法&#xff01;RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测 目录 Top期刊算法&#xff01;RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于RIME-CNN-BiLSTM-Attention、CNN-BiLSTM-Attention、R…...

GPT-4o背后的语音技术

GPT-4o背后的语音技术 GPT-4o是一个any2any的多模态模型,能够接受文本、音频、图像、视频等多模态输入,也能够生成包含文本、语音、图像和视频等混合内容的多模态输出。本文主要谈语音多模态的实现,并分享一些对于语音研究未来发展的看法。 GPT-4o (“o” 代表 “omni”) …...

数据库存储上下标符号,sqlserver 2008r2,dm8

sqlserver 2008r2&#xff1a; 数据类型需要用nvarchar插入数据时字符串前需要用N create table test( col1 varchar(50), col2 nvarchar(50) ) insert into test(col1,col2) values(U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀,U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀) insert into…...

【25】Word:林涵-科普文章❗

目录 题目​ NO1.2.3 NO4.5.6 NO7.8 NO9.10 NO11.12 不连续选择&#xff1a;按住ctrl按键&#xff0c;不连续选择连续选择&#xff1a;按住shift按键&#xff0c;选择第一个&#xff0c;选择最后一个。中间部分全部被选择 题目 NO1.2.3 布局→纸张方向&#xff1a;横向…...

全面解析计算机网络:从局域网基础到以太网交换机!!!

一、局域网的基本概念和体系结构 特点: 覆盖较小的地理范围较低的时延和误码率局域网内的各节点之间以“帧"为单位进行传输支持单播、广播、多播 单播(一对一发送帧)&#xff1a;如 A->B广播(一对全部发送帧)&#xff1a;如 A->BCDEFG多播(一对部分发送帧)&#xff…...

《 C++ 点滴漫谈: 二十二 》操作符炼金术:用C++ operator重塑代码美学

摘要 C 的 operator 关键字和操作符重载是语言的核心特性之一&#xff0c;使开发者能够扩展内置操作符以适应自定义类型&#xff0c;从而实现更高效、直观的代码表达。本文全面解析了 operator 关键字的基本概念、支持重载的操作符范围及其使用场景&#xff0c;详细介绍了操作…...

Ubuntu 22.04 TLS 忘记root密码,重启修改的解决办法

1.想办法进入这个界面&#xff0c;我这里是BIOS引导的是按Esc按一下就行&#xff0c;UEFI的貌似是按Shift不得而知&#xff0c;没操作过。下移到Advanced options for Ubuntu&#xff0c;按enter 2.根据使用的内核版本&#xff0c;选择带「recovery mode」字样的内核版本&#…...

【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

GraphRAG: Auto Prompt Tuning 实践

GraphRAG 的 Auto Prompt Tuning 功能是一个强大的工具&#xff0c;用于优化知识图谱的生成过程。以下是对该功能的详细介绍和分析&#xff1a; 自动提示调优&#xff08;Auto Prompt Tuning&#xff09; 1. 概念 GraphRAG 的自动提示调优功能旨在为特定领域的知识图谱生成创…...

提示词的艺术----AI Prompt撰写指南(个人用)

提示词的艺术 写在前面 制定提示词就像是和朋友聊天一样&#xff0c;要求我们能够清楚地表达问题。通过这个过程&#xff0c;一方面要不断练习提高自己地表达能力&#xff0c;另一方面还要锻炼自己使用更准确精炼的语言提出问题的能力。 什么样的提示词有用&#xff1f; 有…...

Tensor 基本操作1 | PyTorch 深度学习实战

目录 创建 Tensor常用操作unsqueezesqueezeSoftmax代码1代码2代码3 argmaxitem 创建 Tensor 使用 Torch 接口创建 Tensor import torch参考&#xff1a;https://pytorch.org/tutorials/beginner/basics/tensorqs_tutorial.html 常用操作 unsqueeze 将多维数组解套&#xf…...

CSS 的基础知识及应用

前言 CSS&#xff08;层叠样式表&#xff09;是网页设计和开发中不可或缺的一部分。它用于描述网页的视觉表现&#xff0c;使页面不仅实现功能&#xff0c;还能提供吸引人的用户体验。本文将介绍 CSS 的基本概念、语法、选择器及其在提升网页美观性方面的重要性。 什么是 CSS&…...

贪心算法(题1)区间选点

输出 2 #include <iostream> #include<algorithm>using namespace std;const int N 100010 ;int n; struct Range {int l,r;bool operator <(const Range &W)const{return r<W.r;} }range[N];int main() {scanf("%d",&n);for(int i0;i&l…...

CamemBERT:一款出色的法语语言模型

摘要 预训练语言模型在自然语言处理中已无处不在。尽管这些模型取得了成功&#xff0c;但大多数可用模型要么是在英语数据上训练的&#xff0c;要么是在多种语言数据拼接的基础上训练的。这使得这些模型在除英语以外的所有语言中的实际应用非常有限。本文探讨了为其他语言训练…...

解决 IntelliJ IDEA 项目包后出现“% classes”和“% lines covered”的问题

前言 在使用 IntelliJ IDEA 开发 Java 或其他支持的语言时&#xff0c;您可能会遇到项目包后面意外地出现了“% classes”和“% lines covered”的信息。这些百分比表示的是代码覆盖率&#xff08;Coverage&#xff09;&#xff0c;它们展示了您的测试覆盖了多少比例的类和代码…...

Matlab总提示内存不够用,明明小于电脑内存

目录 前言情况1&#xff08;改matlab最大内存限制&#xff09;情况2&#xff08;重启电脑&#xff09;情况3 前言 在使用matlab中&#xff0c;有时候需要占用的内存并没有超过电脑内存依旧会报错&#xff0c;提示内存不够用&#xff0c;可以尝试下面几种方法&#xff0c;总有一…...

Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)

1. OpenCV简介 1.1 OpenCV定义与功能 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它为计算机视觉应用程序提供了一个通用的基础设施&#xff0c;并加速了在商业产品中使用机器感知。作为BSD许可的产品&…...

leetcode707-设计链表

leetcode 707 思路 本题也是用了虚拟头节点来进行解答&#xff0c;这样的好处是&#xff0c;不管是头节点还是中间的节点都可以当成是中间节点来处理&#xff0c;用同一套方法就可以进行处理&#xff0c;而不用考虑太多的边界条件。 下面题目中最主要的实现就是添加操作addA…...

Linux操作命令之云计算基础命令

一、图形化界面/文本模式 ctrlaltF2-6 图形切换到文本 ctrlalt 鼠标跳出虚拟机 ctrlaltF1 文本切换到图形 shift ctrl "" 扩大 ctrl "-" 缩小 shift ctrl "n" 新终端 shift ctrl "t" 新标签 alt 1,…...

HTML<bdo>标签

例子 指定文本方向&#xff1a; <bdo dir"rtl"> This text will go right-to-left. </bdo> <!DOCTYPE html> <html> <body> <h1>The bdo element</h1> <p>This paragraph will go left-to-right.</p> …...

将IDLE里面python环境pyqt5配置的vscode

首先安装pyqt5全套&#xff1a;pip install pyqt5-tools 打开Vscode&#xff1a; 安装第三方扩展&#xff1a;PYQT Integration 成功配置designer.exe的路径【个人安装pyqt5的执行路径】&#xff0c;便可直接打开UI文件&#xff0c;进行编辑。 配置pyuic,如果下图填写方法使用…...

【C++】结构体(下)

4、结构体指针 作用&#xff1a;通过指针访问结构体中的成员 利用操作符“----->”可以通过结构体指针访问结构体成员。 示例&#xff1a; #include<iostream> #include<string> using namespace std; struct student {//姓名string name;//年龄int age;//分数…...

YOLOv10-1.1部分代码阅读笔记-dataset.py

dataset.py ultralytics\data\dataset.py 目录 dataset.py 1.所需的库和模块 2.class YOLODataset(BaseDataset): 3.class ClassificationDataset(torchvision.datasets.ImageFolder): 4.def load_dataset_cache_file(path): 5.def save_dataset_cache_file(prefix,…...

【电视盒子】HI3798MV300刷机教程笔记/备份遥控码修复遥控器/ADB/线刷卡刷/电视盒子安装第三方应用软件

心血来潮&#xff0c;看到电视机顶盒满天飞的广告&#xff0c;想改造一下家里的电视盒子&#xff0c;学一下网上的人刷机&#xff0c;但是一切都不知道怎么开始&#xff0c;虽然折腾了一天&#xff0c;以失败告终&#xff0c;还是做点刷机笔记。 0.我的机器 年少不会甄别&…...

Mixly米思齐1.0 2.0 3.0 软件windows版本MAC苹果电脑系统安装使用常见问题与解决

Mixly软件应用常见问题 Mixly米思齐编译或上传报错&#xff1f; 1、软件安装与驱动&#xff08;Mixly1-2&#xff09; 1-1 Windows版本 软件及驱动可以在Mixly群&#xff08;QQ群号621937623&#xff09;的群文件夹中找到&#xff0c;或到Mixly在线软件下载链接中重新下安装…...

在 QNAP NAS中使用 Container Station 运行 Docker 的完整指南

QNAP 为用户提供了一个名为 Container Station 的应用&#xff0c;它在 QNAP NAS 上将 Docker 和 LXC 结合在一起&#xff0c;通过图形化界面&#xff0c;让用户更轻松地在 NAS 上管理容器。本文将带你一步步了解如何在 QNAP NAS 上安装和使用 Container Station&#xff0c;以…...

Spark RPC 学习总结

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff1a;https://www.captainai.net/dongkelun 前言 本文从API层面学习总结Spark RPC,暂不涉及源码分析。 Spark 通信历史 最开始: …...

JAVA安全—JWT攻防Swagger自动化Druid泄露

前言 依旧是Java安全的内容&#xff0c;今天主要是讲JWT这个东西&#xff0c;JWT之前讲过了&#xff0c;是Java中特有的身份校验机制&#xff0c;原理我就不再多说了&#xff0c;主要是看看它的安全问题&#xff0c;至于Swagger和Druid顺便讲一下。 Druid泄露 Druid是阿里巴…...

深度学习核函数

一、核函数的基本概念 核函数在机器学习中具有重要应用价值&#xff0c;常用于支持向量机&#xff08;SVM&#xff09;等算法中。 核函数是面试中经常被考到的知识点&#xff0c;对于找工作和实际数据转换都有重要作用。 二、数据建模与核函数的作用 数据越多&#xff0c;可…...

【神经网络基础】

目录 一、神经网络的构成 1.1什么是神经网络&#xff1f; 1.2 激活函数 1.2.1 Sigmoid 1.2.2 Tanh 1.2.3 ReLU 1.2.4 softmax 1.2.5 其他激活函数 1.2.6 选择激活函数 1.3 参数初始化 1.4 模型构建 二、损失函数 2.1 分类问题 2.1.1多分类&#xff08;多分类交叉…...

一些面试常见问题及其回答参考

1、请你自我介绍一下你自己&#xff1f; 回答提示&#xff1a;一般人回答这个问题过于平常&#xff0c;只说姓名、年龄、爱好、工作经验&#xff0c;这些在简历上都有。其实&#xff0c;企业最希望知道的是求职者能否胜任工作&#xff0c;包括&#xff1a;最强的技能、最深入研…...

[JavaScript] 深入理解流程控制结构

文章目录 1. **if-else 语句**基本语法&#xff1a;示例&#xff1a;扩展&#xff1a;else if 2. **switch-case 语句**基本语法&#xff1a;示例&#xff1a;注意事项&#xff1a; 3. **for 循环**基本语法&#xff1a;示例&#xff1a;扩展&#xff1a;for-in 和 for-of 4. *…...

Mysql常见问题处理集锦

Mysql常见问题处理集锦 root用户密码忘记&#xff0c;重置的操作(windows上的操作)MySQL报错&#xff1a;ERROR 1118 (42000): Row size too large. 或者 Row size too large (&#xff1e; 8126).场景&#xff1a;报错原因解决办法 详解行大小限制示例&#xff1a;内容来源于网…...

高级java每日一道面试题-2025年01月19日-框架篇[Mybatis篇]-MyBatis 中见过什么设计模式 ?

如果有遗漏,评论区告诉我进行补充 面试官: MyBatis 中见过什么设计模式 ? 我回答: 1. 工厂模式&#xff08;Factory Pattern&#xff09; 定义&#xff1a;工厂模式是一种创建型模式&#xff0c;它提供了一种创建对象的最佳方式&#xff0c;将对象创建过程抽象化&#xff…...

C++,设计模式,【目录篇】

文章目录 1. 简介2. 设计模式的分类2.1 创建型模式&#xff08;Creational Patterns&#xff09;&#xff1a;2.2 结构型模式&#xff08;Structural Patterns&#xff09;&#xff1a;2.3 行为型模式&#xff08;Behavioral Patterns&#xff09;&#xff1a; 3. 使用设计模式…...

C/C++内存管理(超详解)

目录 1.C/C内存分布 2.C语言动态内存管理 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 3.C动态内存管理 3.1new/delete操作内置类型 3.2new/delete操作自定义类型 3.3operator new与operator delete函数 3.4定位new表达式(placement-new) 1.C/C内存分布 内存中是如…...

【前端】用OSS增强Hexo的搜索功能

文章目录 前言配置 _config.fluid.yml云端实时更新 local-search.xml解决 OSS.Bucket 的跨域问题 前言 原文地址&#xff1a;https://blog.dwj601.cn/FrontEnd/Hexo/hexo-enhance-local-search-with-oss/ 考虑到某著名云服务商提供的云服务器在两年的 99 计划后续费价格高达四…...

智慧校园平台中的信息处理与技术应用

随着信息技术的迅速发展&#xff0c;智慧校园平台已经成为现代教育领域的重要组成部分。智慧校园平台不仅能够提高教学效率&#xff0c;还能够改善学生的学习体验&#xff0c;以及优化学校的管理流程。为了实现这些目标&#xff0c;信息处理技术在智慧校园平台的应用中扮演了至…...

Spring MVC(一)

RestController RestController 是由 Controller 和 ResponseBody 两个注解构成的。 Spring 启动的时候会扫描所有包含 Controller 或者 RestController 注解的类&#xff0c;创建出对外的接口&#xff0c;这样外界就可以从这里与服务器实现交互&#xff0c;如果没有这个注解…...

【王树森搜索引擎技术】概要01:搜索引擎的基本概念

1. 基本名词 query&#xff1a;查询词SUG&#xff1a;搜索建议文档&#xff1a;搜索结果标签/筛选项 文档单列曝光 文档双列曝光 2. 曝光与点击 曝光&#xff1a;用户在搜索结果页上看到文档&#xff0c;就算曝光文档点击&#xff1a;在曝光后&#xff0c;用户点击文档&…...

imbinarize函数用法详解与示例

一、函数概述 众所周知&#xff0c;im2bw函数可以将灰度图像转换为二值图像。但MATLAB中还有一个imbinarize函数可以将灰度图像转换为二值图像。imbinarize函数是MATLAB图像处理工具箱中用于将灰度图像或体数据二值化的工具。它可以通过全局或自适应阈值方法将灰度图像转换为二…...

ThinkPHP 8的一对多关联

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...

医工交叉合作信息汇总,第三期名单分享,近期需要联合申请基金以及课题合作的老师/同学重点关注一下!|合作信息·25-01-17

小罗碎碎念 之前出过两期医工交叉领域合作信息的汇总推送&#xff0c;最近一直没顾上这事&#xff0c;现在重新捡起来&#xff0c;并且把需求向所有的粉丝公开&#xff0c;直接在后台回复“合作信息”就可以获取表格。 截至目前为止&#xff0c;共收集了92条合作信息&#xf…...

深度学习中的张量 - 使用PyTorch进行广播和元素级操作

深度学习中的张量 - 使用PyTorch进行广播和元素级操作 元素级是什么意思&#xff1f; 元素级操作在神经网络编程中与张量的使用非常常见。让我们从一个元素级操作的定义开始这次讨论。 一个_元素级_操作是在两个张量之间进行的操作&#xff0c;它作用于各自张量中的相应元素…...

浅谈云计算20 | OpenStack管理模块(下)

OpenStack管理模块&#xff08;下&#xff09; 五、存储管理5.1 存储管理概述 5.2 架构设计5.2.1 Cinder块存储架构5.2.2 Swift对象存储架构 六、网络管理6.1 网络管理概述6.2 架构解析6.2.1 Neutron网络服务架构6.2.2 网络拓扑架构 6.3 原理与流程6.3.1 网络创建原理6.3.2 网络…...

GitLab集成Jira

GitLab与Jira集成的两种方式 GitLab 提供了两种 Jira 集成&#xff0c;即Jira议题集成和Jira开发面板集成&#xff0c;可以配置一个或者两个都配置。 具体集成步骤可以参考官方文档Jira 议题集成&#xff08;极狐GitLab文档&#xff09;和Jira 开发面板集成&#xff08;极狐G…...