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

【Java ee初阶】HTTP(4)

构造HTTP请求

1)开发中,前后端交互。浏览器运行的网页中,构造出HTTP请求

2)调试阶段,通过构造HTTP请求测试服务器

朴素的方案:

通过tcp socket 的方式构造HTTP请求

按照HTTP请求格式,往TCP socket中写入字符串,就能够构造出HTTP请求

package HttpFile;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;public class HttpClient {private Socket socket = null;//初始化socketpublic HttpClient(String host, int port) {try {socket = new Socket(host, port);} catch (IOException e) {e.printStackTrace();}}//通过get方法发起一个HTTP GET请求public void get(String url) throws IOException  {//构造HTTP结构的字符串try(InputStream inputStream = socket.getInputStream();OutputStream outputStream = socket.getOutputStream();){String firstLine = "GET " + url + " HTTP/1.1\n";String header = "Host: " + socket.getInetAddress().getHostAddress() +":"+socket.getPort()+ "\n";String blankLine = "\n";String httpRequest = firstLine + header + blankLine;outputStream.write(httpRequest.getBytes());outputStream.flush();//发送出请求之后,还需要读取响应byte[] buffer = new byte[1024+1024];int n = inputStream.read(buffer);String httpResponse = new String(buffer, 0, n);System.out.println(httpResponse);}catch(IOException e){e.printStackTrace();}return ;}public static void main(String[] args) {}
}

想运行测试是有一定困难的,因为目前没有http的服务器。sougou,baidu都是https的服务器(这一直要等到虚了spring,自己写HTTP服务器之后)。这里主要是去理解,HTTP协议的本质就是按照格式构造字符串。

更希望的是构造出HTTPS的请求来访问一些知名的网站,但是通过tcp socket构造非常复杂,然而也有一些现成的库。

Java / Python /C++ 主流的编程语言都提供了这样的库。

HTTPS加密流程详解

 一、HTTPS基础概念

HTTPS(HyperText Transfer Protocol Secure)是HTTP的安全版本,它在传输层和应用层之间加入了SSL/TLS加密层。主要特点包括:

1. 数据加密:防止传输内容被窃听
2. 身份验证:确保通信双方的真实性
3. 数据完整性:防止传输内容被篡改

二、HTTPS加密流程详解

HTTP是明文传输的,因此HTTP并不安全,容易发生“运营商劫持”,如下图

运营商的路由器,搭载一些程序,识别到如果是要获取天天动听的下载地址,那么就篡改成QQ浏览器的下载地址

这就涉及到了“加密”的概念。加密属于密码学,密码学属于数学的分支学科。

其中,比较基础的核心概念:

明文:要传输的原始数据

密文:要保护原始数据,需要对数据进行变化,使其不容易被别人识别出来

明文->密文:加密过程

密文->明文:解密过程

加密解密过程中涉及到一个关键的中间数据:密钥

HTTPS工作过程:(这里不研究加密的具体算法是怎么做到的,因为这是一个比较复杂的数学问题)

1.引入对称加密

生成一个密钥,明文到密文,通过这个密钥进行,而密文到明文,也是通过这个密钥来进行的。此时客户端给服务器发送的就是通过key进行对称加密的密文,黑客就算知道数据是什么,由于他没有密钥,也就无法知道明文。

服务器收到数据之后,使用同样的密钥对数据进行解密。

HTTP协议来说,首航不加密,header和body都进行加密

上述方案是不太可行的。

一个服务器要给很多个客户端提供服务,而服务器和这些客户端通信的过程中,使用的密钥不是同一个。既然每个客户端的密钥都是不同的,得有人生成一个“随机的密钥”来作为这次通信使用,可以是客户端负责生成,也可以是由服务器负责生成。无论是哪一方生成,都需要去通知对方。

客户端负责生成密钥,比如888888(真实的密钥是非常长的一串字符串)

