移动端适配方案

news2024/10/6 6:18:02

文章目录

  • 像素
    • 设备像素(物理像素)
    • 设备独立像素(逻辑像素)
    • CSS像素
    • 像素之间的关系
  • 分辨率
    • 设备分辨率
    • 逻辑分辨率
  • 移动端开发分类
  • 自适应
  • 响应式
  • 视口
    • 布局视口(layout viewport)
    • 视觉视口(visual layout)
    • 理想视口(ideal layout)
  • 移动端适配方案
    • 百分比设置
    • rem单位+动态html的font-size
    • vw单位
    • flex的弹性布局


像素

设备像素(物理像素)

设备像素(device pixels)也叫物理像素,指的是显示器上的真实像素,每个像素的大小是屏幕固有的属性,屏幕出厂以后就不会再改变。

我们可以这么理解,屏幕是由N多个小方块构成的,每个小方块都只能显示一个颜色,而一个小方块,就是一个设备像素。而在不同的设备上,这个格子的大小是不同的,所以物理像素并不是一个固定大小的单位,它只代表一个显示器上的小格子,格子到底多大,在显示器出厂前已经确定好了。

设备独立像素(逻辑像素)

设备独立像素(device independent pixels)也叫逻辑像素,是操作系统定义的一种像素单位,应用程序将设备独立像素告诉操作系统,操作系统再将设备独立像素转化为设备像素(物理像素),从而控制屏幕上真正的物理像素点。

我们可以这么理解,物理像素是硬件开发相关的单位,是基于一个一个的硬件小方块,其大小由硬件厂家设定。而逻辑像素,则更像是软件开发相关的单位,软件相关的工作人员通过逻辑像素来表达软件相关的尺寸。前端css代码、浏览器显示给开发者的尺寸、UI设计师给出的UI稿,其尺寸单位都是逻辑像素。

举个栗子:比如如下代码,其中标注的14px、26px等值,px就是我们所说的逻辑像素。

image-20230625102051876

那么为什么需要在应用程序和设备像素之间定义这么一种单位呢?为什么应用程序不直接使用设备像素?

例如原先在 1280×720 设备分辨率的显示屏中,显示高度为 12 个设备像素的字体,现在放到设备分辨率为 2560 ×1440 的显示屏中,如果要想得到原先的大小,则需要 24 个设备像素,如果应用程序直接使用设备像素,那么编写应用程序则将变得非常困难,需要编写应用程序逻辑:字体在一些屏幕上高度为 12 个设备像素,在另一些屏幕上却需要 24 个设备像素。

  • 因此操作系统定义了一个单位:设备独立像素
  • 操作系统保证:用设备独立像素定义的尺寸,不管屏幕的参数如何,都能以合适的大小显示。
  • 操作系统是如何做到的呢?对于那些像素密度高的屏幕,将多个设备像素划分为一个设备独立像素。至于将多少设备像素划分为一个逻辑像素,这由操作系统决定。

对于上面的例子:“原本高度为 12 个设备像素的字体,现在高度为 24 个设备像素才能得到相同的大小”,操作系统会将一个逻辑像素定义为 2*2个 真实像素,从而设备独立像素尺寸不需要改变,而且不管在新、旧设备上,显示的尺寸大致相同。

CSS像素

在 CSS 中使用的 px 都是指 css 像素,比如 width: 128px。css 像素的大小是很容易变化的,当我们缩放页面的时候,元素的 css 像素数量不会改变,改变的只是每个 css 像素的大小。也就是说 width: 128px 的元素在缩放200% 以后,宽度依然是 128 个 css 像素,只不过每个 css 像素的宽度高度变为原来的两倍。如果原本元素宽度为 128 个设备独立像素,那么缩放 200% 以后元素宽度为 256 个设备独立像素。

