- 博客(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 中,组件(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基础选择器和文字属性控制
层叠样式表(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
原创 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的标准库中提供的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的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
单片机开发USB转串口CH340驱动
2018-05-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人