树莓派开发笔记13-树莓派环境下的CSI摄像头实验

github主页:https://github.com/snqx-lqh gitee主页:https://gitee.com/snqx-lqh 本项目github地址:https://github.com/snqx-lqh/RaspberryPiLearningNotes 本项目gitee地址:https://gitee.com/snqx-lqh/RaspberryPiLearningNotes 欢迎交流 说明 这篇文章说一下树莓派CSI摄像头的使用方法,如果使用的是我这一版镜像,默认CSI摄像头是使能了的,只需要连接好摄像头后reboot即可。 测试 重启后,使用以下指令 ls /dev/video* 如果查看到video0设备,即是检测到了设备,可以在树莓派终端下输入以下指令测试树莓派的摄像头。 #测试摄像头 libcamera-hello #拍照 libcamera-jpeg -o test.jpg 但是呢,你使用这个,就不能使用opencv来掉摄像头了。如果要能用opencv掉摄像头 修改config.txt文件 输入 sudo nano /boot/firmware/config.txt 在文件最后加上如下命令:加在最后【all】 gpu_mem=128 start_x=1 注释掉原来的摄像头自动检测语句 #camera_auto_detect=1 Ctrl+o 写入 Ctrl+x 退出 修改/etc/modules输入 sudo nano /etc/modules 在最后面添加如下命令 bcm2835-v4l2 Ctrl+o 写入 Ctrl+x 退出 保存后,重启系统!!!验证 vcgencmd get_camera 得到 supported=1 detected=1,则说明摄像头可以工作了 带来的问题 修改后输入: libcamera-hello 命令出现“no cameras available”报错,就是原来的又不行了。网上有位网友说pios把摄像头驱动更换到了libcamera,而opencv当前还不支持libcamera,是你opencv不能用的根本原因。最终解决的办法就是回滚到老版的v4l2驱动,opencv支持v4l2,所以就ok了。这种方法是退回到老的驱动来实现opencv的读取。 下面将分别使用C++和Python版本的opencv调用这个摄像头。 C++版 首先我们先安装一些opencv库,这个是编译好的opencv,如果自己在树莓派上编译花的时间太久了 sudo apt-get install libopencv-dev libopencv-contrib-dev 然后写一个实例,这个只是一个打开摄像头 #include <iostream> #include <stdio.h> #include <opencv2/opencv.

【动态规划】简单多状态 dp 问题

简单多状态 dp 问题 1.面试题 17.16. 按摩师2.打家劫舍 II3.删除并获得点数4.粉刷房子4.买卖股票的最佳时机含冷冻期5.买卖股票的最佳时机含手续费6.买卖股票的最佳时机 III7.买卖股票的最佳时机 IV 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.面试题 17.16. 按摩师 题目链接: 面试题 17.16. 按摩师 题目分析: 圆圈表示预约,每个预约可以接或不接,不能接受相邻的预约,最优的预约集合(总预约时间最长),返回总的分钟数。 算法原理: 1.状态表示 经验 + 题目要求 dp[i] 表示:选择到 i 位置的时候,此时最长预约时长。 但是 i 位置可以选或者不选,因此继续细化 f[i] 表示:选择到 i 位置的时候,nums[i] 必选,此时最长预约时长 g[i] 表示:选择到 i 位置的时候,nums[i] 不选,此时最长预约时长 2.状态转移方程 f[i] 表示 必选 i 位置,此时最长预约时长。i 位置可以选,那 i - 1 位置就不能选了,而我们想要的是最长预约时长,那就把 0 ~ i- 1 区间内最长预约时长给我,这个最长预约时长保证 i - 1 位置必不选。而 g[i-1] 表示 i -1位置不选此时最长预约时长。当然也别忘记 i 位置的预约时长 g[i] 表示 不选 i 位置,此时最长预约时长。 i 位置不选,那 i - 1 位置可选可不选,我们要找的是 0 ~ i - 1区间最长预约时长,有两种情况,选 i - 1 位置 ,而 f[i - 1] 表示必选 i - 1 位置此时最长预约时长, 不选 i - 1 位置,g[i - 1] 表示 不选 i - 1 位置此时最长预约时长

当外接硬盘接入到macOS上,只读不可写时,应当格式化

当windows磁盘格式例如 NTFS 的硬盘接入到macOS上时,会发现无法新建文件夹,无法删除、重命名。原因是磁盘格式对不上macOS,需要进行格式化。格式化时请注意备份重要数据。具体做法如下,在macOS中找到磁盘工具,然后对磁盘进行格式化(右上角的“抹掉”按钮),选择APFS。 APFS(Apple File System)是苹果公司开发的一种现代文件系统格式,用于macOS、iOS、watchOS和tvOS等操作系统中。APFS文件系统支持文件名长达255个字符,支持大容量的硬盘和大文件,最大支持的文件大小为8EB(1EB=1024PB),最大支持的分区大小为9ZB(1ZB=1024EB)。 格式化完成后,就可以写文件数据了。

vector容器---性能优化

目录 一、引言 二、vector容器概述 1.定义与特性 2.头文件 三、vector容器常用操作 1.创建vector容器 2.添加元素 3.访问元素 4.删除元素 5.容器大小和容量 四、vector容器使用技巧 1.预分配空间 2.使用emplace系列函数 3.删除元素时避免内存泄漏 五、性能优化 1.尽量减少扩容次数 2.避免使用 reserve() 后的 resize() 3.使用swap()优化内存使用 六、总结 本文将详细介绍C++中vector容器的特性、常用操作、使用技巧以及性能优化方法,帮助读者更深入地理解和运用这一强大的STL容器。 一、引言 C++ vector容器是STL(标准模板库)的重要组成部分,它提供了一种动态数组的数据结构,使得在程序运行过程中可以方便地添加、删除和访问元素。本文将带领大家深入了解vector容器的方方面面。 二、vector容器概述 1.定义与特性 vector容器是一个模板类,可以存储任意类型的元素。其主要特性如下 扩容:容器大小可根据需要自动调整。随机访问:支持通过下标快速访问元素。连续存储:元素在内存中连续存储,提高缓存命中率。 2.头文件 使用vector容器需要包含头文件。 #include <vector> using namespace std; 三、vector容器常用操作 1.创建vector容器 vector<int> vec; // 创建一个空的vector容器 vector<int> vec1(10); // 创建一个包含10个元素的vector容器,元素默认值为0 vector<int> vec2(10, 1); // 创建一个包含10个元素的vector容器,元素初始值为1 2.添加元素 vec.push_back(1); // 在容器末尾添加元素1 vec.insert(vec.begin() + 1, 2); // 在下标为1的位置插入元素2 3.访问元素 int a = vec[0]; // 访问下标为0的元素 int b = vec.

