wordpress 4.5.3 ueditor/seo友情链接
文章目录
- 专栏导读
- 一、前言
- 二、ddddocr库使用说明
- 1. 介绍
- 2. 算法步骤
- 3. 安装
- 4. 参数说明
- 5. 纯数字验证码识别
- 6. 纯英文验证码识别
- 7. 英文数字验证码识别
- 8. 带干扰的验证码识别
- 三、验证码识别登录代码实战
- 1. 输入账号密码
- 2. 下载验证码
- 3. 识别验证码并登录
- 书籍推荐
专栏导读
🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html
- 优点:订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
- 专栏福利:简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
一、前言
兄弟们使用selenium自动登录网站的时候,是不是经常遇到数字验证码,使用传统的OCR库识别效果又不是很好,今天介绍一款效果非常棒的验证码识别模块——ddddocr。
二、ddddocr库使用说明
1. 介绍
ddddocr(带带弟弟ocr)是一个用于文字识别的开源库。它是基于深度学习技术的,具有高度的准确性和鲁棒性。ddddocr使用了深度神经网络来处理各种类型的文本,包括印刷体和手写体等。其双解码机制使其在处理复杂文本时表现出色。
这个库的特点之一是其模型结构的密集性(Dense),这意味着它能够更好地捕捉文本中的细节和特征,从而提高了识别的准确性。此外,它还采用了双解码机制(Dual Decode),这意味着它可以同时从多个角度对图像进行解码,进一步提高了识别的鲁棒性和准确性。
Github地址:https://github.com/sml2h3/ddddocr
2. 算法步骤
ddddocr这个库的算法主要包括以下几个步骤:
-
图像预处理:
- 图像预处理是任何OCR系统中的第一步。它旨在使图像更容易处理,并提高文本识别的准确性。预处理步骤可能包括灰度化、二值化、去噪声、图像增强等操作,以减少后续步骤中的噪声和干扰。
-
文本检测:
- 文本检测是指识别图像中文本的位置和边界框。这一步通常使用深度学习技术,如卷积神经网络 (CNN) 或循环神经网络 (RNN) 来实现。检测到的文本通常用矩形边界框表示。
-
文本识别:
- 文本识别是从检测到的文本区域中提取出实际的文本内容。这通常涉及到使用循环神经网络 (RNN)、注意力机制或转录网络等模型来识别文本。这些模型可以是基于字符的,也可以是基于单词或子词的。
-
后处理:
- 后处理步骤旨在提高识别准确性并改善结果的质量。这可能包括语言模型的应用、纠正错误、识别字体或手写风格等。
-
输出结果:
- 最终结果通常以文本形式呈现,或者以标记文本的边界框和对应的文本内容的形式提供。
ddddOCR库可能会结合这些步骤,利用深度学习模型和传统的计算机视觉技术来实现文本识别。在不同的应用场景下,可能会有一些额外的步骤或优化,比如针对特定的文档类型进行优化、处理不同语言的文本等。
3. 安装
硬性要求 Python >= 3.8,通过pip命令进行安装:
pip install ddddocr
4. 参数说明
我们这里使用的是ddddocr.DdddOcr()
类:
class DdddOcr(object):def __init__(self, ocr: bool = True, det: bool = False, old: bool = False, beta: bool = False,use_gpu: bool = False,device_id: int = 0, show_ad=True, import_onnx_path: str = "", charsets_path: str = "")
这个__init__
方法是一个Python类的构造函数,它定义了类的初始化过程,其中包含了一系列参数。让我来解释一下这些参数的含义:
-
ocr
: 这是一个布尔类型的参数,用于指定是否进行光学字符识别(OCR)。默认值为True,表示默认情况下会进行OCR。 -
det
: 这也是一个布尔类型的参数,用于指定是否进行文本检测(Text Detection)。默认值为False,表示默认情况下不会进行文本检测。 -
old
: 这是一个布尔类型的参数,用于指定是否使用旧版本的模型或方法。默认值为False,表示默认情况下不使用旧版本。 -
beta
: 这也是一个布尔类型的参数,用于指定是否使用测试版本(beta版本)的功能或方法。默认值为False,表示默认情况下不使用测试版本。 -
use_gpu
: 这是一个布尔类型的参数,用于指定是否使用GPU来进行计算。默认值为False,表示默认情况下不使用GPU,而使用CPU。 -
device_id
: 这是一个整数类型的参数,用于指定在使用GPU时要使用的GPU设备的ID。默认值为0,表示默认情况下使用ID为0的GPU设备。 -
show_ad
: 这是一个布尔类型的参数,用于指定是否显示广告。默认值为True,表示默认情况下会显示广告。 -
import_onnx_path
: 这是一个字符串类型的参数,用于指定导入ONNX模型的路径。默认值为空字符串,表示默认情况下不导入任何ONNX模型。 -
charsets_path
: 这是一个字符串类型的参数,用于指定字符集的路径。默认值为空字符串,表示默认情况下字符集的路径未指定。
这个类中有一个classification
方法,需要传递一个图片对象进入就可以识别了:
def classification(self, img, png_fix: bool = False):if self.det:raise TypeError("当前识别类型为目标检测")if not isinstance(img, (bytes, str, pathlib.PurePath, Image.Image)):raise TypeError("未知图片类型")if isinstance(img, bytes):image = Image.open(io.BytesIO(img))elif isinstance(img, Image.Image):image = img.copy()elif isinstance(img, str):image = base64_to_image(img)else:assert isinstance(img, pathlib.PurePath)image = Image.open(img)if not self.use_import_onnx:image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.ANTIALIAS).convert('L')else:if self.__resize[0] == -1:if self.__word:image = image.resize((self.__resize[1], self.__resize[1]), Image.ANTIALIAS)else:image = image.resize((int(image.size[0] * (self.__resize[1] / image.size[1])), self.__resize[1]),Image.ANTIALIAS)else:image = image.resize((self.__resize[0], self.__resize[1]), Image.ANTIALIAS)if self.__channel == 1:image = image.convert('L')else:if png_fix:image = png_rgba_black_preprocess(image)else:image = image.convert('RGB')image = np.array(image).astype(np.float32)image = np.expand_dims(image, axis=0) / 255.if not self.use_import_onnx:image = (image - 0.5) / 0.5else:if self.__channel == 1:image = (image - 0.456) / 0.224else:image = (image - np.array([0.485, 0.456, 0.406])) / np.array([0.229, 0.224, 0.225])image = image[0]image = image.transpose((2, 0, 1))ort_inputs = {'input1': np.array([image]).astype(np.float32)}ort_outs = self.__ort_session.run(None, ort_inputs)result = []
5. 纯数字验证码识别
测试图片:
测试代码:
import ddddocr
import timestart = time.time() # 开始时间# 1. 创建DdddOcr对象
ocr = ddddocr.DdddOcr(show_ad=False)# 2. 读取图片
with open('test.png', 'rb') as f:img = f.read()# 3. 识别图片内验证码并返回字符串
result = ocr.classification(img)
print("识别结果:",result)end = time.time()
print("耗时:%s 秒" % str(start-end))
运行结果:
识别结果: 0413
耗时:-0.12942123413085938 秒
6. 纯英文验证码识别
测试图片:
运行结果:
识别结果: bcsm
耗时:-0.11309981346130371 秒
7. 英文数字验证码识别
测试图片:
运行结果:
识别结果: a72c
耗时:-0.09667587280273438 秒
8. 带干扰的验证码识别
测试图片:
运行结果:
识别结果: i27kYk
耗时:-0.09169244766235352 秒
可以看到ddddocr库识别验证码还是特别给力的!!!
三、验证码识别登录代码实战
上一期我们讲了如何使用selenium输入账号信息登录网站,还不会的可以去复习一下:https://blog.csdn.net/yuan2019035055/article/details/136284263
测试网站:https://captcha7.scrape.center/
1. 输入账号密码
运行下面代码将会输入账号密码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time# 1. 创建链接
# 创建ChromeOptions对象,用于配置Chrome浏览器的选项
chrome_options = webdriver.ChromeOptions()
# 添加启动参数,'--disable-gpu'参数用于禁用GPU加速,适用于部分平台上的兼容性问题
chrome_options.add_argument('--disable-gpu')# 2. 添加请求头伪装浏览器
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36')
driver = webdriver.Chrome(chrome_options=chrome_options)# 3. 执行 `stealth.min.js` 文件进行隐藏浏览器指纹
with open('stealth.min.js') as f:js = f.read()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": js
})# 4. 最大化浏览器窗口
driver.maximize_window()# 5. 发送请求,打开网页
driver.get('https://captcha7.scrape.center/')
time.sleep(1)# 6. 输入账号密码
username_input = driver.find_element(by=By.XPATH, value="//div[@class='el-tooltip username item el-input']/input") # 定位账号框
username_input.send_keys("your_username") # 输入账号信息(这里自行替换)password_input = driver.find_element(by=By.XPATH, value="//div[@class='el-tooltip password item el-input']/input") # 定位密码框
password_input .send_keys("your_username") # 输入密码信息(这里自行替换)time.sleep(100)
运行结果:
2. 下载验证码
1、先找到验证码图片的ID:
ID为:
captcha
2、定位验证码:
element = driver.find_element(By.ID, 'captcha') # 定位验证码
3、使用screenshot('test.png')
方法保存截图在本地:
element.screenshot('test.png') # 保存截图
完整代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time# 1. 创建链接
# 创建ChromeOptions对象,用于配置Chrome浏览器的选项
chrome_options = webdriver.ChromeOptions()
# 添加启动参数,'--disable-gpu'参数用于禁用GPU加速,适用于部分平台上的兼容性问题
chrome_options.add_argument('--disable-gpu')# 2. 添加请求头伪装浏览器
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36')
driver = webdriver.Chrome(chrome_options=chrome_options)# 3. 执行 `stealth.min.js` 文件进行隐藏浏览器指纹
with open('stealth.min.js') as f:js = f.read()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": js
})# 4. 最大化浏览器窗口
driver.maximize_window()# 5. 发送请求,打开网页
driver.get('https://captcha7.scrape.center/')
time.sleep(1)# 6. 输入账号密码
username_input = driver.find_element(by=By.XPATH, value="//div[@class='el-tooltip username item el-input']/input") # 定位账号框
username_input.send_keys("your_username") # 输入账号信息(这里自行替换)password_input = driver.find_element(by=By.XPATH, value="//div[@class='el-tooltip password item el-input']/input") # 定位密码框
password_input .send_keys("your_username") # 输入密码信息(这里自行替换)# 7. 下载验证码
element = driver.find_element(By.ID, 'captcha') # 定位验证码
element.screenshot('test.png') # 保存截图
运行结束就会在当前路径下保存验证码图片:
注意:当网站的验证码图片没法定位下载的时候,可以使用Python定位屏幕指定位置截图的模块,如:pyautogui
等等,进行截图下载验证码图片
3. 识别验证码并登录
接下来需要识别验证码内容,定位验证码文本框,输入验证码,点击登录,完整代码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import ddddocr# 1. 创建链接
# 创建ChromeOptions对象,用于配置Chrome浏览器的选项
chrome_options = webdriver.ChromeOptions()
# 添加启动参数,'--disable-gpu'参数用于禁用GPU加速,适用于部分平台上的兼容性问题
chrome_options.add_argument('--disable-gpu')# 2. 添加请求头伪装浏览器
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36')
driver = webdriver.Chrome(chrome_options=chrome_options)# 3. 执行 `stealth.min.js` 文件进行隐藏浏览器指纹
with open('stealth.min.js') as f:js = f.read()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": js
})# 4. 最大化浏览器窗口
driver.maximize_window()# 5. 发送请求,打开网页
driver.get('https://captcha7.scrape.center/')
time.sleep(1)# 6. 输入账号密码
username_input = driver.find_element(by=By.XPATH, value="//div[@class='el-tooltip username item el-input']/input") # 定位账号框
username_input.send_keys("your_username") # 输入账号信息(这里自行替换)password_input = driver.find_element(by=By.XPATH, value="//div[@class='el-tooltip password item el-input']/input") # 定位密码框
password_input .send_keys("your_username") # 输入密码信息(这里自行替换)# 7. 下载验证码
element = driver.find_element(By.ID, 'captcha') # 定位验证码
element.screenshot('test.png') # 保存截图# 8. 识别验证码
# 创建DdddOcr对象
ocr = ddddocr.DdddOcr(show_ad=False)
# 读取图片
with open('test.png', 'rb') as f:img = f.read()
# 识别图片内验证码并返回字符串
result = ocr.classification(img)
print("识别结果:",result)# 9. 输入验证码
yzm = driver.find_element(by=By.XPATH, value="//div[@class='captcha el-input']/input") # 定位账号框
yzm.clear() # 清空默认文本
yzm.send_keys(result)# 10. 点击登录按钮元素
login_button = driver.find_element(by=By.XPATH, value="//button[@class='el-button login el-button--primary']")
# 点击登录按钮
login_button.click()time.sleep(100)
运行结果:
书籍推荐
《Python机器学习 》
《Python机器学习》首先介绍Python机器学习的一些基本库,包括NumPy、Pandas和matplotlib。一旦牢固地掌握了基础知识,即可开始基于Python和Scikit-learn库进行机器学习,深入了解各种机器学习算法(如回归、聚类和分类)的底层工作原理。本书专门用一章的篇幅讲解如何使用Azure Machine Learning Studio进行机器学习;利用该平台,开发人员不必编写代码即可开始构建机器学习模型。本书最后讨论如何部署供客户端应用程序使用的已构建模型。
《Python机器学习》面向机器学习新手,主要内容如下:
● Python机器学习的一些基本库,包括NumPy、Pandas和matplotlib库
● 常见的机器学习算法,包括回归、聚类、分类和异常检测
● 使用Python和Scikit-learn库进行机器学习
● 将机器学习模型部署为Web服务
● 使用Microsoft Azure Machine Learning Studio进行机器学习
● 演习机器学习模型构建方案的实例
京东:https://item.jd.com/12672565.html
相关文章:

