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

刷刷刷刷刷sql题

 NSSCTF

【SWPUCTF 2021 新生赛】easy_sql

这题虽然之前做过,但为了学习sql,整理一下就再写一次

打开以后是杰哥的界面

注意到html网页标题的名称是  “参数是wllm”

那就传参数值试一试

首先判断注入类型数字型字符型

传1

传2 没有回显

同样的,后面的3456都没有回显

光传abc也没有回显

所以应该是数字型注入

然后判断闭合方式

接下来传1'   (单引号)

出现报错

然后传1"   (双引号)

页面又有回显  

回到报错的 1'页面,分析报错语句

注意看这个位置

这里要记住的是:无论是单引号还是双引号在sql语句中都是成对出现的,包括 ( ) { } 【】各种括号 。

所以上面的报错句应该注意到最后的一个引号,要成对则前面必有一个单引号与它成一对。

也就是说,在这个报错语句中,一对单引号 ' ' 包裹着刚才我们注入的内容:' 1' '

所以这一堆引号就该这么拆:

'   '  1'  ' LIMIT 0,1  '

所以包裹着我们注入的 1' 的就是单引号  ' ' 。也就是说明这题的闭合方式是单引号。

既然如此那加个注释: --+   

目的是把单引号注释掉

发现页面没有报错了,有了回显,这就说明闭合方式判断正确

这里还有一个验证是否存在sql漏洞的方法:

当输入1=1时(条件为真),页面正常显示或有回显

 

当输入1=2时(条件为假),页面未正常显示

 这就说明我们输入的内容数据库是能够执行的,即存在sql注入漏洞

那么接下来就是一系列的爆数据库,直到爆出需要的信息(flag)

正规的讲叫先判断列数

语句是order by

比如现在一列列爆

第一列,有

 第二列有

第三列也有

但是到了第三列就会显示它不认识了

包括后面的第5列也如此

也就是说,这个数据库里的表总的只有三列

既然查出了总列数,接下来就需要联合查询所有列数下的数据,语句 union select

这里要注意:需要把传入参数的值1改为-1

然后开始联合查询

可以看到用户名位于第2列的位置,密码位于第3列的位置 (回显位为2、3位)

接下来可以看看这两列的数据,一列列来,第2列:

有了 ,可以看到是test_db

第3列:

都是test_db ,这当然的,两个都在一个数据库(test_db)里面

爆出来的这个是数据库名

接下来查表名(table_name)

然后出现这么个东东

英语也不太好,翻译一下

ouou  我知道了,我只改了第2列数据库名的位置,忘了后面还有个第3列了

大意了haha

加入第3列

提示返回的信息超过一行

一个解决办法就是使用group_concat把table_name变为一行即可      group_concat(table_name)

得到有两个表的表名

接下来查列名(column_name ):

对应的把刚刚的表名table_name改为column_name(列名);

tables改为columns,最后加上刚查到的表名users

执行

select group_concat(column_name) from information_schema.columns where table_schema='test_db' and table_name='users'

得到列名为password

都查出来了,select后面的就全扔掉,看看列名为password的数据列里面有什么,有没有想要的数据(flag)但这里好像出了点问题,爆出来又是yyy(不对,没问题,我查的就是password,而password为yyy刚开始就告诉我了),所以问题在于没有爆出可用的列名

回去找了一下,应该是上一步爆列名的问题,命令

select group_concat(column_name) from information_schema.columns where table_schema='test_db' and table_name='users'

应该改写为

select group_concat(column_name) from information_schema.columns where table_schema='test_db'

即删去了后面的and tablename='users'

至于为什么要这么改,后面也想清楚了:

如果查列名的语句含有 and table_name='users'   这样就代表我们是查询名为users的表下的所有列名;

而如果删去 and table_name='users'  仅前面的语句就不指定表名而是查询所有表下的所有列名,这样才能把flag列名爆出来  (也就是说其实flag是存在于test_tb表下的,而并不在users表下,如果冒然的将查询列规定为users表下面,只会画蛇添足,还找不到flag)

弄清楚以后重新爆列名,不用多此一举限制查询的范围(删去 and table_name='users')

发现这次列名就全了,可以看到flag列了。

那么接下来直接爆flag

既然刚刚无意中发现flag不在users表下而是在test_tb表下,那就直接爆test_tb表的flag列即可

【SWPUCTF 2022 新生赛】ez_sql

打开环境后的页面

