后台接受list的两种办法

//后台接受list的第一种方法 var users = new Array(); var user = {}; user.userName="aa"; user.userGuid="1"; users.push(user); var user1 = {}; user1.userName="aa"; user1.userGuid="1"; users.push(user1); var result=JSON.stringify(users); $.ajax({ type : 'POST', url : '${base}/aaa.do?guid='+ guid, dataType : 'json', contentType:"application/json", data:result, success : function(data) { } }); @RequestMapping("/aaa") @ResponseBody public Object aaa(@RequestBody List<SysUser> syss){ SysDepart model= sysDepartService.findById(guid); return model; } //后台接受list的第二种方法 如果还是400错误,就是实体的格式不正确 所以隐射不了 表单和 数组 一起拼接到后台 depart 的 users 接受 数组 var lsUsers = new Array(); var user1 = {}; user1.

css3--rem

DPR = 物理像素 / 逻辑像素 1.在JavaScript中,通过window.devicePixelRatio来获取 2.在css中,可以通过-webkit-device-pixel-ratio,-webkit-min-device-pixel-ratio和 -webkit-max-device-pixel-ratio进行媒体查询,对不同DPR的设备,做一些样式适配(这里只针对webkit内核的浏览器和webview)。 一,用媒体查询来设置html的font-size: @media screen and (min-width: 320px) { html {font-size: 14px;} } @media screen and (min-width: 360px) { html {font-size: 16px;} } @media screen and (min-width: 400px) { html {font-size: 18px;} } @media screen and (min-width: 440px) { html {font-size: 20px;} } @media screen and (min-width: 480px) { html {font-size: 22px;} } @media screen and (min-width: 640px) { html {font-size: 28px;} } 二、利用js来动态设置

C# WebAPI 上传文件和图片

前端使用 ajax+fromData 方式上传; 直接贴源码: 前台页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script> function doUpload() { var formData = new FormData($( "#uploadForm" )[0]); $.ajax({ url: 'http://localhost:16516/api/Upload?guid=1234567890' , type: 'POST', data: formData, async: false, cache: false, contentType: false, processData: false, success: function (returndata) { alert(returndata); }, error: function (returndata) { alert(returndata); } }); } </script> </head> <body> <form id= "uploadForm"> <p >指定文件名: <input type="text" name="filename" value= ""/></p > <p >上传文件: <input type="

Flume拦截器(Interceptor)

Flume中的拦截器(interceptor),当Source读取events发送到Sink的时候,在events header中加入一些有用的信息,或者对events的内容进行过滤,完成初步的数据清洗。这在实际业务场景中非常有用,Flume-ng 1.7中目前提供了以下拦截器: Timestamp Interceptor; Host Interceptor; Static Interceptor; UUID Interceptor; Morphline Interceptor; Search and Replace Interceptor; Regex Filtering Interceptor; Regex Extractor Interceptor; 可以对一个source指定多个拦截器,按先后顺序依次处理。如: a1.sources.r1.interceptors=i1 i2 a1.sources.r1.interceptors.i1.type=regex_filter a1.sources.r1.interceptors.i1.regex=\\{.*\\} a1.sources.r1.interceptors.i2.type=timestamp Timestamp Interceptor 时间戳拦截器,将当前时间戳(毫秒)加入到events header中,key名字为:timestamp,值为当前时间戳。用的不是很多。比如在使用HDFS Sink时候,根据events的时间戳生成结果文件, hdfs.path = hdfs://cdh5/tmp/dap/%Y%m%d hdfs.filePrefix = log_%Y%m%d_%H 会根据时间戳将数据写入相应的文件中。 但可以用其他方式代替(设置useLocalTimeStamp = true)。 [hadoop@h71 conf]$ vi timestamp.conf a1.sinks = k1 a1.channels = c1 a1.sources.r1.type = exec a1.sources.r1.channels = c1 a1.sources.r1.command = tail -F /home/hadoop/hui/hehe.txt a1.sources.r1.interceptors = i1 a1.sources.r1.interceptors.i1.type = timestamp a1.

共享单车工作原理

这里说的“共享单车工作原理”主要针对于单车上的那个智能车锁。当然,用过共享单车的人都知道——不是所有共享单车都有智能车锁。所以,我们先来讨论一下使用智能锁和机械锁的利弊: (1)机械锁(使用固定密码) 优点:不需要使用电源,成本低; 缺点:没有通信和定位模块,用户无法主动精确定位到单车位置,造成骑行不变,同时存在管理漏洞。 (2)智能锁(通过信息交互完成开锁) 优点:内置 GSM 与 GPS 模块,可以实时定位到单车位置,也可以开发增值服务,如预约单车、大数据分析等; 缺点:需要消耗电能,需要配套充电设备来弥补损失的电量。 显然,在互联网时代,使用智能车锁是更为明智的选择,但是必须克服瓶颈——电源! 我们先来聊聊内部的电源模块,电子锁内部主要存在两个耗电模块,一是给 GSM 与 GPS 模块供电,另外是给减速电机供电(扫码开锁,就是由减速电机转动完成自动开锁动作)。这两个模块所需的电源均是由内部的锂电池供电,锂电池电源会有变化,需要稳压模块供电,减速电机也需要驱动模块,这两个供电模块均是低压电源转换。 现在用的比较多的充电设备主要有两种:一是使用 IBC 太阳能面板供电,另外一种是骑行发电。太阳能面板随着光照的强度不同,其面板产生的电压范围较宽,需要使用DC-DC电源模块将宽泛的电压稳定成固定电压值给锂电池充电。骑行发电有两种发电电机:一类是花鼓发电,随着骑行速度增大,花鼓提供的电压增大,电压浮动范围超大;另外是动力回收,是靠刹车时带动高速齿轮电机发电,此电机具有瞬态输出电压高,功率大等特点。目前我们有全套的高压降压稳压与锂电池充电管理方案。已经大批量应用于现有的主力的共享单车方案中。 (未完待续…) 参考: http://www.sohu.com/a/167045000_355019

HDU 33蛇形填数

蛇形填数 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 输入 直接输入方陈的维数,即n的值。(n<=100) 输出 输出结果是蛇形方陈。 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 来源 算法经典 上传者 首席执行官 这道题的关键就在于要找到填数的规律,截止条件就是t=n*n #include <stdio.h> #include <string.h> int a[105][105]; int main() { int n; while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a)); int x=0,y=n-1,t=1; a[x][y]=1; while(t<n*n) { while(x+1<n&&!a[x+1][y]) a[++x][y]=++t;//先判断接下来这一个数是否符合条件,如果符合条件,就进行赋值! while(y-1>=0&&!

XYNUOJ 1122 布尔矩阵

1122: 布尔矩阵 时间限制: 1 Sec 内存限制: 32 MB 提交: 47 解决: 28 [ 提交][ 状态][ 讨论版] 题目描述 一个布尔矩阵有一种奇偶性,即该矩阵所有行和所有列的和都是偶数。下面这4×4的矩阵就具有奇偶性: 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 它所有行的和是2,0,4,2。它所有列的和是2,2,2,2。 现请你编写一个程序,读入这个矩阵并检查它是否具有奇偶性。如果没有,你的程序应当再检查一下它是否可以通过修改一位(把0修改为1,把1修改为0)来使它具有奇偶性。如果不可能,这个矩阵就被认为是破坏了。 输入 输入包含多组测试数据。每组测试数据的第一行是一个整数n(1<=n<=100),代表该矩阵的大小。在接下来的行中,每行有n个整数。矩阵是由0或1构成的。n=0时,输入结束。 输出 对于每组输入,如果这个矩阵具有奇偶性,则输出“OK”。如果奇偶性能通过只修改该矩阵中的一位来建立,那么输出“Change bit (i,j)”,这里i和j是被修改的这位的行号和列号。否则,输出“Corrupt”。 样例输入 4 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 4 1 0 1 0 0 0 1 0 1 1 1 1 0 1 0 1 4 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0 样例输出 OK Change bit (2,3) Corrupt 提示

