基于VMware虚拟机的Ubuntu22.04系统安装和配置(新手保姆级教程)
文章目录
- 一、前期准备
- 1. 硬件要求
- 2. 软件下载
- 2-1. 下载虚拟机运行软件
- 二、安装虚拟机
- 三、创建 Ubuntu 系统虚拟机
- 四、Ubuntu 系统安装过程的配置
- 五、更换国内镜像源
- 六、设置静态 IP
- 七、安装常用软件
- 1. 编译工具
- 2. 代码管理工具
- 3. 安装代码编辑软件(VIM)
- 八、安装配置 Samba 服务器
- 九、安装 SSH 远程协议
即将学习嵌入式 Linux 系统编程的小伙伴,基本上都是在虚拟机上安装 Ubuntu 系统来学习的。但是作为初学者,可能并不知道什么是虚拟机、怎么安装虚拟机。同时,对 Linux 系统也有很多不解, 比如什么是 Linxu 系统、Linux 系统发行版该选哪个学习等等诸多问题。那么本篇博文将一一解答这些问题,并且把学习 Linux 系统编程的环境搭建好,方便后期的学习。
一、前期准备
1. 硬件要求
众所周知,只要涉及到学习编程,电脑必不可少。但并不是所有的电脑都可以用来学习编程,必须有个最低配置要求。由于本篇博文使用的虚拟机是 VMware Workstation Pro 17,该软件对主机系统的要求如下:
- 2011 年或之后推出的兼容的 64 位 x86/AMD64 CPU
- 1.3 GHz 或更快的内核速度
- 最低 2 GB RAM、建议 4 GB 或更高
而虚拟机运行的 Ubuntu 22.04 有如下的推荐配置:
- 双核 2 GHz 处理器或更高
- 4 GB 系统内存
- 25 GB 磁盘存储空间
- 可访问的互联网
- 光驱或 USB 安装介质
综合以上配置要求,CPU 选择上至少要四核 2 GHz 以上的处理器,运行内存至少 8 GB 以上(4 GB 给虚拟机的系统用了,剩下的还得用于 Windows 系统和其他软件的开销)。
所以请各位小伙伴根据以上的各个要求选择电脑,本次我使用的是 2014 年华硕生产的笔记本电脑 A550JK4200,配置如下图所示,符合所有要求(这个是十年前的配置了,放到现在可以说是相当的拉跨了),也是我目前现有的电脑中能找到的配置最低的电脑了。

2. 软件下载
2-1. 下载虚拟机运行软件
首先来回答一下什么是虚拟机?
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。
(引用:虚拟机_百度百科 (baidu.com))
说白了,我们学习 Linux 系统编程,就必须要有 Linux 系统的环境,用虚拟机软件就是为了有个能运行 Linux 系统的环境。在当前的电脑用虚拟机软件虚拟出另一台“电脑”(虚拟机),并在上面安装 Linux 系统,这样就可以放心大胆地进行各种 Linux 练习而无须担心操作不当导致宿主机系统崩溃了。并且还可以举一反三,将一台电脑变成三台、四台,再分别安装上其他的系统。
那为什么不直接使用 Linux 主机呢?而对于大多数人来说,使用的都是 Windows 系统,不管是把现有的电脑刷机成 Linux 系统,还是再去花钱买一个专属 Linux 系统的电脑,都是不是明智的选择。所以在现有的条件下,使用虚拟机软件运行 Linxu 系统才是最经济和最实际的选择。
本次安装的虚拟机软件是 VMware Workstation Pro 17,也是目前 Windows 最主流的虚拟机软件。
官方下载链接:Download VMware Workstation Pro
点击上面的链接进入下载网页后,下滑到下方有下载按钮,点击左边的DOWNLOAD NOW进行下载。这里有很多初学者会点右边的DOWNLOAD NOW下载,可能是认为我们安装的 Linux 系统,所以下载带有 “Linux” 字样的。这里解释一下,此处的 “Linux” 表示这个软件是在 Linux 环境下安装并使用的,而我们是要在 Windous 的环境下运行虚拟机,所以要下载左边的软件,切记别下载错了。

