Python及C++中的列表
一、Python中的列表(List)
Python的列表是动态数组,内置于语言中,功能强大且易用,非常适合算法竞赛。
1. 基本概念
- 定义:列表是一个有序、可变的序列,可以存储任意类型的元素(整数、字符串、甚至其他列表等)。
- 声明方式:
my_list = [] # 空列表 my_list = [1, 2, 3] # 包含元素的列表 mixed_list = [1, "hello", 3.14] # 混合类型
- 特点:
- 动态大小:可以随时添加或删除元素,无需预先指定大小。
- 可变性:可以修改列表中的元素。
- 索引:支持正向索引(从0开始)和负向索引(从-1开始倒数)。
- 内存:Python列表内部是动态数组,扩容时会分配更多空间(通常是当前大小的1.5到2倍)。
2. 常用操作
以下是Python列表的核心操作,时间复杂度标注在括号中:
- 访问元素:
my_list[i]
(O(1))print(my_list[0]) # 访问第一个元素 print(my_list[-1]) # 访问最后一个元素
- 修改元素:
my_list[i] = value
(O(1))my_list[0] = 10 # 将第一个元素改为10
- 追加元素:
append(value)
(均摊O(1))my_list.append(4) # 在末尾添加4
- 插入元素:
insert(index, value)
(O(n),因为需要移动元素)my_list.insert(1, 5) # 在索引1处插入5
- 删除元素:
pop(index)
:删除并返回指定索引的元素,默认删除末尾(O(1)末尾,O(n)其他位置)my_list.pop() # 删除末尾元素 my_list.pop(0) # 删除第一个元素
remove(value)
:删除第一个匹配的值(O(n),因为需要查找)my_list.remove(2) # 删除值为2的元素
- 切片:
my_list[start:end:step]
(O(k),k是切片长度)print(my_list[1:3]) # 获取索引1到2的子列表 print(my_list[::-1]) # 反转列表
- 长度:
len(my_list)
(O(1)) - 排序:
sort()
(原地排序,O(n log n))或sorted()
(返回新列表)my_list.sort() # 默认升序 my_list.sort(reverse=True) # 降序 new_list = sorted(my_list) # 返回排序后的新列表
- 查找:
value in my_list
(O(n))if 3 in my_list:print("Found")
3. 高级用法
- 列表推导式:快速生成列表。
squares = [x**2 for x in range(5)] # [0, 1, 4, 9, 16] evens = [x for x in my_list if x % 2 == 0] # 提取偶数
- 嵌套列表:实现二维数组(矩阵)。
注意:二维列表初始化时要小心浅拷贝问题:matrix = [[1, 2], [3, 4]] print(matrix[0][1]) # 访问第1行第2列
# 错误:所有行指向同一对象 matrix = [[0] * 3] * 3 # 正确: matrix = [[0 for _ in range(3)] for _ in range(3)]
4. 竞赛中的应用
- 动态数组:Python列表适合大多数需要动态调整大小的场景,如存储输入数据。
- 栈和队列:用
append()
和pop()
实现栈,用append()
和pop(0)
实现队列(不过pop(0)
是O(n),建议用collections.deque
优化队列操作)。 - 排序和搜索:内置的
sort()
和sorted()
非常高效,适合排序相关问题。 - 多维数组:处理矩阵、图的邻接表等。
5. 注意事项
- 性能:
pop(0)
和insert(0, value)
是O(n),如果需要频繁操作列表头部,考虑用collections.deque
。 - 内存:列表动态扩容可能导致内存开销,尽量预估大小。
- 浅拷贝 vs 深拷贝:
a = [1, 2, 3] b = a # 浅拷贝,指向同一对象 c = a.copy() # 深拷贝(一级) import copy d = copy.deepcopy(a) # 完全深拷贝(多级嵌套)
二、C++中的列表(std::vector)
C++没有直接的“列表”概念,但std::vector
是最接近Python列表的动态数组结构,广泛用于算法竞赛。C++还有std::list
(双向链表),但竞赛中极少使用,因为链表操作较慢。
1. 基本概念
- 定义:
std::vector
是C++标准模板库(STL)中的动态数组,支持随机访问和动态调整大小。 - 头文件:需要包含
<vector>
。#include <vector> using namespace std;
- 声明方式:
vector<int> vec; // 空向量 vector<int> vec = {1, 2, 3}; // 初始化 vector<int> vec(5, 0); // 5个0
- 特点:
- 动态大小:可以自动扩容,类似Python列表。
- 类型安全:必须指定元素类型(如
int
、double
等)。 - 连续内存:元素存储在连续内存中,支持随机访问(O(1))。
- 扩容机制:当容量不足时,分配更大内存(通常2倍),拷贝元素,释放旧内存。
2. 常用操作
以下是std::vector
的核心操作,时间复杂度标注在括号中:
- 访问元素:
vec[i]
或vec.at(i)
(O(1))
注意:cout << vec[0] << endl; // 第一个元素 cout << vec.back() << endl; // 最后一个元素
vec[i]
不检查越界,vec.at(i)
会抛异常。 - 修改元素:
vec[i] = value
(O(1))vec[0] = 10;
- 追加元素:
push_back(value)
(均摊O(1))vec.push_back(4); // 在末尾添加4
- 删除元素:
pop_back()
:删除末尾元素(O(1))vec.pop_back();
erase(iterator)
:删除指定位置元素(O(n),因为需要移动元素)vec.erase(vec.begin()); // 删除第一个元素 vec.erase(vec.begin() + 2); // 删除第3个元素
- 插入元素:
insert(iterator, value)
(O(n),因为需要移动元素)vec.insert(vec.begin() + 1, 5); // 在索引1处插入5
- 大小和容量:
size()
:返回元素个数(O(1))capacity()
:返回当前分配的内存大小(O(1))resize(n)
:调整大小,不足补默认值,多了截断reserve(n)
:预分配内存,避免频繁扩容vec.reserve(100); // 预分配100个元素的空间
- 清空:
clear()
(O(1),仅清空元素,不释放内存)vec.clear();
- 排序:需要
<algorithm>
库的sort
函数(O(n log n))#include <algorithm> sort(vec.begin(), vec.end()); // 升序 sort(vec.begin(), vec.end(), greater<int>()); // 降序
- 查找:
find
或手动遍历(O(n))auto it = find(vec.begin(), vec.end(), 3); if (it != vec.end()) cout << "Found" << endl;
3. 高级用法
- 迭代器:用于遍历或操作。
或用范围for循环(C++11):for (auto it = vec.begin(); it != vec.end(); ++it) {cout << *it << " "; }
for (int x : vec) {cout << x << " "; }
- 二维向量:实现矩阵。
vector<vector<int>> matrix(3, vector<int>(3, 0)); // 3x3矩阵,初始化为0 matrix[0][1] = 5; // 修改第1行第2列
- 自定义比较:排序时可以传递比较函数。
sort(vec.begin(), vec.end(), [](int a, int b) { return a > b; }); // 降序
4. 竞赛中的应用
- 动态数组:
vector
适合需要动态调整大小的场景,如存储图的邻接表。 - 栈:用
push_back()
和pop_back()
实现栈。 - 排序和搜索:结合
sort
和binary_search
处理有序数据。 - 矩阵和图:二维
vector
用于表示矩阵或邻接表。
5. 注意事项
- 性能:
push_back
均摊O(1),但扩容可能导致拷贝开销,建议用reserve
预分配空间。 - 越界访问:
vec[i]
不检查越界,可能导致未定义行为,建议用at(i)
或检查size()
。 - 内存管理:
clear()
不释放内存,需用shrink_to_fit()
或swap
技巧:vector<int>().swap(vec); // 释放内存
- 迭代器失效:插入或删除元素可能导致迭代器失效,需小心。
三、Python列表与C++ vector的对比
特性/操作 | Python List | C++ std::vector |
---|---|---|
类型 | 动态数组,内置类型 | 动态数组,STL模板类 |
元素类型 | 任意类型(动态类型) | 固定类型(静态类型) |
内存分配 | 动态扩容(1.5-2倍) | 动态扩容(通常2倍) |
访问 | O(1),支持负索引 | O(1),无负索引 |
追加 | append ,均摊O(1) | push_back ,均摊O(1) |
插入/删除 | O(n),头部操作慢 | O(n),头部操作慢 |
切片 | 支持,O(k) | 不支持,需手动实现 |
排序 | sort() /sorted() ,O(n log n) | std::sort ,O(n log n) |
内存管理 | 自动管理 | 需手动优化(如reserve ) |
竞赛适用性 | 简单易用,适合快速原型 | 性能更高,适合严格时间限制 |
四、算法竞赛中的建议
- 常见问题与优化:
- 输入处理:
- Python:
input().split()
或list(map(int, input().split()))
。 - C++:
cin
配合vector
。int n; cin >> n; vector<int> vec(n); for (int i = 0; i < n; ++i) cin >> vec[i];
- Python:
- 性能优化:
- Python:避免频繁的
pop(0)
,用deque
替代。 - C++:用
reserve
减少扩容,ios::sync_with_stdio(false)
加速I/O。
- Python:避免频繁的
- 调试:
- Python:用
print
快速调试。 - C++:用
cout
或调试器,注意越界问题。
- Python:用
- 输入处理:
相关文章:
Python及C++中的列表
一、Python中的列表(List) Python的列表是动态数组,内置于语言中,功能强大且易用,非常适合算法竞赛。 1. 基本概念 定义:列表是一个有序、可变的序列,可以存储任意类型的元素(整数…...
mybatis plus 分页查询出来数据后对他二次 修改数据 封装返回
mybatis plus 分页查询出来数据后对他二次 修改数据 封装返回 /*** 搜索问卷** param keyword* param pageNo* param pageSize* return*/AutoLog(value "v_survey-搜索")ApiOperation(value"v_survey-搜索", notes"v_survey-搜索")GetMapping(v…...
海洋大地测量基准与水下导航系列之八我国海洋水下定位装备发展现状
中国国家综合PNT体系建设重点可概括为“51N”,“5”指5大基础设施,包括重点推进下一代北斗卫星导航系统、积极发展低轨导航增强系统、按需发展水下导航系统、大力发展惯性导航系统、积极探索脉冲星导航系统;“1”是实现1个融合发展࿰…...
基于单片机的电梯智能识别电动车阻车系统设计与实现
标题:基于单片机的电梯智能识别电动车阻车系统设计与实现 内容:1.摘要 随着电动车在日常生活中的普及,将电动车带入电梯带来的安全隐患日益凸显,如引发火灾等。本研究的目的是设计并实现一种基于单片机的电梯智能识别电动车阻车系统。方法上,…...
什么是柜台债
柜台债(柜台债券业务)是指通过银行等金融机构的营业网点或电子渠道,为投资者提供债券买卖、托管、结算等服务的业务模式。它允许个人、企业及机构投资者直接参与银行间债券市场的交易,打破了以往仅限机构参与的壁垒。以下是综合多…...
.py文件和.ipynb文件的区别:完整教程
一、概述 Python开发者常用的两种文件格式.py和.ipynb各有特点,本教程将通过对比分析、代码示例和场景说明,帮助开发者全面理解二者的区别与联系。 二、核心区别对比 1. 文件格式本质 特性.ipynb文件.py文件文件类型JSON结构化文档纯文本文件存储内容…...
Python中NumPy的逻辑和比较
在数据科学和科学计算领域,NumPy是一个不可或缺的Python库。它提供了高效的多维数组对象以及丰富的数组操作函数,其中逻辑和比较操作是NumPy的核心功能之一。通过灵活运用这些操作,我们可以轻松实现数据筛选、条件判断和复杂的数据处理任务。…...
tt_Docker
快速上手 查看 Docker 服务运行状态;查看本地镜像;从 Docker Hub 拉取基础镜像, 我们此处选择 ubuntu:18.04 镜像;再次查看本地镜像;使用 ubuntu:18.04 镜像构建容器,并交互式运行容器;在容器内部执行 LS 命令;退出容器;查看本地容器实例;再次启动停止的…...
虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?
虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解? code review! 文章目录 虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?理解这句话的关键点1.类(…...
compose map 源码解析
目录 TileCanvas ZoomPanRotateState ZoomPanRotate 布局,手势处理完了,就开始要计算tile了 MapState TileCanvasState telephoto的源码已经分析过了.它的封装好,扩展好,适用于各种view. 最近又看到一个用compose写的map,用不同的方式,有点意思.分析一下它的实现流程与原…...
IDEA202403 常用设置【持续更新】
文章目录 1、设置maven2、设置JDK3、菜单栏固定展示4、连接Gitee第一步、安装插件第二步、Gitee账号配置 IDEA 是程序员的编程利器,需要具备其的各种配置,提高工作效率。Java项目启动,两个关键设置:Maven 和 JDK设置。 1、设置mav…...
从零开始开发纯血鸿蒙应用之语音输入
从零开始开发纯血鸿蒙应用 〇、前言一、认识 speechRecognizer1、使用方式2、依赖权限3、结果回写 二、实现语音识别功能1、创建语音识别引擎2、设置事件监听3、启动识别4、写入音频数据5、操作控制 三、总结 〇、前言 除了从图片中识别文本外,语音输入也是一种现代…...
c++ STL常用工具的整理和思考
蓝桥杯后,我整理了这些常用的C STL工具 作为一个算法竞赛的中等生,以前总觉得STL“花里胡哨”,不如自己写数组和循环踏实。但这次蓝桥杯发现,合理用STL能省很多时间,甚至避免低级错误。下面是我总结的常用知识点和踩过…...
Go:复合数据结构
数组 定义:数组是固定长度、元素数据类型相同的序列 。元素通过索引访问,索引从 0 到数组长度减 1 。可用len函数获取元素个数 。 初始化:默认元素初始值为类型零值(数字为 0 ) 。可使用数组字面量初始化,…...
SQL 语句基础(增删改查)
文章目录 一、SQL 基础概念1. SQL 简介2. 数据库系统的层次结构 二、SQL 语句分类1. DDL(Data Definition Language 数据定义语言)1.1 CREATE1.1.1 创建数据库1.1.2 创建数据表1.1.3 创建用户 1.2 ALTER1.2.1 AlTER 添加字段名1.2.2 ALTER 修改字段名1.2…...
【蓝桥杯 CA 好串的数目】题解
题目链接 考虑令 p r e [ i ] pre[i] pre[i] 表示 [ p r e [ i ] , i ] [pre[i], i] [pre[i],i] 是连续非递减子串,这可以类似双指针 O ( n ) O(n) O(n) 预处理: std::vector<int> pre(n); for (int r 1, l 0; r < n; r) {if (s[r] ! s[…...
Oracle for Linux安装和配置(11)——Linux命令
11.1. Linux命令 Linux是目前比较常用和流行的操作系统,现在很多生产环境就会用到它。随着其功能、性能、稳定性和可靠性等方面的日渐增强和完善,加之其成本上的优势,其市场占有率逐日攀升,也得到越来越多广大用户的关注和青睐。但作为一种操作系统,其安装、配置、管理和…...
Linux基础7
一、逻辑卷管理 查看所有物理卷:pvs 查看当前系统卷组:vgs 查看所有逻辑卷:lvs 新创建系统卷组:vgcreate [参数] [volume name] url/sdb[1-2] eg:vgcreate vg_Test /dev/sdb{1,2} >…...
C#打开文件及目录脚本
如果每天开始工作前都要做一些准备工作,比如打开文件或文件夹,我们可以使用代码一键完成。 using System.Diagnostics; using System.IO;namespace OpenFile {internal class Program{static void Main(string[] args){Console.WriteLine("Hello, …...
Docker 镜像 的常用命令介绍
拉取镜像 $ docker pull imageName[:tag][:tag] tag 不写时,拉取的 是 latest 的镜像查看镜像 查看所有本地镜像 docker images or docker images -a查看完整的镜像的数字签名 docker images --digests查看完整的镜像ID docker images --no-trunc只查看所有的…...
Python数组学习之旅:数据结构的奇妙冒险
Python数组学习之旅:数据结构的奇妙冒险 第一天:初识数组的惊喜 阳光透过窗帘缝隙洒进李明的房间,照亮了他桌上摊开的笔记本和笔记本电脑。作为一名刚刚转行的金融分析师,李明已经坚持学习Python编程一个月了。他的眼睛因为昨晚熬夜编程而微微发红,但脸上却挂着期待的微…...
Vue 3 和 Vue 2 的区别及优点
Vue.js 是一个流行的 JavaScript 框架,广泛用于构建用户界面和单页应用。自 Vue 3 发布以来,很多开发者开始探索 Vue 3 相较于 Vue 2 的新特性和优势。Vue 3 引入了许多改进,优化了性能、增强了功能、提升了开发体验。本文将详细介绍 Vue 2 和…...
特殊定制版,太给力了!
今天给大家分享一款超棒的免费录屏软件,真的是录屏的好帮手! 这款软件功能可以录制 MP4、AVI、WMV 格式的标清、高清、原画视频,满足你各种需求。 云豹录屏大师 多功能录屏神器 它的界面特别简洁,上手超快,用起来很顺…...
Vue事件修饰符课堂练习
Vue事件修饰符课堂练习 题目:基于 Vue 2.0,使用事件修饰符 .stop、.prevent、.capture、.self 和 .once,为按钮绑定 click 事件,并展示每个修饰符的作用。 要求: 创建一个 Vue 实例,并绑定到一个 HT…...
Y1——ST表
知识点 ST表 只能询问,不能修改 ST表的预处理: 使用了DP的思想,设a是要求区间最值的数列,f(i,j)表示从第i个数起连续2^j个数中的最大值 状态转移方程 f [ i , j ]max( f [ i , j-1 ], f [ i 2 ^ j-1,j - 1]) 建立ST表 vo…...
Python Cookbook-5.14 给字典类型增加排名功能
任务 你需要用字典存储一些键和“分数”的映射关系。你经常需要以自然顺序(即以分数的升序)访问键和分数值,并能够根据那个顺序检查一个键的排名。对这个问题,用dict 似乎不太合适。 解决方案 我们可以使用 dict 的子类,根据需要增加或者重…...
第二十二: go与k8s、docker相关编写dockerfile
实战演示k8s部署go服务,实现滚动更新、重新创建、蓝绿部署、金丝雀发布-CSDN博客 go 编写k8s命令: 怎么在go语言中编写k8s命令 • Worktile社区 k8s中如何使用go 在K8s编程中如何使用Go-阿里云开发者社区 go build - o : -o:指定输出文件…...
Servlet、HTTP与Spring Boot Web全面解析与整合指南
目录 第一部分:HTTP协议与Servlet基础 1. HTTP协议核心知识 2. Servlet核心机制 第二部分:Spring Boot Web深度整合 1. Spring Boot Web架构 2. 创建Spring Boot Web应用 3. 控制器开发实践 4. 请求与响应处理 第三部分:高级特性与最…...
事件过滤器
1.简介 事件过滤器是指在程序分发到event事件之前进行的一次高级拦截。 2.使用步骤 给控件安装事件过滤器重写eventfilter事件 3.具体实现 3.1安装事件过滤器 代码: //给label1安装事件过滤器ui->label->installEventFilter(this); 3.2重写eventfilter…...
AI识别与雾炮联动:工地尘雾治理新途径
利用视觉分析的AI识别用于设备联动雾炮方案 背景 在建筑工地场景中,人工操作、机械作业以及环境因素常常导致局部出现大量尘雾。传统监管方式存在诸多弊端,如效率低、资源分散、监控功能单一、人力效率低等,难以完美适配现代工程需求。例如…...
Kubernetes nodeName Manual Scheduling practice (K8S节点名称绑定以及手工调度)
Manual Scheduling 在 Kubernetes 中,手动调度框架允许您将 Pod 分配到特定节点,而无需依赖默认调度器。这对于测试、调试或处理特定工作负载非常有用。您可以通过在 Pod 的规范中设置 nodeName 字段来实现手动调度。以下是一个示例: apiVe…...
Nacos注册中心
Nacos注册中心 本地环境搭建 准备挂载的文件夹 在拉取 Nacos 镜像之前,在 E:\docker 文件夹下,创建一个 /nacos 文件夹,等会运行容器时,用于将 Nacos 容器中的配置文件、持久化文件挂载出来,防止容器重启时数据丢失…...
除了 `task_type=“SEQ_CLS“`(序列分类),还有CAUSAL_LM,QUESTION_ANS
task_type="SEQ_CLS"是什么意思:QUESTION_ANS 我是qwen,不同模型是不一样的 SEQ_CLS, SEQ_2_SEQ_LM, CAUSAL_LM, TOKEN_CLS, QUESTION_ANS, FEATURE_EXTRACTION. task_type="SEQ_CLS" 通常用于自然语言处理(NLP)任务中,SEQ_CLS 是 Sequence Classif…...
二战蓝桥杯所感
🌴 前言 今天是2025年4月12日,第十六届蓝桥杯结束,作为二战的老手,心中还是颇有不甘的。一方面,今年的题目比去年简单很多,另一方面我感觉并没有把能拿的分都拿到手,这是我觉得最遗憾的地方。不…...
深度解析自动化工作流工具:n8n 与 Dify 的对比分析
深度解析自动化工作流工具:n8n 与 Dify 的对比分析 随着企业数字化转型的加速,自动化工具在提高工作效率、降低人工成本方面扮演着越来越重要的角色。市面上有多种自动化工作流工具可供选择,其中 n8n 和 Dify 是两个备受关注的开源和商业产品…...
深度剖析Python中的生成器:高效迭代的秘密武器
深度剖析Python中的生成器:高效迭代的秘密武器 在Python的编程世界里,生成器(Generator)是一个强大而又迷人的特性,它为开发者提供了一种高效处理大量数据的方式,尤其在涉及到迭代操作时,能显著…...
Mac 下载 PicGo 的踩坑指南
Mac 下载 PicGo 的踩坑指南 一、安装问题 下载地址:https://github.com/Molunerfinn/PicGo/releases 下载之后直接安装即可,此时打开会报错:Picgo.app 文件已损坏,您应该将它移到废纸篓。 这是因为 macOS 为了保护用户不受恶意…...
网页布局汇总
1. 盒模型 容器大小 内容大小 内边距(padding) 边框大小 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…...
基于 Maven 构建的 Thingsboard 3.8.1 项目结构
一、生命周期(Lifecycle) Maven 的生命周期定义了项目构建和部署的各个阶段,图中列出了标准的生命周期阶段: clean:清理项目,删除之前构建生成的临时文件和输出文件。validate:验证项目配置是否…...
MySQL 中为产品添加灵活的自定义属性(如 color/size)
方案 1:EAV 模型(最灵活但较复杂) 适合需要无限扩展自定义属性的场景 -- 产品表 CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100),price DECIMAL(10,2) );-- 属性名表 CREATE TABLE attributes (id INT PRIMA…...
C++语言程序设计——02 变量与数据类型
目录 一、变量与数据类型(一)变量的数据类型(二)变量命名规则(三)定义变量(四)变量赋值(五)查看数据类型 二、ASCII码三、进制表示与转换(一&…...
第三篇:Python数据结构深度解析与工程实践
第一章:列表与字典 1.1 列表的工程级应用 1.1.1 动态数组实现机制 Python列表底层采用动态数组结构,初始分配8个元素空间,当空间不足时按0,4,8,16,25,35...的公式扩容,每次扩容增加约12.5%的容量 通过sys模块可验证扩容过程&a…...
dcsdsds
我将为您在页面顶部添加欢迎内容,同时保持整体风格的一致性。以下是修改后的代码,主要修改了模板部分和对应的样式: vue 复制 <template><div class"main-wrapper"><!-- 新增欢迎部分 --><div class"…...
Vitis: 使用自定义IP时 Makefile错误 导致编译报错
参考文章: 【小梅哥FPGA】 Vitis开发中自定义IP的Makefile路径问题解决方案 Vitis IDE自定义IP Makefile错误(arm-xilinx-eabi-gcc.exe: error: *.c: Invalid argument)解决方法 Vitis 使用自定义IP时: Makefile 文件里的语句是需要修改的,…...
应急响应练习靶机-web1
1)背景 小李在值守的过程中,发现有CPU占用飙升,出于胆子小,就立刻将服务器关机,这是他的服务器系统,请你找出以下内容,并作为通关条件: 1.攻击者的shell密码 2.攻击者的IP地址 3.攻击…...
cdp-(Chrome DevTools Protocol) browserscan检测原理逆向分析
https://www.browserscan.net/zh/bot-detection 首先,打开devtools后访问网址,检测结果网页显示红色Robot,标签插入位置,确定断点位置可以hook该方法,也可以使用插件等方式找到这个位置,本篇不讨论. Robot标签是通过insertBefore插入的. 再往上追栈可以发现一个32长度数组,里面…...
MCU刷写——Hex文件格式详解及Python代码
工作之余来写写关于MCU的Bootloader刷写的相关知识,以免忘记。今天就来聊聊Hex这种文件的格式,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢…...
SpringBoot(一)
快速入门 1.概念 SpringBoot 简单、快速地创建一个独立的、生产级别的 Spring 应用(说明SpringBoot底层是Spring) 大多数 SpringBoot 应用只需要编写少量配置即可快速整合 Spring 平台以及第三方技术 特性: 快速创建独立 Spring 应用 SSM&…...
学习Mysql对库和表的操作以及对数据的操作
对库操作 SHOW DATABASES;可以查看数据库服务器中有哪些数据库(注意databases最后的s不要忘记) SELECT DATABASE();可以查看到目前是在哪个数据库下。 CREATE DATABASE 库名;可以创建一个数据库 DROP DATABASE 库名;可以删除一个数据库 USE 库名;切换到当前数据库 对表操…...
微软office填表无法打勾✔,解决办法!
最近在使用office 填表的时候,碰到需要在选择框中打勾的情况,但是找了半天发现找不到打勾的按钮。为此,记录该问题解决办法: 以这个界面为例,如果点击打勾发现无法✔。 这里因为office和wps的编写不一样,所…...