Wi-Fi 进化论:从过去到未来(6/10)

news2024/12/26 23:40:25

Wi-Fi(发音: /ˈwaɪfaɪ/),在中文里又称作“移动热点”,是Wi-Fi联盟制造商的商标作为产品的品牌认证,是基于IEEE 802.11标准的无线局域网通信技术 [6]。基于两套系统的密切相关,也常有人把Wi-Fi当作IEEE 802.11标准的同义术语。“Wi-Fi”常被写成“WiFi”或“Wifi”,但是它们并没有被Wi-Fi联盟认可。

并不是每样匹配IEEE 802.11的产品都申请Wi-Fi联盟的认证,相对地缺少Wi-Fi认证的产品并不一定意味着不兼容Wi-Fi设备。

IEEE 802.11的设备已安装在市面上的许多产品,如:个人计算机、游戏机、MP3、智能手机、平板电脑、打印机、笔记本电脑以及其他可以无线上网的周边设备。

一、Wi-Fi 的发展历程

1. 起源与早期发展

Wi-Fi 的发展历程可以追溯到 20 世纪 70 年代。1971 年,Norman Manuel Abramson 教授和他的团队在夏威夷大学构造出了 ALOHAnet 无线分组数据网络,后来 ALOHA 协议成了 Wi-Fi 的理论基础。ALOHAnet 是广为人知的 ARPAnet 的一个更小的无线版本,允许大学的研究人员共享网络并通过固定电话发送消息。

1985 年,Michael Marcus 向美国联邦通信委员会(FCC)提议开放部分频段民用,FCC 公布无需授权使用的 ISM 频段用于工业、科学、医学领域,其中包括后来 Wi-Fi 常用的 2.4G 和 5G 频段,这些频段构成了 Wi-Fi 通信的频段基础。

2. 关键人物与重要事件

  1. Michael Marcus 向 FCC 建议规定未授权频谱,推动了短距离通信技术的发展。1985 年,Michael Marcus 向 FCC 提议开放部分频段民用,FCC 公布了 ISM 频段,为后来 Wi-Fi、蓝牙、ZigBee 等各种短距离通信技术的发展奠定了基础。
  2. Victor Hayes 联合贝尔实验室工程师找到 IEEE,推动建立统一标准。1988 年,美国 NCR 公司想利用未授权频段来做无线收款机,找来 Victor Hayes 评估技术前景。Victor Hayes 认为必须先有一个统一的标准,于是他联合贝尔实验室的另一位工程师 Bruce Tuch 找到 IEEE,希望建立一套通用的未授权频谱标准。90 年代初,IEEE 成立了著名的 802.11 工作组,由 Victor Hayes 担任主席。
  3. 1991 年,NCR 和其合资伙伴 AT&T 开发出 WaveLAN 技术,被认为是 Wi-Fi 雏形。NCR 的工程团队和其合资伙伴 AT&T 在荷兰开发出了 WaveLAN 技术,这项技术被认为是 Wi-Fi 的雏形。
  4. 1996 年,悉尼大学的 John O'Sullivan 和他的小组成功在美国申请无线网技术专利,后被 IEEE 认定为 Wi-Fi 核心技术标准。隶属于 CSIRO 的 John O’Sullivan,带领其研究小组在美国申请到无线局域网专利(US-5487069-A),专利主要涉及三个关键技术:多载波调制、前向纠错、交叉存取。1999 年,IEEE 官方定义 802.11 标准的时候,选择并认定了 CSIRO 发明的无线网技术是世界上最好的无线网技术,因此吸纳为 Wi-Fi 的核心技术标准。
  5. 1999 年,IEEE 802.11b 和 802.11a 标准获得批准,同年 6 家公司组成 WECA,后更名为 Wi-Fi 联盟。IEEE802.11 的标准版本:802.11b(工作于 2.4GHz 频段)和 802.11a(工作于 5.8GHz 频段),分别于 1999 年 12 月和 2000 年 1 月获得批准。就在工作组忙于确定标准的同时,Intersil、3Com、诺基亚、Aironet、Symbol 和朗讯这 6 家公司,共同组成了无线以太网路相容性联盟(Wireless Ethernet Compatibility Alliance,缩写为 WECA)。WECA 成立的目的主要是对不同厂家的产品进行兼容性认证,实现不同厂家设备间的互操作性。后来,“Wi-Fi” 这个名字胜出,2002 年 10 月,WECA 正式改名为 Wi-Fi 联盟(Wi-Fi Alliance)。

