实现校园网开机自启动部署
❤️博客主页: iknow181
🔥系列专栏: Python、JavaSE、JavaWeb、CCNP
🎉欢迎大家点赞👍收藏⭐评论✍

目录
一.准备工作
1、IDE安装
2、安装Selenium
1.介绍
2.下载
3、安装pywifi
1.介绍
2.下载
4、下载浏览器驱动
二、登录校园网
1、打开浏览器
2、在网页中输入信息
3、对网页进行点击
4、打开并登录校园网
三、打开网卡
四、检查本地是否获取到ip
五、完整程序
六、设置开机自启动
自启动方法一:系统自启动
自启动方法二:注册服务
1、打包成exe文件
a.概述
b.安装 PyInstalle
c.PyInstaller生成可执行程序
2、注册服务
一.准备工作
在开始之前,我们需要一些准备工作,一个能够编写并运行python代码的IDE(如:PyCharm)、安装Python第三方函数库 Selenium、安装Python第三方函数库 pywifi、安装浏览器驱动。
1、IDE安装
网上教程太多了,而且也没什么大问题,这里就不过多阐述了。
2、安装Selenium
1.介绍
Selenium是广泛使用的模拟浏览器运行的库,它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,并且支持大多数现代 Web 浏览器。
2.下载
这里建议用selenium4.1.1版本,因为我发现高版本会报错,这个版本就没什么问题
下载清华镜像(快一点)
pip下载:打开命令提示符,输入下载命令:
pip install selenium==4.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/
3、安装pywifi
1.介绍
pywifi是在python中一个用于操作无线接口的模块,可以跨平台使用,Windows和Linux都支持
2.下载
pip下载:打开命令提示符,输入下载命令:
pip3 install pywifi
由于此模块基于comtypes模块,因此同时需要下载此模块:
pip3 install comtypes
对于PyCharm,则直接下载两个模块即可
4、下载浏览器驱动
首先的一点就是查看你的浏览器的版本,一定要下载与之对应版本的webdriver驱动文件
-  Chrome驱动文件下载:点击下载chromedrive 
-  Firefox驱动文件下载:点解下载geckodriver 
-  Edge驱动文件下载:点击下载msedgediver 
将下载好的压缩包解压到任意位置,并把当前路径保存到环境变量。(建议将其保存到运行程序的相同级目录下
,这样不需要再添加环境变量了)

到此前期准备工作就完成了
二、登录校园网
1、打开浏览器
接下来我们开始第一步:打开一个网页,这里以baidu.com为例,在python源程序中输入并运行下列代码:
 #引入selenium库中的 webdriver 模块from selenium import webdriver#打开Edge浏览器driver = webdriver.Edge()#打开百度搜索主页driver.get('https://www.baidu.com')运行结果如下:

如果弹出百度页面,那么说明前期工作没毛病,恭喜你已经成功一半了
2、在网页中输入信息
以百度搜索主页为例,我们在使用时,需要在搜索框中输入我们需要搜索的信息,那我们怎么捕捉到页面中的搜索框并在其中输入信息呢?这时我们需要使用到selenium库中的元素定位方法,这里我们希望通过 XPath 定位搜索框在网页中的 <input> 标签 ,调用find_element_by_xpath()方法,在参数中输入路径表达式来定位搜索框,代码如下:
 #调用selenium库中的find_element_by_xpath()方法定位搜索框,同时使用send_keys()方法在其中输入信息driver.find_element_by_xpath('//*[@id="kw"]').send_keys('Hello World!')运行结果如下:

那么大家现在可能会有一个疑问是,应该如何获取搜索框的路径表达式呢?我们按 F12 或右键打开网页的元素审查窗口,点击窗口顶部的元素选择按钮,之后选中搜索框,此时已定位到搜索框在网页中的 <input> 标签,右键选择Copy XPath即可。详细步骤看图:

3、对网页进行点击
在搜索框中输入将要搜索的信息之后,需要点击搜索按钮进行搜索,搜索按钮的路径表达式获取方式与步骤二一致,代码如下:
 #调用selenium库中的find_element_by_xpath()方法定位搜索按钮,同时使用click()方法对按钮进行点击driver.find_element_by_xpath('//*[@id="su"]').click()运行结果如下:

步骤①至③完整代码如下:
 # 引入selenium库中的 webdriver 模块from selenium import webdriver# 打开谷歌浏览器driver = webdriver.Edge()# 打开百度搜索主页driver.get('https://www.baidu.com')# 调用selenium库中的find_element_by_xpath()方法定位搜索框,同时使用send_keys()方法在其中输入信息driver.find_element_by_xpath('//*[@id="kw"]').send_keys('Hello World!')# 调用selenium库中的find_element_by_xpath()方法定位搜索按钮,同时使用click()方法对按钮进行点击driver.find_element_by_xpath('//*[@id="su"]').click()4、打开并登录校园网
如果你对上述三个基础操作有了足够清楚的认识,那么如何实现打开并登录校园网,你的心里一定有了一些想法。每个学校的校园网不同,但是大同小异,下面以我的校园网为例,代码如下:
 # 引入selenium库中的 webdriver 模块from selenium import webdriver# 引入time库import timestu_id = 'XXXXXXXX'  # 学号passwd = 'XXXXXX'  # 密码ip_add = 'X.X.X.X'  # 校园网IP# 这里都是我学校校园网的位置,要替换成你自己的stu_id_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[2]'  # 学号的XPathpasswd_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[3]'  # 密码的XPathlogin_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[1]'  # 登录按钮的XPath'''考虑到网页打开的速度取决于每个人的电脑和网速,使用time库的隐式等待隐式等待会在页面加载完成之后,才开始。在元素的查找过程中,会持续性地获取指定元素对象。如果提前获取到元素,则会继续进行后续的操作。如果没有获取到,则会等待最大的等待时间,也会继续进行后续的操作。设置隐式等待之后,每一行代码的操作都会调用隐式等待。'''# 打开Edge浏览器driver = webdriver.Edge()# 隐式等待driver.implicitly_wait(10)# 打开校园网driver.get(f'http://{ip_add}/')# 输入账号和密码driver.find_element_by_xpath(stu_id_add).send_keys(stu_id)driver.find_element_by_xpath(passwd_add).send_keys(passwd)# 统一网页最大化,防止位置不对driver.maximize_window()# 点击登录按钮driver.find_element_by_xpath(login_add).click()# 关闭浏览器driver.close()driver.quit()三、打开网卡
