Windows提权方法简单总结

目录 前言 一、本地提权 系统内核溢出漏洞提权 错误系统配置提权 可信任服务路径漏洞 系统服务权限配置错误 计划任务提权 GPP组策略首选项提权 令牌窃取 数据库提权 二、域内提权 MS14-068 CVE-2020-1472 令牌窃取 前言 写了好多天的windows与linux提权技巧,现在做下简单的总结。 提权是后渗透重要的一环节,在权限较低的情况下,我们在进行一些操作如读取/写入敏感文件、权限维持等会受到束缚,所以需要提权。 在实际中我们会碰到工作组和域环境,工作组环境我们提权的目的是从普通用户权限到管理员或者system权限。而域环境中我们通常是从域用户到域管理员权限。 一、本地提权 系统内核溢出漏洞提权 这个提权方法是比较常用的方法。利用系统溢出漏洞进行提权的关键是通过查看系统的补丁信息来找寻缺失的、可以利用来提权的补丁进行提权 1. 首先获取补丁信息 获取补丁信息 systeminfo | findstr KB 获取系统版本信息 systeminfo | findstr OS 2. 将 补丁信息复制,再去这个网站上看看寻找缺失的补丁以及提权exp,再利用—> 提权辅助网页 Windows提权辅助 传送门——> Windows系统内核溢出漏洞提权 错误系统配置提权 由于管理员对系统的一些错误或不安全的配置,导致漏洞的发生。Windows中的错误系统配置提权包括:Trusted Service Paths(可信任服务路径)漏洞提权、系统服务权限配置错误、计划任务提权等。 可信任服务路径漏洞 如果一个服务调用的可执行文件的路径没有被双引号引起来,且路径带空格,且当前用户又有写权限。这个漏洞就会被攻击者用来上传任意可执行文件进而进行权限提升 在msf中使用如下模块进行漏洞检测 use windows/local/unquoted_service_path 传送门——> 可信任服务路径漏洞提权 系统服务权限配置错误 系统服务程序加载时往往都是运行在系统权限上的。所以如果一个低权限的用户对于此类系统服务调用的可执行文件具有可写的权限,那么就可以将其替换成我们的恶意可执行文件,从而随着系统启动服务而获得系统权限。 msf中使用如下模块检测 use windows/local/service_permissions 传送门——> 系统服务权限配置错误提权 计划任务提权 如果我们对以高权限运行的任务所在目录具有写入权限,就可以使用恶意程序覆盖掉原来的程序。当计划任务下次执行时,就会以高权限运行恶意程序,进而完成提权 传送门——> GPP组策略首选项提权 管理员可以通过在组策略首选项中一键给域中计算机下发策略,其策略信息如组策略数据、域数据存储在SYSVOL文件夹中,域用户都可以访问该文件夹。若通过组策略修改域内机器管理员密码,其密文信息会保存在SYSVOL文件夹内。攻击者如果获取了该密码信息就可以破解,相当于就获取到了管理员密码 msf中使用如下模块检测 run post/windows/gather/credentials/gpp 令牌窃取 Windows Token其实叫Access Token(访问令牌),它是一个描 述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,所以,拿到某用户的Token即可伪装成某用户

通过office部署工具安装office

本教程同样使用于在已安装offic 365的基础之上安装如Project、Visio 1. 下载office部署工具 微软官网Office Deployment Tool 2. 运行Office Deployment Tool工具 下载文件后,运行自解压缩可执行文件,其中包含 Office 部署工具可执行文件 (setup.exe) 和多个示例配置文件 (configuration.xml) 3. 编辑xml配置文件 首先声明,上图中的四个后缀名为xml的文件均为示例文件 (1). 可选择四个中的一个xml文件作为自己的配置文件 此处我选择 configuration-Office36-x64.xml 作为自己的配置文件 首次打开该文件是这样的 <!-- Office 365 client configuration file sample. To be used for Office 365 ProPlus apps, Office 365 Business apps, Project Pro for Office 365 and Visio Pro for Office 365. For detailed information regarding configuration options visit: http://aka.ms/ODT. To use the configuration file be sure to remove the comments The following sample allows you to download and install the 32 bit version of the Office 365 ProPlus apps and Visio Pro for Office 365 directly from the Office CDN using the Current Channel settings --> <Configuration> <Add OfficeClientEdition="

用户名枚举/邮箱轰炸攻击

用户名枚举 漏洞描述 该漏洞存在于系统登陆页面,利用登陆时输入不存在用户名和正确用户名但密码错误时的回显信息不同这一特点,可枚举出系统中存在的账号信息。 漏洞影响 攻击者可借此漏洞枚举出系统中存在的所有账号,造成信息泄露,随后可针对这些用户名进行暴力破解或其他攻击尝试。 修复建议 该漏洞可以通过设置输入“不存在用户名”和“正确用户名但密码错误”的回显信息相同——例如“用户名或密码错误”来防范。 除此之外,还可以结合常见的防范暴力破解的方法: 增加安全的人机验证机制(例如验证码),并且验证码必须在服务器端进行校验,客户端的一切校验都是不安全的。 如果用户登录次数超过设置的阈值,则锁定帐号(有恶意登录锁定帐号的风险)。 如果某个 IP 登录次数超过设置的阈值,则锁定IP。 邮箱轰炸攻击 漏洞描述 由于对用户发送邮件的次数没有限制,导致可以无限的向用户发送邮件,从而造成邮箱轰炸。 漏洞影响 如果该漏洞被攻击者利用,可能大量消耗服务器资源。 修复建议 限制服务器端发送邮件的频率,比如同一个账号1分钟内只能发送1封邮件。 在发送邮件之前,使用图形验证码进行验证。

如何理解泛型的上限限定和下限限定