上述的密钥传输,也经过了黑客的设备,黑客也就知道了

问题:需要告诉对方密钥是什么,但是密钥不能明文传输

那么,如果对密钥再进行一次对称加密呢?比如密钥是key,使用另一个密钥key2针对key来进行加密,把key密文传输给对端。

然而,如果不把key2告诉服务器,服务器也就解密不了,拿不到key,如果把key2告诉服务器,又会被黑客获取到。

2.引入非对称加密

非对称加密有两个密钥,这两个密钥其中一个可以公开出去,谁都能获得,是公钥

另一个则不能公开,自己持有,是私钥

比如,使用公钥加密,那就使用私钥解密

如果使用私钥加密,那就使用公钥解密

公钥私钥不是凭空来的,都是数学家们研究出来的,具有一定关系的数据。

对称加密保护数据,本身比较安全的,关键是对称密钥要能安全传输给对方

引入非对称加密的主要目的,就是为了传输对称密钥

为什么不直接那非对称加密去传输数据呢?

因为非对称加密,加密解密的计算成本,远高于对称加密。

公钥私钥,是服务器生成的一个密钥对,私钥服务器自己持有,公钥公开出去,所有人都能获取得到。

客户端就可以使用公钥,对对称密钥进行加密。

当前的数据,到达黑客的设备,黑客没有办法,黑客手里只有公钥,公钥此处是用来加密的,无法进行解密。

服务器拿着私钥解密,获取到对称密钥888888

*黑客为什么不直接入侵服务器,这样不就能拿到私钥了吗

*当然有可能的, 但是存在门槛的。 入侵运营商的设备,大概率是比入侵一个企业的机房要更容易一些。 直接入侵了,不需要监听任何数据,直接拖数据库。 (知名网站被拖库,也不是什么新鲜事了...)

3.中间人共计

黑客是有办法解决刚才那一套方案的 

由于公钥本身就是公开的,不需要加密传输

黑客自己生成了一堆公钥私钥pub2 / pri2

客户端不知道公钥是不是对的,只能选择相信,拿着pub2对堆成密钥888888进行加密。

由于此时数据是通过Pub2加密的,所以黑客就可以拿着pri2对数据解密从而拿到888888.黑客手里拿到了服务器的Pub1公钥,拿着pub1对888888重新进行加密。

服务器拿着Pri1解密,当然解密成功了,服务器拿到了888888.

4.引入证书,通过证书解决中间人共计

证书解决的核心问题,就是让客户端能够识别出当前的公钥,是否是服务器本身创建的,还是黑客伪造的

此时需要引入第三方公正机构,通过公证机构的认证就可以认为公钥是可信的。

证书中结构化数据构成的字符串包含以下属性:

1.证书的发布机构

2.证书的有效期

3.证书的所有者

4.证书对应服务器的地址/域名

5.公钥(服务器生成的pub1 / pri1)

6.数字签名

数字签名是验证证书有效的关键要素!

服务器的开发者需要再公正机构申请证书,提交资质,让对方进行审核。

客户端需要验证证书的合法性,依靠数字签名。

数字签名的生成:

(数字签名,就是加密后的校验和)

公证机构,生成证书之后,针对证书,算一个校验和

公证机构,拿着自己生成的非对称密钥对 (pub3 / pri3)

使用其中的 私钥 pri3 对校验和进行加密,得到了数字签名。

数字签名的验证:

客户端拿到证书之后,需要按照同样的校验和算法,对证书的这些字段 再算一次校验和,得到checksum1 (客户端自己算的)

使用公证机构的 pub3 公钥对证书中的数字签名,进行解密,得到checksum2 (公证机构算的)

如果两者相等,说明证书没有被篡改过,证书中的公钥就是科学的 (服务器原始生成的)

如果黑客篡改了证书中的 公钥,算出来的 checksum1 一定是不等于 checksum2 的

如果不匹配,客户端/浏览器,弹出提示框