现在开机自启动(不难)和连接校园网(有ip)都可以实现,但是我发现,刚开机的时候,我们的电脑应该是没有IP地址的,等待有个DHCP服务器分配给我一个ip,如果自己写个DHCP报文发送程序主动寻找请求太麻烦了。
功夫不负有心人,终于让我发现一个巧方法!!!
经过多次实验发现,在windows桌面,图形化界面上只要我打开WLAN,然后点击我要连接wife的名字,这时候查看无线局域网适配器 WLAN时(在命令行查看,输入ipconfig),发现有ip了。知道了流程,那么我们可以用编程来实现这些步骤。
#  引入pywifi库及所带常量库
import pywifi
from pywifi import const, Profile#  获取网卡接口
wifi = pywifi.PyWiFi()#  得到第一个无线网卡
ifaces = wifi.interfaces()[0]#  切断网卡连接
ifaces.disconnect()#  获取wifi的连接状态
wifistatus = ifaces.status()#  检查wifi是否处于切断状态
if wifistatus == const.IFACE_DISCONNECTED:#  网卡已被切断pass
#  如果网卡没有被切断
#  或者使用 " if wifistatus == const.IFACE_CONNECTED: "
else:#  已连接wifipass#  如果已经切断网卡,一般执行下述操作
if wifistatus == const.IFACE_DISCONNECTED:#  设置wifi连接文件profile: Profile = pywifi.Profile()#  你要连接的网络的名称profile.ssid = "    "#  网卡的开放状态#  " Auth - AP "的验证算法profile.auth = const.AUTH_ALG_OPEN#  wifi的加密算法#  通常的加密算法值为 " WPA "#  选择wifi的加密方式#  " Akm - AP "的密钥管理profile.akm.append(const.AKM_TYPE_WPA2PSK)#  加密单元#  " Cipher - AP "的密码类型profile.cipher = const.CIPHER_TYPE_CCMP#  设置密码password = "   "#  回调密码(wifi密码)#  如果没有密码,则设置值为 " CIPHER_TYPE_NONE "profile.key = password#  删除已连接的所有wifi文件ifaces.remove_all_network_profiles()#  加载新的wifi连接文件tep_profile = ifaces.add_network_profile(profile)#  连接上面的wifi文件ifaces.connect(tep_profile)#  如果wifi已连接if ifaces.status() == const.IFACE_CONNECTED:print(True)#  如果仍未连接else:print(False)四、检查本地是否获取到ip
还是那个问题,要等本地从DHCP服务器上获取到ip,写个函数检测一下,必须等有能连外网的ip才能登录校园网联网。
def get_host_ip():"""查询本机ip地址:return: ip"""flag = Falsetry:s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.connect(('8.8.8.8', 80))ip = s.getsockname()[0]if ip:flag = Truereturn flagfinally:s.close()return flag五、完整程序
# 引入selenium库中的 webdriver 模块
from selenium import webdriver
# 引入time库
import time
#  引入pywifi库及所带常量库
import pywifi
from pywifi import const, Profile# 打开wifi
def open_wlan():#  获取网卡接口wifi = pywifi.PyWiFi()#  得到第一个无线网卡ifaces = wifi.interfaces()[0]#  获取wifi的连接状态wifistatus = ifaces.status()#  如果网络断开,执行下述操作if wifistatus == const.IFACE_DISCONNECTED:#  设置wifi连接文件profile: Profile = pywifi.Profile()#  你要连接的网络的名称profile.ssid = "XXXXX"#  设置密码#  password = "   "#  如果没有密码,则设置值为 " CIPHER_TYPE_NONE "profile.key = "CIPHER_TYPE_NONE"#  加载新的wifi连接文件tep_profile = ifaces.add_network_profile(profile)#  连接上面的wifi文件ifaces.connect(tep_profile)def get_host_ip():"""查询本机ip地址:return: ip"""flag = Falsetry:s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.connect(('8.8.8.8', 80))ip = s.getsockname()[0]if ip:flag = Truereturn flagfinally:s.close()return flag# 连接校园网
def networking():stu_id = 'XXXXXXXX'  # 学号passwd = 'XXXXXX'  # 密码ip_add = 'X.X.X.X'  # 校园网IPstu_id_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[2]'  # 学号的XPathpasswd_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[3]'  # 密码的XPathlogin_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[1]'  # 登录按钮的XPath# 打开Edge浏览器driver = webdriver.Edge()# 设置隐式等待driver.implicitly_wait(10)# 打开校园网driver.get(f'http://{ip_add}/')# 输入账号和密码driver.find_element_by_xpath(stu_id_add).send_keys(stu_id)driver.find_element_by_xpath(passwd_add).send_keys(passwd)# 统一网页最大化,防止位置不对driver.maximize_window()# 点击登录按钮driver.find_element_by_xpath(login_add).click()# 关闭浏览器driver.close()driver.quit()if __name__ == "__main__":open_wlan()while True:if get_host_ip():sleep(5)  # 在这里等一会联网networking()break六、设置开机自启动
自启动方法一:系统自启动
设置python程序开机自启动
1、创建一个xxx.bat文件(将文件扩展名改为bat),右键编辑
2、在xxx.bat文件里面写入以下内容后保存:(可以按照如下流程自己去cmd中测试一下)
@echo off #关闭回显功能,也就是屏蔽执行过程,建议放置在批处理的首行。
d: #如果需要开机自启动的python程序在c盘,不需要这一行程序;如果需要自启动的python程序在d盘(或其他盘),需要先切换到d盘(或其他盘)
cd path #path为你所要开机自启动的python程序所在的文件夹
python xxx.py #xxx.py为path文件夹内需要自启动的python程序
例如:
@echo off D: cd D:\study\Python\project\AutomaticLogin\ python test1.py
3、将xxx.bat文件复制到windows的自启动文件夹内,即可开机自启动python程序windows自启动文件夹:
C:\ProgramData MicrosoftIWindows\Start Menu Programs\StartUp
或者win + r 输入shell:startup直接打开自启动文件夹
!注意!:最好在电脑的命令行界面将所需的模块库装一遍,否则可能会出现在PyCharm可以运行,在命令行运行却报错的情况。