像素之间的关系

  • CSS像素和设备独立像素的关系
  1. 缩放比例:css像素边长/设备独立像素边长
  2. 缩放比例100%:1个css像素大小等于1个设备独立像素
  3. 缩放比例200%:1个css像素大小等于(2*2)个设备独立像素
  • CSS像素和设备像素的关系
  1. 设备像素比(DPR):设备像素的数量/CSS像素的数量。即当前设备将通过几个物理像素点来绘制一个逻辑像素点
  2. 设备像素比 = CSS像素边长/设备像素边长
  3. pc端一个css像素对应一个物理像素

因为屏幕足够大,pc端默认情况下一个css像素就对应着一个物理像素,但是有没有发现你把分辨率调小以后,显示的内容变大了,但是显示器的物理像素肯定不会变啊,这时候其实就是一个css像素对应着若干个物理像素了,这个是与用户设置有关。

  1. m端一个css像素对应多个物理像素

移动设备大小是有限的,而且分辨率不低,甚至比pc端更高,也就是可以显示的物理像素更多,如果和pc端一样,一个css的px和物理像素一一对应,可以想象,显示的内容有多小。这样肯定是不行的,解决这个问题,我们可以很自然的想到,那在移动设备上就别一一对应了,一个css的px对应多个物理像素吧,这样就不至于显示的内容过小了,实际上移动设备也是这么做的,你在开发时写的px和最终渲染显示的物理像素数不是一比一的,可能1个px对应2个物理像素,可能3个物理像素,设备显示的物理像素数和你css的px数的比值就叫做设备像素比,简称dpr。好了,这样显示内容过小的问题就解决了。

  1. dpr越高越好,需要2倍图,3倍图等等来更高清

有了dpr之后,有一个问题就是同样的一张图片,我设了宽高的px数,那么在dpr为1的设备上,和dpr为2的设备上显示的效果是一样的,1个px在dpr为1的设备上会用1个物理像素来显示,在dpr为2的设备上会用2*2个物理像素来显示,这样dpr高的优势就体现不出来了,我设备比他的好,你给我的体验是一样的,可能有些用户不爽,我们可以区分对待,对于高dpr的设备,用物理像素更多的高清图片来替代,也就是2x图,3x图等等。

分辨率

设备分辨率

设备分辨率:描述的就是这个显示器的宽和高分别是多少个设备像素,即设备像素点的总数即为设备分辨率,例如常见的显示器分辨率为1920*1080。

image.png

逻辑分辨率

逻辑分辨率用屏幕的宽高来表示(单位:设备独立像素),即设备独立像素点的总数,我们通过操作系统的分辨率设置来改变设备独立像素的大小。

例如屏幕的设备分辨率是1920 * 1200(单位:设备像素),我们可以在当前的分辨率下设置逻辑分辨率是1280 * 800(单位:设备独立像素)。那么横、纵方向的设备像素数量恰好是设备独立像素的1.5倍。这也意味着,设备独立像素的边长是设备像素边长的1.5倍。

移动端开发分类

  1. 原生App开发
  2. 小程序开发
  3. Web页面

自适应

根据不同的设备屏幕大小来自动调整尺寸、大小

响应式

会随着屏幕的实时变动而自动调整,是一种自适应

视口

  • 在一个浏览器中,我们可以看到的区域就是视口(viewport)

  • fixed就是相对于视口来进行定位的

  • PC端的页面中,我们不需要对视口进行区分,因为我们的布局视口和视觉视口是同一个

  • 但是在移动端中,布局视口是大于视觉视口的。这是因为移动端的网页窗口比较小,我们可能会希望一个大的网页在移动端可以完整的显示。

布局视口(layout viewport)

布局视口的默认宽度是980px

默认情况下,一个PC端的网页在移动端会如何显示

  1. 首先它会按照宽度为980px来布局一个页面的盒子和内容
  2. 为了显示可以完整的显示在页面中,对整个页面进行缩小

image-20230620172741126

视觉视口(visual layout)

如果默认情况下,我们按照980px显示内容,那么右侧就会有一部分区域就会无法显示,所以手机端浏览器会默认对页面进行缩放以显示到用户的可见区域中,那么显示在可见区域的这个视口,就是视觉视口。

image-20230620173144513

理想视口(ideal layout)

如果我们希望设置的是100px,显示的就是100px,就需要通过理想视口。