100天精通Python(实用脚本篇)——第118天:基于selenium和ddddocr库实现反反爬策略之验证码识别
文章目录 专栏导读一、前言二、ddddocr库使用说明1. 介绍2. 算法步骤3. 安装4. 参数说明5. 纯数字验证码识别6. 纯英文验证码识别7. 英文数字验证码识别8. 带干扰的验证码识别 三、验证码识别登录代码实战1. 输入账号密码2. 下载验证码3. 识别验证码并登录 书籍推荐 专栏导读 …...

51单片机与ARM单片机的区别
51的MCU与ARM的MCU的区别 51单片机与ARM单片机区别主要体现在以下几个方面: 指令集架构(ISA): 51单片机:基于Intel 8051架构,采用的是CISC(复杂指令集计算机)设计,其指令…...

Android 10.0 mtk平台系统添加公共so库的配置方法
1.前言 在10.0的系统定制化开发中,由于 Android对应用应用的系统库限制越来越严格,上层应用包括(apk、jar包)不能直接引用系统的一些so库了。如果需要使用,只能使用,系统申明的公共库。 如果使用非系统申明的公共库,apk运行后调用该so库时,app会直接挂掉,或者系统开发…...

simulink平面五杆机构运动学仿真
1、内容简介 略 68-可以交流、咨询、答疑 2、内容说明 simulink平面五杆机构运动学仿真 [ 摘 要 ] 以 MATLAB 程序设计语言为平台 , 以平面可调五杆机构为主要研究对象 , 给定机构的尺寸参数 , 列出所 要分析机构的闭环矢量方程 , 使用 MATLAB 软件中 SIMULINK 仿真工…...