二、不同 Wi-Fi 标准的特点和性能

1. Wi-Fi 4(802.11n)

  1. 特点:Wi-Fi 4 使用 MIMO 技术提高无线网络速度,这种技术允许同时传输多个数据流,从而显著提升了网络的数据传输速度和性能。它支持 4x4 MIMO 信道,能够在一定程度上增强信号的稳定性和覆盖范围。此外,Wi-Fi 4 采用 WPA2 协议保护安全性,为用户的网络连接提供了较为可靠的安全保障。
  2. 性能:Wi-Fi 4 的最大速度为 600Mbps,虽然在如今看来速度相对较慢,但在其推出之时,已经能够满足大部分用户的日常网络需求。例如,在浏览网页、观看在线视频等方面,Wi-Fi 4 能够提供较为流畅的体验。然而,随着高清视频、大型文件下载等需求的不断增加,Wi-Fi 4 的速度逐渐显得有些力不从心。

2. Wi-Fi 5(802.11ac)

  1. 特点:Wi-Fi 5 在技术上进行了多方面的升级。它使用更高效的 MIMO 技术,进一步提高了数据传输的速度和稳定性。同时,更宽的信道带宽使得网络能够承载更多的数据流量。Wi-Fi 5 支持 MU-MIMO 技术,这意味着它可以同时服务多个设备,极大地提高了网络的效率和容量。在安全性方面,Wi-Fi 5 使用 WPA3 协议,增强了网络的安全性,有效防止网络攻击和数据泄露。
  2. 性能:Wi-Fi 5 的最高速度可达 3.5Gbps,相比 Wi-Fi 4 有了巨大的提升。这种高速的网络连接使得用户可以轻松地进行高清视频流、在线游戏等高带宽需求的活动。例如,在观看 4K 甚至 8K 高清视频时,Wi-Fi 5 能够提供流畅的播放体验,不会出现卡顿现象。同时,对于在线游戏玩家来说,低延迟的网络连接能够确保游戏的流畅运行,提高游戏体验。

3. Wi-Fi 6(802.11ax)

  1. 特点:Wi-Fi 6 采用了一系列先进的技术。OFDMA 技术的应用提高了网络范围和设备连接数,使得更多的设备可以同时连接到网络而不会出现明显的性能下降。它支持更多设备同时连接和较低的延迟,这对于现代智能家居、办公环境等多设备连接的场景非常重要。在安全性方面,Wi-Fi 6 使用 WPA3 协议和更好的密码学保护网络安全,为用户的数据提供了更高级别的保护。
  2. 性能:Wi-Fi 6 的最高速度可达 9.6Gbps,这一速度足以满足未来更多连接和高带宽需求的场景。例如,在企业环境中,大量的设备需要同时连接网络进行数据传输和共享,Wi-Fi 6 的高速和低延迟特性能够提高企业的工作效率。在智能家居领域,众多的智能设备可以稳定地连接到网络,实现智能化的控制和管理。

4. Wi-Fi 7(802.11be)

  1. 特点:Wi-Fi 7 将使用更多先进技术提高网络速度和性能。它将拥有更高的无线频谱范围,这意味着可以利用更多的频段来传输数据,提高网络的容量和速度。更短的信道间隔可以提高频谱的利用率,进一步提升网络性能。更高的 MIMO 技术将支持更多的数据流,增强信号的稳定性和覆盖范围。同时,Wi-Fi 7 还将采用更佳的协议,提高网络的效率和可靠性。此外,Wi-Fi 7 在保持较低功耗的同时,提高了网络安全性,为用户提供更加安全、稳定的网络连接。
  2. 性能:预计最高速度将达到 30Gbps,这一速度是前几代 Wi-Fi 标准的数倍甚至数十倍。如此高的速度将为未来的各种应用场景提供强大的支持。例如,在 8K A/V 流媒体、AR/VR、云游戏等对网络速度和延迟要求极高的领域,Wi-Fi 7 能够提供流畅的体验。在工业物联网和工业 4.0 中,大量的传感器和设备需要实时监控和控制,Wi-Fi 7 的高速率和低延迟特性可以满足这些需求。

三、无线网络的优化技巧

1. 重启路由器

