无线传感器网络:数据链路层,MAC

news2024/9/27 12:13:17

文章目录

  • Framing
    • Byte Count
    • Flag Byte Method
    • Byte Stuffing
  • Medium Access Control (MAC)
    • Static Channel Allocation
    • Dynamic Channel Allocation
      • Independent Traffic
      • Single Channel
      • Observable Collisions
      • Continuous or Slotted Time
      • Carrier Sense or No Carrier Sense
    • Pure ALOHA
    • Slotted ALOHA
    • Carrier Sense Multiple Access (CSMA) Protocols
      • CSMA with Collision Detection
    • Collision-Free Protocols
      • A Bit-Map Protocol
      • Token Passing
    • Multiple Access with Collision Avoidance (MACA)
    • CSMA with Collision Avoidance
      • Virtual channel sensing using CSMA/CA
      • Interframe spacing in 802.11
    • MAC: Energy Consumption Consideration
  • References


数据链路层使用物理层的服务,在通信通道上发送和接收比特。它有许多功能,包括

  • 为网络层提供服务接口
  • 处理传输错误
  • 调节数据流,使慢速接收者不被快速发送者"淹没"

为了实现这些目标,数据链路层从网络层获取数据包,并将其封装成(frames)进行传输。

Framing

每个帧包含一个帧头(frame header),一个用于容纳数据包的有效载荷字段( payload field ),以及一个帧尾(frame trailer)。

在这里插入图片描述

物理层所做的是接受一个原始比特流,并试图将其传送到目的地。如果信道有噪声,就像大多数无线和一些有线链路一样,物理层将在其信号中添加一些冗余,以将误码率降低到一个可接受的水平。即便这样,也很难保证数据链路层接收到的比特流没有错误。一些比特可能有不同的值(0 变成 1),收到的比特数可能少于、等于或多于传输的比特数。数据链路层需要检测这些错误并在必要时纠正错误。

数据链路层的通常做法是:

  • 将比特流分解成不连续的帧
  • 为每个帧计算校验和(checksum)
  • 在传输时将校验和包含在帧中

当帧到达目的地时,检查和会被重新计算。如果新计算的校验和与帧中包含的校验和不同,数据链路层就知道可能发生了错误,并采取一些措施进行处理。例如直接将错误的帧丢弃,或者给物理层返回一个错误报告。

将比特流分解成不连续的帧,听起来好像很简单,但却大有文章。必须使接收机很容易找到新帧的开始,同时使用很少的信道带宽。我们下面就介绍几种组帧方法。

Byte Count

字节计数法使用帧头中的一个字段来指定帧中的字节数。当目的地的数据链路层看到字节数时,它知道后面有多少个字节,从而也知道了帧的终点位置在哪里。

很明显,这个方法最大的问题在于,如果帧头中的字节数字段在传输中出现错误,那后面一系列的定位都会出错,就像下面这个简单的例子:

在这里插入图片描述

即使校验和不正确,收端知道该帧是坏的,但仍然没有办法知道下一帧从哪里开始。

Flag Byte Method

将帧的开始和结束字节用特殊字节来标识。通常用相同的字节,称为标志字节,来作为起始和结束分隔符。两个连续的标志字节表示一帧的结束和下一帧的开始。

在这里插入图片描述

但如果负载中携带的数据流中含有标志字节,该怎么办?

Byte Stuffing

解决这个问题的一个方法是让发送方的数据链路层在数据中的每个标志字节之前插入一个特殊的转义字符(通常为 ESC)。这就是字节填充法。

然而,如果用来填充的转义字符出现在待发送的数据信息当中,又该如何处理呢?(无限套娃~~)

答案是在出现的这个转义字符前再插入一个转义字符。在接收方,第一个转义字符被移除,留下后面的数据字节。


Medium Access Control (MAC)

在任何广播网络中,都有一个关键问题,那就是在有竞争的情况下如何确定谁能使用这个信道。

