当前位置: 首页 > news >正文

【日撸 Java 三百行】Day 11(顺序表(一))

目录

Day 11:顺序表(一)

一、关于顺序表

二、关于面向对象

三、代码模块分析

1. 顺序表的属性

2. 顺序表的方法

四、代码及测试

拓展:

小结


Day 11:顺序表(一)

Task:

        在《数据结构》中, 使用“抽象数据类型”来描述不同的数据结构. 在《面向对象程序设计》中, 用对象来存储数据及其上的操作. 我认为, 它们的本质都是相同的.

  • 对象: 数据及其上操作的总和. 例如, 我是一个对象, 具有身高、体重、年龄、跑步速度等数据; 同时,我具有吃饭、睡觉、送快递等功能. 从计算机的发展来看, 第一阶段以操作 (函数) 为中心, 一个计算导弹轨迹的函数, 根据不同输入获得不同输出. 第二阶段以数据为中心, 即数据存放于数据库, 使用不同的算法来处理它. 第三阶段认为数据及其上的操作是统一不可分的, 这就到了面向对象.
  • 类. 前面已经使用过 int i; 这类代码, int 就是类型, i 是一个具体的整数变量. 同理, 对象就是属于某种类的变量. 也可以用集合的方式来理解: 类是集合, 对象是其中的元素; int 是指所有整数的集合, i 是其中的一个元素.
  • 包. 包并非程序设计必须的东西, 其作用仅仅是将类进行合理的组织. 但是, 在计算机界, 往往这种可有可无的东西才是最重要的. 如文档、注释、编码规范. 可有可无是针对程序的运行而言, 其核心是计算机; 而重要是针对程序的易读性、可维护性而言, 其核心是程序员.
  • 常量用 final 修饰. 这里故意把 MAX_LENGTH 设置得比较少, 方便调拭后面的越界检查代码.
  • 用 new 生成新的对象.
  • 有一个成员变量叫做 length. 程序里还有用 length 表示一个整数数组的长度. 实际上, 同一个变量名可以被不同的类所使用, 例如: 人有体重, 西瓜也有重量. 由于限定了不同的类、不同的对象, 它们之间就不会有冲突. 张三的体重、李四的体重,有关联才奇怪了. 这段描述写出来怪怪的, 明明现实生活中就是如此. 但这也正是体现了面向对象的特点: 比面向过程的程序设计更贴合我们的人类认知, 也就更远离机器底层.
  • toString 这个方法很特殊, 它覆盖了 Object 类的相应方法. 可以看到, 在 println 里面使用 tempFirstList 里, 由于是用另一个字符串与其相加, 系统会自动调用 tempFirstList.toString().

一、关于顺序表

        详细的介绍,可以参考这一篇学习笔记:【数据结构】线性表-CSDN博客
        虽然学习笔记中是用 C++ 来实现的,但是构建顺序表的思维模式是相同的,举一反三即可。接下来简单说说顺序表。

        顺序表从属于线性表这一个大类 。线性表,全名为线性存储结构,使用线性表存储数据的方式可以这样理解,即“把所有数据用一根线儿串起来,再存储到物理空间中”。
        按顺序方式存储的线性表称为顺序表(array-based list),又称为向量(vector),通过创建数组来建立。顺序表中的每个元素按其顺序有唯一的索引值,又称下标值,可以用来方便地访问元素内容。

        一般来说,所有的编程语言模拟顺序表的方法都是通过数组,因为数组的存储与逻辑结构与顺序表几乎完全一致。

