CharlesXiao‘s Blog

  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

  • 搜索

2018

发表于 2017-11-11 | 更新于 2018-09-22 | 字数统计448字 | 阅读时长1分钟

投资理财

  • 美股和港股
  • 基金和P2P理财类(懒投资,网贷之家,行业收紧需慎重) — 不再碰
  • 百度钱包等固定收益类 — 稳定收益
  • 少量虚拟货币 — 自媒体扩大业务,50%进入投资
  • 股票技术面分析理论与实践
  • 阅读5本相关书籍:格林皮特的两本,技术面分析2本,宏微观经济 — doing

被动收入

  • 内容号,包括博客,百家号等 — done,微博+头条+微信
  • 小程序,招聘信息类爬虫等开发类产品 — 红利期还没爆发?百度小程序?

技术成长

  • 有一个系统全面的roadmap和framework
  • 基础技术方面:语言,操作系统,网络
  • 专业技能:分布式系统,存储,云计算相关新技术栈
  • 算法和数据结构:leetcode到达300道,以C++,Go,Java三种语言
  • 阅读5本相关书籍:深入理解计算机系统、effective C++、Golang一本、系统架构
  • 阅读2-3份源码:Nginx、Leveldb、raft or brpc、redis、mysql、golang
  • 熟悉3个周边系统:BlobStorage、proxy、tafDB、Mola

外部机遇

  • 涨薪机会
  • 晋升机会
  • 技术转管理或金融机会
  • 跳槽机会
  • 面试技巧训练
  • 找准3次定位

行业新风口

  • 机器学习与AI算法
  • 区块链和虚拟货币

随笔札记

区块链技术的发展很有可能带来技术革新,类似于PC互联网、移动互联网、自媒体内容创业这样同等重要的机遇,如何抓住并且变现,值得思考!

房产市场的变化,从买房到租房,可能会引发下一个投资机遇,这个跟政策有很大关系,应该多加关注房地产政策的走向和解读

区块链技术探秘

发表于 2017-11-11 | 更新于 2018-09-22 | 字数统计2k字 | 阅读时长6分钟

区块链

技术角度来讲,区块链是分布式数据存储、P2P网络传输、共识机制、加密算法等技术的集成应用。区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问安全、利用智能化合约来编程和操作数据的一种全新的分布式基础架构与计算范式。

通俗来讲,区块链是一个收录所有历史交易的分布式账本,每个区块中包含若干笔交易记录。如果说区块链是账本,那么区块就是账本的每一页。交易的细节都被记录在一个网络里任何人都可以看得到的公开账簿上,而且这个账本会保存在每个节点中。

区块链的核心能力在于“大大降低了达成存在性证明的成本”:对于当前区块记录,采用一台矿机记录,成千上万矿机鉴证的模式,保证着没有非法区块被正确记录,当然理论上51%的矿机如果共同决定要做假,事实是可以记录假数据,只是在当前的算力下,准备如此大的算力来记录假数据,成本极高。

主体架构

从架构设计上来说,区块链可以简单的分为三个层次,协议层、扩展层和应用层。

核心概念

  1. 共识机制:我们知道,比特币系统中每十分钟产生一个区块,同时有n个节点在收到了这个区块,那么由谁去负责打包这个区块,将其纳入区块链呢?为了达到这种共识,决定最终打包权,需要一种共识机制,例如比特币就采用了POW,看谁的计算力强大,哈希计算速度更快,谁就更有可能获得打包权,也就相应的获得打包的奖励以及交易的手续费用。
  2. 挖矿过程:每一个比特币的节点都会收集所有尚未确认的交易,并将其归集到一个资料块中,比特币系统会在系统节点上将他生成一个随机代码,任何人都有权通过计算机去寻找此代码,争夺具有记账权的节点,挖矿节点不断重复进行尝试;矿工找到此代码,就会产生一个可记账区块,随即得到一个比特币的奖励报酬;当一个节点找到了符合要求的解,那么它就可以向全网广播自己的结果。其他节点就可以接收这个新解出来的资料块,并检验其是否符合规则。如果其他节点通过计算杂凑值发现确实满足要求(比特币要求的运算目标),那么该资料块有效,其他的节点就会接受该资料块。每隔一个时间点(10分钟),比特币系统会在系统节点上重新生成一个随机代码。具体计算随机数的流程:

传统分布式一致性算法和区块链共识过程的异同点

—- 传统一致性算法 区块链共识算法
主流算法 paxos算法
raft算法
pos(proof of stake)股权证明机制
pow(proof of work)工作量证明机制
瑞波共识机制(Ripple Consensus)
相同点 追加式写
强调序列化
长链覆盖短链区块,多节点覆盖少数节点日志
少数服从多数
—-
不同点 1. 不考虑拜占庭容错(Byzanetine Paxos除外),即假设所有节点只发生宕机、网络故障等非人为问题
2. 面向日志(数据库)的,即更通用的情况
1. 需要考虑恶意节点篡改数据的问题
2. 区块链共识模型面向交易

比特币

最初中本聪在2009年提出的白皮书是这么定义的 —- 《比特币:一种点对点的电子现金系统》,but,演变至今,比特币逐渐被理解为一种虚拟货币,而抽象出一种通用的技术框架—-区块链技术;比特币可以说是区块链技术的第一个应用,也是目前最成功的一个应用。比特币是一种P2P形式的数字货币,数量有限,一共只有2100万枚,有着类似于黄金的稀缺性。

比特币协议规定:第0个 – 第21万个Block,每个Block里有50个比特币,第21万-第42万个Block,每个Block里有25个比特币,依次递减,最后比特币全网中只会有2100万个比特币。

比特币系统中的几个常用概念与现有货币系统的类比:

比特币钱包 —> 电子银行的客户端

比特币地址 —> 银行卡号

比特币密钥 —> 银行卡密码

解决的问题

如果说互联网技术解决了人类的信息获取问题,那边区块链技术则解决了人类之间的信任问题。传统人与与人之间的交易,一般都通过一个权威的中心进行,如通过银行转账,通过中介,政府的介入才能进行房屋买卖。而区块链让全网所有的节点共同维护一个账本,每个节点都有一份账本,交易记录一旦确定就无法修改等特点保证了交易记录的真实可靠,无法篡改。所以陌生人之间可以基于区块链技术直接进行各种交易,并保证交易的真实可靠和完全可信。

应用场景

  1. 银行业

    作为一种数字化,安全防干扰的帐户,区块链实现了银行业的核心功能:即价值的安全储存和转移中心。也就是说,在将来的几年内,一波基于区块链技术的公司或将影响到银行业。

  2. 支付和转账

    区块链技术能够避开繁杂的系统,在付款人和收款人之间创造更直接的付款流程,不管是境内转账还是跨境转账,这种方式都有着低价、迅速的特点,而且无需中间手续费。

  3. 网络安全

    虽然区块链的系统是公开的,但其核验、发送等数据交流过程却采用了先进的加密技术。这种技术不仅确保了数据的正确来源,也确保了数据在中间过程不被人拦截。如果区块链技术的应用更为广泛,那么其遭受黑客袭击的概率也可能会下降,因此人们认为区块链系统要比传统系统更为稳妥。区块链系统之所以能降低传统网络安全风险,一大原因就是它解除了对中间人的需求。

  4. 选举

    大家的投票“绝不可能被我们——即程序员,学校管理员或学生修改、删除。”,信任代价降低。

  5. 智能合同

    智能合同实际上是在另一个物体的行动上发挥功能的电脑程序。和普通电脑程序一样,智能合同也是一种“如果-然后”功能,但区块链技术实现了这些“合同”的自动填写,无需人工介入。这种合同最终可能会取代法律行业的核心业务,即在商业和民事领域起草和管理合同的业务。

  6. 股票交易

    许多年来,各个公司都在想方设法简化股票的购买、销售和交易过程,新兴的区块链技术创企认为他们能够超越以往,实现整个流程的自动化,提高安全性和效率。

C++编译之CMake工具

发表于 2017-11-11 | 更新于 2018-10-20 | 字数统计412字 | 阅读时长1分钟