这时候可以通过设置meta中的viewport

image-20230620174302816

移动端适配方案

百分比设置

rem单位+动态html的font-size

px = rem * font-size

1rem = 视口宽度 / 10

rem单位是相对于html元素的font-size来设置的,那么如果我们需要在不同的屏幕下有不同的尺寸,可以动态的修改html的font-size尺寸

举个栗子:

  1. 设置一个盒子党的宽度是1rem
  2. 设置不同的屏幕上html的font-size不同

image-20230621095854757

这样我们在开发中,我们只需要考虑两个问题:

  1. 针对不同的屏幕,设置html不同的font-size
  • 媒体查询

可以通过媒体查询来设置不同尺寸范围内的屏幕html的font-size尺寸

@media screen and (min-width: 320px) {
    html {
        font-size: 20px
    }
}

缺点:

  1. 我们需要针对不同的屏幕编写大量的媒体查询
  2. 如果动态改变尺寸,不会实时的进行更新
  • JS动态计算

如果我们希望实时改变屏幕尺寸时,font-size也可以实时更改,可以通过js代码。

方法:

  1. 根据html的宽度计算出font-size的大小,并且设置到html上
  2. 监听页面的实时改变,并且重新设置font-size的大小到html上
// 获取html的元素
const htmlEl = document.documentElement

function setRemUnit(){
    // 获取html的宽度(视口的宽度)
    const htmlWidth = htmlEl.clientWidth
    // 根据宽度计算一个html的font-size的大小
    const htmlFontSize = htmlWidth / 10
    // 将font-size设置到html上
    htmlEl.style.fontSize = htmlFontSize + "px"
}

// 保证第一次进来时,可以设置一次font-size
setRemUnit()

// 当屏幕尺寸发生变化时,实时来修改html的font-size 
window.addEventListener("resize",setRemUnit)
  • lib-flexible库

lib-flexible库做的事情是相同的,你也可以直接引入它

  1. 将原来要设置的尺寸,转化成rem单位
  • 手动换算

比如在一个375px屏幕上,100px宽度和高度的盒子

我们需要将100px转成对应的rem值

计算如下:

375px => font-size: 375/10px = 37.5px

100px/37.5px=2.6667

  • less/scss函数

  • postcss-pxtorem插件

目前在前端的工程化开发中,我们可以借助webpack的工具来完成自动的转化

  • VSCode插件

px to rem 的插件,在编写时自动转化

vw单位

1vw = 1% * 视口宽度,即 1vw = 视口宽度 / 100

image-20230621115057554

  • 手动计算
  • less/scss函数
  • postcss-px-to-viewport-8-plugin
  • VSCode插件

flex的弹性布局

不管移动设备的分辨率怎么变, 关键元素高宽和位置都不变,只有容器元素在做伸缩变换。百分比布局,无需计算百分比,可以很好的适配到所有屏幕

特点:文字流式,控件弹性,图片等比缩放

为什么要使用flex布局

float布局有副作用,如果子元素设置了浮动,会引起父元素的塌陷 /不能动态实现自适应布局/设置padding margin不能正确表达 /之前的元素浮动了,后面的元素可能异位,所以页面越来越复杂,不利于管理

float布局对于移动端布局很不友好,所以出现了弹性布局flex

采用 Flex 布局的元素,称为 Flex 容器。它的所有子元素自动成为容器成员

flex容器属性

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content
  1. flex-direction属性

flex-direction属性决定主轴的方向(即项目的排列方向)。

.box {
  flex-direction: row | row-reverse | column | column-reverse;
}
//依次表示主轴为水平方向,起点在左端。(默认)
//主轴为水平方向,起点在右端。
//主轴为垂直方向,起点在上沿。
//主轴为垂直方向,起点在下沿。

img

  1. flex-wrap属性

默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。

.box{
  flex-wrap: nowrap | wrap | wrap-reverse;
  //依次是不换行
  //换行,第一行在上方。
  //换行,第一行在下方。
}
  1. flex-flow属性

flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。

