exe打包工具:advanced installer介绍(一)

前言 近年来,web服务逐渐走向云端部署+浏览器化、去APP化,然而exe安装仍有着举足轻重的地位,其好处不言而喻,拿到exe安装包后,基本就可以傻瓜安装和操作了,十分便捷。 业务场景 通过各种IDE/QT/C#/Java等开发工具/语言完成开发任务后,一般会得到三种类型文件,jar、exe、以tomcat/jboss+mysql+..的服务应用。 有时需无脑单机部署这些应用,给客户展示,此时把应用打包为exe就成了不错的选择。 打包为exe的好处:点击exe安装包一键部署=自动注册服务+自动启动服务+自动生成桌面快捷方式+自动在开始菜单创建“打开程序、卸载程序”等快捷方式,让程序显得更加专业化。 本文以 advanced installer 19.7+windows10为依托,把tomcat+mysql+jdk+elasticSearch打包为exe,据此,让不了解该软件的小伙伴,跟着可以制作出自己的exe。 工具种类 市面上的打包工具有很多种,其中install4j、exe4j、launch4j、advanced installer等,想了解更多种类打包工具,点击进入,在此不做过多扩展,本文重点介绍advanced install。 下载地址 官网下载地址:https://www.advancedinstaller.com/download.html、v20.3.2 一、成果展示 1、点击安装exe包后,自动启动tomcat、mysql、ES服务,自动打开登录界面; 2、在桌面生成登录/启动服务的快捷方式(防止客户不小心关掉黑色服务窗口); 3、在Windows系统的开始菜单中,创建demoExe文件夹(自定义的工程名称),里面自带登录、启动服务、卸载服务快捷方式。 安装过程 效果展示 桌面生成了对应快捷方式 开始菜单,生成对应快捷方式 二、操作步骤 2.1 新建工程 如下图所示,依次点击软件右上角的“文件--新建” 选择“企业版”、“语言”后点击创建。 提示:自己实验的话,点击专业版也未尝不可,功能和企业版略有删减。 2.2 填写软件基本信息 上半部分信息为必填项,默认安装目录会读取这些信息,所以,建议使用字母或英文。 中间的“产品支持信息”可以据需填写,不是特别重要 底部的“许可证”可选,当然也可以在后面的对话框中再次选择。两者的区别是,本页面选取“许可证”仅仅会在安装界面展示,不会询问是否同意。 反之,在对话框中选取的“许可证”会在安装界面,刻意要求必须同意协议许可,才可以继续安装。 注:这个“许可证”的格式是rtf的,可粗略的认为是word格式的。 2.3 添加所需打包文件 如下图所示,通过添加文件夹的方式,把需打包程序添加进来,个别文件也可以单独以文件的方式单独添加进来。 添加后的效果,基本是下面这个样子。 注:这里使用的mysql和tomcat都是绿色免安装的版本! 2.4 配置快捷方式 2.4.1 配置桌面快捷方式 具体,配置什么类型的快捷方式,根据你的需求来。程序安装完毕后,这些快捷方式会自动出现在桌面。 说明:在配置界面,可以修改快捷方式名称和图标。 需要注意的是,配置的时候,以管理员的身份运行,是可选的 2.4.2 配置开始菜单中的快捷方式 和上面创建快捷方式,几乎一样,区别是创建的位置不同,创建快捷方式前,建议先创建一个文件夹(可以是中文名称),然后在文件夹中创建快捷方式,里面一般包含一个登录的、一个卸载的、启动服务的快捷方式(可选) 需要说明的是,卸载的快捷方式,如上图所示,选择卸载就可以了,也是比较省事儿的。 如果创建的快捷方式选择“已安装程序”,一般指向的是exe或者bat文件,比如你想通过此快捷方式指向bat,bat里写启动某些服务的代码。 2.5 新建环境变量(可选) 环境变量,一般是JAVA_HOME、path一类的,你安装包中包含的有JRE或jdk,配置的环境变量JAVA_HOME需要指向上面添加文件夹中的jre或jdk。 此时,就涉及了一个路径的问题,如下图所示,本案例中已添加打包文件的目录结构 此时的JAVA_HOME就需要配为 [ProgramFilesFolder][Manufacturer]\[ProductName]\RCA-Service\jdk 至于,[ProgramFilesFolder][Manufacturer]\[ProductName]是怎么来的,它来自于下面2.6中的安装参数,也是默认的,三个变量分别是文件夹名称(默认是program files(x86))、发布人(填写软件详信息时配的)、工程名称。 下面是安装后,自动生成的目录 2.6 安装参数 再次提示:该界面的[ProgramFilesFolder][Manufacturer]\[ProductName]变量会在配置环境变量时用到。 拓展:版本信息变量为 [|ProductVersion] ,此变量在安装创建界面可以动态调用。

配置Clion+OpenOCD+Stm32CubeMX进行优雅的嵌入式开发

传统的keil的图形化界面以及各种复杂的操作对我这个想入门的新手很不友好,所以经过一波探索,决定用自己的IDE,即Jetbrain家的Clion进行配置开发,本文详细介绍我自己配置的过程。 顺便开一个专栏记录我从大二下才开始的单片机学习经过。 1. 软件环境: Windows 11STM32CubeMXClion-2022MinGWOpenOCDarm-none-eabi-gcc 2. 硬件环境: stm32f103c6t6A st-link v2 3. 软件下载 STM32CubeMX下载地址 STM32CubeMX - STM32Cube initialization code generator - STMicroelectronicshttps://www.st.com/en/development-tools/stm32cubemx.html 注意,本人下载的是老版本6.5.0的,不建议使用最新版本。 OpenOCD下载地址 Download OpenOCD for Windows (gnutoolchains.com)https://gnutoolchains.com/arm-eabi/openocd/ 在Clion中配置OpenOCD的方法: MinGW:经验证,可以直接使用Clion捆绑的,不用另外下载 下载地址:Download File List - MinGW - Minimalist GNU for Windows - OSDNhttps://osdn.net/projects/mingw/releases/ arm-none-eabi-gcc: Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developerhttps://developer.arm.com/downloads/-/gnu-rm 此处最好下载zip文件解压后使用,将解压后文件的bin目录添加到环境变量中去 4. Clion中的配置: 5. 创建项目: 创建完成后,会生成一个ioc文件,并且弹出一个OpenOCD的配置面板选择,此处我们选择跳过即可。 然后点击ioc文件,选择在STM32CubeMX中打开 此时的板子默认的是STM32F0304Px,我们点击左上方Home右边的那个芯片名称: 在图上的指针处输入你自己板子的对应型号,我这里选择的是STM32f103c6t6A (不知道为什么我这里图形化界面的渲染总是会出现错误,但是不影响使用) 选择后在右下角给出两个板子型号,此处双击你的型号即可 之后会自动创建一个工程,此处我们对工程进行配置。 先点击座变一栏的System Core,选择SYS选项 Debug选择Serial Wire选项

三、Deepsrtream 保存图片

前言 DeepStream提供的demo中有相关保存图片的示例,等有时间再进行总结。CSDN有许多关于DeepStream保存图片的文章,大部分都存在内存泄漏问题。 参考 #if 1 static int dump = 0; if (dump < 150) { GstMapInfo in_map_info; NvBufSurface *surface = NULL; memset (&in_map_info, 0, sizeof (in_map_info)); if (!gst_buffer_map (buf, &in_map_info, GST_MAP_READ)) { g_print ("Error: Failed to map gst buffer\n"); gst_buffer_unmap (buf, &in_map_info); return GST_PAD_PROBE_OK; } cudaError_t cuda_err; NvBufSurfTransformRect src_rect, dst_rect; surface = (NvBufSurface *) in_map_info.data; int batch_size= surface->batchSize; printf("\nBatch Size : %d, resolution : %dx%d \n",batch_size, surface->surfaceList[0].width, surface->surfaceList[0].height); src_rect.top = 0; src_rect.

微信小程序swiper禁止用户手动滑动

用 catchtouchmove 事件来截获用户手动滑动事件,这样既解决了禁用用户手动滑动,有解决了有点击按钮不影响使用 贴代码: WXML: <swiper class='yaohe' vertical='true' circular='true' autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}"> <block wx:for='{{yaohe}}'> <swiper-item catchtouchmove='catchTouchMove'> <!--重点这里--> <block wx:for='{{item}}'> <view class='yaohe_item'> <view class='yaohe_img'> <image src='{{item.goods_icon}}'></image> </view> <view class='yaohe_right'> <view class='yaohe_text'>{{item.goods_feature}}</view> <view class='boss_price'> <view class='boss'>{{item.shop_name}}</view> <view class='price' bindtap='goGoodsDetail' data-shop_goods_id='{{item.shop_goods_id}}'>¥{{item.goods_price}}</view> </view> </view> </view> </block> </swiper-item> </block> </swiper> JS: // 截获竖向滑动 catchTouchMove:function(res){ return false }

Python入门(一)·环境配置与python基础

