千峰React:组件与逻辑封装(上)
UI组件库及antd安装
UI组件库就是把页面的组件写好了,用的时候直接调用好了
进行一个安装的动作:
总之就是搭积木,可以调用里面写好的组件库拼接,也可以结合使用
antd布局和导航组件
组件总览 - Ant Design
这是通用部分
在用的时候可以去掉基础样式,其中一个方法就是用antd design里面自带的去基础样式,但是视频的方法是旧版的
制造间隙
使用ant design的响应式布局
import { Row, Col, BackTop } from 'antd'
const col = {background: 'red',
}
function App() {return (<div><Row gutter={[10,10]}>//设置水平、竖直间距<Col xs={12} md={8}>//设置响应尺寸<div style={col}>aaaaa</div></Col><Col xs={12} md={8}><div style={col}>bbbbb</div></Col><Col xs={12} md={8}><div style={col}>ccccc</div></Col></Row></div>)
}export default App
小分辨率的时候一行排两个
打分辨率的时候一行排三个
也可以获取ant design的源码
import { Row, Col, Layout } from 'antd'
import 'antd/dist/reset.css'
const { Header, Footer, Sider, Content } = Layoutconst colStyle = {background: 'red'
}
const headerStyle = {textAlign: 'center',color: '#fff',height: 64,paddingInline: 50,lineHeight: '64px',backgroundColor: '#7dbcea',
};
const contentStyle = {textAlign: 'center',minHeight: 120,lineHeight: '120px',color: '#fff',backgroundColor: '#108ee9',
};
const siderStyle = {textAlign: 'center',lineHeight: '120px',color: '#fff',backgroundColor: '#3ba0e9',
};
const footerStyle = {textAlign: 'center',color: '#fff',backgroundColor: '#7dbcea',
};function App() {return (<div>hello App<Row gutter={[10, 10]}><Col xs={12} md={8}><div style={colStyle}>aaaaaa</div></Col><Col xs={12} md={8}><div style={colStyle}>bbbbbb</div></Col><Col xs={12} md={8}><div style={colStyle}>cccccc</div></Col></Row><Layout><Sider style={siderStyle}>Sider</Sider><Layout><Header style={headerStyle}>Header</Header><Content style={contentStyle}>Content</Content><Footer style={footerStyle}>Footer</Footer></Layout></Layout></div> )
}
export default App
六月份学长又说这个不学,我们继续跳
直接学后面的实践
手写antd组件
按钮组件
评分组件
全局提示组件
六月份学长说这一块都别学了
自定义Hook
意思就是自己写一个Hook
写一个获取鼠标定位的hook
import { func } from 'prop-types'
import { useEffect, useState } from 'react'
function useMouse() {const [state, setState] = useState({pageX: NaN,pageY: NaN,})useEffect(() => {function move(e) {setState({pageX: e.pageX,pageY: e.pageY,})}document.addEventListener('mousemove', move)return () => {document.removeEventListener('mousemove', move)}}, [])return state
}function App() {const mouse = useMouse()return (<div>{mouse.pageX},{mouse.pageY}</div>)
}export default App
其实这些自定义hooks也被别人写好了,比如ahooks和react-use
下载ahooks
ahooks暂时不支持raect19,所以需要降版本
npm install ahooks//下载ahooks
import { useMouse } from 'ahooks'
function App() {const mouse = useMouse()return (<div>{mouse.pageX},{mouse.pageY}</div>)
}
export default App
ahooks写的功能比我们的更完善,比如clientX,是相对于可视区的x位移
实际开发一般都用人家的ahooks
ahooks处理ajax请求
import { useRequest } from 'ahooks'
import axios from 'axios'
async function getData() {const res = await axios.get('/cartData.json')console.log('Response:', res.data) // 检查返回的数据return res.data.list
}function App() {const { data, error, loading } = useRequest(getData)if (error) {return <div>{error.message}</div>}if (loading) {return <div>loading...</div>}return (<div>{}</div>)
}
export default App
可以从netWork看见axios的网络请求
在这里致谢蚊子咬学长和六月份学长
function App() {const { data, error, loading } = useRequest(getData)if (error) {return <div>{error.message}</div>}if (loading) {return <div>loading...</div>}return (<div><ul>{data.map((item) => (<li key={item.id}>{item.name}</li>))}</ul></div>)
}
export default App
如果网速比较慢还可以看见loading效果
如果访问的地址出错了会出现报错信息
点击的时候才加载获取数据
onSuccess获取响应成功的结果:
const { data, error, loading ,run} = useRequest(getData, {manual: true,onSuccess(res) {console.log(res)}})
把响应成功的结果渲染到data里
import { useRequest } from 'ahooks'
import axios from 'axios'import { useState } from 'react'
async function getData() {const res = await axios.get('/cartData.json')console.log('Response:', res.data) // 检查返回的数据return res.data.list
}function App() {const [data, setData] = useState([])const { error, loading, run } = useRequest(getData, {manual: true,onSuccess(res) {setData(res)},})if (error) {return <div>{error.message}</div>}if (loading) {return <div>loading...</div>}return (<div><button onClick={() => run()}>点击</button><ul>{data.map((item) => (<li key={item.id}>{item.name}</li>))}</ul></div>)
}
export default App
import { useRequest } from 'ahooks'
import axios from 'axios'import { useState } from 'react'
async function getData() {const res = await axios.get('/cartData.json')console.log('Response:', res.data) // 检查返回的数据return res.data.list
}function App() {const [data, setData] = useState([])const { error, loading, run, refresh } = useRequest(getData, {//refresh保留上次ajax的行为manual: true,onSuccess(res, params) {console.log(params)setData(res)},})if (error) {return <div>{error.message}</div>}if (loading) {return <div>loading...</div>}return (<div><button onClick={() => run('run了一次')}>点击</button><button onClick={() => refresh('refrash了一次')}>刷新</button><ul>{data.map((item) => (<li key={item.id}>{item.name}</li>))}</ul></div>)
}
export default App
上次执行run会log'run了一次',此时再刷新,会记录上次ajax的结果
refresh
:重新执行上一次的请求(包括相同的参数)。
还可以实验mutate修改数据
import { useRequest } from 'ahooks'
import axios from 'axios'import { useState } from 'react'
async function getData() {const res = await axios.get('/cartData.json')console.log('Response:', res.data) // 检查返回的数据return res.data.list
}function App() {const {data ,error, loading, mutate } = useRequest(getData)if (error) {return <div>{error.message}</div>}if (loading) {return <div>loading...</div>}return (<div><button onClick={() => mutate([{ 'id': 1, 'name': '榴莲' }])}>点击修改数据</button><ul>{data.map((item) => (<li key={item.id}>{item.name}</li>))}</ul></div>)
}
export default App
之前写的聊天室切换功能,因为加载时间不同,最后是用useEffect解决的,但是比较麻烦,需要新变量,每次还要做判断
而aHooks的useRequest已经做好内部的清理工作了
import { useRequest } from 'ahooks'
import { useState, useEffect } from 'react'function fetchChat(title) {const delay = title === '电磁场与电磁波' ? 2000 : 1000return new Promise((resolve, reject) => {setTimeout(() => {resolve([{ id: 1, text: title + '1' },{ id: 2, text: title + '2' },{ id: 3, text: title + '3' },])}, delay)})
}function Chat({ title }) {const { data, error, loading } = useRequest(() => fetchChat(title), {refreshDeps:[title]//一旦title改变,重新发起ajax请求})if (error) {return <div>{error.message}</div>}if (loading) {return <div>loading...</div>}return (<div>{data.map((item) => {return <li key={item.id}>{item.text}</li>})}</div>)
}function App() {const [show, setShow] = useState(true)const [title, setTitle] = useState('电磁场与电磁波')const handleClick = () => {setShow(false)}const handleChange = (e) => {setTitle(e.target.value)}return (<div><button onClick={handleClick}>点我退出课堂</button><select value={title} onChange={handleChange}><option value='电磁场与电磁波'>电磁场与电磁波</option><option value='半导体物理'>半导体物理</option></select>{show && <Chat title={title} />}</div>)
}
export default App
ahooks处理请求的高级用法
轮询
import { useRequest } from 'ahooks'
import axios from 'axios'async function getData() {const res = await axios.get('/cartData.json')return res.data.list.sort(() => Math.random() - 0.5)
}function App() {const { data, error, loading } = useRequest(getData, {pollingInterval: 3000,//轮询获取数据,3秒一次})if (error) {return <div>{error.message}</div>}if (loading) {return <div>loading...</div>}return (<div><ul>{data&&data.map((item) => (<li key={item.id}>{item.name}</li>))}</ul></div>)
}
export default App
三秒一次请求
可以防止频闪,具体来说就说加入
loadingDelay: 1000
这行语句,页面渲染的时间如果不在1s内,就会显示加载界面:loading
如果渲染时间在1s内,就不会显示loading,优化页面
不加防抖,每次点击按钮都会获取数据
import { useRequest } from 'ahooks'
import axios from 'axios'async function getData() {const res = await axios.get('/cartData.json')return res.data.list.sort(() => Math.random() - 0.5)
}function App() {const {data, run, error, loading } = useRequest(getData, {manual: true,onSuccess(ret) {console.log(ret)}})if (error) {return <div>{error.message}</div>}if (loading) {return <div>loading...</div>}return (<div><button onClick={run}>点击</button><ul>{data && data.map((item) => <li key={item.id}>{item.name}</li>)}</ul></div>)
}
export default App
加上防抖以后只会执行最后一次的效果
const { data, run, error, loading } = useRequest(getData, {manual: true,debounceWait: 300,onSuccess(ret) {console.log(ret)},})
除了防抖,还有节流,节流是降低触发频率:
import { useRequest } from 'ahooks'
import axios from 'axios'async function getData() {const res = await axios.get('/cartData.json')return res.data.list.sort(() => Math.random() - 0.5)
}function App() {const { data, run, error, loading } = useRequest(getData, {manual: true,throttleWait: 1000,// debounceWait: 300,onSuccess(ret) {console.log(ret)},})if (error) {return <div>{error.message}</div>}if (loading) {return <div>loading...</div>}return (<div><button onClick={run}>点击</button><ul>{data && data.map((item) => <li key={item.id}>{item.name}</li>)}</ul></div>)
}
export default App
触发太多次,都按照设定的时间1秒一次,一秒内一次也没有触发就不执行
离开窗口再回到窗口会再次发起请求
从缓存里取数据,不用重新加载
ahooks处理业务场景
import { useHistoryTravel } from "ahooks"; function App() {const { value='', setValue, backLength, forwardLength, back, forward } =useHistoryTravel()return (<div><input type='text' value={value} onChange={(e)=>setValue(e.target.value)}/><button disabled={backLength <= 0} onClick={back}>后退</button><button disabled={forwardLength<= 0} onClick={forward}>前进</button><br />{value}</div>)
}
export default App
可以控制e.target.value控制输入框的内容到页面渲染上
import { useDynamicList } from "ahooks";
import { MinusCircleOutlined ,PauseCircleOutlined} from "@ant-design/icons";function App() {const { list, remove,insert, replace } = useDynamicList(['David', 'Jack']);return (<div>{list.map((item, index) => {return (<div key={index}><input type="text" value={item} onChange={ (e)=>replace(index,e.target.value)} /><MinusCircleOutlined /><PauseCircleOutlined/></div>)})}<br /><ul>{list.map((item, index) => (<li key={index}>{item}</li>))}</ul></div>)
}
export default App
加入删除和增添功能
import { useDynamicList } from "ahooks";
import { MinusCircleOutlined ,PlusCircleOutlined} from "@ant-design/icons";function App() {const { list, remove,insert, replace } = useDynamicList(['David', 'Jack']);return (<div>{list.map((item, index) => {return (<div key={index}><input type="text" value={item} onChange={ (e)=>replace(index,e.target.value)} /><MinusCircleOutlined onClick={()=>remove(index)}/><PlusCircleOutlined onClick={() => insert(index+1,'')} /></div>)})}<br /><ul>{list.map((item, index) => (<li key={index}>{item}</li>))}</ul></div>)
}
export default App
相关文章:
千峰React:组件与逻辑封装(上)
UI组件库及antd安装 UI组件库就是把页面的组件写好了,用的时候直接调用好了 进行一个安装的动作: 总之就是搭积木,可以调用里面写好的组件库拼接,也可以结合使用 antd布局和导航组件 组件总览 - Ant Design 这是通用部分 在用…...
Windows 10 远程桌面连接使用指南
目录 一、引言 二、准备工作 1、确认系统版本 2、服务器端设置 三、客户端连接 1、打开远程桌面连接程序 2、输入连接信息 3、输入登录凭证 4、开始使用远程桌面 四、移动端连接(以 iOS 为例) 1、下载安装应用 2、添加远程计算机 3、进行连接…...
使用Kali中的Metasploit生成木马控制Windows系统
使用Kali中的Metasploit生成木马控制Windows系统 (第九天 9.20) 一、kali及Metasploit kali基于debin的数字取证系统,上面集成很多渗透测试工具,其前身是BT5 R3(BrackTrack),在信息搜集方面发…...
Python与Web3.py库:构建去中心化应用的未来
Python与Web3.py库:构建去中心化应用的未来 在区块链的世界里,“去中心化”是最核心的理念之一,它赋予了用户更多的控制权和自由,消除了传统中心化系统中的单点故障和信任问题。而在这场技术革命中,Web3.0无疑是最受瞩…...
《Python实战进阶》No 8:部署 Flask/Django 应用到云平台(以Aliyun为例)
第8集:部署 Flask/Django 应用到云平台(以Aliyun为例) 2025年3月1日更新 增加了 Ubuntu服务器安装Python详细教程链接。 引言 在现代 Web 开发中,开发一个功能强大的应用只是第一步。为了让用户能够访问你的应用,你需…...
RAP: Efficient Text-Video Retrieval with Sparse-and-Correlated Adapter
标题:RAP:基于稀疏相关适配器的高效文本视频检索 原文链接:RAP: Efficient Text-Video Retrieval with Sparse-and-Correlated Adapter - ACL Anthology 发表:ACL-2024(NLP领域CCF A类) 摘要 文本-视频检索(TVR࿰…...
C++ ++++++++++
初始C 注释 变量 常量 关键字 标识符命名规则 数据类型 C规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存 整型 sizeof关键字 浮点型(实型) 有效位数保留七位,带小数点。 这个是保…...
用Python之requests库调用大型语言模型(LLM)API的流式输出与非流式输出比较
文章目录 1. 非流式输出与流式输出概述2. 非流式输出2.1 代码实例12.2 代码实例2 3. 流式输出3.1 流式输出的定义和作用3.2 流式输出适用的场景3.3 流式输出的实现方式与实现技术3.4 代码实例33.5 代码实例4 4. 小结 1. 非流式输出与流式输出概述 大模型收到输入后并不是一次性…...
JavaEE基础之- 过滤器和监听器Filter and Listener
目录 1. 过滤器 Filter 1.1. 初识过滤器 1.1.1. 过滤器概念 1.1.2. 过滤器例子 1.2. 过滤器详解 1.2.1. 过滤器生命周期 1.2.2. FilterConfig 1.2.3. FilterChain 1.1.4. 过滤器执行顺序 1.2.5. 过滤器应用场景 1.2.6. 过滤器设置目标资源 1.2.7. 过滤器总结 1.3 过滤…...
JavaAdv01——字节流和字符流
一、核心概念解析 1. 字节流(Byte Streams) 字节流家族: 输入流:InputStream(抽象类) FileInputStream ByteArrayInputStream BufferedInputStream 输出流:OutputStream FileOutputStream…...
HarmonyOS 5.0应用开发——多线程Worker和@Sendable的使用方法
【高心星出品】 文章目录 多线程Worker和Sendable的使用方法开发步骤运行结果 多线程Worker和Sendable的使用方法 Worker在HarmonyOS中提供了一种多线程的实现方式,它允许开发者在后台线程中执行长耗时任务,从而避免阻塞主线程并提高应用的响应性。 S…...
AI赋能传热学研究:创新与乐趣的深度融合
在科技飞速发展的当下,人工智能(AI)已逐渐渗透到各个领域,为不同行业带来了前所未有的变革与机遇。对于传热学研究而言,AI的介入不仅极大地提高了研究效率,还为研究者带来了全新的体验和思考。本文将深入探…...
Hive-03之传参、常用函数、explode、lateral view、行专列、列转行、UDF
大数据分析利器之hive 一、目标 掌握hive中select查询语句中的基本语法掌握hive中select查询语句的分组掌握hive中select查询语句中的join掌握hive中select查询语句中的排序 二、要点 1、hive的参数传递 1、Hive命令行 语法结构 hive [-hiveconf xy]* [<-i filename&…...
如何将Vue项目部署至 nginx
一、准备工作 1.确保安装了开发软件VS Code(此处可查阅安装 VS Code教程),确保相关插件安装成功 2.安装Node.js和创建Vue项目(此处可查阅安装创建教程) 3.成功在VS Code运行一个Vue项目(此处可查阅运行教…...
SwiftUI之状态管理全解析
文章目录 引言一、`@State`1.1 基本概念1.2 初始化与默认值1.3 注意事项二、`@Binding`2.1 基本概念2.2 初始化与使用2.3 注意事项三、`@ObservedObject`3.1 基本概念3.2 初始化与使用3.3 注意事项四、`@EnvironmentObject`4.1 基本概念4.2 初始化与使用4.3 注意事项五、`@Stat…...
Java-servlet(一)Web应用与服务端技术概念知识讲解
Java-servlet(一)Web应用与服务端技术概念知识讲解 前言一、Web 应用1.WEB CS BS 对比2.WEB 介绍3.web 与 http 的关系 二、servlet服务端技术1. 公共网关接口(CGI)2. servlet 是什么3.servlet 作用4. servlet 特性 前言 在当今时…...
多个pdf合并成一个pdf的方法
将多个PDF文件合并优点: 能更容易地对其进行归档和备份.打印时可以选择双面打印,减少纸张的浪费。比如把住宿发票以及滴滴发票、行程单等生成一个pdf,双面打印或者无纸化办公情况下直接发送给财务进行存档。 方法: 利用PDF24 Tools网站 …...
数据集笔记:新加坡停车费
data.gov.sg 该数据集包含 新加坡各停车场的停车费,具体信息包括: 停车场名称(Carpark):如 Toa Payoh Lorong 8、Ang Mo Kio Hub、Bras Basah Complex 等。停车区域类别(Category):…...
易错点abc
在同一个输入流上重复创建Scanner实例可能会导致一些问题,包括但不限于输入流的混乱。尤其是在处理标准输入(System.in)时,重复创建Scanner对象通常不是最佳实践,因为这可能导致某些输入数据丢失或者顺序出错。 为什么…...
leetcode第39题组合总和
原题出于leetcode第39题https://leetcode.cn/problems/combination-sum/description/题目如下: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以…...
【iOS】小蓝书学习(七)
小蓝书学习(七) 前言第47条:熟悉系统框架第48条:多用枚举块,少用for循环第50条:构建缓存使选用NSCache而非NSDictionary第51条:精简initialize与load的实现代码第52条:别忘了NSTimer…...
基于第三方SDK的Windows平台全功能RTMP|RTSP直播播放器深度解析
一、引言 在当今数字化时代,直播技术的应用场景不断拓展,从娱乐直播到教育、医疗、工业等多个领域,都对直播播放器的功能和性能提出了更高的要求。本文将介绍一款基于第三方SDK实现的全功能直播播放器,从技术实现、功能特点、用户…...
命名实体识别与文本生成算法
在自然语言处理(NLP)的浩瀚星空中,命名实体识别(Named Entity Recognition, NER)与文本生成算法如同两颗璀璨的星辰,各自闪耀,又相互辉映,共同推动着人工智能技术在语言理解与生成领…...
题解 | 牛客周赛83 Java ABCDEF
目录 题目地址 做题情况 A 题 B 题 C 题 D 题 E 题 F 题 牛客竞赛主页 题目地址 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ 做题情况 A 题 输出两个不是同一方位的字符中的任意一个就行 import java.io.*; import java.math.*; import java…...
样式和ui(待更新)
element-plus 先在项目下执行安装语句执行按需导入的命令按照官方文档修改vitest.json sass样式定制 npm -i sass -D在项目下准备定制的样式文件 styles/element/index.scss(!注意这里是.scss文件在vitest.json 修改配置文件 Components({resolvers: [ElementPlusResolver(…...
「Selenium+Python自动化从0到1②|2025浏览器操控7大核心API实战(附高效避坑模板))」
Python 自动化操作浏览器基础方法 在进行 Web 自动化测试时,操作浏览器是必不可少的环节。Python 结合 Selenium 提供了强大的浏览器操作功能,让我们能够轻松地控制浏览器执行各种任务。本文将详细介绍如何使用 Python 和 Selenium 操作浏览器的基本方法…...
C++的类和对象入门
目录 目录 目录 一、类 1.1类的定义 1.2访问限定符 1.3类域 1.4类的命名规范 1.5class和struct的默认访问权限 二、类的实例化 2.2对象的大小和存储 2.3空类的大小 三、this指针 3.1this指针的定义 3.2this指针的作用 3.2.1区分同名变量和局部变量 3.2.2返回对象…...
【清华大学】DeepSeek从入门到精通完整版pdf下载
DeepSeek从入门到精通.pdf 一共104页完整版 下载链接: https://pan.baidu.com/s/1-gnkTTD7EF2i_EKS5sx4vg?pwd1234 提取码: 1234 或 链接:https://pan.quark.cn/s/79118f5ab0fd 一、DeepSeek 概述 背景与定位 DeepSeek 的研发背景 核心功能与技术特点(…...
deepseek使用记录18——文化基因之文化融合
文明长河中的生命浪花 在洛阳白马寺的银杏树下,年轻母亲指着"农禅并重"碑刻给孩子讲述祖辈耕作的故事;在哔哩哔哩的直播间里,00后女孩穿着汉服跳起街舞,弹幕飘过"这才是文化缝合怪"。当文明交融的宏大叙事照…...
Java 大视界 -- Java 大数据在智慧文旅游客流量预测与景区运营优化中的应用(110)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
面试题:说一下你对DDD的了解?
面试题:说一下你对DDD的了解? 在面试中,关于 DDD(领域驱动设计,Domain-Driven Design) 的问题是一个常见的技术考察点。DDD 是一种软件设计方法论,旨在通过深入理解业务领域来构建复杂的软件系统。以下是一个清晰、详细的回答模板,帮助你在面试中脱颖而出: DDD 的定义…...
网络编程——UDP
UDP编程使用套接字(Socket)进行通信。下面是基于UDP协议进行网络编程的基本步骤。 1. 创建套接字 首先,客户端和服务器都需要通过 socket() 系统调用创建一个UDP套接字。 2. 配置地址和端口 UDP是无连接的,因此你不需要像TCP一…...
【网络安全 | 渗透测试】GraphQL精讲二:发现API漏洞
未经许可,不得转载。 推荐阅读:【网络安全 | 渗透测试】GraphQL精讲一:基础知识 文章目录 GraphQL API 漏洞寻找 GraphQL 端点通用查询常见的端点名称请求方法初步测试利用未清理的参数发现模式信息使用 introspection探测 introspection运行完整的 introspection 查询可视化…...
代码随想录Day23 | 39.组合总和、40.组合总和II、131.分割回文串
39.组合总和 自己写的代码: class Solution { public:vector<int> path;vector<vector<int>> res;int sum0;void backtracking(vector<int>& candidates,int target,int startIndex){if(sum>target) return;if(sumtarget){res.pus…...
MyBatis 新手入门教程:基础操作篇
MyBatis 新手入门教程:基础操作篇 适合人群:无 MyBatis 使用经验者 (完整版3.3准时发,此篇为新手入门的基础操作) 一、MyBatis 是什么? 简单理解: MyBatis 是一个帮你操作数据库的工具&#x…...
zjbdt
嵌入式软件工程师可以通过考取相关职业证书来提升专业能力和职业竞争力。以下是几种含金量较高且广受认可的证书: 1. NIEH 嵌入式技术工程师证书 颁发机构:教育部考试中心级别:初级、中级、高级内容:涵盖嵌入式系统的基础理论、开…...
行为型模式 - 中介者模式 (Mediator Pattern)
行为型模式 - 中介者模式 (Mediator Pattern) 中介者模式的核心思想是将对象之间的复杂交互封装到一个中介者对象中,从而降低对象之间的耦合度。 import java.util.ArrayList; import java.util.List;// 抽象中介者类 abstract class TowerMediator {public abstra…...
如何使用C#与SQL Server数据库进行交互
一.创建数据库 用VS 创建数据库的步骤: 1.打开vs,创建一个新项目,分别在搜素框中选择C#、Windows、桌面,然后选择Windows窗体应用(.NET Framework) 2.打开“视图-服务器资源管理器”,右键单击“数据连接”࿰…...
同步类型对比
同步类型对比 特性准同步 (Quasi-Synchronization)完全同步 (Complete Synchronization)渐进同步 (Asymptotic Synchronization)定义系统状态在有限时间内接近同步,但存在微小误差。系统状态在有限时间内完全一致。系统状态随时间趋近于同步,但可能需要…...
python爬虫Scapy框架(1)
简介 什么是框架? 所谓的框,其实说白了就是一个【项目的半成品】,该项目的半成品需要被集成了各种功能且具有较强的通用性。 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非…...
java容器 LIst、set、Map
Java容器中的List、Set、Map是核心数据结构,各自适用于不同的场景 一、List(有序、可重复) List接口代表有序集合,允许元素重复和通过索引访问,主要实现类包括: ArrayList 底层结构:动态数组…...
2W8000字 LLM架构文章阅读指北
❝ 大模型架构专栏已经更新了30多篇文章。完整的专栏内容欢迎订阅: LLM 架构专栏 1、LLM大模型架构专栏|| 从NLP基础谈起 2、 LLM大模型架构专栏|| 自然语言处理(NLP)之建模 3、 LLM大模型架构之词嵌入(Part1) 3、 LLM…...
Milkv-duo256 接入tuya 云并实现远程智能控制
tuyaopen-embedded-core 是将 https://github.com/tuya/tuyaopen 连接 tuya 云相关核心组件重新组织,可快速嵌入至各种嵌入式平台使用。 tuyaopen-embedded-core 可通过 WiFi、有线以太网、CAT-1、4G 等多种方式接入涂鸦云,实现设备远程控制、OTA 等功能…...
Hadoop之02:MR-图解
1、不是所有的MR都适合combine 1.1、map端统计出了不同班级的每个学生的年龄 如:(class1, 14)表示class1班的一个学生的年龄是14岁。 第一个map任务: class1 14 class1 15 class1 16 class2 10第二个map任务: class1 16 class2 10 class…...
YOLOv8目标检测推理流程及C++代码
这部分主要是使用c++对Onnx模型进行推理,边先贴代码,过段时间再详细补充下代码说明。 代码主要分成三部分,1.main_det.cpp推理函数主入口;2.inference_det.h 头文件及inference_det.cpp具体函数实现;3.CMakeList.txt. 1.main_det 推理配置信息全部写在config.txt中,执行…...
【AVRCP】深入解析AVRCP应用层:功能支持与映射
在最近的项目开发中,深入研究了Audio/Video Remote Control Profile(AVRCP)的应用层特性。在蓝牙音频/视频远程控制规范(AVRCP)的架构中,应用层扮演着至关重要的角色,它定义了符合该规范的设备所…...
springboot之HTML与图片生成
背景 后台需要根据字段动态生成HTML,并生成图片,发送邮件到给定邮箱 依赖 <!-- freemarker模板引擎--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifa…...
Hive-04之存储格式、SerDe、企业级调优
一、主题 hive表的数据压缩和文件存储格式hive的自定义UDF函数hive的JDBC代码操作hive的SerDe介绍和使用hive的优化 二、要点 1. hive表的文件存储格式 Hive支持的存储数的格式主要有:TEXTFILE(行式存储) 、SEQUENCEFILE(行式存储)、ORC&…...
链表的概念和结构
文章目录 1. 链表的概念2. 链表的分类3. 单向不带头非循环链表3.1 接口设计(SList.h)3.2 接口实现(SList.c)1)打印和创建结点2)头尾插入删除3)查找和插入4)删除和销毁 3.3 完整代码S…...
使用AI后为什么思考会变得困难?
使用AI后为什么思考会变得困难? 我总结了四篇近期的研究论文,来展示AI是如何以及为什么侵蚀我们的批判性思维能力。 作者使用AI制作的图像 前言:作者在这篇文章中,借AI技术的崛起,揭示了一场悄然发生的思想博弈。表面…...