async await

async await async/await 是以更舒适的方式使用 promise 的一种特殊语法,同时它也非常易于理解和使用。 async function 让我们以 async 这个关键字开始。它可以被放置在一个函数前面,如下所示: async function f() { return 1; } 在函数前面的 async 这个单词表达了一个简单的事情:即这个函数总是返回一个 promise。其他值将自动被包装在一个 resolved 的 promise 中。 例如,下面这个函数返回一个结果为 1 的 resolved promise,让我们测试一下: async function f() { return 1; } f().then(alert); // 1 ……我们也可以显式地返回一个 promise,结果是一样的: async function f() { return Promise.resolve(1); } f().then(alert); // 1 所以说,async 确保了函数返回一个 promise,也会将非 promise 的值包装进去。很简单,对吧?但不仅仅这些。还有另外一个叫 await 的关键词,它只在 async 函数内工作,也非常酷。 await 语法如下: // 只在 async 函数内工作 let value = await promise; 关键字 await 让 JavaScript 引擎等待直到 promise 完成(settle)并返回结果。 这里的例子就是一个 1 秒后 resolve 的 promise: ...

2016-10-19 · 1 min · 118 words · -

linux 监控 glances

’linux 监控 glances' http://glances.readthedocs.io/en/latest/index.html #filter process glances -f process-name #server mode glances -s #client glances -c xxx.xxx.xxx.xxx:xxxx Glances 还是有些值得关注的,和那些常用的老牌监控工具比起来,比如 top/vmstat/iostat 只能监控本机系统,Glances 可以监控本机也可以通过客户端服务器模式监控其他机器;Glances 提供了基于 XML/RPC 的 API 便于其他程序调用,可编程;Glances 可以将数据输出保存到 csv 或 html 格式的文件方便其他程序处理 (报告或绘制图形) 。 Glances 是用 Python 开发的,使用 psutil 库来采集系统数据,在用户的终端上实时动态的显示重要的系统数据和变化。显示的数据包括: CPU、内存、磁盘、网络等使用情况,内核、运行队列、负载、I/O 状态、消耗资源最多的进程等等。 安装 Glance 支持 Linux, Mac OS X, FreeBSD, Windows 等多个系统,安装也很方便。在 Ubuntu 上安装: $ sudo apt-get update $ sudo apt-get install python-pip build-essential python-dev ...

2016-10-18 · 1 min · 186 words · -

AGPS