【STM32】中断

中断与GPIO一样是STM32中非常常用的东西,以我一个写上位机的人的理解,它相当于上位机程序中多线程的地位,因为多线程和中断都是为了提高某些响应的实时性。悄悄说一句,我觉得中断在一定程度上比多线程还好用。哈哈哈哈哈哈哈~ 大部分图片来源:正点原子HAL库课程 目录 1 作用 2 意义 3 NVIC 3.1 优先级 3.2 NVIC的使用 3.3 相关的HAL库文件(可以去这里找用到的函数和宏定义) 4 EXTI 4.1 中断和事件 4.2 工作原理 4.3 外部中断配置 4.4 EXTI配置步骤 4.5 相关的HAL库文件(可以去这里找用到的函数和宏定义) 5 中断中几个重要概念的本质 5.1 __HAL_PPP_ENABLE_IT 5.2 HAL_NVIC_EnableIRQ 5.3 HAL_PPP_XXX_Start_IT 1 作用 2 意义 高效处理紧急程序,不会一直占用CPU资源。 3 NVIC 中断的总管家。 中断服务函数:位于启动文件中。 3.1 优先级 数字越小优先级越高! 优先级的分组: 设置优先级分组大概意思就是在同样只有IPRx寄存器高四位时,使得项目有一定数量的抢占优先级和一定数量的响应优先级。而因为只有四位的空间,不同优先级分组之间就是把4位分别分给抢占和响应而已。具体怎么分就需要结合项目需要了,因为中断是抢占优先级和响应优先级共同作用的。 但在一个工程中,一般只设置一次中断优先级的分组,避免程序的优先级混乱,多次设置时以最后一次为准。 3.2 NVIC的使用 注意⚠️: 在例程中stm32f1xx_hal.c已经在HAL_init()函数中设置过中断分组为2,就不需要额外设置了。分组为2中中间间,比较好用。 3.3 相关的HAL库文件(可以去这里找用到的函数和宏定义) stm32f1xx_hal_cortex.c(找NVIC函数) startup_stm32103xe.s(找中断服务函数名) 4 EXTI 外部中断事件控制器。 F1包含20(互联型)/19(非互联型)个产生事件/中断请求的边沿检测器,即总共20条EXTI线。 4.1 中断和事件 中断:要进入NVIC,有相应的中断服务函数,需要CPU处理 事件:不进入NVIC,仅用于内部硬件自动控制的,如:TIM、DMA、ADC 4.2 工作原理 最常用的寄存器:上升沿触发寄存器、下降沿触发寄存器、请求挂起寄存器、中断屏蔽寄存器。而一般不采用软件触发中断,也很少使用事件,都是使用中断。

python小游戏——躲避球(可当课设)

游戏简介: 没有美术,画面简洁(懒得做)。玩家控制小球躲避敌人(上下左右,闪避),敌人体积越大速度越慢,随机生成道具球(目前只有生命球),靠近道具球可拾取。 未来展望: 1. 添加其他道具球 2. 添加攻击手段,目前只能闪避。 3. 添加耐力条 4. 添加更多属性 核心代码 玩家移动 def player_move(space_down, player): """ 控制玩家移动处理 :param space_down: 是否按下空格 :param player: 玩家 :return: """ global monitor if space_down: speed = player.dodge_speed else: speed = player.speed keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: player.x -= speed if keys[pygame.K_RIGHT]: player.x += speed if keys[pygame.K_UP]: player.y -= speed if keys[pygame.K_DOWN]: player.y += speed if player.x < 0: player.x = monitor.width + player.x elif player.

QT中通过Tcp协议的多线程的文件传输(服务器)

首先新建一个项目命名为SendClientSever 因为要进行网络通信,在pro文件的第一行代码中添加network 一、窗口设计 拖一个Widget里面放入label,lineEdit,pushbutton,名称如图修改 程序设计 子线程recvfile类 新建一个类用来执行子线程 将新建的类的头文件、recvfie.h文件和.cpp的继承对象改为QThread,我们后面要用到其的run函数用来实现多线程 在recvfile.h文件中定义run函数,alt+enter可以转到cpp中添加定义因为在主线程中要创建一个RecvFile类的对象,用到其中的run进行子线程操作,要用到tcp进行通信,我们添加tcp这个参数 我们先常见一个QSoketTcp类的对象m_tcp用来接受从主线程传来的tcp 我们在再添加一个over的信号,如果文件传输完成我们就发送over这个信号给主线程 先接受从主线程传来的tcp参数 然后在recvfile.cpp在实现run函数,也就是子线程的操作 主线程mainwindow类 去mianwindow中定义一个QTcpsever的指针,用来与客户端通信 右键窗口的启动监听选择转到槽函数的clicked 实现槽函数 在构造函数中,去实例化对象,开启子线程 如果文件传输完毕就关闭子线程的操作 完整代码 recvfile.h #ifndef RECVFILE_H #define RECVFILE_H #include <QThread> #include<QTcpSocket> class RecvFile : public QThread { Q_OBJECT public: explicit RecvFile(QTcpSocket *tcp,QObject *parent = nullptr); protected: void run() override; private: QTcpSocket* m_tcp; signals: void over(); public slots: }; #endif // RECVFILE_H recvfile.cpp #include "recvfile.h" #include<QFile> RecvFile::RecvFile(QTcpSocket *tcp,QObject *parent) : QThread(parent) { m_tcp = tcp; } void RecvFile::run() { // 创建一个新的QFile对象,用于接收文件并保存为"

Kakfa的核心概念-Replica副本(kafka创建topic并指定分区和副本的两种方式)

