Linux CentOS7 离线安装gcc环境

环境有网络的情况,推荐在线安装,这样安装不容易出错,安装命令如下: yum install -y gcc gcc-c++ 有些环境是没有公网环境的,此时需要离线安装配置gcc环境: 离线安装步骤如下: 先下载一个 gcc-c++-4.8.5-39.el7.x86_64.tar.gz(点击跳转百度云盘) 提取码:krca 下载完成后上传到系统中,进行解压 解压完后进入解压后的文件夹 可以逐个安装,逐个安装命令 rpm -ivh filename.rpm 但是逐个安装有个毛病,不知道顺序的情况下不用强制安装就可能报缺少依赖。虽然我提供的安装包里依赖项都有,但是很耽误时间。所以不推荐 所以我还是喜欢这个粗暴的一起安装,我测过了,可以用。不过我电脑没有别的环境,不需要考虑其他软件兼容性 rpm -Uvh *.rpm --nodeps --force 这条命令还是解释一下 -Uvh: U=升级安装 v=显示执行过程 h=套件安装时列出标记 --nodeps: 安装时不验证依赖关系 --force:强制安装 安装完成后执行 gcc -v 出图中这样就算是安装完成了 安装完成效果图 查看一下安装结果 gcc -v 出来版本信息就是安装成功了。

【Qt+FFmpeg】解码播放本地视频(一)

目录 一、解码线程的设计 1.解码初始化 (1)注册所有组件 (2)打开本地片源 (3) 查找视频流 (4)查找对应的解码器 (5)打开解码器​ 2.run函数循环解码 (1)图片转成RGB格式 (2)发送图片信号 (3)发送一张图片计数+1 (4)延时操作——1s显示25帧图片 二、播放窗口类的设计 1.创建窗口 2.创建解码线程 3.开启解码线程 4.绑定信号槽接收图片信号 5.界面刷新显示 一、解码线程的设计 1.解码初始化 (1)注册所有组件 av_register_all();//第一步注册所有组件 (2)打开本地片源 (3) 查找视频流 (4)查找对应的解码器 (5)打开解码器 以上就是解码的初始化工作,附上完整源码 #include "video.h" video::video(QString filename) { this->m_stop=false; this->current_frame_index = 0; openVideoFile(filename); } void video::openVideoFile(QString filename) { qDebug()<<"1.注册所有组件"; av_register_all();//第一步注册所有组件 qDebug()<<"2.打开视频输入文件"; //给avformat_context开空间 avformat_context = avformat_alloc_context(); //avformat_open_input参数一:视频文件格式上下文->AVFormatContext->包含了视频信息(视频名、时长、大小等) //参数二:文件路径 qDebug()<<"打开"<<filename<<"视频文件进行播放"; int avformat_open_result = avformat_open_input(&avformat_context,filename.toStdString().c_str(),NULL,NULL); if (avformat_open_result != 0) { //获取异常信息 char* error_info = new char[32]; av_strerror(avformat_open_result, error_info, 100); qDebug()<<QString("

springboot整合支付宝沙箱支付

springboot整合支付宝沙箱支付 1.简介 支付宝开发平台地址:https://open.alipay.com/develop/sandbox/app 对于学生来说,目前网上确实没有比较统一而且质量好的支付教程。因为支付对个人开发者尤其是学生来说不太友好。因此,自己折腾两天,算是整理了一篇关于支付宝沙箱支付的文章。况且个人是不能申请支付(wx和alipay)都一样。幸亏有支付宝沙箱这个环境。其实跟正式环境差不多,就换下配置即可。 整体流程 2.配置说明 要记住这几个重要的配置 appId 这个是appIdprivateKey 商户私钥publicKey 支付宝公钥, 即对应APPID下的支付宝公钥notifyUrl 支付成功后异步回调地址(注意是必须是公网地址)returnUrl #支付后回调地址signType 签名类型 一般写 RSA2charset utf-8format json#网关地址 在支付宝开发平台复制拷贝下来gatewayUrl: https://openapi.alipaydev.com/gateway.dologPath: F:\ 日志路径 3.springboot整合支付宝沙箱支付代码 需要导入依赖 <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.33.39.ALL</version> </dependency> 3.1 配置类 package com.hjt.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; @RefreshScope @Configuration @ConfigurationProperties(prefix = "alipay") @Data /*** * @author: hjt * @Date: 2020/11/13/19:19 * @Description: 支付宝配置类(读取配置文件) */ public class MyAliPayConfig { /** * APPID */ private String appId; /** * 商户私钥, 即PKCS8格式RSA2私钥 */ private String privateKey; /** * 支付宝公钥 */ private String publicKey; /** * 服务器异步通知页面路径,需http://格式的完整路径 * 踩坑:不能加?

Java Web入门之Ajax的用法详解(附代码和实战)

