当前位置: 首页 > news >正文

【澜舟科技-注册/登录安全分析报告】

前言

由于网站注册入口容易被机器执行自动化程序攻击,存在如下风险:

  1. 暴力破解密码,造成用户信息泄露,不符合国家等级保护的要求。
  2. 短信盗刷带来的拒绝服务风险 ,造成用户无法登陆、注册,大量收到垃圾短信的用户投诉导致短信通道被关停。
  3. 带来经济损失,尤其是后付费客户,需要承担被盗刷造成的大额短信费 ,造成亏损无底洞。

在这里插入图片描述

所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析

一、 AI智能的发展给行为验证带来威胁

验证码本质上自带一层答案的语义,这原本是天然的区分人和自动程序的地方,但在今日却未必,由于AI智能及CHATGPT等大模型的发展,机器要识别也变得更加容易。
1、 目标识别框架
黑产破解者为了降低攻击成本、提高破解效率,通常会利用收集的大量验证码图片样本,打码标注、构建模型网络、训练模型、测试模型,从而得到一个可持续识别图片答案的识别。目前,黑产针对验证码图片的破解最常用的主要是分类模型和相似模型。
在这里插入图片描述

2、 批量下载存储验证图片,共需要大数万张图片。
在这里插入图片描述

3、 黑产训练出一个高准确度的识别模型后,后续破解验证码时,通过识别模型就能直接获取答案坐标。在这里插入图片描述

4、 借力大模型进行升级
俗话说:道高一尺,魔高一丈,在chatgpt大模型发展的今天,行为验证的方式无论怎么变花样,被破解只是时间而已,被伤害的反而是真实用户。

在这里插入图片描述

二、 澜舟科技PC端注册入口

简介:北京澜舟科技有限公司(简称澜舟科技)成立于 2021 年,是一家业界领先的认知智能公司,致力于以自然语言处理(NLP)技术为基础,为全球企业提供新一代认知智能平台,助力企业数字化转型升级。其主要产品是基于“孟子预训练模型”打造的一系列功能引擎(包括搜索、生成、翻译、对话等)和垂直场景应用。

在这里插入图片描述

在这里插入图片描述

三、 安全性分析报告:

采用腾讯的智能验证,包含点击和滑动验证,容易被模拟器绕过甚至逆向后暴力攻击,滑动拼图识别率在 95% 以上。
在这里插入图片描述

四、 测试方法:

前端界面分析,这是腾讯v2版本,特点是矩形缺口,滑块和其它图形混合在一起,需要做切割处理,智能版本为头几次直接过,无需滑动,我们采用模拟器的方式,关键点主要模拟器交互、距离识别和轨道算法3部分。
在这里插入图片描述

1. 模拟器交互部分