这篇博客记录我的python入门学习过程。 使用阿里云服务器ubuntu 18.04 关于Linux的入门参照上一篇博客 学习使用的视频来自B站 黑马程序员python教程 python简介 它是作者基于C语言编辑的解释器 最大的优点是开源得很早。 编译器是把编程语言翻译成机器语言使计算机能够读懂的程序。 编译器有两种,一种是编译器,一种是解释器,它们工作的时间点不同。 解释性语言会一行行地解释后一行行地提交给cpu,相比于编译性语言,翻译速度较慢;但优点是解释器解释出的代码可以在多平台转移,只要不同平台上有对应平台的解释器,一份代码就可以在多平台上执行。 python的特点 1.完全面向对象 2.拥有强大的标准库 3.提供大量的第三方模块 python环境配置 解释器python python2.x解释器 python python3.x解释器 python3 其他解释器: CPython——官方版本的C语言实现 Jython ——可以运行在java平台 IronPython——可以运行在.NET和Mono平台 PyPy ——python实现的,支持JIT即时编译 交互式 ipython 在终端中直接进入python 可以用exit()退出 IPython是一个python的交互式shell,在终端用命令ipython3进入。 支持自动补全 自动缩进 支持bash shell命令 内置了许多有用的功能和函数 基于BSD开源 集成开发环境 pycharm IDE 继承开发环境 继承了开发软件需要的以下工具 图形用户界面 代码编辑器(自动补全 自动缩进) 编译器、解释器 调试器(断点、单步) 。。。 pycharm安装和使用 由于我用的是云服务器ubuntu,没有图形界面,下载pycharm也无法使用,因此这部分暂时不写。如果后续有使用再补充。 anaconda安装 anaconda是管理python包的一个工具,能提供工具包下载和管理服务。在这里记录一下anaconda安装的过程 参考链接linux下安装anaconda 1、进入官网选择要下载的对应操作系统的版本 https://www.anaconda.com/distribution/ 2.上传到云服务器上。这里我是直接放在普通用户的home目录下的创建的anaconda文件夹。 3.bash Anaconda3-2021.05-Linux-x86_64.sh 即执行安装程序,这里文件名可以用自动补全 根据提示操作,这里把安装位置也放在上述文件夹下——还没弄懂Linux的文件安装是否要遵守什么规则。 如果提示缺少什么包 用yum install -y xxxx 安装对应包即可

【SQLserver】bat定时自动备份与恢复