在文献中,广播信道有时被称为多接入信道(multiaccess channels)或随机接入信道(random access channels)。用来决定谁接入多接入信道上的协议属于数据链路层的一个子层,称为 MAC。

MAC 的协议非常多,我们可以大致做个梳理:

在这里插入图片描述

Static Channel Allocation

在多个竞争用户之间分配单一信道的传统方法是使用一种复用方法(频分、时分…)。

在频分复用(FDM)中,如果有 N 个用户,带宽会被分成 N 个大小相等的部分,每个用户分配一个部分。由于每个用户都有一个私人频段,用户之间没有干扰。但如果一段时间内这 N 个用户只有少部分在利用带宽资源,那大量的带宽资源就被浪费掉了。

而且,如果超过 N 个用户想进行通信,其中一些用户会因为缺乏带宽而被拒绝,即使一些被分配到一个频段的用户几乎没有发送或接收任何东西。

因此,静态分配并不适合 WSN,因为 WSN 中的流量通常是突发性的。

Dynamic Channel Allocation

动态的信道分配基于以下五个基本假设。

Independent Traffic

该模型由N个独立的节点组成,每个节点都有一个程序或用户,生成用于传输的帧。一旦产生了一个帧,节点就什么也不做了,直到该帧被成功传输。且我们假设帧以恒定的速率生成。实际上,这个假设并不是一个特别好的网络流量模型。

Single Channel

一个单一的信道可用于所有的通信,所有节点可在这个信道上进行传输或接收数据,且不存在其它的通信方式。我们假设这些节点的能力相同,尽管协议可能赋予它们不同的角色(例如,优先级)。

Observable Collisions

如果两个帧同时传输,产生的信号就会出现乱码,这就叫冲突(Collision)。我们认为所有节点都能检测到发生了冲突,冲突的帧必须稍后再进行传输,且除了冲突造成的错误,没有其它错误发生。

Continuous or Slotted Time

时间可以假定是连续的,在这种情况下,数据帧传输可以在任何时刻开始。

另外,时间也可以被划分为不连续的时隙(槽,slots)。在这种情况下,数据帧的传输只能在时隙的起点处开始。一个槽可能包含 0、1 或更多的帧,分别对应空闲状态、一个成功的传输或冲突。

Carrier Sense or No Carrier Sense

有了载波监听的假设,节点可以在尝试使用信道之前来监听信道是否在使用。如果检测到信道不是空闲的,那么节点不会发送消息。

如果不进行载波监听,那么节点想发某个包也就发了,爱咋咋地吧。


Pure ALOHA

Pure ALOHA 的基本理念很简单:只要用户有数据需要发送,就让他们进行传输。这种情况下冲突自然不可避免。在每个节点向中心节点发送数据帧后,该中心节点将该帧重新广播给所有的节点。因此节点也就知道自己的数据帧有没有传送成功了。

如果数据帧传输失败了,节点等待一个随机的时间然后再次发送。注意,必须是随机的时间,否则两个冲突的节点都等待相同时间再传输,还是会发生冲突,一直相爱相杀下去。

固定大小的帧可以使 ALOHA 系统的吞吐量达到最大。

Slotted ALOHA

Slotted ALOHA 将时间划分为不连续的间隔,称为槽,每个间隔对应一个数据帧。这要求每个节点是同步的,即知道每个槽的准确起始时间。

Slotted ALOHA 可以使信道的最大利用率达到 1 e \frac{1}{e} e1

在这里插入图片描述

Carrier Sense Multiple Access (CSMA) Protocols

我们前面已经提到过载波监听的概念。CSMA 主要有两种,坚持型(Persistent)和非坚持型(Non-persistent)。

1-Persistent

当一个节点有数据要发送时,它首先监听信道,看是否有其他同志在发送数据。如果信道是空闲的,节点就会发送其数据。否则,节点会等待直到信道空闲,然后再发送数据帧。