AGPS http://www.cnblogs.com/magicboy110/archive/2010/12/12/1903927.html AGPS定位基本原理浅析 2010-12-12 21:03 by MagicBoy110, 34759 阅读, 18 评论, 收藏, 编辑位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备 (智能手机、掌上电脑等) 的标配。随着人们对BLS(Based Location Serices,基于位置的服务)需求的飞速增长,无线定位技术也越来越得到重视。AGPS (Assisted GPS,A-GPS,网络辅助GPS) 定位技术结合了GPS定位和蜂窝基站定位的优势,借助蜂窝网络的数据传输功能,可以达到很高的定位精度和很快的定位速度,在移动设备尤其是手机中被越来越广泛的使用。本文以GSM网络辅助GPS定位为例对AGPS的定位原理进行简单介绍。 AGPS定位基本机制 根据定位媒介来分,定位技术基本包含基于GPS的定位和基于蜂窝基站的定位两类 (阅读本文前,建议先阅读《GPS定位基本原理浅析》和《GSM蜂窝基站定位基本原理浅析》两篇文章) 。GPS定位以其高精度得到更多的关注,但是其弱点也很明显: 一是硬件初始化 (首次搜索卫星) 时间较长,需要几分钟至十几分钟;二是GPS卫星信号穿透力若,容易受到建筑物、树木等的阻挡而影响定位精度。AGPS定位技术通过网络的辅助,成功的解决或缓解了这两个问题。对于辅助网络,有多种可能性,以GSM蜂窝网络为例,一般是通过GPRS网络进行辅助。 如上图所示,直接通过GPS信号从GPS获取定位所需的信息,这是传统GPS定位的基本机制。AGPS中,通过蜂窝基站的辅助来解决或缓解上文提到的两个问题: 对于第一个问题,首次搜星慢的问题,根据《GPS定位基本原理浅析》一文的介绍,我们知道是因为GPS卫星接收器需要进行全频段搜索以寻找GPS卫星而导致的。在AGPS中,通过从蜂窝网络下载当前地区的可用卫星信息 (包含当地区可用的卫星频段、方位、仰角等信息) ,从而避免了全频段大范围搜索,使首次搜星速度大大提高,时间由原来的几分钟减小到几秒钟。 对于第二个问题,GPS卫星信号易受干扰的问题,这是由GPS卫星信号本身的性质决定的,我们无法改变。但是APGS中,通过蜂窝基站参考GPS的辅助,或是借助GSM定位中Cell-ID定位 (COO定位) 方法的辅助,缓解了在GPS信号不良的情况下定位的问题,有效提高了在此情况下的定位精度。 AGPS定位基本流程 1.搜索卫星 AGPS定位仍然是基于GPS的,因此定位的首要步骤还是先搜索到当前地区的可用GPS卫星。在传统GPS定位中需要全频段搜索以找到可用卫星因而耗时较长,而AGPS通过网络直接下载当前地区的可用卫星信息,从而提高了搜星速度。同时,也减小了设备的电量消耗。 如上图所示,AGPS中从定位启动到GPS接收器找到可用卫星的基本流程如下: (1) 设备从蜂窝基站获取到当前所在的小区位置 (即一次COO定位) (2) 设备通过蜂窝网络将当前蜂窝小区位置传送给网络中的AGPS位置服务器 (3) APGS位置服务器根据当前小区位置查询该区域当前可用的卫星信息 (包括卫星的频段、方位、仰角等相关信息) ,并返回给设备 (4) GPS接收器根据得到的可用卫星信息,可以快速找到当前可用的GPS卫星 至此,GPS接收器已经可正常接收GPS信号,GPS初始化过程结束。AGPS对定位速度的提高就主要体现在此过程中。 2.计算位置 GPS接收器一旦找到四颗以上的可用卫星,就可以开始接收卫星信号实现定位。接下来的过程根据位置计算所在端的不同,通常有两种方案: 在移动设备端进行计算的MS-Based方式和在网络端进行计算的MS-Assisted方式。 MS-Based方式中,接下来过程与传统GPS定位完全相同,GPS接收器接收原始GPS信号,解调并进行一定处理,根据处理后的信息进行位置计算,得到最终的位置坐标。 MS-Assisted方式中,解调并处理后,接下来的过程如下图所示: (5) 设备将处理后的GPS信息 (伪距信息) 通过蜂窝网络传输给AGPS位置服务器 (6) AGPS服务器根据伪距信息,并结合其他途径 (蜂窝基站定位、参考GPS定位等) 得到的辅助定位信息,计算出最终的位置坐标,返回给设备。 在此过程中可以看到,在使用MS-Assisted方式时,由于辅助定位信息的加入,可以取得更高的定位精度;同时,可以很大程度上克服弱GPS信号情况下的无法定位或精度降低的问题;将复杂计算转移到网络端,也可以很大程度上减小设备的电量消耗。 AGPS定位优劣分析 与传统GPS定位相比,APGS定位有如下的优势: 首次搜星速度快 有效减少设备的电量消耗 对于采用MS-Assisted方式的AGPS系统而言,除了以上优势外,还有: 定位精度更高 ...

2016-10-18 · 1 min · 110 words · -

远程桌面, freerdp, rdesktop