.box {
  flex-flow: <flex-direction> || <flex-wrap>;
}
  1. justify-content属性(这个很重要,经常用)

justify-content属性定义了项目在主轴上的对齐方式。

.box {
  justify-content: flex-start | flex-end | center | space-between | space-around;
  //依次是左对齐(默认值)
  //右对齐
  //居中
  //两端对齐,项目之间的间隔都相等。
  //每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
}

img

  1. align-items属性(这个也很重要。也常用)

align-items属性定义项目在交叉轴上如何对齐。

.box {
  align-items: flex-start | flex-end | center | baseline | stretch;
  //依次是交叉轴的起点对齐。
  //交叉轴的终点对齐。
  //交叉轴的中点对齐。
  //项目的第一行文字的基线对齐。
  //如果项目未设置高度或设为auto,将占满整个容器的高度(默认值)
}

img

  1. align-content属性

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

.box {
  align-content: flex-start | flex-end | center | space-between | space-around | stretch;
  //依次是与交叉轴的起点对齐。
  //与交叉轴的终点对齐。
  //与交叉轴的中点对齐。
  //与交叉轴两端对齐,轴线之间的间隔平均分布。
  //每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
  //轴线占满整个交叉轴。(默认值)
}

img

项目的属性

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self
  1. order属性

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

css复制代码.item {
  order: <integer>;
}

img

  1. flex-grow属性(很重要)

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

css复制代码.item {
  flex-grow: <number>; /* default 0 */
}

img

  1. flex-shrink属性

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

注意:负值对该属性无效。

css复制代码.item {
  flex-shrink: <number>; /* default 1 */
}

img

  1. flex-basis属性(这个是重点,常用)

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

  1. flex属性(这个最重要)

flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

css复制代码.item {
//该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。
//建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
  1. align-self属性

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

arduino复制代码.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
  //这个其实就是在项目里用align-items 注:auto为默认值
}

img

flex实际应用

常用的flex 1

flex 是 flex-grow、flex-shrink、flex-basis的缩写

当 flex 取值为 none,则计算值为 0 0 auto

.div {
    flex-grow: 0;
    flex-shrink: 0;
    flex-basis: auto;
}   

当 flex 取值为 auto,则计算值为 1 1 auto

.div {
    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: auto;}

当 flex 取值为一个非负数字则 flex-grow 数字,flex-shrink 取 1,flex-basis 取 0%(最常用)

.div {
    flex-grow: 1;//要取的值
    flex-shrink: 1;//默认
    flex-basis: 0%;//默认
}   

当 flex 取值为一个长度或百分比,则视为 flex-basis 值,flex-grow 取 1,flex-shrink 取 1

.div {
    flex-grow: 1;//默认
    flex-shrink: 1;//默认
    flex-basis: 0%;//要取得值
}

当 flex 取值为两个非负数字,则分别视为 flex-grow 和 flex-shrink 的值,flex-basis 取 0%

.div {
    flex-grow: 1;//要取的第一个值
    flex-shrink: 1;//要取的第二个值
    flex-basis: 0%;//默认
}

当 flex 取值为一个非负数字和一个长度或百分比,则分别视为 flex-grow 和 flex-basis 的值,flex-shrink 取 1

.div {
    flex-grow: 1;//要取的第一个值
    flex-shrink: 1;//默认
    flex-basis: 0%;//要取的第二个值
}   

flex常见布局

flex实现等分布局

.box{
            height: 500px;
            display: flex;
}
.box div{
             height: 300px;
             border: 1px solid #000000;
             flex: 1;//这就是flex:1的妙用
}
    div class="box">
        <div>等分效果</div>
        <div>等分效果</div>
    </div>

左边固定右边自适应

.box {
    height: 500px;
    display: flex;
}
.box div {
    height: 300px;
    text-align: center;
}
.box div.right {
    flex: 1;//右边自适应
    border: 1px solid #000000;
}
.box div.left {
    border: 1px solid #000000;
    flex-basis: 100px;//左边固定,优先级最高
}
//html
<div class="box">
    <div class="left">左边固定效果</div>
    <div class="right">右边自适应效果</div>