题目名sql,参数提示是nss,试着传个1

什么是相对安全的方式

返回题目看提示POST注入,这样一来就知道是用Hackbar了

先把刚get传参的的参数删,然后F12打开Hackbar进行POST传参1

哦豁直接出flag

但是发现flag不对

试试提交上面那个

也不对

换个思路,传abc无回显

说明应该是数字型

接下来判断闭合方式,单引号' 报错

进行语句分析得知闭合方式为单引号'

接下来判断是否存在sql漏洞  传参nss=-1' and 1=1 --+

翻译一下

说明应该是有字符被过滤了

搞了半天竟然是空格和or被过滤了

(这个or不仅仅包括普通的or,还有order by中的or,这个你敢信???我也是惊呆了)

然后把空格替换一下(用/**/替换)

接下来判断列数

发现又有回显了

4列不认识,说明只有三列

联合查询

但是这里union也被过滤,采用双写绕过

没有我们要的列数,那就切换页数

这里用limit1,1

看到NSS_db

再报表

,,,,这题是做不下去一点,不是看博客就算爆破也爆不出来information_schema被过滤

还是双写

 

 【SWPUCTF 2021 新生赛】sql

还是杰哥

看看翻译

Waf是防火墙嘛,所以应该没有太重要,直接按上一题的思路

同样参数还是wllm

传参数字1有回显

传参字符abc没回显

说明是数字型注入

接下来判断闭合方式,单引号:'

报错

双引号:"

页面正常

和上面那题的剖析来看是一样的单引号闭合方式

接下来把单引号注释掉,但是发现查询的时候出现js弹窗警告

说明注释符 --+ 被过滤了,那就想替代方法来替换

上查了一下:

但是

可以看到这里的所有方法都被过滤了。。

后面想了想,很有可能是过滤了空格,空格的替换方法:

后面又测试了很多次才发现等号也被过滤了

那就再找等号的替换方法

选择了like(小写也可以)  (但是我奇怪的是为什么在寻找闭合方式的时候用=没有报错)

然后终于绕过这两种过滤把单引号注释掉了 (页面正常显示,未报错)

接下来查列数

但是为什么没有回显

这里就感觉被过滤的字符没找准,这样太麻烦了些

后来突然想到那天在博客上问师兄的关于黑盒测试,有没有快速准确的方法,师兄给了提示:

关键字fuzz模糊测试,然后上网学习了相关用法

大概就是利用burpsuitInruder模块

把包发到Intruder模块之后先clear一下

然后选择要测试的参数位置(如;username=$test$)

用$符号标记注入点(支持多个位置同时测试)

我这里对三个点进行测试

然后在Attack type中选择策略(Sniper:逐个位置顺序测试(最常用))

其他:

Battering ram:所有位置同时使用相同payload

Pitchfork:不同位置使用不同payload列表

Cluster bomb:多payload组合测试

然后选择positions Add 在Payloads标签配置测试字典:

比如现在是SQLi/SQL注入

还有XSS/跨站脚本

OS Command/命令注入

还需要自定义关键字列表

比如