创作不易 觉得有帮助或需要源码可以点赞关注收藏后评论区留言 文章目录 前言一、Ajax与传统的Web应用模式的对比二、Ajax使用的技术三、XMLHttpRequest对象的具体使用四、与服务器通信--发送请求与处理响应五、Ajax重构 前言 Ajax是一个客户端技术 是更加先进 标准化和高效的Web开发技术 提示:以下是本篇文章正文内容,下面案例可供参考 一、Ajax与传统的Web应用模式的对比 在传统的Web应用中 页面中用于的每一次操作都将触发一次返回Web服务器的HTTP请求 服务器将进行相应的处理然后返回一个HTML页面给客户端 而在Ajax应用中 页面中用户的操作将通过Ajax引擎与服务器端进行通信 然后将返回结果提交给客户端页面的Ajax引擎 再由Ajax引擎来决定将这些数据插入到页面的指定位置 所以在Ajax开发模式中可以通过JavaScript实现在不刷新整个页面的情况下 对部分数据进行更新 从而降低了网络流浪 给用户带来更好的体验 二、Ajax使用的技术 Ajax是XMLHttpRequest对象和JavaScript XML CSS DOM等多种技术的组合 其中只有XMLHttpRequest对象是新技术 其他的均为已有技术 1:XMLHttpRequest对象 是核心技术 它是一个具有应用程序接口的JavaScript对象 能够使用超文本传输协议连接一个服务器 是微软公司为了满足开发者的需要推出的 2:XML 它是可扩展的标记语言的缩写 它提供了用于描述结构化数据的格式 适用于不同应用程序间的数据交换 而且这种交换不以预先定义的一组数据结构为前提 增强了可扩展性 XMLHttpRequest对象与服务器交换的数据通常采用XML格式 在XML文档中 元素以树形分层结构排列 其实<resume>为根元素 其他的都是该元素的子元素 3:JavaScript 它是一种在Web页面中添加动态脚本代码的解释性程序语言 具体介绍可以参考我这篇博客 JavaScript 4:CSS 样式表 5:DOM 文档对象模型 三:XMLHttpRequest对象的具体使用 1:初始化XMLHttpRequest对象 IE浏览器初始化如下 var http_request=new ActiveXObject("Msxml2.XMLHTTP"); 或者 var http_request=new ActiveObject("Microsoft.XMLHTTP"); 非IE浏览器 var http_request=new XMLHttpRequest(); 两种情况的实例化代码如下 if(window.XMLHttpRequest){ http_request=new XMLHttpRequest(); } else if(window.

基于神经网络的房价预测,房价预测 神经网络

1、什么是深度学习,促进深度学习的策略 最近几年,人工智能技术快速发展,深度学习领域迎来爆发,越来越多的人才加入到深度学习行业。很多小白在初学深度学习的时候,经常会遇到各种各样的问题,如何才能快速入门呢? 我们知道,深度学习是一个将理论算法与计算机工程技术紧密结合的领域,需要扎实的理论基础来帮助你分析数据,同时需要工程能力去开发模型和部署服务。所以只有编程技能、机器学习知识、数学三个方面共同发展,才能取得更好的成果。 按我们的学习经验,从一个数据源开始——即使是用最传统、已经应用多年的机器学习算法,先完整地走完机器学习的整个工作流程,不断尝试各种算法深挖这些数据的价值,在运用过程中把数据、特征和算法搞透,真正积累出项目经验,才能更快、更靠谱的掌握深度学习技术。 为了帮助行业人才更快地掌握人工智能技术,中公优就业联合中科院自动化研究所专家,开设人工智能《深度学习》课程,通过深度剖析人工智能领域深度学习技术,培养人工智能核心人才。 在为期5周的课程学习中,你将全面了解AI深度学习的相关知识,掌握人工神经网络及卷积神经网络原理、循环神经网络原理、生成式对抗网络原理和深度学习的分布式处理,并应用于企业级项目实战。 通过对专业知识的掌握,你会更系统地理解深度学习前沿技术,并对学会学习(元学习)、迁移学习等前沿主流方向发展有自己的想法。 谷歌人工智能写作项目:小发猫 2、我对自己未来的职业发展之路将如何打算?我的初步选择是什么? 其实你的选择还是比较多的,主要还要看性格的问题,性格外向的话,那你的选择就会非常大了,就比如说销售,通常来说如果性格内向有两个选择分别是找一份需要长跟人打交道的工作锻炼自己,还有就是找一份不用跟人打交道的工作,而长跟人打交道的工作,发展最好的就是销售,所以也是最好的选择人工神经网络预测房价开题报告。而不同跟人打交道的工作,现在发展最好的是人工智能编程,就像我们使用的一些智能手机、智能音箱还有智能机器人等等,这些都是经由人工智能编程来实现的,而且现在还有很多的朋友想转行做人工智能,不过只能去一些机构去学习,虽然这些机构讲的也还不错,会让你理论和实践相结合,当然找工作也还可以,不过还是有顾虑,对此,为大家分享一下,机构讲课的一些内容,给大家做个参考。就以深度学习原理到进阶实战来说,需要学习的有: 神经网络 从生物神经元到人工神经元 激活函数Relu、Tanh、Sigmoid 透过神经网络拓扑理解逻辑回归分类 透过神经网络拓扑理解Softmax回归分类 透过神经网络隐藏层理解升维降维 剖析隐藏层激活函数必须是非线性的原因 神经网络在sklearn模块中的使用 水泥强度预测案例及绘制神经网络拓扑 BP反向传播算法 BP反向传播目的 链式求导法则 BP反向传播推导 不同激活函数在反向传播应用 不同损失函数在反向传播应用 Python实现神经网络实战案例 TensorFlow深度学习工具 TF安装(包含CUDA和cudnn安装) TF实现多元线性回归之解析解求解 TF实现多元线性回归之梯度下降求解 TF预测california房价案例 TF实现Softmax回归 Softmax分类MNIST手写数字识别项目案例 TF框架模型的保存和加载 TF实现DNN多层神经网络 DNN分类MNIST手写数字识别项目案例 Tensorboard模块可视化 其实,如果性格内向想做销售还需要考虑适应得问题,毕竟你以前习惯了,现在突然改变一下生活方式,如果适应不了销售的环境,那你改变性格这一想法就得要重新考虑一下了。不过如果选择一些不用跟人打交道的工作,那你可能适应的比较好,因为你一直就是这样生活的,不会出现不习惯的问题,也能让你更自在,毕竟舒服的生活是大多数人的追求吗,另外你也可以在好好的考虑一下,不用急着做决定,毕竟一分工作关乎到以后的生活,还是非常重要的。 3、大数据、云计算、人工智能之间有什么样的关系? 云计算最初的目标是对资源的管理,管理的主要是计算资源,网络资源,存储资源三个方面。想象你有一大堆的服务器,交换机,存储设备,放在你的机房里面,你最想做的事情就是把这些东西统一的管理起来,最好能达到当别人向你请求分配资源的时候(例如1核1G内存,10G硬盘,1M带宽的机器),能够达到想什么时候要就能什么时候要,想要多少就有多少的状态。 这就是所谓的弹性,俗话说就是灵活性。灵活性分两个方面,想什么时候要就什么时候要,这叫做时间灵活性,想要多少就要多少,这叫做空间灵活性。 物理机显然是做不到这一点的。虽然物理设备是越来越牛了: 服务器用的是物理机,例如戴尔,惠普,IBM,联想等物理服务器,随着硬件设备的进步,物理服务器越来越强大了,64核128G内存都算是普通配置。 网络用的是硬件交换机和路由器,例如思科的,华为的,从1GE到10GE,现在有40GE和100GE,带宽越来越牛。 存储方面有的用普通的磁盘,也有了更快的SSD盘。容量从M,到G,连笔记本电脑都能配置到T,更何况磁盘阵列。所以人们想到的第一个办法叫做虚拟化。所谓虚拟化,就是把实的变成虚的。 物理机变为虚拟机:cpu是虚拟的,内存是虚拟的。 物理交换机变为虚拟交换机:网卡是虚拟的,交换机是虚拟的,带宽也是虚拟的。 物理存储变成虚拟存储:多块硬盘虚拟成一个存储池,从中虚拟出多块小硬盘。 虚拟化很好的解决了上面的三个问题: 人工运维:虚拟机的创建和删除都可以远程操作,虚拟机被玩坏了,删了再建一个分钟级别的。虚拟网络的配置也可以远程操作,创建网卡,分配带宽都是调用接口就能搞定的。 浪费资源:虚拟化了以后,资源可以分配的很小很小,比如1个cpu,1G内存,1M带宽,1G硬盘,都可以被虚拟出来。 隔离性差:每个虚拟机有独立的cpu, 内存,硬盘,网卡,不同虚拟机的应用互不干扰。 在虚拟化阶段,领跑者是VMware,可以实现基本的计算,网络,存储的虚拟化。 当然这个世界有闭源,就有开源,有Windows就有Linux,有iOS就有Andord,有VMware,就有Xen和KVM。在开源虚拟化方面,Citrix的Xen做的不错,后来Redhat在KVM发力不少。 对于网络虚拟化,有Open vSwitch,可以通过命令创建网桥,网卡,设置VLAN,设置带宽。 对于存储虚拟化,对于本地盘,有LVM,可以将多个硬盘变成一大块盘,然后在里面切出一小块给用户。 但是虚拟化也有缺点,通过虚拟化软件创建虚拟机,需要人工指定放在哪台机器上,硬盘放在哪个存储设备上,网络的VLAN ID,带宽具体的配置,都需要人工指定。所以单单使用虚拟化的运维工程师往往有一个Excel表格,有多少台机器,每台机器部署了哪些虚拟机。所以,一般虚拟化的集群数目都不是特别的大。 为了解决虚拟化阶段的问题,人们想到的一个方式为池化,也就是说虚拟化已经将资源分的很细了,但是对于如此细粒度的资源靠Excel去管理,成本太高,能不能打成一个大的池,当需要资源的时候,帮助用户自动的选择,而非用户指定。所以这个阶段的关键点:调度器Scheduler。 于是VMware有了自己的vCloud。 于是基于Xen和KVM的私有云平台CloudStack,后来Citrix将其收购后开源。 当这些私有云平台在用户的数据中心里面卖的其贵无比,赚的盆满钵满的时候。有其他的公司开始了另外的选择,这就是AWS和Google,开始了公有云领域的探索。 AWS最初就是基于Xen技术进行虚拟化的,并且最终形成了公有云平台。也许AWS最初只是不想让自己的电商领域的利润全部交给私有云厂商吧,于是自己的云平台首先支撑起了自己的业务,在这个过程中,AWS自己严肃的使用了自己的云计算平台,使得公有云平台不是对于资源的配置更加友好,而是对于应用的部署更加友好,最终大放异彩。 公有云的第一名AWS活的很爽,第二名Rackspace就不太爽了,没错,互联网行业嘛,基本上就是一家独大。第二名如何逆袭呢?开源是很好的办法,让整个行业大家一起为这个云平台出力,兄弟们,大家一起上。于是Rackspace与美国航空航天局(NASA)合作创始了开源云平台OpenStack。OpenStack现在发展的和AWS有点像了,所以从OpenStack的模块组成,可以看到云计算池化的方法。 OpenStack包含哪些组件呢? 计算池化模块Nova:OpenStack的计算虚拟化主要使用KVM,然而到底在那个物理机上开虚拟机呢,这要靠nova-scheduler。 网络池化模块Neutron:OpenStack的网络虚拟化主要使用Openvswitch,然而对于每一个Openvswitch的虚拟网络,虚拟网卡,VLAN,带宽的配置,不需要登录到集群上配置,Neutron可以通过SDN的方式进行配置。

使用netty编写客户端,实现同步发送消息并接收返回结果

使用netty编写客户端,实现同步发送消息并接收返回结果 描述 在网上找了很久都没有找到自己想要的代码,今天就自己研究了一下,使用了CountDownLatch实现了发送之后可以接收返回结果。 服务端 MyServerNetty package com.chen.netty; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; public class MyServerNetty { private int port; public MyServerNetty(int port) { this.port = port; } public void action(){ EventLoopGroup bossGroup = new NioEventLoopGroup(); NioEventLoopGroup workerGroup = new NioEventLoopGroup(); try{ ServerBootstrap serverBootstrap = new ServerBootstrap(); ((ServerBootstrap)((ServerBootstrap)((ServerBootstrap)serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)).option(ChannelOption.SO_BACKLOG, 128)).childOption(ChannelOption.SO_KEEPALIVE, true).handler(new LoggingHandler(LogLevel.INFO))).childHandler(new ChannelInitializer<SocketChannel>() { protected void initChannel(SocketChannel socketChannel) throws Exception { socketChannel.

css实现向右箭头

html部分 <text class="gl"></text> css部分 .gl{ width: 6px; height: 6px; border-left: 1px solid #999; border-bottom: 1px solid #999; transform: translate(0,0) rotate(-135deg); margin-left: auto; }

vue引入高德地图多种方法实现

vue引入高德地图多种方法实现 第一种按 NPM 方式全局使用 Loader 安装依赖 在main.js中进行全局注册 在页面中使用 第二种按 NPM 方式局部使用 Loader 安装依赖 在需要使用地图的页面进行初始化 第三种直接加载 JSAPI 脚本 vue项目目录的public/index.html文件下添加以下代码 在需要使用的页面直接使用 如果此时报运行报错 .eslintrc.js里面加上下面这段代码即可 第一种按 NPM 方式全局使用 Loader 安装依赖 npm install @amap/amap-jsapi-loader 在main.js中进行全局注册 import AMapLoader from '@amap/amap-jsapi-loader'; // 如果需要密钥 window._AMapSecurityConfig = { securityJsCode: '没有则不用' // 开发环境使用 } AMapLoader.load({ key: "", // 申请好的Web端开发者Key,首次调用 load 时必填 version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15 plugins: [], // 需要使用的的插件列表,如比例尺'AMap.Scale'等 AMapUI: { // 是否加载 AMapUI,缺省不加载 version: '1.1', // AMapUI 缺省 1.

亚马逊云科技 Build On 2022 - AIot 第二季物联网专场实验心得

亚马逊云科技 Build On 2022 - AIot 第二季物联网专场实验心得 大家好Build On是 什么本次Build On主题介绍参与本场活动您能学到什么本场实验所用到的AWS服务实验部分1.线上报名(2022.08.06)2.实验过程实验解说搭建视频视频链接地址:https://www.bilibili.com/video/BV1dS4y1t7SK/ 2.1、流程2.1.1、注意事项1、保持服务区域一致2、使用IAM用户操作3、服务ARN 2.1.2、错误解决1、如在cloud9更新源和安装包时遇到如下错误2、 AWS::S3::PermanentRedirect3、json格式错误4.创建create-stream-processor错误 2.2、所使用的命令2.2.1、rekognition 部分2.2.2、S3部分2.2.3、SNS部分2.2.4、KVS 3、实验结果3.1、任务校验3.1.1、SNS邮箱订阅校验3.1.2、SNS通知到邮箱3.1.3、S3文件写入查看 4、总结 感谢阅读 大家好 Hello,各位好,很高兴第二次参与了AWS&CSDN举办的 Build On 活动,这一期活动的主题是物联网 Build On是 什么 亚马逊云科技开发者Build On是由亚马逊团队策划、开发者社区联合打造的动手实操系列活动。它是以现实技术应用和需求场景为核心,结合时下重点技术领域 与亚马逊云科技的前沿技术方案打造的,面向开发人员、IT技术人员、或技术领域决策者的必备云课程。 2022年亚马逊云科技Build On系列活动将围绕数据、软件、架构、运维和前沿技术领域的核心技术领域展开,旨在通过提供专业技术方向的动手实验、助教指 导、专家答疑等服务,帮助开发者了解相关领域的经典技术框架以及经典案例最佳实践,并最终通过精心设计实验流程环境,由技术专家手把手带领开发者亲自设 计、部署和操作。话题将涵盖云计算入i门基础和应用专业级服务应用,如机器学习、loT技术、Serverless、 基础设施等,覆盖从初创项目到成熟企业的全场景全生命 周期的商业实战案例,无论您是刚接触到云的开发者,还是开发经验丰富的专家,您都将从Build On活动中获得实质性收获。 本次Build On主题介绍 在居家安防监控领域,基于实时视频的移动检测,发现监控环境中人、宠物、包裹等的出现,并且能实时地将检测结果通知给身处任何地方的用户是其重要的应用场景之一。但在这一场景的技术实现中面临如下的挑战:一是基于摄像头的视频检测通知,存在大量由于风、雨、移动的车等并非用户关注的事件误报,严重影响用户的使用体验。 二是实现这一方案涉及的技术领域与复杂度很高,如设备端事件检测和触发、视频编解码处理、视频存储、机器视觉等,需要团队具备较强的技术和专业能力。本实验将以最小化原型,体现由 Raspberry Pi Zero 2 W 加摄像头作为安防设备端,并使用 Amazon KVS 和 Amazon Rekognition Streaming Video Events 如何很好地解决了上述挑战,实现实时智能视觉识别。 活动链接:https://marketing.csdn.net/p/dba35524bec59472d5b2e1e7b48b7403 实验手册:https://aws.amazon.com/cn/getting-started/hands-on/intelligent-visual-recognition-with-kvs-rekognition/ 参与本场活动您能学到什么 带摄像头的IoT设备集成开发技能端云之间的视频流数据统一管理及调度开 发技能学习云上视频流处理和Al视觉识别检测实现方法完成基于云上识别检测结果触发设备端操作的完整AloT闭环最佳实践经验 本场实验所用到的AWS服务 Amazon IAMAmazon S3Amazon KVSAmazon Cloud9Amazon RekognitionAmazon SNS

WEB攻防-通用漏洞&SQL注入-sqlmap基本使用&墨者靶场

目录 知识点 SQLMAP -什么是SQLMAP? -它支持那些数据库注入? -它支持那些SQL注入模式? -它支持那些其他不一样功能? -使用SQLMAP一般注入流程分析? SQL注入类型: 案例演示 SQL注入-墨者-SQL手工注入漏洞测试(Db2数据库) SQL注入-墨者-SQL手工注入漏洞测试(SQLite数据库) 其他注入方法介绍 sqlmap -r 知识点 1、数据库注入-Oracle&Mongodb 2、数据库注入-DB2&SQLite&Sybase 3、SQL注入神器-SQLMAP安装使用拓展 SQLMAP -什么是SQLMAP? sqlmap是一个开源渗透测试工具,可以自动检测和利用sql注入漏洞并接管数据服务器。总体来说只要配备sql的漏洞都可以使用sqlmap。 -它支持那些数据库注入? 不支持nosql数据库 -它支持那些SQL注入模式? 基于布尔的盲注、基于时间的盲注、基于错误的、基于union查询、堆叠查询和带外 -它支持那些其他不一样功能? 代理注入:在注入的时候,代理可以让我们随时看到sqlmap的进度。当地址被waf拉入黑名单可以使用代理绕过waf。 -使用SQLMAP一般注入流程分析? 判断注入点-判断数据库-判断高低权限(access不区分高低权限)-通过权限的不同使用不同的方法 SQL注入类型: 1.数据库注入 - access mysql mssql oracle mongodb postgresql等 2.数据类型注入 - 数字型 字符型 搜索型 加密型(base64 json)等 3.提交方式注入 - get post cookie http头等 4.查询方式注入 - 查询 增加 删除 更新 堆叠等 5.复杂注入利用 - 二次注入 dnslog注入 绕过bypass等 案例演示 SQL注入-墨者-SQL手工注入漏洞测试(Db2数据库) 启动靶机 发现注入点 sqlmap语句: python.

记一个Stream排序问题(String类型排序问题)

我的实体类中,需要排序的字段是用String类型就行存储的,但实际存储的都是数值 List<ShopActiveRule> shopActiveRules = shopActiveRuleList.stream().sorted(Comparator.comparing(ShopActiveRule::getFavourableCondition).collect(Collectors.toList()); 然后排序之后发现,9.9会被排在19.9之后,于是查看源码 发现String类型是根据字符来进行排序的,所以会出现上述问题,对排序进行修改之后代码如下 List<ShopActiveRule> shopActiveRules = shopActiveRuleList.stream().sorted(Comparator.comparing(ShopActiveRule::getFavourableCondition, Comparator.comparingDouble(Double::parseDouble))).collect(Collectors.toList()); 可以正常得到想要的结果。 这个问题类似于数据库中字符串的排序,数据库中可在字段后面+0实现正常排序效果。

【Git的学习笔记】老板让我用Git提交,但我还没学过Git

Git 分布式版本控制工具 文章目录 Git 分布式版本控制工具1.目标2.概述2.1、开发中的实际场景2.2 版本控制的方式2.3 SVN2.4 Git2.5 Git工作流程图 3. Git安装与常用命令3.1 Git环境配置3.1.1 下载与安装3.1.2 基本设置3.1.3 为常用指令设置别名3.1.4 解决Git Bash乱码问题 3.2 获取本地厂库3.3 基础操作指令3.3.1 查看修改的状态(status)3.3.2 添加工作区到暂存区(add)3.3.3 提交暂存区到本地仓库(commit)3.3.4 查看提交日志3.3.5 版本回退3.3.6 添加文件至忽略列表 3.4 分支3.4.1 查看本地分支3.4.2 创建本地分支3.4.4 切换分支3.4.6 合并分支3.4.7 解决冲突 4 Git远程仓库4.1 常用的托管服务(远程仓库)4.2 操作远程仓库4.2.1 添加远程仓库4.2.2 查看远程仓库4.2.3 推送到远程仓库4.2.4 从远程仓库克隆4.2.5 从远层仓库中抓取和拉取4.2.6 解决合并冲突 最近有了自己的第一份实习,老板问我会不会Git。 利用国庆假期就学了一下,真的很方便。 1.目标 了解Git基本概念能够钙塑git工作流程能够使用Git常用命令熟悉Git代码托管服务能够使用idea操作git 2.概述 2.1、开发中的实际场景 场景一:备份 ​ 小明复杂的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲,几个月的努力付之东流。 场景二:代码还原 ​ 这个项目中需要有一个很复制的功能,老王摸索了一个星期终于有眉目了,可是这被改得面目全非的代码已经回不到从前了,什么地方能买到哆啦A梦的时光机啊? 场景三:协同开发 ​ 小刚和小强先后从文件服务器上下载了同一个文件:`Analysis.java`。小刚在`Analysis.java`文件中的第30行声明了一个方法,叫`count()`,先保存到了文件服务器上;小强在`Analysis.java`文件中的第50行声明了一个方法,叫`sum()`,也随后保存到了文件服务器上,但是小强的代码将小刚的代码覆盖掉了,所以服务器中这个文件没有`count()`方法。所以需要让多人协同开发。 场景四:追溯问题代码的编写人和编写时间 ​ 老王是另一位项目经理,每次因为项目进度挨骂之后,他都不知大该扣哪个程序员的工资!就拿这次来说吧,有个Bug调试了30多个小时才知道是因为相关属性没有在应用初始化时复制!但没有程序员承认是谁干的。 怎么解决这些问题呢? 版本控制,每一次修改都相当于一次新的版本。 2.2 版本控制的方式 集中式版本控制工具 版本库是几种存放在中央服务器的,team里每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。个人修改后提交到中央版本库。 问题: 假如服务器断网了,那么所有人就都不能再提交代码了。假如服务器磁盘不够了,那么也无法提交代码了。 举例:SVN和CVS

代理是什么及如何使用

什么是代理? 代理是什么?简单举个例子,你想和某某明星说话,但是某明星肯定不会直接和你说话(除非你很有身份,当我没说),这时候你就得去找他的助理交流,然后助手再和这个明星交流。对于明星来说,助手就是代理,你们其他人沟通都不要全部来找我了,全去找我的助手吧。 在代码中也差不多是这样一个场景,直接交流就相当于直接调用目标类的方法(非代理),而代理就是新创建一个类(我们叫他代理类),由这个类去调用目标类的方法,然后其他类就不去直接调用目标类的方法了,调用方式改成其他类去告诉代理类,让代理类来调用目标类方法。 我这里就用一个故事来说明:A、B和C是朋友,平时都有交流。但是某一天,B生A的气了,这时候B就不和A说话了,于是B告诉A说:要想和我说什么叫我做什么,你去找C说,C听完再来告诉我。于是C就成为B的收话员(代理人)了,什么事情以后都由C来叫B做。C收到A的消息再告诉B去做事,这就是代理。 当然A和B能对话,B也可以找C来做自己的代理人,这都是没问题的 非代理: 开始A可以直接和B交流(直接调用B的方法),如下: A类代码: public class A { private B b = new B(); public void let_B_do(String something){ b.doSomething(something); } public static void main(String[] args) { A a = new A(); a.let_B_do("Sweep"); } } B类代码: public class B { public void doSomething(String something){ System.out.println("B -> " + something); } } A直接叫(调用)B去做事:B -> Sweep 不使用代理就是A类直接去调用B类的方法。 使用代理: B生气了,A就无法和B交流了(A无法直接调用B类的方法了),于是A就去找C说(调用C的方法),叫C告诉B(C调用B)去做某事,使用了C类就相当于使用了代理 A类代码: public class A { private C c = new C(); public void let_C_info_B_do(String something){ c.

windows下配置pytorch环境(CUDA10.1)

一、安装CUDA前的准备(1)查看自己N卡支持的CUDA版本,打开NVIDIA控制面板,选择系统信息(2)NVIDIA官网下载对应CUDA版本(3)CUDNN的下载 二、安装过程三、安装Anaconda切换清华源镜像 四、安装pytorchpytorch安装成功验证 参考文章 CUDA、CUDNN在windows下的安装及配置 如何搭建Pytorch环境(Windows版) windows conda 安装 PyTorch 切换清华源镜像教程 windows系统下pytorch安装教程 一、安装CUDA前的准备 (1)查看自己N卡支持的CUDA版本,打开NVIDIA控制面板,选择系统信息 NVIDIA控制面板下 系统信息 显示:CUDA11.7。这里CUDA11.7是支持的最高版本的CUDA,可以向下兼容,且可以安装多个版本的CUDA,可以通过更改环境变量来更改为你需要用到的CUDA版本。CUDA多版本共存请参考博客: Windows下CUDA多版本共存 如果版本过低则需要升级驱动。NVIDIA驱动下载 例如我的显卡是NVIDIA GeForce 930M(Windows10)然后点击search。 download。 download。 下载完成后,找到执行文件,双击进行安装。(这里就不再赘述,按步骤安装即可。) 安装完成后,再去NVIDIA控制面板检查自己的CUDA版本,现在就是最新版本了。 (2)NVIDIA官网下载对应CUDA版本 由于我的电脑已经用了七八年,担心不能支持最新的CUDA,所以选择了一个较老版本CUDA10.1。 CUDA下载地址:CUDA Toolkit Archive | NVIDIA Developer (3)CUDNN的下载 官网下载地址:cuDNN Download 没有账号需要注册账号,账号登录后,找到自己对应的CUDA版本,点击下载。 在这里查看旧版本。 选了个CUDA10.1的比较旧的,应该也可以选对应版本的新的但是没试过。 二、安装过程 这部分的内容看CUDA、CUDNN在windows下的安装及配置的第二部分就好,作者写的很详细。 三、安装Anaconda Anaconda清华源镜像下载地址 切换清华源镜像 conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64 conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64 conda config --set show_channel_urls yes conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64 四、安装pytorch pytorch旧版本在线下载方式 pytorch安装成功验证 python import torch import torchvision

Java 递归 把层级数据转为(树形数据)

util 类 import com.vo.ThreeVO; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class MenuTreeUtil { //已经被buildTree的list集合 private static List<ThreeVO> menuCommon = new ArrayList<>(); //返回给前端的NewTree List集合 private static List<Object> list = new ArrayList<Object>(); public static List<Object> menuList(List<ThreeVO> menu) { menuCommon.clear(); list.clear(); menuCommon = menu; // 通过遍历menu,找到父节点为0的节点,它是顶级父节点 // 然后调用menuChild,递归遍历所有子节点 for (ThreeVO threeVO : menu) { Map<String, Object> mapArr = new LinkedHashMap<String, Object>(); if (threeVO.getPid().equals(0)) { mapArr.put("id", threeVO.getId()); mapArr.put("name", threeVO.getName()); mapArr.put("pid", threeVO.

Node.js

目录 包和NPM查询字符串模块(querystring)URL模块(url)文件模块(fs)同步异步查看文件的状态(stat,statSync)检测文件是否存在(existsSync)创建文件(mkdir,mkdirSync)读目录(readdir,readdirSync)读文件(readFile,readFileSync)删除目录(rmdir,rmdirSync)删除文件(unlink,unlinkSync)清空写入(writeFile,writeFileSync)追加写入(appendFile,appendFileSync)文件流(createReadStream,createWriteStream)拷贝文件(copyFile,copyFileSync) HTTP协议HTTP模块(http)创建最基本的 web 服务器 Zlib压缩(zlib)创建压缩(createDeflate,createGzip) express框架介绍安装搭建服务器路由(响应对象,请求对象)路由传参(params)post请求路由器 中间件应用级中间件路由级中间件内置中间件 mysql模块初始化mysql普通连接mysql连接池连接mysql语句练习NPM NPX编写接口详情请看xz文件 包和NPM 查询字符串模块(querystring) //引入查询字符串模块 const querystring = require('querystring'); //引入查询字符串模块 const querystring = require('querystring'); let str = 'Kw=dell&price=4999'; //解析查询字符串为对象 let obj = querystring.parse(str); console.log(obj); //将对象格式化为查询字符串 const str2 = querystring.stringify(obj); console.log(str2); URL模块(url) //引入url模块 const url = require('url'); //引入url模块 const url = require('url'); const str = 'https://editor.csdn.net/md?not_checkout=1&articleId=127028464' //解析url为对象 let obj = url.parse(str); console.log(obj); //将对象格式转换为url const URL = { protocol: 'https:', slashes: true, auth: null, host: 'editor.

使用thymeleaf时,th:类标签失效的原因

问题出现: 最近学习后端,学到了thymeleaf这一块,学习中出现了一个问题我没有注意到,导致后面页面编写出现重大bug:项目中我使用了thymeleaf,配置的映射路由为:/index,访问首页的时候,tomcat配置有个设置默认打开的网页,我写成了xxx/index.html,我开始的时候运行了一遍,发现界面显示不正确,后来我看视频写的是xxx/index,我就改了下,就运行成功了,也没有深究原因。直到后面使用a标签跳转页面的时候,才发现跳转后的th:标签失效了(<a th:href="@{/xxx.html}">跳转到xxx页面</a>) 问题原因: 我们代码中配置路由的时候是配置的/index,所以thymeleaf就不会对/index.html进行解析,所以打开的是原始的html界面,而th:前缀对于html来说是一个不能理解的东西(就好比你把java代码直接copy到c++编译器里去运行,肯定都无法识别,就相当于两种不同的语言),它是thymeleaf中的内容,所以里面有关thymeleaf的标签就会全部失效。 那我们怎么才能让它生效呢,这就得通过thymeleaf中间的TemplateEngine对象解析(其中的process方法),这样th:标签才能被识别处理。下面是servlet如何使用thymeleaf处理页面的代码: 基本的视图处理servlet类: import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.WebContext; import org.thymeleaf.templatemode.TemplateMode; import org.thymeleaf.templateresolver.ServletContextTemplateResolver; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class ViewBaseServlet extends HttpServlet { private TemplateEngine templateEngine; @Override public void init() throws ServletException { // 1.获取ServletContext对象 ServletContext servletContext = this.getServletContext(); // 2.创建Thymeleaf解析器对象 ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext); // 3.给解析器对象设置参数,告诉解析器该如何处理传过来的视图名称 // ①HTML是默认模式,明确设置是为了保证代码更容易理解 templateResolver.setTemplateMode(TemplateMode.HTML); // ②设置前缀 templateResolver.setPrefix(servletContext.getInitParameter("view-prefix")); // ③设置后缀 templateResolver.setSuffix(servletContext.getInitParameter("view-suffix")); templateResolver.setCacheTTLMs(60000L); templateResolver.setCacheable(true); templateResolver.

设计模式原则——单一职责原则

前言 设计模式这部分我选择的书籍是一本叫做《设计模式之禅》的书,虽然内容可能不是特别友好,但是内容详尽有层次,一眼看去就可以大致了解整个结构。对于一门学问,有时候先从整体弄懂学习内容也是一个不错的方法。 下面是书的目录,就一起来了解下吧: 第一部分: 第二部分: 第三部分: 这本书从原则开始讲起,慢慢到具体的23种设计模式,在具切到场景运用,对比。然后还有不同设计模式的组合等。 鉴于本人也是处于学习状态,对于一些模式理解可能会存在一些偏差,希望能够指出,我也会及时修改出现的一些问题。 单一职责原则: 单一职责原则英文名:Single Responsibility Principle,简称SRP原则。这一原则解释起来可能比较抽象,我刚刚开始学习的时候也是一脸懵逼,先把原话放出来吧,它的定义是这样的: There should never be more than one reason for a class to change. 翻译过来就是:引起一个类发生改变的因素不应该有一个以上。 我们可以这样想,一个类要发生改变,那原因可能源自功能需求的变动(这里说的是职责,只谈论功能方面),那么因为功能性变动的原因不应该超过一个,大致就是说我们的职责应该只限于做单独一件事情。网上有的就解释的更加直接了:“一个类就应该只做一件事”。 注意:上面虽然说的是类,但是不只针对于类,接口,方法,类等都适用。 其次,很多情况我们并不需要一定满足单一职责原则,实际还是以具体业务情况为主。 下面就使用一个简单的例子来说明一下这个情况: 场景: 这里我们以餐厅为场景来模拟,假设员工的职责靠制服区分,制服代表某一类员工,开始的时候制服统一,厨师和洗菜人都是穿这样一件衣服,所以难免会出现分辨不清员工职责的情况,有时候会叫错洗菜人去做菜,因为制服没法好好区分职责。 后来,根据单一职责原则,我们一件制服代表一种职能,这样使用两套制服就可以区分开厨师和洗菜人,就不会出现叫错人做错事的情况。 改进前: 有一家饭店,开始招了一个厨师,招聘要求是会做饭洗菜。这时候就大明就来应聘了,饭店给员工制作并发放了统一员工制服(ICooker) ICooker: public interface ICook { void cleanFood(); // 洗菜 void cookMeal(); // 煮菜 } DaMing: public class DaMing implements ICooker { public void cleanFood() { System.out.println("洗菜..."); } public void cookMeal() { System.out.println("煮菜..."); } } 可能你认为这个接口设计也没多大问题,可是有一天,饭店做大了,厨师大明也越来越忙,事情已经做不急了,于是找来了一个负责洗菜的助手小明,由于之前只设计了一种制服,所以也发了同样的制服(ICooker),小明便开始在这里工作了。

【Linux】一步一步教你编写单目录和多目录Makefile

目录 一、什么是make和Makefile? 二、Makefile的组成、优点和原理 1.Makefile组成 2.Makefile优点 3.Makefile原理 三、单目录编写Makefile 1.第一阶段Makefile文件 2.第二阶段Makefile文件 3.第三阶段Makefile文件 4.第四阶段Makefile文件 5.第五阶段Makefile文件 四、多目录编写Makefile 一、什么是make和Makefile? 当我们写大型项目时源文件很多,手动编译复杂且效率慢,而Makefile可实现自动化编译,可以很好的解决这个问题; Makefile一旦写完,只需要 make 命令,整个工程全完自动化编译;make命令是GNU的工程化编译工具,它用于编译大量互相关联的源代码,使用它可以实现项目的工程化管理; Makefile的作用就是执行make命令的时候指定编译和链接的规则; 二、Makefile的组成、优点和原理 1.Makefile组成 Makefile组成三要素:目标,依赖, 命令; 目标:要生产的目标文件依赖:用来产生目标的输入文件命令:生成文件的过程 文件格式 目标文件:依赖文件 [Tab键]命令 2.Makefile优点 (1)减少重复编译的时间 每次只会编译修改的和依赖于修改的那些文件,减少了重复编译的时间,提高了编译效率 (2)更好的进行代码维护 大项目中源代码较多,手工维护 编译时间长而且编译命令复杂,把代码维护命令及编译命令写在 makefile 文件中,然后再用make 工具解析此文件自动执行相应命令 可实现合理编译 3.Makefile原理 (1)目标的生成 检查规则中的依赖是否存在,若依赖文件不存在,则寻找是否有规则生成依赖文件 (2)目标的更新 检查目标的所有依赖,任意一个有更新就重新生产目标文件 三、单目录编写Makefile touch创建makefile文件再vim编写,或直接vim打开 1.第一阶段Makefile文件 不够通用,如果第一行的依赖文件改变,后面的都需要改变 2.第二阶段Makefile文件 这里的引用变量有点类似于宏替换,别名的意思;引入变量代替这些.o文件,只需要在用到这些.o文件的地方更改为新的$(变量名) 3.第三阶段Makefile文件 自动推导 4.第四阶段Makefile文件 可实现自动添加所有变量 > $@ : 目标文件 $^ : 所有依赖文件 $< : 第一个依赖文件 5.第五阶段Makefile文件 自动查找文件下所有文件名,不需要手动输入.o文件 wildcard函数查找文件下所有文件名patsubst查找替换 SRCS := $(wildcard *.c) OBJS := $(patsubst %.

python程序打包成exe实现新版本的自动更新检测及下载

python使用pyinstaller打包成的exe程序,代码修改重新打包就需要重新发送一次程序,略微麻烦,通过服务器存储新版本打包后的程序,检测和下载通过代码实现。 本文通过FTP局域网服务器的形式完成,使用serv-u软件配置FTP服务器,配置方式可移步下方站内链接 Serv-U配置FTP服务器 使用designer画一个简单的ui,如下图 转成py文件如下,命名为 update_test_ui.py代码如下 # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'update_test.ui' # # Created by: PyQt5 UI code generator 5.15.7 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainTestUp(object): def setupUi(self, MainTestUp): MainTestUp.