该协议被称为 1-persistent,因为当它发现信道空闲时,会以 100% 的概率传输数据帧。

如果发生了冲突,那么节点会“静默”随机时间,然后再重复上面的所有流程。

你可能会觉得奇怪,既然可以监听信道,怎么还会有冲突发生呢?

如果两个节点在第三个节点的传输过程中准备传输帧,但都检测到信道忙,此时两个节点将礼貌地等待,直到传输结束,然后两个节点将同时开始传输,导致冲突。

此外,传输时延也会导致冲突的发生。 当一个节点发送数据帧后,如果此时另一个节点也刚好准备发送,且第一个节点的信号还没有到第二个节点这儿,那第二个节点会检测到信道空闲,也进行传输,Duang~

Non-Persistent

相比 1-Persistent,Non-Persistent 显得 less greedy。如果节点检测到该信道已经在使用中,那它不会再持续监听信道,来等到信道空闲时立即传输数据。相反,它会等待一个随机的时间段,然后重复之前的流程。

因此,这种算法有更好的信道利用率,但比 1-persistent CSMA 的延迟更长。

p-persistent

p-persistent 被用在 slotted 信道。当监听到信道空闲时,它以概率 p p p 发送数据帧,否则会等到下个时隙的开始。如果该时隙信道也是空闲的,那么继续以概率 p p p 发送数据帧。这个过程重复进行,直到该帧已被传输或另一节点开始传输。如果是后一种情况,那么这个节点属实是老倒霉蛋了,相当于发生了冲突。


下图比较了这几种 CSMA 连同 ALOHA 的信道利用率:

在这里插入图片描述

CSMA with Collision Detection

我们已经知道,如果两个节点监听到信道空闲并同时开始传输,会发生冲突。我们想要节点能够快速检测到冲突并立即停止传输,而不是继续将整个数据帧传完,因为此时的传输已经受到干扰,数据已经乱码,即使收到也没有意义。这样可以节约大量时间以及带宽成本。

这就有了 CSMA/CD。

节点的硬件必须在传输时持续监听信道,如果它读到的信号与它发出的信号不同,它就知道发生了冲突。 具体来说,如果发生冲突,信道上可以检测到超过发送节点本身发送的载波信号幅度的电磁波,由此判断出冲突的存在。如果一个节点检测到冲突,它将中止传输,等待一段随机时间,然后再次尝试。

如果两个节点同时监听到信道空闲,并开始传输,那么检测到冲突的最短时间为信号从一个节点传输到另一个节点所需的时间。

我们考虑如下的最坏情形:

假设信号在两个最远节点之间传输需要的时间为 τ \tau τ。在 t 0 t_0 t0 时刻,一个节点开始传输,就在传输即将完成之时,在 t 0 + τ − ϵ t_0 + \tau - \epsilon t0+τϵ 时刻,另一个节点也开始传输,当然它会立刻检测到冲突并停止传输,但对于第一个节点来说,它可能会在 t 0 + 2 τ − ϵ t_0 + 2\tau - \epsilon t0+2τϵ 时刻才会知道发生冲突了。


Collision-Free Protocols

冲突显然对系统的性能有很大影响,会浪费大量时间、带宽资源,且传输一个数据帧的时间也是不固定的。

我们现在假设以下场景:

有 N 个节点,有从 0 到 N - 1的唯一地址。可以允许部分节点在某个时间段不工作,同时我们也忽略传输时延。基于这些假设,我们还是要考虑相同的问题,哪个节点来使用信道?

A Bit-Map Protocol

我们划分有 N 个时隙,如果节点 0 需要发数据,那么它就在 slot 0 发送 1 比特,其它节点不可以在此时隙发送数据。

不管节点 0 在slot 0 有没有发送数据,节点 1 都可以在 slot 1 发送 1 比特它的数据,当然前提是它有数据帧需要发送的话。