路由器就如同我们生活中的一位默默工作的伙伴,长时间运行后,它也会疲惫,性能可能会逐渐下降。这时候,一个简单却十分有效的办法就是重启路由器。重启就像是给路由器来了一次 “深呼吸”,它可以清除缓存,让路由器重新焕发活力。就好比我们的手机用久了会卡顿,重启一下往往就能恢复流畅,路由器也是如此。当我们发现无线网络速度变慢,或者出现连接不稳定的情况时,不妨试试重启路由器,这可能会给我们带来意想不到的惊喜。

2. 路由器位置放对

(1)位置居中,减少干扰

路由器的位置对于无线网络信号的强度至关重要。首先,应确保路由器位于家中中心位置。这样可以最大程度地减少信号在传输过程中受到的阻碍。如果路由器靠近墙壁或角落,信号可能会被阻挡,从而导致家中某些区域的信号变弱。就像我们在一个房间里说话,如果站在角落里,声音可能传不到房间的其他角落;而站在房间的中心位置,声音则能更均匀地传播到各个方向。同时,要避免将路由器放置在大型金属物体附近,因为金属会对信号产生干扰。想象一下,金属就像是一堵无形的墙,会阻挡无线网络信号的传播。

(2)调整天线,优化信道

除了位置的选择,调整天线角度和更改无线信道也是优化无线网络的重要方法。天线角度的调整可以改变信号的发射方向,找到最佳的信号覆盖范围。一般来说,将天线调整为不同的角度,然后通过设备测试信号强度,找到信号最强的角度组合。而更改无线信道则可以避免与周围其他无线网络的干扰。在我们的生活环境中,可能有很多邻居也在使用无线网络,如果大家都使用相同的信道,就会导致信号拥堵,从而影响网络速度。通过路由器的管理界面,可以查看当前周围无线网络使用的信道情况,选择一个相对空闲的信道,可以有效提高网络性能。

3. 检查并优化网络设备

(1)驱动更新,硬件升级

网络设备的性能直接影响着无线网络的速度和稳定性。首先,要检查设备的网络适配器驱动是否为最新。就像我们的电脑需要不断更新系统和软件来保持良好的运行状态一样,网络适配器驱动的更新也能提升网络连接的速度和稳定性。如果驱动过时,可能会导致网络连接出现问题,或者无法发挥出设备的最佳性能。同时,考虑升级硬件以支持更快的网络连接也是一个不错的选择。随着科技的不断进步,新的网络设备不断推出,它们往往具有更高的性能和更好的兼容性。例如,更换一款支持更高速度的无线网卡,可以让我们的电脑在连接无线网络时速度更快。

(2)定期清理,保持良好状态

定期清理电脑灰尘也是优化网络设备的一个重要环节。电脑在长时间使用后,内部会积累灰尘,这些灰尘可能会影响电脑的散热,从而导致处理器降频,进而影响上网速度。就像我们的汽车需要定期保养一样,电脑也需要我们的呵护。定期打开电脑机箱,用吹风机或者专业的清洁工具清理灰尘,可以让电脑保持良好的散热状态,从而提高网络连接的稳定性和速度。

4. 网线端口插到千兆网口

确保网线连接到光猫路由器的千兆以太网端口是提高网络速度的关键一步。很多用户在使用网络时可能没有注意到这个细节,将网线连接到了低速的百兆端口,从而限制了网络速度。就好比我们开车在高速公路上,如果选择了一条限速较低的车道,那么车速就会受到限制。而将网线连接到千兆以太网端口,就像是选择了一条高速车道,可以让我们的网络速度得到充分发挥。

5. 网线需支持千兆

使用支持千兆传输的 Cat5e 或更高级别的网线,是确保数据传输稳定性和速度的重要保障。正如我们在选择交通工具时,会选择性能更好的车辆来提高行驶速度和安全性一样,选择合适的网线也能提升网络传输的质量。Cat5e 及更高级别的网线能够提供更高的带宽和更好的抗干扰能力,确保数据在传输过程中不会出现丢失或错误。如果使用老旧的网线,或者不支持高速传输的网线,就可能会导致网络速度变慢,甚至出现连接不稳定的情况。因此,在搭建无线网络时,一定要选择质量可靠、支持千兆传输的网线。

四、无线网络的故障排除技巧

1. 检查物理连接

