mt4 nj4xx, ask bid sl tp …

mt4 nj4xx, ask bid sl tp … ASK/OFFER: 卖出价 BID: 买入价 美元兑日元 买入/卖出(BID/ASK) 109.30/109.60 美元兑日元买入,卖出价分别为 109.30/109.60 在国际市场上,买入价与卖出价表示的含义是指银行准备从对手 (通常指客户) 那里的买入 (BID) 价、卖出 (ASK/OFFER) 价,买入价 (BID) 在左,卖出价 (ASK/OFFER) 价在右。 对于买入价与卖出价实际应用中的说明: 银行所标示的买入价均是对基础货币而言的买入价格,银行所标示的卖出价均是对基础货币而言的卖出价格。 例如: 工商银行的美元兑日元买入、卖出价分别为109.30/109.60;即表明工商银行从客户处买入美元卖出日元使用的牌价为109.30,则客户卖出美元买入日元就要使用109.30的牌价,反之亦然。 银行的卖出价均要高于银行的买入价,也就是客户在与银行进行交易的时候,客户的买入价高于客户的卖出价;原因有二: (1) 客户不论何时均可与银行进行交易,银行要无条件的买入或卖出,这样就要求银行必须要用这样的价差来保证自己的利益。 (2) 对于投资者而言,只有市场发生变化时,才有可能获利,如果市场没有任何变动,投资者在汇率静止的情况下,进行一买一卖是要赔钱的。而投资者的投资的目的是为了获利,获利的要素就是要求我们看准汇率走势方向,待汇市变化的时候,才有获利的可能,汇市汇率静止,客户将不可能获利。 外汇交易当中的买价和卖价是相对银行或者外汇交易商而言的,如果投资者想要买入就只能以高价买入,对应的也就是银行的卖家;投资者想要卖出就只能以低价卖给交易商或者银行,对应的也就是银行或者交易商的买价。这个中间的差价也就是给你提供买价和卖价的经纪商的收入。 (主要看买卖面向的双方是谁) MetaTrader平台中的柱状线 (bar) 是如何形成的: High (bar的最顶端) 是指特定时间段内出现的最高Bid价格 。 Low (bar的最底端) 是指特定时间段内出现的最低Bid价格 。 最低的Ask价格等于Low加点差,最高Ask价格等于High加点差。 挂单: Stop Loss和Take Profit买入订单,当市场的 Bid价格达到订单水平时开始执行。 Stop Loss和Take Profit卖出订单,当市场的 Ask价格达到订单水平时开始执行。 Buy Limit和Buy Stop挂单,当市场的 Ask价格达到订单水平时开始执行。 Sell Limit和Sell Stop挂单,当市场的 Bid价格达到订单水平时开始执行。 例如: 您在1.2250的位置开设了卖出EURUSD货币对的订单,并设置Stop Loss位置1.2340,Take Profit位置1.2190。EURUSD的点差为2点。 根据上述情况,Stop Loss卖出订单在市场的Ask价格达到订单水平时开始执行。这意味着当市场的Ask价格达到1.2340或更高时,订单开始执行。由于MT4图表显示的是Bid价格,因此当High达到1.2338 (1.2340-2点点差) 或更高时,订单开始执行。 ...

2016-09-03 · 1 min · 86 words · -

tail command

tail command 同时监控多个日志文件 tail -f foo.log bar.log tail -f *.log Linux监测日志tail命令详细使用 如果在Linux下调试程序的朋友应该都知道tail命令,它确实是调试程序监测日志文件的能手。打开Linux输入以下命令看看命令的使用帮助 [root@lee ~]# tail –help 用法: tail [选项]… [文件]… 显示每个指定文件的最后10 行到标准输出。 若指定了多于一个文件,程序会在每段输出的开始添加相应文件名作为头。 如果不指定文件或文件为"-" ,则从标准输入读取数据。 长选项必须使用的参数对于短选项时也是必需使用的。 -c, –bytes=K 输出最后K 字节;另外,使用-c +K 从每个文件的 第K 字节输出 -f, –follow[={name|descriptor}] 即时输出文件变化后追加的数据。 -f, –follow 等于–follow=descriptor -F 即 –follow=name –retry -n, –lines=K output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth –max-unchanged-stats=N with –follow=name, reopen a FILE which has not changed size after N (default 5) iterations to see if it has been unlinked or renamed (this is the usual case of rotated log files). With inotify, this option is rarely useful. –pid=PID 同 -f 一起使用,当 PID 所对应的进程死去后终止 -q, –quiet, –silent 不输出给出文件名的头 –retry 即使目标文件不可访问依然试图打开;在与参数 –follow=name 同时使用时常常有用。 -s, –sleep-interval=N with -f, sleep for approximately N seconds (default 1.0) between iterations. With inotify and –pid=P, check process P at least once every N seconds. -v, –verbose always output headers giving file names –help 显示此帮助信息并退出 –version 显示版本信息并退出 ...