对于chrome 弹出 红色的页面 该网站存在风险,是否要继续访问

上述流程中

1) 黑客能否篡改公钥呢?

不能。一旦篡改公钥,checksum对不上,客户端就能识别出来。 

2) 黑客能否自己搞一个证书,整个替换掉服务器返回的证书?

不能 。证书中包含了服务器的 地址/域名 本来访问百度网站,得到的域名,是别人的域名,浏览也很容易识别

3) 黑客是否可以篡改公钥同时,也把数字签名也篡改了呢?

 不能. 数字签名是通过公证机构的私钥来进行加密的,这个私钥,黑客拿不到(黑客无法对自己算的校验和进行正确的加密)

4) 公证机构的公钥如何被客户端拿到? 黑客是否可能伪造公证机构的公钥呢?

不能的! 公证机构的公钥不是通过网络获取的,而是内置在操作系统里的 (当然也可以通过其他途径进行安装)

如果黑客搞了一个有猫腻的系统镜像 (之前第三方的系统镜像,大白菜,老毛桃..... 都可能存在这样的隐患)

fiddler安装的时候,也需要安装一个证书。

fiddler的工作过程,就是在进行中间人攻击。数据是加密的,信任安装fiddler的证书,就是允许fiddler进行中间人攻击。 fiddler使用自己的证书替换掉服务器返回的证书。 fiddler的证书已经被安装信任了,就不会让浏览器报错了。fiddler通过上述中间人攻击,拿到对称密钥,进一步的对所有数据解密 让我们看到抓包结果的。

相关文章:

【Java ee初阶】HTTP(4)

构造HTTP请求 1)开发中,前后端交互。浏览器运行的网页中,构造出HTTP请求 2)调试阶段,通过构造HTTP请求测试服务器 朴素的方案: 通过tcp socket 的方式构造HTTP请求 按照HTTP请求格式,往TCP…...

永久免费!专为 Apache Doris 打造的可视化数据管理工具 SelectDB Studio V1.1.0 重磅发布!

作为全球领先的开源实时数据仓库, Apache Doris Github Stars 已超过 13.6k,并在 5000 余家中大型企业生产环境得到广泛应用,支撑业务核心场景,成为众多企业数据分析基础设施不可或缺的重要基座。过去,Apache Doris 用…...

React中useDeferredValue与useTransition终极对比。

文章目录 前言一、核心差异对比二、代码示例对比1. useDeferredValue:延迟搜索结果更新2. useTransition:延迟路由切换 三、应用场景总结四、注意事项五、原理剖析1. 核心机制对比2. 关键差异3. 代码实现原理 总结 前言 在React的并发模式下&#xff0c…...

Git 项目切换到新的远程仓库地址

已存在的 Git 项目切换到新的远程仓库地址,比如你要换成: gitgithub.com:baoing/test-app.git步骤如下: 查看当前的远程仓库地址(可选) git remote -v你会看到类似: origin gitgithub.com:old-user/old…...

科技晚报 AI 速递:今日科技热点一览 丨 2025 年 5 月 17 日

科技晚报AI速递:今日科技热点一览 丨2025年5月17日 我们为您汇总今日的科技领域最新动向,带您快速了解前沿技术、突破性研究及行业趋势。 黄仁勋劝特朗普:AI 芯片出口规则得改,中国紧追其后:英伟达 CEO 黄仁勋在华盛顿 “山与谷论…...

基于OpenCV的SIFT特征和FLANN匹配器的指纹认证

文章目录 引言一、概述二、代码解析1. 图像显示函数2. 核心认证函数3. 匹配点筛选4. 认证判断 三、主程序四、技术要点五、总结 引言 在计算机视觉领域,图像特征匹配是一个非常重要的技术,广泛应用于物体识别、图像拼接、运动跟踪等场景。今天将介绍一个…...

【Linux】共享内存