'
"
SELECT
UNION
<script>
/etc/passwd
${jndi:ldap://
...(根据测试的目标补充)

还有高级设置

如添加Payload处理规则

URL编码

HTML实体编码

大小写变异(如SeLeCt)

添加注释符(如/**/)

接下来实战直接传参1

然后抓包进行字符爆破

奇怪的是明明注释符--+上传时报错,bp却显示没有过滤

同样,空格也没显示过滤

我也不知道怎么个事儿

只能看看别人的博客说空格、等号被过滤了

然后用/**/代替空格,like代替=  (这里的等号被过滤指的是传入参数的等号,如1=1,并不是传参时的wllm=的等号)

接下来判断列数

1、2、3都有回显,到4报错 (%23是替换#)

说明只有3列

联合查询判断回显位,可以看到回显位是2、3位(别忘了把1改为-1)

这里说一下为什么要把1改为-1

我们知道,当参数等于1时是有回显的,而参数的值通常为正整数,后端代码一般不会限制参数的负数值,但数据库里是没有负数值的信息的,所以这个负数值就可以作为一个“跳板”,把参数值改为-1后因为-1值的信息不会回显,然后语句中-1后面查询的信息结果就会回显而不会被1参数值的回显信息覆盖。

 接下来查数据库名

可以看到数据库名为test_db

接下来查数据表名

这个有点长:?wllm=-1'/**/union/**/select/**/1,2,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/'test_db'%23

接下来爆字段名

(LTLT_flag)?wllm=-1'/**/union/**/select/**/1,2,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/'LTLT_flag'%23

接下来很明显就爆flag字段即可

?wllm=-1'/**/union/**/select/**/1,2,group_concat(flag)/**/from/**/LTLT_flag%23

但是发现只有一部分(20个字符),说明一次只能输出20个字符

那就20个20个的爆吧

去查了一下发现用到mid函数

?wllm=-1'/**/union/**/select/**/1,2,mid(group_concat(flag),20,20)/**/from/**/LTLT_flag%23

表示输出flag字段中的第20个字符开始的后20个字符 ,爆出中间段的flag

然后用

?wllm=-1'/**/union/**/select/**/1,2,mid(group_concat(flag),40,20)/**/from/**/LTLT_flag%23  

爆出最后的flag,表示输出flag字段中第40个字符开始的后20个字符

所以搜罗一下:

第一段: NSSCTF{50855895-d906

第二段:6-4039-955c-cd62e2e6

第三段:a8a7}

最后拼接一下就好了(需要注意爆出的中间段的flag第一个字母和开头段的最后一个是重复的,需要删去一个,我也提交了好几次不正确才发现这个问题)

然后提交

 BUUCTF

【SUCTF 2019】EasySQL

打开环境是一个类似于登录界面

提示给flag,正确会告诉我

先提交个1看看,发现有回显

看不懂,查了一下

 这说明后端代码使用了某些函数来输出变量的类型或内容,注入的值1被解释为布尔值TRUE,即SQL语句为真

然后试试看万能密码 ' or 1=1 #

发现报错nonono

说明有字符被过滤了

接下来看好了,因为这么多字符报错也不知道是谁被过滤,一个个测试太浪费时间,所以用抓包进行黑名单字符爆破

关闭代理,注入1提交后抓取数据包

 

右键send to Intruder

进入Intruder利用关键字字典对query进行爆破

先删除query的值1,然后点击 Auto$

可以看到右侧payloads栏可以设置关键字字典

这里如果本机存在现成的爆破字典的话可以直接load...在本机选择字典

但由于我没有找到免费且好用的字典,所以打算手动添加测试字典,比如常用的sql语句中会涉及字符select、sleep、union、or以及xor、if等,先尝试测试一下

点击Enter a new item栏手动一个个添加

 输入

然后点击Add添加

一个个加进去

添加完毕点击Start attack开始爆破

爆破完毕后可以看到Payload后面对应的length长度

可以看到长度为560的字符是nonono(被过滤了的)

其他长度的正常,没有被过滤

这样一来我们就可以根据自己要构造的sql语句的字符进行爆破然后找到被过滤的字符并进行替换即可

而这题根据爆破结果可以得知字符union、if、xor、sleep、or甚至flag均被过滤,那在使用这些字符进行注入时就需要一 一替换或者找不到替换这些字符的方法的时候相应的如联合注入盲注都是用不了的

这样其实可以使用堆叠注入

堆叠注入:将多条sql语句放在一起,并用分号;隔开

比如现在我们需要先查询数据库名称

可以看到数据库名称已经回显,说明堆叠注入是可用的,那么接下来进行表名的查询

看到表名为flag

那想要flag应该就在这个表下面,但是我经过爆破发现from这个字符也被过滤了

重新注入其他字符试试

注入0:

可以看到无回显

注入2:

有回显

3、4、5等都有

注入a:

无回显

然后就发现数字注入除了0之外都有回显,而注入字母无回显

其实后面的我也不会,是现学的

这就可以猜测后端代码含有||或运算符

也就是说:

假设后端代码为:

$query = "SELECT * FROM users WHERE id = '$id1' or '$id2'

简化下来就是

$id1 or $id2

假设我们的注入点为$id1,则有:

情况1:

那么假如$id1是非0数字,语句1 or $id2 结果为1(不论or右边成不成立,左边为非0数字结果为1,整个语句就为1);

情况2:

假如$id1是0或字母

(1)$id2值为0或字母,值为0(假)

则 0 or 0 整个语句就为0(假)

(2)$id2值为非0数字,值为1(真)

则 0 or 1整个语句就为1(真) 当然,这种情况在这题是不存在的(因为刚测试过有没有回显的情况,说明$id2的值定然不可能为1,否则无论$id1的值为多少,整个语句都为1(真),都会有回显),也就是说$id2的值应该为0($id2应该为0或字母)

情况3:

假如$id1不是非0数字

(1)$id2值为1时整个语句为1(刚说了这题这种情况不存在)

(2)$id2值为0时整个语句为0

而在大佬的wp那里得到本题源码,的确如猜想

$sql = "select ".$post['query']."||flag from Flag"; 

别问大佬怎么知道的,有背景

这是大佬的wp:[SUCTF 2019]EasySQL1 题目分析与详解_[suctf 2019]easysql 1-CSDN博客 

接下来查询flag有两个方法:

1、利用非预期漏洞获取flag

非预期漏洞也就是输入1,1时,sql语句变为select 1,1 || flag from Flag   其中由【1】和【1 || flag from Flag】两部分组成,并不是【1,1】||【flag from Flag】.非预期漏洞就是利用数据库对符号判断的不准确形成的漏洞

比如现在输入*,1

sql语句就变为了select *,1 || flag from Flag

其中分为两部分:
1、  select * from Flag

2、select 1 || flag from Flag

select * from Flag 通过查看表Flag中的所有数据可以get到flag

2、使用sql_mode中的PIPES_AS_CONCAT函数

PIPES_AS_CONCAT函数:将 || 或运算符 转换为连接字符,即将 || 前后拼接到一起

$id1 || flag from Flag 的意思是先查询$id1 再查询Flag目录下的flag,而不是查询$id1flag(也就是把查询结果拼接到一起,不要混淆喽)

所以构造查询结果为:

1;sql_mode=PIPES_AS_CONCAT;select 1

查询即可得到flag
 

相关文章:

刷刷刷刷刷sql题

NSSCTF 【SWPUCTF 2021 新生赛】easy_sql 这题虽然之前做过&#xff0c;但为了学习sql&#xff0c;整理一下就再写一次 打开以后是杰哥的界面 注意到html网页标题的名称是 “参数是wllm” 那就传参数值试一试 首先判断注入类型&#xff08;数字型或字符型&#xff09; 传1 …...

JavaScript 中的 this 及 this 指向的改变方法

在 JavaScript 的世界里&#xff0c;this是一个既强大又容易让人困惑的概念。它的指向在不同的函数调用场景下会动态变化&#xff0c;而call()、apply()和bind()这三个方法则为我们提供了精确控制this指向的能力。本文将从基础概念出发&#xff0c;结合具体案例&#xff0c;带大…...

安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南

安卓模拟器绕过检测全解析&#xff1a;雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南 模拟器过检测合集雷电mumu蓝叠逍遥夜神WSA 转自风车2025 前言 随着手机游戏和应用的普及&#xff0c;越来越多的用户选择在PC上通过模拟器来运行安卓应用。然而&#xff0c;许多应用和游戏为…...

VSCode中安装GitGraph

前提是先安装git&#xff0c;官方下载地址&#xff1a;Git - Downloads 1. 在VSCode中安装GitGraph插件 2. 文件->首选项->设置&#xff0c;打开设置界面&#xff0c;在设置界面搜索git path 3. 打开配置文件配置git安装路径&#xff1a; 4. 打开源代码管理&#xff0c;…...

StartAI「万物迁移」功能设计师实操教程:模特换衣场景应用

一、功能核心优势解析 智能识别与场景融合 基于迁移学习算法&#xff0c;精准定位服装轮廓&#xff08;支持复杂材质如蕾丝、镂空设计&#xff09;&#xff0c;自动匹配目标场景的光影方向与色温。 效率革命 传统PS手动换衣需2-3小时&#xff0c;使用万物迁移可压缩至2-5分…...

【RK3588 嵌入式图形编程】-SDL2-扫雷游戏-放置标记

放置标记 文章目录 放置标记1、概述2、更新Globals.h3、放置标记4、渲染标记5、标记计数6、完整代码7、改进建议8、总结在本文中,我们实现标记放置和跟踪以完成的扫雷游戏项目。 1、概述 在我们扫雷游戏文章系列的最后部分中,我们将添加玩家在可疑的地雷位置放置标记的功能。…...

【Python】Selenium切换网页的标签页的写法(全!!!)

在使用selenium做网站爬取测试的时候&#xff0c;我们经常会遇到一些需要点击的元素&#xff0c;才能点击到我们想要进入的页面&#xff0c; 于是我们就要模拟 不断地 点点点击 鼠标的样子。 这个时候网页上就会有很多的标签页&#xff0c;你的浏览器网页标签栏 be like: 那…...

Spring Boot多环境配置详解

一、为什么需要多环境配置 在实际项目开发中&#xff0c;我们通常需要将应用部署到不同的环境中&#xff0c;比如&#xff1a; 开发环境&#xff08;dev&#xff09; - 开发人员本地开发调试使用测试环境&#xff08;test&#xff09; - 测试人员功能测试使用生产环境&#x…...

进阶篇 第 6 篇:时间序列遇见机器学习与深度学习

进阶篇 第 6 篇&#xff1a;时间序列遇见机器学习与深度学习 (图片来源: Tara Winstead on Pexels) 在上一篇中&#xff0c;我们探讨了如何通过精心的特征工程&#xff0c;将时间序列预测问题转化为机器学习可以处理的监督学习任务。我们学习了如何创建滞后特征、滚动统计特征…...

RHCE 作业二(密钥登录实验)

1.进入ssh主配置文件恢复配置&#xff1a; 2.vim进入ssh子文件夹查看配置 3.重启服务 /etc/ssh/ key结尾或者.pub结尾的文件全部都是密钥 sshd_confg.d目录是服务的子配置文件 ssh_confg.d目录是客户端你的子配置文件 ~/.ssh/ 是当前用户的配置文件 4.服务器和客户端分别…...

android contentProvider 踩坑日记

写此笔记原因 学习《第一行代码》到第8章节实现provider时踩了一些坑&#xff0c;因此记录下来给后来人和自己一个提示&#xff0c;仅此而已。 包含内容 Sqlite数据库CURD内容provider界面provider项目中书籍管理provider实现逻辑用adb shell确认providercontentResolver接收…...

K8s:概念、特点、核心组件与简单应用

一、引言 在当今云计算和容器技术蓬勃发展的时代&#xff0c;Kubernetes&#xff08;简称 K8s&#xff09;已成为容器编排领域的事实标准。它为管理容器化应用提供了高效、可靠的解决方案&#xff0c;极大地简化了应用的部署、扩展和运维过程。无论是小型初创公司还是大型企业…...

基于表面肌电信号sEMG的手势识别——以Ninapro DB1数据集使用CNN网络识别为例

完整代码获取 评论区或者私信留邮箱 接论文辅导&#xff01;中文核心辅导&#xff01;SCI三四区辅导&#xff01; 可接模型改进 任务描述 表面肌电信号( sEMG ) 是一种生物电信号&#xff0c;存在于肌肉神经。 当大脑下达肌肉动作指令&#xff0c;肌肉会产生控制信号&#xff…...

黑盒测试——等价类划分法实验

任务&#xff1a; 设某程序有两个输入&#xff1a;整数x1和整数x2&#xff0c;计算Yf(x1,x2)。x1和x2的取值范围为1< x1<500,1< x2<500。当x1在[1,200) 取值且x2在[1,300] 取值时&#xff0c;Yf(x1,x2) x1x2&#xff1b;当x1在[200,500] 取值且x2在[1,300] 取值时&…...

深度学习4月22笔记

1、过拟合与欠拟合 在训练深层神经网络时&#xff0c;由于模型参数较多&#xff0c;在数据量不足时很容易过拟合。而正则化技术主要就是用于防止过拟合&#xff0c;提升模型的泛化能力(对新数据表现良好)和鲁棒性&#xff08;对异常数据表现良好&#xff09;。 1. 概念认知 …...

【MySQL数据库入门到精通-03 数据类型及案列】

文章目录 一、三类数据类型二、数值类型三、字符串类型四、日期时间类型五、日期时间类型 一、三类数据类型 MySQL中的数据类型有很多&#xff0c;主要分为三类&#xff1a;数值类型、字符串类型、日期时间类型。 二、数值类型 比如&#xff1a; 1). 年龄字段 – 不会出现负数…...

【机器学习】决策树算法中的 “黄金指标”:基尼系数深度剖析

一、基尼系数的基本概念 基尼系数&#xff08;Gini Impurity&#xff09;在决策树分类算法中&#xff0c;是用于衡量数据纯度的重要指标&#xff0c;与信息熵有着相似的功能。在样本集合里&#xff0c;基尼系数代表随机选取一个样本时&#xff0c;该样本被分错的概率 。假设一…...

植被参数遥感反演技术革命!AI+Python支持向量机/随机森林/神经网络/CNN/LSTM/迁移学习在植被参数反演中的实战应用与优化

在全球气候变化与生态环境监测的重要需求下&#xff0c;植被参数遥感反演作为定量评估植被生理状态、结构特征及生态功能的核心技术&#xff0c;正面临诸多挑战。随着遥感技术的发展&#xff0c;数据复杂度不断提升&#xff0c;模型精度的要求也越来越高。同时&#xff0c;多源…...

【AI】SpringAI 第四弹:接入本地大模型 Ollama

Ollama 是一个开源的大型语言模型服务工具。它的主要作用是帮助用户快速在本地运行大模型&#xff0c; 简化了在 Docker 容器内部署和管理大语言模型&#xff08;LLM&#xff09;的过程。 1. 确保Ollama 已经启动 # 查看帮助文档 ollama -h# 自动下载并启动 ollama run deeps…...

C# MP3 伴奏

使用建议&#xff1a; 参数调节指南&#xff1a; 低频人声残留&#xff1a;降低CenterFrequency(800-1500Hz) 高频人声残留&#xff1a;提高CenterFrequency(2500-3500Hz) 消除力度不足&#xff1a;提高EliminationStrength(0.9-1.0) 伴奏失真&#xff1a;降低EliminationSt…...

【springsecurity oauth2授权中心】将硬编码的参数提出来放到 application.yml 里 P3

在application.yml里添加配置 application.yml oauth2:client:id: clientsecret: secretauthentication-method: client_secret_basicgrant-types: authorization_code,refresh_tokenredirect-uris:- http://localhost:8081/login/oauth2/code/client- http://localhost:8081…...

【Ansible】批量管理 Windows自动化运维

一&#xff0c;前期准备 1&#xff0c;控制端&#xff08;Linux&#xff09;的要求 Ansible可以在安装了Python 2&#xff08;2.7版&#xff09;或Python 3&#xff08;3.5及更高版本&#xff09;的任何机器上运行。控制端计算机不支持Windows。 2&#xff0c;客户端&#x…...

AES-128、AES-192、AES-256 简介

AES&#xff08;Advanced Encryption Standard&#xff09; 是一种广泛使用的对称加密算法&#xff0c;由美国国家标准与技术研究院&#xff08;NIST&#xff09;于2001年正式采纳&#xff0c;用于替代旧的 DES 和 3DES。AES 基于 Rijndael 算法&#xff0c;支持 128 位、192 位…...

osxcross 搭建 macOS 交叉编译环境

1. osxcross 搭建 macOS 交叉编译环境 1. osxcross 搭建 macOS 交叉编译环境 1.1. 安装依赖1.2. 安装 osxcross 及 macOS SDK 1.2.1. 可能错误 1.3. 编译 cmake 类工程1.4. 编译 configure 类工程1.5. 单文件编译及其他环境编译1.6. 打包成 docker 镜像1.7. 使用 docker 编译 …...

联通余额查询接口

接口名称 1) 请求地址 https://ucbss.10010.cn/npfweb/NpfWeb/Mustpayment/getMustpayment?number13112345586&province051&commonBean.phoneNo13112345586&channelType101https://ucbss.10010.cn/npfweb/NpfWeb/Mustpayment/getMustpayment?number13112345586&…...

Python 设计模式:桥接模式

1. 什么是桥接模式&#xff1f; 桥接模式是一种结构型设计模式&#xff0c;它通过将抽象部分与其实现部分分离&#xff0c;使得两者可以独立变化。桥接模式的核心思想是将抽象和实现解耦&#xff0c;从而提高系统的灵活性和可扩展性。 桥接模式的核心思想是将一个类的接口与其…...

7.6 GitHub Sentinel后端API实战:FastAPI高效集成与性能优化全解析

GitHub Sentinel Agent 用户界面设计与实现:后端 API 集成 关键词:前后端分离架构、RESTful API 设计、数据序列化、命令行工具开发、集成测试 后端 API 集成关键技术实现 本阶段需要完成前端界面与后端服务的无缝对接,实现以下核心功能: #mermaid-svg-FFnzT13beWV52dtx …...

Smart AI:在AI浪潮中崛起的智能NFT生态革命者

技术引领&#xff0c;智能进化&#xff1a;Smart AI强势登场 在全球AI技术浪潮席卷之际&#xff0c;由澳大利亚顶尖技术团队倾力打造的Smart AI平台横空出世&#xff0c;以其革命性的NFT智能进化系统&#xff0c;正在彻底重塑数字资产的未来图景。Smart AI不仅是一个平台&…...

Linux——基于socket编程实现简单的Tcp通信

前言1&#xff1a;想要实现一个简单的Tcp通信不难&#xff0c;对于初学者而言&#xff0c;难点在于使用了大量未曾接触过的函数调用&#xff0c;所以本篇重点在于详解每部分代码中相关函数的功能。 1. 简单认识一下TCP传输 TCP通信协议是面向字节流的、可靠的、有连接的传输&a…...

STL C++详解——priority_queue的使用和模拟实现 堆的使用

priority_queue的使用 std::priority_queue 是 C 标准模板库&#xff08;STL&#xff09;中的一个容器适配器&#xff0c;提供了优先队列的功能。 优先队列&#xff1a;是一种特殊的队列&#xff0c;队列中的每个元素都有与之关联的优先级&#xff0c;优先级高的元素会先出队…...

是否可以使用非被动 S4P 文件进行反嵌?

AEDT 电路去嵌入算法使用假定线性时不变 &#xff08;LTI&#xff09; 行为的转换。如果非被动 S 参数块不是 LTI&#xff0c;则倒数函数将无法按预期工作。...

GAEA的技术优势:分层加密与去中心化数据治理

GAEA采用分层加密架构&#xff0c;将用户数据分为三个层级&#xff1a; 基础层&#xff08;链上数据&#xff09;&#xff1a;用户身份哈希、资源贡献记录等核心数据通过零知识证明&#xff08;ZK-SNARKs&#xff09;进行链上加密&#xff0c;确保不可篡改和匿名性。 情感层…...

使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第九讲)