2016-08-14 · 1 min · 200 words · -

MySQL中日期函数和日期的加减运算

MySQL中日期函数和日期的加减运算 字符串转为日期格式 SELECT DATE('2017-02-11') SELECT DATE('2017/02/11') SELECT STR_TO_DATE('2015/02/25','%Y/%m/%d') SELECT STR_TO_DATE('2015-02-25','%Y-%m-%d') select count(*)/60 from xxx where st>=now() - INTERVAL 2 minute and st<=now() - INTERVAL 1 minute date_sub() 为日期减去一个时间间隔 select DATE_SUB(NOW(),INTERVAL 10 SECOND) SELECT DATE_SUB("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND); MySQL日期运算,日期函数 DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。 MySQL> select DAYOFWEEK(‘1998-02-03’); -> 3 WEEKDAY(date) 返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。 MySQL> select WEEKDAY(‘1997-10-04 22:23:00’); -> 5 MySQL> select WEEKDAY(‘1997-11-05’); -> 2 DAYOFMONTH(date) 返回date的月份中日期,在1到31范围内。 MySQL> select DAYOFMONTH(‘1998-02-03’); -> 3 DAYOFYEAR(date) 返回date在一年中的日数, 在1到366范围内。 MySQL> select DAYOFYEAR(‘1998-02-03’); ...

2016-08-13 · 3 min · 636 words · -

TCP 三次握手, tcp three way handshake, 四次挥手, TCP 状态 (SYN, FIN, ACK, PSH, RST, URG)

TCP 三次握手, tcp three way handshake, 四次挥手, TCP 状态 (SYN, FIN, ACK, PSH, RST, URG) TCP (Transmission Control Protocol) TCP 工作在网络OSI的七层模型中的第四层 - Transport层 TCP标志位 在TCP层,有个FLAGS字段,这个字段有以下几个标识: SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是: SYN表示建立连接,SYN (synchronous) 是TCP/IP建立连接时使用的握手信号。 FIN表示关闭连接,FIN(Finish)—为1表示发送方没有数据要传输了,要求释放连接。 ACK表示响应,ACK (ACKnowledge Character) PSH表示有 DATA数据传输,(Push) RST表示连接重置。Reset重连位~ 当RST=1的时候通知重新建立TCP连接 URG: urgent 其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应, 如果只是单个的一个SYN,它表示的只是建立连接。 TCP的几次握手就是通过这样的ACK表现出来的。 但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。 RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。 一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。 PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。 TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。 TCP三次握手 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 第一次握手: (A -> [SYN] -> B) 主机A发送位码为syn=1, seq=1234567(seq随机产生)的数据包到服务器,主机B由SYN=1知道,A要求建立联机;(seq:Sequence number),并进入SYN_SEND状态,等待服务器确认; 第二次握手: (B -> [SYN/ACK] -> A) 主机B收到请求后要确认联机信息,向A发送syn=1,ack=1234568(主机A的seq+1),seq=7654321(随机产生)的包;此时服务器进入SYN_RECV状态; ...

2016-08-10 · 2 min · 236 words · -

linux shell 文本 去重 – awk或者uniq

linux shell 文本 去重 – awk或者uniq uniq 不带参数时, 默认合并重复的行. 类似MySQL的 distinct -c, --count //在每行前加上表示相应行目出现次数的前缀编号 -d, --repeated //只输出重复的行 -D, --all-repeated //只输出重复的行,不过有几行输出几行 -f, --skip-fields=N //-f 忽略的段数,-f 1 忽略第一段 -i, --ignore-case //不区分大小写 -s, --skip-chars=N //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符 -u, --unique //只显示不重复的行 -z, --zero-terminated end lines with 0 byte, not newline -w, --check-chars=N //对每行第N 个字符以后的内容不作对照 --help //显示此帮助信息并退出 --version //显示版本信息并退出 对于awk ‘!a[$3]++’,需要了解3个知识点 awk数组知识,不说了 awk的基本命令格式 awk ‘pattern{action}’ 省略action时,默认action是{print},如awk ‘1’就是awk ‘1{print}’ ...

2016-08-09 · 2 min · 242 words · -

kafka

kafka kafka 大量使用页缓存, 经过良好调优的 kafka 集群, 磁盘读操作很少, 因为大部分消息读取操作会直接命中缓存 kafka 高吞吐量 大量使用操作系统页缓存,内存操作速度快且命中率高。 Kafka 不直接参与物理I/O操作,而是交由最擅长此事的操作系统来完成。 采用追加写入方式,摒弃了缓慢的磁盘随机读/写操作。 使用以 sendfile为代表的零拷贝技术加强网络间的数据传输效率。 摘自:《Apache Kafka实战》 — 胡夕 在豆瓣阅读书店查看:https://read.douban.com/ebook/59895902/ 本作品由电子工业出版社授权豆瓣阅读中国大陆范围内电子版制作与发行。 © 版权所有,侵权必究。 伸缩性,scalability 伸缩性表示向分布式系统中增加额外的计算资源(比如CPU、内存、存储或带宽)时吞吐量提升的能力。 partition Kafka的partition是不可修改的有序消息序列,也可以说是有序的消息日志。 replica 副本(replica) follower replica 是不能提供服务给客户端的,也就是说不负责响应客户端发来的消息写入和消息消费请求。它只是被动地向领导者副本(leader replica)获取数据 ISR的全称是in-sync replica,翻译过来就是与leader replica保持同步的replica集合 正常情况下,partition的所有replica(含leader replica)都应该与leader replica保持同步,即所有 replica都在 ISR中。因为各种各样的原因,一小部分 replica开始落后于 leader replica的进度。当滞后到一定程度时,Kafka会将这些 replica“踢”出 ISR。相反地,当这些 replica重新“追上”了 leader的进度时,那么 Kafka会将它们加回到 ISR中。这一切都是自动维护的,不需要用户进行人工干预,因而在保证了消息交付语义的同时还简化了用户的操作成本。 摘自:《Apache Kafka实战》 — 胡夕 在豆瓣阅读书店查看:https://read.douban.com/ebook/59895902/ 本作品由电子工业出版社授权豆瓣阅读中国大陆范围内电子版制作与发行。 © 版权所有,侵权必究。 Event Sourcing实际上是领域驱动设计(Domain-Driven Design,DDD)的名词,它使用事件序列来表示状态变更,这种思想和 Kafka 的设计特性不谋而合。 数据倾斜(skewed) 分布式消息队列是是大型分布式系统不可缺少的中间件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。 为何使用消息系统 解耦 在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 冗余 有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。 ...

2016-07-26 · 2 min · 271 words · -

golang manul

golang manul git clone -branch pkg-archlinux git://github.com/kovetskiy/manul /tmp/manul cd /tmp/manul makepkg pacman -U *.xz

2016-07-25 · 1 min · 14 words · -

ipset

ipset # install ipset pacman -S ipset apt-get install ipset # 查看集合 ipset list ipset create vlist hash:net ipset add myset 14.144.0.0/12 ipset -A vlist 172.217.24.14 ipset del yoda x.x.x.x # 从 yoda 集合中删除内容 ipset list yoda # 查看 yoda 集合内容 ipset list # 查看所有集合的内容 ipset flush yoda # 清空 yoda 集合 ipset flush # 清空所有集合 ipset destroy yoda # 销毁 yoda 集合 ipset destroy # 销毁所有集合 ipset save > /etc/ipset.up.rules # 输出所有集合内容到标准输出 ipset restore -! < /etc/ipset.up.rules # 根据输入内容恢复集合内容 启动时创建ipset vim /etc/systemd/system/ipset-persistent.service [Unit] Description=ipset persistancy service DefaultDependencies=no Requires=netfilter-persistent.service Requires=ufw.service Before=network.target Before=netfilter-persistent.service Before=ufw.service ConditionFileNotEmpty=/etc/ipsets.conf [Service] Type=oneshot RemainAfterExit=yes ExecStart=/sbin/ipset restore -f -! /etc/ipsets.conf # save on service stop, system shutdown etc. ExecStop=/sbin/ipset save blacklist -f /etc/ipsets.conf [Install] WantedBy=multi-user.target RequiredBy=netfilter-persistent.service RequiredBy=ufw.service https://confluence.jaytaala.com/pages/viewpage.action?pageId=11763750#UsingipsettoblockIPaddresses-firewall-Settingipsettobepersistent(notloselistsonreboot) ...

2016-07-23 · 4 min · 719 words · -

DNS劫持 DNS污染

DNS劫持 DNS污染 http://www.williamlong.info/archives/3356.html 我们知道,某些网络运营商为了某些目的,对DNS进行了某些操作,导致网民使用正常的上网设置无法通过域名解析出正确的IP地址。常用的手段有: DNS劫持和DNS污染。 什么是DNS劫持 DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的。 DNS劫持症状: 在某些地区的用户在成功连接宽带后,首次打开任何页面都指向ISP提供的"电信互联星空"、“网通黄页广告"等内容页面。还有就是曾经出现过用户访问Google域名的时候出现了百度的网站。这些都属于DNS劫持。 什么是DNS污染 DNS污染是一种让一般用户由于得到虚假目标主机IP而不能与其通信的方法,是一种DNS缓存投毒攻击 (DNS cache poisoning) 。其工作方式是: 由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器 (NS,Name Server) 给查询者返回虚假结果。 而DNS污染则是发生在用户请求的第一步上,直接从协议上对用户的DNS请求进行干扰。 DNS污染症状: 目前一些被禁止访问的网站很多就是通过DNS污染来实现的,例如YouTube、Facebook等网站。 解决方法 对于DNS劫持,可以采用使用国外免费公用的DNS服务器解决。例如OpenDNS (208.67.222.222) 或GoogleDNS (8.8.8.8) 。 对于DNS污染,可以说,个人用户很难单单靠设置解决,通常可以使用VPN或者域名远程解析的方法解决,但这大多需要购买付费的VPN或SSH等,也可以通过修改Hosts的方法,手动设置域名正确的IP地址。 总结 DNS劫持就是指用户访问一个被标记的地址时,DNS服务器故意将此地址指向一个错误的IP地址的行为。范例,网通、电信、铁通的某些用户有时候会发现自己打算访问一个地址,却被转向了各种推送广告等网站,这就是DNS劫持。 DNS污染,指的是用户访问一个地址,国内的服务器(非DNS)监控到用户访问的已经被标记地址时,服务器伪装成DNS服务器向用户发回错误的地址的行为。范例,访问Youtube、Facebook之类网站等出现的状况。

2016-07-23 · 1 min · 32 words · -

golang strconv

golang strconv https://github.com/polaris1119/The-Golang-Standard-Library-by-Example/blob/master/chapter02/02.3.md strconv — 字符串和基本数据类型之间转换 这里的基本数据类型包括: 布尔、整型 (包括有/无符号、二进制、八进制、十进制和十六进制) 和浮点型等。 2.3.1 strconv 包转换错误处理 介绍具体的转换之前,先看看 strconv 中的错误处理。 由于将字符串转为其他数据类型可能会出错,strconv 包定义了两个 error 类型的变量: ErrRange 和 ErrSyntax。其中,ErrRange 表示值超过了类型能表示的最大范围,比如将 “128” 转为 int8 就会返回这个错误;ErrSyntax 表示语法错误,比如将 "" 转为 int 类型会返回这个错误。 然而,在返回错误的时候,不是直接将上面的变量值返回,而是通过构造一个 NumError 类型的 error 对象返回。NumError 结构的定义如下: // A NumError records a failed conversion. type NumError struct { Func string // the failing function (ParseBool, ParseInt, ParseUint, ParseFloat) Num string // the input Err error // the reason the conversion failed (ErrRange, ErrSyntax) ...

2016-07-19 · 4 min · 685 words · -

Debian安装FTP服务器,使用vsftpd简单实现

Debian安装FTP服务器,使用vsftpd简单实现 http://wudixiaozi.com/1694.html Debian安装FTP服务器,使用vsftpd简单实现 June 27th, 2013无敌小子Leave a commentGo to comments Debian自己安装的时候若没有勾选FTP服务器的话,那就需要在后期手动安装了!这里简单介绍一下debian如何安装和配置FTP服务器! Debian下实现FTP的软件很多,我这里推荐vsftpd,因为他非常的短小精干,只要设置得当还是不错的!那我们就按照下面的命令一步步的来完成! 首先我们更新下软件源: aptitude update 安装vsftpd apt-get install vsftpd 安装完毕以后我们来配置vsftpd,使用nano编辑器打开 nano /etc/vsftpd.conf 打开后我们找到anonymous_enable=YES 替换成anonymous_enable=NO 找到local_enable=YES,将前面的#去掉 找到Write_enable=NO将前面的#去掉,改成YES 然后在配置文件的最后一行加上: chroot_local_user=YES 目的是让登陆用户锁定在指定目录里面!放置用户可以返回上层目录! 接下来创建用户组: groupadd ftp 一般会提示用户组ftp已存在,我们忽略他! 创建用户 useradd -g ftp -d /var/www user 这里需要修改的就量个,/var/www是你想创建的用户登陆后锁定在哪个目录里面,上面的user是用户名,你这里可以改成你自己想要的! 然后我们给添加的ftp的user更改密码 passwd user 输入两次后就改好了! 重启vsftpd服务,让配置生效 invoke-rc.d vsftpd restart 为了让设定的/var/www可读写,我们还要设定下目录权限 chmod -R 777 /var/www/ 大功告成,这时候可以使用类似flashFXP这种FTP客户端登陆测试看看!

2016-07-17 · 1 min · 55 words · -

Go unit test, 单体测试

Go unit test, 单体测试 执行某一个测试文档 go test foo_test.go go test -v foo_test.go // 强制 go test 运行一次,不使用缓存, 在配置了 -count 参数的情况下,go test 会忽略缓存 // -count, 执行测试的次数 go test -count=1 foo_test.go # 执行某一个文件中的某一个或几个函数 go test path/to/foo_test.go -run "^TestFunc0$" go test 会默认缓存测试运行的结果(Test Cache),缓存判断的依据是: 测试本身的代码(如 *_test.go 文件) 测试依赖的源文件是否发生变更 测试的相关环境参数是否发生变化(环境变量、命令参数等) Go 语言推荐测试文件和源代码文件放在一块,测试文件以 _test.go 结尾。比如,当前 package 有 calc.go 一个文件,我们想测试 calc.go 中的 Add 和 Mul 函数,那么应该新建 calc_test.go 作为测试文件。 calc_test.go package main import "testing" func TestAdd(t *testing.T) { t.Log("test foo") if ans := Add(1, 2); ans != 3 { t.Errorf("1 + 2 expected be 3, but %d got", ans) } if ans := Add(-10, -20); ans != -30 { t.Errorf("-10 + -20 expected be -30, but %d got", ans) } } 测试用例名称一般命名为 Test 加上待测试的方法名。 测试用的参数有且只有一个, 在这里是 t *testing.T ...

2016-07-13 · 4 min · 644 words · -

私有地址

私有地址 REC 1918留出了3块IP地址空间 (1个A类地址段,16个B类地址段,256个C类地址段) 作为私有的内部使用的地址。在这个范围内的IP地址不能被路由到Internet骨干网上;Internet路由器将丢弃该私有地址。 IP地址类别 RPC 1918内部地址范围 A类 10.0.0.0到10.255.255.255 B类 172.16.0.0到172.31.255.255 C类 192.168.0.0到192.168.255.255 使用私有地址将网络连至Internet,需要将私有地址转换为公有地址。这个转换过程称为网络地址转换 (Network Address Translation,NAT) ,通常使用路由器来执行NAT转换。 http://zhidao.baidu.com/question/67058143.html

2016-07-12 · 1 min · 20 words · -

maven 依赖 继承

maven 依赖 继承 Project A 被 Project B 调用 比如 A 里有 mockito的jar包, B要引用A , 从而不需要在B里直接引用mockito的jar包,而且A 包里的自建代码也可以用起来。 关键点在于 A 的pom里不能 用 test scope来藏起来A里面的jar ,这样B就无法继承到了。 Maven依赖范围及依赖传递 一: 依赖范围scope 共5种,compile (编译)、test (测试)、runtime (运行时)、provided、system 不指定,则依赖范围默认为compile. compile:编译依赖范围,在编译,测试,运行时都需要。 test: 测试依赖范围,测试时需要。编译和运行不需要。如Junit runtime: 运行时依赖范围,测试和运行时需要。编译不需要。如JDBC驱动包 provided:已提供依赖范围,编译和测试时需要。运行时不需要。如servlet-api system:系统依赖范围。本地依赖,不在maven中央仓库。 二: 依赖的传递 A->B(compile) 第一关系: a依赖b compile B->C(compile) 第二关系: b依赖c compile 当在A中配置 com.B B 1.0 ...

2016-07-05 · 1 min · 107 words · -

linux mount, invalid argument, no such device

linux mount, invalid argument, no such device http://blog.sina.com.cn/s/blog_b71132f0010148kk.html

2016-07-02 · 1 min · 8 words · -

cd pushd

cd pushd http://os.51cto.com/art/200910/158752.htm cd - # list current dir pwd /foo # cd to /bar cd /bar pwd /bar # 可以在 $OLDPWD 变量里查看旧目录 echo $OLDPWD # cd - return to previous dir /foo cd - pwd /foo # cd -, return to previous dir /bar cd - pwd /bar pushd、popd 和 dirs pushd 和 popd 是对一个目录栈进行操作,而 dirs 是显示目录栈的内容。而目录栈就是一个保存目录的栈结构,该栈结构的顶端永远都存放着当前目录(这里点从下面可以进一步看到)。 dirs 的 参数: -p 每行显示一条记录 -v 每行显示一条记录,同时展示该记录在栈中的 index -c 清空目录栈, 将目录栈中除当前目录之外的其它目录清除 每次 cd 之后, 新目录都会被记录到目录栈中 ...

2016-07-02 · 2 min · 271 words · -

golang io

golang io https://github.com/polaris1119/The-Golang-Standard-Library-by-Example/blob/master/chapter01/01.1.md

2016-07-01 · 1 min · 3 words · -

golang 异常处理, err, error, panic, recover

golang 异常处理, err, error, panic, recover 基础知识 错误指的是可能出现问题的地方出现了问题, 比如打开一个文件时失败, 这种情况在人们的意料之中;而异常指的是不应该出现问题的地方出现了问题, 比如引用了空指针, 这种情况在人们的意料之外。可见, 错误是业务过程的一部分, 而异常不是。 自定义异常 return errors.New("string") 打印调用栈 using runtime defer func() { if p := recover(); p != nil { logger.Errorf("panic: %v", p) //打印调用栈信息 buf := make([]byte, 2048) n := runtime.Stack(buf, false) stackInfo := fmt.Sprintf("%s", buf[:n]) logger.Errorf("panic stack info %s", stackInfo) } }() using debug if p := recover(); p != nil { logs.Error("message push panic: %v", p) //打印调用栈信息 debug.PrintStack() } Go语言追求简洁优雅, 所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,也就是说,遇到真正的异常的情况下 (比如除数为0了) 。才使用Go中引入的Exception处理: defer, panic, recover。 ...

2016-07-01 · 2 min · 251 words · -

linux tc

linux tc http://blog.csdn.net/qinyushuang/article/details/46611709 TC 在Linux中,流量控制都是通过TC这个工具来完成的。通常,要对网卡进行流量控制的配置,需要进行如下的步骤: ◆ 为网卡配置一个队列; ◆ 在该队列上建立分类; ◆ 根据需要建立子队列和子分类; ◆ 为每个分类建立过滤器。 在Linux中,可以配置很多类型的队列,比如CBQ、HTB等,其中CBQ 比较复杂,不容易理解。HTB(Hierarchical Token Bucket)是一个可分类的队列, 与其他复杂的队列类型相比,HTB具有功能强大、配置简单及容易上手等优点。在TC中,使用"major:minor"这样的句柄来标识队列和类别,其中major和minor都是数字。 对于队列来说,minor总是为0,即"major:0"这样的形式,也可以简写为"major: “比如,队列1:0可以简写为1:。需要注意的是,major在一个网卡的所有队列中必须是惟一的。对于类别来说,其major必须和它的父类别或父队列的major相同,而minor在一个队列内部则必须是惟一的(因为类别肯定是包含在某个队列中的)。举个例子,如果队列2:包含两个类别,则这两个类别的句柄必须是2:x这样的形式,并且它们的x不能相同,比如2:1和2:2。

2016-06-10 · 1 min · 20 words · -

archlinux steam

archlinux steam sudo pacman -S steam sudo pacman -S ttf-liberation sudo pacman -S wqy-zenhei sudo pacman -S lib32-alsa-plugins sudo pacman -S lib32-curl sudo pacman -S lib32-libxtst sudo pacman -S lib32-gtk2 sudo pacman -S lib32-libpulse STEAM_RUNTIME=0 steam https://wiki.archlinux.org/index.php/steam#Installation https://wiki.archlinux.org/index.php/Steam#Using_native_runtime

2016-06-05 · 1 min · 38 words · -