🌻个人主页:路飞雪吖~ 🌠专栏:Linux 目录 ☃️共享内存 🪄 shmget函数 用来创建共享内存 ✨共享内存的管理指令: 🌠 shmid VS key ✨共享内存函数 🍔 shmget() 创建共享内存 &a…...

Cookie、Session、Token

Cookie 1. 什么是cookie? Cookie 是一种由服务器发送到客户端浏览器的小数据片段,用于存储用户的状态信息。例如,用户登录状态或用户偏好设置可以通过Cookie进行管理。计算机cookie更正式地称为 HTTP cookie、网络 cookie、互联网 cookie 或浏览器 coo…...

设计模式Java

UML类图 概述 类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。 类图的作用 在软件工程中,类图是一种静态的结构图&#xff0c…...

Word文档图片排版与批量处理工具推荐

先放下载链接:夸克网盘下载 前几天给大家推荐了 Excel 图片调整软件,当时好多小伙伴问有没有 Word 相关的软件。我在网上找了一圈都没找到合适的,最后在我好久之前记录的一个文档里发现了,这不,马上就来给大家推荐,有…...

[案例五] 实体——赋值质量

最近翻阅了实验室其他人编写的一个“质量赋值”功能,能够直接为实体或组件设定质量。出于好奇,我对其进行了分析。由于自己平时没有用到该功能,所以也借此机会学习一下。 在分析过程中,我发现NX 官方其实并没有提供直接修改质量的功能。一般来说,质量是通过“密度 体积”…...

手撕四种常用设计模式(工厂,策略,代理,单例)

工厂模式 一、工厂模式的总体好处 解耦:客户端与具体实现类解耦,符合“开闭原则”。统一创建:对象创建交由工厂处理,便于集中控制。增强可维护性:新增对象种类时不需要大改动调用代码。便于扩展:易于管理…...

C# 深入理解类(静态函数成员)

静态函数成员 除了静态字段,还有静态函数成员。 如同静态字段,静态函数成员独立于任何类实例。即使没有类的实例,仍然可以调用静 态方法。静态函数成员不能访问实例成员,但能访问其他静态成员。 例如,下面的类包含一…...

数据类型转换

文章目录 基本数据类型(primitive type)整数类型:浮点类型字符类型boolean类型 类型转换类型转换注意点 基本数据类型(primitive type) 整数类型: ​ byte占1个字节范围:-128-127 ​ short占…...

深入理解 TypeScript 中的 unknown 类型:安全处理未知数据的最佳实践

在 TypeScript 的类型体系中,unknown 是一个极具特色的类型。它与 any 看似相似,却在安全性上有着本质差异。本文将从设计理念、核心特性、使用场景及最佳实践等方面深入剖析 unknown,帮助开发者在处理动态数据时既能保持灵活性,又…...

AI:人形机器人的应用场景以及商业化落地潜力分析

应用场景分析 人形机器人的设计使其能够适应人类环境,执行多样化任务。以下是未来主要的应用场景及其详细分析: 医疗与护理 具体应用: 老年护理:协助老年人穿衣、洗澡、喂食,或提供情感陪伴。康复辅助:帮助…...

JavaScript入门【3】面向对象

1.对象: 1.概述: 在js中除了5中基本类型之外,剩下得都是对象Object类型(引用类型),他们的顶级父类是Object;2.形式: 在js中,对象类型的格式为key-value形式,key表示属性,value表示属性的值3.创建对象的方式: 方式1:通过new关键字创建(不常用) let person new Object();// 添…...

亲测有效!OGG 创建抽取进程报错 OGG-08241,如何解决?

前言 今天在测试 OGG 一个功能的时候,需要重新初始化 oggca,所以重装了一下 OGG。重建完之后重新添加抽取进程报错,一直无法添加成功: 经过一翻分析,找到了解决方案,本文记录一下解决过程。 问题描述 OG…...

【第二篇】 初步解析Spring Boot