当无线网络出现故障时,首先要检查路由器、光猫等设备之间的物理连接是否正常。仔细查看网线是否松动、损坏或插错接口。同时,确认路由器和光猫的电源是否接通,观察指示灯是否正常亮起。就如同我们在使用电器时,首先要确保插头插好、电源开启一样,这些看似简单的步骤却往往是解决问题的关键。如果发现网线有问题,应及时更换或修复,确保物理连接的稳定。

2. 重启路由器

长时间运行的路由器可能会因为缓存过多等原因导致网络故障。此时,重启路由器是一个有效的解决方法。在重启之前,先关闭连接到该路由器的所有设备,等待路由器完全关闭后再重新启动。这就像是给疲惫的路由器来了一次 “休息和重置”,让它能够重新以良好的状态投入工作。重启路由器可以清除缓存,解决因长时间运行而产生的各种问题,恢复网络的正常运行。

3. 检查网络设置

如果重启路由器后问题仍然存在,那就需要检查网络设置了。首先,确保 WiFi 名称(SSID)和密码输入正确。一个小小的输入错误都可能导致无法连接网络。其次,检查设备的网络配置,如 IP 地址、DNS 设置等是否正确。如果设备配置混乱,可以尝试重置网络配置或恢复出厂设置。这就好比我们在调整手机设置时,如果出现问题,可以选择恢复出厂设置来重新开始。通过正确的网络设置,可以确保设备能够顺利连接到无线网络。

4. 检查路由器配置

除了设备的网络设置,路由器的配置也非常重要。登录路由器管理界面,检查无线信道设置是否合理,避免与邻居的路由器产生冲突。在我们的生活环境中,可能有很多邻居也在使用无线网络,如果无线信道设置不合理,就会导致信号拥堵,影响网络速度。同时,检查路由器的安全设置,如 MAC 地址过滤等,确保自己的设备没有被误过滤。合理的路由器配置可以提高网络的稳定性和安全性。

5. 更新驱动程序和软件

设备的驱动程序或软件版本过旧可能导致网络故障。尝试更新设备的驱动程序或软件版本,以修复可能存在的网络故障。就像我们的电脑需要不断更新系统和软件来保持良好的运行状态一样,网络设备也需要及时更新驱动程序和软件。更新后,设备可能会获得更好的性能和稳定性,解决网络连接问题。

6. 联系网络服务提供商

如果以上方法都无法解决问题,那么可能是网络服务提供商的问题。此时,可以联系网络服务提供商,寻求专业技术支持和帮助。他们拥有更专业的知识和设备,可以对网络进行全面的检测和修复。就像我们在遇到汽车故障时,会寻求专业的汽车维修人员的帮助一样,当无线网络出现问题时,联系网络服务提供商是最后的解决办法。

五、文章总结

1. 文章总结

本文全面介绍了无线网络技术中 Wi-Fi 的演变和未来。从 Wi-Fi 的起源与早期发展开始,我们了解到其发展历程可以追溯到 20 世纪 70 年代,经过众多关键人物的推动和重要事件的发生,逐渐形成了如今我们所熟知的 Wi-Fi 技术。

在不同 Wi-Fi 标准的特点和性能方面,我们详细分析了 Wi-Fi 4、Wi-Fi 5、Wi-Fi 6 和 Wi-Fi 7 各自的特点与性能优势。从 Wi-Fi 4 的 MIMO 技术到 Wi-Fi 7 预计的高达 30Gbps 的速度,每一代标准都在不断提升网络速度、稳定性、安全性和设备连接数等方面的性能。

关于无线网络的优化技巧,我们提供了多种实用的方法,包括重启路由器、正确放置路由器位置、检查并优化网络设备、确保网线连接到千兆网口以及使用支持千兆传输的网线等。这些技巧可以帮助用户提高无线网络的性能,获得更好的上网体验。

在无线网络的故障排除技巧方面,我们介绍了从检查物理连接到联系网络服务提供商的一系列步骤,帮助用户在遇到网络故障时能够快速定位问题并解决。

总的来说,Wi-Fi 技术在不断发展和进步,为我们的生活和工作带来了极大的便利。随着科技的不断创新,我们可以期待未来的 Wi-Fi 技术将更加高效、稳定和安全。

2. 文章相关资源