上面的下载链接已经不可用了,原因是2023年11月23日,芯片巨头博通(Broadcom)正式宣布完成对虚拟软件服务商 VMware 的收购,VMware 所有的产品都被 Broadcom 继承。因此,原 VMware 官网所有软件的下载地址变得不可用了。
新地址如下,不过需要先注册 Broadcom 的账号:
VMware Workstation Player(个人版)
VMware Workstation Pro(专业版)
关于什么是 Linux 以及 Linux 发行版等问题,可以在Linux_百度百科 (baidu.com)上找到答案,这里不做过多的赘述。
那么为什么嵌入式行业钟爱 Ubuntu 系统呢?
这里简单说一下,之后会另写一篇博客进行解释。Ubuntu 是使用最广泛的 Linux 发行版之一,它稳定、可靠、维护良好,并拥有庞大的追随者社区,并且有广泛的编程工具和认证硬件。
本文选用的 Linux 发行版是 Ubuntu22.04,主要原因是后期我会发表一些 OrangePi ZERO 2 交叉编译的博文,需要用到 Ubuntu22.04(其他版本的 Ubuntu 不支持)的环境。
Ubuntu 22.04 LTS,代号为Jammy Jellyfish(果酱水母),是Canonical于2022年4月21日发布的操作系统。这个版本标志着一次主要的版本升级,带来了许多新功能和改进。 首先,桌面环境得到了显著的改进。Ubuntu 22.04 LTS采用了GNOME电源配置文件和流线型工作空间过渡,为用户提供了更加流畅的体验。此外,它还提供了强调色的选择功能,使用户能够更加个性化地设置自己的工作环境。 安全性也是Ubuntu 22.04 LTS的重点。为了提高安全性,它使用了新的加密算法迁移到OpenSSL v3。同时,Wayland作为默认显示服务器,为用户提供了更加现代的显示解决方案。借助Pipewire等技术,即使是屏幕共享等在Wayland下也能开箱即用,而且没有任何麻烦。对于那些使用NVIDIA显卡的计算机,Wayland甚至默认提供。 Ubuntu 22.04 LTS是一个长期支持(Long-Term Support)版本,这意味着它将得到长达五年的支持,直到2027年。这为用户提供了长期的稳定和安全更新。
(引用:Jammy Jellyfish Release Notes - Release - Ubuntu Community Hub)
官方下载链接:下载Ubuntu桌面系统 | Ubuntu
点击上面的链接进入下载网页后,单击下图标注的下载按钮即可。

二、安装虚拟机
双击打开下载好的虚拟机软件安装包。

稍等一会进入安装程序,此界面直接点击“下一步”按钮。

勾选“我接受许可协议中的条款”,再点击“下一步”。

默认安装位置是“C:\Program Files (x86)\VMware\VMware Workstation\”,点击旁边的“更改…”按钮可以修改安装路径,我这里修改成“D:\VMware\VMware Workstation\”。(习惯把软件安装在 D 盘)

修改好安装路径后,选择上不做修改,保持默认,点击“下一步”。

此界面把两个选项的勾选全部取消(反正用不到),点击“下一步”。

这里我默认全部勾选上,你们可以按照自己的习惯选择,点击“下一步”。

点击“安装”即可,大概需要 2 ~ 3 分钟(由电脑配置而定)。