简介 SpringBoot是由Pivotal团队提供的全新框架,其设计目的是为了用来简化Spring应用的初始搭建以及开发过程的。本文章将详细介绍SpringBoot为什么能够简化项目的搭建以及普通的Spring程序的开发。文章内容若存在错误或需改进的地方,欢迎大家指正&#…...

JVM 机制

目录 一、什么是 JVM: 二、JVM 的运行流程: 三、JVM 内存区域划分: 1、( 1 ) 程序计数器: 1、( 2 ) 元数据区: 1、( 3 ) 栈: 1、( 4 ) 堆: 四、类加载: 1、什么时候会触…...

Java泛型详解

文章目录 1. 引言1.1 什么是泛型1.2 为什么需要泛型1.3 泛型的优势2. 泛型基础2.1 泛型类多个类型参数2.2 泛型方法2.3 泛型接口2.4 类型参数命名约定3. 类型擦除3.1 什么是类型擦除3.2 类型擦除的影响1. 无法获取泛型类型参数的实际类型2. 无法创建泛型类型的数组3. 无法使用`…...

机器学习,深度学习,神经网络,深度神经网络之间有何区别?

先说个人观点:机器学习>神经网络>深度学习≈深度神经网络。深度学习是基于深度神经网络的,深度神经网络和浅层神经网络都是神经网络,而机器学习是包括神经网络在内的算法。 一、机器学习 先说涵盖范围最广的机器学习。机器学习&#…...

AtomicInteger

AtomicInteger 是 Java 并发包 (java.util.concurrent.atomic) 中的一个原子类,用于在多线程环境下对整数进行原子操作。 核心特性 原子性 提供线程安全的原子操作(如自增、加法、比较并交换等),确保在多线程环境中操作不会被中…...

威布尔比例风险模型(Weibull Proportional Hazards Model, WPHM)详解:原理、应用与实施

威布尔比例风险模型(Weibull Proportional Hazards Model, WPHM)详解:原理、应用与实施 一、核心原理:从威布尔分布到比例风险模型 1. 威布尔分布的数学本质 威布尔分布通过两个关键参数(形状参数 (k) 和尺度参数 (\…...

Dubbo:Docker部署Zookeeper、Dubbo Admin的详细教程和SpringBoot整合Dubbo的实战与演练

🪁🍁 希望本文能给您带来帮助,如果有任何问题,欢迎批评指正!🐅🐾🍁🐥 文章目录 一、背景二、Dubbo概述三、Dubbo与SpringCloud的关系四、Dubbo技术架构五、Docker安装Zoo…...

Windows 上安装下载并配置 Apache Maven

1. 下载 Maven 访问官网: 打开 Apache Maven 下载页面。 选择版本: 下载最新的 Binary zip archive(例如 apache-maven-3.9.9-bin.zip)。 注意:不要下载 -src 版本(那是源码包)。 2. 解压 Mave…...

Unbuntu 命令

Ubuntu 命令速查表​ ​分类​​命令​​功能描述​​示例/常用选项​​​​文件与目录​ls列出目录内容ls -a(显示隐藏文件); ls -lh(详细列表易读大小) cd切换目录cd ~(主目录); cd ..(上级…...

机器学习-人与机器生数据的区分模型测试-数据处理1

附件为训练数据,总体的流程可以作为参考。 导入依赖 import pandas as pd import os import numpy as np from sklearn.model_selection import train_test_split,GridSearchCV from sklearn.ensemble import RandomForestClassifier,VotingClassifier from skle…...

【Linux】进程间通信(一):认识管道

📝前言: 这篇文章我们来讲讲进程间通信——认识管道 🎬个人简介:努力学习ing 📋个人专栏:Linux 🎀CSDN主页 愚润求学 🌄其他专栏:C学习笔记,C语言入门基础&a…...

AMD Vivado™ 设计套件生成加密比特流和加密密钥

概括 重要提示:有关使用AMD Vivado™ Design Suite 2016.4 及更早版本进行 eFUSE 编程的重要更新,请参阅AMD设计咨询 68832 。 本应用说明介绍了使用AMD Vivado™ 设计套件生成加密比特流和加密密钥(高级加密标准伽罗瓦/计数器模式 (AES-GCM)…...

第三十四节:特征检测与描述-SIFT/SURF 特征 (专利算法)

一、特征检测:计算机视觉的基石 在计算机视觉领域中,特征检测与描述是实现图像理解的核心技术。就像人类通过识别物体边缘、角点等特征来认知世界,算法通过检测图像中的关键特征点来实现: 图像匹配与拼接 物体识别与跟踪 三维重建 运动分析 其中,SIFT(Scale-Invariant F…...

【AI】SpringAI 第二弹:基于多模型实现流式输出

目录 一、基于多模型实现流式输出 1.1 什么是流式输出 1.2 多模型引入 1.3 代码实现 1.3.1 流式输出的API介绍 1.3.2 Flux 源码分析 二、了解 Reactor 模型 三、SSE 协议 一、基于多模型实现流式输出 1.1 什么是流式输出 流式输出(Streaming Output)是指数据在生成过程…...

SQL语句执行问题

执行顺序 select [all|distinct] <目标列的表达式1> AS [别名], <目标列的表达式2> AS [别名]... from <表名1或视图名1> [别名],<表名2或视图名2> [别名]... [where <条件表达式>] [group by <列名>] [having <条件表达式>] [ord…...

模型量化AWQ和GPTQ哪种效果好?

环境&#xff1a; AWQ GPTQ 问题描述&#xff1a; 模型量化AWQ和GPTQ哪种效果好? 解决方案&#xff1a; 关于AWQ&#xff08;Adaptive Weight Quantization&#xff09;和GPTQ&#xff08;Generative Pre-trained Transformer Quantization&#xff09;这两种量化方法的…...

Github 2025-05-17 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2025-05-17统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero General Public Li…...

借助 CodeBuddy 打造我的图标预览平台 —— IconWiz 开发实录

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 想做一款自己的图标预览平台 这段时间我在做前端 UI 设计时&#xff0c;常常需要到处找图标素材&#xff0c;复…...

KL散度 (Kullback-Leibler Divergence)

KL散度&#xff0c;也称为相对熵 (Relative Entropy)&#xff0c;是信息论中一个核心概念&#xff0c;用于衡量两个概率分布之间的差异。给定两个概率分布 P ( x ) P(x) P(x) 和 Q ( x ) Q(x) Q(x)&#xff08;对于离散随机变量&#xff09;或 p ( x ) p(x) p(x) 和 q ( x …...

【Linux网络】NAT和代理服务

NAT 之前我们讨论了&#xff0c;IPv4协议中&#xff0c;IP地址数量不充足的问题。 原始报文途径路由器WAN口时&#xff0c;对报文中的源IP进行替换的过程&#xff0c;叫做NAT。 NAT技术当前解决IP地址不够用的主要手段&#xff0c;是路由器的一个重要功能&#xff1a; NAT能…...

DeepSeek赋能电商,智能客服机器人破解大型活动人力困境

1. DeepSeek 与电商客服结合的背景 1.1 电商行业客服需求特点 电商行业具有独特的客服需求特点&#xff0c;这些特点决定了智能客服机器人在该行业的必要性和重要性。 高并发性&#xff1a;电商平台的用户数量庞大&#xff0c;尤其是在促销活动期间&#xff0c;用户咨询量会…...

Unity序列化字段、单例模式(Singleton Pattern)

一、序列化字段 在Unity中&#xff0c;序列化字段是一个非常重要的概念&#xff0c;主要用于在Unity编辑器中显示和编辑类的成员变量&#xff0c;或者在运行时将对象的状态保存到文件或网络中。 1.Unity序列化字段的作用 在编辑器中显示和编辑字段&#xff1a;默认情况下&…...

一个可拖拉实现列表排序的WPF开源控件

从零学习构建一个完整的系统 推荐一个可通过拖拉&#xff0c;来实现列表元素的排序的WPF控件。 项目简介 gong-wpf-dragdrop是一个开源的.NET项目&#xff0c;用于在WPF应用程序中实现拖放功能&#xff0c;可以让开发人员快速、简单的实现拖放的操作功能。 可以在同一控件内…...

hadoop.proxyuser.代理用户.授信域 用来干什么的

在Hadoop的core-site.xml文件中存在三个可选配置&#xff0c;如下 <property><name>hadoop.proxyuser.root.hosts</name><value>*</value> </property> <property><name>hadoop.proxyuser.root.groups</name><value…...

python 自动化教程

文章目录 前言整数变量​字符串变量​列表变量​算术操作​比较操作​逻辑操作​if语句​for循环遍历列表​while循环​定义函数​调用函数​导入模块​使用模块中的函数​启动Chrome浏览器​打开网页​定位元素并输入内容​提交表单​关闭浏览器​发送GET请求获取网页内容​使…...

C++学习:六个月从基础到就业——C++11/14:列表初始化

C学习&#xff1a;六个月从基础到就业——C11/14&#xff1a;列表初始化 本文是我C学习之旅系列的第四十三篇技术文章&#xff0c;也是第三阶段"现代C特性"的第五篇&#xff0c;主要介绍C11/14中的列表初始化特性。查看完整系列目录了解更多内容。 引言 在C11之前&a…...

城市静音革命:当垃圾桶遇上缓冲器

缓冲垃圾桶的核心原理是通过机械或液压装置实现垃圾桶盖的缓慢闭合&#xff0c;包含以下技术要点&#xff1a;‌能量吸收机制‌液压式&#xff1a;通过活塞挤压油液产生阻尼力&#xff0c;将动能转化为热能耗散弹簧式&#xff1a;利用弹性变形储存和释放能量&#xff0c;配合摩…...

数据库的规范化设计方法---3种范式

第一范式&#xff08;1NF&#xff09;&#xff1a;确保表中的每个字段都是不可分割的基本数据项。 第二范式&#xff08;2NF&#xff09;&#xff1a;在满足1NF的基础上&#xff0c;确保非主属性完全依赖于主键。 第三范式&#xff08;3NF&#xff09;&#xff1a;在满足2NF的基…...

p024基于Django的网上购物系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 商品类型管理 商品信息管理 系统管理 订单管理…...

C++跨平台开发:挑战与应对策略

C跨平台开发&#xff1a;挑战与应对策略 在如今设备多样、操作系统碎片化的开发环境中&#xff0c;跨平台能力已成为衡量软件生命力与团队工程效率的重要指标。C 作为高性能系统级语言&#xff0c;在游戏引擎、嵌入式系统、实时渲染等领域依旧坚挺。然而&#xff0c;实现“一次…...

Kotlin 作用域函数(let、run、with、apply、also)对比

Kotlin 的 作用域函数&#xff08;Scope Functions&#xff09; 是简化代码逻辑的重要工具&#xff0c;它们通过临时作用域为对象提供更简洁的操作方式。以下是 let、run、with、apply、also 的对比分析&#xff1a; 一、核心区别对比表 函数上下文对象引用返回值是否扩展函数…...

JavaScript性能优化实战(11):前沿技术在性能优化中的应用

引言 随着Web应用复杂度和性能需求不断提高,传统的JavaScript优化技术已经无法满足某些高性能计算场景的需求。本文将深入探讨前沿Web技术如何突破JavaScript的性能瓶颈,为Web应用提供接近原生应用的性能体验。从底层计算到图形渲染,从并发处理到动画优化,我们将通过实际案…...