项目需求:定时备份A数据库,然后恢复到B数据库。 一、BAT备份数据库(使用SQLcmd.exe) 1.建立一个bat文件,命名为Abackup.bat @echo off %SQLcmd工具路径。如果没有SQLcmd,官网可以下载% set path=%path%;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn echo 数据库备份开始 SQLcmd.exe -S ip地址 -d 需要备份的数据库名 -U sa -P 123456 -i sqlserverbackup.sql -o sqlserverbackup.out ren sqlserverbackup.out %date:~0,4%%date:~5,2%%date:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%.out echo 数据库备份完成 名称 解释 备注 -i 调用的SQL格式文件 -o 生成的日志文件,格式为out也可以是txt,怎么方便怎么来。 注:-o命令生成的日志不支持重命名,每次执行完成后都会覆盖上一次执行日志。为了后续维护方便,可以使用ren命令重命名out文件。(即第6行) 2.建立一个名称为sqlserverbackup,格式为sql的文件。 DECLARE @name varchar(50) DECLARE @datetime char(14) DECLARE @path varchar(255) DECLARE @bakfile varchar(255) set @name='需要备份的数据库名' set @datetime=CONVERT(char(8),getdate(),112) + REPLACE(CONVERT(char(8),getdate(),108),':','') set @path='备份文件保存路径' set @bakfile=@path+''+@name+'_'+'bak_'+@datetime+'.BAK' backup database @name to disk=@bakfile with name=@name go 二、BAT恢复数据库(使用SQLcmd.

Spring Boot+Vue前后端分离项目练习07之网盘项目注册登陆页面实现

1.Axios安装和接口封装 Axios是一个易用、简洁且高效的http库, 使用Promise管理异步,支持请求和响应拦截器,自动转换JSON数据等高级配置,是在vue项目中十分常见前端请求库,使用以下指令安装。 npm install axios npm install js-cookie 为了便于后续接口管理,一般都将所有的接口单独放在同一目录下统一管理。在src下新建文件夹request,并创建文件src/request/http.js,后续对接口的baseURL、超时时间、请求和响应拦截、接口类型封装等都将在此文件中。 http.js import axios from 'axios' import Cookies from 'js-cookie' // 请求超时时间 axios.defaults.timeout = 10000 * 5 // 请求基础URL,对应后台服务接口地址 axios.defaults.baseURL = "http://localhost:8080" // 自定义post请求头 axios.defaults.headers.post['Content-Type'] = 'application/json' // 请求拦截器 axios.interceptors.request.use( (config) => { // 自定义请求头 config.headers['token'] = Cookies.get('token') return config }, (error) => { // 请求错误时 console.log(error) // 打印错误信息 return Promise.reject(error) } ) // 响应拦截器 axios.interceptors.response.use( (response) => { if (response.

YOLOV5报错和解决办法合集

一、报错:AttributeError: ‘Hardswish‘ object has no attribute ‘inplace‘ 解决方法:定位到错误的那一行,把其中的self.inplace删掉即可。例: 改成: 二、报错问题— assert img0 is not None, ‘Image Not Found ‘ + pathAssertionError: Image Not Found 解决方法: 将utils/datasets.py文件中的 p = str(Path(path).absolute()) # os-agnostic absolute path 改为 p = str(Path(path)),重新运行代码即可 三、报错:RuntimeError: a view of a leaf Variable that requires grad is being used in an in-place 解决方法: 在model/yolo.py文件 添加with torch.no_grad():如下

PTA团队天梯赛 L1-022 奇偶分家

时间复杂度为O(n) #include<stdio.h> #include<stdlib.h> int main(){ int n,jishu = 0,oushu = 0; //数字总数n,奇数个数jishu,偶数个数oushu scanf("%d",&n); int *a = (int*)malloc(n*4); //动态分配类型为int,长度为n的数组 int i; for(i = 0;i < n;i++){ scanf("%d",&a[i]); } for(i = 0;i < n;i++){ if(a[i] % 2 == 0){ oushu++; } else{ jishu++; } } printf("%d %d",jishu,oushu); return 0; }

centos7部署KVM虚拟化

目录 centos7部署KVM虚拟化平台 1、新建一台虚拟机 2、系统内的操作 1、修改主机名 2、挂载镜像光盘 3、ssh优化 4、设置本地yum仓库 5、关闭防火墙,selinux 3、安装KVM 4、设置KVM网络 5、KVM部署与管理 6、使用虚拟系统管理器管理虚拟机 创建存储池 创建存储卷 创建虚拟机 命令行模式创建虚拟机 centos7部署KVM虚拟化平台 实验环境:VMware Linux版本:centos7 1、新建一台虚拟机 ################################################################## 2、系统内的操作 1、修改主机名 hostnamectl set-hostname kvm bash 2、挂载镜像光盘 vim /etc/fstab /dev/cdrom /mnt iso9660 defaults 0 0 mount -a 命令会对/etc/fstab文件里的分区进行挂载,这里使用这条命令可能会报错,镜像光盘可能挂载失败 [root@kvm ~]# mount -a mount: /dev/sr0 写保护,将以只读方式挂载 mount: 在 /dev/sr0 上找不到媒体 [root@kvm ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 devtmpfs devtmpfs 3.8G 0 3.8G 0% /dev tmpfs tmpfs 3.

python案例:用户画像分析

目录 1、项目背景数据 2、标记高潜用户3、基于高潜用户信息进行分析3.1 筛选高潜用户静态数据3.2 高潜客户的客户等级分布3.3 高潜用户的年龄段对比3.4 根据df_ac_cate 和高潜用户id匹配出高潜用户的购买该商品记录3.4 计算周一到周五每天的购买数量 1、项目背景 数据 数据-提取码1111 用户数据表user_table字段: 用户行为数据表Data_Action_201602.csv、Data_Action_201603.csv、Data_Action_201604.csv 2、标记高潜用户 高潜用户应该具备以下特征: 有购买行为对一个商品购买和其他交互行为(浏览点击收藏等)时间差应该多于一天 问题:数据量太大每个csv中有100多万条数据—分数据块读取 1,数据合并提取 # 读取文件数据。迭代器,1万条1万条的读取 def read_actionData(filePath,size=10000): df = pd.read_csv(filePath,header=0,iterator=True)#迭代器格式,一部分一部分的读取 chunks = [] #保存数据块的列表 loop = True #循环起始值 while loop: try: chunk = df.get_chunk(size)[['user_id','sku_id','type','time','cate']] chunks.append(chunk) except StopIteration: loop = False print('StopIteration is stopped') df_ac = pd.concat(chunks,ignore_index=True) return df_ac #讲多个表的数据合并在一起 df_ac =[] df_ac.append(read_actionData(filePath='Data_Action_201602.csv')) df_ac.append(read_actionData(filePath='Data_Action_201603.csv')) df_ac.append(read_actionData(filePath='Data_Action_201604.csv')) df_ac = pd.concat(df_ac,ignore_index=True) df_ac 2,下单人群–type为4的数据 针对的是已经下单用户 df_ac_type = df_ac[df_ac['type']==4] df_ac_type 3,查看每类商品用户下单的占比

oracle图形化安装

~安装依赖(准备工作) yum install -y compat-libcap1 yum install -y glibc-devel yum install -y libstdc++-devel yum install -y gcc-c++-4.8.2 yum install -y ksh yum install -y libaio-devel yum install -y compat-libstdc++-33-3.2.3 一.关闭防火墙、图形桌面、selinux 1.1查看firewalld防火墙状态 [root@oracledb ~] systemctl status firewalld.service 1.2关闭firewalld防火墙 [root@oracledb ~] systemctl stop firewalld.service 1.3禁止开机使用firewalld防火墙 [root@oracledb ~] systemctl disable firewalld.service 2.关闭图形桌面(看环境是否需要,一般忽略) [root@oracledb ~] systemctl get-default [root@oracledb ~] cat /etc/inittab ##由命令行模式更改为图形界面模式 [root@oracledb ~] systemctl set-default graphical.target ##由图形界面模式更改为命令行模式 [root@oracledb ~] systemctl set-default multi-user.target 3.

ESP8266与手机App通信(STM32)

认识模块 ESP8266是一种低成本的Wi-Fi模块,可用于连接物联网设备,控制器和传感器等。它具有小巧、高度集成和低功耗的特点,因此在物联网应用中被广泛使用。ESP8266模块由Espressif Systems开发,具有单芯片的封装和多种功能,包括Wi-Fi网络连接、GPIO控制、PWM控制和模拟输入/输出等。ESP8266模块支持多种编程语言和开发工具,包括C语言、Lua脚本和Arduino开发环境。ESP8266模块的一个优点是它的成本相对较低,因此可以用于低成本的物联网项目。另外,由于它具有小巧的封装和低功耗的特性,因此它可以在嵌入式系统和移动设备中使用。 总之,ESP8266模块是一种功能强大、低成本、小巧、低功耗的Wi-Fi模块,非常适合用于物联网和其他嵌入式应用中。 模块与单片机的连接 我在本次开发中选择的是模块型号为ESP8266-01S,与ESP8266一样,他们都有8个引脚,我们只用得到其中的4个引脚,分别是: VCC:电源引脚,接收3.3V的直流电源。(也可以接5V) VCC:电源引脚,接收3.3V的直流电源。 TXD:串行传输引脚,用于发送串行数据。 RXD:串行接收引脚,用于接收串行数据。 而唯一与ESP8266不同的是,esp8266需要接第5个引脚EN,接在高电平上。 在与STM32连接时,VCC接3.3V或5V,GND接地,TX接在32单片机的RX上,RX接在32单片机的TX上。我使用的32单片机型号为STM32F407ze,通过查找资料可知,其内部的电路图大致如下图所示: 我选择把WiFi模块连接到P6上,以下是我的实物连接图(下面那个是我连接的OLED模块,不用理会): 接下来就是敲代码让他运行起来了。 代码部分 串口的定义 首先是定义串口,定义串口1是为了将串口3的收到数据发给电脑看。定义串口3用于WiFi模块的使用。 uart1.c 这段代码是用于配置STM32芯片上的UART1串口,并定义了一个函数 send_sring 用于通过UART1发送字符串。 #include "uart.h" void UART1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //初始化GPIOA的时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //初始化串口1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //通过结构体初始化串口引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //配置的引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度为100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //上下拉电阻:无上下拉电阻 GPIO_Init(GPIOA, &GPIO_InitStructure); //选择引脚复用功能 GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1); //配置串口相关属性 USART_InitStructure.

Spring Cloud/Spring Cloud Alibaba核心知识总结

Spring Cloud核心知识总结 springCloud是一个服务治理平台,若干个框架的集合,提供了全套的分布式系统的解决方案。包含:服务注册与发现、配置中心、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息、分布式事务等等。 SpringCloud 正常讲的是Spring Cloud Netflix 生态,2020年正常进入维护阶段。不会添加新的功能,现在基本上构建新的微服务都是用springCloudAlibaba为基准。 截止2022年,最新版springcloud为H版本,所以当我们再说springcloudH版是,即指的就是springcloud SpringCloudAlibaba是阿里开发的一套微服务架构,目前已经纳入spring中;同Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。主要是顺带使用阿里的产品。 下面是一张Spring Cloud核心组件关系图: springCloudAlibaba架构图如下: 先看看SpringCloud 1、 什么是SpringCloud? Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。 2、什么是微服务? 微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。另外,应避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。 通俗地来讲: 微服务就是一个独立的职责单一的服务应用程序。在 intellij idea 工具里面就是用maven开发的一个个独立的module,具体就是使用springboot 开发的一个小的模块,处理单一专业的业务逻辑,一个模块只做一个事情。 微服务强调的是服务大小,关注的是某一个点,具体解决某一个问题/落地对应的一个服务应用,可以看做是idea 里面一个 module。 单个服务支持横向扩展业务提升单一服务的性能和并发,从而不影响别的服务。 3、微服务之间如何独立通讯的? 同步通信:dubbo通过 RPC 远程过程调用、springcloud通过 REST 接口json调用等。 异步:消息队列,如:RabbitMq、ActiveM、Kafka等消息队列。 RPC基于TCP协议,Rest接口基于Http协议 TCP是传输层协议,定义数据传输和连接方式的规范 HTTP是应用层协议,定义传输数据的内容的规范 HTTP协议基于TCP协议,所以支持HTTP也就一定支持TCP 4、 什么是服务熔断?什么是服务降级? 熔断机制是应对雪崩效应的一种微服务链路保护机制。当某个微服务不可用或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在Spring Cloud框架里熔断机制通过Hystrix实现,Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内调用20次,如果失败,就会启动熔断机制。 服务降级,一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然水平下降,但好歹可用,比直接挂掉强。 Hystrix相关注解@EnableHystrix:开启熔断 @HystrixCommand(fallbackMethod=”XXX”),声明一个失败回滚处理函数XXX,当被注解的方法执行超时(默认是1000毫秒),就会执行fallback函数,返回错误提示。 5、 请说说Eureka和zookeeper 的区别? Zookeeper保证了CP,Eureka保证了AP。 A:高可用 :这个比较好理解,就是说,只要我对服务器,发送请求,服务器必须对我进行相应,保证服务器一直是可用的。 C:一致性:一致性就是说,我们读写数据必须是一摸一样的。 比如一条数据,分别存在两个服务器中,server1和server2。

脑机接口科普0017——飞米

本文禁止转载!!!! 在我们的九年制义务教育体系中,我们知道纳米是个很小的单位,一般进行单位制的转换的时候,最小就只能到达纳米级别了。 1nm = 10^-9 m 这会给学生造成一种误解。认为纳米就是最小单位了。 在脑机接口中,有个单位,叫飞米。 看看百度百科的科普: 1 fm = 10^-15 m。 飞米fm与纳米nm相差1000000倍!!! 飞米主要用于测量原子核级别的物质。 原子核很小! 上图是一个大脑的一个神经元,里面是有一个细胞核的。细胞核也很小。 也就是说,飞米这个单位,是应用在侵入式的脑机接口中的。 下图,是犹他电极阵列,这种电极,是做侵入式使用的,会插到人的大脑灰质中。这个犹他电极很小很细,他就是用来探测神经元的局部场电位信号或者尖峰信号的。 这个局部场电位的信号采集叫做Spikes&LFPs,这在之前的的第8课科普讲过。 脑机接口科普0008——侵入式与非侵入式_侵入式和非侵入式脑机接口_sgmcy的博客-CSDN博客 综上:目前人类的技术,还没有实现对原子核级别的每个神经元脑电信号的采集和处理(毕竟人类大脑有860亿个神经元,想想需要做成头发系的也不行啊,头发也没有860亿根啊),但是,人类先发明了飞米,意味着人类有这样一个宏愿,这个宏愿就是——希望可以实现对原子核级别的大脑神经元的监测。(从光学层面,目前人类可以使用电子显微镜实现对纳米级别的神经元的成像观察)。

MySQL 针对JSON类型字段数据进行提取和查询

文章目录 前言背景:JSON数据双引号处理第一种:第二种:第三种:第四种:总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、 提示:以下是本篇文章正文内容,下面案例可供参考 背景: 当我们使用SQL查询时,想对数据字段中JOSN串进行特殊处理,以下为简单列举 #使用函数查询:JSON_CONTAINS(字段,JSON_OBJECT('json属性', '内容')) select JSON_EXTRACT(password, '$.applCde') as applCde,JSON_EXTRACT(password, '$.applyAmt') as applyAmt from user where id='9' #使用 json字段名->’$.json属性’ 进行查询条 select password->'$.applCde' as applCde,password->'$.applyAmt' as applyAmt from user where id='9' JSON数据双引号处理 平常的json数据在查询出来的时候 是有双引号的 第一种: #使用`TRIM函数`去除双引号之后 select TRIM(BOTH '"' FROM JSON_EXTRACT(password, '$.applCde')) as applCde,JSON_EXTRACT(password, '$.applyAmt') as applyAmt from user where id='9' 第二种: select TRIM(BOTH '"' from `password`->'$.applCde') as num from user WHERE id='9' 第三种: #通过JSON_UNQUOTE 获取的json数据是不带双引号的 select JSON_UNQUOTE(`password`->'$.

VMware虚拟机搭建环境通用方法

目录 一、前期准备1.下载并安装一个虚拟机软件 二、开始创建虚拟机1.配置虚拟机硬件相关操作2.虚拟机网络相关操作 三、开机配置相关内容0.开机遇到报错处理(选看--开机没有报错请忽略)1.开始配置2.开机之后配置3.使用xshell远程登录4.使用xshell配置虚拟机网络信息(完成单机版搭建) 四、搭建集群1.配置host信息2.注册权限用户3.创建用于存放安装包以及软件安装后的存放目录4.配置目录指定所有者5.配置分发脚本6.克隆两台虚拟机7.三台虚拟机配置映射地址8.配置分发免密登录 五、总结 一、前期准备 1.下载并安装一个虚拟机软件 VMware16下载地址 提示:如何使用免费版本网上有好多,这里就不具体讲解了。遇事不决问百度 提示:如果下载较慢建议切换其他站点进行下载,目前使用华为现在还是比较快的,推荐下载iso文件,我没有下载everything这种的iso文件,可能和后续安装报错不同,这里没有使用带everything的iso文件做演示 阿里centos7下载地址 华为下载centos7 提示:如何使用免费版本网上有好多,这里就不具体讲解了。遇事不决问百度 xshell或者其他远程工具下载(如果不嫌虚拟机麻烦) 二、开始创建虚拟机 1.配置虚拟机硬件相关操作 提示:修改虚拟机名称便于后续搭建集群进行区分,位置更换到指定位置,我一般喜欢放在固态硬盘里,如果固态空间比较紧张,那就放在一个空间充足的地方,建议至少有60GB空间的磁盘。 提示:设置内存大小,根据你的实际内存进行配置,如果你就8G内存,建议1G或者更小,我这里是16G所以设置的稍微大一点,后续需要搭建集群三太虚拟机每天2G内存,当然也可以使用配置磁盘充当内存,在后续进行设置。 提示:设置你下载好的centos7文件 2.虚拟机网络相关操作 注意:设置网络模式为NAT模式 打开Windows命令行:输入如下命令查询自己的ipv4地址、子网掩码、网关等,不要看vm开头的。我这里是网线,如果你们链接的是wifi的话选择带无线局域网相关的内容。 ipconfig 提示:回到vmware,为虚拟机配置网络信息 虚拟机配置根据你Windows上的信息配置 例如我的Ipv4地址为192.168.11.6,那么虚拟机配置为192.168.11.0.子网掩码就有255.255.255.0就可以 配置网关 和你Windows中的ipv4地址一个网段,不要和已经配置的ip地址重复 设置网关 三、开机配置相关内容 遇到这个界面直接按回车 0.开机遇到报错处理(选看–开机没有报错请忽略) 如果遇到这个问题,请按照如果下步骤进行操作 步骤1 或者直接点击 步骤2 勾选如下内容,保存后再次开机 如果还不行,选择低版本兼容 步骤3 然后开机 如果还是不行,比如我就是这个大冤种,尝试更换一下centos7的其它版本镜像。我成功了,更换的是个镜像,去掉之前那些步骤设置的信息哈。我是直接把之前新建的虚拟机删除了,然后新建只是更换的镜像文件,步骤1-3都没有操作 1.开始配置 这里没有选择最小化安装,因为好的软件需要 如果内存不足,则使用磁盘充当内存,分配大小4G **记住这个网络地址,后续需要使用他连接xshell** 设置root用户 等待一段时间之后点击重启 2.开机之后配置 还记得之前配置网络的那个ip地址吗j,如果忘记了请往下看。 在虚拟机先登录你的root用户,输入你的账号密码,密码默认是不会显示出来的包括位数。只要输完点击回车就行 root 登录成功之后 输入 ifconfig 得到ip地址 3.使用xshell远程登录 连接成功!!! 4.使用xshell配置虚拟机网络信息(完成单机版搭建) 声明 : linux使用的一下功能 1.对文件内容进行 编辑,按键盘 i 键小写状态下。 2.对文件修改完成后进行 保存,步骤1 esc 键退出编辑模式。步骤2 : 键英文状态下的冒号。步骤3 wq 键小写模式。步骤4 enter 键回车。

java多线程(二三)并发编程:Callable、Future和FutureTask

一、Callable 与 Runnable 先说一下java.lang.Runnable吧,它是一个接口,在它里面只声明了一个run()方法: public interface Runnable { public abstract void run(); } 由于run()方法返回值为void类型,所以在执行完任务之后无法返回任何结果。 Callable位于java.util.concurrent包下,它也是一个接口,在它里面也只声明了一个方法,只不过这个方法叫做call(): public interface Callable<V> { /** * Computes a result, or throws an exception if unable to do so. * * @return computed result * @throws Exception if unable to compute a result */ V call() throws Exception; } 可以看到,这是一个泛型接口,该接口声明了一个名称为call()的方法,同时这个方法可以有返回值V,也可以抛出异常。call()方法返回的类型就是传递进来的V类型。 那么怎么使用Callable呢?一般情况下是配合ExecutorService来使用的,在ExecutorService接口中声明了若干个submit方法的重载版本: <T> Future<T> submit(Callable<T> task); <T> Future<T> submit(Runnable task, T result); Future<?> submit(Runnable task); 第一个方法:submit提交一个实现Callable接口的任务,并且返回封装了异步计算结果的Future。

Simulink模块库简介

在Matlab的命令窗口中键入Simulink或在Matlab的工具栏中单击Simulink按钮 ,可以打开Simulink的模块库,其界面又称为模块库浏览器。 信号源模块组 连续模块组 离散模块组 数学运算模块组 输出池模块组 信号线路发送模块组 断续模块组 Simulink模型的建立与操作 模型窗口的建立 在Simulink中打开一个空白的模型窗口,如下图。可以通过以下几种方法: 在Matlab的命令窗口的File菜单中选择New命令的Model; 在Simulink窗口下的File菜单中选择New命令的Model; 单击Simulink工具栏中的‘新建模型’ 保存模型: 建立一个模型后可以把它保存下来。 使用模型窗口中的File菜单下的Save选项,或者用Save as选项改名保存文件。相应的文件的扩展名为.mdl。在Matlab的命令窗口中,键入模型文件名,可以打开相应的模型文件。 一. 模块大小的调整 选中模块后,模块的四角出现了小方块,用 鼠标单击任一角的小方块进行拖拽,即可改 变模块的大小。 二.模块的旋转 选中模块后,弹出鼠标右键菜单,然后选择 菜单命令Format下的Rotate block,模块则 按顺时针方向旋转90,若选择Flip block,模 块则翻转180。 三. 模块的连接 因为模块的每个允许输出的口都有一个输出符号>, 而输入端也有一个表示输入的符号>,因此若连接两 个模块,只需要在第一个模块的输出口按下鼠标左 键,拖动到后一个模块的输入口处,释放鼠标即可。 若想快速的连接两个模块,可单击选中源模块,按 下Ctrl键,再单击目标模块即可。 连线的分支:在仿真过程中,经常需要把一个信号输 送的不同的模块,这时就需要从一根线中分出一根连 线。操作方法,在连好一条线后,把鼠标放到分支点 的位置,先按下Ctrl键,然后按下鼠标拖动到目标模 块的输入端,释放鼠标和Ctrl键。 四. 模块标签的改变 在模型窗口中创建模块时,Simulink会在每个模块的下面默认位置上加一个标签。用户可以按照自己的意愿给模块命名。这时只需要在标签的任何位置单击或双击鼠标,然后进行修改即可。 五. 模块参数的修正 Simulink在绘制模块时,给出的是带有默认参数的模块模型,所以通常需要修改。具体过程为选中模块并双击,在弹出的对话框中,找到对应的参数并修改即可。 Simulink模型举例 微分方程中的系统是时间t的函数,t由信号源模块库(Sources)中的时钟模块(Clock)提供,用数学运算模块库(Math Operation)中的数学函数模块(Math Function)产生,再配合以Sources库中的常数模块(Constant)、Math Operations库中的乘积模块(Product)和连续系统模块库(Continuous)中的积分模块(Integrator)等,就可以建立系统模型。关于输出可以用输出模块库(Sinks)中的输出端口模块(Out),也可以用Scope模块等等。 ①打开一个模型编辑窗口。 ②将所需要的模块添加到模型窗口中。 ③设置模块参数并连接各个模块组成仿真模型。双击Constant模块,打开其参数设置对话框,在Constant value栏中输入-0.5,其余模块不用设置。 ④连接各个模块组成系统仿真模型,如下图。 设置仿真参数 在仿真过程中,要对仿真算法,输出模式等各种仿真参数进行设置。 在模型编辑窗口的Simulation菜单中选择Configuration Parameters命令,打开仿真参数对话框。包含7个选项。如图: 点击启动按钮或者从菜单中启动。 观察仿真结果的变化轨迹:把输出信号送到Scope模块或者XY Graph模块。 sine wave参数修改:双击该模块,可以修改频率,振幅,和相位(pi/2)等

Spring Boot+Vue前后端分离项目练习06之网盘项目创建vue项目

1.安装环境 构建vue项目,需要提前安装相应的环境,这里主要就是node,npm和Vue CLl。 #1、安装nodejs brew install nodejs #2、再执行下面命令来安装npm(npm是开发nodejs时所用的依赖库) brew install npm #3、安装vue cli npm install -g @vue/cli # OR yarn global add @vue/cli 这些环境的安装还会比较简单的,其他平台的安装也是基本一致的,接着查看环境的安装情况。 node --version vue --version 2.创建vue项目 切换到具体的目录下,使用以下指令就可以完成vue项目。 vue create file-web ?Please pick a presset(Use arrow keys)这一行是提示行,后面的每一个依赖安装都会以这样的提示开头,紧接着的是选项列表。用键盘上下键可切换选中项(高亮蓝色),回车键确定选中。 这里我们采用Manually select features来手动安装一些依赖。 接着选择你需要的功能。仍然是键盘上下键控制选中项,这里采用空格键选中或取消选中当前项。这里我们选中下图中的几个功能:选择Vue版本,安装Babel、Router、Vuex、CSS预编译器和格式化检查,回车键确定。 接着选择Vue.js版本,此实验采用2.x。 接着都是同样的流程,选择自己需要的选项确定即可。 路由是否采用history模式(HTML5 History 模式 | Vue Router),选择是。输入Y,回车键确定。 选择一个CSS预编译器,可以选择任意一个,这里选用Stylus。 选择一个插件化的JavaScript代码检测和格式化工具 ,此处采用ESLint width error prevention only。 何时检测代码,此处采用Lint on save保存文件时测试。 如何存放配置,选择保存到专用的配置文件中。 是否保存本次配置(y:记录本次配置,然后需要给配置命名,N:不记录本次配置),这里选择 N。 接着会自动开始安装各种依赖。 进度100%后,项目就创建成功了,同时也会给出提示。 使用以下指令启动项目。 cd file-web npm run serve 接着使用上面的地址即可访问项目了,出现以下画面就说明项目成功创建并启动了。

matlab画图plot以及自动保存图像

plot (1)plot(x),x为向量时,以该元素的下标为横坐标、元素值为纵坐标绘出曲线。 (2)plot(x,y),x、y为同维数组时,绘制以x、y元素为横纵坐标的曲线。 (3)plot(x1,y1,x2,y2,...),绘制以x1为横坐标、y1为纵坐标的曲线1,以x2为横坐标、y2为纵坐标的曲线2,等等。其中x为横坐标,y为纵坐标,绘制y=f(x)函数曲线。 常用语句见示例: % figure('color','w') % 设置图片背景色为白色 % figure('Name','测试数据图') % 第一张图就会显示figure1 测试数据图。 figure % 常见代码直接用figure是最常见的命令 plot(aa(t1,1),'-ro') % 绘图时plot命令中末尾'-.r*'、'--mo'、':bs' 可改变线条和点的样式,如:m代表颜色后面的o代表点的样式 set(gca,'XTick',[0:10:320]); %设定x坐标范围和间距 set(gca,'YTick',[95:1:101]); %设定y坐标范围和间距 % set(gca,'XLim',[0 315]); % 设定x坐标的范围。注意set语句要放在plot后面才起作用 % set(gca,'XTick',[0,50,315]); % 设定x坐标的刻度范围。(注意和上面不同,上面不加逗号) % axis([xmin xmax ymin ymax]); % axis设置坐标轴在指定的区间,注意这个必须同时设定xy % xlim([xmin xmax]) % 只设置x坐标范围 % ylim([ymin ymax]) % 只设置y坐标范围 % legend('A') % 添加图例 ylabel('均值'); xlabel('样本数'); % 添加x,y标签 % ylabel('values of sin(t) and e^{-x}') % 添加y轴信息 e^{-x}是显示指数的方法 title(['第',num2str(t),'列信号']); % 添加图片title %% 多行title % firstline = '测试集的实际分类和预测分类图'; % secondline= ['Accuracy=',num2str(accuracy)]; % title({firstline;secondline},'Fontsize',12); % title('{\s}^{-1}'); 只想显示图像的一部分:

PTA:L1-022 奇偶分家、L1-023 输出GPLT、L1-024 后天(C++)

目录 L1-022 奇偶分家 问题描述: L1-023 输出GPLT 问题描述: 实现代码: L1-024 后天 问题描述: 实现代码: 简单题,没写题解,看代码就能看懂 L1-022 奇偶分家 问题描述: 给定N个正整数,请统计奇数和偶数各有多少个? 输入格式: 输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。 输出格式: 在一行中先后输出奇数的个数、偶数的个数。中间以1个空格分隔。 输入样例: 9 88 74 101 26 15 0 34 22 77 输出样例: 3 6 实现代码: #include <iostream> using namespace std; const int N = 1010; int main() { int n; int dou = 0;//偶数 int sim = 0;//单数 cin >> n; while (n--) { int m; cin >> m; if (m % 2 == 0) { dou++; } else { sim++; } } cout << sim << "

Vue(3). 如何将高德地图引入的vue中

1.首先需要进入高德地图平台 注册账号获取KEY 2.在vue终端里输入 npm i @amap/amap-jsapi-loader --save # 或 cnpm i @amap/amap-jsapi-loader --save 3.另一种方式是传统的<script>,但不建议,需要的可以看官方了。 4. 在需要的组件中创建一个容器,确定高宽: <divid="container"style="height: 800px;width: 800px;"></div> 导入 importAMapLoaderfrom'@amap/amap-jsapi-loader'; 并在setup()/mounted()中加载: import AMapLoader from '@amap/amap-jsapi-loader'; import axios from 'axios'; import qs from 'qs'; // import router from '@/router'; import { useRouter, useRoute } from "vue-router"; import { ref } from 'vue' // import { times } from 'lodash'; const router = useRouter(); const route = useRoute(); const active = ref([0]); const tabDatas = ref([]) const regions = ref([]) const regionss = ref([]) const lng_lst = ref([]) const minimg = ref('') axios({ method: "

SpringBoot学习笔记整理

SpringBoot 第一章JavaConfig 1.为什么要使用 Spring Boot 因为Spring, SpringMVC 需要使用的大量的配置文件 (xml文件) 还需要配置各种对象,把使用的对象放入到spring容器才能使用对象。 2.SpringBoot 就相当于 不需要配置文件的Spring+SpringMVC。 常用的框架和第三方库都已经配置好了。 拿来就可以使用了。 3.SpringBoot开发效率高,使用方便多了 1.1JavaConfig 使用java类作为xml配置文件的替代,是配置spring容器的纯java方式。在这个java类中可以创建java对象,把对象放入spring容器中(注入到容器)。 使用两个注解: 1)@Configuration:放在一个类的上面,表示这个类是作为配置文件使用的 2)@Bean:声明对象,把对象注入到容器中。 例子: package com.bjpowernode.config; import com.bjpowernode.vo.Student; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * Configuration:表示当前类是作为配置文件使用的。 就是用来配置容器的 * 位置:在类的上面 * * SpringConfig这个类就相当于beans.xml */ @Configuration public class SpringConfig { /** * 创建方法,方法的返回值是对象。 在方法的上面加入@Bean * 方法的返回值对象就注入到容器中。 * * @Bean: 把对象注入到spring容器中。 作用相当于<bean> * * 位置:方法的上面 * * 说明:@Bean,不指定对象的名称,默认是方法名是 id * */ @Bean public Student createStudent(){ Student s1 = new Student(); s1.

【vue报错:Cannot set properties of undefined (setting ‘xxx‘)】

Cannot set properties of undefined (setting ‘xxx’) 这个问题主要是在设置数据的时候或者获取变量、属性、方法时获取不到数据,主要有以下情况: 1.可能是访问域的问题,在外围创建that带指this:let that=this 2.没有定义相对应的变量、属性、方法 3.获取变量、属性、方法的方式不对 遇到访问域情况 解决方法 在方法内使用:const that=this 转载自:【vue报错:Cannot set properties of undefined (setting ‘xxx‘)】_程序媛_文乐的博客-CSDN博客

ubuntu 16.04 搭建PHP环境(LAMP)

tzselect 命令设置时区:依次选4)Asia, 9)China,1)Beijing Time, 1) Yes sudo apt-get install apache2 sudo apt-get install php sudo apt-get install php7.0-zip Ubuntu Server 16.04下安装及配置MySQL(上述有网址说明) https://blog.csdn.net/qq_32409653/article/details/78121260 1.sudo apt-get install mysql-server 2.设置root密码 3.mysql -u root -p CREATE USER IVMS86X0@'%' IDENTIFIED BY 'psw.db7898'; grant all privileges on *.* to IVMS86X0@'%' identified by 'psw.db7898'; FLUSH PRIVILEGES; 执行quit退出mysql。 4.sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf bind-address = 0.0.0.0 default-time-zone = '+8:00' max_allowed_packet = 256M max_connections = 2100 innodb_buffer_pool_size=4G innodb_file_per_table=1 innodb_autoextend_increment=128 innodb_max_dirty_pages_pct=90