Kakfa的核心概念-Replica副本(kafka创建topic并指定分区和副本的两种方式) 1、kafka命令行脚本创建topic并指定分区和副本2、springboot集成kafka创建topic并指定分区和副本2.1、springboot集成kafka2.1.1、springboot集成kafka创建topic并指定5个分区和1个副本2.1.2、往分区中发送消息2.1.3、springboot集成kafka创建topic并指定9个分区和1个副本2.1.4、springboot集成kafka创建topic并指定7个分区和1个副本 1、kafka命令行脚本创建topic并指定分区和副本 ./kafka-topics.sh --create --topic myTopic --partitions 3 --replication-factor 1 --bootstrap-server 127.0.0.1:9092 创建topic成功,有3个分区 2、springboot集成kafka创建topic并指定分区和副本 2.1、springboot集成kafka 2.1.1、springboot集成kafka创建topic并指定5个分区和1个副本 package com.power.config; import org.apache.kafka.clients.admin.NewTopic; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class KafkaConfig { @Bean public NewTopic newTopic(){ return new NewTopic("heTopic",5,(short) 1); } } 创建成功,有5个分区 2.1.2、往分区中发送消息 生产者: package com.power.producer; import com.power.model.User; import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.common.header.Headers; import org.apache.kafka.common.header.internals.RecordHeaders; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.support.KafkaHeaders; import org.springframework.kafka.support.SendResult; import org.springframework.messaging.Message; import org.springframework.messaging.support.MessageBuilder; import org.springframework.stereotype.Component; import org.springframework.util.concurrent.ListenableFuture; import javax.annotation.Resource; import java.

图像数据处理22

五、边缘检测 5.4 Hough变换 该技术主要用于检测图像中的基本形状,如直线、圆、椭圆等。 Hough变换的基本原理 Hough变换的基本原理是将图像空间中的直线或曲线变换到参数空间中,通过检测参数空间中的极值点(局部最大值),确定出该曲线的描述参数,从而提取影像中的规则曲线。具体来说,Hough变换利用点与线的对偶性,将原始图像空间中的曲线或直线通过其数学表达式映射到参数空间中的一个点或曲线,进而将检测问题转化为统计峰值问题。 Hough变换通过投票机制在参数空间中寻找局部最大值点,从而实现了对图像中基本图形的检测。其的优点是能够减少一定程度的噪声还有形状的不完整性造成的误差,因为它是在统计意义上寻找形状的存在。 Hough变换的步骤 ①边缘检测:首先对图像进行边缘检测,提取出图像中的边缘点,这些边缘点通常是曲线或直线上的点。 ②参数空间量化:将参数平面量化,然后设置二维(或三维)累计矩阵。 ③投票:对每一个边缘点,在参数空间中计算所有可能经过该点的曲线(或直线)的参数值,并对相应的参数空间坐标进行投票(累加)。 ④检测峰值:在参数空间中检测出投票数较大的局部最大值点,这些点对应的参数值即为图像中存在的曲线的参数。 ⑤结果输出:根据检测到的参数值,在原图像中绘制出相应的曲线或直线。 直线检测的基本原理 通常情况下直线方程为y=kx+b,其中k是斜率,b是截距。但在Hough变换中,为了处理垂直于x轴的直线(斜率无穷大)的情况,常采用极坐标形式(ρ,θ)来表示直线,其中ρ表示原点到直线的距离,θ表示直线与x轴的夹角。 = 对于图像中的每一个点(x,y),可以绘制出经过该点的所有直线,这些直线在参数空间(ρ,θ)中对应一系列的点。如果多个点在图像空间中位于同一条直线上,那么它们在参数空间中对应的点将会相交于一个点,这个点即为该直线的参数(ρ,θ)。因此,通过统计参数空间中各点的交点数(即累加值),可以得到局部最大值点,从而确定图像中的直线。 圆检测的基本原理 圆检测参数空间变为三维,包括圆心坐标(x0,y0)和半径r。对于图像中的每一个点,可以绘制出经过该点的所有可能的圆,这些圆在参数空间(x0,y0,r)中对应一系列的点。如果多个点在图像空间中位于同一个圆上,那么它们在参数空间中对应的点将会相交于一个点,这个点即为该圆的参数。 圆形检测的实现 import cv2 # 导入OpenCV库,用于图像处理 import numpy as np # 导入NumPy库,用于处理数组和矩阵 # 读取图片 image = cv2.imread('img3.jpg') # 使用cv2.imread函数读取名为'img3.jpg'的图片 # 转换为灰度图 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 使用cv2.cvtColor函数将图片转换为灰度图 # 应用高斯模糊,减少图像噪声 gray_blurred = cv2.GaussianBlur(gray, (9, 9), 2, 2) # 使用cv2.GaussianBlur函数对灰度图应用高斯模糊 # 使用Hough圆变换检测圆形区域 circles = cv2.HoughCircles(gray_blurred, cv2.HOUGH_GRADIENT, dp=1, minDist=50, param1=50, param2=30, minRadius=0, maxRadius=0) # 使用cv2.

2024华为OD机试题库-(A卷+B卷+C卷+D卷+E)-(JAVA、Python、C++)

