自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zy010101博客

目前在做Python开发,网络安全。

  • 博客(519)
  • 资源 (9)
  • 收藏
  • 关注

原创 React受控表单绑定

在 React 中,受控组件(Controlled Component)是指表单元素的值由 React 组件的 state 管理,React 通过 onChange 事件监听输入变化,并实时更新 state,从而控制表单输入值。

2025-03-30 14:15:21 340

原创 React 直接操作 DOM

这个例子中,我们首先使用 useRef Hook 创建了一个名为 inputRef 的 ref 对象,并将其赋值给组件的 ref 属性。然后,在组件中,我们通过 ref.current 访问该 ref 对象,获取到 DOM 元素。一般而言,我们在 React 中使用虚拟 DOM 来操作 DOM,但是有些时候,我们需要直接操作 DOM。需要注意的是,在 DOM 可用时,我们才能够使用 ref.current 访问 DOM 元素。因此,在组件渲染之前,我们无法获取到 DOM 元素。

2025-03-30 14:13:30 425

原创 React 组件之间的通信

对于 React 组件之间的通信,我们首先了解一下 React 组件通信的设计理念。

2025-03-26 22:43:03 1169

原创 React组件简介

在 React 中,组件(Component) 是 UI 的基本构建块。可以把它理解为一个独立的、可复用的 UI 单元,类似于函数,它接受输入(props),然后返回 React 元素来描述 UI。

2025-03-26 22:42:03 1065

原创 JSX入门

JSX(JavaScript XML)是一种 React 语法扩展,它允许你在 JavaScript 代码中编写类似 HTML 的结构。正如在 index.js 文件中看到的那样。本质上它只是 JavaScript 的一种语法糖(适用于 React 框架的 DSL,它专门用于描述 UI 结构。JSX 让 React 组件的编写更直观),最终会被编译成普通的 JavaScript 代码。

2025-03-23 18:34:32 990

原创 React 开发环境搭建

npm 是 Node.js 的包管理工具,它允许你安装和运行 Node.js 的第三方模块。它的使用非常简单,我们可以通过来安装指定的软件包,默认情况下软件包会被安装到当前文件树中的 node_modules 子文件夹下。在这种情况下,npm 还会在当前文件夹中存在的 package.json 文件的 dependencies 属性中添加xxx条目。可以只指定包名称,不指定版本,版本是可选项,默认会安装最新的版本。npm update。

2025-03-23 18:31:14 949

原创 CSS复合选择器

在 CSS 中,为了更方便的对元素进行样式设置,通常可以使用复合选择器。以下介绍一些常用的复合选择器。

2025-02-25 00:46:55 373

原创 CSS基础选择器和文字属性控制

层叠样式表(Cascading Style Sheets),是一种样式表语言,它和HTML一起被用来描述网页的样式。HTML 主要用来定义网页的内容,也就是骨架,CSS 用来定义网页的样式。CSS 是由选择器和属性声明组成的。选择器用来选择元素,属性声明用来设置元素的样式。

2025-02-25 00:46:06 866

原创 HTML列表,表格和表单

定义列表(Definition List)在 HTML 中以 dl 标签表示,每个定义项以 dt 标签表示,每个定义描述以 dd 标签表示。以下是一个简单的定义列表的表示例:</</</</</</</dl 标签只能包含 dt 和 dd 标签,dt 标签表示定义项,dd 标签表示定义描述。dt 和 dd 标签可以包含文本或其他元素。Term 1Term 2Term 3这是默认的样式,一般我们都是通过 CSS 来控制它们的样式。

2025-02-23 21:35:09 1281

原创 HTML标签

hr><hr />

2025-02-23 21:33:17 1383

原创 Android逆向环境搭建之刷机和root(一)

推荐真机,真机需要能够解锁BootLoader,并且能够root。推荐 Google 的 Pixel 系列手机,可以在淘宝,咸鱼等平台购买二手手机,注意一定要解锁BootLoader,或者让卖手机的人给你root,并安装 Magisk。如果是使用国产的手机,推荐使用小米的手机,目前小米的手机可以解锁BootLoader,但是条件比较苛刻,需要答题,需要等待 7 天才能解锁BootLoader。后续教程中,笔者会使用一台 Redmi K40 手机作为示例。

2024-12-09 01:18:52 1304

原创 Java 数组和方法(六)

在 Java 中,数组是一种用于存储相同类型的数据的数据结构。数组在 Java 中以对象形式存在,并且可以包含任意数量的元素。数组的大小在创建时确定,并且一旦创建就不能改变。这点和 C/C++ 是一致的。在 Java 中,数组的元素可以是任何类型,包括基本类型和引用类型。使用循环来操作是 Java8 之前的推荐方式,Java8 之后提供了 stream API,可以更简洁地实现数组的操作。stream API 提供了更多的方法,例如 filter、map、reduce 等,可以满足各种数组操作的需求。

