文章目录 一. 问题描述二. Bug复现三. 原因分析四. 解决方案 一. 问题描述 当我们用mybatis-plus书写sql语句时,sql 中模糊查询里使用#{} 替换传入的变量时,发生了报错
报错堆栈信息如下所示:
2023-12-08 19:23:58.576 ERROR 16024 --- [nio-9036-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='state', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null .
不同的事情可能会损坏您的Android手机并导致您丢失数据。但大多数时候,您可以使用取证工具恢复部分或全部文件。
问题可能来自手机的物理损坏、磁盘的逻辑故障、完整的系统擦除,或者只是简单的粗心大意。
但是,无论数据丢失的原因是什么,它通常是痛苦的,充其量是避免的。但是一旦发生,您最好的解决方案就是一个好的数据恢复工具。
有许多适用于 Android 设备的此类工具。但我们在这里只介绍前 9 个,以帮助您为您的困境找到正确的解决方案。
1. 奇客数据恢复安卓版 奇客数据恢复安卓版作为免费增值软件提供,并提供Android应用程序和桌面版本,提供适用于Android的奇客数据恢复安卓版以及适用于PC和macOS的数据恢复向导程序。
安卓数据恢复-奇客官网免费下载Android数据恢复软件扫描数据,支持文件、照片、视频、邮件、音频、微信消息等1000+种文件格式。https://www.geekersoft.cn/geekersoft-recovergo-android.html它可以让您在不植根设备的情况下恢复已删除的照片。您可以恢复已删除的 微信消息、联系人、照片、视频和其他文档。
奇客数据恢复安卓版程序可以恢复1,000 +文件类型,包括原始分区中的隐藏文件和数据。它们包括 .jpeg、.png、.gif 和 .bmp 照片。以及 .mp4、.avi、.3gp 和 .mov 视频。加上短信、联系人、WhatsApp 等。
奇客数据恢复安卓版适用于所有Android版本,包括数千种不同的设备硬件。它还支持10多种语言,包括英语,中文,意大利语,法语,日语,德语等。
2. 磁盘挖掘机 DiskDigger 应用程序在扩展到 Linux 和 Android 之前开始在 Windows 系统上运行。它适用于 Android 4.1 以上的所有版本。
DiskDigger 提供免费和付费版本,但它们提供不同的功能。您可以使用免费版本来搜索和恢复图像。虽然您将需要付费版本来恢复视频和其他文件。
该应用程序还通过搜索缓存和缩略图,仅对标准系统执行有限的扫描。如果您希望执行完整的系统扫描,则需要root手机。
在扫描结束时,您会看到不同的选项来保存恢复的数据。它们包括通过电子邮件发送、上传到 Google Drive 或 Dropbox,以及本地存储到设备上的不同文件夹。
DiskDigger 的安装量在 Play 商店中获得了 3.8 多条评论的 400,000 星评级。它还允许您完全擦除发现数据的空间。因此,没有其他人可以恢复它。
3. Fenix Studio恢复已删除的照片 Fenix Studio 中的“恢复已删除的照片”应用程序是一款 100% 免费的 Android 应用程序。它可以轻松扫描、识别和恢复智能手机中已删除或丢失的文件。
该应用程序具有简单干净的界面和绿色背景,可提供愉快的用户体验,同时满足您的数据恢复需求。
虽然它的名字中只有照片,但你仍然可以使用这个应用来恢复更多的东西。从照片到视频和音频数据。
迄今为止,已安装超过 50,000 次,该软件包可在 4.
在这篇博客中,我们将探讨和比较四个不同的人工智能模型——ChatGPT 3.5、ChatGPT 4.0、ChatGPT 4.0+插件和Google Bard。我们将通过三个问题的测试结果来评估它们在处理特定任务时的效能和响应速度。
导航 问题 1: 统计自Vehicle Routing Problem (VRP)第一篇文章发布以来,每隔十年的发表文章数量。问题 2: 提供1975-1979年间所有关于Vehicle Routing Problem的文献。问题 3: 简述Electric Vehicle Routing Problem的发展历程,并提供相关参考文献。Google Bard的使用方法结论 问题 1: 统计自Vehicle Routing Problem (VRP)第一篇文章发布以来,每隔十年的发表文章数量。 AI模型结果回复速度ChatGPT 3.5未给出具体的文章数量回复速度极快(plus版本)ChatGPT 4.0建议查阅其他数据库-ChatGPT 4.0 + Scholar AI给出了文章数量,但是严重偏少回复极慢,耗费CPU算力Google Bard给出了文章数量,但是每个草稿的数据均不一样回复快,一次给出多个草稿 ChatGPT 3.5
ChatGPT 4.0
ChatGPT 4.0 + Scholar AI
Google Bard
问题 2: 提供1975-1979年间所有关于Vehicle Routing Problem的文献。 AI模型结果备注ChatGPT 3.5提供3篇文献-ChatGPT 4.0建议查阅其他数据库-ChatGPT 4.0 + Scholar AI提供4篇文献信息详尽Google Bard提供4篇文献对文章进行了概述 ChatGPT 3.5
ChatGPT 4.0
ChatGPT 4.0 + Scholar AI
目录
前言
基础介绍
月度开支的条形图
前言 条形图(bar chart),也称为柱状图,是一种以长方形的长度为变量的统计图表,长方形的长度与它所对应的变量数值呈一定比例。
当使用 Python 画条形图时,通常会使用 Matplotlib 库。Matplotlib 是一个广泛用于绘制图表和数据可视化的库,它提供了丰富的函数和方法来创建各种类型的图表,包括条形图。
Matplotlib 是一个用于绘制数据可视化图表的 Python 库。它提供了一个广泛的功能集,使得用户可以创建各种类型的图表,包括折线图、散点图、条形图、饼图、直方图等等。Matplotlib 可以轻松地将数据转换为可视化图表,帮助我们更好地理解和分析数据。
Matplotlib 库的主要特点和功能:
简单易用:Matplotlib 提供了直观的 API,使得创建基本图表变得简单而直接。灵活性:Matplotlib 允许用户对图表进行高度定制,包括设置标题、标签、刻度线、线型、颜色、图例等等。多种图表类型:Matplotlib 支持众多常见的图表类型,如折线图、散点图、条形图、饼图、直方图、盒图等等。支持多种输出格式:Matplotlib 可以将图表保存为图片文件(如 PNG、JPG、SVG)、PDF 文件以及其他常见的图像格式。与 NumPy 和 Pandas 集成:Matplotlib 与 NumPy 和 Pandas 库完美集成,使得数据的处理和可视化更加便捷。支持 Jupyter Notebook:Matplotlib 可以在 Jupyter Notebook 环境中无缝使用,使得数据分析和可视化更加交互性和动态化。 基础介绍 import matplotlib.pyplot as plt # 数据 categories = ['A', 'B', 'C', 'D', 'E'] values = [7, 13, 5, 17, 10] # 创建条形图 plt.bar(categories, values, color='skyblue') # 添加标题和标签 plt.
MySQL作为一个广泛应用的关系型数据库管理系统,具有以下优点和缺点:
优点:
开源和免费:MySQL是开源软件,用户可以免费获取和使用它。这使得MySQL成为个人开发者和小型组织的理想选择。
良好的性能:MySQL经过多年的发展和优化,具有出色的性能表现。它能够处理大量数据和高并发请求,并提供快速的数据读取和写入操作。
可扩展性:MySQL具有良好的可扩展性,可以通过主从复制、分区和集群等技术来扩展数据库的容量和吞吐量。这使得MySQL适用于大型和高流量的应用程序。
简单易用:MySQL具有较简单的安装和配置过程,同时提供了直观的管理工具和命令行接口。这使得开发者可以快速上手并进行数据库操作。
强大的功能集:MySQL提供了丰富的功能和工具,包括事务支持、触发器与存储过程、索引和优化器等。这些功能使得开发者能够灵活地操作和管理数据。
大型社区支持:MySQL拥有庞大的用户社区和开发者社区,这意味着开发者可以从社区中获取支持、分享经验和参与开源项目。
缺点:
不适合大规模数据仓库:MySQL在处理大规模数据仓库和复杂查询时可能遇到性能瓶颈。对于需要进行复杂分析和数据挖掘的任务,其他专用的数据库系统可能更适合。
有限的功能集:相比一些商业数据库管理系统,MySQL在某些高级功能方面可能有所欠缺。例如,对于空间数据处理或图形数据处理等特殊需求,可能需要额外的插件或扩展。
数据一致性:由于MySQL默认的隔离级别是可重复读(Repeatable Read),在某些情况下可能导致并发操作时的数据不一致问题。开发者需要注意事务的隔离级别设置以确保数据一致性。
存储限制:MySQL在某些方面存在存储限制,如最大表格大小、最大索引长度等。这可能会对需要处理大型数据集或具有复杂数据结构的应用程序造成限制。
缺乏一些高级特性:虽然MySQL提供了基本的事务支持,但它在某些高级特性方面相对较弱,如分布式事务、在线扩容等。对于需要这些高级功能的应用场景,可能需要考虑其他数据库系统。
总体来说,MySQL是一个功能强大且广泛应用的开源关系型数据库管理系统,适用于多种规模和类型的应用程序。然而,在选择数据库时,开发者需要考虑实际需求和特定场景,并权衡MySQL的优点和缺点。
介绍 使用sql语句删除表字段。
命令 alter table 表名 drop 字段名; 例子 删除a表中的name字段。
alter table a drop `name`; 下面是执行删除后的表结构:
1.1DM客户端存放位置 Windows:DM数据库安装目录中tool文件夹和bin文件夹中。
Linux:DM数据库安装目录中tool目录和bin目录中。
1.2DM数据库配置助手 1.2.1Windows创建数据库 打开数据库配置助手dbca
点击创建数据库实例
选择一般用途
浏览选择数据库存放目录
定义数据库名,实例名以及端口号
各文件存放目录
定义初始化参数
定义用户口令(默认口令为用户名)
确认创建信息
创建完成。
1.2.2Linux命令行中dminit创建数据库 进入dm安装目录里存放dminit脚本的bin目录里
执行脚本输入参数help查看各参数的详细介绍
./dminit PATH=/home/dmdba1(数据库的存放目录) DB_NAME=T1(数据库的名字) CASE_SENSITIVE=Y(开启大小写敏感) CHARSET=0(字符集为GB18030)
创建完成
使用命令建库后必须前台启动一次数据库实例,然后关闭数据库实例,才能通过后台启动
./dmserver /home/dmdba1/T1/dm.ini
执行dmserver脚本指定创建数据库的dm.ini文件的路径,进入前台运行
输入命令:exit
退出前台运行
1.2.3删除数据库 点击数据库配置助手,选择删除数据库实例
选择要删除的数据库或指定数据库配置文件所在路径
删除完成(注:需要关闭数据库服务才能删除数据库)
1.3DM服务查看器 1.3.1Windows 点击dmservice服务查看器
Dm服务查看器可以控制数据库的启动或停止
1.3.2 Linux dm_service_installer.sh:注册数据库服务,守护服务,监控服务
dm_service_uninstaller.sh:删除其他服务
root_installer.sh:注册DMAP服务
首先创建一个实例
注册服务
查看服务
删除服务
查看删除服务脚本参数信息
输入-n参数,指定服务名,进行删除服务
1.4 DM管理工具 1.4.1创建数据库实例连接 点击DM管理工具manager
点击注册连接
输入要连接数据库的端口号,连接用户以及用户的口令
输入连接用户的口令进行登录
连接完成
有ssl加密认证的需要输入ssl密码才能进行登录
1.4.2DM管理工具窗口功能说明 1.4.3查看数据库实例信息 右键点击实例连接,点击管理服务器
1.4.4常用选项配置 可以对sql编辑器进行便捷设置
以及sql编辑器执行的结果集进行显示设置
1.4.5 创建表空间 点击新建表空间
1.5 disql 1.
更多资料获取 📚 个人网站:ipengtao.com
在Python编程中,字符串比较是一项常见且关键的操作,涵盖了诸多方法和技巧。比较两个字符串是否相等、大小写是否一致,或者在一个字符串中寻找特定的子字符串,都是日常开发中经常遇到的需求。除此之外,使用正则表达式进行模式匹配、比较字符串的长度,甚至进行字符串的拼接和格式化,也是处理字符串数据的关键操作。
本文深入探讨Python中字符串比较的多种方法,并通过丰富的示例代码演示如何灵活运用这些技巧。从基本的相等性检查到更高级的正则表达式模式匹配,读者将了解如何利用Python强大的字符串处理功能,提高对字符串数据的操作技能,以解决日常编程任务中的挑战。
1. 字符串相等性检查 比较两个字符串是否相等是最基本的操作之一。Python提供了简单的方法来执行这个比较。
string1 = "Hello" string2 = "hello" # 使用 == 运算符检查字符串相等性(区分大小写) if string1 == string2: print("字符串相等") else: print("字符串不相等") # 使用 casefold() 方法比较字符串(不区分大小写) if string1.casefold() == string2.casefold(): print("忽略大小写后字符串相等") else: print("忽略大小写后字符串不相等") 2. 比较字符串的大小 有时我们需要按照字典顺序比较字符串。
string3 = "apple" string4 = "banana" # 使用比较运算符(字典顺序) if string3 < string4: print(f"{string3} 在 {string4} 前面") else: print(f"{string3} 在 {string4} 后面") 3. 查找子字符串 在一个字符串中查找另一个子字符串也是常见的操作。
sentence = "This is a sample sentence for string comparison"
1.SQL server 连接数据库(右击项目先连接):
单击SQL server打开后右击数据库新建数据库
打开新建的数据库右击表新建表
单点击安全性--->单击登录名--->右击sa,点击属性
(要输入sa的密码)
点击状态--->把授予和启用勾上--->确定
右击服务器--->点击属性--->安全性
右击此电脑--->管理--->服务和应用程序
点击SQL server网络配置---->TCP/IP(右击启用)
右击TCP/IP属性--->IP地址
将IP1和IP10和IPALL的TCP端口都设置为1433,IP地址设置为127.0.0.1即可。在设置完成之后一定要重启sql sever服务
2.idea中创建jsp项目 先新建一个普通的Java项目
右击项目
点击项目--->web--->WEB-INF.在WEB-INF下新建2个文件夹(classes,lib)
按下ctrl+alt+shift+s--->Moudules--->Paths
选到Dependencies--->点击+ 点ok后
在tomcat文件夹中找到lib目录,搜索servlet-api.jar(我是在lib里面搜索的)--->右击复制--->复制项目中的lib中
右击servlet-apt.jar
点击ok
同理将sql架包放入lib目录下
点击顶部菜单中Run
点击项目--->点击web--->WEB-INF--->web.xml,在文档添加代码
<servlet> <servlet-name>CjZjServlet</servlet-name> <servlet-class>com.sy.CjZjServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CjZjServlet</servlet-name> <url-pattern>/CjZjServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>login</servlet-name> <servlet-class>com.sy.LoginServletByDB</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <filter> <filter-name>LoginFilter</filter-name> <filter-class>com.sy.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 运行一下
如果遇到端口号被占可改端口号
右击tomcat
在src中创建DbBean类,用于编写连接数据库
public void getConnection() { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); String url = "jdbc:sqlserver://localhost;databaseName=student"; String user = "
一、什么是IK分词器
所谓分词,即把一段中文或者别的划分成一个个的关键字,我们在搜索时会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配的操作,默认的中文分词器是将每一个字看成一个词,比如“我爱中国”会被分成“我”、“爱”、“中”、“国”,这显然是不符合要求的,所以我们需要安装中文分词器IK来解决这个问题!
二、IK分词器的分词算法
1、ik__smart最少切分
2、ik_max_word最细粒度划分
三、安装IK
1、官网地址:GitHub - medcl/elasticsearch-analysis-ik: The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary.
2、下载完毕之后,放入我们的elasticsearch的插件文件夹中
3、重启观察Elasticsearch
可以看到我们es启动的时候,加载了刚刚解压的ik插件 4、也可以通过ES的bin下的elasticsearch-plugin.bat查看安装的插件
(1)在bin目录下,打开cmd输入命令
elasticsearch-plugin list (2)可以查看当前安装的插件有哪些
5、使用kibana测试
(1)ik__smart最少切分:根据字典的配置,尽量少的对文档进行拆分
GET _analyze:这是通过RestFul风格请求分词器
“analyzer”:表示请求的分词要求(选择最少切分还是最细粒度!)
“text”:表示要分词的文本
(2)ik_max_word最细粒度划分:根据词库中的字典,最大程度的对文档内容进行拆分
四、配置IK分词器字典
假如我想对以下的内容进行分词,我不希望“长江东逝水”分开,这个时候就需要我们自己去配置一下属于我们自己的字典了
配置方法:
1、打开IK分词器的config配置文件夹
2、查看IKAnalyzer.cfg.xml配置文件
3、在目录下新建一个文件,后缀为.dic,把我们想配置的字典内容填进去
如果我们不希望把某个词给我拆开了,那么我就可以通过编写自己的配置字典,把文本输入进去,绑定到IKAnalyzer.cfg.xml配置文件中即可!
4、把我们自己配置的字典注入进来
5、重启ES和kibana
(1)观察ES细节,我们自己编写的字典被加载进来了!
(2)重启kibana即可
6、测试重新使用最少切分的算法,测试“滚滚长江东逝水”,是否把我们的“长江东逝水”拼接在一起了
成功!
将来我们所有需要自己配置特定的分词效果,直接在我们自己定义的dic文件中进行配置即可!!!!!!记得绑定到IKAnalyzer.cfg.xml配置文件中哦
至此,恭喜你已经掌握了安装和使用IK分词器,掌握了分词的基本规则。后续还会持续更新关于ES相关技术点,敬清期待~~~
大数据实验 实验七:Flink初级编程实践 实验环境:Windows 10 Oracle VM VirtualBox
虚拟机:cnetos 7
Hadoop 3.3
实验内容与完成情况: 1. 使用IntelliJ IDEA工具开发WordCount程序 在Linux操作系统中安装IntelliJ IDEA,然后使用IntelliJ IDEA工具开发WordCount程序,并打包成JAR包,提交到Flink中运行。
下载flink安装包后解压 启动flink, 程序原码 WordCountData
package WordCount; import org.apache.flink.api.java.DataSet; import org.apache.flink.api.java.ExecutionEnvironment; public class WordCountData { public static final String[] WORDS = new String[]{"To be, or not to be,--that is the question:--", "Whether \'tis nobler in the mind to suffer", "The slings and arrows of outrageous fortune", "Or to take arms against a sea of troubles,"
Unity打包到Webgl平台以及遇到的问题 参考网站 Unity打包WebGL的全过程及在打包和使用过程中会遇到的问题(本地测试)-CSDN博客
unity打包到Webgl 并配置能正常运行 这里我用的是Unity2022.3.3f1c1版本
有两种方法
1、配置本地web服务
2、安装vsCode>添加插件LiveServer>把工程托到vsCode里在index.html上右键Open with Live Server 即可运行webgl
首先安装webGL模块 新建一个空工程
切到WebGL平台
PlayerSettings设置 Resolution and Presentation设置分辨率 : 将会在浏览器显示的默认大小
Other Settings
有的版本会有一个警告:
Unity Other Settings的默认设置在打开后会看到有警告,其大致意思就是在提醒我们要在 Unity WebGL 构建中启用高质量的光照贴图编码并确保 WebGL 2 兼容性,解决这个警告只需要将Auto Graphics API 自动图形接口关闭后在Graphics APIs选择WebGL2就可以解决这个警告
我们这里也用WebGL2的渲染方式
Publishing Settings 发布设置
分两种情况介绍 选择压缩的 选择不压缩的
Compression Format是打包后的Build包的压缩格式
压缩和不压缩出来的包展示:
没有压缩的
选择Gzip压缩的
选择Gzip压缩 没勾压缩回退的 这种的webgl运行加载会出错
!
到这里打包以前的所有配置就都已经完了
接下来就是配置本地的服务器测试环境
先介绍第一种 发布时 不压缩的情况 打包后我们会发现在我们的文件夹里会有一个网址html,
这代表我们的Web包已经打成功了,
那么直接点击这个html文件运行我们的项目会发现一个报错
提示我们没有web服务
这个问题是因为我们Web包必须在有服务器支持的环境下才能够正常运行,
所以接下来我们要配置我们的包体在本地也就是127.0.0的环境下的服务器托管状态
配置包体在本地也就是127.0.0的环境下的服务器托管状态 分两步
1、启用我们的电脑的Windows功能
2、创建一个新的网络(映射到我们自己的包体)
这种原因,可能是因为你的ip地址的不在这个服务的允许范围内。你需要重新使用之前出现copilot的ip地址,然后退出edge的账号,重新登录一遍,最后重启edge,就能够使得copilot侧边栏重新出现了。
错误方法 首先我以为我的权限不足。,需要去用户群组里设置。结果根本不是这个的问题。
1.在系统偏好设置->用户与群组检查了一下我的用户是不是管理员 结果发现是管理员
2.根据苹果提示,右键我的文件夹->显示简介->最下面的共享与权限 解锁🔓 设置我这个用户名的读写权限 发现问题还是没办法解决 正确方法 1.把安装包安装好生成的Visual Studio Code应用程序复制到访达的应用程序中 2.打开终端,输入sudo xattr -rd com.apple.quarantine 语句后面跟一个空格 这时候不做任何操作
sudo xattr -rd com.apple.quarantine 3.把应用程序中的Visual Studio Code拖拽到终端当前输入的sudo xattr -rd com.apple.quarantine 语句后面 会自动生成一个目录。我这里自动生成的目录是/Applications/Visual\ Studio\ Code.app 然后在这个基础上回车
4.去访达的应用程序里再双击一下Visual Studio Code就打开了 这玩意真的坑 整了1个多小时 终于能用了。哈哈哈 希望你也可以顺利爬坑
Hadoop 高可用集群完全分布式安装教程一篇就够用(zookeeper、spark、hbase、mysql、hive) 写在之前,Hadoop完全分布式集群资源配置规划情况
一、全局基本配置 💡 建议一开始安装的时候在网络配置项的地方,选择自动ipv4,然后进行ip设置 1、更改静态网络 命令如下:
# 检查虚拟机是否能够ping通www.baidu.com service network restart # 尝试重启网络服务 # 修改网络服务为静态网络 指定路由以及DNS服务器 vim /etc/sysconfig/network-scripts/ifcfg-ens33 文件内容如下:
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO="static" DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=c494a46e-a55b-431a-9b5e-b2bbdc767606 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.201.201# 虚拟机对应的ip地址 NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.201.2# 网关地址 DNS1=114.114.114.114 # DNS服务器地址 然后重启网络:
service network restart 再次测试 网络是否能够正常联通
ping www.baidu.com 2、关闭防火墙 #关闭防火墙 systemctl stop firewalld #禁用防火墙 systemctl disable firewalld #查看防火墙状态 systemctl status firewalld 3、配置主机名(方便后期Hadoop集群服务) #给3台虚拟机设置主机名分别为hadoop01、hadoop02和hadoop03。 #在第一台机器操作 hostnamectl set-hostname hadoop01 #在第二台机器操作 hostnamectl set-hostname hadoop02 #在第三台机器操作 hostnamectl set-hostname hadoop03 设置完毕后在ssh工具处刷新即可
1 插入排序 1.1基本思想: 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 1.2直接插入排序: 当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与 array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移。
直接插入排序的特性总结: 1. 元素集合越接近有序,直接插入排序算法的时间效率越高 2. 时间复杂度:O(N^2) 3. 空间复杂度:O(1),它是一种稳定的排序算法 4. 稳定性:稳定 写排序算法的一种好习惯就是先写一个单趟排序,再使用循环来实现整体。假设实现一个升序,首先创建一个变量end=0,然后tmp保存a[end+1]的值,写一个while循环,结束条件是end<0,进入循环判断tmp和a[end]的大小,如果tmp小则将a[end]的值覆盖到a[end+1],然后end--,跳出循环,此时将tmp插入到a[end+1]也就是a[0]这个位置。如果tmp>=a[end],直接退出循环。然后将tmp的值插入到a[end+1]这个位置。然后最外层套一层循环,每次单趟结束后end++。
// 插入排序 void InsertSort(int* a, int n) { for (int i = 0; i < n - 1; i++) { int end =i; int tmp = a[end + 1]; while (end >= 0) { if (tmp < a[end]) { a[end + 1] = a[end]; } else { break; } end--; } a[end + 1] = tmp; } } 2.
WebSocket是一种网络通信协议,它在单个TCP连接上提供全双工的通信信道。在本篇文章中,我们将探讨如何在Python中使用WebSocket实现实时通信。
websockets是Python中最常用的网络库之一,也是websocket协议的Python实现。它不仅作为基础组件在众多项目中发挥着重要作用,其源码也值得广大“Python玩家”研究。
官网:https://github.com/python-websockets/websockets
1. 什么是WebSocket? WebSocket协议是在2008年由Web应用程序设计师和开发人员创建的,目的是为了在Web浏览器和服务器之间提供更高效、更低延迟的双向通信。它允许客户端和服务器在任何时候发送消息,无需重新建立TCP连接。WebSocket可以在Web浏览器和服务器之间传输文本和二进制数据,使得构建实时Web应用程序变得更加简单。
2. 在Python中使用WebSocket Python中有多个库可以帮助我们使用WebSocket,如:websockets、aiohttp等。在本文中,我们将使用websockets库来演示WebSocket编程。
要安装websockets库,你可以使用pip:
pip install websockets 3. 创建WebSocket服务器 使用websockets库,我们可以轻松地创建一个WebSocket服务器。以下是一个简单的示例:
import asyncio import websockets async def echo(websocket, path): async for message in websocket: print(f"Received message: {message}") await websocket.send(f"Echo: {message}") start_server = websockets.serve(echo, "localhost", 8765) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever() 在这个示例中,我们定义了一个名为echo的协程函数,它接收两个参数:websocket和path。该函数使用async for循环读取客户端发送的消息,并将消息发送回客户端。
然后,我们使用websockets.serve()函数创建一个WebSocket服务器,监听本地主机的8765端口。最后,我们使用asyncio的事件循环启动服务器。
4. 创建WebSocket客户端 要创建一个WebSocket客户端,我们同样可以使用websockets库。以下是一个简单的客户端示例:
import asyncio import websockets async def main(): async with websockets.connect("ws://localhost:8765") as websocket: message = "Hello, server!" await websocket.send(message) print(f"Sent: {message}") response = await websocket.
SQL 注入 攻击者在输入字段中插入恶意的 SQL 语句,实现对数据库的增删改查。
可以在 http 请求中通过查找 SQL 注入语句中的 union、select、sleep 等关键字来判断 SQL 注入的流量
dvwa SQL Injection low 为例
poc
1' and 1=2 union select 1,database() # 筛选目的 ip 为靶场服务器并且为 http 的流量
ip.dst==10.9.47.172 && http 找到 SQL 请求的 http 报文
可以看到 union 、 select 、 database 等 SQL 注入的关键字
id=1%27+and+1%3D2+union+select+1%2Cdatabase%28%29+%23 解码后即可看到原始 poc
XSS XSS 跨站脚本攻击,是通过注入 JavaScript脚本来实现恶意弹窗、盗取 Cookie、传播蠕虫病毒等效果
XSS 使用 JavaScript 语句,可以同通过 JavaScript 中的 <script> 标签来判断 XSS 的流量
dvwa XSS(Reflected) low 为例
攻防世界——web新手模式(全解) web新手模式 攻防世界——web新手模式(全解) 一.Training-WWW-Robots二.PHP三.view_source 四.robots五.bachup六.cookie 七.weak-auth八.simple-php九.baby-web 一.Training-WWW-Robots 1.robots协议:它是一个网站与搜索引擎之间的一种协议,它主要是告诉爬虫它们那些可以爬那些不能爬,但这个协议并不是一个规范,所以就很鸡肋(相当于写出来让别人看看而已,没啥用)
2.进入环境后,我们啥都不用想,直接来一个robots.txt,看看网站里面有什么信息;
3.我们可以从这里观察到,它上面有一个f10g.php文件不允许我们进入,接下来我们就用好奇的金手指复制一下,然后再将robots.txt替换成f10g.php,进入界面即可得到flag;
4.输入flag即可正确。
二.PHP 前面写过可以看我之前的文章https://blog.csdn.net/AuroraMiraitowa/article/details/134344275?spm=1001.2014.3001.5501
三.view_source 额,这又是一道送分题,我给各位一个建议,你打CTF时多看看源码也不错,说不定出题人意想不到的把flag给注释掉了…
这道题就是直接ctrl+u或者F12即可,没啥讲的,直接上图
输入flag即可正确
四.robots 1.获取场景后出现此情景
2.发现什么没有,这时候我们去查一下什么叫robots。
3.可以看出robots协议主要内容就是查看一个站点根目录是否存在robots.txt文件,我们尝试输入:
4.发现成功进入后它提示我们flag在f1ag_1s_h3re.php这个文件中,进入后得到flag,如图:
5.输入flag即可成功。
五.bachup 前面写过可以看我之前的文章
https://blog.csdn.net/AuroraMiraitowa/article/details/134344275?spm=1001.2014.3001.5501
六.cookie 1.题目描述:
X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?‘
2.我们先查阅资料了解什么是cookie。
3.解题思路:
打开开发者工具,找到cookie,look here的值是cookie.php
4.则查看cookie.php,查看http响应包。
flag: cyberpeace{cd9ba1249b6b0beaf71d82546d3b983c}
七.weak-auth 前面写过可以看我之前的文章
https://blog.csdn.net/AuroraMiraitowa/article/details/134344275?spm=1001.2014.3001.5501
八.simple-php 前面写过可以看我之前的文章
https://blog.csdn.net/AuroraMiraitowa/article/details/134344275?spm=1001.2014.3001.5501
九.baby-web 前面写过可以看我之前的文章
https://blog.csdn.net/AuroraMiraitowa/article/details/134344275?spm=1001.2014.3001.5501
h5或uniapp或微信小程序,实现左上角返回到指定页面,侧滑左滑返回指定页面,安卓物理返回键返沪指定页面 uniapp开发app,(非微信小程序)uniapp写的微信小程序 uniapp开发app,(非微信小程序) 自定义的左上角返回按钮
<i class="iconfont icon-zuojiantou" style="font-size: 24px;" @click="goBack()"></i> 方法
goBack(){ let pages = getCurrentPages(); //函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面 var num=pages.length //当前页面栈总数 var backnum //需要返回的页数 for(var i =0;i<num;i++){ //循环找到指定页面路由所在的页数 if(pages[i].route=='pages/xxx/xxx'){ console.log(pages[i].route,'pages[i].route') //'pages/xxx/xxxx'你需要返回的页面路由 backnum=num-i-1 //计算返回的层数,总数-指定页面页数-1 } } console.log(backnum,'backnum') uni.navigateBack({ delta:backnum //返回的页面数,如果 delta 大于现有页面数,则返回到首页。 }) }, 安卓物理返回键监听,该方法与生命周期函数同级,也可以尝试放在methods里面。
onBackPress(options){//这里是监听安卓物理返回键或者侧滑左滑返回方式 if(options.from=='navigateBack'){ return false }else if(options.from=='backbutton'){//物理键默认返回上一级,我们在这里进行了处理 this.goBack()//走我们自己的方法 return true }else if('xxxx){//也可以是其他方式 } } uniapp写的微信小程序 思路,因为uniapp写的微信小程序用onBackPress监听不到不支持监听安卓物理返回,所以换了个想法,默认认为是安卓物理键或者侧滑左滑返回:如果是我自己的按钮,就走goBackFn的方法,把androidReturn设置为true,离开页面就不会执行beforeDestroy里面的方法;如果是物理按钮返回,那么离开页面,会触发生命周期函数beforeDestroy,所以在销毁页面前,判断是否为物理按键返回,是则调用goBack
自己写的左上角返回按钮
<i class="iconfont icon-zuojiantou" style="font-size: 24px;" @click="goBackFn()"></i>
data里面定义参数
androidReturn:true,//默认安卓物理键返回 定义方法
goBack(){ let pages = getCurrentPages(); //函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面 var num=pages.