博主是一名资深后端开发人员,精通C++,Python,Java,乐于分享面试经验,已帮助千余名同学通过OD机考,非常感谢大家长期以来的信任和支持! 2024年8月下旬,OD统一考试启用(E卷),E卷会复用ABCD卷的一些题目,同时加入了一些新题。E卷题目同步火热更新中!!! 题库已经整理好,三道全中概率95%以上,奉上C卷D卷E卷链接:2024华为OD机试题库-(C卷+D卷+E卷)-(JAVA、Python、C++),祝大家考试顺利。 华为OD机试题库(C++/Java/Python)专栏包含ABCDE卷真题,提供JAVA、Python、C++三种解法。 (免费试读) 2024华为OD机试真题C卷D卷100分-小朋友来自多少小区-(C++/Java/Python) 以下为历史真题,大家可拿来练手。 以下为OD统一考试(B卷)的题目: OD统一考试(B卷)100分题目 序号 题目分数考点类型1补种未成活胡杨100滑动窗口OD统一考试 B卷2路灯照明问题100区间交并集OD统一考试 B卷3敏感字段加密100字符串处理OD统一考试 B卷4阿里巴巴找黄金宝箱(I)100单指针OD统一考试 B卷5喊7的次数重排100约瑟夫环OD统一考试 B卷6斗地主之顺子100逻辑分析OD统一考试 B卷7IPv4地址转换成整数100字符串处理OD统一考试 B卷8分苹果100位运算OD统一考试 B卷9组成最大数100自定义排序OD统一考试 B卷10最大花费金额100双指针OD统一考试 B卷11太阳能板最大面积100双指针OD统一考试 B卷12座位调整100逻辑分析OD统一考试 B卷13选修课100自定义排序,数据结构OD统一考试 B卷14分班100逻辑分析OD统一考试 B卷15分糖果100递归OD统一考试 B卷16最远足迹100字符串处理OD统一考试 B卷17需要打开多少监控器100逻辑分析OD统一考试 B卷18VLAN资源池100逻辑分析OD统一考试 B卷19求字符串中所有整数的最小和100字符串处理OD统一考试 B卷20求满足条件的最长子串长度100滑动窗口OD统一考试 B卷21TLV解析 Ⅰ100字符串分隔匹配OD统一考试 B卷22拼接URL100字符串处理OD统一考试 B卷23水仙花数 Ⅰ100数学运算OD统一考试 B卷24最大股票收益100贪心算法OD统一考试 B卷25找朋友100单调栈OD统一考试 B卷26找车位100逻辑分析OD统一考试 B卷27猴子爬山100动态规划OD统一考试 B卷28按身高和体重排队100自定义排序OD统一考试 B卷29阿里巴巴找黄金宝箱(Ⅱ)100贪心思维OD统一考试 B卷30玩牌高手100贪心思维OD统一考试 B卷31告警抑制100逻辑分析OD统一考试 B卷32寻找身高相近的小朋友100自定义排序OD统一考试 B卷33消消乐游戏100数据结构 栈OD统一考试 B卷34数组组成的最小数字100自定义排序OD统一考试 B卷35求最多可派出多少支团队100双指针OD统一考试 B卷36数组去重和排序100自定义排序,数据结构OD统一考试 B卷37快递运输100逻辑分析OD统一考试 B卷38停车场车辆统计100逻辑模拟OD统一考试 B卷39 查找众数及中位数 100数据结构OD统一考试 B卷40滑动窗口最大和100滑动窗口OD统一考试 B卷41连续字母长度100滑动窗口OD统一考试 B卷42寻找相同子串100字符串查找OD统一考试 B卷43阿里巴巴找黄金宝箱(Ⅲ)100数据结构OD统一考试 B卷44报文重排序100字符串分隔OD统一考试 B卷45 阿里巴巴找黄金宝箱(V) 100滑动窗口OD统一考试 B卷46五子棋迷100滑动窗口OD统一考试 B卷47字符串摘要100滑动窗口,自定义排序OD统一考试 B卷48数组拼接100逻辑分析OD统一考试 B卷49矩阵稀疏扫描100逻辑分析OD统一考试 B卷50文件目录大小100dfsOD统一考试 B卷51恢复数字序列100滑动窗口OD统一考试 B卷52分割数组的最大差值100逻辑分析OD统一考试 B卷53生日礼物100二分查找OD统一考试 B卷54乘坐保密电梯100逻辑分析OD统一考试 B卷55拔河比赛100自定义排序OD统一考试 B卷56计算最接近的数100滑动窗口OD统一考试 B卷57矩阵元素的边界值100数据结构OD统一考试 B卷58增强的strstr100正则表达式OD统一考试 B卷59最长公共后缀100字符串操作OD统一考试 B卷60支持优先级的队列100自定义排序OD统一考试 B卷61数字反转打印100逻辑分析OD统一考试 B卷62跳房子1100两数之和OD统一考试 B卷63数字涂色100逻辑分析OD统一考试 B卷64勾股数元组100数学知识OD统一考试 B卷65工号不够用了怎么办100数学知识OD统一考试 B卷66计算最大乘积100字符串处理OD统一考试 B卷67比赛的冠亚季军100逻辑分析OD统一考试 B卷68报文回路100逻辑分析OD统一考试 B卷69响应报文时间100字符串处理OD统一考试 B卷70食堂供餐100逻辑分析OD统一考试 B卷71经典屏保100数学运算OD统一考试 B卷72数据分类100位运算OD统一考试 B卷73按单词下标区间翻转文章内容100字符串处理OD统一考试 B卷74比赛100自定义排序OD统一考试 B卷75模拟消息队列100逻辑分析OD统一考试 B卷76荒岛求生100逻辑分析OD统一考试 B卷77奖牌榜排名100自定义排序OD统一考试 B卷78报数游戏100逻辑分析OD统一考试 B卷79数字最低位排序100自定义排序OD统一考试 B卷80GPU算力100逻辑分析OD统一考试 B卷81最长连续子序列100滑动窗口OD统一考试 B卷82最长元音子串100滑动窗口OD统一考试 B卷83 字符串子序列II

25届网安秋招面试之后台信息泄露