这一期讲解GUI_guider中的容器控件的使用以及相关函数&#xff0c;容器本质上是具有布局和自动调整大小功能的基本对象 &#xff0c;通常用来装载其他子控件。 打开上一期的项目&#xff0c;在工具栏中选中容器控件拖拽到界面中&#xff0c;具体如图所示&#xff1a; 容器默认…...

SparkStreaming概述

SparkStreaming主要用于流式计算&#xff0c;处理实时数据。 DStream是SparkStreaming中的数据抽象模型&#xff0c;表示随着时间推移收到的数据序列。 SparkStreaming支持多种数据输入源&#xff08;如Kafka、Flume、Twitter、TCP套接字等&#xff09;和数据输出位置&#xf…...

LeetCode---整数反转

整数反转 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 示例 示例 1&#xff1a; 输入&#xff1a;x 123 输出&#xff1a;321 示例 2&#xf…...

Conceptrol: Concept Control of Zero-shot Personalized Image Generation(个性化图像生成)

文章目录 一、论文介绍二、项目部署三、效果展示3.1ipadapter plus sd1.5的效果3.2ipadapter plus sd1.5 plus concept的效果3.3两者结果的比较&#xff1a;原本的ipadapter、加了concept的ipadapter 一、论文介绍 个性化图像生成中的平衡问题&#xff1a;现有的zero-shot adap…...