java中的抽象类和接口

java中的抽象类和接口 一、抽象类: 1、什么是抽象类? Java中可以定义没有方法体的方法,方法的具体实现由子类完成,方法称为抽象方法,包含抽象方法的类就是抽象类。 2、抽象类和抽象方法分别是怎样定义的? 抽象类:访问修饰符abstractclass 类名{……} 抽象方法: 访问修饰符abstract返回类型 方法名(参数列表) public abstract class Shape { private String color; //定义一个计算周长的抽象方法 public abstract double calPerimeter(); //定义一个返回形状的抽象方法 public abstract String getType(); //定义Shape的构造器,该构造器并不是用于创建Shape对象,而是用于被子类调用 public Shape(){} public Shape(String color) { System.out.println("执行Shape的构造器..."); this.color = color; } public void setColor(String color) { this.color = color; } public String getColor() { return this.color; } } 3、抽象类和抽象方法的特点有哪些? (1)抽象类和抽象方法都通过abstract关键字来修饰; (2)抽象类不能实例化;抽象类可以没有、有一个或多个抽象方法,甚至全部方法都可以是抽象方法; (3)抽象方法只有方法声明,没有方法实现; (4)有抽象方法的类必须声明为抽象类; (5)子类必须重写所有抽象方法才能实例化,否则子类还是一个抽象类。 /** * 抽象类Shape的继承类Triangle */ public class Triangle extends Shape { //定义三角形的三边 private double a; private double b; private double c; public Triangle(String color , double a , double b , double c) { super(color); this.

阿里笔试题

1. class Cash { constructor(cash) { this.cash = cash; var fen = cash%100; var jiao = (cash/10)%10; var yuan = (cash/100); this.reCash = `${yuan}元${jiao}角${fen}分`; } add (obj1,obj2) { return reCash; } }; var cash1 =new Cash(105); var cash2 = new Cash(66); var cash3 = cash1.add(cash2); var cash4 = cash1.add(cash1,cash2); var cash5 = new Cash(cash1+cash2); console.log(${cash1},${cash2},${cash3}); 2.在用户体验良好的基础上,采集页面所有的ajax请求的返回状态和响应时间。 3.用户自定义事件机制 实现on,可给对象绑定多个函数,且函数能多次触发。 emit方法:只绑定一个,且只触发一次。 4.IE11中可以使用 Promise对象。 5.A>B 表示选择A元素的所有子B元素。(直接子元素) 与A B的区别在于,A B选择所有后代元素,而A>B只选择一代。 6. /[ABCD]{2,3}[a-z0-9]+/.test("CDEv"); /[ABCD]{2,3}[a-z0-9]+/.test("ABD5"); /[ABCD]{2,3}[a-z0-9]+/.

超分辨率重建之DRCN

本文与之前的SRCNN不同,采用的是递归卷积网络。对于图像复原问题的操作问题,深度学习处理的时候时不使用pooling层。如果增加网络的深度,将增加更多的参数,则会导致两个问题:一是容易过拟合,二是模型过大,难以存储和重现。因此使用递归神经网络,然而由于梯度消失/爆炸导致不易收敛。因此提出了两种解决方法:一是每层的递归层都是监督式的;二是类似于残差网络,采用skip connection 结构。具体的结构图如下图所示: 主要分为三个部分,第一部分是Embedding network,相当于SRCNN中的特征提取,二是Inference network,相当于特征的非线性变换,第三个是Reconstruction network,即特征图重建。其中的Inference network是一个递归网络,即数据循环地通过该层多次。将这个循环进行展开,就等效于使用同一组参数的多个串联的卷积层,如下图所示: 其中的H_1到H_D是D个共享参数的卷积层。DRCN将每一层的卷积结果都通过同一个Reconstruction Net得到一个重建结果,从而共得到D个重建结果,再把它们加权平均得到最终的输出。另外,受到ResNet的启发,DRCN通过skip connection将输入图像与H_d的输出相加后再作为Reconstruction Net的输入,相当于使Inference Net去学习高分辨率图像与低分辨率图像的差,即恢复图像的高频部分。最终的目标函数是一个多目标优化问题。除了每一个递归层的监督产生的误差还有最终效果的误差。 实验结果如下图所示: 参考: http://cv.snu.ac.kr/research/DRCN/ https://zhuanlan.zhihu.com/p/25532538

vue总结

1.vue中的MVVM模式 即Model-View-ViewModel。 Vue是以数据为驱动的,Vue自身将DOM和数据进行绑定,一旦创建绑定,DOM和数据将保持同步,每当数据发生变化,DOM会跟着变化。 ViewModel是Vue的核心,它是Vue的 一个实例。Vue实例时作用域某个HTML元素上的,这个HTML元素可以是body,也可以是某个id所指代的元素。 DOM Listeners和Data Bindings是实现双向绑定的关键。DOM Listeners监听页面所有View层DOM元素的变化,当发生变化,Model层的数据随之变化;Data Bindings监听Model层的数据,当数据发生变化,View层的DOM元素随之变化。 2.v-show指令,v-if的区别 条件渲染指令,与v-if不同的是,无论v-show的值为true或false,元素都会存在于HTML代码中;而只有当v-if的值为true,元素才会存在于HTML代码中。v-show指令只是设置了元素CSS的style值 3.如何让css只在当前组件中起作用 在每一个vue组件中都可以定义各自的css,js,如果希望组件内写的css只对当前组件起作用,只需要在style中写入scoped,即: <style scoped></style> 4.指令keep-alive 在vue-router写着keep-alive,keep-alive的含义: 如果把切换出去的组件保留在内存中,可以保留它的状态或避免重新渲染。为此可以添加一个keep-alive指令 <component :is='curremtView' keep-alive></component> 5.Vuejs组件 vuejs构建组件使用 Vue.component('componentName',{ /*component*/ }); 这里注意一点,组件要先注册再使用 Vue.component('mine',{ template:'#mineTpl', props:['name','title','city','content'] }); var v=new Vue({ el:'#vueInstance', data:{ name:'zhang', title:'this is title', city:'Beijing', content:'these are some desc about Blog' } }); 6.路由嵌套 路由嵌套会将其他组件渲染到该组件内,而不是进行整个页面跳转router-view本身就是将组件渲染到该位置,想要进行页面跳转,就要将页面渲染到根组件,在起始配置路由时候写到: var App = Vue.extend({ root }); router.start(App,'#app'); 这里首先将根组件注册进来,用于将路由中配置好的各个页面渲染出来,然后将根组件挂载到与#app匹配的元素上。 7.指令v-el的使用 有时候我们想就像使用jquery那样去访问一个元素,此时就可以使用v-el指令,去给这个元素注册一个索引,方便通过所属实例的$el访问这个元素。 注意 HTML不区分大小写,所以v-el:someEl将转换为全小写。可以用v-el:some-el然后设置this.$el.someEl。 示例 <span v-el:msg>hello</span> <span v-el:other-msg>world</span>

浅谈一次URL请求过程

一、前言 之前对浏览器到服务器端的过程不是很清晰,后来浏览了一些大牛的博客,有一些感悟,怕自己忘记,所以记录在自己的博客中。也希望能够给看到这篇博客的人一些帮助。 二、过程 1、当我们在浏览器中输入URL时,发生了什么? 浏览器会有自己的缓存。当我们在浏览器中输入内容的同时浏览器也会通过浏览器自身的搜索引擎根据用户输入的字符将匹配到的自己缓存中的内容显示在下拉框中,甚至能够将缓存在浏览器中的页面直接显示出来而不需要按下回车,这些是浏览器内核进行加工渲染的。浏览器缓存的内容通常都是用户经常访问的数据或者近期访问的数据且没有失效以及书签中的内容。 而在输入过程中会发生两种情况: 用户输入的是正常的能够访问的域名,也就是以字母、数字、标点符号组成的URL用户输入的是不能正常访问的域名,也就是不遵守规范随意输入的字符串 如果是是第一种情况,会进行 2 步骤。如果是第二种情况,那么浏览器就会提取出用户输入的某些关键字交给默认搜索引擎,根据默认搜索引擎直接搜索这些关键字。 2、当我们输入URL并按下回车后,发生了什么? 这里以用户输入正常URL并且没有被浏览器缓存命中来说。这时,浏览器就会获取以下信息: 请求协议,http/https请求资源主页,如:www.baidu.com 浏览器默认为http协议,而且如果服务器端开启了ssl协议,那么通过重定向,整个连接过程也会自动跳转到https协议上,而如果服务器端没有开启ssl协议,那么就算用户专门输入了https也没用。更何况,用户也通常不会专门在URL前面加上https前缀。所以这里以http为例。 DNS查询 当浏览器得到URL后,会检索自身DNS缓存。如果有,会通过该URL所对应的IP直接向该IP发起请求。如果没有,会检索操作系统的缓存。这一过程是通过调用库函数完成的,不同的操作系统调用的也是不同的库函数。如果操作系统中的缓存也没有,那么该库函数会检索在本地磁盘中的hosts文件。(不论是windows还是Linux,都是hosts文件)。如果本地磁盘中的hosts文件中也没有,则发起DNS请求 DNS请求 在操作系统中,如果以动态方式获取的IP,那么DHCP服务器不仅会给你分配IP,子网掩码,网关,还会给你分配DNS服务器并缓存在操作系统磁盘中。这里以CentOS为例。 如果动态获取IP,那么DNS服务器列表会缓存在/etc/resolv.conf如果静态配置IP,那么则要手动配置DNS服务器地址,不然不能解析URL。也可以将需要解析的URL所对应的IP写在相应的配置文件中。 而查询DNS服务器也分为两部分: DNS服务器与本地主机在同一个网段中,则直接进行ARP查询DNS服务器与本地主机不在同一个网段中,则ARP本地网关,由网关去找寻DNS服务器 ARP 过程 ARP(地址解析协议),能够在本地广播请求所需要的IP对应的MAC地址。当客户端需要向局域网的某一个主机发送报文时,就需要向局域网每一台主机广播 FF:FF:FF:FF:FF:FF (二进制全1)为地址的报文,询问 192.168.38.11 的MAC地址是什么?(来源于维基百科)。如果 192.168.38.11 所在地址的主机收到消息后则会进行响应,但是这个响应是单播的。 当然,如果DNS服务器与本机在同一个网段则广播的是DNS服务器的MAC地址,如果不在本地则广播的网关的MAC地址。 当收到网关的ARP响应后,会将DNS请求直接通过UDP协议进行封装后发送给网关,由网关进行转发发送给DNS服务器。 DNS解析 这里就涉及到DNS: Domain Name System(域名系统)的工作原理了。DNS查询有两种方式:递归和迭代。DNS客户端设置使用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果。而DNS服务器之间一般采用迭代查询方式。 以查询www.wikipedia.org为例: 客户端发送查询报文”query www.wikipedia.org”至DNS服务器,DNS服务器首先检查自身缓存,如果存在记录则直接返回结果。如果记录老化或不存在,则DNS服务器向根域名服务器发送查询报文”query wikipedia.org”,根域名服务器返回.org域的权威域名服务器地址,这一级首先会返回的是顶级域名的权威域名服务器。DNS服务器向 .com 域的权威域名服务器发送查询报文”query www.wikipedia.org”,得到.wikipedia.org域的权威域名服务器地址。DNS服务器向.baidu.com域的权威域名服务器发送查询报文”query www.baidu.com”,得到主机www的A记录,存入自身缓存并返回给客户端。 以上就是域名服务器之间迭代的过程。这是基于504个全球范围的“根域名服务器”(分成13组,分别编号为A至M)。从这504个根服务器开始,余下的Internet DNS命名空间被委托给其他的DNS服务器,这些服务器提供DNS名称空间中的特定部分(来自维基百科)。 内核协议栈 当浏览器得到了目标的IP地址后,会与服务器进行TCP/IP三次握手建立TCP/IP的持久连接。这里不做过多的描述,网上这样的信息太多。以建立TCP/IP连接之后为基础,首先在本地通过HTTP协议生成一个请求报文。 请求报文由方法,URL,HTTP版本和HTTP首部字段等构成; 通用首部(General)是请求与响应首部都会用到的首部,如请求方法,请求URL,响应状态码,请求的远程地址,首部用来监管哪些访问来源信息等。 在请求首部中,通常都会加上请求的附加内容(浏览器所支持的媒体类型,编码格式),客户端的信息,响应内容相关的优先级等信息。 当请求报文生成后,会发生以下操作: 用户空间: 浏览器进程会调用socket函数对象,创建套接字,通过socket函数绑定套接字通过调用sendto函数,将用户空间内存中的数据一点一点发送至内核空间 内核: 浏览器将请求报文下发送至传输层,传输层会将报文封装成TCP段,加上目标端口与源端口。源端口是由内核随机选取的一个动态端口。报文从传输层下发至网络层,会将报文封装成数据包,在外面加上目标IP与源IP。并选择路由。报文从网络层下发至数据链路层,会将报文封装成帧,在外面加上目标MAC与源MAC当报文到达链路层之后会通过网卡驱动将数据包发送到网卡的发送队列中,通过中断通知网卡发送数据包 服务器 服务器端的网卡收到报文后,通过网卡驱动将数据包发送至内核中,内核通过一层一层解析,通过socket套接字与端口送达至监听在该端口的进程。 服务器端监听的的程序如果是Linux,则一般为Apache和Nginx,如果是Windows则为IIS。这里以Nginx为例。 Nginx接收到客户端的动态请求,会将该请求转发至后端的Perl/PHP/Python/Ruby..中去执行,如果需要调用数据内容则可能去后端的数据库中取数据,执行完成之后将执行结果发送至Nginx。(这里可能不完整,但是这不是讲解的集群,所以不在这里做过多的解释)如果是静态请求,则会转发至后端的专门的静态服务器中。如果缓存中有数据,则会直接从缓存中取数据。如果缓存中没有数据,那么如果是关系型数据,则会去数据库中取,如果是图片或者其他非关系型数据库,则会去对应的共享存储中取。 服务器端在第一次请求返回的数据一般都是一个整体的html框架,里面的所有数据,包括图片、html文档、txt文档、css样式等等所有的东西都是以链接的形式呈现在浏览器中(当然,网站的logo,或者其他重要数据或者图片可能在第一次就已经发送过来了),浏览器进行分析后再次去向相应的服务器发送请求,当然,这里的服务器可能是一个完整的集群。一般现在的浏览器都是多线程的,可以并发去请求。根据带宽的不同,浏览器的不同以及服务器端的响应速度的不同,一般请求在3-5s就会在浏览器中将请求页面呈现出来。如果有缓存(浏览器或者服务器端)可能会更快。所以,这些过程对于用户来说就是那么几秒钟的事情,但是背后的机制却是无比复杂。 以上便是我所理解的一次URL请求过程,其中有一些不详细或者有误的过程,如函数调用,内核协议栈,中断处理上。以后有充分的认识之后会不断完善。 –end–

java中的局部变量和全局变量

Java变量 java中主要有如下几种类型的变量: 一、局部变量 只在特定的过程或函数中可以访问的变量,被称为局部变量。 与局部变量相对应的,是全局变量。 全局变量就是从定义的位置起,作用域覆盖整个程序范围的变量。 局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。 一旦退出方法,构造函数或块中的变量将被销毁。 访问修饰符不能用于局部变量。 局部变量在堆栈级别内部实现。 局部变量要先赋值,再进行运算,而实例变量均已经赋初值。(这是局部变量和实例变量的一大区别) 二、全局变量(成员变量) 其中实例变量、类变量、常量都是属于成员变量的,成员变量又被称为全局变量 java类的成员变量有俩种:一种是被static关键字修饰的变量,叫类变量或者静态变量;另一种没有static修饰,为实例变量。 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。 在程序运行时的区别: (1)实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。 (2)静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。 (3)总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。 静态变量均有默认值,数字默认为0,布尔值默认为false,对象默认为null /** * 此段代码来自于JavaSE知识库 */ public class TestTwo { //以下四个变量都是成员变量(全局变量) int num ; //属于基本数据类型的实例变量 Integer obj ; //属于引用数据类型的实例变量 static char ch = 'A'; //类变量(静态变量) final double constant= 12.6; //属于常量的实例变量 public void display(){ //以下两个属于该方法的局部变量,必须先赋值才能使用,作用范围仅限于函数体之内 int age = 1; String name = "Tom"; System.out.println("name:"+name+";age: "+age); } public static void main(String[] args){ System.out.println(num); //这句会报错,因为num变量属于实例变量,只有将Test实例化之后才能使用 System.

android 7.0 浏览器 拦截适配 shouldOverrideUrlLoading

浏览器使用第三方开源github框架: //浏览器 https://github.com/Justson/AgentWeb compile 'com.just.agentweb:agentweb:1.2.6' 7.0路径拦截存在适配问题shouldOverrideUrlLoading会分别访问不同参数的同一方法: 7.0以上系统访问 @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) 7.0以下系统访问@Override public boolean shouldOverrideUrlLoading(WebView view, String url) 具体例如下:public class MessageFragment extends Fragment { View view; @Bind(R.id.setting) TextView setting; @Bind(R.id.userInfo) TextView userInfo; @Bind(R.id.rootPr) RelativeLayout rootPr; private AgentWeb mAgentWeb; public String url; private boolean isGoToLogin = false; private long currentMillTime = 0; public static MessageFragment newInstance() { MessageFragment mFragment = new MessageFragment(); Bundle bundle = new Bundle(); mFragment.

提取PDF内容保存到Excel--Python实现

摘要:最近需要将一批PDF文件中的某些数据整理到Excel中,因为文件数量接近20w+,手动更新几乎不现实,于是就提取关键词和内容动手写了个Python小工具,以实现自动完成上述目标。 作者博客地址:http://www.yooongchun.com/ 表格提取软件,发票管理、发票查验,请下载:表格提取、发票查验 注意:如果是提取PDF发票内容,请参考这篇文章:https://blog.csdn.net/zyc121561/article/details/80933496 如果是提取表格内容,请参看这篇文章:https://blog.csdn.net/zyc121561/article/details/82860316 要求: 读取PDF文件找到特定关键字,然后读取其对应的数值提取出来在Excel中查找对应关键字,然后在对应位置把上面提取出来的内容填进去 基本实现过程: 遍历文件夹,按照特定的要求找出指定类型的PDF文件解析PDF文件提取指定内容和对应值更新数据到Excel 所需工具: 解析PDF文件的模块:pdfminer操作Excel的模块:xlwt、xlrd、xlutils 注意:要在一个已经存在的Excel中写入数据需要配合xlutils使用,即先copy一个Excel对象,在该对象中进行写入,最后删除原对象而保存copy出来的对象 io操作:os模块匹配PDF文件:re模块 代码实现: 首先,把手工配置好的要求信息读入,主要包括各种文件提取规则,提取内容和文件的读写路径 #加载配置文件 def loadSettingFile(KEYWORDS_Path): logging.info('>>>Loading setting file:%s'%os.path.basename(KEYWORDS_Path)) PathList={}#储存路径列表 with open(KEYWORDS_Path,'r') as fp: lines_kw=fp.readlines() for line in lines_kw: line=line.rstrip('\n')#删除行尾的换行符 if re.match(r'^#',line):#注释内容,忽略 pass else: Type,Path=line.split('=') #获得路径 PathList[Type]=Path logging.info('>>>Content:\n %s'%PathList) logging.info('>>>Loading setting file done!') return PathList 接着需要把刚才读入的规则按照特定的格式抽取出来 #提取关键词内容和值 def extractKW(strKW): # 把关键词内容按照文本和数字进行分割 logging.info('>>>Extracting key words and values from %s'%strKW) kw = strKW.split(';') key_value = {} # 储存关键词、数据位置及列位置 for kv in kw: key_value[kv.

MySQL之——崩溃-修复损坏的innodb:innodb_force_recovery

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/77199194 一、问题描述 今天在线运行的一个mysql崩溃了。 查看错误日志,如下: ----------------------------------------- 161108 11:36:45 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var 2017-08-15 11:36:46 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2017-08-15 11:36:46 5497 [Note] Plugin 'FEDERATED' is disabled. 2017-08-15 11:36:46 7f11c48e1720 InnoDB: Warning: Using innodb_additional_mem_pool_size is DEPRECATED. This option may be removed in future releases, together with the option innodb_use_sys_malloc and with the InnoDB's internal memory allocator.

建立bond的几种参数

具体的参数列表: 1)primay 指定哪个slave成为主设备(primary device),取值为字符串,如eth0,eth1等。只要指定的设备可用,它将一直是激活的slave。只有在主设备(primary device)断线时才会切换设备。这在希望某个slave设备优先使用的情形下很有用,比如,某个slave设备有更高的吞吐率 注意: primary选项只对active-backup模式有效 2)updelay 指定当发现一个链路恢复时,在激活该链路之前的等待时间,以毫秒计算。该选项只对miimon链路侦听有效。updelay应该是miimon值的整数倍,如果不是,它将会被向下取整到最近的整数。缺省值为0 3)arp_interval 指定ARP链路监控频率,单位是毫秒(ms)。如果APR监控工作于以太兼容模式(模式0和模式2)下,需要把switch(交换机)配置为在所有链路上均匀的分发网络包。如果switch(交换机)被配置为以XOR方式分发网络包,所有来自ARP目标的应答将会被同一个链路上的其他设备收到,这将会导致其他设备的失败。ARP监控不应该和miimon同时使用。设定为0将禁止ARP监控。缺省值为0 4)arp_ip_target 指定一组IP地址用于ARP监控的目标,它只在arp_interval > 0时有效。这些IP地址是ARP请求发送的目标,用于判定到目标地址的链路是否工作正常。该设定值为ddd.ddd.ddd.ddd格式。多个IP地址通过逗号分隔。至少指定一个IP地址。最多可以指定16个IP地址。缺省值是没有IP地址 5)downdelay 指定一个时间,用于在发现链路故障后,等待一段时间然后禁止一个slave,单位是毫秒(ms)。该选项只对miimon监控有效。downdelay值应该是miimon值的整数倍,否则它将会被取整到最接近的整数倍。缺省值为0 6)lacp_rate 指定在802.3ad模式下,我们希望的链接对端传输LACPDU包的速率。可能的选项: (1)slow 或者 0 请求对端每30s传输LACPDU (2)fast 或者 1 请求对端每1s传输LACPDU (3)缺省值是slow 7)max_bonds 为bonding驱动指定创建bonding设备的数量。比如:如果max_bonds为3,而且bonding驱动还没有加载,那么bond0,bond1,bond2将会被创建。缺省值为1 6)miimon 指定MII链路监控频率,单位是毫秒(ms)。这将决定驱动检查每个slave链路状态频率 0表示禁止MII链路监控。100可以作为一个很好的初始参考值。下面的use_carrier选项将会影响如果检测链路状态。更多的信息可以参考“高可靠性”章节。缺省值为0 8)mode 指定bonding的策略。缺省是balance-rr (round robin,循环赛)。可选的mode包括:0,1,2,3,4,5,6 转自:http://blog.csdn.net/youlang2010/article/details/20462301