远程桌面, freerdp, rdesktop freerdp pacman -S freerdp xfreerdp /u:"user0" /v:192.168.50.182:3389 xfreerdp /v:192.168.50.9:3389 /u:"wiloon" /p:password0 /size:1680x1024 +clipboard xfreerdp /v:192.168.50.6:3389 /u:"wiloon" /p:password0 /size:1680x1024 +clipboard freerdp-shadow-cli freerdp-shadow-cli -auth /port:12345 https://www.mankier.com/1/freerdp-shadow-cli# windows 远程桌面 剪切板 http://www.cnblogs.com/hobinly/archive/2012/09/20/2694708.htmlT2001V00000087FG3 这几天遇到远程桌面控制服务器时, 无法剪切、粘贴一些东西, 上网搜了一下, 原来是 rdpclip.exe(remote desktop clipboard)不起作用了。此程序负责管理本地机与远程服务器之间共享剪切板,它运行在远程服务器上。 解决方法: 打开任务管理器-〉结束此进程 (rdpclip.exe) 点击任务管理器菜单"文件-〉新建任务",在输入框中输入"rdpclip",确定 linux连接到windows远程桌面 windows设置 系统属性>远程桌面 选择 “允许远程连接到此计算机”, 取消选择 “公允许运行使用网络级别身份验证的远程桌面计算机连接” linux rdesktop rdesktop 192.168.50.104 -g 1400x900 -u '<username>' -p <password> -r clipboard:CLIPBOARD # 非3389端口 rdesktop 192.168.50.104:3390 -g 1400x900 -u '<username>' -p <password> -r clipboard:CLIPBOARD # 域控用户 rdesktop 192.168.50.104 -g 1400x900 -u '<domain>\<username>' -p <password> -r clipboard:CLIPBOARD rdesktop 192.168.50.104 -g 1400x900 -u 'AD\<username>' -p <password> -r clipboard:CLIPBOARD rdesktop -g 1024x768 -d 24 hostname -u user0 -p password0 # PRIMARYCLIPBOARD 不稳定,用CLIPBOARD # rdesktop -g 1020x685 -d 24 192.168.1.199 -r clipboard:PRIMARYCLIPBOARD rdesktop -g 1020x685 -d 24 192.168.1.199 -r clipboard:CLIPBOARD # -M 使用本地鼠标 rdesktop 是UNIX 和Linux 系统的一个远程桌面连接软件,它通过MicrosoftWindows NT、Windows 2000 提供的终端服务(Terminal Services)以及WindowsXP 的远程桌面服务(Remote Desktop),能在Linux系统下远程登录Windows的窗口系统并使用。 ...

2016-10-18 · 2 min · 230 words · -

select for update

select for update 行级锁 排他锁 行级锁 行级锁不影响对数据的查询,它们只阻塞对同一行的写入和锁定。 排他锁 for update select for update 会导致由 select 语句查询的行被锁定 (行级锁, 排他锁), 会阻塞其它线程对这行数据加排他锁或共享锁. for update nowait 使用 nowait 子句的作用就是避免进行等待, 当发现请求加锁资源被锁定未释放的时候, 直接报错返回。 Select … for update 语句是我们经常使用手工加锁语句。通常情况下, select 语句是不会对数据加锁, 妨碍影响其他的 DML 和 DDL 操作。同时, 在多版本一致读机制的支持下, select 语句也不会被其他类型语句所阻碍。 借助 for update 子句, 我们可以在应用程序的层面手工实现数据加锁保护操作。本篇我们就来介绍一下这个子句的用法和功能。 下面是采自 Oracle 官方文档《SQL Language Reference》中关于for update子句的说明: 从 for updat e子句的语法状态图中, 我们可以看出该子句分为两个部分: 加锁范围子句和加锁行为子句。下面我们分别针对两个方面的进行介绍。 加锁范围子句 在 select…for update 之后,可以使用 of 子句选择对 select 的特定数据表进行加锁操作。默认情况下,不使用of子句表示在select所有的数据表中加锁。 //采用默认格式for update ...

2016-10-14 · 4 min · 664 words · -

golang fmt/Println

golang fmt/Println fmt.Printf("ab %d %d %d cd\n", 1, 2, 3) fmt包实现了格式化的I/O函数,这点类似C语言中的printf和scanf,但是更加简单. 占位符: The format/fmt ‘verbs’, 占位符 %v 值的默认格式。当打印结构体时,“加号"标记 (%+v) 会添加字段名 %#v 相应值的 Go 语法表示, 打印结构体名, 类 json 格式 %+v 打印键值对 %T 相应值的类型的 Go 语法表示 %% 字面上的百分号, 并非值的占位符 %d 十进制表示 %c the character represented by the corresponding Unicode code point %x base 16, with lower-case letters for a-f %X base 16, with upper-case letters for A-F %p address of 0th element in base 16 notation, with leading 0x %t the word true or false, (bool) https://pkg.go.dev/fmt ...

