计算机网络 —— HTTPS 协议
前一篇文章:计算机网络 —— HTTP 协议(详解)-CSDN博客
目录
·前言
一、HTTPS 协议简介
二、HTTPS 工作过程
1.对称加密
2.非对称加密
3.中间人攻击
4.引入证书
三、HTTPS 常见问题
1.中间人能否篡改证书?
2.中间人能否调包证书?
3.HTTPS 工作完整流程
·总结
·前言
前一篇文章中对 HTTP 协议整体做了一个基本介绍,在本篇文章里将介绍一下基于 HTTP 协议创造出来的 HTTPS 协议,关于 HTTPS 协议的重点内容就是它的一个工作过程,它是如何保证我们网络中传输数据的安全性呢?这将是本篇文章的要重点介绍的内容,下面就开始本篇文章的内容介绍。
一、HTTPS 协议简介
HTTPS 协议与 HTTP 协议一样都是应用层协议,HTTPS 协议是在 HTTP 协议的基础上引入了一个加密层,由于 HTTP 协议的内容都是按照文本的方式明文传输,这就导致在使用 HTTP 协议传输数据的过程中会出现一些数据被篡改的情况,比如:“运营商劫持”。
什么是 “运营商劫持” 呢?不知道有没有小伙伴在网上搜索某个软件点击下载后发现下的不是要下载的软件而是其他软件,这就是 “运营商劫持”,如下图所示:


如上图所示,当我们下载一个 “天天动听” 时,图1 未被劫持点击下载按钮是可以弹出正确的天天动听的链接,图2 已被劫持时,点击下载按钮,弹窗的是 QQ浏览器的下载链接,这就是 “运营商劫持”,那么它是如何做到的呢?流程如下图所示:
当然,不止运营商可以劫持,其他的 “黑客” 也可以用类似的手段来进行劫持,窃取用户的隐私信息,或者篡改内容,所以在互联网上,明文传输是比较危险的事情,HTTPS 就是在 HTTP 的基础上进行了加密,进一步来保证用户的信息安全。
解决安全问题最核心的要点就是 “加密”,什么是加密呢?加密就是把明文(要传输的真实数据)进行一系列变换,生成密文(针对明文加密之后得到的结果,往往不直观,不易理解),解密就是把密文通过一系列变换,还原成明文,在这个加密与解密的过程中,往往需要一个或者多个中间的数据来辅助完成这个过程,这样的数据就被称为 “密钥”。
二、HTTPS 工作过程
为了保证数据的安全,HTTPS 就在 HTTP 基础上进行 “加密” 操作,这样网络上传输的数据就不再是直接传输明文了,而是加密之后的 “密文”,加密的方式有很多,但是整体可以分为两大类:“对称加密” 和 “非对称加密”,下面我就来介绍一下 HTTPS 的工作过程,及遇到问题的对应解决方法。
1.对称加密
对称加密其实就是通过同一个 “密钥”,来把明文加密成密文,并且还可以把密文加密成明文,引入对称加密之后,即使数据被截获,由于黑客不知道密钥是什么,也就无法进行解密进一步去获取我们请求的真实内容了,引入对称加密后,此时数据传输过程如下图所示:
根据上述介绍可以发现对称加密具有以下特点:
- 使用对称加密,客户端与服务器需要使用同一个密钥;
- 不同的客户端需要使用不同的密钥(如果密钥都相同,那么黑客就可以获取密钥)。
此时,由于不同客户端使用的密钥都不相同,这就意味着服务器需要维护每个客户端和密钥的关联关系会引入很大的额外开销。
对称加密除了会引入额外的开销还有一个致命的问题,那就是这种加密并不安全,由于对称密钥是要传输给对方的,就意味着传输密钥的过程是明文传输的,那么此时黑客只要获取到传输的密钥,对称加密的操作就毫无意义了,如下图所示:
造成上图结果就是因为使用明文传输密钥,黑客就会获取到密钥,后续的加密操作就形同虚设了,所以我们需要对传输的密钥进行加密传输,如果我们对密钥仍进行对称加密的方式进行传输就需要确定一个 “密钥的密钥”,此时面临的问题还是 “密钥的密钥” 是明文,黑客仍然可以拿到密钥,所以对密钥进行加密传输使用对称加密的方式就行不通了,这就需要引入非对称加密。
2.非对称加密
使用非对称加密主要目的就是为了对 “对称加密” 的密钥进行加密,来确保对称密钥的安全性,在非对称加密中要用到两个密钥:“公钥” 与 “私钥”,公钥和私钥是配对的(公钥对明文加密变成密文,密文只能使用配对的私钥来进行解密),它们最大的缺点就是加密与解密的运算速度非常慢(消耗 CPU 资源),所以不能完全使用非对称加密来对传输的数据进行加密,而只是对“对称加密”的密钥进行加密。
引入非对称加密之后,就可以由服务器生成公钥和私钥,公钥可以公开给每个客服端,私钥只有自己知道,这样客户端就可以使用公钥对对称密钥进行加密然后传输给服务器,服务器获取到密文使用私钥解密获取到对称密钥,后面就可以继续使用对称加密来进行数据传输了,具体过程如下图所示:
下面我来对上述过程做一个梳理:
- 客户端在本地生成对称密钥,通过公钥加密,发送给服务器;
- 由于黑客没有私钥所以无法对截取的数据进行解密进而无法获取对称密钥;
- 服务器使用私钥解密,获取对称密钥,使用对称密钥加密给客户端返回的响应;
- 后续客户端与服务器的通信使用对称加密即可,由于该密钥只有客户端与服务器两个主机知道,所以黑客截获数据也无法进行解密。
上述过程虽然看起来安全,但是还有漏洞,由于公钥是需要客户端从服务器这边获取,那么就存在一个问题:获取的公钥是不是黑客伪造的?这就涉及到中间人攻击了。
3.中间人攻击
黑客通过中间人攻击就可以获取到对称密钥,由于非对称加密算法是公开的,所以黑客也可以使用非对称加密算法来得到自己的公钥私钥,此时就可以在客户端向服务器发送获取公钥的请求时进行中间人攻击,具体过程如下图所示:
下面我来对上述过程做一个梳理:
- 服务器使用非对称加密算法生成公钥:pub1,私钥:pri1;
- 黑客使用非对称加密算法生成公钥:pub2,私钥:pri2;
- 客户端生成对称密钥:key;
- 客户端向服务器发送请求询问公钥是什么?
- 服务器明文传输公钥 pub1 给客户端;
- 黑客截取数据,提取公钥 pub1 并保存,然后将数据中的公钥 pub1 替换成自己的公钥 pub2,并将伪造的数据发给客户端;
- 客户端收到数据,提取公钥 pub2(并不清楚公钥已经被换),用公钥 pub2 加密对称密钥 key,形成报文发送给服务器;
- 黑客截取数据,直接使用自己的私钥 pri2 进行解密,获取到对称密钥 key,再使用保存的服务端公钥 pub1 加密后,将报文发送给服务器;
- 服务器拿到报文后,使用私钥 pri1 进行解密,获取对称密钥 key;
- 后续服务器与客户端都使用 key 进行对称加密,进行通信,此时黑客就可以使用对称密钥 key 劫持数据对数据进行窃听或者修改。
那么如何解决中间人攻击这样的问题呢?最关键的一点就在于客户端拿到公钥的时候要有办法验证这个公钥是真的而不是黑客伪造的,这就需要服务器提供一个 “证书”。
4.引入证书
证书是一个结构化的数据,其中包含很多的信息,如:证书发布机构、证书有效期、公钥、证书所有者、签名……,服务器在使用 HTTPS 之前需要向第三方公正机构申请一份数字证书,然后服务器把证书传给浏览器,浏览器从证书中获取公钥就可以了,证书就相当于身份证,证明当前公钥的正确性。
在证书中,用来验证证书真伪的信息就是 “签名”,对于签名要详细介绍一下,这是通过证书解决中间人攻击问题的关键,签名的形成也是基于非对称加密算法的,当服务端申请证书的时候,公正机构就会对服务端进行审核,并专门为该网站形成数字签名,过程如下:
- 公正机构拥有非对称加密的公钥:A 和私钥:A*;
- 公正机构对服务端申请的证书明文数据进行 hash,形成数据摘要;
- 公正机构再对数据摘要用私钥 A* 加密,得到签名 S。
此时,服务端申请的证书明文与签名 S 就共同形成了证书,这样的证书就颁布给了服务端。这样就可以解决中间人攻击问题,此时数据传输的过程如下图所示:
图中客户端获取到证书对证书进行校验的过程如下:
- 判定证书有效期是否过期;
- 判定证书的发布机构是否受信任(操作系统中已经内置了受信任的证书发布机构);
- 验证证书是否被篡改:从操作系统中获取证书发布机构的公钥,对签名进行解密,得到 hash 值(数据摘要)设为 hash1,然后计算整个证书的 hash 值设为 hash2,对比 hash1 和 hash2 是否相等,如果相等就说明证书没有被篡改过。
三、HTTPS 常见问题
1.中间人能否篡改证书?
中间人无法篡改证书,理由如下:
- 中间人篡改了证书的明文,由于他没有公正机构的私钥,所以无法在 hash 之后使用私钥形成签名,那么就无法对篡改后的证书形成匹配的签名;
- 如果中间人强行篡改,客户端收到证书后在验证时就会发现证书明文的 hash 值与签名解密后得到的 hash 值不一样,就会发现证书被篡改,从而终止向服务器传输信息。
2.中间人能否调包证书?
中间人无法调包整个证书,理由如下:
- 中间人没有公正机构的私钥,所以无法制作假的证书;
- 中间人只能向公正机构申请真证书,然后使用自己申请的证书进行掉包;
- 但是证书中明文包含了域名等服务端认证信息,所以整体调包客户端依旧可以识别。
我们要知道,中间人没有公正机构的私钥对任何证书都无法进行合法修改,包括自己的。
3.HTTPS 工作完整流程
左侧是客户端要做的事,右侧是服务器要做的事,完整流程如下图所示:
·总结
文章到此就要结束了,本篇文章重点介绍了 HTTPS 的工作过程,在这里涉及到的密钥一共有三组,如下所示:
- 第一组(非对称加密):用于校验证书是否被篡改,服务器持有私钥(私钥在注册证书时获得),客户端持有公钥(操作系统包含了可信任的认证机构有哪些,同时持有对应的公钥),服务器使⽤这个私钥对证书的签名进行加密,客户端通过这个公钥解密获取到证书的签名,从⽽校验证书内容是否是篡改过;
- 第二组(非对称加密):用于协商⽣成对称加密的密钥,服务器生成这组 私钥-公钥 对,然后通过证书把公钥传递给客户端,然后客户端用这个公钥给⽣成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密的密钥;
- 第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥加密解密。
⼀切的关键都是围绕这个对称加密的密钥,其他的机制都是辅助这个密钥⼯作的,第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器,第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥,如果你认为读了本篇文章您有所收获,希望给本篇文章点个赞,收藏走一波,后面我会继续与大家分享计算机网络的相关知识,关注博主不迷路~~~您的支持就是我创作最大的动力,我们下一篇文章再见~~~
相关文章:
计算机网络 —— HTTPS 协议
前一篇文章:计算机网络 —— HTTP 协议(详解)-CSDN博客 目录 前言 一、HTTPS 协议简介 二、HTTPS 工作过程 1.对称加密 2.非对称加密 3.中间人攻击 4.引入证书 三、HTTPS 常见问题 1.中间人能否篡改证书? 2.中间人能否调…...
Oracle之表空间迁移
问题背景:一个数据表随着时间的累积,导致所在表空间占用很高,里面历史数据可以清除,保留近2个月数据即可 首先通过delete删除了2个月以前的数据。 按网上的教程进行空间压缩,以下sql在表所在用户执行: -- 允许表重新…...
web组态可视化编辑器
随着工业智能制造的发展,工业企业对设备可视化、远程运维的需求日趋强烈,传统的单机版组态软件已经不能满足越来越复杂的控制需求,那么实现web组态可视化界面成为了主要的技术路径。 行业痛点 对于软件服务商来说,将单机版软件转…...
SpringMVC纯注解快速开发
此文章适合具有一定的java基础的同学看哦,如果有看不懂的基本代码还是先补补java基础哦。 此教程带您不使用xml文件而是纯注解开发,易懂、快捷、迅速,从0开始搭建,很快就能构建起一个SpringMVC项目,能学到两种使用tom…...
[读论文] Compositional 3D-aware Video Generation with LLM Director
Abstract 近年来,通过强大的生成模型和大规模互联网数据,文本到视频生成领域取得了显著进展。然而,在生成视频中精确控制单个概念(如特定角色的动作和外观、视角的移动)方面,仍存在巨大挑战。为此ÿ…...
FFmpeg 4.3 音视频-多路H265监控录放C++开发十八,ffmpeg解复用
为啥要封装和解封装呢? 1.封装就相当于将 h264 和aac 包裹在一起。既能播放声音,也能播放视频 2.在封装的时候没指定编码格式,帧率,时长,等参数;特别是视频,可以将视频帧索引存储,…...
ubuntu系统安装docker
1、 安装必要的依赖 sudo apt install apt-transport-https ca-certificates curl software-properties-common2、添加 Docker 的官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -3、添加 Docker 的 APT 源 sudo add-apt-repos…...
STM32 BootLoader 刷新项目 (十三) Python上位机介绍
STM32 BootLoader 刷新项目 (十三) Python上位机介绍 大家好,这是我们STM32 BootLoader的最后一篇文章了,讲述用Python写的上位机,也更新了半年时间了,谢谢大家的支持,到目前为止,已经更新了12篇文章了&am…...
美畅物联丨智能监控,高效运维:视频汇聚平台在储能领域的实践探索
在当今全球能源格局不断变化的大背景下,对清洁能源的需求正以惊人的速度增长。储能项目作为平衡能源供需、提升能源利用效率的关键环节,其规模和复杂度也在不断攀升。在储能项目的运营管理过程中,安全监控、设备运维以及数据管理等方面面临着…...
T C P
文章目录 基于UDP应用场景 TCP协议TCP 协议段格式确认应答机制16位窗口大小 下定义32位序号和32位确认序号序号是什么?确认序号 基于UDP应用场景 UDP,tcp这样的协议根本不是直接谈UDP。tcp的应用场景,一定是上层写了应用层协议,所…...
MongoDB的简单使用
MongoDB(文档数据库)的简单使用 MongoDB最好的学习资料就是他的官方文档:SQL 到 MongoDB 的映射图表 - MongoDB 手册 v8.0 1.MongoDB CRUD操作 1.1Insert操作 基本方法: db.collection.insertOne() 将单个文档(document)插入集合中 db.collectio…...
【Exp】# Microsoft Visual C++ Redistributable 各版本下载地址
Microsoft官方页面 https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads Redistributable 2019 X86: https://aka.ms/vs/16/release/VC_redist.x86.exe X64: https://aka.ms/vs/16/release/VC_redist.x64.exe Redistributable 201…...
【MySQL】表的约束
目录 一、非空约束not null 二、默认值约束default 三、列描述comment 四、填充零zerofill 五、主键primary key 六、自增长auto_increment 七、唯一键unique 八、外键foreign key 一、非空约束not null 如果不对一个字段做非空约束,则默认为空。但空数据无…...
c++高级篇(四) ——Linux下IO多路复用之epoll模型
IO多路复用 —— epoll 前言 在之前我们就已经介绍过了select和poll,在作为io多路复用的最后一个的epoll,我们来总结一下它们之间的区别: a select 实现原理 select 通过一个文件描述符集合(fd_set)来工作,该集合可以包含需要监控的文件…...
基于Java Springboot环境保护生活App且微信小程序
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…...
.NET 9 中 LINQ 新增功能实现过程
本文介绍了.NET 9中LINQ新增功能,包括CountBy、AggregateBy和Index方法,并提供了相关代码示例和输出结果,感兴趣的朋友跟随我一起看看吧 LINQ 介绍 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的…...
【Vue3中Router使用】
Vue3中Router使用 1. 安装vue-router组件2. 建两个测试页面2.1 测试页面Home.vue2.2 测试页面Category.vue 3. 创建路由对象4. 在入口main.js中引入router把App.vue改成路由页面5. 测试5.1 关闭检查解决ESlint报错5.2 改文件名解决ESlint检查报错测试WebHashHistory 和WebHisto…...
性能测试攻略(一):需求分析
性能测试成为软件开发和运维过程中不可或缺的一环。性能测试不仅能够帮助我们了解系统在特定条件下的表现,还能帮助我们发现并解决潜在的性能问题。那么我们怎么做一次完整的性能测试呢?首先,我们需要进行需求分析,来明确我们的测…...
android WebRtc 无法推流以及拉流有视频无声音问题
最近在开发使用WebRtc进行视频通话和语音通话,我使用的设备是MTK的手机,期间后台的技术人员几乎没法提供任何帮助,只有接口和测试的web端,有遇到不能推流。推流成功网页端有画面有声音,但是安卓端有画面,没…...
Socket编程TCP
【Linux】TCP编程 实验:通过TCP通信—在客户端输入要执行的指令,接收执行结果,另服务端接收指令并执行,向客户端发送执行结果 //主函数 #include<iostream> #include<string> #include"log.hpp" #include…...
《以 C++为笔,绘就手势识别人机交互新画卷》
在科技浪潮汹涌澎湃的当下,人机交互领域正处于深刻变革的前沿阵地。从古老的命令行输入到图形化界面的鼠标点击,再到如今风靡全球的触摸操控,每一次交互方式的革新都重塑了我们与电子设备的沟通模式。而近年来,手势识别技术作为一…...
【CSS】小球旋转loading加载动画
效果 css小球旋转loading动画 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document<…...
Leetcode经典题6--买卖股票的最佳时机
买卖股票的最佳时机 题目描述: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。…...
BA是什么?
目录 1.EKF的步骤 一、问题定义与模型建立 二、线性化处理 三、应用卡尔曼滤波 四、迭代与收敛 五、结果评估与优化 注意事项 2.BA问题的步骤 一、问题定义与数据准备 二、构建优化模型 三、选择优化算法 四、执行优化过程 五、结果评估与优化 六、应用与验证 1.…...
【IDEA】报错:Try to run Maven import with -U flag (force update snapshots)
问题 IDEA运行项目报错:Try to run Maven import with -U flag (force update snapshots) 原因 IDEA 的项目运行绑定的maven有问题, 解决问题 检查项目绑定的maven配置...
MATLAB提供的窗函数
加窗法 为什么使用加窗法? 在数字滤波器设计和频谱估计中,加窗函数的选择对于整体结果的质量有重大影响。加窗的主要作用是减弱因无穷级数截断而产生的吉布斯现象的影响。 windowDesigner 六种常见的窗函数 根据离散时间傅里叶变换的乘法性质&a…...
git 使用配置
新拿到机器想配置git 获取代码权限,需要的配置方法 1. git 配置用户名和邮箱 git config --global user.name xxxgit config --global user.email xxemail.com 2. 生成ssh key ssh-keygen -t rsa -C "xxemail.com" 3. 获取ssh key cat ~/.ssh/id_rsa.…...
【深度学习】深入解析长短期记忆网络(LSTMs)
长短期记忆网络(Long Short-Term Memory networks, LSTMs)是一种特殊的递归神经网络(RNN),专门设计用来解决标准 RNN 在处理长序列数据时的梯度消失和梯度爆炸问题。LSTMs 在许多序列数据任务中表现出色,如…...
vue watch和computed的区别,computed和method的区别
发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 在 Vue 中,watch、computed 和 methods 都是常用的响应式功能,它们的用途和工作方式有所不同。下面分别解…...
搭建高可用负载均衡系统:Nginx 与云服务的最佳实践
搭建高可用负载均衡系统:Nginx 与云服务的最佳实践 引言 在项目开发过程中,我们通常在开发和测试阶段采用单机架构进行开发和测试。这是因为在这个阶段,系统的主要目的是功能实现和验证,单机架构足以满足开发人员的日常需求&…...
FFmpeg 4.3 音视频-多路H265监控录放C++开发十九,ffmpeg复用
封装就是将 一个h264,和一个aac文件重新封装成一个mp4文件。 这里我们的h264 和 aac都是来源于另一个mp4文件,也就是说,我们会将 in.mp4文件解封装成一路videoavstream 和 一路 audioavstream,然后 将这两路的 avstream 合并成一…...
Node.js JWT认证教程
Node.js JWT认证教程 1. 项目介绍 JSON Web Token (JWT) 是一种安全的跨域身份验证解决方案,在现代Web应用中广泛使用。本教程将详细讲解如何在Node.js中实现JWT认证。 2. 项目准备 2.1 初始化项目 # 创建项目目录 mkdir nodejs-jwt-auth cd nodejs-jwt-auth# …...
nn.utils.clip_grad_value_
nn.utils.clip_grad_value_ 是 PyTorch 中的一个函数,用于在训练过程中对模型的梯度进行裁剪,以防止梯度爆炸(gradient explosion)问题。该函数对梯度的每个元素进行裁剪,将其限制在一个指定的最大绝对值范围内。裁剪后…...
Java后端面试模板(技术面)
1、自我介绍模板 面试官您好!我是来自----大学计算机学院的一名大三学生,我的名字叫—。 在大学期间,我主要自学了一些主流的Java技术栈,其中主要包括:Java主流的框架:Spring MVC Spring Boot Spring Clou…...
【大语言模型】ACL2024论文-24 图像化歧义:Winograd Schema 挑战的视觉转变
【大语言模型】ACL2024论文-24 图像化歧义:Winograd Schema 挑战的视觉转变 目录 文章目录 【大语言模型】ACL2024论文-24 图像化歧义:Winograd Schema 挑战的视觉转变目录摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果(包含重要…...
Docker 安装和使用
#Docker 安装和使用 文章目录 1. 安装2. 干掉讨厌的 sudo3. 使用镜像源3.1. 使用 upstart 的系统3.2. 使用 systemd 的系统 4. 基本使用4.1. 容器操作4.2. 镜像操作 5. 网络模式说明5.1. bridge 模式5.2. host 模式5.3. container 模式5.4. none 模式 6. 查看 Docker run 启动参…...
nginx网站服务
nginx介绍: 1、高并发,轻量级的web服务软件 2、稳定性高,系统资源消耗率低 对http的高并发处理能力高,单台物理服务器可以支持30000-50000个并发。 一般来说在工作中,单台的并发一般在20000. nginx的功能介绍&…...
MATLAB 手写判断点在多边形内外的2种方法(87)
MATLAB 手写判断点在多边形内外-方法1(87) 一、算法介绍二、算法实现1.方法1(代码+测试)2.方法2(代码+测试)三、结果一、算法介绍 手动实现两种方法,判断点在多边形的内部还是外部, 具体实现和测试代码如下,使用前请自行验证。(代码复制粘贴即可使用) 二、算法实现…...
Android SurfaceFlinger layer层级
壁纸作为显示的最底层窗口它是怎么显示的 1. SurfaceFlinger layer层级 锁屏状态dump SurfaceFlinger ,adb shell dumpsys SurfaceFlinger Display 0 (active) HWC layers: -----------------------------------------------------------------------------------…...
零基础快速掌握——【c语言基础】数组的操作,冒泡排序,选择排序
1.数组 内存空间连续: 2.定义格式 数组的定义格式: 数组分为一维数组、二维数组、以及多维数组,不同类型的数组定义格式时不一样 2.1 一维数组的定义 数据类型 数组名 [数组长度]; 解释: 数据类型࿱…...
个人IP建设:简易指南
许多个体创业者面临的一个关键挑战是如何为其企业创造稳定的需求。 作为个体创业者,您无法使用营销团队,因此许多人通过推荐和他们的网络来产生需求。因此,扩大您的网络是发展您的业务和产生持续需求的最佳策略。 这就是个人IP和品牌发挥作…...
【Unity高级】如何获取着色器(Shader)的关键词
在动态设置Shader时,会需要通过EnableKeyword, DisableKeyword来完成。但一个Shader有哪些关键词呢?Unity的文档中并没有列出来,但我们可以通过遍历Shader的KeywordSpace来查看。 1. 代码如下 using UnityEngine;public class KeywordExamp…...
OSS文件上传
1、我们这个系统对接的阿里云OSS需要先对接小鹏OSS系统获取accessKeyId、accessKeySecret,这个可以忽略 aliyun:oss:endpoint: https://oss-cn-hangzhou.aliyuncs.combucketName: xp-xpd-experiencedomain: https://xp-xpd-experience.oss-cn-hangzhou.aliyuncs.co…...
时序预测算法TimeXer代码解析
在时序预测领域,如何有效地利用外部变量(exogenous variables)来提升内部变量(endogenous variables)的预测性能一直是一个挑战。 在上一篇文章中,我结合论文为大家解读了TimeXer框架,今天&…...
【无标题】建议用坚果云直接同步zotero,其他方法已经过时,容易出现bug
created: 2024-12-06T16:07:45 (UTC 08:00) tags: [] source: https://zotero-chinese.com/user-guide/sync author: 数据与文件的同步 | Zotero 中文社区 Excerpt Zotero 中文社区,Zotero 中文维护小组,Zotero 插件,Zotero 中文 CSL 样式 数…...
Hive 分桶表的创建与填充操作详解
Hive 分桶表的创建与填充操作详解 在 Hive 数据处理中,分桶表是一个极具实用价值的功能,它相较于非分桶表能够实现更高效的采样,并且后续还可能支持诸如 Map 端连接等节省时间的操作。不过,值得注意的是,在向表写入数…...
docker怎么commit tag push?
在 Docker 中,commit、tag 和 push 是用于创建和推送自定义镜像到仓库的三个不同步骤。以下是每个命令的详细说明和使用方法: ### 1. docker commit 当你对一个运行中的容器做了修改,并希望将这些修改保存为一个新的镜像时,可以使…...
全面替换VMware,南昌大学一卡通的硬核智慧
将一昼夜分为十二时辰 是古人的博大智慧 晨光熹微,门扉轻启,负笈而行 智慧校园的“十二时辰”启幕新章 一、数字南大:一卡通打卡校园十二时辰 时辰轮转,一时有一时的使命师生们是如何高效、便捷地度过每个时辰?一张充…...
SpringMVC ,ioc和aop
IOC和AOP IOC 控制反转,将应用程序的控制权交给spring容器管理,而不是应用程序本身 1.创建一个mapper,测试用, 就写个普通方法 public class UserMapper {public void addUser(){System.out.println("dao层新增");} …...
3GPP R18 LTM(L1/L2 Triggered Mobility)是什么鬼?(三) RACH-less LTM cell switch
这篇看下RACH-less LTM cell switch。 相比于RACH-based LTM,RACH-less LTM在进行LTM cell switch之前就要先知道target cell的TA信息,进而才能进行RACH-less过程,这里一般可以通过UE自行测量或者通过RA过程获取,而这里的RA一般是通过PDCCH order过程触发。根据38.300中的描…...