吉祥知识星球http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247485367&idx=1&sn=837891059c360ad60db7e9ac980a3321&chksm=c0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484339&idx=1&sn=356300f169de74e7a778b04bfbbbd0ab&chksm=c0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene=21#wechat_redirect 《Java代码审计》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484219&idx=1&sn=73564e316a4c9794019f15dd6b3ba9f6&chksm=c0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene=21#wechat_redirect 《Web安全》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484238&idx=1&sn=ca66551c31e37b8d726f151265fc9211&chksm=c0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene=21#wechat_redirect 《应急响应》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484262&idx=1&sn=8500d284ffa923638199071032877536&chksm=c0e47a3af793f32c1c20dcb55c28942b59cbae12ce7169c63d6229d66238fb39a8094a2c13a1&scene=21#wechat_redirect 《护网资料库》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484307&idx=1&sn=9e8e24e703e877301d43fcef94e36d0e&chksm=c0e47acff793f3d9a868af859fae561999930ebbe01fcea8a1a5eb99fe84d54655c4e661be53&scene=21#wechat_redirect 1.1.1 管理后台泄露漏洞 1.1.1.1 漏洞原理 Web 控制台是一种基于 Web 的用户界面, 其常常被用于网站后台或者web容器控制台中,其不仅仅局限于容器或者网站管理后台,还包括一些数据库默认地址等。常见的web控制台包括以下多种:tomcat、aria2、weblogic、websphere、oracle、jboss等。这些web的容器控制台常见访问形式:http://hostname:port/load/,例如:http://x.x.x.x:8080/manage/。 1.1.1.2 漏洞危害 在web安全中,网站系统在泄漏其web容器(中间件)或者数据库的控制台后,增加被入侵的风险。 1.1.1.3 检测条件 网站正常运行;存在url控制点。 1.1.1.4 检测方法 1. 使用web漏洞扫描器或目录扫描器扫描web应用常见管理后台路径,发现目标后台路径为/admin/login.php。 2. 识别网站使用的cms框架,检查其默认的管理后台是否存在,发现目标为wordpress建站,直接访问默认后台路径wp-login.php成功发现后台。 3. 在网站中寻找管理后台超链接入口,发现左下角存在后台管理字样,访问后发现后台页面。 1.1.1.6 修复建议 总体修复方式:对于必须暴露于公网或者其他网络中的控制台地址,则为其地址做访问白名单措施,即只允许白名单以内的用户IP地址可以访问到该控制台 推荐阅读: 学了这篇面试经,轻松收割网络安全的offer 护网主防资料库、护网设备讲解、护网初中高级别面试 Java代码审计零基础入门到整套代码审计 Web安全:靶场、渗透工具、信息收集、输入输出漏洞、业务逻辑漏洞 【护网必备技能】应急响应知识库

打造编程学习的“知识宝库”:高效笔记记录与整理的艺术

目录 引言 一、选择适合的工具:工欲善其事,必先利其器 二、设计清晰的笔记结构:构建知识的骨架 1. 明确分类体系 2. 层次分明的标题结构 3. 标签与索引系统 4. 关联与引用机制 5. 视觉化辅助 三、实践与反思:知行合一,温故知新 1. 即时记录:捕捉灵感的火花 2. 代码示例:理论与实践的完美结合 3. 定期复习:巩固与提升的关键 4. 分享与交流:拓宽视野,激发灵感 四、保持条理性与持续性:习惯成自然 1. 定期梳理,精炼内容 2. 持续耕耘,知识常青 3. 习惯为基,自然成行 引言 在编程这片广袤无垠的海洋中,每一位学习者都是一名勇敢的航海家,不断探索未知的知识领域。高效的笔记记录和整理方法,就如同我们手中的珍贵航海图,不仅指引着我们穿越复杂的知识迷雾,还帮助我们构建起坚实的认知基础。本文将深入探讨如何建立一个既能快速记录又易于回顾的笔记系统,让你在繁忙的学习中依然能保持笔记的条理性,从而打造出属于自己的编程学习“知识宝库”。 一、选择适合的工具:工欲善其事,必先利其器 首先,选择一款或多款适合你的笔记工具至关重要。这些工具应当具备以下几个特点: 跨平台同步:确保你能在不同设备间无缝切换,随时随地访问你的笔记。灵活易用:界面友好,操作简单,能够快速记录你的想法和发现。功能丰富:支持代码高亮、图片插入、链接添加等功能,满足编程学习的特殊需求。搜索与标签:提供强大的搜索功能和灵活的标签系统,帮助你快速找到需要的信息。 常见的编程学习笔记工具有 Markdown 编辑器(如 Typora)、云笔记应用(如 Notion、OneNote)以及专为程序员设计的笔记软件(如 Joplin)。当然,你也可以选择博客平台将自己的学习笔记编辑成博客形式,这样可以随时修改、随时补充,并且在多个设备上都能查看,非常适合跨平台使用。根据个人喜好和需求,选择最适合你的那一款工具。 二、设计清晰的笔记结构:构建知识的骨架 在编程学习的旅途中,一个清晰、有序的笔记结构就如同构建知识的坚固框架,它不仅帮助我们将零散的知识点串联起来,还使得信息的检索与回顾变得高效而便捷。以下是一些关于如何设计清晰笔记结构的详细建议: 1. 明确分类体系 主题分类:首先,根据学习内容的主题进行分类,如编程语言(Python、Java 等)、数据结构、算法、框架(React、Django 等)等。这样的分类方式有助于我们快速定位到特定领域的知识。子分类细化:在每个主题下,进一步细化子分类。例如,在 “Python” 主题下,可以设立 “基础语法”、“高级特性”、“标准库与模块” 等子分类,以更细致地组织相关内容。 2. 层次分明的标题结构 主标题与副标题:为笔记内容设置清晰的主标题和副标题,以反映不同层级的信息。主标题概括章节或主题,副标题则进一步细化到具体的知识点或技术细节。编号与缩进:利用编号和缩进来表示内容的层级关系,使得整个笔记结构一目了然,便于理解和记忆。 3. 标签与索引系统 关键词标签:为笔记添加关键词标签,如“核心概念”、“实用技巧”、“常见错误”等,以便通过标签快速检索到相关信息。索引与目录:创建索引或目录页,列出所有笔记的标题和页码(或链接),方便跨笔记的导航和参考。 4. 关联与引用机制 内部链接:在笔记中建立内部链接,将相关知识点或章节相互关联起来。这有助于形成知识网络,加深理解。外部资源引用:对于需要深入了解的内容,可以引用外部资源(如官方文档、博客文章、视频教程等),并在笔记中提供链接或参考文献。 5. 视觉化辅助 图表与图示:利用图表、图示等视觉化工具来辅助说明复杂的概念或流程。这不仅能增强笔记的吸引力,还能帮助读者更好地理解和记忆信息。颜色编码:使用颜色编码来区分不同类型的笔记内容(如重点、难点、待办事项等),提高笔记的可读性和辨识度。 三、实践与反思:知行合一,温故知新 在编程学习的征途中,笔记远远超越了单纯记录知识的范畴,它成为了一座桥梁,连接着理论与实践,促进着理解与应用的深度融合。将笔记巧妙地融入编程实践中,通过不断的实践与深刻的反思,我们能够逐步揭开编程技术的神秘面纱,深化对知识的领悟与掌握。 1. 即时记录:捕捉灵感的火花 在编程学习的每一刻,无论是遭遇棘手的难题、产生不解的疑惑,还是偶遇启迪思维的新知,即时记录成为了我们捕捉这些宝贵瞬间的最佳方式。这不仅有助于加深我们对知识点的记忆,更重要的是,它激发了我们的思考,促使我们在记录的过程中对问题进行更深层次的剖析与理解。