二、关于面向对象

        在学习 C++ 时,为了引入 “类” 的概念,我们初步接触了 “面相对象” 这一程序设计原则。

        那么我们为什么要重谈 “类” 这个概念呢?首先,我们需要区分面向过程的程序设计和面向对象的程序设计有何区别。

        面向过程的程序设计是以具体的解题过程为研究和实现的主体,而面向对象的程序设计是以需解决的问题中所涉及的各种对象为主体。
        在面向对象的方法学中,“对象”是现实世界的实体或概念在计算机逻辑中的抽象表示。具体地,对象是具有唯一对象名和对外接口的一组属性和操作的集合。例如,将现实中的“人”抽象来,它具有姓名、年龄、住址等属性,同时具有设置住址、获得年龄、跑动、跳舞等对外的接口和操作。
        面向对象的问题求解就是力图从实际问题中抽象出这些封装了数据和操作的对象,通过定义接口来描述它们的地位及与其他对象的关系,最终形成一个广泛联系的对象模型系统。相对于传统的面向过程的程序设计方法,面向对象的程序设计具有如下的优点

  1. 对象的数据封装特性消除了传统结构方法中数据与操作分离所带来的种种问题提高了程序的可复用性和可维护性,降低了程序员保持数据与操作相容的负担。
  2. 对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。
  3. 对象作为独立的整体具有良好的自洽性。即,它可以通过自身定义的操作来管理自己。一个对象的操作可以完成两类功能,一是修改自身的状态,二是向外界发布消息。当一个对象欲影响其他对象时,它需要调用其他对象自身的方法,而不是直接去改变那个对象。这样可以维护对象的完整性。
  4. 对象之间通过一定的接口和相应的消息机制相联系。这个特性与对象的封装性结合在一起,较好地实现了信息的隐藏。使用对象时只需要了解其接口提供的功能操作即可而不必了解对象内部的数据描述和具体的功能实现。
  5. 继承是面向对象方法中除封装外的另一个重要特性。通过继承可以很方便地实现应用的扩展和已有代码的重复使用,在保证质量的前提下提高开发效率。

        在今天的代码中,我们会较为频繁的涉及 关键字final重载,这部分与 C++ 有异曲同工之妙,理解起来并不是很难。但为了保证自己对知识的掌握程度以及理解程度,这里还是单开一篇博文来讲述,可以参考这一篇学习笔记: 

三、代码模块分析

        有了基础知识的储备后,我们可以开始完成今天的任务了。

1. 顺序表的属性

	/*** The maximal length of the list. It is a constant.*/public static final int MAX_LENGTH = 10;/*** The actual length not exceeding MAX_LENGTH. Attention: length is not only the* member variable of Sequential list, but also the member variable of Array. In* fact, a name can be the member variable of different classes.*/int length;/*** The data stored in an array.*/int[] data;

        这些内容是对于顺序表数据结构需要使用的属性,本代码构建的是静态创建的顺序表,因此在最开始就需要限定顺序表的分配长度而无法在后期再更改(MAX_LENGTH)。所以使用了final int这个关键字,综上,final限制基本的系统数据类型后,此类型无法被更改,如同常量一样(就像C++的const,另外这种常量声明的名称标识都必须是大写表示,这虽然不是编译器强制的,但是是我们统一的习惯)

2. 顺序表的方法

        需要说明的是,此类的名称要求统一命名为SequentialList()

	public SequentialList() {length = 0;data = new int[MAX_LENGTH];}// Of the first constructor/************************ Construct a sequential list using an array.* * @param paraArray The given array. Its length should not exceed MAX_LENGTH.*                  For simplicity now we do not check it.**********************/public SequentialList(int[] paraArray) {data = new int[MAX_LENGTH];length = paraArray.length;// Copy data.for (int i = 0; i < paraArray.length; i++) {data[i] = paraArray[i];} // Of for i}// Of the second constructor/************************ Overrides the method claimed in Object, the superclass of any class.**********************/public String toString() {String resultString = "";if (length == 0) {return "empty";} // Of iffor (int i = 0; i < length - 1; i++) {resultString += data[i] + ",";} // Of for iresultString += data[length - 1];return resultString;}// Of toString/************************ Reset to emppty**********************/public void reset() {length = 0;}// Of reset

        这里对于构造函数使用了重载,public SequentialList()创建了个无参构造函数,public SequentialList(int[] paraArray)构造了输入数组作为参数的构造函数。前者适合于一般情况下我们初始化顺序表的操作,后者能非常快捷完成数据的复制操作。

        此外,这里还重写了Object的toString()方法(Java中所有类都是Object类的儿子),因为这个方法与print()方法挂钩,重写了这个方法后,我们创建的对象就能通过print操作打印出数据,能更加方便数据的使用以及可读性。

        最后,参考 “线性表” 学习笔记,我们知道,还可以构建其他辅助的方法,如 append,insert,setValue 等方法。