安装完成后,点击“许可证”按钮,在下面列举的密钥中任选一个激活软件,如果密钥失效,可以把每一个都是一遍(亲测全部有效)。
4A4RR-813DK-M81A9-4U35H-06KND
NZ4RR-FTK5H-H81C1-Q30QH-1V2LA
JU090-6039P-08409-8J0QH-2YR7F
4Y09U-AJK97-089Z0-A3054-83KLA
4C21U-2KK9Q-M8130-4V2QH-CF810
MC60H-DWHD5-H80U9-6V85M-8280D
ZA30U-DXF84-4850Q-UMMXZ-W6K8F
AC590-2XW97-48EFZ-TZPQE-MYHEA
YF39K-DLFE5-H856Z-6NWZE-XQ2XD
AC15R-FNZ16-H8DWQ-WFPNV-M28E2
CZ1J8-A0D82-489LZ-ZMZQT-P3KX6
YA11K-6YE8H-H89ZZ-EXM59-Y6AR0

把密钥粘贴进来后,点击“输入”按钮。

最后单机“完成”按钮,完成安装。

三、创建 Ubuntu 系统虚拟机
双击打开刚刚安装好的 VMware Workstation Pro 17,进入软件后,点击“创建新的虚拟机”。

进入虚拟机安装向导,选择“自定义(高级)”的选项,点击“下一步”。

再次单击“下一步”。

选择“安装程序光盘映像文件”,点击输入框旁边的“浏览”按钮。

根据下载路径,找到下载好的 Ubuntu 镜像安装包(自己下载的东西,别说不知道在哪个位置,真如此的话,别学编程了),双击选择。

如果能看到如图标注的小字,说明安装包是对的,并且可以正常安装,这时点击“下一步”。

全名和密码可以随便写,用户名只能用小写字母、数字和破折号,输入完毕后,点击“下一步”。

虚拟机名称我习惯修改成“Ubuntu22.04_64bits”(个人习惯,用默认的也行),虚拟机的路径我修改到了“H:\Virtual Machines\Ubuntu22.04_64bits”,这个要根据自己的实际情况修改,因为这关系到硬盘空间的大小,建议选择可用空间比较大的盘符。

每个处理器的内核数量修改成 2,单击“下一步”。

内存选择建议 4 GB,单击“下一步”。

网络类型一定要选择桥接!这个非常重要,很多小伙伴在后期学习网络编程时,发现虚拟机和宿主机(安装虚拟机的电脑)用的是同一个 IP,很多网络编程的功能想验证都验证不了。选择桥接网络,可以让虚拟机有一个属于自己的 IP 地址,后续用 SSH 或者 Samba 访问都方便很多。

这里在插一句题外话,很多小伙伴可能还在上大学,使用的是校园网,根据我对有多个小伙伴反应的情况来看,有一些校园网的网口只能有一个 IPv4 的地址,插入交换机也不能用多个 IP,因此不能使用桥接功能。这里我能想到的唯一解决办法就是买个路由器来解决,也确实解决问题了,原理就是用路由器的 DHCP 功能,来管理分配 IP 地址,这样就可以使用桥接网络了。
直接默认,单击“下一步”。

同样默认,单击“下一步”。

同样默认,单击“下一步”。

硬盘容量默认是 20 GB,我直接使用了 80 GB(打铁还需自身硬,我这个盘符 210 GB),单击“下一步”。

文件名我选择默认,单击“下一步”。

到这一步已经完成了,下图没有把“创建后开启吃虚拟机”的选项取消,如果没有取消,单击“完成”按钮后,会直接进入 Ubuntu 系统。

如果取消,单击“完成”按钮后,就会停在如下图所示的界面,表示虚拟机已经创建好了。

注意,到这一步实是把 Ubuntu 的虚拟机创建好了,并不是把 Ubuntu 系统安装了,正式的安装需要启动虚拟机。
四、Ubuntu 系统安装过程的配置
虚拟机创建好后,可以通过点击下图标注的两个按钮中的任意一个进入启动虚拟机。

稍等片刻后,进入如下图的界面,建议直接点“Continue”,而不是改成中文。这里解释一下,很多博主会教你们修改成中文,这样使用起来确实方便,但是本着学习的态度,我们应该要去适应全英文的开发环境,毕竟将来的工作环境还是英文居多。