【Harmony】常用工具类封装

文章目录 一&#xff0c;简介二&#xff0c;网络请求工具类2.1、鸿蒙原生http封装2.2、第三方axios封装(需提前下载依赖) 三、录音笔相关工具类3.1、录音封装(录入)3.2、录音封装(放音/渲染)3.3、文件写入封装(针对录音/放音功能) 四、RDB关系型数据库4.1、relationalStore简答…...

大模型部署到本地就是私有化部署吗?

大模型私有化的定义需要从部署方式和数据/模型控制权两个维度来理解&#xff0c;不能简单地仅以“部署位置”或“数据训练”单一条件判断。以下是具体分析&#xff1a; 1. 大模型私有化的核心定义 根据知识库中的描述&#xff08;[1][2][3][8]&#xff09;&#xff1a; 私有化…...

C语言高频面试题——嵌入式系统中中断服务程序

在嵌入式系统中&#xff0c;中断服务程序&#xff08;ISR&#xff09;的设计需遵循严格的规则以确保系统稳定性和实时性。以下是对这段代码的分析及改进建议&#xff1a; 代码分析 __interrupt double compute_area (double radius) { double area PI * radius * radius; pri…...

JavaFX 实战:从零打造一个功能丰富的英文“刽子手”(Hangman)游戏