2016-10-14 · 7 min · 1324 words · -

goroutine 退出, waitgroup, channel

如何优雅地等待所有的 goroutine 退出 WaitGroup sync包中的 Waitgroup 结构,是Go语言为我们提供的多个goroutine之间同步的好刀。下面是官方文档对它的描述: A WaitGroup waits for a collection of goroutines to finish. The main goroutine calls Add to set the number of goroutines to wait for. Then each of the goroutines runs and calls Done when finished. At the same time, Wait can be used to block until all goroutines have finished. 通常情况下,我们像下面这样使用waitgroup: 创建一个Waitgroup的实例,假设此处我们叫它wg 在每个goroutine启动的时候,调用wg.Add(1),这个操作可以在goroutine启动之前调用,也可以在goroutine里面调用。当然,也可以在创建n个goroutine前调用wg.Add(n) 当每个goroutine完成任务后,调用wg.Done() 在等待所有goroutine的地方调用wg.Wait(),它在所有执行了wg.Add(1)的goroutine都调用完wg.Done()前阻塞,当所有goroutine都调用完wg.Done()之后它会返回。 import ( "fmt" "sync" "time" ) func main() { wg := &sync.WaitGroup{} wg.Add(1) go func() { for i := 0; i < 10; i++ { fmt.Println("goroutine-0: ", i) time.Sleep(1 * time.Second) } wg.Done() }() go goroutine1(wg) wg.Wait() } func goroutine1(wg *sync.WaitGroup) { defer func() { wg.Done() }() for i := 0; i < 10; i++ { fmt.Println("goroutine-1: ", i) time.Sleep(1 * time.Second) } } 通过 Channel 传递退出信号 goroutine 和 channel 是 Go 语言非常棒的特色,它们提供了一种非常轻便易用的并发能力。但是当您的应用进程中有很多goroutine的时候,如何在主流程中等待所有的 goroutine 退出呢? ...

2016-10-12 · 1 min · 199 words · -

golang 控制语句/control, foreach, loop, switch, 循环