这里可以选择默认的选项,直接点“Continue”。如果想要比较快的安装好系统,可以选择“Minimal Installation”(最小安装方式),然后把“Download updates while installing Ubuntu”也取消勾选,这样的安装速度最快。

下图所示的界面检测到本台电脑(虚拟机)没有操作系统,询问是否要安装操作系统,默认选项“Erase disk and install Ubuntu”就是安装操作系统的选项,只是会清空虚拟机所有的磁盘(是本台虚拟机的磁盘,不是宿主机的磁盘,所以不要大惊小怪),直接点“Install Now”即可。

如果提示这个界面(可能不是所有人都有),直接点击“Continue”。

时区选择“shanghai”(上海的拼音,直接用鼠标在地图上点,作为中国人,学了那么久地理,别说连上海的大概位置都指不出来),然后点击“Continue”。

然后输入姓名、电脑名、账户和密码,账号会最终显示在终端,密码我一般都用“1”(反正是虚拟机)。

接着就进入漫长的安装过程了,安装时长根据电脑配置决定(我这台老古董安装了 20 分钟)。

安装完成,系统提示想要重启虚拟机,直接点“Restart Now”重启。

看到这个界面,系统也算是安装成功了。

点击账号图标,输入密码后按回车进如系统。

初次进入 Ubuntu 系统会有一个欢迎界面,内容忽略,直接点击右上角的“Skip”跳过。

这里是提示是否要升级成 Ubuntu Pro,目前没测试过,建议默认选择“Skip for now”,然后点击“Next”。

这个是 Ubuntu 系统的改善建议,改成“No, don’t send sysytem info”,然后点击“Next”。

到这一步直接点“Done”跳过,Ubuntu 系统初次开机的工作就算完成了。

五、更换国内镜像源
Ubuntu 系统的软件源默认是国外的网站,升级或下载软件都很不方便(有时候都访问不了),因此建议换成国内的镜像源。在更改软件源之前,最好先备份原有的软件源列表文件,以防止意外情况导致系统无法正常更新或安装软件。
先按快捷键Ctrl + Alt + T,调出终端(以后凡是有关要输入命令的操作,都要调出终端,之后不再赘述)。如果觉得字体太小了,可以按快捷键Ctrl + Shift + =,字体要是太大,需要缩小,可以按快捷键Ctrl + -
然后输入以下命令进行备份:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
再次照顾一下初学者,习惯使用Ctrl + C和Ctrl + V进行复制粘贴的小伙伴,会发现在 Ubuntu 终端用不了。其实 Ubuntu 系统终端也有复制粘贴的快捷键,而且在 Windows 系统也通用,只是知道的人太少了。在 Ubuntu 系统终端复制使用 Ctrl + Insert,粘贴快捷键是Shift + Insert。因为现在很多人使用的键盘都不是 104 全键盘,很多键盘上都没有“Insert”(有的键盘是缩写:Ins),所以导致很多人用不了,也就不知道有这么一回事了。
回到正题,把命令粘贴或输入后,按回车健执行,由于用到 sudo(超级用户)的权限,需要输入账户密码,密码输入时是不会在终端显示任何符号的(注意:是任何符号都不显示,只能纯盲打),输入完毕直接回车确认即可。只要是执行成功,不会有任何提示,而是可以继续输入命令,如下图所示。

对于新手,就不教太复杂的命令行的方式来修改镜像源了,直接用鼠标点击左下角的“Show Applications”(桌面左下角九个小点的图标)。

找到并点击“Software & Updates”。

点击“Download from”旁边的下拉框,选择“other”。


上滑鼠标找到“China”,展开后选择“mirrors.aliyun.com”,然后点击"Choose Server"保存,最后输入密码即可。

修改完直接关闭界面即可。

关闭时后弹出下图所示的弹出,直接关闭就可以了。