什么是CMake

  1. CMake 是一个比make 更高级的编译配置工具,允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程,从而做到“Write once, run everywhere”。
  2. linux 平台下使用 CMake 生成 Makefile 并编译的流程:
    1. 编写 CMake 配置文件 CMakeLists.txt
    2. 执行命令 cmake PATH,PATH是CMakeLists.txt 所在的目录,cmake命令会生成Makefile文件
    3. 再使用 make 命令进行编译,make命令会编译链接生成可执行文件

编译的四个阶段

执行 make 命令默认执行的是 make all,make all 有四个阶段: prepare test compile package。我们也可以只执行某一个阶段的命令。下面是针对每个命令的说明:

  • make prepare : 只会执行prepare阶段,这个阶段主要是下载编译依赖
  • make test : 只会执行test阶段,这个阶段主要是做单元测试
  • make compile : 只会执行compile阶段,这个阶段主要是进行编译
  • make package : 只会执行packege阶段,这个阶段会把编译产出都copy到output目录中
  • make install : 只会执行install阶段,这个阶段是把编译产出放到$GOPATH/bin目录下,这个不是必须的
  • make clean : 只会执行clean阶段,这个阶段把编译输出的一些文件删除,恢复到编译之前的状态

实例分析

leveldb CMakeLists.txt文件

CMakeLists.txt文件编译C/C++示例小程序

参考链接

  1. CMake实战入门

投资随笔

发表于 2017-11-11 | 更新于 2018-03-15 | 字数统计1.6k字 | 阅读时长5分钟

实战经验

  1. 在大盘整体上涨的情况下,一定要等行情回调形势明朗时再买入,因为回调往往会连续几天,这几天里始终是会有上车机会的,不要着急,急于下手往往导致被套住。例如迅速买入京东亏损150刀
  2. 每天的曲线,最低点到最高点的振幅其实已经够大,果断抓住也是非常重要的。但是短线的前提是重仓,否则你往往会因为收益不够多而恋战,从而导致最终盈变成亏,重仓时不要跟大盘趋势作对。
  3. 在面对盈亏变化时心态和自制力非常重要,一定要有耐性。
  4. 从阿里和好未来的股价变化来看,在股价创新高时抛售是极不明智的,长期持有带来的收益会达到3倍左右,不要做“弱水三千只取一瓢”的愚蠢举动。例如对阿里,好未来,百度没有长期持有
  5. 不要跟趋势作对!参考第一条,下跌时买入往往会导致你止损割肉,从而亏损,例如短线操作微博亏损150刀
  6. 尽量不买入不熟悉的股票,如果需要买入尽量先观察一段时间。因为买入一只不熟悉的股票,往往会因为没有信心,而在回调时割肉退场,得不偿失。
  7. 相信自己的观察和股票的周期性,果断地买入被低估的公司,周期之后必会达到期望的价值例如低点的网易(250-310),微博(95-110)
  8. 迅雷日内交易严重失误!不应该被情绪左右,短线操作最好在下单之前有相应的计划,包括止损和止盈点,否则的人性的贪婪和恐惧心理影响下,很难果断作出决定,从15%止损,一直到拖到30%止损
  9. 日内交易成交数过多导致杠杆太大,比如阿里日内交易只想下单20,却成交了40,如何处理?趋势不对,5%以内建议迅速果断立马减仓至20,不要有侥幸心理。
  10. 类似于迅雷,人人网这种没有基本面支撑的暴涨暴跌型股票,很难拿得住;如果暴涨,赌对了方向,尽量设好止损点退场,不要被贪婪驱使死守住,因为它既然会暴涨,也就能暴跌给你看。
  11. 及时止盈和做好计划,收割利润;近期10%以上的标的都考虑卖出,等等下一轮回调买入,目标3500
  12. 不论股价如何变化,行情只有两种,一是趋势行情,一是横盘整理行情。趋势行情和横盘整理行情通常是连在一起的,一波趋势行情后跟着一段横盘整理行情,一段横盘整理行情被突破后又跟着一波趋势行情。在上涨趋势行情中,每次回调都可以加仓,但一般这种行情回调很少且幅度有限,抓住就一定不能放过,技术指标上可以参考均线,股价回踩5日或10日均线时加仓。如果在牛市行情中,不建议在区间震荡时减仓,应尽量避免过多买入卖出的操作。如果是在熊市行情中,则每次反弹都是减仓的好时机,熊市中不用等,越早平仓越好。如何选择加仓和减仓时机
  13. 大盘回调风险以及黑天鹅事件的规避,例如中美贸易战等。整体回调可能持续上周;本次采用了去杠杆形式避险,导致利润回吐50%,如果及时补仓,利润则翻倍
  14. 回顾之前持有过的亏损标的,发现都是高买,然后顶不住回调风险才割肉;教训就是一定要提前了解,对买入标的要有信心,如果回调,应该以月为单位考虑割肉,设置一个止损比例,才能理性投资,避免割肉