</div>

边自适应的内容如果超过范围,自适应的地方添加min-width:0,若 min-width 未设置就默认为 auto,在这里就等于这个自适应的的宽度

垂直水平居中对齐

.box {
    width: 100%;
    height: 300px;
    border: 1px solid purple;
    display: flex;
    justify-content: center;
    align-items: center;
}
//html
<div class="box"><p>居中</p></div>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构-哈希-位图与布隆过滤器

位图与布隆过滤器 一&#xff0c;位图题目分析位图设计位图代码经典题目 二&#xff0c;布隆过滤器布隆过滤器概念布隆过滤器的插入布隆过滤器的结构布隆过滤器总结经典题目 三&#xff0c;哈希切割 一&#xff0c;位图 题目分析 &#x1f680;给40亿个不重复的无符号整数&am…

【UE 从零开始制作坦克】11-坦克炮塔机枪

效果 步骤 1. 复制一份坦克炮弹的蓝图&#xff0c;重命名为“MachineGunBullets”&#xff0c;作为坦克炮塔机枪子弹的蓝图 2. 打开“MachineGunBullets”&#xff0c;由于美M2勃朗宁重机枪的口径是12.7毫米&#xff0c;这里取12毫米&#xff0c;也就是1.2cm&#xff0c;半径是…

Stream流中Map方法的使用

map函数的作用就是针对管道流中的每一个数据元素进行转换操作。 主要有三种用法 一、Stream管道流map的基础用法 将集合中的每个字符串&#xff0c;全部转化成大写&#xff01; 不使用流 List<String> list Arrays.asList("Monkey", "Lion", &…

你知道免费mp3格式转换器有哪些吗

小明是一个音乐爱好者&#xff0c;经常下载一些高质量的无损音频文件。但他发现有些音频文件格式并不支持他的播放器&#xff0c;这让他很苦恼。有一天&#xff0c;他听说了mp3格式转换器这个神奇的工具&#xff0c;可以将音频文件格式转换成mp3&#xff0c;从而方便他在各种设…

Jetpack Compose:构建现代Android应用的BottomNavigation

Jetpack Compose是Google推出的一种全新的声明式UI框架&#xff0c;它引领了Android开发的新风潮。在这篇博客中&#xff0c;我将详细介绍如何使用Jetpack Compose来构建一个具有底部导航栏&#xff08;BottomNavigation&#xff09;的现代Android应用。 首先&#xff0c;让我们…

【C++学习】内联函数 | nullptr空指针 | 初步认识面向对象 | 类访问限定符 | 封装 | 类对象的内存对齐

写在前面&#xff1a; 上一篇文章我介绍了引用和auto相关的知识&#xff0c; 如果有兴趣的话可以去看看&#xff1a;http://t.csdn.cn/j6jsI 这篇文章大概能够讲完C入门的一些语法&#xff0c;开始类和对象的学习之旅。 目录 写在前面&#xff1a; 1. 内联函数 2. nullp…

用Python带你制作小时候玩的“大富翁”(文末赠书)

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 首先 接下来需要定义各种类型的物业&#xff0c;包括普通物业、铁路、公用事业等等。 接下来需…

【Spring 】项目创建和使用

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 谈起Java 圈子里的框架&#xff0c;最年长最耀眼的莫过于 Spring 框架啦&#xff0c;如今已成为最流行、最广泛使用的Java开发框架之一。不知道大家有没有在使用 Spring 框架的时候思考过这…

强化学习从基础到进阶-常见问题和面试必知必答[5]::梯度策略、添加基线(baseline)、优势函数、动作分配合适的分数(credit)

【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧&#xff08;调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍&#xff1a;【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧…

Spring Cloud - Nacos 注册发现、分级模型、配置集群、环境隔离、原理

目录 一、Nacos 安装和配置 二、Nacos 服务注册发现 2.1、将服务注册到 nacos 中 2.2、执行效果 三、Nacos 的服务分级模型及配置 3.1、分级模型 3.2、配置集群 3.3、配置 Nacos 负载均衡策略 3.4、Nacos 服务实例的权重设置 3.5、环境隔离——namespace 四、Nacos注…