四、代码及测试

package datastructure.list;/*** Sequential list.** @author: Changyang Hu joe03@foxmail.com* @date created: 2025-05-12*/
public class SequentialList {/*** The maximal length of the list. It is a constant.*/public static final int MAX_LENGTH = 10;/*** The actual length not exceeding MAX_LENGTH. Attention: length is not only* the member variable of Sequential list, but also the member variable of* Array. In fact, a name can be the member variable of different classes.*/int length;/*** The data stored in an array.*/int[] data;/*** ********************** @Title: SquentialList* @Description: Construct an empty sequential list.* * @return void **********************/public SequentialList() {length = 0;data = new int[MAX_LENGTH];}// Of the first constructor/************************ Construct a sequential list using an array.* * @param paraArray* 				The given array. Its length should not exceed MAX_LENGTH. For*            	simplicity now we do not check it.*********************            */public SequentialList(int[] paraArray) {data = new int[MAX_LENGTH];length = paraArray.length;// Copy datafor (int i = 0; i < paraArray.length; i++) {data[i] = paraArray[i];} // Of for i}// Of the second constructor/************************ Overrides the method claimed in Object, the superclass of any class.**********************/public String toString() {String resultString = "";if (length == 0) {return "empty";} // Of iffor (int i = 0; i < length; i++) {resultString += data[i] + ",";} // Of for iresultString += data[length - 1];return resultString;}// Of toString/*** ********************** @Title: reset* @Description: Reset to empty.* * @return void **********************/public void reset() {length = 0;}// Of reset/*** ********************** @Title: main* @Description: The entrance of the program.** @param args Not used now.* @return void **********************/public static void main(String args[]) {int[] tempArray = { 1, 4, 6, 9 };SequentialList tempFirstList = new SequentialList(tempArray);System.out.println("Initialized, the list is: " + tempFirstList.toString());System.out.println("Again, the list is: " + tempFirstList);tempFirstList.reset();System.out.println("After reset, the list is: " + tempFirstList);}// Of main}// Of clas SequentialList

        其中,需要注意的是第一二行,我们用了两种不同的输出方式,一种调用了我们重构的 toString()  函数,另一种是通过 println() 函数中对 List 的特殊处理方式。

拓展:

        顺序表基本概念:【数据结构】线性表-CSDN博客

        类、包和接口:


小结

        顺序表作为我们最开始接触到的数据结构,难度是很小的,因为其内核思想符合我们正常思维,即 “按顺序先来后到”
        但是,从实践层面来看,有人说,很多计算机的问题,本质上都可以视为字符串的处理。字符串处理是数据处理中最基础也是最麻烦也是的问题,而字符串本身上就是顺序表的字符表现。
        计算机算法领域的非常重要的查找与排序问题也是属于顺序表问题,SQL数据库中也充满各种顺序表的信息展现,其中是否能选取合理的索引结构,能影响整个数据库的效率。

        所以综上所述,顺序表也是很困难的。因为我们选择了最简单的按顺序存储,所以在实现对全局数据的操控中(如插入,查询等),就需要我们去花心思研究高效的算法。

        因为,本质上,这是逻辑丰富与物理存储单一的矛盾