HTML详解

1. 文档结构标签 <!DOCTYPE html>:声明文档类型,告诉浏览器这是一个HTML5文档。<html>:HTML文档的根元素,包含整个HTML文档。<head>:包含文档的元数据(metadata),如标题、样式、脚本等。<title>:定义文档的标题,在浏览器标签栏显示。<body>:包含文档的主体内容。 2. 文本格式化标签 <h1>到<h6>:定义六个级别的标题,<h1>级别最高,<h6>级别最低。<p>:定义一个段落。<br>:插入一个换行符。<hr>:插入一个水平线(水平分割线)。<strong>:定义重要的文本,通常显示为粗体。<em>:定义强调的文本,通常显示为斜体。<small>:定义小号文本。<blockquote>:定义一个长的引用。<q>:定义一个短的引用。<cite>:定义引用的来源。<code>:定义计算机代码片段。<pre>:定义预格式化文本,保留空格和换行。 3. 链接与图片 <a>:定义一个超链接,可以链接到另一个网页、文件、电子邮件地址等。<img>:定义一个图像,通过src属性指定图像文件的路径和文件名。 4. 列表 <ul>:定义一个无序列表,列表项用圆点或方块标记。<ol>:定义一个有序列表,列表项用数字或字母顺序标记。<li>:定义列表中的一个项目,无论是无序列表还是有序列表。<dl>:定义一个定义列表,包含术语和描述。<dt>:在定义列表中定义术语(子标题)。<dd>:在定义列表中定义描述(正文)。 5. 表格 <table>:定义一个表格。<tr>:定义表格中的一行。<th>:定义表格中的表头单元格,通常显示为加粗和居中的文本。<td>:定义表格中的标准单元格。<caption>:定义表格的标题。 6. 表单 <form>:定义一个表单,用于向服务器提交数据。<input>:定义一个输入控件,如文本框、密码框、单选按钮、复选框等。<label>:定义输入控件的标签,通过for属性与控件的id属性关联。<textarea>:定义一个多行文本输入控件。<button>:定义一个按钮,可以提交表单或执行其他操作。<select>:定义一个下拉列表。<option>:定义下拉列表中的选项。 7. 多媒体 <audio>:定义音频内容,支持多种音频格式。<video>:定义视频内容,支持多种视频格式。 8. 其他常用标签 <div>:定义文档中的一个区块或节,常用于布局和样式化。<span>:定义文档中的一个小块或区域,常用于对文本的一部分进行样式化。<iframe>:定义一个内联框架,用于嵌入另一个文档(如HTML页面)。<header>、<nav>、<main>、<footer>、<article>、<section>、<aside>:HTML5中引入的语义化标签,用于定义文档的结构和内容的含义。

C语言程序设计(初识C语言后部分)

“疲惫的生活总要有一些温柔的梦想。”-转子榆 4)一维数组在内存中的存储 由上图可以看出,每个相邻元素的地址相差4,原因是每个元素都是整型,一个整型占4个字节。即随着数组下标的增长,元素的地址也在有规律的递增。 得出结论:一维数组在内存中是连续存放的。 2.二维数组的创建和初始化 1)二维数组的创建 int arr[3][4] ; //三行四列 char arr[3][5] ; //三行五列 double arr[2][4] ; //两行四列 2)二维数组的初始化 完全初始化 如果二维数组初始化给的元素数据不够,即会自动补0,称作不完全初始化 二维数组初始化的时候,行可以省略,列不可以省略: 3)二维数组的使用 二维数组的使用也是通过下标的方式 打印整个二维数组 找出二维数组中的一个(或几个)元素 修改二维数组内的元素 二维数组可以看作一维数组 上图第一行的一维数组的数组名理解为arr[0],第二行理解为arr[1],第三行理解为arr[2]。 4)二维数组在内存中的存储 二维数组在内存中也是连续存放的(一行接着一行)。

Linux系统编程:TCP,UDP协议特点,粘包,wireshark抓包

1.Loop本地回环 Loop本地回环,特指一组以127开头的IP地址范围(即127.0.0.1至127.255.255.254),其中127.0.0.1是最为知名的成员,被誉为本地回环地址(Loop back address)。这一地址类别超脱于常规的IP地址分类之外,它象征着设备内部的虚拟接口,因此被视为一种理论上永不失效的网络连接。即便是在未安装物理网卡的情况下,用户也能通过ping命令成功访问此地址,这在Windows等操作系统中同样适用。 主要功能与应用: 网络配置自检:通过ping 127.0.0.1,用户可以快捷地验证本机网卡及IP协议栈的安装与配置状态。若响应成功,则表明基础网络设置无误。 应用程序资源调用:在SERVER/CLIENT架构的应用 程序中,当服务器与客户端位于同一台机器且缺乏外部SERVER时,可将SERVER资源部署于本机,并通过将SERVER的IP设置为127.0.0.1来实现资源的本地调用,确保程序顺畅运行。 2.解决TCP/IP通信中的粘包问题: 粘包现象概述:TCP因其流式传输特性,常面临粘包问题。即,多个独立的数据包可能在传输或接收过程中被合并处理,导致数据边界模糊。 成因分析: 发送端:为提高效率,TCP可能将多个小数据包合并为一个大包发送,若连续发送的数据量较小,则更易发生粘包。 接收端:若用户进程处理不及时,接收缓冲区内的多个数据包可能相互粘连,待后续数据到达时一并处理。 解决方案: 特定结束符法:在数据包末尾添加特定字符作为结束标志,接收方据此划分数据包界限。但需留意避免数据包内容中自然出现相同字符导致的误判。 固定数据大小法:约定数据包固定大小,不足部分以填充字符补齐。此方法简单但灵活性欠佳,且可能增加网络负担。 自定义数据协议:在TCP基础上构建包含数据头与数据体的自定义协议层。数据头中记录数据体大小等关键信息,接收方据此解析并提取数据体,有效避免粘包问题。此方法虽复杂,但高度灵活,适用于多种复杂场景。 3.recv和send函数说明 recv函数 功能描述: recv 函数用于从已连接的套接字接收数据。 函数原型: #include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sockfd, void *buf, size_t len, int flags); 参数说明: sockfd:套接字描述符,用于标识要接收数据的套接字。 buf:指向缓冲区的指针,用于存储接收到的数据。 len:缓冲区长度,指定接收数据的最大字节数。 flags(可选):指定接收数据的额外选项,如MSG_WAITALL(等待所有数据到达)和MSG_DONTWAIT(非阻塞模式)等。 返回值: 成功时,返回接收到的字节数。 如果连接被正常关闭,则返回0。 如果发生错误,则返回-1,并设置相应的errno以指示错误类型。 注意事项: recv函数是阻塞的,可通过设置套接字为非阻塞模式或使用select/poll/epoll等机制避免阻塞。 由于网络延迟、拥塞等原因,recv可能无法一次性接收全部数据,需编写循环接收。 接收到的数据可能因TCP/IP协议栈的分片或重新排序而需要重组或解析。 send函数 功能描述: send 函数用于实现数据的发送功能。 函数原型: #include <sys/types.h> #include <sys/socket.h> ssize_t send(int sockfd, const void *buf, size_t len, int flags);