真实企业做自动化测试做法,从测试用例到测试报告...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 首先&#xff0c;…

SAP MM 组织结构配置

1.定义公司代码 创建公司代码一般来说是财务去配置&#xff0c;但是我们需要去有一个基本的了解&#xff0c;这样&#xff0c;你才能理清公司代码和MM 组织的关系 配置&#xff1a;SAP IMG Enterprise Structure -》Definition -> Financial Accounting -> Edit, Copy, …

深度学习(26)——YOLO系列(5)

深度学习&#xff08;26&#xff09;——YOLO-v7&#xff08;5&#xff09; 文章目录 深度学习&#xff08;26&#xff09;——YOLO-v7&#xff08;5&#xff09;絮絮叨叨1. conv和BN的融合2. 3*3卷积的替换&#xff08;1&#xff09;1*1卷积有什么作用&#xff1f;&#xff08…

解决方案 | 照明行业数字化营销CRM平台

“数字中国”作为二十大报告的“关键词”&#xff0c;也成为各行各业的高质量发展的主旋律&#xff0c;历史悠久的中国照明产业也积极拥抱“数字化”&#xff0c;以驱动高质量发展 。作为照明行业的领军企业&#xff0c;某照明行业客户很早就意识到企业数字化转型的重要性&…

Spring事务源码详解-spring原码(二)

上篇文章介绍了事务开启&#xff0c;前面介绍了解析adviors。 spring事务源码详解-spring原码&#xff08;一&#xff09;https://blog.csdn.net/ke1ying/article/details/131360060 事务源码 先从缓存里获取&#xff0c;主要是判断循环依赖是否创建动态代理 进去wrapIfNeces…

【MOOC 作业】第3章 传输层

不是标答也不是参考答案 仅从个人理解出发去做题 1、(20分) ‍主机甲和主机乙之间已建立一个 TCP 连接&#xff0c;TCP 最大段长度为 1000 字节&#xff0c;若主机甲的当前拥塞窗口为 5000 字节&#xff0c;在主机甲向主机乙连接发送 2 个最大段后&#xff0c;成功收到主机乙发…

Java微服务金融项目智牛股 项目简介与金融知识介绍及技术特点

项目简介 金融交易平台服务于金融衍生产品&#xff0c; 包含外汇、贵金属、期货、股票。 各产品具有不同属性与交易规则&#xff0c; 本项目对标MT4等大型交易平台&#xff0c; 遵循FIX全球最广泛的金融市场通用协议。 实现从证券注册开户、行情订阅与呈现&#xff0c; 股票撮合…

JAVA 日期类Date SimpleDateFormat Calendar

1、Date日期类 类 Date 表示一个特定的瞬间&#xff0c;精确到毫秒 1.1 Date的构造函数 Date() 分配一个 Date 对象&#xff0c;以表示分配它的时间&#xff08;精确到毫秒&#xff09; Date(long date) 分配一个 Date 对象&#xff0c;表示自从标准基准时间起指定时间的毫秒数…

2023最新AI创作系统/ChatGPT商业运营版网站程序源码+支持GPT4+支持ai绘画(MJ)+实时语音识别输入+免费更新版本

2023最新AI创作系统/ChatGPT商业运营版网站程序源码支持ai绘画支持GPT4.0实时语音识别输入文章资讯发布功能用户会员套餐免费更新版本 一、AI创作系统二、系统介绍三、系统程序下载四、安装教程五、主要功能展示六、更新日志 一、AI创作系统 1、提问&#xff1a;程序已经支持G…

论洗碗哥在CSDN摸滚打爬的256个日夜

目录 机缘 收获 成就 憧憬 机缘 创作初心了为了记录一下自己的日常学习过程&#xff0c;方便自己日后去总结&#xff0c;或者遇到类似的问题的时候就可以翻阅自己的文章了。也可以加深自己的印象。其实一开始我是一个不太善于总结的人&#xff0c;机缘之下&#xff0c;听到…