IP地址的划分及其范围

IP地址分为A、B、C、D、E5类。常用的是B和C两类。 最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。Internet委员会定义了5种IP地址类型以适合不同容量的网络,即A类~E类。 一、A类IP地址 1、一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为7位,主机标识的长度为24位,A类网络地址数量较少,可以用于主机数达1600多万台的大型网络。 2、A类IP地址 地址范围1.0.0.1-126.255.255.254(二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110)。 3、A类IP地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256的3次方-2=16777214台。 二、B类IP地址 1、一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码。如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为14位,主机标识的长度为16位,B类网络地址适用于中等规模的网络,每个网络所能容纳的计算机数为6万多台。 2、B类IP地址地址范围128.1.0.1-191.254.255.254(二进制表示为:10000000 00000001 00000000 00000001 - 10111111 11111110 11111111 11111110)。 3、B类IP地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256的2次方-2=65534台 三、C类IP地址 1、一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为21位,主机标识的长度为8位,C类网络地址数量较多,适用于小规模的局域网络,每个网络最多只能包含254台计算机。 2、C类IP地址范围192.0.1.1-223.255.254.254(二进制表示为: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110)。 3、C类IP地址的子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2=254台 四、除了以上三种类型的IP地址外,还有几种特殊类型的IP地址。 1、TCP/IP协议规定,凡IP地址中的第一个字节以“lll0”开始的地址都叫多点广播地址。因此,任何第一个字节大于223小于240的IP地址是多点广播地址; 2、IP地址中的每一个字节都为0的地址(“0.0.0.0”)对应于当前主机; 3、IP地址中的每一个字节都为1的IP地址(“255.255.255.255”)是当前子网的广播地址; 4、IP地址中凡是以“llll0”的地址都留着将来作为特殊用途使用; 5、IP地址中不能以十进制“127”作为开头,该类地址中数字127.0.0.1到127.1.1.1用于回路测试,如:127.0.0.1可以代表本机IP地址,用“http://127.0.0.1”就可以测试本机中配置的Web服务器。网络ID的第一个6位组也不能全置为“0”,全“0”表示本地网络。 6、D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。地址范围224.0.0.1-239.255.255.254 。 7、E类IP地址以“11110”开始,保留用于将来和实验使用。 总:A:0-127 B:128-191 C:192-223 D:224-239 E:240-255 转自:https://zhidao.baidu.com/question/35773698.html