对于想要深入了解 Wi-Fi 技术的读者,可以参考以下资源:

  • 专业的网络技术书籍,如《无线网络技术原理与应用》等,这些书籍可以提供更深入的理论知识和技术讲解。
  • 网络技术论坛和社区,在这些平台上,用户可以与其他技术爱好者交流经验,分享优化和故障排除技巧,获取最新的 Wi-Fi 技术动态。
  • 各大科技媒体的报道和评测,这些内容可以帮助用户了解不同品牌和型号的路由器性能,以及最新的 Wi-Fi 标准和技术趋势。

3. wifi经典代码案例

以下为你展示一些不同编程语言实现连接 Wi-Fi 以及进行简单 Wi-Fi 操作相关的经典代码案例,涵盖 Python、Java 和 Android(使用 Kotlin 语言示例),示例代码侧重于常见应用场景,比如扫描可用 Wi-Fi、连接指定 Wi-Fi 热点等。

Python(基于 wifi 模块进行 Wi-Fi 操作示例)

首先确保安装 wifi 模块(pip install wifi),以下代码实现扫描附近 Wi-Fi 热点并打印其 SSID(网络名称)和信号强度。

python

import wifi

def scan_wifi():
    cells = wifi.Cell.all('wlan0')  # 'wlan0' 是常见无线网卡接口名,依系统不同可能需调整
    for cell in cells:
        print(f"SSID: {cell.ssid}, 信号强度: {cell.signal} dBm")

if __name__ == "__main__":
    scan_wifi()

要是使用 Python 实现连接到指定 Wi-Fi(假设密码已知),示例如下:

import wifi

def connect_wifi(ssid, password):
    try:
        wifi.Wifi.connect(ssid, password)
        print(f"成功连接到 {ssid}")
    except Exception as e:
        print(f"连接 {ssid} 失败,错误: {e}")

if __name__ == "__main__":
    target_ssid = "Your_WiFi_SSID"
    target_password = "Your_WiFi_Password"
    connect_wifi(target_ssid, target_password)

Java(基于 java.net 相关类实现基础网络连接,模拟在已知 Wi-Fi 环境下网络请求)

下面代码先检查网络连接是否可用(这里假定 Wi-Fi 已正常配置连接在设备上),之后发起简单 HTTP 请求获取网页内容示例。注意要处理好必要的异常。

java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class WiFiConnectionExample {

    public static boolean isNetworkAvailable() {
        try {
            final URL url = new URL("http://www.google.com");
            final URLConnection conn = url.openConnection();
            conn.connect();
            return true;
        } catch (IOException e) {
            return false;
        }
    }

    public static void makeHttpRequest() throws IOException {
        URL url = new URL("http://www.example.com");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("GET");
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuilder content = new StringBuilder();
        while ((inputLine = in.readLine())!= null) {
            content.append(inputLine);
        }
        in.close();
        con.disconnect();
        System.out.println(content.toString());
    }

    public static void main(String[] args) {
        if (isNetworkAvailable()) {
            try {
                makeHttpRequest();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("网络不可用,请检查 Wi-Fi 连接");
        }
    }
}

Android(Kotlin 语言示例,利用 Android 系统的 Wi-Fi 管理框架实现扫描、连接 Wi-Fi)

在 AndroidManifest.xml 中要添加必要权限,比如:

xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

以下是 Kotlin 代码实现扫描周围 Wi-Fi 热点并显示在 ListView 中(界面相关布局代码省略):

kotlin

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.widget.ArrayList;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;

class MainActivity : AppCompatActivity() {

    private lateinit var wifiManager: WifiManager
    private val wifiList = ArrayList<String>()
    private lateinit var listView: ListView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        listView = findViewById(R.id.listView)
        wifiManager = getSystemService(Context.WIFI_SERVICE) as WifiManager
        registerReceiver(wifiReceiver, IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
        scanWifi()
    }

    private val wifiReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val results = wifiManager.scanResults
            wifiList.clear()
            for (result in results) {
                wifiList.add("SSID: ${result.SSID}, 信号强度: ${result.level} dBm")
            }
            val adapter = ArrayAdapter(this@MainActivity, android.R.layout.simple_list_item_1, wifiList)
            listView.adapter = adapter
        }
    }

    private fun scanWifi() {
        if (wifiManager.isWifiEnabled) {
            wifiManager.startScan()
        } else {
            wifiManager.isWifiEnabled = true
            wifiManager.startScan()
        }
    }

    override fun onDestroy() {
        super.onDestroy();
        unregisterReceiver(wifiReceiver);
    }
}