2024-11-20 22:17:38 793 1

原创 Java 流程控制(五)

在Java 中,我们可以使用 if-else 语句、switch-case 语句和循环语句来控制程序的流程。Java 的这些流程控制语句和 C/C++ 的语句很相似。我们通过一些例子来学习 Java 的流程控制。

2024-11-17 22:01:35 564

原创 Java输入输出,类型转换和运算符(四)

Java 提供了非常方便的输入输出,我们可以直接从键盘输入数据,也可以将数据输出到屏幕上。输入和输出的类有 Scanner 和 System.out。输入,输出和 C++ 很类似,Java 在输入输出上做了一些改进,例如,Scanner 类提供了一系列的方法,用于读取各种类型的数据,如整数、浮点数、字符串等。另外,输出方法也提供了一些改进,可以使用 println() 方法直接输出一行,也可以使用 printf() 方法来格式化输出,控制输出的格式。

2024-11-12 22:04:05 644

原创 Java基本类型,注释,变量和常量(三)

java 作为一个类 C++ 语言的子集,所以注释的语法和 C++ 一样。Java 支持 3 种注释方式:单行注释,多行注释,文档注释。关于 Java 文档注释,可以参考。

2024-11-11 23:40:53 398

原创 使用 IDEA 创建 Java 项目(二)

一般创建 Java 项目可以创建一个空项目,然后在空项目中添加模块,在模块中编写包,包中包含 Java 类。如果你的 JDK 没有被 IDEA 自动找到的话,可以手动选择 JDK。我们先来学习 Intellij 构建系统下的 Java 项目。后面在学习 Maven。创建完工程之后,右键项目名称会出现新建,我们选择新建一个模块。模块起名为 HelloWorld之后,我们在创建好的模块下的 src 文件夹上右键,选择创建一个包。

2024-11-10 19:50:17 672

原创 安装JDK和编写第一个程序(一)

本教程是一名曾经的C++程序员(已经很久没有写过C++)学习Java的笔记。旨在为C++程序员提供一个快速入门Java的教程。

2024-11-10 18:20:55 513

原创 URL重定向漏洞

未验证的重定向可能发生在 web 应用程序接受不可信输入时,这可能导致 web 应用程序将请求重定向到包含不可信输入的 URL。通过修改不可信的 URL 输入为恶意网站,攻击者可能成功发起网络钓鱼骗局,盗取用户凭据。由于修改后的链接中的服务器名称看起来和原始网站相同(例如:www.example.com 和 www. eexample.com),网络钓鱼尝试可能看起来更具可信度。

2024-10-22 20:57:11 840

原创 SSRF漏洞

服务器端请求伪造(Server-Side Request Forgery, SSRF)是一种由攻击者控制服务器发送恶意请求的安全漏洞。攻击者可以利用 SSRF 在受害服务器内部发起网络请求,进而访问未授权的资源或服务。

2024-10-09 18:46:09 1269

原创 Rust交叉编译

实际上 Cargo 已经准备了很多目标平台,我们可以通过命令来查看可以交叉编译的平台。对于 Windows 和 Linux 而言,大多数情况下,通过安装目标平台的支持之后,就可以使用来编译出对应平台的可执行文件。但是在编译 MacOS 的时候遇到了问题,它需要 macOS SDK,对于普通场景而言,你只需要在 MacOS 上编译就行了,但是对于自动化的构建流程而言,这将是极大的麻烦。但是 zig 有一个强大的工具链,支持交叉编译和多版本的 glibc(Rust 不支持低版本的 glibc)。

2024-08-08 01:49:20 1309 2

原创 电子邮件伪造

电子邮件伪造是指发送者故意篡改邮件头部信息,以使邮件看起来似乎是来自另一个人或组织的行为。这种行为可能用于欺骗、诈骗、垃圾邮件发送等目的。

2024-03-18 00:23:31 9220 3

原创 Rust源码分析——Rc 和 Weak 源码详解

1. rust中所有权机制在图这种数据结构中,一个节点可能被多个其它节点所指向。那么如何表示图这种数据结构?2. 在多线程中,多个线程可能会持有同一个数据?如何解决这个问题。

2023-09-10 23:21:13 1152 2

原创 rust中的reborrow和NLL