Hyper-V安装Ubuntu

基于win10自带虚拟机 Hyper-V 安装Ubuntu-22.04.1-desktop-amd64 文章目录 Hyper-V开始创建第一栏第二栏第三栏第四栏第五栏第六栏第七栏第八栏 配置结束 Hyper-V Hyper-V 虚拟机调配 Hyper-V是Windows系统自带的虚拟机软件。在底部菜单的搜索栏输入“Hyper-V”,在打开的管理器中勾选“Hyper-V”才能启动虚拟机服务(该操作完成后重启电脑)。再一次在搜索栏中输入“Hyper-V”,打开主页面。 选择新建,在弹出来的新选项中点击虚拟机,至此正式开始创建虚拟机。 开始创建 第一栏 创建虚拟机的页面,最左边一共有8栏,其中第一栏开始之前仅需阅读后点击下一步。 第二栏 指定名称和位置 自定义命名虚拟机名字,定义名称后点击下一步。 第三栏 指定虚拟机代数 创建第一代虚拟机,点击下一步。 第四栏 分配内存 为防止内存不足产生报错,此处分配的内存大小为2048MB,勾选使用动态内存,点击下一步。 第五栏 配置网络 需要为虚拟机提供上网功能,因此配置虚拟网卡,点击下一步。 第六栏 连接虚拟硬盘 此处选择第一个选项“创建虚拟硬盘”,为虚拟硬盘命名并选择存储位置,硬盘大小建议设定15GB以上(系统总大小约为9G,后续进行安装的文件较大为保证空间充足尽可能设定较大存储),此处设定20GB。点击下一步。 第七栏 安装选项 手动从Ubuntu官网下载系统安装包,并在映像文件路径指向系统安装包所在。点击下一步。 第八栏 摘要 此处可以看见虚拟机配置的基本参数,确认无误后点击完成即可。 配置结束 配置好的虚拟机后,右键目标虚拟机,点击启动。启动后的界面选择第一项“Try or Install Ubuntu”,按回车启动。 至此,正式进入Ubuntu安装。