连接指定 Wi-Fi 热点(密码已知)的 Kotlin 代码示例,可在上述代码基础上拓展方法实现:

kotlin

private fun connectToWifi(ssid: String, password: String) {
    val config = WifiConfiguration()
    config.SSID = "\"$ssid\""
    config.preSharedKey = "\"$password\""
    val networkId = wifiManager.addNetwork(config)
    if (networkId!= -1) {
        wifiManager.disconnect()
        wifiManager.enableNetwork(networkId, true)
        wifiManager.reconnect()
        println("尝试连接到 $ssid")
    } else {
        println("配置 Wi-Fi 网络失败")
    }
}

这些代码示例只是基础应用场景展示,实际使用时,根据不同平台、设备以及复杂的网络环境,可能还需要进行深入的优化、错误处理以及适配调整。

拓展知识:

分享一个Python实现连接指定Wi-Fi热点并获取IP地址的代码案例

提供一个用Java实现扫描可用Wi-Fi并连接的代码示例

如何在Android应用中获取已保存的Wi-Fi密码?

  本文相关文章推荐:

1、计算机网络基础全攻略:探秘网络构建块(1/10)

2、TCP/IP 协议:网络世界的基石(2/10)

3、局域网与广域网:探索网络的规模与奥秘(3/10)

4、NAT:连接私有与公共网络的关键技术(4/10)

5、网络安全防护指南:筑牢网络安全防线(5/10)

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

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

相关文章

【C++初阶】第5课—动态内存管理

文章目录 1. 内存分布2. C语言动态内存管理3. C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4. operator new和operator delete函数5. new和delete的实现原理6. malloc/free和new/delete的区别7. 定位new表达式(了解即可) 1. 内存分布 先来做一个关于…

学习threejs,设置envMap环境贴图创建反光效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.CubeTextureLoader 立…

Matlab Simulink HDL Coder FPGA开发初体验—计数器

目录 一、Simulink设计及仿真二、Verilog HDL代码转换1、参数配置2、HDL代码生成 三、ModelSim仿真分析1、使用自己编写的Testbench文件进行仿真2、使用HDL Coder生成的Testbench文件进行仿真 前言 Simulink HDL Coder‌是一款将Simulink和Stateflow模型转化为可综合的Verilog和…

【C语言】扫雷游戏(一)

我们先设计一个简单的9*9棋盘并有10个雷的扫雷游戏。 1&#xff0c;可以用数组存放&#xff0c;如果有雷就用1表示&#xff0c;没雷就用0表示。 2&#xff0c;排查(2,5)这个坐标时&#xff0c;我们访问周围的⼀圈8个位置黄色统计周围雷的个数是1。排查(8,6)这个坐标时&#xf…

实现点名神器的pyqt6实现

利用python gui创建点名神器&#xff0c;包含加分、导出加分记录、清除加分记录。 点名页面 首先导入学生信息 导入成功 开始点名 点击停止 点过之后&#xff0c;点击加分 加完分 查看加分记录 可以直接进入导出记录和清除历史。 此文到此结束&#xff0c;想要源码的请私聊我&a…

【UE5 C++】判断两点连线是否穿过球体

目录 前言 原理 代码 测试 结果 前言 通过数学原理判断空间中任意两点的连线是否穿过球体&#xff0c;再通过射线检测检验算法的正确性。 原理 &#xff08;1&#xff09;设球体球心的坐标为 &#xff0c;半径为r&#xff1b; &#xff08;2&#xff09;设线段中A点的坐…

【AI】数据,算力,算法和应用(3)

三、算法 算法这个词&#xff0c;我们都不陌生。 从接触计算机&#xff0c;就知道有“算法”这样一个神秘的名词存在。象征着专业、权威、神秘、高难等等。 算法是一组有序的解决问题的规则和指令&#xff0c;用于解决特定问题的一系列步骤。算法可以被看作是解决问题的方法…

计算机的错误计算(一百七十一)

摘要 探讨 MATLAB 中秦九韶&#xff08;Horner&#xff09;多项式的错误计算。 例1. 用秦九韶&#xff08;Horner&#xff09;算法计算&#xff08;一百零七&#xff09;例1中多项式 直接贴图吧&#xff1a; 这样&#xff0c;MATLAB 给出的仍然是错误结果&#xff0c;因为准…

Ubuntu20.04运行R-VIO2