golang 控制语句 control, foreach, loop, switch, 循环 Go 中的控制语句较精简, 只有很少的几个控制结构, 仅有 if、for、select 和 switch, 没有 while 或者 do-while 循环。 multiple initialisation and increment package main import ( "fmt" ) func main() { // multiple initialisation and increment for no, i := 10, 1; i <= 10 && no <= 19; i, no = i+1, no+1 { fmt.Printf("%d * %d = %d\n", no, i, no*i) } } range for index,element := range someSlice { // index is the index where we are // element is the element from someSlice for where we are } //If you don't care about the index, you can use _: for _,element := range someSlice { // element is the element from someSlice for where we are } for 循环 Go语言的For循环有3中形式, 只有其中的一种使用分号。 ...

2016-10-12 · 4 min · 745 words · -

敏捷心态

敏捷心态 http://www.infoq.com/cn/articles/what-agile-mindset?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global 敏捷心态是支持敏捷工作环境的态度。这些包括尊重、协作、改进和学习周期、为所有权自豪、专注于交付价值,以及有能力适应改变。这种心态是培养高性能团队所必需的,他们进而能为客户交付令人惊讶的价值。 尊重——大多数团队工作需要从尊重与你共事的伙伴开始。在组织层面,尊重组织各级同事、客户以及产品本身也是维系恰当工作环境的关键。 协作——随着待建系统越来越复杂,待处理的问题也随之更为复杂,没有一个人能在完成一项任务时掌握所有所需的信息。此外,与组织其他部分的同事以协作的方式一起工作将降低"手递手"交付的需求。通过工具、办公空间和行为规范对协作的促进,能提升协作讨论的质量和数量。 改进环——没有刻在石头上一成不变的过程,总有改进的空间。一个支持这种行为的组织将迎着这束光不断向前。 学习环——允许个人去尝试新鲜事物,成功也好,失败也罢,贵在为员工提供了学习和自我提升的机会。不应总向个人碎碎念失败,而应支持他们冒险,从而增长组织的知识水平。 为所有权自豪——即使没人为特定代码块负责,也应为预期交付高品质工作的增量交付物而自豪。 专注于交付价值——敏捷团队的主要目的是为客户交付价值。团队应该能够随时关注什么是最大的价值,并把这些传递给组织中的其他人 (例如管理人员和scrum master) ,这有助于消除任何障碍。 有能力适应改变——如果客户在会后两个小时给你打电话,说想要改改,组织随之而动。任何应对这种变化的处理过程都不应该成为这种变化的障碍。

2016-10-12 · 1 min · 13 words · -

Go 指针, pointer

Go 指针, pointer 普通指针 uintptr unsafe.Pointer 对于Go语言, 严格意义上来讲, 只有一种传递, 也就是按值传递 (by value)。当一个变量当作参数传递的时候, 会创建一个变量的副本, 然后传递给函数或者方法, 你可以看到这个副本的地址和变量的地址是不一样的。 当变量当做指针被传递的时候, 一个新的指针被创建, 它指向变量指向的同样的内存地址, 所以你可以将这个指针看成原始变量指针的副本。当这样理解的时候, 我们就可以理解成Go总是创建一个副本按值转递, 只不过这个副本有时候是变量的副本, 有时候是变量指针的副本。 Go 语言保留着C中值和指针的区别, 但是对于指针繁琐用法进行了大量的简化,引入引用的概念。所以在Go语言中,你几乎不用担心会因为直接操作内寸而引起各式各样的错误。Go语言的指针, 基本上只剩下用于区分 by ref 和 by val 语义。 指针地址和指针类型 一个指针变量可以指向任何一个值的内存地址,它所指向的值的内存地址在 32 和 64 位机器上分别占用 4 或 8 个字节,占用字节的大小与所指向的值的大小无关。当一个指针被定义后没有分配到任何变量时,它的默认值为 nil。指针变量通常缩写为 ptr。 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用在变量名前面添加&操作符 (前缀)来获取变量的内存地址 (取地址操作),格式如下: ptr := &v // v 的类型为 T 其中 v 代表被取地址的变量,变量 v 的地址使用变量 ptr 进行接收,ptr 的类型为 *T,称做 T 的指针类型,* 代表指针。 // &: 取地址 // *: 解析地址 var p *int // p 的类型是: int 型的指针 // Foo, Bar 的类型是指针 type TestItem struct { Foo *string //指针类型 Bar *string } package main import "fmt" func main() { var cat int = 1 var str string = "banana" // 0xc00001a0b0 0xc000010230 fmt.Printf("%p %p", &cat, &str) } package basic import ( "fmt" ) func PointerTest() { var i int // i 的类型是 int 型 i = 1 // i 的值为 1; var p *int // p 的类型是 int型的指针 p = &i // p 的值为 i 的地址 fmt.Printf("i=%d;p=%d;*p=%d\n", i, p, *p) *p = 2 // *p 的值为 [[i的地址]的指针] (其实就是i), 这行代码也就等价于 i = 2 fmt.Printf("i=%d;p=%d;*p=%d\n", i, p, *p) i = 3 // 验证想法 fmt.Printf("i=%d;p=%d;*p=%d\n", i, p, *p) } 这段代码执行结果: ...

2016-10-12 · 7 min · 1431 words · -

service mesh

service mesh 微服务 wiloon.com/microservice service mesh 下一代微服务架构 Service Mesh (服务网格) 被认为是下一代微服务架构,Service Mesh并没有给我们带来新的功能,它是用于解决其他工具已经解决过的服务网络调用、限流、熔断和监控等问题, 只不过这次是在 Cloud Native 的 kubernetes 环境下的实现。 Willian Morgan 对 Service Mesh 的解释。 A Service Mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application. In practice, the Service Mesh is typically implemented as an array of lightweight network proxies that are deployed alongside application code, without the application needing to be aware. ...

2016-10-10 · 2 min · 288 words · -

堡垒机

堡垒机 http://www.cnblogs.com/0201zcr/p/4718082.html 堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、记录、分析、处理的一种技术手段。 其从功能上讲,它综合了核心系统运维和安全审计管控两大主干功能,从技术实现上讲,通过切断终端计算机对网络和服务器资源的直接访问,而采用协议代理的方式,接管了终端计算机对网络和服务器的访问。形象地说,终端计算机对目标的访问,均需要经过运维安全审计的翻译。打一个比方,运维安全审计扮演着看门者的工作,所有对网络设备和服务器的请求都要从这扇大门经过。因此运维安全审计能够拦截非法访问,和恶意攻击,对不合法命令进行命令阻断,过滤掉所有对目标设备的非法访问行为,并对内部人员误操作和非法操作进行审计监控,以便事后责任追踪。 安全审计作为企业信息安全建设不可缺少的组成部分,逐渐受到用户的关注,是企业安全体系中的重要环节。同时,安全审计是事前预防、事中预警的有效风险控制手段,也是事后追溯的可靠证据来源。 原理: “堡垒机"实际上是旁路在网络交换机节点上的硬件设备,实现运维人员远程访问维护服务器的跳板,即物理上并联,逻辑上串联。简单的说,就是服务器运维管理人员原先是直接通过远程访问技术进行服务器维护和操作,这期间不免有一些误操作或者越权操作,而"堡垒机"作为远程运维的跳板,使运维人员间接通过堡垒机进行对远程服务的的运维操作。如原来使用微软的远程桌面RDP进行windows服务器的远程运维,现在先访问到堡垒机,再由堡垒机访问远程windows服务器。这期间,运维人员的所有操作都被记录下来,可以以屏幕录像、字符操作日志等形式长久保存。在服务器发生故障时,就可以通过保存的记录查看到以前进行的任何操作。 堡垒机的核心技术实际上就是微软的RDP协议,通过对RDP协议的解析,实现远程运维操作的图形审计。 以windows远程运维操作为例,客户端通过RDP协议访问"堡垒机”,再由堡垒机内置的远程访问客户端访问远程windows服务器,即RDP+RDP。 那么图形界面的操作是如何记录下来的呢?实际上堡垒机内部也是Windows操作系统 (不一定,有时候是Windows+Linux) ,客户端RDP到堡垒机后,又再一次启动了新的RDP,这时堡垒机的windows桌面就是远程访问到远程服务器时的桌面,只需要把这时的桌面情况记录下来就可以了。 由于微软的RDP协议内置了远程访问的屏幕信息,所以只需要正确的解析RDP协议的内容,并且把其中包含的视频信息抽取出来,再进行重组、压缩,就实现了图形操作的审计。 至于字符操作的审计,如FTP,实际上堡垒机内部内置了FTP客户端程序,也是客户端主机先RDP到堡垒机,再由堡垒机启动FTP客户端程序访问远程服务器,这样还是由堡垒机作为跳板,间接地把FTP命令传送到服务器,并把服务器的响应信息反馈给客户端主机,中间的操作过程全都被记录了下来。 远程视频访问的协议还有VNC,但由于VNC是一对一的访问,即同一时间一个客户端主机只能访问一台远程服务器,而RDP协议允许多个客户端同时访问同一个远程服务器,所以一般市场上的堡垒机厂商都是通过解析RDP协议实现运维审计的。 核心功能: 单点登录功能 支持对X11、linux、unix、数据库、网络设备、安全设备等一系列授权账号进行密码的自动化周期更改,简化密码管理,让使用者无需记忆众多系统密码,即可实现自动登录目标设备,便捷安全。 账号管理 设备支持统一账户管理策略,能够实现对所有服务器、网络设备、安全设备等账号进行集中管理,完成对账号整个生命周期的监控,并且可以对设备进行特殊角色设置如: 审计巡检员、运维操作员、设备管理员等自定义设置,以满足审计需求 身份认证 设备提供统一的认证接口,对用户进行认证,支持身份认证模式包括 动态口令、静态密码、硬件key 、生物特征等多种认证方式,设备具有灵活的定制接口,可以与其他第三方认证服务器之间结合;安全的认证模式,有效提高了认证的安全性和可靠性。 资源授权 设备提供基于用户、目标设备、时间、协议类型IP、行为等要素实现细粒度的操作授权,最大限度保护用户资源的安全 访问控制 设备支持对不同用户进行不同策略的制定,细粒度的访问控制能够最大限度的保护用户资源的安全,严防非法、越权访问事件的发生。 操作审计 设备能够对字符串、图形、文件传输、数据库等全程操作行为审计;通过设备录像方式实时监控运维人员对操作系统、安全设备、网络设备、数据库等进行的各种操作,对违规行为进行事中控制。对终端指令信息能够进行精确搜索,进行录像精确定位。

2016-09-30 · 1 min · 31 words · -

Linux 服务器性能 命令

Linux 服务器性能 命令 https://www.oschina.net/news/77545/check-linux-server-performance-in-one-minutes 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。 uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP,ETCP 1 top 其中一些命令需要安装sysstat包,有一些由procps包提供。这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源 (CPU、内存、磁盘IO等) 的利用率 (utilization) 、饱和度 (saturation) 和错误 (error) 度量,也就是所谓的USE方法。 下面我们来逐一介绍下这些命令,有关这些命令更多的参数和说明,请参照命令的手册。 uptime ? $ uptime 23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02 这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程 (进程状态为D) 的数量。这些数据可以让我们对系统资源使用有一个宏观的了解。 命令的输出分别表示1分钟、5分钟、15分钟的平均负载情况。通过这三个数据,可以了解服务器负载是在趋于紧张还是趋于缓解。如果1分钟平均负载很高,而15分钟平均负载很低,说明服务器正在命令高负载情况,需要进一步排查CPU资源都消耗在了哪里。反之,如果15分钟平均负载很高,1分钟平均负载较低,则有可能是CPU资源紧张时刻已经过去。 上面例子中的输出,可以看见最近1分钟的平均负载非常高,且远高于最近15分钟负载,因此我们需要继续排查当前系统中有什么进程消耗了大量的资源。可以通过下文将会介绍的vmstat、mpstat等命令进一步排查。 dmesg丨tail ? $ dmesg | tail [1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0 [1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child ...

2016-09-28 · 5 min · 1048 words · -

线程通信

线程通信 http://wiki.jikexueyuan.com/project/java-concurrent/thread-communication.html 线程通信的目标是使线程间能够互相发送信号。另一方面,线程通信使线程能够等待其他线程的信号。 通过共享对象通信 忙等待 wait(),notify()和 notifyAll() 丢失的信号 假唤醒 多线程等待相同信号 不要对常量字符串或全局对象调用 wait() 通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值。线程 A 在一个同步块里设置 boolean 型成员变量 hasDataToProcess 为 true,线程 B 也在同步块里读取 hasDataToProcess 这个成员变量。这个简单的例子使用了一个持有信号的对象,并提供了 set 和 check 方法: public class MySignal{ protected boolean hasDataToProcess = false; public synchronized boolean hasDataToProcess(){ return this.hasDataToProcess; } public synchronized void setHasDataToProcess(boolean hasData){ this.hasDataToProcess = hasData; } } 线程 A 和 B 必须获得指向一个 MySignal 共享实例的引用,以便进行通信。如果它们持有的引用指向不同的 MySingal 实例,那么彼此将不能检测到对方的信号。需要处理的数据可以存放在一个共享缓存区里,它和 MySignal 实例是分开存放的。 忙等待(Busy Wait) 准备处理数据的线程 B 正在等待数据变为可用。换句话说,它在等待线程 A 的一个信号,这个信号使 hasDataToProcess()返回 true。线程 B 运行在一个循环里,以等待这个信号: ...

2016-09-23 · 3 min · 504 words · -

PreparedStatementCache

PreparedStatementCache http://www.cnblogs.com/alipayhutu/archive/2013/04/18/3029171.html 如何理解PreparedStatementCache,以及如何使用 为节约键盘敲击次数,记PreparedStatement为PS, PreparedStatementCache为PSCache,并且所有的SQL使用的绑定变量。 原理: http://www.dbafree.net/?p=287 http://agapple.iteye.com/blog/838286 http://singleant.iteye.com/blog/1298837 使用: 使用ps. sql里用?占位,等待被替换。例如,select * from table1 where user_name = ? and age > ? 启用pscache。 …. …. 解析后的PS缓存,与重复利用。 sql语句,被发送到DB server端,经一系列处理 (语法解析、语义解析、结构优化) ,转化为一个树型结构 (sql, string -> tree) 。 3.1 sql解析后 (string -> tree) ,如何将ps放到pscache里? 首先,澄清个概念。执行树这个不是在应用客户端的,是在oracle服务器那边,server中也有pscache. 再者是说,只要客户端开启了PSCache,那么CS端都会缓存住这些个树 (尽管C端维护的结构可能简单一点) 。 底层会缓存 (LRU替换) ,用户不用关心。 3.2 假如pscache中,有一棵树是select * from table1 where user_name = ? and age > ? ,现在并发来了50个线程,都要用这棵树,如何复用? ...

2016-09-22 · 1 min · 72 words · -

druid

druid maxWait 默认值是无限大,当连接池中连接已经用完了,等待建立一个新连接的最大毫秒数 ( 在抛异常之前 ) 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 poolPreparedStatements 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。 在MySQL5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。 maxOpenPreparedStatements 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。 在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 maxOpenPreparedStatements statement cache的大小,默认为-1,也就是不限制 http://www.oschina.net/question/563890_2151605 https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8

2016-09-22 · 1 min · 18 words · -

MP4

MP4 MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它是在"ISO/IEC 14496-14"标准文件中定义的,属于MPEG-4的一部分,是"ISO/IEC 14496-12(MPEG-4 Part 12 ISO base media file format)“标准中所定义的媒体格式的一种实现,后者定义了一种通用的媒体文件结构标准。MP4是一种描述较为全面的容器格式,被认为可以在其中嵌入任何形式的数据,各种编码的视频、音频等都不在话下,不过我们常见的大部分的MP4文件存放的AVC(H.264)或MPEG-4(Part 2)编码的视频和AAC编码的音频。MP4格式的官方文件后缀名是”.mp4",还有其他的以mp4为基础进行的扩展或者是缩水版本的格式,包括: M4V, 3GP, F4V等。 mp4是由一个个"box"组成的,大box中存放小box,一级嵌套一级来存放媒体信息。 http://www.cnblogs.com/haibindev/archive/2011/10/17/2214518.html

2016-09-11 · 1 min · 19 words · -

raspberry pi basic, install, init

raspberry pi basic, install, init #download image http://director.downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2018-11-15/2018-11-13-raspbian-stretch-lite.zip # unzip image unzip 2018-11-13-raspbian-stretch-lite.zip # burn the system sudo dd bs=4M if=2017-08-16-raspbian-stretch.img of=/dev/sdX conv=fsync config login with pi/raspberry sudo raspi-config Localisation Options L3 Keyboard Generic 101-key PC Other English(US) English(US) - English (US, alt. intl.) change locale change timezone change keyboard change pi password network>hostname,wifi interface ssh advanced options>expand filesystem finsh and reboot config ssh public key config source list http://blog.wiloon.com/?p=7566 migrate from networking to systemd-networkd with dynamic failover ...

2016-09-10 · 1 min · 144 words · -

Asahi Linux

Asahi Linux curl https://alx.sh | sh # choose an existing partition to resize 1: APFS [Macintosh HD] # Enter the new size for your existing partition: 400GB

2016-09-08 · 1 min · 27 words · -

JAX-RS

JAX-RS JAX-RS - Java API for RESTful Web Services Java EE 6 引入了对 JSR-311 的支持。JSR-311 (JAX-RS: Java API for RESTful Web Services) 旨在定义一个统一的规范,使得 Java 程序员可以使用一套固定的接口来开发 REST 应用,避免了依赖于第三方框架。同时,JAX-RS 使用 POJO 编程模型和基于标注的配置,并集成了 JAXB,从而可以有效缩短 REST 应用的开发周期。 JAX-RS 定义的 API 位于 javax.ws.rs 包中,其中一些主要的接口、标注和抽象类 https://www.ibm.com/developerworks/cn/java/j-lo-jaxrs/

2016-09-07 · 1 min · 40 words · -