近期关注和交易计划

  1. 从目前来看可以买入的低点股有特斯拉(300),百度(240),AMD(10)
  2. 网易300即可买入;微博125可买入;如果大盘有大幅回调,可以考虑等到回转再买入;华住考虑120左右;好未来等回调到35左右;阿里巴巴继续观望,包括百度在内,预估会分别到210和275的价格,如果分别回调到195和260,考虑割肉.

学习研究

  1. 二级市场里只有两种赚钱方式:一种是赚企业成长带来的收益,股价涨幅基本与企业利润涨幅保持正比;二种是通过博弈从交易对手身上赚来的钱,作为一名散户,想通过博傻来赚其他人的钱往往不太现实,但是可以赚市场犯错带来的收益,包括市场情绪以及理解偏差。
  2. 猿猴心态让人看到K线图里的新高就理所当然地认为会下跌或者风险高,然而盛极而衰并不科学,股价创新高从来不是停止上涨的理由,创新低也不是停止下跌的理由。
  3. 铆钉偏见让你以过去的数字作为参照,会让你在错过一只股票50块的买入时间,当他涨到100块时,理所当然地认为太贵,然后你就错过了将来涨到150的机会,一定要向未来价格看。一个股票便宜与否,看估值比看近期涨跌更可靠。
  4. 不要低估复利的威力,如果你在7年前买入腾讯,意味着每年回报率为38%,等于7年翻了10倍

基础知识

  1. 限价单:最大程度获取利润,下跌到N就买入,上涨到N就卖出,低买高卖
  2. 止损单:最大程度避免损失,下跌到N就卖出,上涨到N就买入,低卖高买
  3. 止损限价单:到达止损价格就触发,接着要以限价价格交易,可能出现交易不成功
  4. 跟踪止损单:

期权交易的4种基本类型

Linux expect自动交互脚本入门

发表于 2017-02-19 | 更新于 2018-09-11 | 字数统计1k字 | 阅读时长4分钟

Expect is a program that “talks” to other interactive programs according to a script. Following the script, Expect knows what can be expected from a program and what the correct response should be. An interpreted language provides branching and high-level control structures to direct the dialogue. In addition, the user can take control and interact directly when desired, afterward returning control to the script.

expect基础语法

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 命令行参数 
# $argv,参数数组,使用[lindex $argv n]获取,$argv 0初始化为脚本名字
# $argc,参数个数
set username [lindex $argv 0] # 获取第0个参数
set passwd [lindex $argv 1] # 获取第1个参数
set TOKEN $expect_out(buffer): 获取上一个键盘输入保存到TOKEN变量中

set timeout 30 # 设置超时30s

# spawn是expect内部命令,开启ssh连接
spawn ssh -l username 192.168.1.1

# 判断上次输出结果里是否包含以“password:”开头的字符串,如果有则立即返回,否则就等待一段时间(timeout)后返回
expect "password:*"

# 发送内容ispass(密码),与手工输入密码ispass的动作等效
send "ispass\r"

# 发送内容给用户
send_user "$argv0 [lrange $argv 0 2]\n"
send_user "It's OK\r"
# 执行完成后保持交互状态,控制权交给控制台(可以继续手工输入等操作)。否则会完成后会退出。
interact
spwan命令