泛型的上限限定:? extends E 代表使用的泛型只能是E的子类或者本身 泛型的下限限定:? super E 代表使用的泛型只能是E的父类或者本身 先看继承关系 Integer extends Number extends Object String extengs Object 下面请看代码 public class Demo01 { public static void main(String[] args) { List<Integer> list1 = new ArrayList<>(); List<Number> list2 = new ArrayList<>(); List<String> list3 = new ArrayList<>(); List<Object> list4 = new ArrayList<>(); //将以上集合分别传到show1和show2的参数中 show1(list1); show1(list2); show1(list3); show1(list4); show2(list1); show2(list2); show2(list3); show2(list4) } public static void show1(List<? extends Number> list) {} public static void show2(List<?

【Python实现杨辉三角】

目录 什么是杨辉三角 杨辉三角解法 1. 定义法 2. 计算杨辉三角 补0法 3. 杨辉三角,对称法 4. 杨辉三角,单列表方法 5.列表嵌套(二维数组) 6. 新旧两行,一次性开辟新行 7.yield函数 8.zip函数 参考资料链接: 一、什么是杨辉三角 杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。 杨辉三角_百度百科 ​ 杨辉三角的性质: 每个数字等于上一行的左右两个数字之和。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和。 为了解决这个问题,并了解更多的解法,我在网上查找了一些资料,将解法进行了汇总 二、杨辉三角解法 1. 定义法 思路: 从第三行开始,每一行的首尾都是1,中间部分每个数字等于上一行的左右两个数字之和。先定义每一行的第一个数字,然后在利用规则对中间部分进行运算,最后再添加最后一个元素。 PS:这个解法还是比较容易想出来的 代码: # 计算杨辉三角 定义法 n = eval(input("输入要打印的行数:")) triangle = [[1], [1, 1]] for i in range(2, n): # 已经给出前两行,求剩余行 pre = triangle[i-1] # 上一行 cul = [1] # 定义每行第一个元素 for j in range(i-1): # 算几次 cul.append(pre[j]+pre[j+1]) # 每个数字等于上一行的左右两个数字之和。 cul.

Webot增加节点到机器人手臂

1.打开Webot,导入机器人 2.在一个关节上增加一个Solid点 3.把shape关节点放到Solid点下,作为child 4.修改最下面的关节点名字为BaseSolid,并修改boundingObject为USE Base 5.逐步修改其它的名字为Axis_{n}和Axis_{n}_Solid 6.用改过名的名字Solid设置Boundingbox为对应的Shape 7.给底座增加HingeJoint节点 8.设置链接节点参数 9.设置端点节点 10.由于Webot的坐标轴和AutoCAD的坐标轴不同,需要转换Y轴和Z轴 原文:https://www.youtube.com/watch?v=s151UClAnEkhttps://www.youtube.com/watch?v=s151UClAnEk 

力扣每日一题(难的我也不会)2038. 如果相邻两个颜色均相同则删除当前颜色(2022.3.22)

2038. 如果相邻两个颜色均相同则删除当前颜色 难度中等62收藏分享切换为英文接收动态反馈 总共有 n 个颜色片段排成一列,每个颜色片段要么是 'A' 要么是 'B' 。给你一个长度为 n 的字符串 colors ,其中 colors[i] 表示第 i 个颜色片段的颜色。 Alice 和 Bob 在玩一个游戏,他们 轮流 从这个字符串中删除颜色。Alice 先手 。 如果一个颜色片段为 'A' 且 相邻两个颜色 都是颜色 'A' ,那么 Alice 可以删除该颜色片段。Alice 不可以 删除任何颜色 'B' 片段。如果一个颜色片段为 'B' 且 相邻两个颜色 都是颜色 'B' ,那么 Bob 可以删除该颜色片段。Bob 不可以 删除任何颜色 'A' 片段。Alice 和 Bob 不能 从字符串两端删除颜色片段。如果其中一人无法继续操作,则该玩家 输 掉游戏且另一玩家 获胜 。 假设 Alice 和 Bob 都采用最优策略,如果 Alice 获胜,请返回 true,否则 Bob 获胜,返回 false。

kubeadm、kubectl 常用操作命令

列出组件 kubectl get pods --all-namespaces 查看节点 kubectl get nodes 查看集群状态 kubectl get cs 查看部署状态 kubectl get deploy -n kube-system 查看命名空间下映射的端口 kubectl get svc -n kube-system 查看日志 journalctl -u kubelet 列出token kubeadm token list 创建token 用来加入集群 kubeadm token create --print-join-command 创建一个 Master 节点 kubeadm init \ --apiserver-advertise-address=172.17.28.225 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.23.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --ignore-preflight-errors=all 将一个 Node 节点加入到当前集群中 kubeadm join 172.17.28.225:6443 --token 8i06g2.5oooxc52052wshr4 --discovery-token-ca-cert-hash sha256:25c4aa52e8c24287665e03643ac1ae7496b84768960660ff4ea2ced757f61a1b

回文素数与反素数程序 python

反素数(逆向拼写的素数)是指一个将其逆向拼写后也是一个素数的非回文数。例如:13和31都是素数,且13和31都不是回文数,所以,13和31是反素数。 输入一个正整数 n , 请输出从小到大排列的的前n个反素数,数字后面以一个空格进行分隔。 import math def sushu(x): for i in range(2,int(math.sqrt(x))+1): if x%i == 0: return False return True def bushihuiwen(x): bianliang1 = int(x[::-1]) if (bianliang1 != int(x) and (sushu(bianliang1))): return True return False x = int(input("需要几个反素数回文")) i,j = 0,2 while(i<x): if(sushu(j) and bushihuiwen(str(j))): print(j,end=" ") i += 1 j+=1 回文素数是指一个数既是素数又是回文数。例如,131,既是素数又是回文数。 用户输入一个正整数 n , 请你在一行内输出从小到大排列的的前n个回文素数,数字后面用一个空格进行分隔。 import math def sushu(x): for i in range(2,int(math.sqrt(x))+1): if x%i == 0: return False return True def bushihuiwen(x): bianliang1 = x[::-1] if (bianliang1 == x): return True return False x = int(input("

8B/10B编码基本原理

一、为什么需要8B/10B编码 简单的说是为了实现直流均衡。在高速串行通信中,8B/10B编码是一种经常用到的编码方式。 而高速串行总线中,通常采用交流耦合方式,即在发送端(TX)串接电容,根据电容“隔直流,通交流”的特性,或者理想电容的阻抗公式: 电容阻抗公式 信号频率越高,电容阻抗越低。当数据位流中出现多个连续的1或0时,可以认为该时间段信号是直流的,电容的损耗变大,导致信号的幅度降低,直流信号被滤除,到最后无法识别是1还是0。而且接收端收到连续的1或0时,没有充分的定时信息,对接收端的解码带来了困难。其原理如下图所示: 8B/10B编码以字节为单位,将数据映射成10位宽度的数据(具体映射方式可查表),使得编码后的二进制数据流中1和0的数量基本保持一致,同时确保字节同步易于实现。 二、8B/10B编码基本原理 8B/10B编码是1983年IBM公司的Al Widmer和PeterFranaszek提出的输出传输编码标准1,目前已广泛的应用在高速串行总线中。 假设原始8位数据从高到低用HGFEDCBA表示,8B/10B编码将8位数据分成高3位HGF和低5位EDCBA两个子组。然后经过5B/6B编码,将低5位EDCBA映射成abcdei;高3位经过3B/4B编码,映射成fghj,最后合成abcdeifghj发送。发送时由于是小端模式,a先发送。其对应关系如下图所示: 通常,认为会将低5位EDCBA按其十进制数值记为x,将高3位按其十进制数值记为y,将原始8bit数据记为D.x.y。例如8bit数“101 10101”,即十进制数181,按照上述划分原则x=10101(21),y=101(5),所示这个数被表示为D.21.5。此外在8B/10B编码中,还需用到12种控制字符,用来标识传输数据的开始和结束,传输空闲等状态,按照上述规则,将控制字符记为K.x.y。 这个时候问题来了,8位原始数据对应256个码,加上12种控制字符,而编码后的10位数据有1024个码,肯定有很多是用不到的,故需选择其中一部分来表示8bit数据,所选的码字0和1的数量应尽可能相等。 表1所示为5B/6B编码映射关系表2: 表2所示为3B/4B编码映射关系表: 表3所示为8B/10B编码映射关系表3:其映射原理将在下文中阐述。 注:表中用红色标注的应为D3.7。表中只列出部分编码映射关系。 为了明白8B/10B的编码原理,首先要明白两个重要的概念:“不一致性”(disparity)和“运行不一致性”,也翻译成“极性偏差”(running disparity,RD)。 Disparity表示编码后的码型数据中“1”的个数与“0”的个数的差值。由表1,表2及表3中的编码规则可知:Dirparity的取值只有“+2”(“0”比“1”多两个)、“0”(“0”和“1”数量相等)和“-2”(“0”比“1”少两个)。编码中“1”和“0”数量相等的码字称为“完美平衡码”。 RD是对编码后的数据流Disparity的一个统计,如果“1”的个数大于“0”的个数,则RD取正,记为RD+;如果“1”的个数小于“0”的个数,RD取负,记为RD-。8B/10B编码由3B/4B编码和5B/6B编码两部分组合而成,通过传递RD参数来使整个编码结果具有很好的直流平衡性。4 在编码时,RD的初始值为负,即RD-,根据当前的RD值,决定相应的编码输出。比如:在表1中,对于D.x.3(011),其对应的4B码字有两种:1100和0011,若此时RD为负,则取1100作为其对应的4B码字作为输出,同时检验此时的编码是否为完美编码,如果是完美编码,则保持RD的极性不变;否则改变RD的极性。通过控制RD的极性,同时在编码时根据RD的极性选择相对应的编码值,使得编码后的数据流有更好的直流平衡特性。5 下图所示为RD状态转移图: 由于控制字符只有12种,对其单独编码即可,可不按照上述方法对其编码。其编码映射关系如下: Widmer, A. X.; Franaszek, P. A., “A DC-Balanced, Partitioned-Block, 8B/ 10B Transmission Code”, IBM Journal of Research. Development, VOL. 27, NO. 5, September 1983.pdf ↩︎ 张平. 基于FPGA的高速8B/10B编解码电路设计[D].安徽大学,2016. ↩︎ 李宥谋.8B/10B编码器的设计及实现[J].电讯技术,2005(06):26-32. ↩︎ 靳鹏.基于FPGA的8B/10B编码器的设计与实现[J].电子世界,2018(08):142-143. ↩︎ 杨佩,张丽娜,张洵颖等.LVDS中8B/10B编码解码器的设计与实现[J].微电子学与计算机,2014,5:41-44 ↩︎

Mybatis 布尔值类型作为判断条件

实体类 public class Person { private String id; private String name; private Boolean result; // 省略get和set } Mybatis的SQL <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xxx.TypeMapper"> <select id="selectInfo" parameterType="com.xxx.entity.Person" resultType="String"> SELECT <choose> <!-- result是布尔值,布尔值进行判断的时候 使用下面的判断方法,而不是 result == 'true' 或者 result == true --> <when test="result"> '我是true' AS result </when> <otherwise> '我是false' AS result </otherwise> </choose> FROM DUAL; </select> </mapper>

nacos、ribbon和feign(openfeign)的简明教程

文章目录 概述1. nacos简明教程1.1 为什么需要nacos?1.2 如何使用Nacos1.2.1 Nacos server的启动1.2.2 在微服务中使用Nacos做服务注册和发现1.2.3 服务的调用 2. 负载均衡的问题2.1 使用Feign 参考 相关文章: 【spring cloud 】Ribbon和OpenFeign(代替RestTemplate) Dubbo 与 Feign 的区别 nacos、ribbon和feign的简明教程 概述 Feign官网 Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端,基础语法: //Feign是个外套,需要指定底层的通信协议,这里是OkHttp public class Example { public static void main(String[] args) { GitHub github = Feign.builder() .client(new OkHttpClient()) .target(GitHub.class, "https://api.github.com"); } } 起初feign是Netflix 公司下的产品,由于 Netflix 公司不再维护feign,feign由社区维护,feign更名为 openfeign,并且项目迁移到新的仓库(前面官网地址就是openfeign)。后续版本仅使用“io.github.openfeign”,推荐使用该依赖。 Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。 spring-cloud-openfeign 是基于 openfeign 进行包装,集成了 SpringMVC 的注解等方便SpringBoot项目开发的一个组件。也就是这个时候,你才能使用注解语法 @FeignClient(name = “xxx-member”,path = “/member”)语法 一般使用<artifactId>spring-cloud-starter-openfeign</artifactId>集成 1. nacos简明教程 1.1 为什么需要nacos? 在微服务架构中,微服务之间经常要相互通信和调用,而且一个服务往往存在多个实例来降低负荷或保证高可用。我们假定A服务要调用B服务,最简单的方式把B服务的地址和端口保存在A服务的配置文件中。然后通过http请求去完成B服务的调用。但是B服务可能有好多个实例,而且可能会随着业务的需求随时的扩展或者停用掉一些实例,这个时候B服务的地址和端口可能会经常发生改变。如果记录在配置文件就多有不便。而且在众多的B服务中,可能有一些服务会出现各种问题坏掉,我们可能还需要写一个心跳检测,看看是不是所有的服务都正常运行,及时地剔除掉那些不能用的服务。如果完备稳定的实现这些功能,是一个不小的工作量。还好凡是有困难的地方总有前人造轮子。而Nacos就是来解决这样问题的轮子。

mac https本地跨域配置

本地开启网页服务的方法很多,一般借助emcc自带的emrun命令 emrun --no_browser build 即可开启本地http服务 最近在搞webassembly多线程,由于chrome在91版本之后如果要开启对sharedarraybuffer的使用,需要对网页配置跨域隔离,搜了网了有不少解决方案,我这边试了两个: 1、设置参数--disable-web-security,[yourname]换成电脑名称,一般是admin,这种方法,虽然设置跨域成功了,但是sharedarraybuffer没有启用成功,有时间可以去研究一下 open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=/Users/[yourname]/MyChromeDevUserData/ 2、 开启https服务,注意不是http,两者有些区别,本地开启https是默认会开启跨域隔离的,接下来就是研究如何开启https服务,可以参考Using SSL in local developmenthttps://blog.revathskumar.com/2020/07/using-ssl-in-local-development.html 1)安装AC证书 这一步使用mac的homebrew安装,brew install mkcert 2)执行mkcert --install 3)执行mkcert localhos 127.0.0.1,这时候目录下面会出现两个localhost的pem的证书 4)执行python脚本启用https服务 跨域服务参考资料: Cross Origin Isolation:如何进行跨域隔离 - sky0014 - 博客园 https://github.com/sky0014/blog/blob/main/cross-origin-isolation.md 解决 SharedArrayBuffer is not defined - 掘金 https://segmentfault.com/a/1190000012550346

centos8.2换源填坑的一天20220323

客户那里拿到了一个机子,想装个docker,换源搞半天。。 centos镜像-centos下载地址-centos安装教程-阿里巴巴开源镜像站 不成功。。 CentOS 8 EOL如何切换源? - 云服务器 ECS - 阿里云 不成功。。 其他帖子,各种尝试,用centos-vault 就是不成功: http://mirrors.aliyuncs.com/centos-vault 打不开 http://mirrors.cloud.aliyuncs.com/centos-vault 打不开 repomd.xml下载不了、parser error 下载成功,but checksum doesn't match ,sha256不对 等等。。 可能是我的版本或者配置有问题。。 最后用了centos/8-steam/ ,终于ok了 Centos8修改源_少十步的博客-CSDN博客_centos8 源 配置文件: [base] name=CentOS-$releasever-stream - Base - mirrors.aliyun.com #failovermethod=priority baseurl=https://mirrors.aliyun.com/centos/$releasever-stream/BaseOS/$basearch/os/ http://mirrors.aliyuncs.com/centos/$releasever-stream/BaseOS/$basearch/os/ http://mirrors.aliyun.com/centos/$releasever-stream/BaseOS/$basearch/os/ gpgcheck=1 gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official #additional packages that may be useful [extras] name=CentOS-$releasever-stream - Extras - mirrors.aliyun.com #failovermethod=priority baseurl=https://mirrors.aliyun.com/centos/$releasever-stream/extras/$basearch/os/ http://mirrors.aliyuncs.com/centos/$releasever-stream/extras/$basearch/os/ http://mirrors.aliyun.com/centos/$releasever-stream/extras/$basearch/os/ gpgcheck=1 gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever-stream - Plus - mirrors.

Mac下安装Redis

Mac下安装Redis 安装Redis启动查看redis服务进程redis-cli连接redis服务关闭redis服务强行终止redisredis.conf 配置文件 安装Redis 启动 默认启动 // redisStart.sh #!/bin/bash redis-server 带配置文件启动 redis-server ./redis.conf 查看redis服务进程 ps axu | grep redis redis-cli连接redis服务 redis-cli -h 127.0.0.1 -p 6379 kaiwang@kaideMacBook-Pro bin % redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> 127.0.0.1:6379> ping PONG 127.0.0.1:6379> 关闭redis服务 // 正确停止Redis的方式应该是向Redis发送SHUTDOWN命令 // redisShutdown.sh #!/bin/bash redis-cli shutdown 强行终止redis sudo pkill redis-server redis.conf 配置文件 教程 link.

ArcGIS 地图的一些常用方法汇总

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、1. 首先下载 ArcGIS ,然后在当前使用的页面引入2. 还需要在样式中引入。3. 在页面创建一个id。4.我直接贴上整个代码,附带注释。以供更好的理解,或整体使用。 总结 前言 个人对ArcGIS 地图使用的一些理解和方法 大概分为以下几类: 1:图层的添加。 2:热力图。 3:绘图小部件。 4:视频图层。 5:空间查询。 6:地图点击事件。 以下方法是在vue中使用 一、 1. 首先下载 ArcGIS ,然后在当前使用的页面引入 代码如下(示例): 1:npm install esri-loader --save (或者cnpm) 2:import { loadModules } from "esri-loader"; 2. 还需要在样式中引入。 代码如下(示例): @import "http://10.101.21.67:8099/lgpc/arcgis_js_v422_api/arcgis_js_api/javascript/4.22/esri/themes/light/main.css"; 放在style中就好。 3. 在页面创建一个id。 <div id="viewDiv"></div> 4.我直接贴上整个代码,附带注释。以供更好的理解,或整体使用。 代码如下(示例): createMapView() { var map; var view; var that = this; var nnerId = ""; loadModules([ //引入的这些注意顺序,有时候顺序不对,也会报错加载不出来的。 "esri/config", "esri/Map", "esri/views/MapView", "esri/widgets/Sketch", //绘图小组件 "

WPS关联EndNoteX9

EndNote9正版链接,这是我看到的一个大佬博文里的链接,里面提供的还有一个百度网盘链接。大佬提供的还有Endnote20,感兴趣的可以都去看看。 我在WPS通过com加载项加载endnotex9时一直没反应,试过很多种方法,最后找到了一位知乎大佬的解答,茅塞顿开。 总结如下: (原因) endnote是64位的,安装时自动在C:\Program Files\Common Files\ResearchSoft\Cwyw\19生成了供office加载的dll。但是并没有在C:\Program Files (x86)\Common Files\ResearchSoft\Cwyw\19创建文件。WPS是32位的,要关联endnote需要在C:\Program Files (x86)\Common Files\ResearchSoft\Cwyw\19下去找,根据1的陈述铁定找不到,所以wps不会显示endnote加载项。 (解决方法)手动创建C:\Program Files (x86)\Common Files\ResearchSoft\Cwyw\19文件夹,需要注意的是19对应的是X9,如果是20对应的就是endnote20,这是版本号。在endnote安装路径(我的是D:\endnotex9)下找到D:\endnotex9\Product-Support\CWYW 下的Cwyw_x86.dat ,并且将它的后缀名改为.rar ,然后解压缩到当前文件夹下。最后把解压文件夹下的所有文件复制到C:\Program Files (x86)\Common Files\ResearchSoft\Cwyw\19文件夹下。 最后看一下打开WPS后的效果: 需要注意的一点是,如果打开WPS看不到endnote,需要以管理员身份运行WPS。

计算机组成-陆俊林

目录 1.电子计算机的兴起 2.冯诺依曼结构的要点 3.冯诺依曼结构的小故事 4.计算机结构的简化模型 5.计算机执行指令的过程 6.计算机输入和输出 7.冯诺依曼结构和具体实现 8.设计自己的计算机 9.x86体系结构 10.x86指令简介 11.复杂的x86指令举例 12.MIPS体系结构 13.MIPS指令简介 14.算术运算和逻辑运算 15.门电路的基本原理 16.寄存器的基本原理 17.逻辑运算的实现 18.加法和减法的实现 19.加法器的优化 20.乘法的运算过程 21.乘法器的实现 22.乘法器的优化1 23.乘法器的优化2 24.除法的运算过程 25.除法器的实现 26.除法器的优化 27.设计处理器的准备 28.数据通路的建立 29.运算指令的控制信号 30.访存指令的控制信号 31.分支指令的控制信号 32.控制信号的集成 33.流水线的基本原理 34.流水线的优化 35.超标量流水线 ​ 36.流水线冒险 37.数据冒险的处理 38.控制冒险的处理 39.存储层次结构 40.DRAM与SRAM 41.主存的工作原理 42.主存技术的发展 43.高速缓存的工作 44.高速缓存的设计要点 45.存储容量的计算 46.中断和异常 47.中断向量表 48.中断的处理过程 49.内部中断的分类说明 50.基于中断的功能调用 51.输入输出接口的基本功能 53.输入输出接口的编制方式 53.输入输出的控制方式 55.中断控制方式 56.外部中断处理过程 57.直接存储器访问 1.电子计算机的兴起 2.冯诺依曼结构的要点 3.冯诺依曼结构的小故事 4.计算机结构的简化模型 5.计算机执行指令的过程 6.计算机输入和输出 7.冯诺依曼结构和具体实现 8.设计自己的计算机 9.x86体系结构 10.x86指令简介 11.复杂的x86指令举例 12.

【翻译】Dagre-D3 文档整理和翻译

地址: github Dagre-D3 目录 文章目录 dagre-d3设计优先级安装npmBowerBrowser Scripts源代码构建 如何使用Darge聚焦渲染例子 配置布局生成的图像第三部分例子推荐阅读 dagre-d3 Dagre是一个JavaScript库, 可以更轻易得在客户端布局连接图。此库是dagre的前端子库, 底层使用D3进行渲染。 如果要查看更多详细信息(包含样例和配置在内), 请查看wiki页面。 设计优先级 完全的客户端计算布局。如果客户端布局对你来说并非所需, 可以查看graphviz, 这是个功能丰富的代替品。 样式举例: 速度。Darge为了更快得绘制中等图像, kennel不会采用更合适、准确的算法。渲染的不可知性。Darge仅需要非常基础的信息就能绘制图像,比如节点的维度。你可以自由地使用任何你喜欢的技术渲染图形。此处推荐学习d3。 安装 npm 在安装这个库之前, 需要向安装npm 然后执行安装: $ npm install dagre Bower $ bower install dagre Browser Scripts 你可以获取到最新版的browser-ready版本文件: dagre.jsdagre.min.js 你也可以指定下载版本, 通过realease page找到所需版本。 源代码构建 在构建之前, 需要先下载npm管理器。 在此项目的根目录下执行以下命令: $ make dist 此命令会在当前项目的dist目录下生成dagre.js和dagre.min.js两个文件。 如何使用Darge 聚焦渲染 如上文提到, dagre仅聚焦于图像布局。 这意味着你需要使用dagre的布局信息来渲染图像。 这有一些渲染的选项: dagre-d3是一个基于d3的dagre渲染器JointJS是一个渲染器,提供了在渲染后编辑图像的工具Cytoscape.js是一个可以使用Dagre作为布局的完整的图像库,支持可视化和分析用例。 Cytoscape.js拥有复杂的渲染流程,由类似于CSS的样式表书写。 例子 首先,需要在HTML页面中导入Dagre库: <script src="https://PATH/TO/dagre.min.js"></script> 在Node.js中: var dagre = require("dagre"); 使用graphlib在dagre中创建图像。此处,它的API值得一看

uniapp 离线打包webview无法上传图片问题

离线打包上传文件选择文件上传失败,从文件点击选择的内容可以上传成功,其他路径进去上传失败,查了好久是因为清单文件的目标版本targetSdkVersion 写了29,改成28或者不填就好了。

512、java-求最大子数组

求最大子数组 方式一:穷举出所有子数组 public static void main(String[] args) { int[] arr = new int[]{1,2,-4,5,-3,5,3,-9,3}; querySubArr(arr); querySubArrExhaustively(arr); } /** * @description: 穷举的方式,罗列出所有子数组 * @param ${tags} * @return ${return_type} * @throws * @author chenjy */ public static void querySubArrExhaustively(int[] arr) { if (arr == null || arr.length == 0) throw new IllegalArgumentException("数组为空"); //1. 子数组容器 Map<Integer,String> map = new HashMap<>(); //穷举出所有子数组 for (int i = 0; i < arr.length; i++) { int key = arr[i]; String value = arr[i]+"

jmeter性能测试场景设计

Jmeter场景设置 初始配置 可参阅:https://blog.csdn.net/DDJ_TEST/article/details/123660120 线程组插件 安装插件:jpgc - Standard Set 1、总线程100个,启动之前等待15秒,线程初始运行20个,每隔30秒5秒钟内增加10个, 持续运行60秒,最后每1秒停止5个 jp@gc - Stepping Thread Group (deprecated) 2、当测试需求:进行波浪形的压力测试场景时,使用该线程组,例如:测试场景总共有10个线程,然后分为三个波浪进行测试 jp@gc - Ultimate Thread Group 3、测试场景总共有30个线程,然后分为3次逐渐增加负载,每次增加10个线程 jp@gc - Ultimate Thread Group 案例 响应时间 每秒事务数 查看服务器网络有没有瓶颈 C:\Users\MSoffice>ping 192.168.10.22 -t 正在 Ping 192.168.10.22 具有 32 字节的数据: 来自 192.168.10.22 的回复: 字节=32 时间=5ms TTL=92 来自 192.168.10.22 的回复: 字节=32 时间=5ms TTL=92 来自 192.168.10.22 的回复: 字节=32 时间=5ms TTL=92 来自 192.168.10.22 的回复: 字节=32 时间=5ms TTL=92 来自 192.168.10.22 的回复: 字节=32 时间=5ms TTL=92 来自 192.

Web是如何知道登录状态的

文章目录 程序说明:设想情景以及结果问题实验截图 程序说明: 本程序没有做自动登录,仅仅只是做了登录验证,关闭浏览器是需要重新登录的 设想情景以及结果 第一步清除所有cookies,进入登录页 未登录的时候,查看cookies 结果:在登录页面的时候,就存在cookies 登录之后,查看cookies,并对比未登录的时候的cookies的值 结果:登录之后的cookies和登录之前完全一样 登录之后的页面,删除cookies,刷新网页 结果:跳转到登录页面,同时cookies刷新为新的值 退出网页,重新进入登录页面,查看cookies的值 结果:登录页面的cookies刷新为新的值 问题 网页是如何知道用户已经登录了,毕竟登录前后cookies没有改变 实验截图

mockjs的使用

mockjs入门操作 首先先创建一个新的Vue项目,然后安装mockjs 与 axios 安装axios 是为了能模拟后台接口。 安装完以后启动我们的项目,在main.js中引入mock.js文件,import '@/mock/mock.js' mock.js mock.vue文件 页面/控制台数据 以上就是使用mockjs生成的模拟数据,在开发的时候如果没有数据地址可以使用这个,基本上可以满足平时开发的需要。

idea配置代码自动格式以避免被代码检测工具扫出格式问题

通常公司的代码检测工具会对代码的格式进行多维度的限制,而这些限制可以通过在idea的Code Style中进行配置,并通过Reformat Code一键格式化,idea针对各种场景的配置项很多,可以根据代码检测工具检测出的具体场景寻找对应的配置,一键解决代码格式问题。以下以java为例,列出频率最高的三个场景: 第一,单行的字符数限制在120个以内; 第二,禁止.*格式的package的import; 第三,代码未格式化(空格、换行等,该问题通过执行Reformat Code即可); 具体的配置过程如下: 第一个问题: 从上面截图可知,除了标红的需要打勾之外,还可以根据代码检测工具的实际提示,勾选更多的配置,以实现一键解决对应的其他问题。 第二个问题: 执行Reformat Code:

安装vue-devTool

因为chrome浏览器受限,不能在线安装devTools插件,只能离线安装。离线安装的方法有如下几种: 下载devTools源码 devtools下载地址:https://github.com/vuejs/devtools 下载之后通过cmd命令进入到文件夹, 1、首先输入安装依赖; 输入npm install命令 2、接着编译 输入npm run build命令 3、如果第二步成功之后,修改manifest.json文件 找到manifest.json文件(shells -> chrome -> manifest.json ),用记事本打开,然后将persistent的值修改为true。 4、添加devTools插件 打开chrome浏览器的扩展程序界面,打开开发者模式按钮, 5、拖文件 找到chrome文件( shells -> chrome)直接将文件拖进去即可。 以上是在网上查找的方法,可能由于网络的原因,安装依赖时缺少了文件,导致执行npm run build命令时报错,于是,我又使用了另外的方法。直接下载crx文件。 直接下载crx文件 下载crx文件,在网上找到一个下载地址:https://pan.baidu.com/s/14PoaihUHQZEJtiHNWUmdjg ps:这个链接下载的是4.1.4版本的。 下载完之后,打开chrome浏览器的扩展程序界面,确认开发者模式按钮已经打开,然后直接将crx文件拖进界面,弹出提示框,点击添加扩展程序即可。 添加成功之后如下图所示: 安装成功之后再浏览器右上角可以查看 在调试界面也可以看到该插件: 然后就可以通过该窗口查看界面的一些数据信息。 

组合优化问题的典型事例

组合优化问题的典型事例 week4 组合优化:是关于寻找元素的子集 那就是: 满足某些约束条件并且给定成本函数(最小权重,最短路径…) 组合优化问题的示例: 1.背包 2.图中的最小生成树 3.图中的最短路径 4.最小顶点或集合覆盖 5.最大独立集 6.最小顶点着色 计算困难问题的优化 棘手的问题:你已经看到了各种各样的问题不太可能解决的问题的示例在多项式时间内求解(NP难问题)。 应用:在后续中,我将提供有效解决这些问题的方法。 优化问题的方法: 分支与边界 动态规划 近似(算法) 随机算法 分支和边界:限制(系统的)搜索空间利用下界和上界并提供最优解。 有三种结合方式: 1.动态规划 2.近似算法 3.随机算法 背包问题(Knapsack Problem) 输入:n项,正有理权w1,wn和值v1,vn以及正有理容量C。 任务:找到具有权重的项目的子集≤ 最大化 总价值。 背包问题:复杂性与算法 背包是NP完全的,有一种O(Cn)背包算法,使用动态 编程;只有在C不太大的情况下才有效。 背包问题:数学公式 决策变量:我们为项目选择:x1,Xn,其中xi=如果未选择项目i,则为0;如果选择了项目i,则为1 计算公式: 图片 背包问题是组合优化中的一个问题:给定一组项目,每个项目都有一个权重和一个值,确定要包含在集合中的每个项目的数量,以便总权重小于或等于给定的限制,并且总值尽可能大。 当前解~x在每次递归调用时都会求值(重量和价值)。那么所有变量x1到xz都被认为是固定的。 枚举:枚举背包的所有有效解决方案 这个问题对应于一个集合的所有子集的枚举物品(不包括背包中不适合的子集)。 解向量和优化函数:针对每个电流解向量~x=(x1,…,xn)我们保持:当前总值vcurr和当前总重量wcurr 全局变量: 最佳解向量~xbest和关联的最佳总价值vmax 方法:分而治之 这个方法会枚举所有的可能结合的方式,追踪所有的数据,停止当得到最佳结果时.这是一个递归过程. 执行:算法首先调用Enum(0,0,0,~0)。 第一个是number z of already assigned variables in ~x;第二个是total value vcurr;第三个是total weight wcurr;第四个是 current solution-vector ~x. 这样受限的搜索空间通过考虑是否包括z+1项,以这种方式创建的所有子问题都是递归解决的。 运行时:每个n项和每个递归调用的工作量是恒定的(不包括递归)。因此,总运行时间为O(2n). C来限制weight和,最佳结果是在这种限制下能够得到的最大value值 图片 背包:改进枚举 改进思路:在z<n固定的情况下检查部分解变量。

win10 更改中文用户名为英文

更改用户名 一般是将我们电脑路径C:\User\“中文名字”改为C:\User\“英文名字” !!!!!!!!!注意!!!!!!! 一般不建议更改用户名,更改后可能会造成很多问题,谨慎更改 修改文件夹名称 百度上的教程大部分都是让修改注册表,这种解决方法不太完整,下面教大家完整的修改方法!【每个人的电脑情况有可能不同,修改有风险】 ① Win+R打开命令窗口,输入regedit 打开注册表,手动找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList 在这个目录下面有几个S-1-5-的项,挨个检查每一项,找到“ProfileListPath”项,看它后面的数据值是不是为C:\User\名字,若是,右键修改,将“名字”改为“CGHQ”【这个名字是列举,可以自行修改自己喜欢的英文或者数字,不要中文】。点击确认,关闭注册表。 ② 重启电脑 此时去C:\User目录下是不能修改名称的,重启电脑,需要注意的是,此时重启电脑后桌面会变成第一次使用的样子,很多程序失踪了就 网上的教程一般到这一步便结束了,不用担心。 我们现在去C:\User下去修改名字,右键要修改的文件夹,这时候会出现重命名选项,将名字改为“CGHQ” 确认后再次重启电脑,重启后电脑就会恢复原来的样子。 ③ 创建链接 修改完了后,会发现很多程序的配置文件路径还是原来的中文名C:\User\名字,所以打开它们会出现路径不存在的错误 此时不用担心,查看 C:\User 文件夹 下是否还有 之前用户名的文件 ,有的话点开,一般 之前用户名的文件夹 中的内容都转移到了 新的用户名文件夹,查看有没有重要的文件,没有的话删除 此文件夹,不删除会和之后创建快捷方式造成同名冲突 我们在C:\User 文件夹下创建一个 和之前用户名同名的 快捷方式,具体操作如下:找到cmd.exe(C:\Windows\System32),右键以管理员身份运行,执行命令 MKLINK /J C:\User\叮当 C:\User\dingdang 注意:(电脑不同,该命令的大小写不同可能会报错,多试几种,注意大小写中英文符号),/J的意思就是将路径为C:\User\名字的链接全部赋给C:\User\name 这时候无论访问 C:\User\叮当 还是 C:\User\dingdang 都将跳转到C:\User\dingdang 这时候就完全OK啦! 后续 可以更改环境变量中的 包含用户名的相关路径?

Maven如何导入dependencies的jar包

打开项目的pom.xml目录,输入cmd,进入命令行页面。 输入:mvn dependency:copy-dependencies -DoutputDirectory=lib 成功! 犹记得我导了一下午jar包的那天… 所以说有新技术要去学啊,不要总是视而不见,懒得学!

使用Vue指令实现下拉菜单效果

使用Vue指令实现下拉菜单效果 模仿重庆红岩历史革命博物馆官网的导航栏内容和效果,使用Vue实现。 官网地址如下:https://www.hongyan.info/ 官网效果 效果图片展示 我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。 代码展示 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="https://unpkg.com/vue@next"></script> <style> ul,li{ list-style: none; } a{ text-decoration: none; } .nav{ /* width: 100%; */ margin-top: 50px; height: 100px; background-color: #eb131e; } .nav-list{ width: 1500px; margin: 0 auto; } .menus{ float: left; } .menus .menus-a{ /* display: block; */ float: left; font-size: 25px; color: #ffffff; font-weight: bold; width: 140px; text-align: center; height: 70px; padding: 30px 0 0 0; border-right: 3px #FFFFFF solid; } .

WebStorm2021.3将项目绑定Git上传到(gitee)码云以及pages服务部署

WebStorm2021.3将项目绑定Git上传到(gitee)码云以及pages服务部署 想将本地的项目推送到远程仓库,需要提前安装Git系统 Git下载、安装教程及环境配置(超详细步骤讲解,手把手指导) 一、在WebStorm安装插件Git和Gitee(码云) 在插件商店中搜索,并且安装插件Git和Gitee(码云) 登录自己的gitee账号 二、为当前项目创建本地仓库 选择本地仓库地址为项目的所在地址即可 项目中标注为红色的文件名为没有add过的,add后为绿色,白色表示已经commit过的。 创建后会在该项目目录下生成.git隐藏文件 首次创建时需要全部add(添加)一下:右键项目,Git,点击add,如下图所示,add后全为绿色。 三、将项目代码提交到远程仓库 选择提交的内容、填写提交信息、push到远程仓库 警告信息:IDE在提交前会对代码进行检查,因此会有代码检查的警告和错误信息, 而非提交不成功的警告。因此可之际忽略。 如下图:直接点击 提交 点击加号,添加一个远程仓库,名字可以取和项目名字相同,地址为上述在Gitee中创建的仓库的地址 最终的push确认,点击push后提交到远程仓库 四、使用 gitee 的 pages 服务部署以上的页面 打开所创建的仓库 选择服务——>Gitee Pages——>启动 ps:个人建议将文件名修改为index.html 这篇博客中我所配置的网站地址: https://yuhaowen.gitee.io/vfor_phone 我的Gitee个人主页:https://gitee.com/yuhaowen

git reset撤销索引操作和git restore恢复工作树文件 (十)

文章目录 1 git reset 重置当前HEAD到指定的状态1.1 概要 2 git restore 恢复工作树文件2.1 概要 3 导航页 1 git reset 重置当前HEAD到指定的状态 1.1 概要 git reset [-q] [<tree-ish>] [--] <pathspec>... git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>] git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>...] git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>] git reset [-q] [<tree-ish>] [--] <pathspec>..., git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>] 匹配<pathspec>所有路径重置索引条目到git 树的状态。git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>.

Maven的安装与应用,以及idea的简单项目案例图解

1. Maven简单介绍 Apache Maven是个项目管理和自动构建工具,基于项目对象模型(POM)的概念。 作用:完成项目的相关操作,如:编译,构建,单元测试,安装,网站生成和基于Maven部署项目。 与Gradle功能相似都是自动构建工具。 但是市场上Maven使用的更多。 但是还是有人会不太明白什么是自动构建工具,这里我就使用黑窗口做个例子 这里我自己写了一个简单的java文件,这种方式就是手动构建方式。 与之相对,自动构建工具就是帮助你构建的工具。 我本人以前就使用了一年多的开发工具:Eclipse 简单的理论就到此; 接下来讲下载与安装; 首先打开浏览器进入百度搜索如图输入:Maven Download 点击官方下载,可以跳转到官方的下载地址。 接下来我们找到Files进行下载, 因为它是开源的,所以如果需要源码的看有Source的,同时windows系统的使用有zip的 这里我使用不带源的zip;如图 如图就是在下载了,可能会有点慢,是正常现象。 下载完,右键文件,选择在文件夹显示,将压缩包剪切到自己存放软件的地方解压,注意!!!!目录中不能出现中文或者特殊符号,尽量不要存放在c盘,因为c盘是系统盘,东西多了系统会卡。 如图: 我在d:盘中建了一个文件夹Maven; 路径就是:D:\Maven 现在下载完了,接下来我们来配置maven的环境变量; 右键此电脑(此处注意!!!不是此电脑的快捷方式!!!如图,快捷方式会有一个小箭头) 点击属性,你会看到一个高级系统设置(如果没有可以百度查找一下自己的电脑的高级系统设置在哪,这里我有俩种情况的图) 打开后会弹出系统属性的弹出框; 在高级选项卡中点击环境变量; 开始配置环境, 如果以前有配过,那么双击M2_HOME开始修改,没有的话如图: 直接新建一个M2_HOME注意空格以及下划线! 变量值就是你刚刚解压的apache-maven-3.8.5的路径 如图 路径一定要正确,然后点确定,这个M2_HOME就行了; 在配置一个MAVEN_HOME,变量值和刚才的一样 如图: 把这个也弄好后重点来了!!! 找到Path 双击开始修改, 这里分支又来了,有的人因为版本问题页面效果会和我这种不一样, 如图这是我的图1: 这是另一种图2: 如果你的是图2的请先在桌面新建一个text记事本,打开记事本把你的变量值原本的内容复制到记事本中,如图 注意结尾是否有英文的分号结尾";"如果没有请加上英文的分号结尾一定要注意!!!要英文的!!! 打上分号后拼接上:%MAVEN_HOME%\bin;%M2_HOME%\bin; 如图: 然后Ctrl+a选中全部,Ctrl+c复制,切回到编辑系统属性来把之前的变量值覆盖掉(双击变量值内容选中然后Ctrl+v)。 然后点击确定就好了 现在来讲图1的 点击图1右边的新建在光标闪烁处输入:%MAVEN_HOME%\bin 如图: 再点击一次新建和上面一样在光标闪烁处输入:%M2_HOME%\bin 注意!!!!此时不用也不能打分号! 两个都加上后点击右下角的确定就行 Maven的环境变量配置就完成了。 接下来我们验证一下, 在Windows系统自带的命令提示符也就是黑窗口,右键以管理员身份运行输入:mvn -version 出现我这种就是没问题了,如果你弄好了来黑窗口验证没有有可能是你配合后没有点击应用导致的,可以一个一个点击确定然后关闭,然后把黑窗口关闭重新打开避免没有加载。如果还是没有的话你又相信你没有错,那么建议你重启电脑试试,还是没有的话那么就是你中途不小心没弄好。请重新配置O(∩_∩)O哈哈~ 别以为没有了哦!目前只是能用还没有弄完呢! 打开Maven目录下的conf文件夹 如图: 打开settings.xml(建议使用高级记事本打开) 将第53行原本注释未使用的代码复制到下面进行使用 如图: 然后把复制出来的代码中间的内容换成你的个人仓库路径(专门用来放jar包的文件夹), 注意把\切换成/!! 如图:

STATA:面板数据滞后需要注意(同一家企业滞后出现空缺数据的原因)

首先按照样本个体和时间设定成面板数据。 那么在滞后命令后:gen interlnNPLDAge1=L.interlnNPLDAge (4,487 missing values generated) gen interlnNPLDAge2=L2.interlnNPLDAge (7,557 missing values generated) 结果发现在样本4的7个年份里(序号15-21)竟然有空缺数据(序号19),见下图。前三列分别是原数据、滞后一阶、滞后两阶数据。 结果发现:样本4的时间不连续,因此系统这样做是对的。

Vue-ondurationchange(监听歌曲是否已经加载完成)

详情可见 问题:切换歌曲的时候歌曲时间有时候不会修改为正确的时间,那是因为歌曲还未加载完成,只有歌曲加载完成之后才能获取到歌曲的总时长 注意点: 在iOS中系统不会自动加载歌曲, 所以oncanplay不会自动执行 解决方案: 如何监听iOS中Audio的歌曲是否已经准备好了, 通过ondurationchange事件来监听 ondurationchange事件什么时候执行: 当歌曲加载完成之后执行, 因为只有歌曲加载完成之后才能获取到歌曲的总时长 watch watch:{ currentIndex () { //歌曲加载完成后才会执行 this.$refs.audio.ondurationchange = () => { //获得歌曲时间 this.totalTime = this.$refs.audio.duration //如果正在播放则切换到下一首继续播放 暂停则下一首暂停 if (this.isPlaying) { this.$refs.audio.play() } else { this.$refs.audio.pause() } } } }

基于seed和deap数据的脑电情绪识别的相关整理

代码篇 整理好了之前用过的关于做脑电情绪识别的所用到的,代码均已成功调试运行,其中细节部分看各篇博客,: DEAP: SEED: 脑电信号处理,脑电情绪识别,包括deap和seed数据集,大部分都是代码加数据,deap有三篇带论文的源码,seed有两篇带论文的源码。 最好是看有代码有论文的,一起对应着理解 seed数据集和相关代码链接:seed数据集及相关代码https://download.csdn.net/download/qq_45874683/84367142

python 万年历 以1800年开始

直接上代码,比较简单懒得写注释了 def is_leap_year(year): if(year%4==0 and year%100!=0) or (year%400==0): return 1 else: return 0 def get_num_of_day_in_month(year,month): if month==2: if is_leap_year(year): days=29 else: days=28 elif month in[4,6,9,11]: days=30 else: days=31 return days def get_total_num_of_day(year, month): yearday = 0 for i in range(1800, year): if is_leap_year(i): yearday += 366 else: yearday += 365 for i in range(1, month): yearday += get_num_of_day_in_month(year, i) return yearday def print_information_title(year,month): if year < 1800 : print("小于1800,请重新输入一个年份") return False else: print((str(year)+"

求最大值及其下标

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。 输入格式: 输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。 输出格式: 在一行中输出最大值及最大值的最小下标,中间用一个空格分开。 输入样例: 6 2 8 10 1 9 10 输出样例: 10 2 //求最大值及其下标 int main() { int N = 0; int arr[10] = { 0 }; int max = arr[0]; int index = 0; scanf("%d", &N); for (int i = 0; i < N; i++) { scanf("%d", &arr[i]); if (max < arr[i]) { max = arr[i]; index = i; } } printf("%d %d", max, index); return 0; }

Postman提取返回值

本文转载于:Postman提取返回值 - janehost - 博客园 (cnblogs.com)https://www.cnblogs.com/LOVEYU/p/11118627.html json响应结果 Postman是做接口测试的,但是很多接口并不是直接就能测试的,需要一些预处理。比如登录的时候,需要传递一个token。如果是网页测试,一般打开登录页面的时候就会自动生成一个token,如果返回的是json格式,用Postman从中提取值很简单的,在Test中输入: { "access_token": "dda7b55f-574d-4de6-9f62-d849d5894ba9", "token_type": "bearer", "refresh_token": "1da3f4fb-dbf7-40d6-9316-32916f4c0d03", "expires_in": 3599, "scope": "READ WRITE" } 如上要提取access_token的值,在Test中输入: //保存响应结果json var jsonData = JSON.parse(responseBody); //将响应结果中的access_token保存为全局变量hb_access_token //最新版本pm环境变量设置使用方法 pm.globals.set("hb_access_token",jsonData.access_token); 上面的响应结果是json格式,如果响应结果是text格式的如何获取返回值呢? text响应结果 案例1 VZISsIhsksx3lHKksBE68sJ8NFlzZWNyZXRJZD1BS0lEbXRoeUxFNFFXMDVXWEhqNFN5RjBEdkpBbElPeHFyY3cmY3VycmVudFRpbWVTdGFtcD0xNTYxOTc5MTMzJmV4cGlyZVRpbWU9MTU2MjE1MTkzMyZyYW5kb209MzQ0MjkwOTEyJnByb2NlZHVyZT1oYi1tcDQtMjA= 如果是这种响应结果,那么获取响应值如下: pm.globals.set("hb_sign",pm.response.text()) 如果响应的结果是html格式,那么怎么获取其中需要的value呢? 案列2 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8" /> <title>Redmine</title> <meta name="description" content="Redmine" /> <meta name="keywords" content="issue,bug,tracker" /> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="UhYn8Ww03yLd1hNoliKSmU5uUZO33AmuxH+NQEqD3r2YCCdC64pmgmWOQNjyoAoki9MRJLosWAC0RX20+Th+gA==" /> <link rel='shortcut icon' href='/redmine/favicon.ico' /> <link rel="

使用HTML创建表单

<form></form>标记被用于定义表单域,即创建一个表单。action、method、name为表单标记<form>的常用属性。 action属性用于指定接收并处理表单数据的服务程序的。 method属性用于设置表单数据的提交方式,其取值为get或post。 name属性用于指定表单的名称,以区分一个页面中的多个表单。 autocomplete属性用于指定是否自动完成功能。“自动完成”是指表单控件输入的内容记录下来,当再次输入时,会将输入的历史记录显示在一个下拉列表里,以实现自动完成输入的功能。该属性有2个值: on;表单有自动完成功能。 off:表单无自动完成功能。 input元素拥有多种输入类型即相关的属性,其常用的属性如下表: 属性属性值描述typetext单行文本输入框password密码输入框checkbox复选框button普通按钮radio单选按钮submit提交按钮reset重置按钮image图像形式的提交按钮hidden隐藏域file文件域emailE-mail地址的输入域urlURL地址输入域number数值的输入域range一定范围内数字值的输入域date、month、week、time、datetime、datetime-local日期和时间的输入类型search搜索域color颜色输入类型tel电话号码输入类型name由用户自定义控件的名称value由用户自定义input控件中的默认文本值size正整数input控件在页面中显示宽度readonlyreadonly该控件内容为只读(不能编辑修改)disableddisabled加载页面时禁用该控件(显示为灰色)checkedchecked 定义选择控件默认被选中的项 maxlength正整数控件允许输入的最多字符数autocompleteon/off设定是否自动完成表单字段内容autofocusautofocus指定页面加载后是否自动获取焦点formform元素的id设定字段隶属于哪一个或哪几个表单listdatalist元素的id指定字段的候选数据值列表multiplemultiple指定输入框是否可以选择多个值min、max和step数值指定输入框索允许的最大值、最小值及间隔pattem字符串验证输入的内容是否与定义的正则表达式匹配placeholder字符串为input类型的输入框提供一种提示requiredrequired规定输入框填写的内容不能为空 number类型的input元素用于提供输入数值的文本框。具体属性有四个: 1、value:指定输入框的默认值。 2、max:指定输入框可以接受的最大的输入值。 3、min:指定输入框可以接受的最小的输入值。 4、step:输入域合法的间隔,如果不设置,默认值是1.list Date Pickers类型是指时间日期类型,HTML5中提供了多个可供选取日和时间的输入类型。 时间和日期类型时间和日期类型说明date选取日、月、年month选取月、年week选取周和年time选取时间(小时和分钟)datetime选取时间、日、月、年(UTC时间)datetime-local选取时间、日、月、年(本地时间) list属性用于设置数据列表,它可以指定输入框所绑定的datalist元素。list属性的值是某个datalist元素的id。 multiple属性指定输入框可以选择多个值,multiple属性用于file类型的input元素时表示可以选择多个文件。 placeholder属性用于为input类型的输入框提示相关信息以描述此输入框期待用户输入何种内容。 placeholder属性适用于type属性值为text、search、url、tel、email及password的标记。 required属性用于规定输入框填写的内容不能为空,否则不允许用户提交表单。 textarea元素:当定义input控件的type属性值为text时,可以创建一个单行文本输入框。但是如果需要输入大量的信息,单行文本输入框就不在适用,为此HTML5提供了textarea标记,通过其可以轻松地创建多行文本框。cols和rows为textarea标记的必须属性,其中cols用来定义多行文本输入框每行中的字符数,rows用来定义多行文本输入框显示行数,它们的取值均为正整数。textarea元素除了cols和rows属性外,还能拥有几个可选属性,分别为disabled、name和readonly 属性属性值描述name有用户定义控件的名称readonlyreadonly该控件内容为只读(不能编辑修改)disableddisabled加载页面时禁用该控件(显示为灰色) datalist元素定义输入框的选项列表,列表通过datalist内的option元素进行创建。datalist元素通常与input元素配合使用来定义input控件的取值。 Keygen元素用于设置表单的密钥生成器,能够使用户验证更为安全可靠。 keygen属性说明autofocus使Keygen字段在页面加载是获得焦点challenge如果使用则将Keygen的值设置为在提交时询问disabled禁用Keygen字段form定义该Keygen字段所属的一个或多个表单Keygen定义Keygen。rsa用于生成PSA密钥name定义Keygen元素的唯一名称,用于在用户提交表单时搜集字段的值 output元素用于不同类型的输出,可以在浏览器中显示计算结果或脚本输出。常有的属性有三个如下表: 属性 说明 for定义输出域相关的一个或多个元素form定义输出字段所属的一个或多个表单name定义对象的唯一名称

从注册表恢复PATH环境变量

文章目录 问题定位解决方案从注册表找到备份 以绝后患 问题定位 昨天新装了个排版软件CTex,今天偷闲下来准备摸摸鱼,发现Windows Terminal都打不开了。 不仅如此,自己写的小工具也问题频发,顿觉不妙。 于是打开cmd测试了一下netsh等命令也报错,然后马上定位是不是Path环境变量出了问题。 打开path一看,果然!原有的环境变量全被CTEX这一堆给覆盖了(是不是恶意删除不好说)。 解决方案 从注册表找到备份 打开注册表cmd> regedit 定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\path项 可以看到(默认)值即为我们丢失前的path环境变量 直接将第3步的值复制到Environment的Path即可快速恢复 补充:如果碰到几个环境变量挤在同一行的情况,按分号依次拆分即可。 否则可能报错 以绝后患 至此,环境变量恢复完成,又可以快乐coding了。 为了防止CTEX又给我搞事情,连夜卸载,以绝后患 顺便推荐一个CTEX的替代品:overleaf,免安装在线使用,再也不用担心本地环境出问题了。

js运算精度丢失问题

js运算精度丢失问题 正常情况下0.0023 * 100 = 0.23,但js运算会出现下面这种精度丢失问题: 0.0023 - 0.00000011 ==> 0.0022998899999999997 0.0023 + 0.00000000000001 ==> 0.0023000000000099998 0.0023 * 100 ==> 0.22999999999999998 0.0023 / 0.00001 ==> 229.99999999999997 实际打印结果: 取余也同样存在精度丢失问题: 下面直接参考别人写的方法:【中间处理了一些问题,文章最后有整理优化后的运算方法 + 取余的精度方法】 // 加 function floatAdd(arg1, arg2) { var r1, r2, m; try { r1 = arg1.toString().split(".")[1].length; } catch (e) { r1 = 0; } try { r2 = arg2.toString().split(".")[1].length; } catch (e) { r2 = 0; } m = Math.

vue路由传参的两种方式,实现返回上个页面不刷新

我的项目是当在新增页面(下面叫A页面)先提交一些数据,然后跳转到下一个页面(下面叫B页面)再填写数据,然后返回到新增的页面 之前我直接跳转回B页面goback(),这样的话跳转回来A页面就什么数据都没有了 解决方法有两种,一种是在地址栏里面拿参数 this.$router.push({ name:'xxxxxxxxx', // 跳转的页面名称 params:{ id:this.id || "xxxxxxxxxx" } }) 在B页面拿取 this.$route.params.id 然后在B页面再把ID传回之前A的页面 this.$router.replace({ name: "supervision-member-editor", params: { id: this.groupId } }) 第二种是$roure官方文档提供的方法 https://router.vuejs.org/zh/guide/essentials/passing-props.html#%E5%B8%83%E5%B0%94%E6%A8%A1%E5%BC%8F 1,在A页面传参 this.$router.push({ name: "supervision-member-createPerson", params: { groupId: this.groupId || this.id //groupId类似于row.id } }) }, 2,在路由文件里面接收传值 ps:要传的ID啥的一定要在地址栏定义数据并且带过去 3,在B页面接收传值 props: { id: { type: String, default: "" }, groupId: { type: String, default: "" } }, 4,在B页面传值回去 goBack() { this.$router.replace({ name: "supervision-member-editor", params: { id: this.

Schedutil governor情景分析

前言 内核工匠在之前的几篇文章中已经详细介绍了CPU的调频子系统的软件框架,本文把重点放在了schedutil governor(后文称之sugov)的代码逻辑。通过详细的代码级别的分析,希望能够帮助读者理解sugov的代码精妙之处。本文主要分四个章节:第一章简单重复了sugov相关的软件结构和基本算法,让读者对整个sugov在系统所处的位置和基本的逻辑控制有所了解。第二章对sugov使用的数据结构给出了详细的解释。第三章对sugov和cpufreq core的基本数据流和控制流进行分析。第四章描述了sugov本身的调频逻辑。 本文出现的内核代码来自Linux5.10.61,为了减少篇幅,我们会引用缩减版本的代码(仅包含主要逻辑),如果有兴趣,读者可以配合原始代码阅读本文。 一、Sugov概述 1、sugov相关软件模块 Sugov在整个调频软件的位置如下所示: Sugov作为一种内核调频策略模块,它主要是根据当前CPU的利用率进行调频。因此,sugov会注册一个callback函数(sugov_update_shared/sugov_update_single)到调度器负载跟踪模块,当CPU util发生变化的时候就会调用该callback函数,检查一下当前CPU频率是否和当前的CPU util匹配,如果不匹配,那么就进行提频或者降频。 为了适配各种场景,sugov还提供了可调参数,用户空间可以检测当前的场景,并根据不同的场景设定不同的参数,以便满足用户性能/功耗的需求。 Sugov选定target frequency之后,需要通过cpufreq core(cpufreq framework)、cpufreq driver,cpu调频硬件完成频率的调整。cpufreq core是一个硬件无关的调频框架,集中管理了cpufreq governor、cpufreq driver、cpufreq device对象,同时提供了简单方便使用的接口API,让工程师很轻松的就能完成特定governor或者driver的撰写。 2、Sugov的基本算法描述 Sugov的基本算法如下: 和基于采样的governor不同的是sugov是基于调度器调度事件的。每当发生调度事件的时候,负载跟踪模块会及时更新各个level的调度实体和cfs_rq的平均调度负载(sched_avg),直到顶层cfs rq(即CPU的平均调度负载)。 每当CPU利用率发生变化的时候,调度器都会调用cpufreq_update_util通知sugov,由sugov判断是否需要进行调频操作。基于采样的governor是governor定期去采样负载信息,而sugov是调度事件(进程切换、入队、出队、tick等)驱动调频的,因此调频会更及时。具体驱动调频的时机包括: (1)实时线程(rt或者deadline)的入队出队 (2)Cpu上的cfs util发生变化 (3)处于Iowait的任务被唤醒 调度事件的发生还是非常密集的,特别是在重载的情况下,很多任务可能执行若干个us就切换出去了。如果每次都计算CPU util看看是否需要调整频率,那么本身sugov就给系统带来较重的负荷,因此并非每次调频时机都会真正执行调频检查,sugov设置了一个最小调频间隔,小于这个间隔的调频请求会被过滤掉。当然,这个最小调频间隔规定也不是永远强制执行,在特定情况下(例如cpufreq core修改了sugov可以动态调整的范围的时候),调频间隔判断可以略过。 由于调频的最小粒度是cluster,当一个cpu上的util发生变化而发起调频操作的时候,实际上sugov会遍历cluster中的所有CPU(如果cluster中只有一个cpu,那么不需要这么复杂,我们这里以cluster中包含多个cpu的sugov_update_shared场景为例来进行说明),找到util最大的那个,用这个最大的util来驱动调频。 在计算cpu util要从多个视角考量: (1)cfs、rt、dl、irq的load avg。这些都是从执行时间的视角来看util,由于PELT窗口是同步的,因此这些load avg可以对比和运算 (2)任务属性视角。对于deadline类型的任务,我们需要根据当前dl任务的参数来计算满足该任务deadline的最小utility。 找到cluster中最大的cpu utility之后,通过将其映射到一个具体的CPU frequency上来(具体参考map_util_freq函数)。目前sugov采用的映射公式如下: next_freq = C *max_freq * util / max 其中C = 1.25,表示CPU需要调整的next freq需要提供1.25倍的算力,这样CPU在next freq上运行当前的任务还有20%的算力余量。这里计算出来的next_freq未必是最终设定的频率,因为底层硬件支持的调频是一系列的档位频率,因此,还需要底层硬件驱动进一步根据next_freq来选择一个它支持的频率,最后设定下去。 二、sugov使用的数据结构 1、structsugov_tunables 这个数据结构用来描述sugov的可调参数: 2、structsugov_cpu Sugov为每一个cpu构建了该数据结构,记录per-cpu的调频数据信息: 3、structsugov_policy Sugov为每一个cluster构建了该数据结构,记录per-cluster的调频数据信息: 三、Sugov和cpufreq core之间的接口和流程分析 1、Sugov的注册 如果想要自己实现一个cpufreq governor,那么就需要定义一个struct cpufreq_governor的数据对象并向cpufreq framwork(或者叫cpufreq core)系统注册它。对于sugov而言,这个数据对象定义如下:

C++之装饰(decorator)模式

0. 简介 很多时候我们在接手代码的时候会发现很多时候我们需要在原本基础的类中加入一些功能,或者要调用多个类来组合成一个新类来工作。这时候我们需要使用装饰或者适配器模式来对整个结构去聚合或者多重继承出自己想要的类型。装饰模式是一种结构型设计模式,其可以动态的为一个类增加职责(相对于继承)。 1装饰模式 部件 (Component) 声明封装器和被封装对象的公用接口。具体部件 (Concrete Component) 类是被封装对象所属的类。 它定义了基础行为, 但装饰类可以改变这些行为。基础装饰 (Base Decorator) 类拥有一个指向被封装对象的引用成员变量。 该变量的类型应当被声明为通用部件接口, 这样它就可以引用具体的部件和装饰。 装饰基类会将所有操作委派给被封装的对象。具体装饰类 (Concrete Decorators) 定义了可动态添加到部件的额外行为。 具体装饰类会重写装饰基类的方法, 并在调用父类方法之前或之后进行额外的行为。客户端 (Client) 可以使用多层装饰来封装部件, 只要它能使用通用接口与所有对象互动即可。 2. 装饰模式示例 装饰模式和生成器模式类似,都没有一个合适的template模板类来便捷的导入,这里我们可以看一下这篇文章中的代码。来感受一下装饰模式的魅力。 #include "iostream" using namespace std; // 部件 class Component_CS { public: virtual ~Component_CS() {} //const表示this是一个指向常量的指针,=0表示这个成员函数是纯虚函数 // https://blog.csdn.net/weixin_45525272/article/details/105840562 virtual void fire() const = 0; }; // 具体部件 class ConcreteComponent_CS { public : ConcreteComponent_CS(){} virtual ~ConcreteComponent_CS(){} virtual void fire() const { cout<<"反恐精英:"<<endl; } // void fire() const override // { // cout<<"

*与++优先级问题

优先级: 前置 ++ 和 * 的优先级相同,从右向左进行运算。 后置 ++ 比 * 的优先级高,从左到右进行计算,但是后置++还是需要等到表达式运算结束后才++。 各种++和* #include <iostream> using namespace std; int main() { int arrays[]{12,34,32,69,43}; int * p=arrays; //从右向左进行,先++,再取值,就是34 cout<<"*++p: "<<*++p<<endl; //从右向左进行,先取值,再++,就是将arrays[1]变成35 cout<<"++*p: "<<++*p<<endl; //后置++优先级高但是要表达式结束后再++,就是先取值再++ //由于优先级的作用,这里++不是对取值之后的*p,而是对p进行++,指针下移 cout<<"*p++: "<<*p++<<endl; //和上面的那个式子一样,就是先取值,再++指针下移, cout<<"*(p++): "<<*(p++)<<endl; //括号括住的优先级最高,先取值再++,将array[3]变成70,但是输出结果还是69 cout<<"(*p)++: "<<(*p)++<<endl; cout<<"*p:"<<*p<<endl; return 0; } 输出: *++p: 34 ++*p: 35 *p++: 35 *(p++): 32 (*p)++: 69 *p:70

vue3 form 报错: please transfer a valid name path to form item

最近vue3着实很火,但很多伙伴在用的时候发现很多坑,比如说上面这个报错 please transfer a valid name path to form item! 为什么会出现这个问题呢,我是在使用antd的动态增减表单(循环)的时候报了这个错误,搞了很久才找到根本原因。 原因:你的formItem的name属性没有和数据输入(input)框关联起来,导致表单规则校验一直报错 解决方法: 因为出现这种场景很多,所以这里提供几个注意事项,大家可以依次检查一下。 1.检查formItem的name属性名称是否和输入框value值一致 <a-form-item label="Username" name="username" :rules="[{ required: true, message: 'Please input your username!' }]" > <a-input v-model:value="formState.username" /> </a-form-item> 2.再循环中使用form时,name规则如下:(注意一下相同颜色部分一定要对应),要不然构建的dom树不能对应起来 <a-form ref="formRef" :model="dynamicValidateForm" @finish="onFinish" > <a-space v-for="(user, index) in dynamicValidateForm.users" :key="user.id" align="baseline" > <a-form-item :name="['users', index, 'first']" :rules="{ required: true, message: 'Missing first name' }" > <a-input v-model:value="user.first" placeholder="First Name" /> </a-form-item> </a-space> </a-form> 总结: 由于antd-vue有些属性注释不全,可能会碰到一些难缠的,所以这里记录一下

Spring Boot学习笔记总结(一)

文章目录 1. Spring Boot1.1 什么是Spring Boot?1.2 SpringBoot 官方的一些解释 2. 微服务架构2.1 单体应用架构2.2 微服务架构2.3 分布式要解决的问题 3. 搭建第一个SpringBoot程序3.1 在官方下载一个SpringBoot程序3.2 在IDEA中,创建SpringBoot程序(推荐) 4. Maven 配置jdk1.8编译5. SpringBoot的大体结构6. SpringBoot banner在线生成工具7. SpringBoot的 Pom.xml内容分析7.1 父工程 parent 和 修改依赖版本7.2 starter场景启动器7.3 SpringBoot的自动配置 8. SpringBoot 默认的包结构9. SpringBoot的默认配置10. SpringBoot 按需加载(即插即用) 1. Spring Boot 1.1 什么是Spring Boot? Spring的目的是为了解决企业级应用开发的复杂性而创建的,简化开发。 SpringBoot就是一个JavaWeb的开发框架。 1.2 SpringBoot 官方的一些解释 SpringBoot是整合Spring技术栈的快速开发脚手架。 SpringBoot适用条件(官方规定): java8以上版本。Maven3.3以上版本。 此外,不同版本的Springboot,可能还对java或Maven版本有要求。这个对于每个版本可以查看它的reference Doc参考文档。 参考文档里面有个Getting Started快速上手。 在Getting Start中找到System Requirements系统环境。 springboot可以做的一些事情: Microservices(微服务架构):将多个功能拆分成多个服务。Reactive:响应式。Cloud:云开发,分布式架构。Web apps:Web开发,ssm设计。Serverless:无服务开发(函数式服务)Event Driven:事件驱动。Batch:批处理。 springboot的两个技术栈: servlet栈和响应栈,就是两种技术流。平时学到的springmvc等技术属于servlet栈层次的。 Springboot的优缺点: 2. 微服务架构 2.1 单体应用架构 all in one 单体应用架构:

Mac 安装 MAT内存分析工具

一、 下载 https://www.eclipse.org/downloads/download.php?file=/mat/1.10.0/rcp/MemoryAnalyzer-1.10.0.20200225-macosx.cocoa.x86_64.zip 注意选择国内的下载镜像文件,会很快。如下图所示: 二、安装 使用unzip命令解压刚才下载的zip文件,解压后得到mat文件,如下 双击mat文件打开会报如下错误 按照提示打开日志文件,会有如下错误信息 java.lang.IllegalStateException: The platform metadata area could not be written: /private/var/folders/bx/32k5wynn03l5htl0lkzz4bw00000gn/T/AppTranslocation/907E9021-3F3C-441C-BAF5-F40CFD9ADD01/d/mat.app/Contents/MacOS/workspace/.metadata. By default the platform writes its content under the current working directory when the platform is launched. Use the -data parameter to specify a different content area for the platform. at org.eclipse.core.internal.runtime.DataArea.assertLocationInitialized(DataArea.java:70) at org.eclipse.core.internal.runtime.DataArea.getStateLocation(DataArea.java:138) at org.eclipse.core.internal.preferences.InstancePreferences.getBaseLocation(InstancePreferences.java:44) at org.eclipse.core.internal.preferences.InstancePreferences.initializeChildren(InstancePreferences.java:209) at org.eclipse.core.internal.preferences.InstancePreferences.<init>(InstancePreferences.java:59) at org.eclipse.core.internal.preferences.InstancePreferences.internalCreate(InstancePreferences.java:220) at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:349) at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:337) at org.eclipse.core.internal.preferences.PreferencesService.createNode(PreferencesService.java:393) at org.eclipse.core.internal.preferences.RootPreferences.getChild(RootPreferences.java:60) at org.

有关拆分弹窗报错问题汇总

如果父组件传递过来的值是绑定到子组件的v-model上,那么传的值需要是对象或数组形式子组件关闭弹窗需要调用父组件的方法(子组件不能修改父组件传递过来的值)id值如果是用的路由的,子组件中的方法中需要传参为id时,需要写为id:this.$route.query.id = ''