可以在命令行窗口输入pip list,可以在windows上查看python安装了哪些库
自启动方法二:注册服务
1、打包成exe文件
a.概述
服务的优势就在于可以开机自启动
而在windows上,python不能直接将脚本注册为服务,需要将其先打包成exe,再将exe注册为服务打包exe
b.安装 PyInstalle
Python 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模块。
安装 PyInstaller 模块与安装其他 Python 模块一样,使用 pip 命令安装即可。在命令行输入如下命令:
pip install pyinstaller
这边强烈建议使用 pip 在线安装的方式来安装 PyInstaller 模块,不要使用离线包的方式来安装,因为 PyInstaller 模块还依赖其他模块,pip 在安装 PyInstaller 模块时会先安装它的依赖模块。
运行上面命令,应该看到如下输出结果:
Successfully installed pyinstaller-x.x.x
其中的 x.x.x 代表 PyInstaller 的版本。(installed后面可能会跟上一堆依赖,只要里面有pyinstaller就行)
在 PyInstaller 模块安装成功之后,在 Python 的安装目录下的Scripts目录下会增加一个 pyinstaller.exe 程序,接下来就可以使用该工具将 Python 程序生成 exe 程序了。
c.PyInstaller生成可执行程序
安装好pyinstaller包后,在cmd/pycharm的终端里运行如下代码打包(进入脚本所在目录):
pyinstaller -F test1.py --noconsole
-F表示不带依赖exe,大工程可能会启动较慢;改成-D则表示带依赖;小工程直接-F即可 test1.py是我的脚本文件名称,这里换成自己的 -noconsole表示不带黑框

注意:由于该程序没有图形用户界面,因此如果读者试图通过双击来运行该程序,则只能看到程序窗口一闪就消失了,是正常现象。
2、注册服务
1.下载最新版本
下载地址:NSSM - the Non-Sucking Service Manager
2.根据自己的平台,将32/64位nssm.exe文件解压至任意文件夹。
3.来到nssm所在目录,在文件路径处输入cmd,可打开命令窗口

4.在命令窗口内输入
 nssm install {服务名称} 
 
即注册服务的名称。 我这里是AutomaticLogin,是我注册后的服务的名称,这里随意,但不可出现中文,最好不要有空格、特殊符号

注册服务弹出如下NSSM界面。

5.Application标签设置:
Application Path: 选择系统安装的exe(cmd也可以)。 Startup directory: 选择exe项目的根目录。 Arguments: 输入启动参数
点击 Application Path右边的省略号按钮,选中前边生成的exe
Startup directory同理,选择exe项目的根目录(不过一般选好了Application Path,Startup directory自动生成)

在details下,输入服务名和对服务的描述,点击Install service


注册成功
打开任务管理器,服务

如果状态这里并不是启动状态,可以右键启动 如果注册之前就开着服务窗口,注册后可能看不到,右键刷新一下即可 启动类型为自动,即可开机自启动

相关文章:
 
实现校园网开机自启动部署
❤️博客主页: iknow181🔥系列专栏: Python、JavaSE、JavaWeb、CCNP🎉欢迎大家点赞👍收藏⭐评论✍ 目录 一.准备工作 1、IDE安装 2、安装Selenium 1.介绍 2.下载 3、安装pywifi 1.介绍 2.下载 4、下载浏览器驱…...
 
pycharm 创建vue并实现简易路由功能
使用pycharm创建vue项目时,选择vite来创建vue。为什么使用vite?因为vite是专门针对vue开发的打包框架,以前使用vue-cli来创建vue项目,就是使用的webpack来进行打包的,现在有了vite,就尽量使用vite来创建vue…...
2023年关于爬取Bilibili(B站)视频的一些最新资源和案例
2023年关于爬取Bilibili(B站)视频的一些最新资源和案例: Python爬取B站视频教程 :在Bilibili上发布了一个全面的Python教程系列,其中包括了专门关于爬取B站视频的部分。这个系列似乎涵盖了从基础到人工智能等Python主…...
 