spawn命令用于启动一个进程, 后边接上你要执行的命令,例如spawn ssh relay01.baidu.com

interact命令

interact命令用于脚本执行完简单的命令后人手动介入,只在所属的spawn进程空间有效

expect的三种使用格式
  • 并行:只要其中的任何一个pattern能够匹配,那么这个expect就算是完成了一次匹配

    expect {
        pattern1 {
            command2 }
        pattern2 {
            command2 }
    }
    
    # 示例
    expect {
       "hi"    { send "You said hi\r" }
       "hello" { send "Hello yourself\r" }
       "bye"   { send "That was unexpected\r" }
    }
    
  • 串行:所有的匹配被依次满足了之后才算整个语句完成

    expect pattern command
    expect pattern2 command2
    
    # 串行示例
    expect "username:"
    send "$userid\r"
    expect "password:" { send "$mypassword\r" }
    
    # 利用exp_continue并行实现串行,continue执行下一个pattern
    expect {   
        "*yes/no" { send "yes\r"; exp_continue }
         "*password:" { send "$mypassword\r" }   
    }
    
shell脚本接收多个参数
  1. expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个….参数
  2. $argc为命令行参数的个数,$argv0为脚本名字本身,$argv为命令行参数。[lrange $argv 0 0]表示第1个参数,[lrange $argv 0 4]为第一个到第五个参数。
  3. 执行./test.sh 1 2 3,脚本内容如下:
1
2
3
4
5
6
7
8
#!/usr/bin/expect -d
set username [lindex $argv 0]
set password [lindex $argv 1]
set server [lindex $argv 2]
send_user "UserName is $username\n"
send_user "PassWord is $password\n"
send_user "Server is $server\n"
send_user "Total arg num is $argc\n"

bash脚本直接调用expect进行交互

  • Here document实现, expect脚本可以使用bash中定义的变量
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
host="USER@HOST"
password="PASSWORD"
cmd="command_list"

expect <<EOF
spawn ssh $host "$cmd"
expect {
"*(yes/no)?" { send "yes\r";exp_continue }
"*assword:" { send "$password\r" }
}
expect eof
EOF
  • 直接使用set来定义变量并在expect脚本中使用
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
expect -c '
set $PASSWORD="123qwe"
spawn ssh USER@HOST "commands"
expect {
"*(yes/no)?" { send "yes\r";exp_continue }
"*assword:" { send "$PASSWORD\r" }
}
expect eof
'

如果希望保持登录,去掉上面代码的ssh后的命令列表并且将expect eof改成interact即可

更多示例

  1. expect交互脚本示例
  2. Linux Expect 简介和使用实例

开发机登陆脚本示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/expect

# 登录relay
spawn ssh relay01.baidu.com

# 定义变量
set PIN "123321"
set HOST "hz01-bos-dev-r15-01-005.hz01"
set PASSWORD ""

# 执行脚本时带上参数,以空格分开
# set TOKEN [lindex $argv 0]

# 打开调试模式
#exp_internal 1
# relay PIN码 + Token(Token需手动输入)
expect {
-re "password:*" {
send_user "PIN:****** + Token:"
expect_user {
-timeout -1
-re "(.*)\n"
}
set TOKEN $expect_out(buffer)
send "$PIN$TOKEN\r"
exp_continue
}
# 自动登录开发机
-re "-bash-baidu-ssl*" {
if { "$HOST" != "" } {
send "ssh --silent $HOST\r"
# [可选]自动开发机输入密码
if { "$PASSWORD" != "" } {
expect -re "password:" { send "$PASSWORD\r" }
}
}
}
}
# 关闭调试模式
#exp_internal 0
interact
exit
1…678…18
CharlesXiao

CharlesXiao

在码农炼成之路不断挣扎……stay hungry……keep learning……

87 日志
18 分类
78 标签
github weibo Daijiale的个人站点
推荐阅读
  • RocksDB
  • Google FE
© 2015.05.16 – 2019 CharlesXiao
本站总访问量:
|
总访客数:
|
博客全站共169.6k字