我们看下面这段代码我们知道可变引用是没有实现Copy trait的,因此,当ref1传递给add函数之后,其所有权应该被转移到add函数内,之后应该无法使用ref1,但是上面这段代码是可以编译,运行的。这是为什么呢?经过辛苦的寻找,在github上找到了相关的pull request以及rust核心开发者nikomatsakis在中提到的reborrow。现在我们知道了reborrow的存在,。我们来看下面这个例子。_ref3 和 _ref4 在被我们声明了不同的数据类型,但是rust编译器并没有反对。

2023-09-04 01:07:10 1088

原创 rust声明式宏

在 rust 中,我们一开始就在使用宏,例如 println!, vec!等。看起来宏和函数在使用时只是多了一个!。实际上这些宏都是声明式宏(也叫示例宏或macro_rules!),rust 还支持过程宏,过程宏为我们提供了强大的元编程工具。

2023-07-19 21:57:57 28828 2

原创 warp框架教程5-Filter系统中各个模块

该模块用来返回一个 file response,在较小的项目下通常是有用的,因为这个时候我们可能不会使用专门的文件系统来存储文件,而是直接在我们的后端 API 中进行处理。因此,我们通常需要使用的方法只剩下一个,那就是 json, 使用 json 方法可以提取json 反序列化后的内容,前提是我们需要安装 serde_json 来提供反序列化的能力。cors 模块只有一个方法,就是 cors 方法,使用它可以产生一个 cors 对象,通过该对象,我们可以设置允许的跨域请求方法,允许的跨域来源。

2023-07-16 21:09:23 604

原创 warp框架教程4-Filter系统中的方法介绍

过滤器可以选择性地从 request 中提取一些数据,将其与其他数据组合、修改,并将某个值作为 response 返回。过滤器的强大之处在于能够将其拆分为小的子集,然后在应用程序的各个部分中进行链式调用和重用。正如我们在前文见到的自定义请求方法一样。filter 是从元组中提取值的。如果一个 filter 提取了一个元组(String,),那就意味着它提取了一个String类型。如果你对该过滤器的结果进行使用(map或者and_then中的func得到的参数就是过滤器返回的值),那么func的参数类型将会确

2023-07-13 22:22:53 662

原创 warp框架教程3-path, method和自定义请求方法

path 是 warp 中的路由系统, 一个 web 框架的灵魂所在, 一个优美的路由系统可以给我们带来非常良好的使用体验, 而 warp 的路由体验本身就是非常 nice 的。在本文中将展示一个 RESTful 风格的 API 设计。下面先来学习一下 path 模块。

2023-07-10 20:44:08 1054

原创 warp框架教程2-log模块,addr模块和header模块

从本文开始,我们将介绍 warp 中 Filter 的核心模块。在中有 filter 相关模块的介绍, 本文来介绍其中的 addr,header 和 log。

2023-07-02 22:22:29 901

原创 rust warp框架教程1-helloworld

warp is a super-easy, composable, web server framework for warp warp建立在hyper之上,因此,warp天生支持异步,HTTP/2,以及“正确的HTTP实现”。warp的强大之处在于其提供的filter系统,它帮助我们实现了非常灵活的对HTTP的处理。我们可以来先看一下这个示例中,使用and组合了多个Filter。map从这个示例中,我们可以看到,warp带来的非常灵活的 Filter 系统,可以让我们很容易的处理 HTTP 中的各种参数。

2023-07-02 18:25:59 1835 1

原创 rust类型转换

Rust 是类型安全的语言,因此在 Rust 中做类型转换不是一件简单的事。

2023-06-06 21:22:30 2277 6

原创 rust多线程

在rust中,多线程编程不算困难,但是也需要留心和别的编程语言中不同的地方。rust的标准库中提供的thread库来帮助我们进行多线程编程。在使用的时候需要使用来引入thread库即可。

2023-05-27 17:02:18 1904 5

原创 rust迭代器

迭代器模式允许你对一个序列的项进行某些处理。迭代器(iterator)负责遍历序列中的每一项和决定序列何时结束的逻辑。当使用迭代器时,我们无需重新实现这些逻辑。。

2023-05-17 23:34:04 1207 3

原创 rust智能指针

一个类型为 T 的对象 foo,如果,那么,相关 foo 的引用 &foo 在应用的时候会自动转换为 &U。如前所述,我们需要实现智能指针,那么只需要实现Deref trait和Drop trait即可。println!println!("{}" , v);// 当引用在传给函数或方法时,自动进行隐式deref调用。我们为MyBox实现了Drop trait和 Deref trait,从而让MyBox变为智能指针。我们的drop接口方法实际上什么都没干,只是打印了Drop。

2023-05-06 21:35:06 1809 2