private final String INDEX_URL = "https://u.langboat.com/";@Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {RetEntity retEntity = new RetEntity();WebElement phoneElement;try {driver.get(INDEX_URL);// 输入手机号phoneElement = ChromeDriverManager.waitElement(driver, By.id("tel"), 500);phoneElement.sendKeys(phone);// 点击获取验证码WebElement sendElemet = driver.findElement(By.xpath("//button[contains(text(),'获取验证码')]"));sendElemet.click();// 计算移动距离Thread.sleep(2000);RetEntity ret = tencentClient.moveExec(driver);if (ret.getRet() == -1) {System.out.println("moveExec ret=" + ret);return null;}Thread.sleep(3000);WebElement gtElement = ChromeDriverManager.waitElement(driver, By.xpath("//button[contains(text(),')s')]"), 50);String msg = (gtElement != null) ? gtElement.getText() : null;retEntity.setMsg(msg);if (msg != null && msg.contains(")s")) {retEntity.setRet(0);}return retEntity;} catch (Throwable e) {System.out.println("phone=" + phone + ",e=" + e.toString());for (StackTraceElement ele : e.getStackTrace()) {System.out.println(ele.toString());}return null;} finally {driver.manage().deleteAllCookies();}}
/*** v2 版本* * @param driver* @return*/public RetEntity moveExec(WebDriver driver) {File bFile = null;File sFile = null;RetEntity retEntity = new RetEntity();retEntity.setRet(-1);try {// 获取到验证区域WebElement iframe = ChromeDriverManager.waitElement(driver, By.id("tcaptcha_iframe_dy"), 100);if (iframe == null) {System.out.println("moveExec() tcaptcha_iframe|timeout!!!");retEntity.setRet(-99);retEntity.setMsg("tcaptcha_iframe|timeout!!");return retEntity;}driver.switchTo().frame(iframe);String bgUrl = null;System.out.println("get bgUrl begin ........");for (int i = 0; i < 10; i++) {// 获取带阴影的背景图WebElement wegSlideBg = ChromeDriverManager.waitElement(driver, By.id("slideBg"), 300);String cssValue = (wegSlideBg != null) ? wegSlideBg.getCssValue("background-image") : null;bgUrl = (cssValue != null && cssValue.contains("\"")) ? cssValue.split("\"")[1] : null;System.out.println("   |-i=" + i + ",bgUrl=" + bgUrl);if (bgUrl != null && bgUrl.length() > 0) {break;} else {sleep(500);}}// 获取带阴影的背景图if (bgUrl == null) {retEntity.setMsg("bgUrl=" + bgUrl);return retEntity;}Long time = System.currentTimeMillis();// 获取小图 URL (替换img_index=1img_index=0)String slUrl = bgUrl.replaceAll("img_index=1", "img_index=0");bFile = new File(dataPath + time + "-b.png");sFile = new File(dataPath + time + "-s.png");Map<String, byte[]> retMap = getTwoImg(driver, bgUrl, slUrl, bFile, sFile);if (retMap != null) {byte[] bigBytes = retMap.get("big");byte[] smallBytes = retMap.get("small");String distanceStr = null, width = null;String ckSum = GenChecksumUtil.genChecksum(bigBytes);String[] outArray = openCv2.getOpenCvDistance(ckSum, bigBytes, smallBytes, "tencent_v2", 3);distanceStr = (outArray != null && outArray.length >= 2) ? outArray[1] : null;width = (outArray != null && outArray.length >= 2) ? outArray[0] : null;Double left = 27.0 * 672 / 340;// 起点距左边距离Double act = (Double.parseDouble(distanceStr) - left - Double.parseDouble(width)) * 340.0 / 672.0;Integer distance = act.intValue();System.out.println("moveExec()  distance(" + distanceStr + ")=" + distance);if (distance == null || distance <= 0) {return retEntity;}WebElement moveElemet = ChromeDriverManager.waitElement(driver, By.className("tc-slider-normal"), 500);sleep(500);// 滑动ActionMove.move(driver, moveElemet, distance);sleep(400);// 滑动结果String gtInfo = ChromeDriverManager.waitElement(driver, By.id("statusSuccess"), 100).getText();if (gtInfo == null || "".equals(gtInfo)) {sleep(200);gtInfo = ChromeDriverManager.waitElement(driver, By.id("statusError"), 100).getText();}System.out.println("moveExec() gtInfo=" + gtInfo);// driver.switchTo().frame(oldWin);if (gtInfo.contains("验证成功")) {retEntity.setRet(0);retEntity.setMsg("moveExec:" + gtInfo);} else if (gtInfo.contains("再试一次") || gtInfo.contains("恍惚了") || gtInfo.contains("半路丢了")) {retEntity.setRet(-1);retEntity.setMsg("失败");} else {retEntity.setMsg(gtInfo);}} else {logger.error("retMap=" + retMap);retEntity.setMsg("retMap=" + retMap);}// 切回主页面driver.switchTo().defaultContent();return retEntity;} catch (Exception e) {StringBuffer er = new StringBuffer("moveExec() " + e.toString() + "\n");for (StackTraceElement elment : e.getStackTrace())er.append(elment.toString() + "\n");logger.error(er.toString());System.out.println(er.toString());retEntity.setRet(-99);retEntity.setMsg(er.toString());return retEntity;} finally {if (retEntity.getRet() == 0) {System.out.println("moveExec() del file...");if (bFile != null)bFile.delete();if (sFile != null)sFile.delete();}}

2. 距离识别

/*** * @param ckSum* @param bigBytes* @param smallBytes* @param factory* @return { width, maxX }*/public String[] getOpenCvDistance(String ckSum, byte bigBytes[], byte smallBytes[], String factory, int border) {try {String basePath = ConstTable.codePath + factory + "/";File baseFile = new File(basePath);if (!baseFile.isDirectory()) {baseFile.mkdirs();}// 小图文件File smallFile = new File(basePath + ckSum + "_s.png");FileUtils.writeByteArrayToFile(smallFile, smallBytes);// 大图文件File bigFile = new File(basePath + ckSum + "_b.png");FileUtils.writeByteArrayToFile(bigFile, bigBytes);// 边框清理(去干扰)byte[] clearBoder = (border > 0) ? ImageIOHelper.clearBoder(smallBytes, border) : smallBytes;File tpFile = new File(basePath + ckSum + "_t.png");FileUtils.writeByteArrayToFile(tpFile, clearBoder);String resultFile = basePath + ckSum + "_o.png";return getWidth(tpFile.getAbsolutePath(), bigFile.getAbsolutePath(), resultFile);} catch (Throwable e) {logger.error("getMoveDistance() ckSum=" + ckSum + " " + e.toString());for (StackTraceElement elment : e.getStackTrace()) {logger.error(elment.toString());}return null;}}/*** Open Cv 图片模板匹配* * @param tpPath*            模板图片路径* @param bgPath*            目标图片路径* @return { width, maxX }*/private String[] getWidth(String tpPath, String bgPath, String resultFile) {try {Rect rectCrop = clearWhite(tpPath);Mat g_tem = Imgcodecs.imread(tpPath);Mat clearMat = g_tem.submat(rectCrop);Mat cvt = new Mat();Imgproc.cvtColor(clearMat, cvt, Imgproc.COLOR_RGB2GRAY);Mat edgesSlide = new Mat();Imgproc.Canny(cvt, edgesSlide, threshold1, threshold2);Mat cvtSlide = new Mat();Imgproc.cvtColor(edgesSlide, cvtSlide, Imgproc.COLOR_GRAY2RGB);Imgcodecs.imwrite(tpPath, cvtSlide);Mat g_b = Imgcodecs.imread(bgPath);Mat edgesBg = new Mat();Imgproc.Canny(g_b, edgesBg, threshold1, threshold2);Mat cvtBg = new Mat();Imgproc.cvtColor(edgesBg, cvtBg, Imgproc.COLOR_GRAY2RGB);int result_rows = cvtBg.rows() - cvtSlide.rows() + 1;int result_cols = cvtBg.cols() - cvtSlide.cols() + 1;Mat g_result = new Mat(result_rows, result_cols, CvType.CV_32FC1);Imgproc.matchTemplate(cvtBg, cvtSlide, g_result, Imgproc.TM_CCOEFF_NORMED); // 归一化平方差匹配法// 归一化相关匹配法MinMaxLocResult minMaxLoc = Core.minMaxLoc(g_result);Point maxLoc = minMaxLoc.maxLoc;Imgproc.rectangle(cvtBg, maxLoc, new Point(maxLoc.x + cvtSlide.cols(), maxLoc.y + cvtSlide.rows()), new Scalar(0, 0, 255), 1);Imgcodecs.imwrite(resultFile, cvtBg);String width = String.valueOf(cvtSlide.cols());String maxX = String.valueOf(maxLoc.x + cvtSlide.cols());System.out.println("OpenCv2.getWidth() width=" + width + ",maxX=" + maxX);return new String[] { width, maxX };} catch (Throwable e) {System.out.println("getWidth() " + e.toString());logger.error("getWidth() " + e.toString());for (StackTraceElement elment : e.getStackTrace()) {logger.error(elment.toString());}return null;}}

3. 轨道生成及移动算法

/*** 根据距离获取滑动轨迹* * @param distance需要移动的距离* @return*/public static List<Integer> getTrack(int distance) {List<Integer> track = new ArrayList<Integer>();// 移动轨迹List<Integer[]> list = getXyTrack(distance);for (Integer[] m : list) {track.add(m[0]);}return track;}/*** 双轴轨道生成算法,主要实现平滑加速和减速* * @param distance* @return*/public static List<Integer[]> getXyTrack(int distance) {List<Integer[]> track = new ArrayList<Integer[]>();// 移动轨迹try {int a = (int) (distance / 3.0) + random.nextInt(10);int h = 0, current = 0;// 已经移动的距离BigDecimal midRate = new BigDecimal(0.7 + (random.nextInt(10) / 100.00)).setScale(4, BigDecimal.ROUND_HALF_UP);BigDecimal mid = new BigDecimal(distance).multiply(midRate).setScale(0, BigDecimal.ROUND_HALF_UP);// 减速阈值BigDecimal move = null;// 每次循环移动的距离List<Integer[]> subList = new ArrayList<Integer[]>();// 移动轨迹boolean plus = true;Double t = 0.18, v = 0.00, v0;while (current <= distance) {h = random.nextInt(2);if (current > distance / 2) {h = h * -1;}v0 = v;v = v0 + a * t;move = new BigDecimal(v0 * t + 1 / 2 * a * t * t).setScale(4, BigDecimal.ROUND_HALF_UP);// 加速if (move.intValue() < 1)move = new BigDecimal(1L);if (plus) {track.add(new Integer[] { move.intValue(), h });} else {subList.add(0, new Integer[] { move.intValue(), h });}current += move.intValue();if (plus && current >= mid.intValue()) {plus = false;move = new BigDecimal(0L);v = 0.00;}}track.addAll(subList);int bk = current - distance;if (bk > 0) {for (int i = 0; i < bk; i++) {track.add(new Integer[] { -1, h });}}System.out.println("getMoveTrack(" + midRate + ") a=" + a + ",distance=" + distance + " -> mid=" + mid.intValue() + " size=" + track.size());return track;} catch (Exception e) {System.out.print(e.toString());return null;}}/*** 模拟人工移动* * @param driver* @param element页面滑块* @param distance需要移动距离* @throws InterruptedException*/public static void move(WebDriver driver, WebElement element, int distance) throws InterruptedException {List<Integer[]> track = getXyTrack(distance);if (track == null || track.size() < 1) {System.out.println("move() track=" + track);}int moveY, moveX;StringBuffer sb = new StringBuffer();try {Actions actions = new Actions(driver);actions.clickAndHold(element).perform();Thread.sleep(20);long begin, cost;Integer[] move;int sum = 0;for (int i = 0; i < track.size(); i++) {begin = System.currentTimeMillis();move = track.get(i);moveX = move[0];sum += moveX;moveY = move[1];if (moveX < 0) {if (sb.length() > 0) {sb.append(",");}sb.append(moveX);}actions.moveByOffset(moveX, moveY).perform();cost = System.currentTimeMillis() - begin;if (cost < 3) {Thread.sleep(3 - cost);}}if (sb.length() > 0) {System.out.println("-----backspace[" + sb.toString() + "]sum=" + sum + ",distance=" + distance);}Thread.sleep(180);actions.release(element).perform();Thread.sleep(500);} catch (Exception e) {StringBuffer er = new StringBuffer("move() " + e.toString() + "\n");for (StackTraceElement elment : e.getStackTrace())er.append(elment.toString() + "\n");logger.error(er.toString());System.out.println(er.toString());}}

4. OpenCv 轮廓匹配测试样例:

在这里插入图片描述

四丶结语

北京澜舟科技有限公司(简称澜舟科技)成立于 2021 年,是一家业界领先的认知智能公司,致力于以自然语言处理(NLP)技术为基础,为全球企业提供新一代认知智能平台,助力企业数字化转型升级。其主要产品是基于“孟子预训练模型”打造的一系列功能引擎(包括搜索、生成、翻译、对话等)和垂直场景应用。
作为全球领先AI智能高科技企业,拥有雄厚的技术研发实力, 采用的是通俗的滑动验证产品, 该产品稳定并且市场占有率很高, 在一定程度上提高了用户体验, 但安全性在机器学习的今天, 已经无法应对攻击了,并且正是由于该产品通俗, 所以在网上破解的文章和教学视频也是大量存在,并且经过验证滑动产品很容易被破解, 所以除了滑动验证方式, 花样百出的产品层出不穷,但本质就是牺牲用户体验来提高安全。

很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。
比如:“ 需求这么赶,当然是先实现功能啊 ”,“ 业务量很小啦,系统就这么点人用,不怕的 ” , “ 我们怎么会被盯上呢,不可能的 ”等等。

有一些理由虽然有道理,但是该来的总是会来的。前期欠下来的债,总是要还的。越早还,问题就越小,损失就越低。

所以大家在安全方面还是要重视。(血淋淋的栗子!)#安全短信#

戳这里→康康你手机号在过多少网站注册过!!!

谷歌图形验证码在AI 面前已经形同虚设,所以谷歌宣布退出验证码服务, 那么当所有的图形验证码都被破解时,大家又该如何做好防御呢?

>>相关阅读
《腾讯防水墙滑动拼图验证码》
《百度旋转图片验证码》
《网易易盾滑动拼图验证码》
《顶象区域面积点选验证码》
《顶象滑动拼图验证码》
《极验滑动拼图验证码》
《使用深度学习来破解 captcha 验证码》
《验证码终结者-基于CNN+BLSTM+CTC的训练部署套件》

相关文章:

【澜舟科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…...

【读书笔记-《网络是怎样连接的》- 7】Chapter3_2 路由器

本篇继续介绍路由器及其转发过程。 1 路由器内部结构 路由器内部结构图如图所示。 即主要包含左侧的包转发模块和右侧的端口模块。转发模块负责查找包的发送目的地&#xff0c;端口模块完成包的发送。通过安装不同的硬件&#xff0c;转发模块不仅可以支持以太网&#xff0c;也…...

Android Activity 基础接口知识和常见问题

Activity 知识点及问题点 接口onMultiWindowModeChangedonConfigurationChanged 常见问题Android解决点击桌面图标&#xff0c;就重新启动应用程序问题 接口 onMultiWindowModeChanged 定义 onMultiWindowModeChanged是Android中Activity类的一个回调方法。它会在活动&#xf…...

利用python 检测当前目录下的所有PDF 并转化为png 格式

以下是一个完整的 Python 脚本&#xff0c;用于检测当前目录下的所有 PDF 文件并将每一页转换为 PNG 格式&#xff1a; import os from pdf2image import convert_from_path# 设置输出图像的 DPI&#xff08;分辨率&#xff09; DPI 300# 获取当前目录 current_directory os…...

解决 Spring Boot 中 `Ambiguous mapping. Cannot map ‘xxxController‘ method` 错误

前言 在使用 Spring Boot 开发 Web 应用时&#xff0c;经常会遇到各种各样的错误。其中一种常见的错误是 Ambiguous mapping. Cannot map ‘testController‘ method。本文将详细介绍这个错误的原因及解决方法&#xff0c;帮助开发者快速定位并解决问题。 错误解释 这个错误…...

C++ 函数返回值优化

本文中部分内容来自下面的文章&#xff0c;还有一部分来自智谱清言 C 返回值优化_c 局部变量返回优化-CSDN博客 elision:省略 copy elision&#xff1a;拷贝省略 RVO (Return Value Optimization)&#xff1a;返回值优化 ------ 我最近也遇到了上面博文中说到的问题&…...

c++源码阅读__ThreadPool__正文阅读

一. 简介 本章我们开始阅读c git 高星开源项目ThreadPool, 这是一个纯c的线程池项目, 并且代码量极小, 非常适合新手阅读 git地址: progschj / ThreadPool 二. 前提知识 为了面对不同读者对c掌握情况不同的情况, 这里我会将基本上稍微值得一说的前提知识点, 全部专门写成一篇…...

关于ES的查询

查询结果那么多字段都是什么&#xff1f; 为什么会提到这个问题呢&#xff0c;因为默认ES查询的结果会有很多信息&#xff0c;我们可能并不希望要那么多数据&#xff0c;所以你需要了解这些字段都表示什么&#xff0c;并正确的返回和使用它们。 took– Elasticsearch 运行查询…...

数据结构初识

目录 1.初识 2.时间复杂度 常见时间复杂度举例&#xff1a; 3.空间复杂度 4.包装类&简单认识泛型 4.1装箱和拆箱 5.泛型 6.泛型的上界 7.泛型方法 8.List接口 1.初识 1.多画图 2.多思考 3.多写代码 4.多做题 牛客网-题库/在线编程/剑指offer 算法篇&#xff1a…...

保存数据到Oracle时报错ORA-17004: 列类型无效: 1111

1、问题描述&#xff1a; 关键信息&#xff1a;Mybatis&#xff1b;Oracle &#xff08;1&#xff09;保存信息到Oracle时报错&#xff1a; Caused by: org.apache.ibatis.type.TypeException: Error setting null for parameter #10 with JdbcType OTHER . Try setting a dif…...

Excel——宏教程(1)

Microsoft excel是一款功能非常强大的电子表格软件。它可以轻松地完成数据的各类数学运算&#xff0c;并用各种二维或三维图形形象地表示出来&#xff0c;从而大大简化了数据的处理工作。但若仅利用excel的常用功能来处理较复杂的数据&#xff0c;可能仍需进行大量的人工操作。…...

论文浅尝 | MindMap:知识图谱提示激发大型语言模型中的思维图(ACL2024)

笔记整理&#xff1a;和东顺&#xff0c;天津大学硕士&#xff0c;研究方向为软件缺陷分析 论文链接&#xff1a;https://aclanthology.org/2024.acl-long.558/ 发表会议&#xff1a;ACL 2024 1. 动机 虽然大语言模型&#xff08;LLMs&#xff09;已经在自然语言理解和生成任务…...

第6章:TDengine 标签索引和删除数据

TDengine 标签索引和删除数据 目标 掌握标签索引的创建、删除掌握超表、子表创建以及数据删除删除数据 删除数据是 TDengine 提供的根据指定时间段删除指定表或超级表中数据记录的功能,方便用户清理由于设备故障等原因产生的异常数据。 注意:删除数据并不会立即释放该表所…...

【微软:多模态基础模型】(5)多模态大模型:通过LLM训练

欢迎关注[【youcans的AGI学习笔记】](https://blog.csdn.net/youcans/category_12244543.html&#xff09;原创作品 【微软&#xff1a;多模态基础模型】&#xff08;1&#xff09;从专家到通用助手 【微软&#xff1a;多模态基础模型】&#xff08;2&#xff09;视觉理解 【微…...

海外带云仓多语言商城源码,多语言多商家云仓一键代发商城

新增海外仓&#xff0c;云仓国际供应链系统&#xff0c;商家可登陆云仓进行批量发货 商城修复了一些bug以及增加了订单数字提示&#xff0c;优化加载速度&#xff0c;二开了一些细微功能 基于 PHP Laravel 框架开发的一款 Web 商城系统。 1.前端多国语言自由切换&#xff0c;…...

android:taskAffinity 对Activity退出时跳转的影响

android:taskAffinity 对Activity跳转的影响 概述taskAffinity 的工作机制taskAffinity对 Activity 跳转的影响一个实际的开发问题总结参考 概述 在 Android 开发中&#xff0c;任务栈&#xff08;Task&#xff09;是一个核心概念。它决定了应用程序的 Activity 如何相互交互以…...

Apache Dolphinscheduler数据质量源码分析

Apache DolphinScheduler 是一个分布式、易扩展的可视化数据工作流任务调度系统&#xff0c;广泛应用于数据调度和处理领域。 在大规模数据工程项目中&#xff0c;数据质量的管理至关重要&#xff0c;而 DolphinScheduler 也提供了数据质量检查的计算能力。本文将对 Apache Do…...

solana链上智能合约开发案例一则

环境搭建 安装Solana CLI&#xff1a;Solana CLI是开发Solana应用的基础工具。你可以通过官方文档提供的安装步骤&#xff0c;在本地环境中安装适合你操作系统的Solana CLI版本。安装完成后&#xff0c;使用命令行工具进行配置&#xff0c;例如设置网络环境&#xff08;如开发网…...

使用 PyTorch 实现 ZFNet 进行 MNIST 图像分类

在本篇博客中&#xff0c;我们将通过两个主要部分来演示如何使用 PyTorch 实现 ZFNet&#xff0c;并在 MNIST 数据集上进行训练和测试。ZFNet&#xff08;ZFNet&#xff09;是基于卷积神经网络&#xff08;CNN&#xff09;的图像分类模型&#xff0c;广泛用于图像识别任务。 环…...

车轮上的科技:Spring Boot汽车新闻集散地

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理汽车资讯网站的相关信息成为必然。开发合适…...

IDEA2023 SpringBoot整合Web开发(二)

一、SpringBoot介绍 由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。SpringBoot提供了一种新的编程范式&#xff0c;可以更加快速便捷…...

国产三维CAD 2025新动向:推进MBD模式,联通企业设计-制造数据

本文为CAD芯智库原创整理&#xff0c;未经允许请勿复制、转载&#xff01; 上一篇文章阿芯分享了影响企业数字化转型的「MBD」是什么、对企业优化产品设计流程有何价值——这也是国产三维CAD软件中望3D 2024发布会上&#xff0c;胡其登先生&#xff08;中望软件产品规划与GTM中…...

ubuntu 之 安装mysql8

安装 # 如果 ubuntu 版本 > 20.04 则不用执行 wget 这步 wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.debsudo apt-get updatesudo apt-get install mysql-server mysql-client 安装过程中如果没有提示输入密码 sudo cat /etc/mysql/debian.cnf # 查…...

Flink Lookup Join(维表 Join)

Lookup Join 定义&#xff08;支持 Batch\Streaming&#xff09; Lookup Join 其实就是维表 Join&#xff0c;比如拿离线数仓来说&#xff0c;常常会有用户画像&#xff0c;设备画像等数据&#xff0c;而对应到实时数仓场景中&#xff0c;这种实时获取外部缓存的 Join 就叫做维…...

Elasticsearch retrievers 通常与 Elasticsearch 8.16.0 一起正式发布!

作者&#xff1a;来自 Elastic Panagiotis Bailis Elasticsearch 检索器经过了重大改进&#xff0c;现在可供所有人使用。了解其架构和用例。 在这篇博文中&#xff0c;我们将再次深入探讨检索器&#xff08;retrievers&#xff09;。我们已经在之前的博文中讨论过它们&#xf…...

【并发模式】Go 常见并发模式实现Runner、Pool、Work

通过并发编程在 Go 程序中实现的3种常见的并发模式。 参考&#xff1a;https://cloud.tencent.com/developer/article/1720733 1、Runner 定时任务 Runner 模式有代表性&#xff0c;能把&#xff08;任务队列&#xff0c;超时&#xff0c;系统中断信号&#xff09;等结合起来…...

【前端知识】Javascript前端框架Vue入门

前端框架VUE入门 概述基础语法介绍组件特性组件注册Props 属性声明事件组件 v-model(双向绑定)插槽Slots内容与出口 组件生命周期样式文件使用1. 直接在<style>标签中写CSS2. 引入外部CSS文件3. 使用CSS预处理器4. 在main.js中全局引入CSS文件5. 使用CSS Modules6. 使用P…...

Springboot3.3.5 启动流程之 Bean创建流程

在文章Springboot3.3.5 启动流程&#xff08;源码分析&#xff09;中我们只是粗略的介绍了bean 的装配(Bean的定义)流程和实例化流程分别开始于 finishBeanFactoryInitialization 和 preInstantiateSingletons. 其实,在Spring boot中&#xff0c;Bean 的装配是多阶段的&#xf…...

golang反射函数注册

package main import ( “fmt” “reflect” ) type Job interface { New([]interface{}) interface{} Run() (interface{}, error) } type DetEd struct { Name string Age int } // 为什么这样设计 // 这样就避免了 在创建新的实例的之后 结构体的方法中接受者为指针类型…...

【Spring】Bean

Spring 将管理对象称为 Bean。 Spring 可以看作是一个大型工厂&#xff0c;用于生产和管理 Spring 容器中的 Bean。如果要使用 Spring 生产和管理 Bean&#xff0c;那么就需要将 Bean 配置在 Spring 的配置文件中。Spring 框架支持 XML 和 Properties 两种格式的配置文件&#…...

北京微网站建设设计服务/推广网站模板

Java中有八大基本数据类型byte类型:byte类型&#xff0c;使用一个字节存放一个数据&#xff0c;一个字节占八位&#xff0c;所以它取值范围是:1000 0000 ~ 0111 1111(-128-127)为什么不是0000 0000 ~ 1111 1111呢&#xff1f;我们都知道1111 1111 是负数的最大值&#xff0c;因…...

阿里云医疗网站建设/网页设计教程

判断你的文件是否为合法的PE文件和应用类型 http://www.vckbase.com/document/viewdoc/?id1893 C与Java混合编程 http://www.vckbase.com/document/viewdoc/?id1889 工作之余就是写文章自如自乐! 高手们就不要拍砖了!...

做专业慢摇的网站/网页免费制作网站

前言 在前面一篇文章中 vsftpd 的调试环境的搭建, 我们搭建了一个 vsftpd 的一个调试环境 既然搭建了一个调试环境, 目的就是为了能够调试 vsftpd, 如果 不去调试, 那岂非毫无意义 这里 就拿相对比较简单的登录流程 来进行开刀 呵呵 虽然只是简单的登录流程, 但是 代码的…...

手机网站翻页底时自动链接/如何网络推广自己的产品

Ftp协议暴力破解 FTP服务检测 FTP服务 FTP是一种文件传输协议&#xff0c; FTP服务默认端口为21。利用FTP服务器可以在本地主机和远程主机间进行文件传输。当FTP没有配置好安全控制&#xff0c;如对登录的源地址及密码尝试次数做限制&#xff0c;那么就会存在暴力破解可能。…...

网站开发就业/上海seo优化

数加 数据集成&#xff1a;产品地址 数据集成提供复杂网络环境下的穿墙过壁能力&#xff0c;主要通过数据集成Agent的部署&#xff0c;打通任意网络环境之间的数据传输同步。具体见下文所述。 数据的来源端和目的端有一端为私网环境 针对数据的来源端和目的端有一端为私网环境…...

学做电商网站设计/视频互联网推广选择隐迅推

一、创建一个数组 var ArrName [new] Array(…elem)var ArrName Array.of(…elem)var ArrName […elem] …elem代表可变参数&#xff0c;可以写入多个元素并且这些元素没有类型要求&#xff0c;当使用第一种方法的时候&#xff0c;当无参数时创建一个空数组&#xff0c;当参…...