【Docker】APISIX Ingress Controller部署
APISIX Ingress Controller环境标准软件基于Bitnami apisix-ingress-controller:构建。当前版本为1.8.0 你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取 配置文件地址: https://git…...

常见的十大网络安全攻击类型
常见的十大网络安全攻击类型 网络攻击是一种针对我们日常使用的计算机或信息系统的行为,其目的是篡改、破坏我们的数据,甚至直接窃取,或者利用我们的网络进行不法行为。你可能已经注意到,随着我们生活中越来越多的业务进行数字化&…...

接口幂等性问题和常见解决方案
接口幂等性问题和常见解决方案 1.什么是接口幂等性问题1.1 会产生接口幂等性的问题1.2 解决思路 2.接口幂等性的解决方案2.1 唯一索引解决方案2.2 乐观锁解决方案2.3 分布式锁解决方案2.4 Token解决方案(最优方案) 3 Token解决方案落地3.1 token获取、token校验3.2 自定义注解,…...

网站首页添加JS弹屏公告窗口教程
很多小白站长会遇到想给自己的网站添加一个弹屏公告,用于做活动说明、演示站提示等作用与目的。 下面直接上代码:(直接复制到网页头部、底部php、HTML文件中) <script src"https://www.mohuda.com/site/js/sweetalert.m…...