原创 rust闭包(Closure)

闭包在现代化的编程语言中普遍存在。闭包是一种匿名函数,它可以赋值给变量也可以作为参数传递给其它函数,不同于函数的是,它允许捕获调用者作用域中的值。Rust 闭包在形式上借鉴了 Smalltalk 和 Ruby 语言,与函数最大的不同就是它的参数是通过 |parm1| 的形式进行声明,如果是多个参数就 |param1, param2,…|, 下面给出闭包的形式定义:如果只有一个返回表达式的话,定义可以简化为:闭包可以接受0个或者多个参数,写在||里面;闭包体中是实际执行的代码;闭包可以捕获任何它周围

2023-04-18 21:54:38 1714

原创 编写rust测试程序

format!("Hello {}!let target = "张三";assert!(result . contains(target) , "你的问候中并没有包含目标姓名{target},你的问候是 `{result}`");} }failures:thread 'tests::greeting_contains_name' panicked at '你的问候中并没有包含目标姓名张三,你的问候是 `Hello zhangsan!0 ignored;

2023-04-16 19:55:50 1104

原创 rust的package,crate,module

rust提供了非常优秀的包管理器cargo,我们可以使用crate,module,package来组织代码。crate是rust在编译时最小的单元。crate可以包含模块,模块可以定义在其他文件,然后和crate一起编译。crate 有两种形式:二进制项和库。二进制项 可以被编译为可执行程序,比如一个命令行程序或者一个服务器。它们必须有一个 main 函数来定义当程序被执行的时候所需要做的事情。目前我们所创建的 crate 都是二进制项。库 并没有 main 函数,它们也不会编译为可执行程序,它们提供一些诸

2023-04-05 20:02:53 870 4

原创 Rust错误处理

通常用于从系统全局角度来看可以接受的错误,例如处理用户的访问、操作等错误,这些错误只会影响某个用户自身的操作进程,而不会对系统的全局稳定性产生影响,刚好相反,该错误通常是全局性或者系统性的错误,例如数组越界访问,系统启动时发生了影响启动流程的错误等等,这些错误的影响往往对于系统来说是致命的。

2023-03-26 20:51:15 2347

原创 rust生命周期

在大多数时候,无需手动声明,因为编译器能够自动推导。当编译器无法自动推导出生命周期的时候,就需要我们手动标明生命周期。。

2023-03-16 21:32:51 1006 3

原创 rust的vector和hashmap

动态数组Vector在大多数语言中都会提供动态数组这样基础的数据结构。rust也不例外。动态数组允许我们存储多个值,这些值在内存中一个紧挨着另一个排列。动态数组中只能存储相同类型的元素。创建动态数组使用Vec::new()创建动态数组或者是使用宏vec![]创建数组。例如:fn main() { let mut a = Vec::new(); a.push(1); let b = vec![1]; println!("a:{}", a[0]); print

2023-03-14 22:29:19 851

原创 Rust特征对象(Trait Object)

我们直接来看一段代码。它展示了特征对象的两种定义方式。// 定义特征Draw trait Draw {} // 为u8类型实现Draw特征 impl Draw for u8 {format!("u8: {}" , * self) } } // 为f64类型实现Draw特征 impl Draw for f64 {format!

2023-03-14 22:28:52 1987

20211001红色底左右两侧的登录注册页.zip

登录注册页面

2021-10-02

bookmanager.zip

bookmanager.zip

2021-01-25

基于51单片机的电子琴设计.zip

本资源对应于博客“基于51单片机设计的简易电子琴”

2020-07-02

二叉树的操作集合(C++语言)

二叉树的层序建立,先序建立。二叉树的前序遍历,中序遍历,后序遍历,层序遍历,求二叉树的高度,输出二叉树的叶节点。递归版本和非递归版本的实现都有。

2018-10-12

1602使用手册和字符手册

1602的使用手册,包括1602的指令,时序图,以及1602的字符手册。

2018-05-23

单片机开发USB转串口CH340驱动

在win8(win10)上安装该驱动后,可能在设备管理器内找不到端口这个选项,这时候需要手动添加过时硬件。不懂如何操作的可以去看我的博客,有介绍。

2018-05-20

51单片机特殊功能寄存器说明表

51单片机特殊功能寄存器的详细的说明表,列举了常用的所有特殊功能寄存器。

2018-04-25

8051(51)单片机指令表

51单片机指令表,并附上详细的指令解释。这个文档是51微控制器的附录

2018-04-25

C++知识图谱(不包含C++11之后的内容)

这是用XMind写成的C++知识图谱,有C++的详细知识点

2017-07-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除