        同时,还需要注意一点,从这一次学习开始,我们会接触越来越多的数据结构,因此固定库给的函数肯定是无法处理所有结构的。为了解决这一问题,我们需要去重构不同的函数。数据结构可能是不同的,但其方法的目的是有共通性的。在学习的过程中,不断去总结,感悟,从而一步一步提高自身的代码能力和素养。

相关文章:

【日撸 Java 三百行】Day 11(顺序表(一))

目录 Day 11&#xff1a;顺序表&#xff08;一&#xff09; 一、关于顺序表 二、关于面向对象 三、代码模块分析 1. 顺序表的属性 2. 顺序表的方法 四、代码及测试 拓展&#xff1a; 小结 Day 11&#xff1a;顺序表&#xff08;一&#xff09; Task&#xff1a; 在《数…...

配置集群-日志聚集操作

日志聚集是指将分布式集群中各个节点上的应用程序日志收集并汇总到一个集中的位置&#xff0c;方便后续的查看、分析和管理。在 Hadoop 和 Spark 集群中&#xff0c;日志聚集是一项重要的功能&#xff0c;下面分别介绍如何在这两个集群中配置日志聚集操作。 Hadoop 集群日志聚…...

node版本.node版本、npm版本和pnpm版本对应

报错&#xff1a; ERR_PNPM_META_FETCH_FAIL GET https://registry.npmmirror.com/rollup: Value of "this" must be of type URLSearchParams node版本 Node.js — Node.js Releases node和pnpm对应关系 Installation | pnpm 参考 NVM管理node版本.node版本、…...

电商物流管理优化:从网络重构到成本管控的全链路解析

大家好&#xff0c;我是沛哥儿。作为电商行业&#xff0c;我始终认为物流是电商体验的“最后一公里”&#xff0c;更是成本控制的核心战场。随着行业竞争加剧&#xff0c;如何通过物流网络优化实现降本增效&#xff0c;已成为电商企业的必修课。本文将从物流网络的各个环节切入…...

Java学习手册:客户端负载均衡

一、客户端负载均衡的概念 客户端负载均衡是指在客户端应用程序中&#xff0c;根据一定的算法和策略&#xff0c;将请求分发到多个服务实例上。与服务端负载均衡不同&#xff0c;客户端负载均衡不需要通过专门的负载均衡设备或服务&#xff0c;而是直接在客户端进行请求的分发…...

E+H流量计与Profibus DP主站转Modbus RTU/TCP网关通讯

EH流量计与Profibus DP主站转Modbus RTU/TCP网关通讯 随着工业自动化的不断发展&#xff0c;各种不同品牌、型号的设备需要进行数据交互和通信。在实际应用中&#xff0c;EH流量计作为一种常用的流量测量设备&#xff0c;常常需要与其他设备进行连接和通信。而Profibus DP是一…...

mysql配置输入错误密码3次后锁定60s

mysql配置输入错误密码3次后锁定60s 1、安装插件 INSTALL PLUGIN CONNECTION_CONTROL SONAME connection_control.so; INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME connection_control.so; 2、验证是否安装成功 SHOW VARIABLES LIKE connection_control…...

首屏优化,webpack插件用于给html中js自动添加异步加载属性

因为要使用cheerio库&#xff0c;需要安装 npm安装 npm install cheerio --save-dev或使用 yarn安装 yarn add cheerio --dev创建async-script-webpack-plugin.js const cheerio require(cheerio);class AsyncScriptWebpackPlugin {constructor(options {}) {this.options …...

SQLite 数据库常见问题及解决方法

一、数据库文件锁定问题 1. 问题表现 在多线程或多进程环境下访问 SQLite 数据库时&#xff0c;常常会出现数据库文件被锁定的情况。当一个进程对数据库执行写操作时&#xff0c;其他进程的读写操作都会被阻塞&#xff0c;导致应用程序出现卡顿甚至无响应。比如在移动应用开发…...

day 23

机器学习管道 pipeline 一般通用pipeline的实现流程&#xff1a; 1.构建多个转换器&#xff08;transformer&#xff09;&#xff0c;来实现对特征的预处理 2.构建 ColumnTransformer&#xff0c;将不同的预处理应用于不同的列子集&#xff0c;构造一个完备的转化器 3.构建…...

MATLAB复制Excel数据到指定区域

Matlab中如何将Excel表中的265-528行F-AA列数据复制到1-263行AE-AZ中 版本&#xff1a;MatlabR2018b clc; clear; %旧Excel文件名 oldFile ; %新Excel文件名 newFile ; % 工作表名称&#xff08;旧表和新表一致&#xff09; sheetName Sheet1; % 旧文件中待复制的数据范…...

docker配置mysql主从同步

1. 创建Docker网络 docker network create mysql-network 2. 创建数据卷 docker volume create mysql-master-volume docker volume create mysql-slave-volume 3. 准备MySQL配置文件 主库配置 (master.cnf) [mysqld] server-id1 log-binmysql-bin binlog_formatROW gtid_mo…...

机动车授权签字人备考考试题库及答案

一、单选题 13、《中华人民共和国大气污染防治法》规定,进口、销售超过污染物排放标准的机动车、非道路移动机械的,由县级以上人民政府(  )按照职责没收违法所得,并处货值金额一倍以上三倍以下的罚款,没收销毁无法达到污染物排放标准的机动车、非道路移动机械。 A、生态…...

WebGL图形编程实战【6】:性能优化 × 调试工具与技巧精讲

调试工具 NVIDIA Nsight Systems NVIDIA Nsight Systems 这个工具帮助开发者深入了解应用程序在CPU、GPU 和网络通信等各个层面的运行情况&#xff0c;从而有效地识别性能瓶颈并进行优化 WebGL-Inspector 插件的地址在这&#xff1a;WebGL-Inspector chrome插件 但是在这里…...

69、微服务保姆教程(十二)容器化与云原生

容器化与云原生 在微服务架构中,容器化和云原生技术是将应用程序部署到生产环境的核心技术。通过容器化技术,可以将应用程序及其依赖项打包成一个容器镜像,确保在任何环境中都能一致运行。而云原生技术则通过自动化的容器编排系统(如 Kubernetes),实现应用的动态扩展、自…...

CSS3(BFC)

CSS3(BFC) 1、什么是BFC W3C 上对 BFC 的定义&#xff1a; 原文&#xff1a;Floats, absolutely positioned elements, block containers (such as inline-blocks, table- cells, and table-captions) that are not block boxes, and block boxes with ‘overflow’ other tha…...

OrangePi Zero 3学习笔记(Android篇)7 - ftdi_sio

目录 1. 内核配置 2. SPI设备 3. 验证 这部分需要基于之前修改的ftdi_sio驱动&#xff0c;增加MPSSE部分的代码。 1. 内核配置 一般默认USB转串口是关闭的&#xff0c;所以需要配置打开。在源代码根目录下执行&#xff1a; ./longan/build.sh menuconfig 菜单进入顺序&a…...

自适应蒙特卡洛定位-AMCL

自适应蒙特卡洛定位&#xff0c;简称AMCL&#xff0c;主要提供定位功能并以/tf形式输出 蒙特卡洛算法的基本思想&#xff1a;当所要求的问题是某种事件出现的概率或者是某个变量的期望值时&#xff0c;它们可以通过某种"试验"的方法&#xff0c;得到这种事件出现的概…...

用python清除PDF文件中的水印(Adobe Acrobat 无法删除)

学校老师发的资料&#xff0c;有时候会带水印&#xff0c;有点强迫症的都想给它去掉。用Adobe Acrobat试了下&#xff0c;检测不到水印&#xff0c;无法删除&#xff01;分析发现原来这类PDF文件是用word编辑的&#xff0c;其中的水印是加在了页眉中&#xff01; 自己动手想办法…...

bootstrap自助(抽样)法

一&#xff0c;概念 一言以蔽之&#xff1a;从训练集中有放回的均匀抽样——》本质就是有放回抽样&#xff1b; 自助法&#xff08;bootstrap&#xff09;是一种通过从数据集中重复抽样来估计统计量分布的非参数方法。它可用于构建假设检验&#xff0c;当对参数模型的假设存在…...

综合实验二之删除/boot目录,进行系统修复

实验三、删除/boot目录&#xff0c;进行系统修复 在 Linux 系统中&#xff0c;/boot 目录是一个至关重要的系统目录&#xff0c;主要用于存放系统启动时所需的核心文件和配置信息。 /boot 目录的主要作用&#xff1a; 存放内核文件&#xff08;Kernel&#xff09; vmlinuz&…...

postgresql主从集群一键搭建脚本分享

脚本1&#xff1a; cat pg_ms_install.sh #!/bin/bash # 基础环境配置&#xff08;保持不变&#xff09; setenforce 0 >/dev/null 2>&1 || true sed -i "s/SELINUXenforcing/SELINUXdisabled/" /etc/selinux/config systemctl stop firewalld >/dev/n…...

融合一致性与差异性约束的光场深度估计

摘要&#xff1a;光场图像深度估计是光场三维重建、目标检测、跟踪等应用中十分关键的技术。虽然光场图像的重聚焦特性为深度估计提供了非常有用的信息&#xff0c;但是在处理遮挡区域、边缘区域、噪声干扰等情况时&#xff0c;光场图像深度估计仍然存在很大的挑战。因此&#…...

转运机器人可以绕障吗?

在工业物流场景中&#xff0c;障碍物动态分布、路径突发拥堵是常态。传统AGV依赖固定轨道或磁条&#xff0c;面对复杂环境时往往“束手无策”。转运机器人可以绕障吗&#xff1f;富唯智能用技术创新给出答案——搭载激光SLAM导航与多传感器融合技术&#xff0c;其转运机器人不仅…...

【Web前端开发】CSS基础

2.CSS 2.1CSS概念 CSS是一组样式设置的规则&#xff0c;称为层叠样式表&#xff0c;用于控制页面的外观样式。 使用CSS能够对网页中元素位置的排版进行像素控制&#xff0c;实现美化页面的效果&#xff0c;也能够做到页面的样式和结构分离。 2.2基本语法 通常都是&#xff…...

【物流开单专用软件】佳易王物流管理系统:常见的物流信息系统以及软件程序实操教程 #物流软件定制#物流软件开发#物流软件推荐

一、概述 软件试用版资源文件下载方法&#xff1a; 【进入头像主页第一篇文章最后 卡片按钮 可点击了解详细资料 或左上角本博客主页 右侧按钮了解具体资料信息】 本实例以 佳易王物流管理系统 为例说明&#xff0c;其他版本可参考本实例。试用版软件资源可到文章最…...

力扣-94.二叉树的中序遍历

题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 class Solution { public:void inorder(TreeNode* root, vector<int>& res){//C这里&一定要加if(!root)return;inorder(root->left,res);res.push_back(root->val);inorder(ro…...

对基于再生龙制作的Linux系统的硬盘进行扩容

背景 公司一个仪器产品是基于x86核心板开发的&#xff0c;因此制作系统镜像时用的再生龙软件&#xff0c;好处是制作的系统镜像比ARM平台那种raw image小很多&#xff0c;缺点是操作有点麻烦。 最近客户反馈512GB的SSD硬盘容量不够&#xff0c;因此公司决定升级成1TB的&#x…...

Spring Boot 注解详细解析:解锁高效开发的密钥

一、引言 Spring Boot 以其快速开发、自动配置等特性&#xff0c;成为构建 Java 应用程序的热门框架。而注解在 Spring Boot 中扮演着至关重要的角色&#xff0c;它们如同魔法指令&#xff0c;简化了配置流程&#xff0c;增强了代码的可读性与可维护性。本文将深入剖析 Spring…...

【速写】KV-cache与解码的再探讨(以束搜索实现为例)

文章目录 1 Beam Search 解码算法实现2 实现带KV Cache的Beam Search解码3 关于在带kv-cache的情况下的use_cache参数 1 Beam Search 解码算法实现 下面是一个使用PyTorch实现的beam search解码算法&#xff1a; 几个小细节&#xff1a; 束搜索可以加入length_penalty&#…...

ElasticSearch聚合操作案例

1、根据color分组统计销售数量 只执行聚合分组&#xff0c;不做复杂的聚合统计。在ES中最基础的聚合为terms&#xff0c;相当于 SQL中的count。 在ES中默认为分组数据做排序&#xff0c;使用的是doc_count数据执行降序排列。可以使用 _key元数据&#xff0c;根据分组后的字段数…...

微信小程序单双周选择排序有效果图

效果图 .wxml <view class"group-box"><label class"radio" wx:for"{{[单周,双周,全选]}}" wx:key"index" bind:tap"radioChange"data-index"{{index}}"><radio checked"{{index zcTem.ind…...

保持Word中插入图片的清晰度

大家有没有遇到这个问题&#xff0c;原本绘制的高清晰度图片&#xff0c;插入word后就变模糊了。先说原因&#xff0c;word默认启动了自动压缩图片功能&#xff0c;分享一下如何关闭这项功能&#xff0c;保持Word中插入图片的清晰度。 ①在Word文档中&#xff0c;点击左上角的…...

Matlab 基于GUI的汽车巡航模糊pid控制

1、内容简介 Matlab 225-基于GUI的汽车巡航模糊pid控制 可以交流、咨询、答疑 2、内容说明 略 依据比例—积分—微分控制的基本原理&#xff0c;我们利用MATLAB软件中SMULINK建立一个简单的PID控制器模型&#xff0c;利用这个模型在模糊控制过程中对PID控制参数进行在线的实时…...

(网络)应用层协议-HTTPS

1.HTTPS是什么&#xff1f; HTTPS是应用层的一种协议&#xff0c;是在HTTP的基础上进行了加密层的处理。 HTTP协议的内容都是按照文本的形式进行传输的&#xff0c;所以呢就很容易被别人知道传输的是什么。 我们在了解了TCP/IP之后是知道我们的数据在传输的过程中是通过路由器进…...

Browserless 快速上手

要将你提供的 HTML 模板和数据结构转换为可以用于 Browserless /pdf 接口的 JSON 请求体&#xff08;且能正确渲染为 PDF&#xff09;&#xff0c;需要满足以下几点&#xff1a; ✅ 最终目标格式&#xff08;这是能用的格式&#xff09;&#xff1a; json 复制编辑 { "h…...

JWT的介绍与在Fastapi框架中的应用

什么是JWT JWT (JSON Web Token) 是一个开放标准 ( RFC 7519 )&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间安全地以 JSON 对象的形式传输信息。由于这些信息经过数字签名&#xff0c;因此可以被验证和信任。JWT 可以使用密钥&#xff08;采用HMAC算…...

Html5新特性_js 给元素自定义属性_json 详解_浅克隆与深克隆

文章目录 1. html5新特性2.用 js 给元素自定义属性3.json3.1 json与普通对象的区别3.2 json对象与 js对象的转化 4.浅克隆和深克隆 1. html5新特性 html5中引入了新的特性&#xff08;新的标签&#xff09;&#xff0c;下面的新标签是新的结构标签&#xff0c;不过不太常用 h…...

一般纯软工程学习路径

基础 阶段一&#xff1a;基本熟悉工具链代码托管流程和配置 代码托管基本 1. 成见和管理代码库&#xff08;组&#xff09; 2. 成员配置和权限配置 代码迁移 1. 手工迁移 2. 脚本自动化迁移 代码提交 1. SSH key配置 2. 代码提交commit message 管理需求单 MR合并请求 1. 合并请…...

ES6基础特性

1.定时器 ——延时定时器 setTimeout&#xff08;function&#xff08;&#xff09;>{ },2000&#xff09; ——间隔执行定时器 setInterval&#xff08;function&#xff08;&#xff09;>{ },2000&#xff09; *定时器方法都返回唯一标识编号id&…...

SSTI记录

SSTI(Server-Side Template Injection&#xff0c;服务器段模板注入) 当前使用的一些框架&#xff0c;如python的flask、php的tp、java的spring&#xff0c;都采用成熟的MVC模式&#xff0c;用户的输入会先进入到Controller控制器&#xff0c;然后根据请求的类型和请求的指令发…...

Go语言爬虫系列教程(一) 爬虫基础入门

Go爬虫基础入门 1. 网络爬虫概念介绍 1.1 什么是网络爬虫 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;又称网页蜘蛛、网络机器人&#xff0c;是一种按照一定规则自动抓取互联网信息的程序或脚本。其核心功能是模拟人类浏览网页的行为&#xff0c;通过发送网络…...

c/c++爬虫总结

GitHub 开源 C/C 网页爬虫探究&#xff1a;协议、实现与测试 网页爬虫&#xff0c;作为一种自动化获取网络信息的强大工具&#xff0c;在搜索引擎、数据挖掘、市场分析等领域扮演着至关重要的角色。对于希望深入理解网络工作原理和数据提取技术的 C/C 开发者&#xff0c;尤其是…...

【HarmonyOS 5】鸿蒙碰一碰分享功能开发指南

【HarmonyOS 5】鸿蒙碰一碰分享功能开发指南 一、前言 碰一碰分享的定义 在 HarmonyOS NEXT 系统中&#xff0c;华为分享推出的碰一碰分享功能&#xff0c;为用户带来了便捷高效的跨端分享体验。开发者通过简单的代码实现&#xff0c;就能调用系统 API 拉起分享卡片模板&…...

vue H5解决安卓手机软键盘弹出,页面高度被顶起

开发中安卓机上遇到的软键盘弹出导致布局问题 直接上代码_ 在这里插入代码片 <div class"container"><div class"appContainer" :style"{height:isKeyboardOpen? Heights :inherit}"><p class"name"><!-- 绑定…...

【pypi镜像源】使用devpi实现python镜像源代理(缓存加速,私有仓库,版本控制)

【pypi镜像源】使用devpi实现python镜像源代理&#xff08;缓存加速&#xff0c;私有仓库&#xff0c;版本控制&#xff09; 文章目录 1、背景与目标2、devpi-server 服务端搭建3、devpi 镜像源使用 1、背景与目标 背景1&#xff08;访问速度优化&#xff09;&#xff1a; 直…...

Spring Bean有哪几种配置方式?

大家好&#xff0c;我是锋哥。今天分享关于【Spring Bean有哪几种配置方式&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring Bean有哪几种配置方式&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Bean的配置方式主要有三种&#xff…...

无人机信号线被电磁干扰导致停机

问题描述&#xff1a; 无人机飞控和电调之间使用PWM信号控制时候&#xff0c;无人机可以正常起飞&#xff0c;但是在空中悬停的时候会出现某一个电机停机&#xff0c;经排查电调没有启动过流过压等保护&#xff0c;定位到电调和飞控之间的信号线被干扰问题。 信号线被干扰&am…...

RWA开发全解析:技术架构、合规路径与未来趋势

RWA开发全解析&#xff1a;技术架构、合规路径与未来趋势 ——2025年真实世界资产代币化的创新逻辑与实践指南 一、RWA的核心定义与爆发逻辑 1. 什么是RWA&#xff1f; RWA&#xff08;Real World Asset Tokenization&#xff09;是通过区块链技术将现实资产&#xff08;房地…...

消息队列作用及RocketMQ详解(1)

目录 1 什么是消息队列 2 为什么要使用消息队列 2.1 异步处理 2.2 解耦 2.3 削峰填谷 3. 如何选择消息队列&#xff1f; 4. RocketMQ 4.1 生产者 4.2 消费者 4.3 主题 4.4 NameSever 4.5 Broker 5. 生产者发送消息 5.1 普通消息发送 5.1.1 同步发送 5.1.2 异步发送 5…...