这相当于,要发送数据帧的节点会在它对应的 slot 来发送一比特,告诉大家我有东西要发。在所有的 N 个 slot 过去之后,每个节点都知道了哪个节点要传输数据。这时,需要发送数据的节点便按照节点顺序(0~N-1)传输它们的数据,一个接一个,所以不会发生冲突。

在这里插入图片描述

当最后需要传输数据的节点传输完成之后,就再次回到逐一发送比特的阶段了。如果某个节点很不巧,过了它的 slot 之后正好要发数据,那它就得等下一轮了。

像这样的协议被称为保留协议(reservation protocols),因为它们事先保留了信道所有权并避免了冲突。

Token Passing

Bit-Map 协议的本质是,它让每个节点按照预定的顺序依次传送数据帧。

实现这个思路的另一种方法是以相同的预定顺序将一个叫做令牌(token)的信息从一个节点传到下一个节点。谁有这个 token,代表谁就可以进行传输。如果没有信息要传输,就直接将 token 传给下一个节点。

在令牌环协议(token ring protocol)中,网络的拓扑结构被用来定义节点的发送顺序。token 的传递,只需从一个方向进行接收,然后从另一个方向将其传送出去。

在这里插入图片描述


Multiple Access with Collision Avoidance (MACA)

Hidden node problem

在这里插入图片描述
radio range 指两个节点可能会发生干扰的范围。在上图的情况中,A 和 C 都想给 B 发送数据,但因为 A 和 C 不在彼此的 radio range 内,如果 A 已经发了数据,C 还是会监听到信道空闲,也会发数据,结果两个节点都不能成功传输,在节点 B 处发生了冲突。我们把 A 和 C 叫作 Hidden node。

Exposed Node Problem

在这里插入图片描述

现在 B 想给 A 传输数据,而 C 想给 D 传输数据。如果 B 已经发送数据,而因为 B 在 C 的 radio range 之内,C 此时会监测到信道忙,从而放弃给 D 传输数据。但其实 C 给 D 的传输是完全不受影响的。我们把 B 和 C 叫作 Exposed Node。

早期解决这些问题的一个有影响力的协议就是 MACA。

它的基本思想是让发送方“刺激”接收方输出一个短帧,所以附近的站点可以检测到这个短帧,并避免在即将到来的(大)数据帧期间进行传输。

我们看一个具体例子。

在这里插入图片描述

现在 A 要给 B 传输数据。A 首先会给 B 发送一个 RTS (Request To Send)帧,这个帧里包含了要发送的数据帧的长度。然后 B 会给 A 回复一个 CTS (Clear To Send)帧,也包含从 RTS 中得到的要发送数据帧的长度。A 接收到 CTS 后,就开始传输。

任何收到 RTS 的节点显然离 A 很近,必须保持足够长的“沉默”,以便 CTS 在不发生冲突的情况下传回给A。而任何收到 CTS 的节点显然接近 B,在即将到来的数据传输中也必须保持“沉默”,它们可以通过检查 CTS 帧来判断要传输的数据帧长度,从而决定要“沉默”的时间。

例如,节点 C 可以收到 RTS,但不会收到 CTS。只要它不干扰 CTS,在数据帧发送时,它就可以自由发送。

尽管这么小心翼翼了,还是有可能发生冲突。例如,当 B 和 C 同时给 A 发送 RTS 时,就会发生冲突,RTS 会丢失。这样,没有收到 CTS 回应的节点会等待随机时间后再进行尝试。


CSMA with Collision Avoidance

CSMA/CD 可以检测冲突,但无法避免冲突;对于 CSMA/CA,在发送包的同时不能检测到信道上有无冲突,只能尽量避免

当节点需要第一个数据帧时,首先检测信道,在持续检测到信道空闲达一个 DIFS 之后,主机发送数据帧。接收节点正确接收到该数据帧,等待一个 SIFS 后马上发出对该数据帧的确认。若源站在规定时间内没有收到确认帧 ACK,就必须重传此帧,直到收到确认 ACK 为止,或者经过若干次重传失败后放弃发送。而如果在发送第一个数据帧时监测到信道忙,就会执行下面的随机退避算法。