HyperBDR云容灾v4.10.1发布,划重点:支持UCloud云平台自动化容灾+新增可灵活定义的备份策略
版本更新 HyperBDR云容灾v4.10.1版本来啦! 此次更新为大家带来了多个新功能,下面让我们来看看具体是哪些吧~ 01 策略管理新功能: 多时间段限速功能: 更加灵活的多个时间段限速选择,可以在创建策略时为不同的时间段设…...
第四十一篇,一次matlab与spdlog的合作
做了一次matlab解析spdlog日志文件并动态绘制行车轨迹的尝试,大获成功。 spdlog的存储,数据头有固定格式如下: 日志类型一个字符空格[日期时间]空格[日志内容tag]空格日志内容 有了固定的格式,做解析就好办了。 (日…...
【苍穹外卖】——第一天
第一天学习目标: 本系列只是对于学习苍穹外卖的一个学习总结和问题记录,学习的话还是照着黑马的视频学习 对内容有一个整体把握 搭建项目环境 对一些基础的名词理解 了解nginx反向代理和负载均衡 能使用Swagger测试后端接口 学习内容: pojo分…...
 
解决SecureFX的中文乱码问题
SecureFX的乱码截图 一般出现乱码问题,看起来会很烦,所以,我们要干掉它。 解决步骤: 1,在SecureFX中,选择“选项”-“全局选项”,打开对话框,不同的版本可能会显示略有不同&#x…...
 
【字符串匹配】【KMP算法】Leetcode 28 找出字符串中第一个匹配项的下标☆
【字符串匹配】【KMP算法】Leetcode 28 找出字符串中第一个匹配项的下标 (1)前缀和后缀(2)前缀表(最长相同的前缀和后缀的长度)(3)匹配过程示意(4)next数组的…...
 
《洛谷深入浅出进阶篇》模意义下的乘法逆元+洛谷P3811
什么是乘法逆元? 算数意义上的乘法逆元指的是倒数,即:a*(1/a)1 所以 1/a 是 a在算数意义下的乘法逆元,或者可以说二者互为逆元。 这有什么用呢? 除以a就等于乘上a的乘法逆元,乘以…...
 
clickhouse -- clickhouse解析复杂JSON数组
举例 - 查数据 select _id,doctorId,patientId,diagnosisList from patient_disease final where diagnosisList is not null limit 3;- 解析数组 SELECT _id,doctorId,patientId,visitParamExtractRaw(diagnosisList,diagnosisName) FROM patient_disease final where _id …...
算法leetcode|91. 解码方法(rust重拳出击)
文章目录 91. 解码方法:样例 1:样例 2:样例 3:提示: 分析:题解:rust:go:c:python:java: 91. 解码方法: 一条包含字母 A-Z…...
 
zabbix配置snmp trap--使用snmptrapd和Bash接收器(缺zabbix_trap_handler.sh文中自取)--图文教程
1.前言 我的zabbix的版本是5.0版本,5.0的官方文档没有使用bash接收器的示例,6.0的官方文档有使用bash接收器的示例,但是,下载文件的链接失效?! 这里讲解zabbix-server端配置和zabbix web端配置 2.zabbix-…...
 
vue: 线上项目element-ui的icon偶尔乱码问题
线上环境偶尔会复现, 具体: 一般使用不会出现这个问题,因为一般引入的是element-ui的css文件,问题出在于为了主题色变化啊,需要用到scss变量引入了scss文件。 import “~element-ui/packages/theme-chalk/src/index”…...
 
fpga rom 初始化文件的一些心得
目录 可能遇到的问题 问题 解决方案 rom的初始化 用途 文件类型 如何生成初始化文件 示例 Altera Xilinx 可能遇到的问题 问题 altera FPGA的rom找不到初始化文件,编译过程会提示类似的问题 Error(127001): Cant find Memory Initialization File or He…...
从零构建属于自己的GPT系列3:模型训练2(训练函数解读、模型训练函数解读、代码逐行解读)
🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:文本数据预处理 从零构建属于自己的GPT系列2:语…...
Python词频统计(数据整理)
请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。 输入格式: 输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。 输出格式: 在第一行中输出文本中所有不同单词的个数…...
基本面选股的方法
基本面选股是一种投资策略,主要关注公司的财务状况、盈利能力、行业地位等因素,以判断公司的价值并做出投资决策。以下是基本面选股的具体分析方法和重点: 财务状况分析: 利润表分析:关注公司的净利润、毛利率、营业…...
 
应用密码学期末复习(3)
目录 第三章 现代密码学应用案例 3.1安全电子邮件方案 3.1.1 PGP产生的背景 3.2 PGP提供了一个安全电子邮件解决方案 3.2.1 PGP加密流程 3.2.2 PGP解密流程 3.2.3 PGP整合了对称加密和公钥加密的方案 3.3 PGP数字签名和Hash函数 3.4 公钥分发与认证——去中心化模型 …...
 
PAD平板签约投屏-高端活动的选择
传统的现场纸质签约仪式除了缺乏仪式感之外还缺少互动性,如果要将签约的过程投放到大屏幕上更是需要额外的硬件设备成本。相比于传统的纸质签约仪式,平板现场电子签约的形式更加的新颖、更富有科技感、更具有仪式感。 平板签约投屏是应用于会议签字仪式的…...
 
分布式架构demo
1、外层创建pom 版本管理器 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.15</version><relativePath/> <!-- lookup parent from repository…...
 
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
 
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
 
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
 
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
 
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
 
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
 
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
 
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