【Rockchip 安10.1 默认给第三方apk默认开启所有权限】
Rockchip 安10.1 默认给第三方apk默认开启所有权限 问题描述解决方法 郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip 3229 OS:Android 10.1 Kernel: 4.19 问题描述 有些第三方或者主界面&…...

python-redis缓存装饰器
目录 redis_decorator安装查看源代码使用 redis_decorators安装查看源代码\_\_init\_\_.pycacheable.py 各种可缓存的类型cache_element.py 缓存的元素caching.py 缓存主要逻辑 使用 总结全部代码参考 redis_decorator 安装 pip install redis_decorator查看源代码 from io …...

每个私域运营者都必须掌握的 5 大关键流量运营核心打法!
很多人觉得私域运营比较简单,只是运营的事情,但事实并非如此,私域运营体系非常大,包含了公私域联动、品牌运营、品类战略,它是一个自上而下,由内到外的系统化工程。 很多人天天在想着如何引流拓客…...

蓝桥杯--平均
在编程竞赛,尤其是参与蓝桥杯的过程中,遇到各种问题需求是家常便饭。最近,我遇到了一个非常有趣且颇具挑战性的算法问题。问题描述如下:对于一个长度为n的数组(n是10的倍数),数组中的每个元素均…...

未来已来:科技驱动的教育变革
我们的基础教育数百年来一成不变。学生们齐聚在一个物理空间,听老师现场授课。每节课时长和节奏几乎一致,严格按照课表进行。老师就像“讲台上的圣人”。这种模式千篇一律,并不适用于所有人。学生遇到不懂的问题,只能自己摸索或者…...