大家好&#xff01;今天我们要挑战一个经典的单词猜谜游戏——“刽子手”&#xff08;Hangman&#xff09;&#xff0c;并使用 JavaFX 这个强大的 GUI 工具包来赋予它现代化的交互体验。这个项目不仅有趣&#xff0c;而且是学习和实践 JavaFX 核心概念的绝佳途径&#xff0c;涵…...

第 2.1 节: 机器人仿真环境选择与配置 (Gazebo, MuJoCo, PyBullet)

在真实机器人硬件上进行开发和测试既耗时又存在风险&#xff08;硬件损坏、安全问题&#xff09;。机器人仿真环境提供了一个虚拟的沙盒&#xff0c;让开发者能够在计算机中模拟机器人的物理行为、传感器读数和环境互动&#xff0c;极大地加速了开发、测试和调试过程。特别是对…...

网络开发基础(游戏)之 粘包分包

粘&#xff08;nin&#xff09;包、分包 在网络通信中&#xff0c;TCP协议是面向流的协议&#xff0c;没有消息边界概念&#xff0c;粘包和分包是常见的问题。在某种情况下&#xff08;例如网络环境不稳定&#xff09;就会导致"粘包"和"分包"问题&#xf…...

联邦元学习实现个性化物联网的框架

随着数据安全和隐私保护相关法律法规的出台&#xff0c;需要直接在中央服务器上收集和处理数据的集中式解决方案&#xff0c;对于个性化物联网而言&#xff0c;训练各种特定领域场景的人工智能模型已变得不切实际。基于此&#xff0c;中山大学&#xff0c;南洋理工大学&#xf…...