密码生成器(HTML+CSS+JavaScript)

🌏个人博客主页:心.c ​ 前言:前两天写了密码生成器,现在跟大家分享一下,大家如果想使用随便拿,如果哪里有问题还请大佬们给我指出,感谢支持 🔥🔥🔥专题文章:密码生成器 😽感谢大家的点赞👍收藏⭐️评论✍您的一键三连是我更新的动力 💓 目录 作品展示: 功能介绍: 核心: 所用字符显示: 上下按钮点击事件: 单选按钮点击事件: 更新遍历: 随机数的生成: 密码的复制: 代码展示(源代码): HTML: CSS: JavaScript: 作品展示: ​ 功能介绍: 核心: numArr是我创建的一个用了储存状态的数组,用来设定按钮绑定,‘1’就是绑定的numberArr,'2'就是绑定的smallArr,‘3’绑定的就是bigArr,‘4’就是绑定的middleArr,初始化为‘1’是因为第一个单选按钮是默认已经被点击的,因为开始给第一个radiobox设置了clicked被点击事件,所以开始把‘1’添加上,如果后面监听radiobox时被点击了,我们只需要通过遍历numArr就可以更改totalArr,显示内容和修改密码了 let numArr = ['1'] 所用字符显示: 下面是四个数组,分别是数字,大写字母,小写字母,和常用符号,主要是用于将这些字符显示在总的totalArr数组里面,所用字符就是totalArr数组里面的内容,所用字符内容可以通过下方的所含字符进行修改 //生成四个数组 let numberArr = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] let smallArr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] let bigArr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] let middleArr = ['~', '!

C语言 之 整数在内存中的存储、大小端字节序和字节序的判断

文章目录 整数在内存中的存储大小端字节序和字节序判断大小端有大小端的原因高位和地位怎么区分?图例判断机器大端还是小端的例题 整数在内存中的存储 整数的2进制表示方法有三种,即 原码、反码和补码 三种表示方法均有符号位和数值位两部分,符号位用0表示“正”,用1表示“负”,而数值位最 高位的⼀位是被当做符号位,剩余的都是数值位。 正整数的原、反、补码都相同。 负整数的三种表示方法各不相同。 原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。 反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。 补码:反码+1就得到补码。 对于整形来说:数据存放内存中存放的是补码。 大小端字节序和字节序判断 例子: #include <stdio.h> int main() { int a = 0x11223344; return 0; } 在这个例子中 int a = 0x11223344; 其中0x的意思是将11223344以16进制的形式存储,我们前面也提到过,16进制的1个位需要2进制的4个位来表示,比如16进制f表示15,那么2进制表示15就是1111,我们又知道这个a是整形,大小为4个字节,1个字节等于8个位,那么2个16进制位就刚好占用一个字节 通过调试的内存窗口,我们可以看到在a中的 0x11223344 这个数字是按照字节为单位,倒着存储的。这就是大小端的不同 大小端 其实超过⼀个字节的数据在内存中存储的时候,就会有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储,下面是具体的概念: ⼤端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。 小端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。 有大小端的原因 这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着⼀个字节,⼀个字节为8 bit 位,但是在C语言中除了8 bit 的 char 之外,还有16 bit 的 short 型,32 bit 的 long 型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于⼀个字节,那么必然存在着⼀个如何将多个字节安排的问题。因此就导致了⼤端存储模式和小端存 储模式。 知道是大小端之后,在像我们例子中的情况我们就可以知道内存中下一个地址单元所对应的内容 高位和地位怎么区分? 其实高位和地位的区分就类似于我们的阿拉伯数字,例如数字123,3是个位,2是十位,1是百位,那么3就是低位,所以类似的,0x11223344中,44就是低位了 图例 判断机器大端还是小端的例题 #include <stdio.h> int check_sys() { int i = 1; return (*(char *)&i); } int main() { int ret = check_sys(); if(ret == 1) { printf("

C语言试题(含答案解析)