【蓝桥杯每日一题】填充颜色超详细解释!!!
为了让蓝桥杯不变成蓝桥悲,我决定在舒适的周日再来一道题。 例: 输入: 6 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 输出: 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 2 2 1 1 1 2 2 2 1 1 2 2 2 2 1 1…...

VSCODE的常用插件
1、中文设置 (1)搜索 chinese Chinese (Simplified) Language Pack for Visual Studio Code C/C Extension Pack (2)配置 通过使用“Configure Display Language”命令显式设置 VS Code 显示语言,可以替代默认 UI…...

Oracle常用DBA相关语句
Oracle常用DBA相关语句 1 表空间1.1 创建表空间1.2 删除表空间1.3 收缩表空间1.4 新增表空间文件1.5 查看表空间使用情况1.6 查看表所占用的空间大小 2 表分区2.1 查询表分区的创建情况2.2 查询表时指定分区 3 用户3.1 创建用户3.2 给用户赋权限3.3 删除用户 4 导入导出4.1 导入…...

JavaScript 入门指南(一)简介及基础语法
JavaScript 简介 JavaScript,简称 js,是一种基于对象(object-based)和事件驱动(Event Driven)的简单的并具有安全性能的脚本语言。 JavaScript 特性 JavaScript 是解释性语言,而不是编译性语言…...

UbuntuServer22.04配置静态IP地址
查看网络配置文件 使用命令, 查看网络配置文件 ls -l /etc/netplan/输出如下(文件名可能不同, 以实际查询为准) -rw------- 1 root root 191 Mar 17 03:30 00-installer-config.yaml编辑文件即可修改网络配置 sudo vim /etc/netplan/00-installer-config.yaml配…...