个人收集的网站,可以参考(程序员可收藏)

程序员是一个需要不断学习的职业,幸运的是,在这个互联网时代,有很多渠道可以获取知识。 1在线教程 1、how2j.cn 地 址:https://how2j.cn/ 简 介:一个Java全栈开发教程网站,内容全面,简洁易懂,非常适合入门。 2、w3cschool 地 址:https://www.w3cschool.cn/ 简 介:前端和脚本语言为主的在线教程网站,前端的内容非常不错 3、菜鸟教程 地 址:https://www.runoob.com/ 简 介:和w3cschool类似的在线教程网站,前端学习看这两个网站就够了。 4、易百教程 地 址:易百教程 易百教程™ - 专注于IT教程和实例 简 介:内容比较全面的在线教程网站。 6、简单教程 地 址:https://www.twle.cn/ 简 介:大量IT编程入门教程(前端、移动端、Java、.net等) 7、并发编程网 地 址:http://ifeve.com/ 简 介:比较不错的技术网站,以Java为主,关注并发、NIO、JVM、框架等方面的内容。 2视频教程 上面的在线教程网站以文字性内容为主,同样收藏了一些以视频为主的一些网站,相比较而言,更容易上手,当然,也更加耗时间。 1、B站 地 址:https://www.bilibili.com/ 简 介:没错,bilibili也可以用来学习,除了番剧、鬼畜之外,b站同样有非常多的高质量的编程教学视频,搜索就行了。 2、慕课网 地 址:https://www.imooc.com/ 简 介:比较不错的编程视频教学网站,可以找到比较体系的东西 3、我要自学网 地 址:(敏感词,自行百度) 我要自学网-视频教程|免费教程|自学电脑|3D教程|平面教程|影视动画教程|办公教程|机械设计教程|网站设计教程-我要自学网 简 介:比较多的自学教程,有程序设计内容的分类。 3官网 毫无疑问,一项技术,最权威的文档一定是它的官方文档,所有的教程、书籍都是直接或者间接在官方相关文档的基础上完成。所以,编程学习,后面最好还是要看官网的。当然,官网大部分都是英文——其实配合一些翻译插件,没有想象中的那么难。 1、Java 地 址:https://www.java.com/zh_CN/ 、https://docs.oracle.com/en/java/javase/index.html 简 介:这个不需要多介绍,Java官网和Java官方API。 2、Spring 地 址:https://spring.io/ 简 介:毫无疑问Spring已经成为Java EE事实上的标准。 3、MySQL 地 址:https://www.