单选 1.下面C程序的运行结果为() int main(void) { printf("%d", 'B' < 'A'); return 0; } A.编译错误 B.1 C.0 D.运行错误 'A’的ascii码值为65,‘B’的ascii码值为66,‘B’<‘A’是不成立的,返回0,%d打印的自然是’B’<'A’表达式的值,所以为0,选C 2.若有定义语句:int year=1009,*p=& year;以下不能使变量year中的值增至1010的语句是() A.*p+=1 B.(*p)++ C.++(*p) D.*p++ A.*的优先级比+=高,因此先运行 *,即 * p=year的值,即1009+=1,值为1010 B和C ()的优先级最高,因此先运行括号内的 * p,即(1009)++和++(1009),因此为1010 D.*与后置++的优先级相同,因此从右往左进行计算,p为year的地址后置++后是地址++,因此不能使year的值增至1010,选D 3.一个C程序的执行是从() A.本程序的main函数开始,到main函数结束 B.本程序文件的第⼀个函数开始,到本程序文件的最后一个函数结束 C.本程序的main函数开始,到本程序文件的最后⼀个函数结束 D.本程序文件的第⼀个函数开始,到本程序的main函数结束 程序的执行都是从main函数开始,到main函数return返回结束,因此选A 4.有以下程序 #include<stdio.h> int main() { int a,b; for (a = 1, b = 1; a <= 100; a++) { if (b >= 20) break; if (b % 3 == 1) { b = b + 3; continue; } b = b - 5; } printf("

真题解析 | CCF CSP-J 2020 入门级 C++语言真题及答案

一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项) 解析:常识题。在计算机内存中,每个存储单元都有一个唯一的标识号,这个标识号被称为地址。地址用来唯一标识内存中的每个存储单元,类似于房子的门牌号,可以准确地找到并访问内存中的特定数据。通过地址,计算机可以准确地定位和访问存储单元中的数据,实现数据的读取和写入操作。因此,地址在计算机内存中起着非常重要的作用,确保数据的准确存储和检索。 解析: 常识题。 编译器是一种将高级语言源代码翻译成机器语言目标代码的程序。它接收程序员编写的高级语言源代码作为输入,经过词法分析、语法分析、语义分析、优化和代码生成等过程,最终生成可被计算机执行的机器指令代码。这样,计算机可以直接执行这些机器指令代码来实现程序的功能。 解析: 简单逻辑运算。首先,根据题目给出的条件: x=true, y=true, z=false。 然后逐个选项计算表达式的值: A. (y∨z)∧x∧z = (true ∨ false) ∧ true ∧ false = true ∧ true ∧ false = false B. x∧(z∨y)∧z = true ∧ (false ∨ true) ∧ false = true ∧ true ∧ false = false C. (x∧y)∧z = (true ∧ true) ∧ false = true ∧ false = false D. (x∧y)∨(z∨x) = (true ∧ true) ∨ (false ∨ true) = true ∨ true = true

区块链浪潮:Web3时代的数字经济新格局

随着科技的迅猛发展,全球经济正迎来一场前所未有的变革,区块链技术正在其中扮演着关键角色。Web3作为下一代互联网的核心,正在通过区块链技术重塑数字经济的格局,为全球市场带来新的机遇和挑战。这场以去中心化为特征的技术革命,不仅推动了数字经济的创新,也为全球经济的未来发展奠定了全新的基础。 区块链技术:数字经济的核心引擎 区块链技术作为Web3的基石,具有去中心化、不可篡改和透明度高的特点,这使得它在数字经济中的应用潜力巨大。在传统的中心化互联网架构中,数据的所有权和控制权往往掌握在少数大型科技公司手中。而在区块链驱动的Web3时代,用户可以通过区块链网络自主控制和管理自己的数据,这种去中心化的特性不仅提升了数据安全性,也改变了数字经济的基本规则。 区块链技术还为数字经济带来了新的信任机制。在传统的商业交易中,信任往往依赖于中介机构的保证,而区块链通过分布式账本技术,使得交易过程更加透明和可验证,减少了对中介机构的依赖。这种新的信任机制不仅提高了交易效率,也降低了交易成本,为数字经济的发展提供了强大的技术支持。 Web3的数字经济生态 Web3不仅仅是技术的创新,更是数字经济生态的重塑。随着区块链技术的广泛应用,Web3正逐步构建一个去中心化的数字经济生态系统。这个生态系统以区块链为基础,涵盖了从金融服务到内容创作、从供应链管理到社交网络的各个领域。 在Web3时代,数字经济的参与者不仅限于传统的企业和用户,还扩展到去中心化的自治组织(DAOs)、智能合约和去中心化应用(DApps)。这些主体通过区块链网络自主运营和管理,摆脱了对传统中介机构的依赖。利用IPRockets的功能,这些去中心化的经济实体能够进一步增强网络安全性,保障数据传输的隐私性和完整性,从而更高效地进行资源配置。此外,IPRockets的高级加密技术为这些创新者提供了一个更加安全、开放的环境,促进了Web3生态系统的快速发展和创业创新。 全球化与本地化的平衡 Web3时代的数字经济不仅是全球化的,也体现出强烈的本地化特征。区块链技术的去中心化特性使得全球范围内的资源可以更加自由地流动,同时也为本地经济的发展提供了新的动力。通过区块链网络,本地企业可以直接参与全球市场,跨越地域限制,提升竞争力。 然而,Web3的全球化发展也面临着一定的挑战。例如,不同国家和地区的监管环境差异较大,如何在保证区块链技术创新的同时,平衡全球化与本地化的需求,是未来数字经济发展需要解决的重要问题。 未来展望:Web3时代的数字经济新格局 随着区块链技术的不断成熟,Web3时代的数字经济将迎来更加广阔的发展前景。未来,随着去中心化技术的进一步普及,数字经济的格局将发生深刻变化。Web3将为全球经济注入新的活力,推动更加公平、透明和高效的经济发展模式。 在这个过程中,各行各业都将受到Web3的深刻影响,从金融到供应链、从教育到医疗,区块链技术将渗透到数字经济的各个角落。Web3不仅仅是技术的创新,更是经济模式和社会结构的重塑。通过区块链浪潮的推动,数字经济将进入一个全新的发展阶段,释放出巨大的潜力和机会。 结语 区块链浪潮正在引领Web3时代的到来,这场技术革命正在重塑全球数字经济的格局。通过去中心化、透明和不可篡改的技术特性,区块链为数字经济带来了新的信任机制和创新模式。随着Web3的发展,数字经济将迎来更加开放、多样和包容的未来。对于全球经济而言,Web3不仅是一场技术创新,更是一场深刻的经济变革,它将重新定义我们的生产方式、消费模式和社会结构,为未来的经济发展描绘出新的蓝图。