vue3 打印局部网页、网页下载为图片、下载为pdf-自动分页,几行代码搞定
经常有一些需求,要将网页保存为一张图片,感觉异常困难,这里发现一个简单的办法。 这么简单,直接一句哇塞,老板:马上完成任务。 先安装几个依赖 npm i howuse html2canvas jspdf 下载图片代码 <button …...

力扣hot100:34. 在排序数组中查找元素的第一个和最后一个位置(二分查找的理解)
我们知道使用二分查找能找到值所在的位置。假如我们在找到值后仍然不断的更新指针会发生什么?我们可以利用这一点来找到最左边的以及最右边的值。 如果当nums[mid]target时,使得 rightmid-1,那么最终会使得target在right的右边。 如果当nums[…...

几何相互作用GNN预测3D-PLA
预测PLA是药物发现中的核心问题。最近的进展显示了将ML应用于PLA预测的巨大潜力。然而,它们大多忽略了复合物的3D结构和蛋白质与配体之间的物理相互作用,而这对于理解结合机制至关重要。作者提出了一种结合3D结构和物理相互作用的几何相互作用图神经网络GIGN,用于预测蛋白质…...

2024最新版使用PyCharm搭建Anaconda
2024最新版使用PyCharm搭建Anaconda 因为pycharm自带的包不全,或者下载的时候比较慢,所以我们直接用anaconda的包,毕竟我们以后还会学到很多的包,不多说,直接开干! 一、下载Pycharm、Anacoda pycharm中文网…...

前台于后台项目
一:技术栈 前台:vue3element plus 后台:reactant desgin 二:项目中的问题: 多人协同开发导致样式冲突 ui框架中组件的使用 ui框架中组件样式的修改 精度缺失问题 框架的使用 三:解决方案: …...

Magical Combat VFX
这个包包含30个可供游戏使用的VFX,有各种口味,为您的游戏增添趣味! 所有VFX都经过了很好的优化,可以在所有平台上使用。 这个包特别有一堆闪电魔法,有两种主要的变体,一种是深色的,另一种是浅色的。但它也提供了一系列其他视觉效果,如神圣咒语、音乐主题等等! 我们提供…...

hadoop伪分布式环境搭建详解
(操作系统是centos7) 1.更改主机名,设置与ip 的映射关系 hostname //查看主机名 vim /etc/hostname //将里面的主机名更改为master vim /etc/hosts //将127.0.0.1后面的主机名更改为master,在后面加入一行IP地址与主机名之间的…...

day12-SpringBootWeb 登录认证
一、登录功能 Slf4j RestController public class LoginController {Autowiredprivate EmpService empService;PostMapping("/login")public Result login(RequestBody Emp emp){log.info("员工登录: {}", emp);Emp e empService.login(emp);//登录失败, …...

内外网数据单向导入导出 如何提升效率确保安全性?
金融、证券、税务、海关、军工、国央企、生物医药等涉密行业,为了保护内部的核心数据,都会将网络进行物理隔离,网络物理隔离主要是采用隔离硬件设备,在人工或者软件的控制下,进行内外网的切换和数据交换。 传统的内外网…...

Spring核心方法:Refresh全解(WebMVC如何装配、关联)
Spring核心方法:Refresh全解(WebMVC如何装配、关联) 这里是一个表格,列出了Spring容器刷新过程中执行的方法以及它们的作用: 方法名称描述prepareRefresh()初始化一些属性和状态,例如启动时间戳、活动标志、环境变量等。obtainF…...

TCP:三次握手四次挥手及相关问题:
连接—三次握手: 流程图: 过程详解: 客户端(connect)连接服务器(listen) Client将标志位SYN置为1,随机产生一个值seqx, 并将该数据包发送给Server, Client进入SYN_ SENT状态,等待Server确认。Server收到数据包后由标…...

链式二叉树--前序中序后序遍历,高度,节点个数问题
目录 前言: 一:链式二叉树的结构定义 二:链式二叉树的遍历--->前序,中序,后序 1.前序 递归展开图分析 2.中序 递归展开图分析 3.后序 三:二叉树结点的求解 1.二叉树总结点 递归展开分析 2…...