关于“深度学习”的学习方向

当下,深度学习已成为人工智能领域的热门研究方向之一,吸引了大量研究者和工业界从业者的关注和投入。深度学习是机器学习的一种特殊形式,它通过建立多层神经网络模型,实现对复杂数据的高效表征和处理。 一、深度学习的基础 深度学习的核心思想是建立深层次的神经网络模型,实现对数据的高级表征和处理。在深度学习中,我们通常使用反向传播算法(Backpropagation)来训练神经网络,以求得最优的参数配置,使得网络的预测结果尽可能接近于真实数据标签。 在深度学习中,常用的神经网络模型包括全连接神经网络(Fully Connected Neural Network)、卷积神经网络(Convolutional Neural Network)、循环神经网络(Recurrent Neural Network)等。这些模型不仅具有不同的结构和特点,而且也适用于不同的数据类型和应用场景。 二、深度学习的应用 深度学习已经广泛应用于图像识别、语音识别、自然语言处理、推荐系统、智能游戏等领域。其中,图像识别是深度学习应用的最重要场景之一。基于深度学习的图像识别技术已经达到了人类的水平,并在人脸识别、物体检测、图像分割等任务中得到广泛应用。 此外,深度学习在自然语言处理方面也取得了不俗的成就,包括机器翻译、情感分析、语言模型等。深度学习在推荐系统和广告推荐等领域的应用也越来越受到重视。 三、深度学习的学习方法 深度学习是一门需要深入学习的学科,需要掌握一定的数学和编程基础。在学习深度学习时,您可以先学习线性代数、概率论、统计学等数学基础知识,以便更好地理解深度学习的算法原理和技术细节。 同时,您还需要熟练掌握编程语言,如Python,以及深度学习框架,如TensorFlow、PyTorch等。这些工具和技术可以帮助您更快地实现深度学习算法,并在实践中不断探索和优

工具及方法 - Windows中出现网络访问问题的解决方法

家里的PS4,突然用电信网刷新不了PS会员游戏了。同样的网,登录微软账号也登不上。难道是网络问题? 可我换成手机热点就是好的,而且PS4再用电信网络就恢复了。 让我郁闷了一下,开始怀疑人生。后来上网查了一下,可能是IPv6设置问题,我把IPv6禁掉了,微软账号登录就好了。 所以专门查找了一下关于网络设置问题的解决方法,内容如下。 IPv4和IPv6的地址是用来识别和连接网络上的设备的。当你连网后,会获得多个地址,一般是有一个IPv4地址和一个IPv6地址。IPv6是一个新的网络标准,相对IPv4这个老标准,可以构成更大的网络来连接更多的设备。 Internet Protocol Version 6 (IPv6)是一个包交换的数据通讯协议,由IETF(Internet Engineering Task Force)开发,为了解决IPv4的地址不够用的问题。它是IPv4的继任者,将来会逐步取代IPv4。 不过现在应用最广泛的还是IPv4协议。因为很多设备不支持IPv6,ISP运行商也支持的不多,有的情况默认也不使能IPv6。 在正常配置下,大多需要联网的设备都需要至少两者之一的网络协议。 不过有时一个设备可能只有IPv4地址连接,而没有IPv6地址连接。比如在Windows下,查看网络连接的状态信息,可能显示只有IPv4的网络连接,而没有IPv6的: 出现这种情况可能会有多种原因,有时会影响你上网,你的网络访问就可能出现“No Internet Access”错误,表明你的internet连接哪里出了问题。 我们说的问题有两种情况,一种是“No Internet Access”,表明网络连接问题;一种是“No network access”,表明DHCP服务器没有检测到,所以没有分配本地IP地址。比如: 一些常见的网络问题包括你的路由器配置问题、网络设置问题、错误的网络驱动程序、不正确的DNS服务器地址或IP地址、第三方安全管理如防火墙等,以及IPv6兼容性问题。 有时很难找出确切的原因,但有一些一般的修复方法,你可以尝试一下,看看是否能解决问题。因此,这里有一些故障排除方法可以帮助你解决Windows电脑上的 "无法上网 "错误。 在尝试修复没有网络连接问题前,可以尝试重启一下电脑,也许问题就解决了。重启可以解决很多电脑运行时发生的不正常情况。 类似的,如果Windows系统长时间未更新,也可以更新一下。 如果你的设备有客服,或者有专业的IT人员可以咨询,找他们帮忙也是一个非常好的选择。 1. 重新连接到你的网络 你可以通过从你的Windows电脑上删除你的网络设置来解决 "IPv4/IPv6无法访问互联网 "的错误。完成后,重新连接到同一网络,检查是否有任何改善。 通过系统设置来操作: - 按Win + I 打开设置。接下来,点开Network & Internet组件,在侧边栏选择Wi-Fi,将开关有On改成Off,然后稍等下,再切回On。 - 直接Win + Q,输入Wifi进行搜索。切回on以后,再选择无线网络进行连接。 - 在右下角电脑图标出,点击Wifi图标直接关闭和再次打开Wifi,并选择想使用的无线网络。如下图: 通过网卡设置来操作: Win + R,运行ncpa.cpl,显示出的各个网络适配器,右键菜单里点击Disable,然后再右键菜单里点击Enable。 可以将你的网络连接挨个禁用再启用,来识别一下问题所在。 2,Reset Winsock catalog。 Winsock的重要设置保存在一个数据库中,通常这个数据库就叫做Winsock Catalog。它包含了系统上可用的不同协议,比如系统安装了TCP/IP,就会有两条IP条目,一条是TCP,一条是UDP。根据这些条件,来决定使用Winsock的应用和通讯的交互方式, "IPv4/IPv6 No Network Access"的另一种错误类型,是个别应用程序的网络访问有问题。比如,浏览器可以上网,但电子邮件客户端无法连接网络。这可能是由于网络配置被破坏而发生的。幸运的是,你可以用Winsock catalog reset来快速修复它。在命令行终端,输入一连串的命令,将重要的网络设置重置为默认值。 步骤如下: a,按Win + S打开Windows搜索。(Win + Q也可以)

AttributeError: ‘str‘ object has no attribute ‘parse‘

今天,使用python提取版本号, #pip3 install packaging from packaging import version A='3.5.2' version.parse(A) 发现报错 AttributeError: 'str' object has no attribute 'parse' 我在另一台电脑就没问题,搜半天也没找到,然后我试了下重新导入 import packaging.version A='3.5.2' packaging.version.parse(A) <Version('3.5.2')> 莫名奇妙的搞定了。

docker与容器文件传输

1、文件复制到容器 dcoker cp 本机文件名或者文件路径 容器ID:容器内的路径 如: docker cp jenkins.war 6f7ab9a56e21:/usr/share/jenkins/ 将本机的jenkins.war文件拷贝的容器id为“6f7ab9a56e21”中的“/usr/share/jenkins/”文件夹下 2、容器内文件拷贝到宿主机 dcoker cp ID全称:容器文件路径 本地路径 如: docker cp 6f7ab9a56e21:/usr/share/jenkins/jenkins.war /mydata/jenkins/ 将容器的jenkins.war文件拷贝的到宿主机(本机)的/mydata/jenkins/文件夹下

echarts自定义系列custom实现时间线图