使用 Nacos 的注意事项与最佳实践

&#x1f4f9; 背景 Nacos 凭借其强大&#x1f4aa;的服务发现、配置管理和服务管理能力&#xff0c;成为构建分布式系统的得力助手。然而&#xff0c;要充分发挥 Nacos 的优势&#xff0c;实现系统的高性能、高可用&#xff0c;掌握其使用过程中的注意事项和最佳实践至关…...

在Pytorch中使用Tensorboard可视化训练过程

【在Pytorch中使用Tensorboard可视化训练过程】 https://www.bilibili.com/video/BV1Qf4y1C7kz/?share_sourcecopy_web&vd_sourcef00bfb41b3b450c3767070ed82f30ac8 主要功能&#xff1a; 1.保存网络结构图 2.保存训练集的损失Loss&#xff0c;验证集的正确性Accuracy以…...

15.电感特性在EMC设计中的运用

电感特性在EMC设计中的运用 1. 共模电感与差模电感的差异2. 电感的高频等效特性![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b4dc000672af4dd69a528450eb42cf10.png)3. 电感在EMC设计中的使用注意事项3.1 LC滤波计算3.2 并联型多级浪涌防护的电感退耦 1. 共模电感…...

代理设计模式:从底层原理到源代码 详解

代理设计模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过创建一个代理对象来控制对目标对象的访问。代理对象充当客户端和目标对象之间的中介&#xff0c;允许在不修改目标对象的情况下添加额外的功能&#xff08;如权限控制、日志记录、延迟…...

25、简述.NET程序集(Assembly)

.NET 程序集&#xff08;Assembly&#xff09; .NET 程序集&#xff08;Assembly&#xff09; 是 .NET 应用程序的基本部署单元&#xff0c;包含以下核心内容&#xff1a; 类型与代码&#xff1a; 存储类、接口等类型的定义及实现&#xff08;以中间语言 IL 形式&#xff09;。…...

JavaScript 笔记 --- part 5 --- Web API (part 3)

(webAPI part3) BOM 操作 JS 执行机制 javascript 是单线程的, 也就是说, 只能同时执行一个任务。 为了解决这个问题, 利用多核 CPU 的计算能力, HTML5 提出 Web Worker API, 允许 JavaScript 脚本创建多个线程, 并将任务分配给这些线程。 于是, JS 出现了同步和异步的概念。…...

HCIP(OSPF)(3)

OSPF 报文结构 公共头部&#xff1a;包含版本&#xff08;8bit&#xff09;、类型&#xff08;8bit&#xff09;、报文长度&#xff08;16bit&#xff09;、路由器 ID&#xff08;32bit&#xff09;、区域 ID&#xff08;32bit&#xff09;、校验和&#xff08;16bit&#xff0…...