2020-01-28
投资
随着国内利率进一步降低,房价近几年也比较疲软,越来越多人会将资产配置到股市。对于没有专业股市投资的上班族来说,选择投资 ETF 基金是一个不错的选择。
什么事 ETF 基金
交易所交易基金(Exchange Traded Funds)是一种在证券交易所交易,提供投资人参与指数表现的指数基金。ETF 将指数证券化,投资人不以传统方式直接进行一篮子证券之投资,而是透过持有表彰指数标的证券权益的受益凭证来间接投资。
A 股有哪些 ETF 可以投资
可以直接在交易所市场(场内)购买的股票型 ETF 数量众多。下面是我收集的主要品种:
股票代码 |
场内名称 |
主要投资标的 |
510050 |
50 ETF |
上海证券市场规模大、流动性好的最具代表性的 50 只股票组成 |
510300 |
300 ETF |
上海和深圳证券市场中选取 300 支市值大,流通性好的 A 股 |
510500 |
500 ETF |
剔除市值排名前 300 名,总市值排名靠前 500 支的 A 股股票 |
512880 |
证券 ETF |
A 股中主要的证券公司股票 |
159902 |
中小板 |
深圳中小企业板中市值大、最具代表性的 100 只股票组成 |
159915 |
创业板 |
深圳创业板块中市值大、最具代表性的 100 只股票组成 |
2020-01-20
技术
在日常开发工作中,离不开各种联调工作,包括 Web 前后端联调、后端服务之间的联调。API 是应用程序之间沟通的桥梁,联调则是 API 提供者和 API 使用者一起完成这座桥梁安装和调试的过程。联调工作不是一个人能独立搞定的,需要和其他开发人员、其他团队,甚至其他公司一起来合作完成。
正因为 API 联调是需要彼此合作的才能完成的工作,往往会花费大量的时间。使用方经常会抱怨服务提供方 API 不够合理,bug 较多,不够稳定;服务提供方又会觉得是使用方的姿势不对所导致。因此联调过程往往会反反复复,耗费大量的沟通成本。
如何提高 API 联调效率,让调用双方都能更加顺畅的完成联调呢?下面分别从 API 提供者和 API 使用者两方面来说一下我的几点经验。
对于 API 提供者
联调不顺畅、效率低,绝大部分情况都是因为 API 的质量不高导致的反复修改。下面我逐一列出 API 设计者需要注意的几个地方,并给出相应的解决方案。
- 设计合理的 API,并形成文档
- 重视对错误的处理
- 对 API 充分的自测
- 提供 API 调用示例
2019-06-10
技术
为了提高服务器端的 EOS 签名效率,对不同语言的椭圆曲线签名速度做了测试,分别测试 100 次和 10 次,结果如下:
公众号 |
JavaScript |
Dart |
GoLang |
100 次 (print) |
19255 ms |
8801 ms |
671 ms |
100 次 |
13761 ms |
6333 ms |
148 ms |
10 次 (print) |
1971 ms |
883 ms |
70 ms |
10 次 |
1415 ms |
880 ms |
29 ms |
print 表示在 console 中打印出了签名结果。从上表可以看出 Go 语言速度优势明显,签名速度: JavaScript < Dart < GoLang。Dart 椭圆曲线签名速度约是 JavaScript 的 2 倍左右,GoLang 签名速度约是 JavaScript 的近 100 倍。
2019-06-07
技术
在 MacBook Pro 上安装了 minikube,对照例子熟悉了 k8s(kubernetes) 的基本操作,包括创建集群、部署应用、负载均衡、应用扩容、应用升级(回滚)。
安装 minikube 和 kubectl
- 安装 minikube: 从 github 下载二进制文件后,复制到
/usr/local/bin/
- 安装 virtualBox: 集群会安装在虚拟机里
- 安装 kubectl: 从 github 下载二进制文件后,复制到
/usr/local/bin
hello minikube
2017-03-17
管理
自从去年 10 月发过一篇公众号文章,就再也没有发过了。有朋友询问怎么不写了,主要是因为写文章对我来说太费力(要是能像写代码那么轻松就好了),所以一直没有抽出时间写。今天整理了篇培训笔记,主要是作为自己的备忘录。如果也能给其他人带来一点点帮助,那就更好了。
上周六参加了公司 HR 安排的培训课程《任务分配与员工辅导》,课程是采用老师讲和自由讨论相结合的方式。主要讲的是工作中的沟通问题,听的过程中有不少收获,都是针对平时工作中的问题,但课程完成后回忆起来,却只能想起来几个少数的点。为了能够更系统的记住这些,并运用到平时的工作当中。回来对照教材列了个简单的大纲,算是个总结,便于记忆,也供自己在今后的工作中参考。(据说请老师讲一天课要几万块成本,总得值回票价吧)
Part 1 任务分配
确定任务合适人选
做任务分配,在确定合适人选的时候,主要需要考虑任务接受者下面四个方面的因素:
- 工作能力(能不能胜任工作?)
- 工作余力(有没有时间做?)
- 工作动力(有没有意愿做?)
- 发展需要(对个人发展有没有帮助?)
2017-02-05
技术
Javascript
公司的 Javascript 项目最开始有一个代码规范,也用 jsHint 写了检查脚本。但是随着团队人员的逐渐增加和项目的时间紧迫,有一段时间没有特别强调要去做代码规范的检查。导致后来每次运行 jsHint 脚本都是错误无数,于是更没有人做相关的检查了。由于缺乏代码规范,不同的人有不同的偏好,代码可读性逐渐降低。也出现过几次由于不小心带来的线上 bug,这些完全是可以通过代码检查避免的。于是我决定是时候对代码规范和检查做强制性的要求了。
之前的 JS 代码规范比较简单,也没有涉及到 jsx 部分的规范。不同的人对于 JS 的写法有不同的习惯和看法,其实本没有对错之分。但作为一个开发团队,应该采用相同的规范,不同的人写的代码应该看起来是出自同一个人之手。这样能显著提高代码的可读性,有利于团队合作,避免出现不必要的错误。而且规范一旦制定,一定要有可行的办法强制执行,不然规则再完美再有效,也没有实际的意义。关于代码规范,非常认同下面的几句话:
“对风格的挑刺毫无意义可言。它们必须是指导原则,且你必须遵循。”
–Rebecca Murphey
“成为一个优秀的成功项目管理者的一个条件是,明白按自己的偏好风格写代码是非常不好的做法。如果成千上万的人都在使用你的代码,那么请尽可能通俗易懂地写出你的代码,而非在规范之下自作聪明地使用自己偏好的风格。”
–Idan Gazit
2017-01-29
技术
iOS
趁过年在家有点时间,从除夕到今天终于把 Code School 里的 Try Objective-C 课程学习了一遍。虽然之前看过 OC 语法,但一直觉得比较反人类,这次再学习一遍,收获还是不小.前三个级别对我来说比较容易,后面两个级别还是有些难度的。在这里把其中的主要内容做一下笔记,以备下次可以快速复习。
Level 1: NSLog, NSString, NSNumber, NSArray, NSDictionary
NSString *name = @"yanxi";
NSNumber *age = @33;
NSLog(name);
NSLog(@"%@ is %@ years old", firstName, age);
NSArray *apps = @[@"AngryFowl", @"Lettertouch", @"Tweetrobot"];
NSLog(@"%@", apps[1]);
apps[3] = @"Instacanvas"; // 出错了,NSArray is an immutable object.
// 可以重新赋值
apps = @[@"AngryFowl", @"Lettertouch", @"Tweetrobot", @"Instacanvas"];
NSDictionary *appRatings = @{@"AngryFowl": @3, @"Lettertouch": @5};
NSLog(@"%@", appRatings[@"AngryFowl"]);
2016-12-03
技术
Javascript
Javascript 最早用于浏览器,处理的逻辑比较简单,没有语言层面的模块化处理方法。 随着 JS 应用的逐渐复杂,人们提出多重模块化规范,其中最著名的当属 CommonJS 和 AMD 了。随着 nodejs 的推出和流行,CommonJS 已经被大家所熟知。最早实践前端模块化的框架 requirejs 使用的则是 AMD 规范。相对 AMD 规范来说,commonjs 在定义和使用上都要简单不少。所以后来推出的 browserify 就是用 commonjs 规范来组织前端 JS 代码。而这两年流行的 webpack 则兼容了以上两个规范。先来回顾一下这两个规范:
AMD (Asynchromous Module Definition)
// 定义模块
define('sum', function() {
return function(a, b) {a + b}
});
// 使用模块
define(['sum'], function(sum) {});
2016-10-20
技术
Javascript
用 react + redux 有一段时间了。之前都是自己写的 reducer,因为每次修改 state 时需要返回新的引用,所以需要特别注意,用起来总觉得不够方便。这两天学习了一下 Immutable.js , 准备把它引入到项目中和 redux 配合使用。先来设计 action 数据存取方法,最主要的几个方法如下:
// 根据 keyPath 设置 value,可以更新任意深位置的数据
// value 是简单值类型或者 Immutable 类型,也可以是函数 (oldValue) => newValue
dispatch(action.set(...keyPath, value))
// 删除 keyPath 对应的 value
dispatch(action.delete(...keyPath))
// 根据 keyPath 获取 value
state.getIn(keyPath)
2016-10-16
成长
凤凰金融
前晚(周五)作为校友参加凤凰金融在北邮的校招宣讲会,做了一个小分享,主要讲在公司一年半以来的成长,下面是分享的内容。
各位学弟学妹们,大家好。时隔多年回到母校,走进期待已久的教三,感觉很亲切。为什么说期待已久呢,因为从我大一入学的时候开始,这里就是一片空地,那时旧的教三已经拆除了,一直期盼到快毕业新教三才盖起来,所以我很羡慕你们。
先简单介绍一下我自己,我叫阎曦,是我们学校 2000 级电信工程学院的学生,电院应该是现在信通学院的前身。目前我在凤凰金融技术部移动端负责移动 Web 组工作。从毕业到现在转眼 12 年多了,基本都在互联网行业做开发,大概经历了三个阶段。第一个阶段是在亚马逊中国,8年时间经历了个多个团队和项目组。在这里学习到了很多先进的技术和理念,也感受到了他们在中国的不足。第二阶段的3年时间,折腾的事情比较多。开始是自学股票期货知识,做了一段时间期货程序化交易,开始还挣不少,后来因为风险没控制好亏得更多;然后是和朋友尝试做大数据方面的创业,产品上线了两版,由于没有找到投资放弃了;后来又加入了一家微电商创业公司。第三阶段就是今天大家看到的凤凰金融。