运行以下命令更新软件源:
sudo apt update

更新软件源后,可以通过以下命令升级系统中已安装的软件包(命令后面的-y可以跳过确认询问):
sudo apt upgrade -y
六、设置静态 IP
有时候我们会发现,Ubuntu 的 IP 地址会改变,如果后续有 SSH、Samba 等使用需求,这时就需要配置静态 IP 以保证这些功能的正常使用。
设置 Ubuntu 系统的静态 IP,请查阅《Ubuntu22.04 设置静态 IP 的方法》。
七、安装常用软件
刚安装好的系统缺少了许多常用软件,如 gcc、git 等。
1. 编译工具
基本的编译和构建软件工具可以用下面的命令进行安装,build-essential软件包组包含了gcc、g++、make等编译工具和构建工具,也包含了标准 C 库和头文件。
sudo apt install build-essential -y
2. 代码管理工具
考虑到之后或许需要用到git拉取代码,可以把 Git 工具也一起安装了。
sudo apt install git-all -y
3. 安装代码编辑软件(VIM)
刚刚安装好的 Ubuntu 系统自带有 vi,但是很多人都会发现在编辑模式下方向键和退格键都不能正常使用,主要是因为 Ubuntu 自带的 vi 的版本太低了,所以最好先把系统自带的 vi 编辑器卸载干净后,再安装最新的 vim。
想要彻底卸载 vim,可以输入下面的命令:
sudo apt-get remove vim vim-runtime vim-tiny vim-common vim-scripts vim-doc -y
等卸载完毕后,在输入下面的安装命令:
sudo apt-get install vim -y
八、安装配置 Samba 服务器
Samba 是一个开源软件套件,它提供了在 Linux 和 Unix 系统上实现与 Windows 操作系统共享文件和打印机的功能。通过 Samba,Linux 或 Unix 系统可以像 Windows 一样与其他计算机共享文件和打印机,并且可以使用 Windows 文件共享协议(SMB/CIFS)来实现。
如果需要配置 Samba服务器,请查阅《基于Ubuntu22.04的Samba服务器搭建教程(新手保姆级教程)》。
九、安装 SSH 远程协议
请查阅博客《基于 Ubuntu22.04 安装 SSH 服务》。
相关文章:
基于VMware虚拟机的Ubuntu22.04系统安装和配置(新手保姆级教程)
文章目录 一、前期准备1. 硬件要求2. 软件下载2-1. 下载虚拟机运行软件 二、安装虚拟机三、创建 Ubuntu 系统虚拟机四、Ubuntu 系统安装过程的配置五、更换国内镜像源六、设置静态 IP七、安装常用软件1. 编译工具2. 代码管理工具3. 安装代码编辑软件(VIM)…...
Python|基于DeepSeek大模型,自动生成语料数据(10)
前言 本文是该专栏的第10篇,后面会持续分享AI大模型干货知识,记得关注。 在本专栏之前,笔者在文章《Python|基于DeepSeek大模型,实现文本内容仿写(8)》中,有详细介绍通过Python+DeepSeek大模型,实现对目标文本内容的仿写。 而在本文中,笔者将基于DeepSeek大模型,通…...
基于SpringBoot的历史馆藏系统设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
蓝桥杯[每日两题] 真题:好数 神奇闹钟 (java版)
题目一:好数 题目描述 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位 )上的数字是奇数,偶数位(十位、千位、十万位 )上的数字是偶数,我们就称之为“好数”。给定…...
基于BMO磁性细菌优化的WSN网络最优节点部署算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 无线传感器网络(Wireless Sensor Network, WSN)由大量分布式传感器节点组成,用于监测物理或环境状况。节点部署是 WSN 的关键问…...
学习笔记:Python网络编程初探之基本概念(一)
一、网络目的 让你设备上的数据和其他设备上进行共享,使用网络能够把多方链接在一起,然后可以进行数据传递。 网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信。 二、IP地址的作用 用来标记唯一一台电脑…...
Laya中runtime的用法
文章目录 0、环境:2.x版本1、runtime是什么2、使用实例情景需要做 3、script组件模式 0、环境:2.x版本 1、runtime是什么 简单来说,如果创建了一个scene,加了runtime和没加runtime的区别就是: 没加runtimeÿ…...
Docker中GPU的使用指南
在当今的计算领域,GPU(图形处理单元)已经成为了加速各种计算密集型任务的关键硬件,特别是在深度学习、科学模拟和高性能计算等领域。Docker作为流行的容器化平台,允许开发者将应用程序及其依赖打包成一个可移植的容器,在不同的环境中运行。当需要在Docker容器中利用GPU的…...
OpenCV计算摄影学(16)调整图像光照效果函数illuminationChange()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对选定区域内的梯度场应用适当的非线性变换,然后通过泊松求解器重新积分,可以局部修改图像的表观照明。 cv::illuminati…...
【爬虫】开篇词
一、网络爬虫概述 二、网络爬虫的应用场景 三、爬虫的痛点 四、需要掌握哪些技术? 在这个信息爆炸的时代,如何高效地获取和处理海量数据成为一项核心技能。无论是数据分析、商业情报、学术研究,还是人工智能训练,网络爬虫&…...
C#变量与变量作用域详解
一、变量基础 1. 声明与初始化 声明语法:<数据类型> <变量名>(如 int age; string name)初始化要求: 1、 类或结构体中的字段变量(全局变量)无需显式初始化,默认值…...
深度解析 slabtop:实时监控内核缓存的利器
文章目录 深度解析 slabtop:实时监控内核缓存的利器slabtop 简介基本语法与选项命令语法主要选项详解 实际应用实例示例 1:每 5 秒刷新显示 slab 缓存信息示例 2:按名称排序,每 10 秒刷新一次显示 slab 缓存信息 如何解读 slabtop…...
力扣-股票买入问题
dp dp元素代表最大利润 f[j][1] 代表第 j 次交易后持有股票的最大利润。在初始状态,持有股票意味着你花钱买入了股票,此时的利润应该是负数(扣除了买入股票的成本),而不是 0。所以,把 f[j][1] 初始化为负…...
微服务保护:Sentinel
home | Sentinelhttps://sentinelguard.io/zh-cn/ 微服务保护的方案有很多,比如: 请求限流 线程隔离 服务熔断 服务故障最重要原因,就是并发太高!解决了这个问题,就能避免大部分故障。当然,接口的并发…...
蓝桥杯刷题周计划(第二周)
目录 前言题目一题目代码题解分析 题目二题目代码题解分析 题目三题目代码题解分析 题目四题目代码题解分析 题目五题目代码题解分析 题目六题目代码题解分析 题目七题目代码题解分析 题目八题目题解分析 题目九题目代码题解分析 题目十题目代码题解分析 题目十一题目代码题解分…...
【C++】C++11部分
目录 一、列表初始化 1.1 {}初始化 1.2 initializer_list 二、变量类型推导 2.1 auto 2.2 decltype 三、STL中一些变化 3.1 新增容器 四、lambda表达式 4.1 C98中的一个例子 4.2 lambda表达式 4.3 函数对象与lambda表达式 五、包装器 5.1 function包装器 5.2 fu…...
【分布式】聊聊分布式id实现方案和生产经验
对于分布式Id来说,在面试过程中也是高频面试题,所以主要针对分布式id实现方案进行详细分析下。 应用场景 对于无论是单机还是分布式系统来说,对于很多场景需要全局唯一ID, 数据库id唯一性日志traceId 可以方便找到日志链&#…...
[MERN] 使用 socket.io 实现即时通信功能
[MERN] 使用 socket.io 实现即时通信功能 效果实现如下: MERN-socket.io 实现即时聊天 Github 项目地址:https://github.com/GoldenaArcher/messenger-mern 项目使用了 MERN(MongoDB, Express, React, Node.js) socket.io 实现即时通信功能,并且使用了…...
c#面试题整理6
1.String类能否被继承,为什么 可以看到String类的修饰符是sealed,即是密封类,故不可被继承 2.一个对象的方法是否只能由一个线程访问 不是,但是可通过同步机制,确保同一个时间只有一个线程访问 3.计算2*8ÿ…...
简洁实用的3个免费wordpress主题
高端大气动态炫酷的免费企业官网wordpress主题 非常简洁的免费wordpress主题,安装简单、设置简单,几分钟就可以搭建好一个wordpress网站。 经典风格的免费wordpress主题 免费下载 https://www.fuyefa.com/wordpress...
Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
一:背景 1. 讲故事 前面跟大家分享过一篇 C# 调用 C代码引发非托管内存泄露 的文章,这是一个故意引发的正向泄露,这一篇我们从逆向的角度去洞察引发泄露的祸根代码,这东西如果在 windows 上还是很好处理的,很多人知道…...
【HDLbits--counter】
HDLbits--counter 在IC设计中,counter是十分普遍和重要的设计内容; 题目:基础计数器 module top_module (input clk,input reset,output [9:0] q);always (posedge clk) beginif(reset) beginq < 0;end else beginif(q999) beginq < 0…...
nvm 让 Node.js 版本切换更灵活
有很多小伙伴前端开发进程中,我们常常会遇到不同项目依赖不同版本 Node.js 的情况。我们不可能去卸载重新安装适应的版本去安装依赖或者启动项目。为了避免版本冲突带来的一系列麻烦,在这里给大家推荐一款Node.js 版本管理工具——nvm(Node V…...
双向选择排序算法
一 概述 双向选择排序(又称鸡尾酒选择排序)是选择排序的优化版本,核心改进在于每轮遍历同时确定未排序部分的最小值和最大值,分别交换到序列两端,从而减少遍历轮数。 二 时间复杂度 时间复杂度为(O(n^2)),但实际比较次数约为标准选择排序的 (1/2)。 三 C++实现代…...
美畅物联丨P2P系列之STUN服务器:助力网络穿透
在当今WebRTC等实时通信应用广泛兴起的复杂网络环境下,如何在NAT(网络地址转换)环境中实现高效、稳定的点对点(P2P)连接成为关键。STUN(Session Traversal Utilities for NAT)服务器作为应对这一…...
基于SpringBoot的“积分制零食自选销售平台”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“积分制零食自选销售平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 局部E-R图 系统首页界面…...
DeepSeek-V3 技术报告解读
DeepSeek火了有一段时间了,春节假期因为没时间,所以关于deepseek大模型一系列的技术报告一直没看,新年开工后,抽一点时间把之前的坑补起来,关于DeepSeek-V3技术报告的解读已经有很多了,但我相信不同的人去读…...
Spring使用@Scheduled注解的参数详解
在现代Java开发中,定时任务是一个常见的需求。Spring框架提供了Scheduled注解,让我们能够以简单、直观的方式定义和管理这些定时任务。接下来,我们来深入探讨这个注解的使用,以及它的参数都有哪些含义和作用。 Scheduled注解可以…...
力扣72题编辑距离
题目 原理 三个操作对应的操作次数分别是: 插入:在原本的次数上 1删除:在原本的次数上1替换:如果两个位置的字符串一样,则等于原本的次数, 如果不等,在原本的次数上1 去三者的最小值,就是最小的编辑次数 示例 代码 答案是2 package org.example;public class _72_编辑距离 {pu…...
聊天服务器分布式改造
目前的聊天室是单节点的,无论是http接口还是socket接口都在同一个进程,无法承受太多人同时在线,容灾性也非常差。因此,一个成熟的IM产品一定是做成分布式的,根据功能分模块,每个模块也使用多个节点并行部署…...