在之后发送数据帧时,包括重传等情况,节点都会执行叫作随机退避(random back off)的算法。在 OFDM 物理层中,退避的时隙数在 0 到 15 的范围内选择。在持续检测到信道空闲达一个 DIFS 之后,开始对退避计时器(back off counter)倒计时,在每个时隙,如果监听到信道还是空闲的,就继续倒计时,直到计数器为 0,就开始发送数据帧。而如果在某个时隙监听到信道忙,那么就会冻结退避计时器,等待下一次检测到信道空闲 DIFS 后,再继续开始倒计时。

如果节点没有收到 ACK 确认,那么下次退避时会将退避时隙数翻倍再进行尝试,直到传输成功或者达到了最大重传次数。

在这里插入图片描述

节点 A 首先发送了一个数据帧,在此时间段内,节点 B 和 C 也准备要发送数据帧,但它们监测到信道忙,因此会等待信道空闲。在 A 收到 ACK 确认后,信道已经空闲。此时 B 和 C 都开始执行随机退避。因为 C 的随机退避时间比 B 短,所以 C 的计时器倒数到 0 之后率先开始传输数据帧。此时 B 的退避计时器会冻结,直到 C 收到 ACK 确认,B 的退避计时器继续倒计时,计时为 0 后,B 开始传输数据帧。(假设 DIFS 的时间包含在随机退避的时间之内)

Virtual channel sensing using CSMA/CA

802.11 定义的信道监测包括物理监听和虚拟监听两部分。物理监听就是监听信道中是否有有效的信号。而在虚拟监听中,每个节点通过跟踪网络分配向量(NAV)来记录信道的使用状态。每一帧都有一个 NAV 字段,说明后续的传输需要多长时间才能传输完成(包括后续 ACK 的时间)。收到这个帧的节点知道信道将在 NAV 指示的时间段内繁忙,不管它们是否能监测到物理信号,都不会再这段时间传输数据了。

下图中,A 想给 B 发送数据。其中,C 在 A 的 radio range,D 在 B 的 radio range。A 发送的 RTS 请求帧内含有后续传输需要的总时间,这会被 C 也捕捉到,从而在之后的时间保持“静默”;B 回传的 CTS 帧内也包含后续传输的时间,这会被 D 捕捉到。

在这里插入图片描述

此外,如果 A 的 ACK 计时器倒计时完成了 ACK 还没有到,那么它会认为发生冲突了,从而重新开始运行整个协议算法。

Interframe spacing in 802.11

在这里插入图片描述

我们上面提到的 SIFS、DIFS 都是帧间间隔(Interframe spacing)。常规数据帧之间的间隔为DIFS(DCF Inter Frame Spacing),最短的间隔是 SIFS(Short Inter Frame Spacing),ACK、RTS、CTS 都属于 SIFS。

两个 AIFS(Arbitration Inter Frame Space)间隔显示了两个不同优先级的例子。

短的 AIFS1,比 DIFS 短,但比 SIFS 长。它可以被 AP 用来将语音或其他高优先级的流量转移到发送线路的前端,先于常规流量发送。而 长的 AIFS4 则会使 AP 要发送的数据后于常规流量。

EIFS(Extended Inter Frame Spacing),仅由刚刚收到坏帧或未知帧的节点使用,以报告问题。由于接收器可能不知道正在发生什么,它应该等待一段较长时间,以避免干扰两个节点之间正在进行的对话。


MAC: Energy Consumption Consideration

MAC 层协议应确保节点以最小的能量消耗传输其信息。我们知道 WSN 中耗能的三个主要来源是感知、处理以及通信。而其中又以通信耗能最多。MAC 层设计又与通信息息相关,因此对能耗的设计考量非常重要。