echarts可以用custom自定义实现各种图形,需要提供一个renderItem方法,这里介绍一个自定义的时间线图,每天在干啥一目了然。 先生成一些假数据: var data = []; var dataCount = 10; var startTime = +new Date('2023-03-01 09:00:00'); var categories = ['2023-03-01', '2023-03-02', '2023-03-03']; var types = [ { name: '吃饭', color: '#7b9ce1' }, { name: '睡觉', color: '#bd6d6c' }, { name: '学习', color: '#75d874' }, { name: '摸鱼', color: '#e0bc78' }, { name: '贤者时间', color: '#dc77dc' }, { name: '开黑', color: '#72b362' } ]; categories.forEach(function (category, index) { var baseTime = startTime; for (var i = 0; i < dataCount; i++) { var typeItem = types[Math.

odps常用命令

odpscmd使用: 源端配置好 config.ini:project,ak,sk service地址,tunnel地址 odpscmd 下载 odps@ odps_project>tunnel download dim_trans_flg_c0087 ./dim_trans_flg_c0087.txt; 目标端配置好 config.ini:project,ak,sk service地址,tunnel地址 odpscmd 上传 odps@ odps_project>tunnel upload dim_trans_flg_c0087.txt dim_trans_flg_c0087; 表、视图导入: ./odpscmd/bin/odpscmd --config=./odps_config_dest.ini -f odps_project_view.sql 获取当前登录用户: odps@project_name>whoami; 退出MaxCompute客户端: odps@project_name>quit; --等价于如下命令。 odps@project_name>q; 获取命令帮助 方式一:在MaxCompute客户端查看命令帮助信息。 odps@project_name>help; --等价于如下命令。 odps@project_name>h; odps@project_name>help table; --列举项目空间 list projects; --进入项目空间 use cy1_odps; --列举表名称 show tables; where options include: --help (-h)for help --config=<config_file> specify another config file --project=<prj_name> use project --endpoint=<http://host:port> set endpoint -k <n> will skip begining queries and start from specified position -r <n> set retry times -f <"

SysTick滴答定时器使用库函数实现1us和1ms精确定时(超短代码)(内含源码.c/.h)

一、SysTick介绍 SysTick—系统定时器是属于CM4内核中的一个外设,内嵌在NVIC中。一般我们叫他系统定时器或者滴答定时器。是一个24bit的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK,当重装载数值寄存器的值递减到 0的时候,系统定时器就产生一次中断,以此循环往复。嵌入式操作系统常有一个类似“心跳”的定时器,来分配时间片,实现宏观上的多任务。其实,操作系统的多任务,在微观上,CPU对多任务的管理是分时的。每个任务都给一定的时间片,就是把时间分成N个等份,优先级高或是重要的任务多占几个时间片,优先级低的或是不重要的任务就少占几个时间片。大部分嵌入式操作系统是基于时间片的。如ucos。systick结论总结如下: 1、systick是一个24位的定时器,故重装值最大值为2的24次方 = 16 777 215,要注意不要超出这个值。 2、systick是cortex_m3的标配,不是外设,不需要在RCC寄存器组打开它的时钟。 3、每次systick溢出后会置位计数标志位和中断标志位,计数标志位在计数器重装载后被清除,而中断标志位也会随着中断服务程序的响应被清除,所以这两个标志位都不需要手动清除。 4、采用使用库函数的方法,只能采用中断的方法响应定时器计时时间到,如要采用查询的方法,那只能采用设置systick的寄存器的方法。 定时原理:SysTick定时器的计数器是向下递减计数的,计数一次的时间当寄存器中的值LOAD减到0时,产生中断,可得中断一次的时间为:其中 比如在STM32F103x中SystemCoreClock是固件中定义的系统内核时钟,一般为78MHZ 即:=78MHZ,假如LOAD为78则,定时时间为 库函数SysTick_Config()函数的形参表示内核时钟有多少个周期触发一次systick定时中断 SystemCoreClock / 1000 表示定时频率为 1000Hz, 也就是定时周期为 1ms SystemCoreClock / 500 表示定时频率为 500Hz, 也就是定时周期为 2ms SystemCoreClock / 2000 表示定时频率为 2000Hz, 也就是定时周期为 500us 在delay.c中第18行中SystemCoreClock/1000000)就是定时1us,当然也可以直接传递72,但是若是换个单片机时钟不是72MHZ则会定时错误,所以使用SystemCoreClock/1000000)更方便移植程序。 二、精确定时源码 delay.c //使用时记得将stm3210x_it.c中 //void SysTick_Handler(void) //{ //} //注销掉 #include "delay.h" /******************************************************************************* *函数的原型:void Sys_Delay_Init(void) *函数的功能:系统滴答定时器初始化 *函数的参数:None *函数返回值:None *函数的说明: SysTick_Config():系统滴答定时器初始化 返回1,说明初始化不成功 ********************************************************************************/ void Sys_Delay_Init(void) { if(SysTick_Config(SystemCoreClock/1000000) == 1)//1微秒 { while(1); } } u32 sys_time = 0; void SysTick_Handler(void) { sys_time++; } /******************************************************************************* *函数的原型:void delay_us(u32 us) *函数的功能:微秒延时函数 *函数的参数: @ u32 us:微秒 [1,4294967296] *函数返回值:None *函数的说明: 系统滴答定时器 ********************************************************************************/ void delay_us(u32 us) { sys_time = 0; while(sys_time !

逢七拍手游戏--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)

实例7:逢七拍手游戏 逢7拍手游戏的规则是:从1开始顺序数数,数到有7或者包含7的倍数的时候拍手。本实例要求编写程序,模拟实现逢七拍手游戏,输出100以内需要拍手的数字。 实例目标 掌握for循环与range()函数的使用掌握字符串中find()方法的使用 实例分析 判断一个数字是否与7相关,可分为两种情况: 1.是否为7的倍数,即一个数取模值为0; 2.是否包含7,使用find()方法判断,当返回值为-1时表示不包含7。 代码实现 for i in range(1, 101): # 把i转成字符串,使用find方法(字符串中不包含时,返回-1) include = str(i).find("7") # 判断条件:既不包含7,也不是7的倍数 if include == -1 and int(i) % 7 != 0: # 输出,去掉了换行符,加了、 print(i, end="、") # 如果包含7 输出* elif include != -1 or int(i) % 7 == 0: print("*", end='、') 首先使用for循环与range()函数生成1-100的整数序列,之后通过字符串中的find()方法判断1-100中每个数字是否包含7,并将返回值赋值给变量include,然后使用if-elif语句判断每个数字是否与7相关,如果include的值为-1,并且该数与7取模的值不为0,则该数与7无关,如果include的值不为-1或者与7取模的值为0,那么该数与7相关,使用print()函数打印“*”符号。 代码测试 运行代码,控制台输出结果如下: 1、2、3、4、5、6、*、8、9、10、11、12、13、*、15、16、*、18、19、20、*、22、23、24、25、26、*、*、29、30、31、32、33、34、*、36、*、38、39、40、41、*、43、44、45、46、*、48、*、50、51、52、53、54、55、*、*、58、59、60、61、62、*、64、65、66、*、68、69、*、*、*、*、*、*、*、*、*、*、80、81、82、83、*、85、86、*、88、89、90、*、92、93、94、95、96、*、*、99、100、

JS获取URL参数的4种方法总结

1.字符串 split 方法 let URL = "http://www.baidu.com?name=张三&age=25&sex=男&wife=小红" function getUrlParams(url) { // 通过 ? 分割获取后面的参数字符串 let urlStr = url.split('?')[1] // 创建空对象存储参数 let obj = {}; // 再通过 & 将每一个参数单独分割出来 let paramsArr = urlStr.split('&') for(let i = 0,len = paramsArr.length;i < len;i++){ // 再通过 = 将每一个参数分割为 key:value 的形式 let arr = paramsArr[i].split('=') obj[arr[0]] = arr[1]; } return obj } console.log(getUrlParams(URL)) 2.利用 URLSearchParams 方法 在 MDN(MDN是一个为所有的学习者从初级到高级的全面、定期更新的Web开发技术指南网站) 中结合两种方法实现参数的获取: 使用 new URLSearchParams(url) 方法,返回一个 URLSearchParams 对象,再调用 entries() 方法返回一个可迭代对象(Iterator);使用 Object.

nginx+lua(openresty)根据参数转发请求

lua脚本内容: --解析请求数据的json local cjson = require 'cjson' --http转发 local https = require 'resty.http' --服务器一 local server_one_url = 'http://192.168.1.2:8010/calc' --服务器二 local server_two_url = 'http://192.168.1.2:8010/calc' --http post 请求方法 local function http_post(url, data) local http = https:new() -- 设置请求的超时时间 http:set_timeouts(600000, 600000, 600000) local res, err = http:request_uri(url, { method = 'POST', body = data, headers = { ['Content-Type'] = 'application/json'; }, -- 设置关闭keepalive keepalive = false, keepalive_timeout = 1, keepalive_pool = 1000 }) --这里一定要做 and 校验 if res and res.

10 分钟搞懂 Vite devServer,速来围观

一、初始 cli 启动服务做了什么? pacakge.json 的 bin 指定可执行文件: "bin": { "vite": "bin/vite.js" } 复制代码 在安装带有 bin 字段的 vite 包,那可执行文件会被链接到当前项目的./node_modules/.bin 中,所以,npm 会从 vite.js 文件创建一个到/usr/local/bin/vite 的符号链接(这使你可以直接在命令行执行 vite)如下证明: 在本地项目中,也可以很方便地利用 npm 执行脚本(package.json 文件中 scripts 可以直接执行:'node node_modules/.bin/vite') 那 vite.js 做了什么? cli.ts 才算真正的启动服务,做 cli 命令的相关配置: import { cac } from 'cac' // 是一个用于构建 CLI 应用程序的 JavaScript 库 const cli = cac('vite') cli .option('-c, --config <file>', `[string] use specified config file`) // 明确的 config 文件名称,默认 vite.config.js .ts .

XShell 7 绿色版一键安装教程

一、Xshell是什么? [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CpHAre04-1678153825299)(https://u5mwn062nv.feishu.cn/space/api/box/stream/download/asynccode/?code=ZDhiNDJjYzE3YzI1ZmQ0MGQ4NmU3MWQwZTE1YTFmMTNfbkV3cG1xU1hlZ3FiSGpSQzBsWEthYng3elZGWUlNdmpfVG9rZW46Ym94Y25vQ3pBYzQ3NWM5MEZqVXFsSURxWHRkXzE2NzgxNTI4OTI6MTY3ODE1NjQ5Ml9WNA)] Xshell是一款功能强大且安全的终端模拟器,支持SSH、SFTP、TELNET、RLOGIN和SERIAL。是一款终端远程连接服务器的Windows软件,主要用于在Windows系统上远程操控服务器进行工作以及统一管理多台服务器集群,它通过多种不同的连接协议和密码,保障着用户的连接服务器安全。 二、软件安装(官方免费版) 双击下载好的Xshell Plus 7安装包,打开安装向导,选择“下一步”。 请您仔细阅读用户许可协议,同意请勾选“我同意许可证协议中的条款”,并选择“下一步”。 选择程序安装路径,默认在C盘,需要更改请选择“浏览”,完成请选择“下一步”。 安装向导准备就绪,可以开始安装了,继续请选择“安装”。 正式开始安装,该过程会持续几分钟,请耐心等待,不要关闭或重启电脑。 选择“完成”,完成安装程序。 安装完成截图: 三、软件安装(官方专业版) 获得专业版软件(无需破解!!官方正版,安装即可使用!!永久有效!!!) 最新版下载【直接粘贴到浏览器即可获取】 https://u5mwn062nv.feishu.cn/docx/Ewqpd9hDxootrSxEDSkcNbFInqf 直接解压文件到本地目录中 点击!绿化.bat,桌面会自动化生成Xshell程序 安装完成截图:

parallels试用期到了怎么办?parallels试用期到期可继续使用

parallels desktop即将到期就无法用了吗 能用,通过修改笔记本电脑时间就能继续采用。 关上系统偏好设置中的日期与时间。 把系统时间改成2021年4月1日。 下载安装包,安装pd,再安装win10系统。 Win10安装好后,重启笔记本电脑。 重启后,在此关上系统偏好设置中的日期与时间,把时间改回来。 关上下载的包,把pd启动 安装到应用程序。 在应用程序,关上pd启动,如果提示 试玩即将到期,就关上Parallels Desktop。能进win系统的话,全部退出,然后用pd启动关上。如果能进去,说明获得成功了。 也可以使用Parallels Desktop 18 更加方便好用!

断点调试(debug)

目录 F8案例 ​编辑 debug过程中报错 ​编辑用debug查看方法源码 一层一层查看 Arrays.sort()方法 F9 DebugExercise 介绍:断点调试是指在程序的某一行设置一个断电,调试时,程序运行到这一行就会停住,然后可以一步步往下调试,调试过程中可以看到各个变量当前的值,如果出错的话,调试到出错的代码行就会显示错,进行分析从而找到这个bug。 快捷键:F7(跳入:跳入方法内),F8(跳过:逐行执行代码),shift+F8(跳出:跳出方法),F9(resume,执行到下一个断点) F8案例 public class Debug01 { public static void main(String[] args) { int sum = 0; for (int i = 0; i <= 3; i++) { sum += i; System.out.println("i=" + i); System.out.println("sum=" + sum); } System.out.println("结束循环"); } } 逐行执行代码 遇到输出语句会挨个输出 循环执行完后就会执行后面的语句 直到该程序所有语句全部执行完就会自动跳出 debug过程中报错 public class Debug02 { public static void main(String[] args) { int[] arr = {1, 2, 3}; for (int i = 0; i <= arr.

SQL注入——extractValue()报错注入

目录 一,注入原理 二,实例(less-5) 一,注入原理 函数extractValue()包含两个参数: 第一个参数是XML文档对象名,第二个参数是路径 以创建数据库ctfstu和数据表xml为示例,展示函数extractValue()的用法 1,先在ctfstu数据库内创建表xml create database ctfstu charset utf8; create table xml(doc varchar(150)); 2,再在表中插入两段数据 INSERT INTO xml values(' <book> <title>A bad boy how to get a girlfriend</title> <author> <initial>LOVE</initial> <surname>benben</surname> </author> </book> '); INSERT INTO xml values(' <book> <title>how to become a bad boy</title> <author> <initial>hualong</initial> <surname>melton</surname> </author> </book> '); 3,使用extractvalue查询xml里面的内容 比如: 查询作者是谁: select extractvalue(doc,'/book/author/surname') from xml; 查询书名: select extractvalue(doc,'/book/title') from xml; 报错注入的突破口就是让页面上显示报错。 比如在本例中把查询参数的路径写错,页面上只会显示查询不到内容,但是不会报错。 但是如果把查询参数的格式符号写错,页面上就会提示出报错信息:

unity Post与Get请求

参考文章:Unity简单的Post与Get请求 - 简书适用人员(网络方面的小白)。 直接进入正题吧: 在使用Unity进行网络项目的时候,与服务器交互是常见的问题。而其中最常见的就是使用Post与Get与服务器进行交互。下面...https://www.jianshu.com/p/780ea08fb4d8 POST请求: using System; using System.Collections; using UnityEngine; using UnityEngine.Networking; public class MainProcess : MonoBehaviour { string token = "";//登陆成功后token值 System.TimeSpan st;//时间戳 private void GenerateTimestamp() { st = System.DateTime.UtcNow - new System.DateTime(1970, 1, 1, 0, 0, 0);//获取时间戳Debug.Log(Convert.ToInt64(st.TotalSeconds) );//时间戳转换Int64 } IEnumerator post_Request(string url) { //传递信息 WWWForm form = new WWWForm(); form.AddField("type", 0); form.AddField("score", 100); form.AddField("remark", "无"); form.AddField("progress", "1001"); form.AddField("operationTimes", st); UnityWebRequest www = UnityWebRequest.Post(url, form); //请求添加token验证 www.

【FATE联邦学习】的文档集合 collections of FATE framework documentations

其实有点不方便,文档乱乱的,各处都有我这里做个集合吧,其实都是官方做的。。。 这个应该是专门给国内的 https://docs.qq.com/doc/DU3ZQb1h1ZnZqTUFy https://fate.readthedocs.io/en/latest/zh/federatedml_component/ 这个是国际文档 https://fate.readthedocs.io/en/latest/zh/federatedml_component/intersect/ 因为FATE是微众银行的开源,所以好处是有国内的社交平台联系号,其官方网站,可以加。 网站也给了哔哩哔哩的官方账号,账号里面有很多教程资源,都是中文的。

【兔头蒜笔记 | P4常用命令】p4 change

在开发基于 p4 的 publish 工具时,为了避免 default 里可能存在的更改项与当前需要提交的文件们混淆,因此需要为其创建一个干净的 changelist。 一些准备工作 import os import stat import subprocess def connect_p4(data_pack): """ Connect to p4 according to data_pack and return p4 instance if successful """ # data_pack = [port, clnt, user, pswd] p4 = P4() p4.port = data_pack[0] p4.client = data_pack[1] p4.user = data_pack[2] # NOTE: This is to avoid p4 raising warnings when the depo is up-to-date # https://perforce-user.perforce.narkive.com/VbxnHKt2/p4-why-is-being-up-to-date-a-warning p4.exception_level = 1 try: p4.

vivado综合常见报错(持续更新)

[Synth 8-434] mixed level sensitive and edge triggered event controls are not supported for synthesis 错误原因: 一个触发器不能同时是边缘触发和电平触发的,因此不可被综合。所以最好统一,上图的情况可以去掉negedge。 IMPLEMENTATION报错 [Place 30-675] Sub-optimal placement for a global clock-capable IO pin and BUFG pair.If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .

1653. 使字符串平衡的最少删除次数

动态规划: // 1. 如果当前是b则不考虑删除,并且统计b的个数 // 2. 如果当前是是a则考虑删除,(查看需要删除的b的数量多),还是n-1个删除总数+1 (前n-1个需要删除的最小数-前n-1的状态)的删除的数量多。 class Solution { public: int minimumDeletions(string s) { // 动态规划 // 1. 如果当前是b则不考虑删除,并且统计b的个数 // 2. 如果当前是是a则考虑删除,(查看需要删除的b的数量多),还是n-1个删除总数+1 ,的删除的数量多 int ant = 0; int countb = 0; for(auto& c:s){ if(c == 'a'){ ant = min(ant+1,countb); }else{ ++countb; } } return ant; } }; //枚举 // 先找出a的总数 // 从第一个开始遍历,要找删除的最小数,那么只需要删除标记点左边的b+右边的a的总数的最小数即可 // 枚举 // 先找出a的总数 // 从第一个开始遍历,要找删除的最小数,那么只需要删除标记点左边的b+右边的a的总数的最小数即可 int righta = 0; int leftb = 0; for(auto &c:s){ if(c == 'a'){ righta++; } } if(s.

CAS 与 ABA问题

本文通过学习:周阳老师-尚硅谷Java大厂面试题第二季 总结的CAS和ABA相关的笔记 一、CAS 1、CAS定义 CAS = Compare-And-Swap,它是CPU并发原语。 比较当前工作内存中的值和主物理内存中的值,如果相同则执行规定操作,否者继续比较直到主内存和工作内存的值一致为止。 3个操作数,内存值V,旧的预期值A,要修改的更新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否者什么都不做 2、CAS底层原理(unsafe类 + 变量valueOffset + 变量value用volatile修饰) atomicInteger.getAndIncrement() 实际是调用了一个unsafe类的getAndAddInt方法 unsafe 变量valueOffset 变量value用volatile修饰 usafe Unsafe是CAS的核心类,由于Java方法无法直接访问底层系统,需要通过本地(Native)方法来访问,Unsafe相当于一个后门,基于该类可以直接操作特定的内存数据。Unsafe类存在sun.misc包中,其内部方法操作可以像C的指针一样直接操作内存,因为Java中的CAS操作的执行依赖于Unsafe类的方法。注意Unsafe类的所有方法都是native修饰的,也就是说unsafe类中的方法都直接调用操作系统底层资源执行相应的任务。 为什么Atomic修饰的包装类?->能够保证原子性,依靠的就是底层的unsafe类。 valueOffset 该变量值在内存中的偏移地址,因为Unsafe就是根据内存偏移地址获取数据的。 通过valueOffset,直接通过内存地址,获取到值,然后进行加1的操作。 value用volatile修饰 volatile保证了多线程之间的内存可见性。 3、CAS优缺点 优点 CAS不加锁,在并发量不高时会提高效率。 缺点 循环时间长,开销大。因为执行的是do while,如果比较不成功一直在循环,最差的情况,就是某个线程一直取到的值和预期值都不一样,这样就会无限循环。 只能保证一个共享变量的原子操作。当对一个共享变量执行操作时,我们可以通过循环CAS的方式来保证原子操作;但是对于多个共享变量操作时,循环CAS就无法保证操作的原子性,这个时候只能用锁来保证原子性。 ABA问题。 4、synchronized与CAS区别 synchronized (悲观锁) CPU 悲观锁机制,即线程获得的是独占锁。独占锁就意味着 其他线程只能依靠阻塞来等待线程释放锁。而在 CPU 转换线程阻塞时会引起线程上下文切换,当有很多线程竞争锁的时候,会引起 CPU 频繁的上下文切换导致效率很低。尽管 Java1.6 为 synchronized 做了优化,增加了从偏向锁到轻量级锁再到重量级锁的过度,但是在最终转变为重量级锁之后,性能仍然较低。 CAS (乐观锁) 乐观锁,它不会阻塞任何线程,所以在效率上,它会比 synchronized 要高。所谓乐观锁就是:每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。 二、ABA问题及解决 原子引用 结果: true 2019 原子引用计数(解决ABA问题) 结果: t3 第一次版本号1 t4 第一次版本号1 t3 第一次版本号2 t3 第一次版本号3