目录 1.环境配置2.构建项目3. 运行 VIO 模式4.结果图 1.环境配置 CMakeLists.txt中 C 使用 14、opencv使用4 2.构建项目 克隆代码库&#xff1a; 在终端中执行以下命令克隆项目&#xff1a;git clone https://github.com/rpng/R-VIO2.git编译项目&#xff1a; 使用 catkin_m…

【Maven系列】深入解析 Maven 常用命令

前言 在当今的软件开发过程中&#xff0c;项目管理是至关重要的一环。项目管理包括了项目构建、依赖管理以及发布部署等诸多方面。而在Java生态系统中&#xff0c;Maven已经成为了最受欢迎的项目管理工具之一。Maven 是一套用于构建、依赖管理和项目管理的工具&#xff0c;主要…

深度学习的python基础(1)

一.tensor创建 1.张量的定义 张量在形式上就是多维数组&#xff0c;例如标量就是0维张量&#xff0c;向量就是一维张量&#xff0c;矩阵就是二维张量&#xff0c;而三维张量就可以想象RGB图片&#xff0c;每个channel是一个二维的矩阵&#xff0c;共有三个channel&#xff0…

【Python爬虫实战】轻量级爬虫利器:DrissionPage之SessionPage与WebPage模块详解

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、SessionPage &#xff08;一&#xff09;SessionPage 模块的基本功能 &#xff08;二&#xff09;基本使…

Linux——自定义简单shell

shell 自定义shell目标普通命令和内建命令&#xff08;补充&#xff09; shell实现实现原理实现代码 自定义shell 目标 能处理普通命令能处理内建命令要能帮助我们理解内建命令/本地变量/环境变量这些概念理解shell的运行 普通命令和内建命令&#xff08;补充&#xff09; …

Vue进阶之单组件开发与组件通信

书接上篇&#xff0c;我们了解了如何快速创建一个脚手架&#xff0c;现在我们来学习如何基于vite创建属于自己的脚手架。在创建一个新的组件时&#xff0c;要在新建文件夹中打开终端创建一个基本的脚手架&#xff0c;可在脚手架中原有的文件中修改或在相应路径重新创建&#xf…

Webman中实现定时任务

文章目录 Webman中实现定时任务一、引言二、安装与配置1、安装Crontab组件2、创建进程文件3、配置进程文件随Webman启动4、重启Webman5、Cron表达式&#xff08;补充&#xff09;例子 三、使用示例四、总结 Webman中实现定时任务 一、引言 在现代的后端开发中&#xff0c;定时…

Android笔记(三十四):封装带省略号图标结尾的TextView

背景 项目需求需要实现在文本末尾显示一个icon&#xff0c;如果文本很长时则在省略号后面显示icon&#xff0c;使用TextView自带的drawableEnd可以实现&#xff0c;但是如果文本换行了则会显示在TextView垂直居中的位置&#xff0c;不满足要求&#xff0c;于是有了本篇的自定义…

多线程篇-8--线程安全(死锁,常用保障安全的方法,安全容器,原子类,Fork/Join框架等)

1、线程安全和不安全定义 &#xff08;1&#xff09;、线程安全 线程安全是指一个类或方法在被多个线程访问的情况下可以正确得到结果&#xff0c;不会出现数据不一致或其他错误行为。 线程安全的条件 1、原子性&#xff08;Atomicity&#xff09; 多个操作要么全部完成&a…

Day1 生信新手笔记

生信新手笔记 生信学习第一天笔记打卡。 转录组学中&#xff1a; 上游分析-基于linux&#xff0c;包括质控、过滤、比对、定量&#xff1b; 下游分析-基于R语言&#xff0c;包括差异分析、富集分析、可视化。 1. 级别标题 一个井号加空格 就是一级标题&#xff0c;两个井号加…

Git远程仓库操作

文章目录 远程仓库连接Gitee克隆代码 多人协同问题说明 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Git专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月1日13点10分 远程仓库 Git 是分布式版本控制系统&#xff0c;同一个 Git …

virtualbox给Ubuntu22创建共享文件夹

1.在windows上的操作&#xff0c;创建共享文件夹Share 2.Ubuntu22上的操作&#xff0c;创建共享文件夹LinuxShare 3.在virtualbox虚拟机设置里&#xff0c;设置共享文件夹 共享文件夹路径&#xff1a;选择Windows系统中你需要共享的文件夹 共享文件夹名称&#xff1a;挂载至wi…