在通信过程中,能源消耗的主要来源可以分类如下:

  • Idle Listening:在监测信道时,没有从信道中检索到有用的信号。当一个节点收到一个不是发给自己数据包时,它在接收这个数据包时就相当于在浪费能量。
  • Collisions
  • Protocol Overhead:为了协调无线信道中的通信,MAC 协议需要传输控制数据包。尽管这些控制数据包为 MAC 协议的稳定工作做出了贡献,但它们需要尽可能节约能耗以提高能源效率。
  • Transmit vs. Receiver Power

在传统网络中,由于节点的竞争性,每个节点的公平性是MAC层协议的一个重要方面。然而,在 WSN 中,系统对传感器提供的整体信息更感兴趣。因此,MAC 层协议应采取协作的方式,以便利用特定的应用信息来提高性能。例如,对于一些周期性流量的应用,就可以使用类似 token ring 这样的协议。

此外,由于传感器节点的高密度部署,每个节点收集的信息是高度相关的。来自空间上相隔甚远的传感器的数据比来自临近位置的传感器的高度相关的数据对 sink 更有用。在 MAC 层协议中利用传感器节点之间的关联性,可能可以进一步提高整体网络性能。


References

Wireless Sensor Networks, Ian F. Akyildiz, Mehmet Can Vuran. Chapter 5.

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

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

相关文章

react的useState源码分析

前言 简单说下为什么React选择函数式组件,主要是class组件比较冗余、生命周期函数写法不友好,骚写法多,functional组件更符合React编程思想等等等。更具体的可以拜读dan大神的blog。其中Function components capture the rendered values这句…

JWT有状态登陆与无状态登陆

单点登录与JWT JWT 全称: Json Web Token 。作用: JWT 的作用是 用户授权(Authorization) ,而不是用户的身份认证(Authentication) 。用户认证 指的是使用用户名、密码来验证当前用户的身份,即用户登录。用户授权 指用户登录成功后…

「从零单排canal 07」 parser模块源码解析

本文将对canal的binlog订阅模块parser进行分析。 parser模块(绿色部分)在整个系统中的角色如下图所示,用来订阅binlog事件,然后通过sink投递到store. parser模块应该来说是整个项目里面比较复杂的模块,代码非常多。 因此,本文根…

Nmap爆破MySQL弱口令漏洞:解决报错Accounts: No valid accounts found

nmap工具不仅仅能扫描,也可以暴力破解mysql,ftp,telnet等服务。 看到这里不要怀疑,在kali系统中查一下到底支持哪些暴力破解功能,命令如下 ls /usr/share/nmap/scripts |grep brute.nse 查询结果为 afp-brute.nse …

镜像底层原理详解和基于Docker file创建镜像