sqlite 多表查询,连接 join

多表查询方法: 网上有篇文章介绍了这么一种方法: //不建议 select table1.abc from table1,table2 where table1.xxx=table2.xxx; 12 12 实测了一下,这种方法的复杂度是join关键字的几何级倍数,用join的关键语句如下 select table1.abc from table1 inner join table2 on table1.xxx=table2.xxx; 1 1 其中join有三种用法: left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下: 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录如下: bID bName 1 2006032401 2 2006032402 3 2006032403 4 2006032404 8 2006032408 1.left join sql语句如下: select * from A left join B on A.

office转换为html在线预览

/// <summary> /// word 转换为html /// </summary> /// <param name="path">要转换的文档的路径</param> /// <param name="savePath">转换成的html的保存路径</param> /// <param name="wordFileName">转换后html文件的名字</param> private void WordToHtml(string path, string savePath, string wordFileName) { Word.ApplicationClass word = new Word.ApplicationClass(); Type wordType = word.GetType(); Word.Documents docs = word.Documents; Type docsType = docs.GetType(); Word.Document doc = (Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] {(object)path, true, true }); Type docType = doc.GetType(); string strSaveFileName = savePath + wordFileName + ".html"; object saveFileName = (object)strSaveFileName; docType.

三态门详解

在FPGA中三态门比较常见,因为FPGA是做为一个高速处理的器件,免不了要进行输入输出数据,常规的输入和输出是分开的两个接口要不停的切换比较麻烦,在FPGA中用的双向口一般都是用三态门来作为输入和输出的,这样优点是只要一个接口就可以输入输出比较节约逻辑资源,但缺点是三态门的处理没有常规两个I/O的方便,这里我们来看看怎样使用三态门,下图是三态门的结构。 当sda_en为高时SDA作为输出口,输出sda_out的数据,当sda_en为低时三态门是处于高阻态,这时三态门是作为输入口使用,这时输入的数据为SDA的数据。 下面是用vivado 写的一段程序,当做为输出时将我们产生的clk_out的频率输出,代码如下。 module stm ( i_clk, i_rst_n, SDA ); input i_clk; input i_rst_n; inout SDA; reg sda_en; reg sda_out; reg [9:0] cnt; reg clk_out; always@(posedge i_clk or negedge i_rst_n) if(i_rst_n==1'b0) cnt <= 10'd0; else if(cnt==10'd999) cnt <= 10'd0; else cnt <= cnt + 1'b1; always@(posedge i_clk or negedge i_rst_n) if(i_rst_n==1'b0) clk_out <= 1'b0; else if(cnt==10'd999) clk_out <= ~clk_out; always@(posedge i_clk or negedge i_rst_n) if(i_rst_n==1'b0)begin sda_out <= 1'b0; sda_en <= 1'b1; end else begin sda_out <= clk_out; sda_en <= 1'b1; //这里为1表示作为输出口使用 end

高德地图实现多点标注marker和动态信息窗体

先说一下项目对地图的需求:在后台新增地图管理模块,要求,每一辆车都在地图上有标注,而且点击标注时要显示出车辆的相关信息,比如车牌和车辆的当前状态。 下图就是实现的效果。 当然从高德地图api也能查看到这一块,比如多点标注,简单信息窗体,这些都有api,可以先看官网的,然后,再看我这篇文章,怎么融合一起,记住数据全部来自后台数据库,这样才能保证一切数据都是动态的,可实时更新的。 首先,定义map,渲染出基础的地图。 var map = new AMap.Map('container', { resizeEnable: true, zoom: 5 }); center我就暂时没有定义会自动定位IP的地址获取中心点。接下里需要清除障碍物,全局几个变量, map.clearMap(); var markers = []; var infoWindow; 好的,接下里开始请求数据,数据主要包括坐标点和信息窗体要展示的参数,比如我的有车辆的运单号和车辆状态,车牌号等参数。 $.ajax({ url : "eos_TranOrderFollowing/mapcartrans.do", type : "get", dataType : "json", success : function(e) { // var data=[{"fLong":'112.00003','fLati':'38.2345'},{"fLong":'115.00003','fLati':'38.2345'},{"fLong":'114.00003','fLati':'38.2345'},{"fLong":'116.00003','fLati':'38.2345'}]; // e.data = data; var marker; for(var i=0 ; i< e.data.length;i++){ var jfong=[ e.data[i].fLong,e.data[i].fLati]; marker = new AMap.Marker({ position: jfong, zIndex: 101, map:map }); console.log(e.data[3]); marker.setMap(map); marker.orderON=e.data[i].orderON; marker.tranOFID=e.data[i].tranOFID; marker.

常见知识点

账户无密切换:https://jingyan.baidu.com/article/a17d5285268e958099c8f257.html

centos 7.9 minimal 镜像下载与安装到vmware

centos 7.9 minimal 下载地址 https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso 查看版本号 [root@node1 ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) 安装界面进行如下设置, 那么直接 ip addr 就可以看到ip(yum install net-tools.x86_64, 注意要输2个 y, 安装完毕后, 可以用 ifconfig -a 来查看网卡ip), 无需手动设置ens33 如何克隆多个呢? node1 node2 node3, ip也是直接可用的, so easy.直接用xshell连接就ok了 Linux系统修改root用户密码的命令 xshell 连接上后, 输入 passwd,输入新密码即可 centos创建普通用户,并分配密码 xshell常用基本清屏命令是: clear或者ctrl+L 但是这个并没有彻底清屏,鼠标往上拉,还是有的 Linux 服务管理两种方式service(centsos6.8以后)和systemctl(centso7及以后) minimal镜像只有命令行界面,安装过程最好连接到Internet(先选择为桥接,后期安装成功了,改回到NAT),原因是有一些包要通过yum源下载安装。 具体安装步骤如下: 新建一个典型的VMware虚拟机,选择稍后安装centOS,点击编辑虚拟机,在CD/DVD选择centOS镜像,选择网络连接为桥接(桥接下面的勾不用打),启动,点击开机画面的第一行直接回车.安装完毕后,将网络连接恢复到NAT, 输入root,密码 123456就可以登录成功了 l是我的计算机名称 解决安装centos6.8没有网卡ip的问题 cd /etc/sysconfig/network-scripts/ vi ifcfg-eth0 不同文件略有不同, 将ONBOOT=no改为yes 重启网络服务:# service network restart centos 安装后没有网络 也就是没有IP地址_xiaoxin0630的博客-CSDN博客_centos 没有局域网ip

idea 行号栏太宽以及显示一些图标问题解决

注意:如下设置之后,你打的断点就无法看到那个小红点了,最后会给出解决方案 如图 解决方案: file-->settings-->editor-->gutter icons-->取消到show gutter icons 选项就ol! 解决不出现断点的小红点的方法就是继续选择show gutter icons,但是下边的,不想让出现的图标的对号去掉,目前发现的解决办法,谁有更好的给评论一下

echarts折线图时间轴展示

[javascript] view plain copy echarts折线图,我们平时在使用的时候,x轴上面的数据通常会有很多很多,使得x轴上面的数据通常显示不完整 解决方案一:对x轴坐标添加时间间隔 //添加x轴时间间隔(js) xAxis : [ { axisLabel : { show:true, interval: '0', // 显示全部数据,还有auto/>0数字均可 rotate: 45, margin: 8, formatter: '{value}月', textStyle: { color: 'blue', fontFamily: 'sans-serif', fontSize: 15, fontStyle: 'italic', fontWeight: 'bold' } }, //添加x轴坐标间隔(java) CategoryAxis categoryxAxis = new CategoryAxis(); AxisLabel asxisLabel = new AxisLabel(); axisLabel.setInterval(0); categoryAxis.setAxisLabel(axisLabel) 解决方案二:对x轴坐标添加时间轴 //dataZoom时间轴 DataZoom dataZoom = new DataZoom(); dataZoom.setShow(true) dataZoom.start(70);

在Ubuntu下重装Ubuntu

最近把原来的Ubuntu系统玩崩了,于是在旧系统下重装了个Ubuntu 1.首先准备一个空间大于2GB的U盘。 2.在已安装的软件中找到Startup disk creator. 3.启动软件并选择已经下载好的Ubuntu镜像文件。 4.选择U盘并作为启动盘。 5.重启计算机,在启动时按F2选择USB设备作为启动项,重装时选择卸载旧版本安装新版本即可。

百度地图api路况信息

效果图: 首先需要引入css\js <link href="http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script> <script type="text/javascript" src="http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script> html部分 <div style="width:100%;height:340px;border:1px solid gray" id="container"> </div> js <script type="text/javascript"> var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(104.06, 30.67), 12); var ctrl = new BMapLib.TrafficControl({ showPanel: true //是否显示路况提示面板 }); map.addControl(ctrl); ctrl.setAnchor(BMAP_ANCHOR_BOTTOM_RIGHT); </script>

ifconfig、ifup、ifdown详解

这三个命令的用途都是启动网络接口,不过,ifup 与 ifdown 仅就 /etc/sysconfig/network- scripts 内的 ifcfg-ethx(x为数字)进行启动或关闭的操作,并不能直接修改网络参数,除非手动调整 ifcfg-ethx 文件才行。至于 ifconfig 则可以直接手动给予某个接口 IP 或调整其网络参数。下面我们就分别来谈一谈。 一、ifconfig ifconfig 主要是可以手动启动、观察与修改网络接口的相关参数,可以修改的参数很多,包括 IP 参数以及 MTU 等都可以修改,它的语法如下: [root@linux ~]# ifconfig {interface} {up|down} <== 观察与启动接口 [root@linux ~]# ifconfig interface {options} <== 设置与修改接口 参数: Interface,网卡接口代号,包括 eth0、eth1、ppp0 等 Options,可以接的参数,包括如下: Up或down,启动 (up) 或关闭 (down) 该网络接口(不涉及任何参数) mtu,可以设置不同的 MTU 数值,例如MTU 1500 (单位为 byte) netmask,就是子屏蔽网络 broadcast,就是广播地址 范例: 范例一:观察所有的网络接口(直接输入 ifconfig) [root@linux ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:0F:EA:A3:06:A2 inet addr:192.168.10.100 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::20f:eaff:fe73:682/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3439 errors:0 dropped:0 overruns:0 frame:0 TX packets:2735 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:646935 (631.

centos7安装kvm虚拟机

一、安装KVM 1、 验证CPU是否支持KVM;如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。 egrep '(vmx|svm)' /proc/cpuinfo 2、 关闭SELinux,将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=disabled 3、 最小安装的CentOS安装一些最基本的包(可选项,因为我是刚安装好的CentOS,所以为了下面方便点,先把一些必要的工具安装下) yum install epel-release net-tools vim unzip zip wget ftp -y 4、 安装KVM及其依赖项 yum install qemu-kvm libvirt virt-install bridge-utils -y 5、验证安装结果,下图说明已经成功安装了 lsmod | grep kvm 6、开启kvm服务,并且设置其开机自动启动 systemctl start libvirtd systemctl enable libvirtd 7、查看状态操作结果,如下图所示,说明运行情况良好 systemctl status libvirtd systemctl is-enabled libvirtd 8、配置网桥模式,先将 /etc/sysconfig/network-scripts/ 目录下的网卡配置文件备份一份(不要备在当前目录以及子目录下,其他目录随意) a. 创建 ifcfg-br0 文件,内容如下: BOOTPROTO=static DEVICE=br0 TYPE=Bridge NM_CONTROLLED=no IPADDR=192.168.8.150 NETMASK=255.255.255.0 GATEWAY=192.168.8.1 DNS1=122.200.121.230 DNS2=8.8.8.8 b.

Spring获取Http响应时间和状态原理

spring-actuate是spring的监控模块,默认开启很监控下,其中就有个http的响应时间和状态。 在maven的pom中引入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>1.5.3.RELEASE</version> </dependency> 启动项目,访问 http://localhost:prot/metrics 可以看到的结果中 “counter.status.200.metrics”:24 表示/metrics接口响应200状态24次“gauge.response.metrics”:2.0 表示/metrics接口响应时间为2ms 之后通过字符串替换,将key改成自己想要的格式 那么actuate又是如何获取到接口的响应时间和状态? 在sprint-actuate里有个MetricsFilter类,继承了OncePerRequestFilter,从名字上可以看出,这个拦截器会在每次请求执行一次,在请求处理前记录开始时间,请求处理后记录结束时间和响应状态 final class MetricsFilter extends OncePerRequestFilter { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { StopWatch stopWatch = this.createStopWatchIfNecessary(request); String path = (new UrlPathHelper()).getPathWithinApplication(request); int status = HttpStatus.INTERNAL_SERVER_ERROR.value(); try { chain.doFilter(request, response); status = this.getStatus(response); } finally { if (!request.isAsyncStarted()) { if (response.isCommitted()) { status = this.getStatus(response); } stopWatch.stop(); request.removeAttribute(ATTRIBUTE_STOP_WATCH); this.

故障公告:docker swarm集群“群龙无首”造成部分站点无法访问

今天傍晚 17:38-18:18 左右,由于 docker swarm 集群出现 "The swarm does not have a leader" 问题,造成博问、闪存、园子、小组、openapi 无法正常访问,由此给您带来麻烦,请您谅解。 目前我们已经迁移至 asp.net core 的站点都部署在 docker swarm 集群上,节点用的是阿里云服务器,操作系统是 ubtunu 16.04 ,docker engine 版本是 17.06.0-ce, build 02c1d87 。 今天出故障期间,我们在进行节点变更的操作。操作前集群只有 3 个 manager 节点,没有 worker 节点,变更的目标是调整为 5 个节点,其中 3 个 manager ,2 个 worker ,变更的方式是减 1 个节点加 3 个节点(这 3 台服务器配置高,需要升级为 manager)。 具体的变更操作是这样的,第 1 个操作是 docker node demote node1 将已有的一个 manager 节点降级为 worker , docker swarm leave 退出集群, docker node rm node1 移除节点,这个节点是减掉的那个节点。然后,新增的服务器直接 docker swarm join --token manager_token 加为 manager 节点。第 1 个操作正常完成。

STM32学习笔记一一TFTLCD 显示

前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。 1.TFTLCD 简介 TFT-LCD 即薄膜晶体管液晶显示器。TFT-LCD与无源 TN-LCD、 STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管( TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 TFT-LCD 也被叫做真彩液晶显示器。ALIENTEK TFTLCD 模块采用 16 位的并方式与外部连接。 2.80 并口有如下一些信号线: 信号线作用CSTFTLCD 片选信号WR向 TFTLCD 写入数据RD从 TFTLCD 读取数据D[15: 0]16 位双向数据线RST硬复位 TFTLCDRS命令/数据标志( 0,读写命令; 1,读写数据) 注:TFTLCD 模块的 RST 信号线是直接接到 STM32 的复位脚上,并不由软件控制,这样可以省下来一个 IO口。另外我们还需要一个背光控制线来控制 TFTLCD 的背光。所以,我们总共需要的 IO 口数目为 21 个。 3.ILI9341 控制器介绍 ILI9341 液晶控制器自带显存,其显存总大小为 172800( 24032018/8),即 18 位模式( 26万色)下的显存量。在 16 位模式下, ILI9341 采用 RGB565 格式存储颜色数据,此时 ILI9341的 18 位数据线与 MCU 的 16 位数据线以及 LCD GRAM 的对应关系如图: ILI9341 在 16 位模式下面,数据线有用的是: D17~D13 和 D11~D1, D0和 D12 没有用到,实际上在我们 LCD 模块里面, ILI9341 的 D0 和 D12 压根就没有引出来,这样, ILI9341 的 D17~D13 和 D11~D1 对应 MCU 的 D15~D0。

python2(中文编码问题):UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1...

python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128),python没办法处理非ascii编码的,此时需要自己设置将python的默认编码,一般设置为utf8的编码格式。 查询系统默认编码可以在解释器中输入以下命令: python代码 >>>sys.getdefaultencoding() 设置默认编码时使用: python代码 >>>sys.setdefaultencoding('utf8') 可能会报AttributeError: 'module' object has no attribute 'setdefaultencoding'的错误。执行reload(sys),再执行以上命令就可以顺利通过。 此时再执行sys.getdefaultencoding()就会发现编码已经被设置为utf8的了,但是在解释器里修改的编码只能保证当次有效,在重启解释器后,会发现,编码又被重置为默认的ascii了。 有2种方法设置python的默认编码: 一个解决的方案在程序中加入以下代码: Python代码 # encoding=utf8 import sys reload(sys) sys.setdefaultencoding('utf8') 另一个方案是在python的Lib\site-packages文件夹下新建一个sitecustomize.py,内容为: Python代码 # encoding=utf8 import sys reload(sys) sys.setdefaultencoding('utf8') 此时重启python解释器,执行sys.getdefaultencoding(),发现编码已经被设置为utf8的了,多次重启之后,效果相同,这是因为系统在python启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动的加上解决代码,属于一劳永逸的解决方法。 转载于:https://www.cnblogs.com/walk1314/p/7251126.html

史上最详细的Android系统SystemUI 启动过程详细解析

Android 系统 SystemUI 介绍 Android 的 SystemUI 其实就是 Android 的系统界面,它包括了界面上方的状态栏 status bar,下方的导航栏Navigation Bar,锁屏界面 Keyguard ,电源界面 PowerUI,近期任务界面 Recent Task 等等。对于用户而言,SystemUI 的改动是最能直观感受到的。因此,每个 Android 版本在 SystemUI 上都有比较大的改动。而对开发者而言,理解 Android SystemUI 对优化Android系统界面,改善用户体验十分重要。 SystemUI 在哪 在 Andorid 系统源码中,package/apps下放的是系统内置的一些 app,例如 settings,camera,Phone,Message 等等。而在 Framework/base/package 下,它们也是系统的 app,SystemUI 就在此目录下。它控制着整个Android系统的界面,但其实他也是一个 app,不同于一般的 app,它不可卸载也不可以被第三方应用替换。 SystemUI 整体结构 这是 SystemUI 相关类的继承关系图,可以看到 SystemUI 为基类,每个子类实现了不同的系统界面。 Status Bar 系统上方的状态栏Navigator Bar 系统下方的导航栏Keyguard 锁屏界面PowerUI 电源界面Recents Screen 近期任务界面VolumeUI 音量调节对话框Stack Divider 分屏功能调节器PipUI 画中画界面Screenshot 截屏界面RingtonePlayer 铃声播放器界面Settings Activity 系统设置中用到的一些界面,例如:NetworkOverLimitActivity,UsbDebuggingActivity等。 SystemUI的启动流程 先找到 framework/base/service/java/com/android/server/SystemServer.java 文件,里面有个main()方法,main 方法如下:

文件系统EXT3,EXT4和XFS的区别

文件系统EXT3,EXT4和XFS的区别: 1. EXT3 (1)最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件 (2)Ext3目前只支持32000个子目录 (3)Ext3文件系统使用32位空间记录块数量和i-节点数量 (4)当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块 2. EXT4 EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本。 (1)Ext4的文件系统容量达到1EB,而文件容量则达到16TB (2)理论上支持无限数量的子目录 (3)Ext4文件系统使用64位空间记录块数量和i-节点数量 (4)Ext4的多块分配器支持一次调用分配多个数据块 3. XFS (1)根据所记录的日志在很短的时间内迅速恢复磁盘文件内容 (2)采用优化算法,日志记录对整体文件操作影响非常小 (3) 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间 (4)能以接近裸设备I/O的性能存储数据

tensorfow模拟函数拟合过程

tensorflow真是把机器学习变成了纯工程化的东西了 本文用TensorFlow 模拟函数拟合 用matplotlib 画出动图 便于直观感受 最终您会看到拟合的动图 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import time x_data=np.random.rand(100).astype(np.float32); #print(x_data); y_data=x_data*0.1+0.3; Weith=tf.Variable(tf.random_uniform([1],-1.0,1.0)); Baise=tf.Variable(tf.zeros([1])); y=Weith*x_data+Baise; #定义损失函数 loss=tf.reduce_mean(tf.square(y-y_data)); #学习效率 optimizer=tf.train.GradientDescentOptimizer(0.5); //按照损失函数最小化进行训练 train=optimizer.minimize(loss); inint=tf.initialize_all_variables(); sess=tf.Session(); sess.run(inint); //动图模拟过程 fig2 = plt.figure() axes1 = fig2.add_subplot(111) axes1.plot(x_data,y_data); line,= axes1.plot(x_data,y_data,color='red') def update(datay): line.set_ydata(datay) return line, def data_gen(): for step in range(201): sess.run(train); yield sess.run(Weith)*x_data+sess.run(Baise); ani = animation.FuncAnimation(fig2, update, data_gen, interval=0.

xynuoj 求两个数中的较大者

题目描述 输入一系列的以空格分隔的整数对a和b,分别输出这两个数中较大的那一个。 输入 输入包含一系列的a和b对,通过空格隔开。一对a和b占一行。 输出 对于输入的每对a和b,你需要依次输出a和b的较大值。 如对于输入中的第二对a和b,在输出中它们的较大者应该也在第二行。 样例输入 3 8 11 6 -3 2 样例输出 8 11 2 提示 来源 #include<stdio.h> int main() {int a,b,max; while(~scanf("%d %d",&a,&b)) {if(a>b) {max=a;} else { max=b;} printf("%d\n",max);} return 0; }

QT中在QLabel显示图片并且利用鼠标点击画线

最近在做在Label上显示图片并且通过鼠标点击画线,在网上查了很多零零散散的东西,收获也多 很多初学者更希望直接贴代码,这样可以模仿来写,我下面直接贴出我的项目中自己写的maLabel类(如果只是实现利用鼠标绘制, 重写void paintEvent(QPaintEvent *event);void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e);即可,其他函数是我项目需求所以多写的,可以忽略) 申明myLabel类,继承QLabel,生成myLabel.h和myLabel.cpp文件 以下为我的代码,供参考。我只是实现了画一条直线,如果要画多条,可以用vector将之前若干条的信息干存下来,每次都绘制 myLabel.h #ifndef MYLABEL_H #define MYLABEL_H #include <QLabel> #include <QPoint> #include <QColor> #include <QPaintEvent> #include <QImage> #include <QPixmap> class myLabel : public QLabel { //Q_OBJECT public: myLabel(); //~myLabel(); //绘制线条 virtual void paintEvent(QPaintEvent *event) override; //鼠标按下 void mousePressEvent(QMouseEvent *e); //鼠标移动 void mouseMoveEvent(QMouseEvent *e); //鼠标抬起 void mouseReleaseEvent(QMouseEvent *e); //设置所画线条属性 void setLineColor(const QColor lineColor); void setLineSize(const int lineSize); //得到画线的起点和终点 QPoint getStartPoint(); QPoint getEndPoint(); void clear(); private: QPoint lineStartPoint; //画线起点 QPoint lineEndPoint; //画线终点 QColor lineColor; //线条颜色 int lineSize; //5种线型 bool isPressed; }; #endif // MYLABEL_H myLabel.

Eclipse的java代码出错:The import org.apache cannot be resolved

Eclipse中,折腾java代码。 把之前在android中的代码拿过来使用。 结果出现The import org.apache cannot be resolved的错误: 【解决过程】 1.这里: 求救,eclispe开发不能import org.apache 包 和 The import org.apache cannot be resolved 都说到了,让去: project -> Build Path -> Configure Build Path -> Libraries -> Add External Jar’s 但是坑爹的却是,没有说,此处的 org.apache 是属于哪个jar包。 2.既然找不到 org.apache 那么,鉴于我此处,全部都是: 即,全都是: org.apache.http 那就先去找org.apache.http。 3.参考: 请问谁有org.apache.http这个包 突然想到,貌似这个: org.apache.http 是对应的android里面的,不是标准的java库中的。 4.所以,去到别人说的,apache官网中找这个库。 搜: download org.apache.http 而找到http://hc.apache.org/downloads.cgi,去下载 HttpClient 4.2.5.zip 解压后,得到: httpcomponents-client-4.2.5-bin\httpcomponents-client-4.2.5\lib 下面有很多jar: 先加进来试试: 然后所有的org.apache.http就正常了: 【总结】 org.apache,不是标准的java中的库。所以eclipse中,无法自动识别。 org.apache下包括了一堆相关的库,此处用到的的是org.apache.http,所以: 需要找到对应的org.apache.http相关的jar包,然后加到当前的项目中。 1.到哪里找org.apache.http 去apache官网中的: http://hc.apache.org/downloads.cgi 去下载:

hadoop启动之“hadoop-daemon.sh”详解

今天看了一下启动文件“Hadoop-daemon.sh”,仔细看了一下大概知道它的作用,使用“hadoop-daemon.sh“脚本启动和停止hadoop后台程序。它可以做到在A机器上启动”namenode“,B机器启动”secondarynamenode“ C机器启动”datanode“, ”tasktracker“,具体启动如下 : ./hadoop-daemon.sh start namenode ./hadoop-daemon.sh start secondarynamenode ./hadoop-daemon.sh start jobtracker ./hadoop-daemon.sh start datanode ./hadoop-daemon.sh start tasktracker 如果要停止可以运行如下命令 ./hadoop-daemon.sh stop namenode ./hadoop-daemon.sh stop secondarynamenode ./hadoop-daemon.sh stop jobtracker ./hadoop-daemon.sh stop datanode ./hadoop-daemon.sh stop tasktracker 转载地址:http://blog.csdn.net/sinoyang/article/details/8021296

解决EndNote未知错误0x4A8C

EndNote在重装系统后出现未知错误0x4A8C。主要问题是没有对office修补漏洞,360修补一下office的漏洞,然后再打开EndNote就可以了。问题解决。

SSL certificate problem: self signed certificate

问题描述: 使用SmartGit工具clone项目时,弹出框提示信息为“XXXX,SSL certificate problem: self signed certificate” 问题分析: 提示信息为SSL认证失败,可以关闭SSL的认证 解决方案: 在windows的命令行窗口执行指令:set GIT_SSL_NO_VERIFY=true git clone 找到SmartGit中git命令所在的位置,选中SmartGit图标,鼠标右键,如下图: 在windows的命令行中,进入到上图中git命令所在的磁盘位置,执行下面的git命令: git config --global http.sslVerify false

主成分分析(PCA)——matlab程序及函数详解

参考来源: http://www.cnblogs.com/Hand-Head/articles/5156435.html http://www.matlabsky.com/thread-11751-1-1.html matlab帮助文档 程序源码下载链接:http://download.csdn.net/detail/ckzhb/9903051 包含三个m文件: drtool_pca:函数封装。不包括盒形图。 pca_test:matlab自带的例子——pca()函数 princomp_test:matlab自带的例子——princomp()函数 例子说明: 它使用了衡量美国329个城市生活质量的9个指标:气候、住房、健康、犯罪率、交通、教育、艺术、娱乐和经济。 对于各指标,越高表示越好,如高的犯罪指标表示低的犯罪率。 本文例子程序: %% test for princomp(Principal Component Analysis) % 20170706 BY Hubery_Zhang clear; clc; %% load data set load cities; %% box plot forratings data % To get a quickimpression of the ratings data, make a box plot figure; boxplot(ratings,'orientation','horizontal','labels',categories); grid on; %% pre-process stdr =std(ratings); sr =ratings./repmat(stdr,329,1); %% use princomp [coeff,score,latent,tsquare]= princomp(sr); %% 如何提取主成分,达到降为的目的 % 通过latent,可以知道提取前几个主成分就可以了. % 图中的线表示的累积变量解释程度.

vector和map的效率简要比较

项目中要对一些数据结构进行存取,而项目本身对时间延时比较敏感,在使用vector还是map上着实纠结了一番,主要某些数据量比较小,才有此纠结。 而且想搞明白,到底大到什么数据量该用map?做了一些简单的测试,见下。 首先,不管是vector还是map,请尽量存取指针,否则在存取时会有数据拷贝带来不必要的时间损失。通常用int和string做key的场景比较普遍(我的项目即如此),能用int作key就用int作key,效率比string高。 测试方法: 给vector和map容器中分别塞入1,000,000个数据(顺序插入,有序的),然后设定一个查找目标,vector顺序遍历查找,map用key查找,对比查找时间。使用高精度定时器计时。 基本结论: 1、unordered_map比map快 2、vector查找14次,基本和unordered_map查找一次耗时相当(int和string做key差别不大) 3、string作key,vector查询100次,基本和map查询一次耗时相当;int作key,vector查询28次,基本和map查询一次耗时相当 4、boost的unordered_map和map与STL的效率基本相同 因此:抛弃map,用unordered_map吧。如果明确数据量小,比如小于14个,就用vector或数组,效率更高。 unordered_map<string,...> unordered_map<int,...> map<string, ...> map<int,...> 测试代码: #include <windows.h> #include <string> #include <iostream> #include <iomanip> #include <map> #include <unordered_map> #include <boost/unordered_map.hpp> #include <boost/interprocess/containers/map.hpp> #include <algorithm> using namespace std; struct MyStruct { MyStruct() {} MyStruct(int x, string s) : i(x), str(s) {} int i; string str; }; #define VECTOR_TEST_DEF std::vector<MyStruct*> //#define STRING_KEY #define MAP_TYPE std::map //#define MAP_TYPE std::unordered_map //#define MAP_TYPE boost::unordered_map //#define MAP_TYPE boost::interprocess::map #define MAP_TYPE_STR "