目录 一、镜像底层原理 1.联合文件系统(UnionFS) 2.镜像加载原理 3.为什么Docker里的centos的大小才200M? 二、Dockerfile 1.简介 2.Dockerfile操作常用命令 (1)FORM 镜像 (2)MAINTAINER 维护人信息 (3&…

Vue的devtools安装教程

devtools是一个便于开发者调试Vue代码的插件 先确保你已经安装了node.js 点击此处去github上拉取工具包 安装yarn(用npm在打包的时候会失败,使用yarn可以打包成功) ① cmd输入:npm install -g yarn 全局安装yarn包管理工具   …

Nature Plants|植物基因组测序20年回顾与展望:三代HiFi基因组时代

2021年11月29日,美国密歇根州立大学在《Nature Plants》期刊在线发表题为“Representation and participation across 20 years of plant genomesequencing”综述,系统阐述了在过去的20年间,对陆地植物基因组学组装质量、已测序物种的分类和地…

Java的几大常用类

一、Object类 超类、基类,所有类的直接或者间接父类,位于继承树的最顶层。 任何类,如果没有写 extends 显示继承某个类,都直接默认继承 Object 类,否则为间接继承。 Object 类中所定义的方法,是所有对象…

DeeplabV3实战:基于tensorflow搭建DeeplabV3实现语义分割任务

任务描述: 语义分割是一种典型的计算机视觉问题,其是将一些图像作为输入并将它们转换为具有突出显示的感兴趣区域的掩模,即图像中的每个像素根据其所属的感兴趣对象被分配类别。如下图中左图所示,其语义是人骑自行车,语义分割的结果如右图所示,粉红色代表人,绿色代表自行…

狂神的MySQL(1)

01、什么是数据库,为什么要学习数据库 javaEE:企业级java开发 Web 前端(页面:展示,数据!) 后台(连接点:连接数据库JDBC,连接前端(控制&#xf…

web前端-javascript-运算符(介绍说明,算术运算符、+、-、*、/、%,隐式类型转换、转换为String、转换为Number)

文章目录运算符1. 操作符说明1.1. 通过运算符可以对一个或多个值进行运算,并获取运算结果1.2. 它会将该值的类型以字符串的形式返回2. 算数运算符2.1. 当对非 Number 的值进行运算时,会将这些值转换为 Number 然后再运算2.2. 2.3 -2.4 \*2.5 /2.6 %3. 隐式类型转换3…

思科配置VLAN间单臂路由

思科配置VLAN间单臂路由 为什么要配置单臂路由 路由器上链接不同的VLAN的物理接口数量有限,随着VLAN增加端口很快就被耗尽,然而VLAN中继允许单个路由器物理接口接多个VLAN的流量,即有了单臂路由技术。 示例拓扑 本文以下图所示拓扑为例配…

mac误删除文件恢复,mac文件丢失如何找回

mac误删除文件恢复?相信不少朋友一开始遇到这个问题没太放在心上,还以为是自己误删除了,想着以后删除文件的时候尽量小心点,直到发现重要文件被删除后没有经过废纸篓,而被直接删除了,这才引起重视&#xff…

java项目-第160期ssm大学生校园兼职系统_ssm毕业设计_计算机毕业设计

java项目-第160期ssm大学生校园兼职系统_ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm大学生校园兼职系统》 该项目分为3个角色,管理员、学生、企业。 学生角色可以访问前台,查看企业信息、招聘信息进行应聘。 企业角色…

Android Material Design之NavigationView(五)

先上图 使用说明 NavigationView与DrawerLayout 成对出现,经常被用作侧滑菜单,因此当我们使用 NavigationView时布局文件的根节点一定是DrawerLayout 属性 NavigationView 属性描述android:id控件idandroid:layout_width控件的长度android:layout_height控件的高度android…

关于web前端大作业的HTML网页设计——我的班级网页HTML+CSS+JavaScript

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

Flink CDC 新一代数据集成框架

前言: 主要讲解了技术原理,入门与生产实践,主要功能:全增量一体化数据集成、实时数据入库入仓、最详细的教程。Flink CDC 是Apache Flink的一个重要组件,主要使用了CDC技术从各种数据库中获取变更流并接入到Flink中&a…

神经网络训练不起来,怎么办?

从optimization的角度,Cross-entropy比Mean Square Error更加适合用在分类上。使用Cross-entropy这个Loss function的时候,pytorch自动帮你把Soft-max加到你的Network的最后一层。 Optimization Critical Point是Saddle Point还是Local Point&#xff1…

【蓝桥杯web】第十四届蓝桥杯(Web应用开发)模拟赛1期-大学组

数据类型检测 请看这篇数据类型检测 渐变色背景生成器 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name&…

华为云安全亮相世界互联网大会

近日&#xff0c;以“共建网络世界 共创数字未来——携手构建网络空间命运共同体”为主题的世界互联网大会在浙江乌镇盛大举行。华为云安全专家团队携全新的安全运营2.0和数据安全解决方案亮相峰会现场&#xff0c;重点展示华为云在安全运营和数据方案的最新实践成果&#xff0…