阎说 微信扫一扫
关注 阎说

Yanxi.me 热爱互联网和技术,喜欢探索的终身学习者

欢迎关注微信公众号「阎说」,我们一起来聊互联网、技术、区块链…

ETF(交易型指数基金)投资介绍

   

随着国内利率进一步降低,房价近几年也比较疲软,越来越多人会将资产配置到股市。对于没有专业股市投资的上班族来说,选择投资 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 只股票组成

如何更高效的完成 API 联调

   

在日常开发工作中,离不开各种联调工作,包括 Web 前后端联调、后端服务之间的联调。API 是应用程序之间沟通的桥梁,联调则是 API 提供者和 API 使用者一起完成这座桥梁安装和调试的过程。联调工作不是一个人能独立搞定的,需要和其他开发人员、其他团队,甚至其他公司一起来合作完成。

正因为 API 联调是需要彼此合作的才能完成的工作,往往会花费大量的时间。使用方经常会抱怨服务提供方 API 不够合理,bug 较多,不够稳定;服务提供方又会觉得是使用方的姿势不对所导致。因此联调过程往往会反反复复,耗费大量的沟通成本。

如何提高 API 联调效率,让调用双方都能更加顺畅的完成联调呢?下面分别从 API 提供者和 API 使用者两方面来说一下我的几点经验。

对于 API 提供者

联调不顺畅、效率低,绝大部分情况都是因为 API 的质量不高导致的反复修改。下面我逐一列出 API 设计者需要注意的几个地方,并给出相应的解决方案。

  1. 设计合理的 API,并形成文档
  2. 重视对错误的处理
  3. 对 API 充分的自测
  4. 提供 API 调用示例

EOS 不同语言下 ECC 签名示例和速度对比

   

为了提高服务器端的 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 倍。

minikube + kubectl 基础实践

   

在 MacBook Pro 上安装了 minikube,对照例子熟悉了 k8s(kubernetes) 的基本操作,包括创建集群、部署应用、负载均衡、应用扩容、应用升级(回滚)。

安装 minikube 和 kubectl

  • 安装 minikube: 从 github 下载二进制文件后,复制到 /usr/local/bin/
  • 安装 virtualBox: 集群会安装在虚拟机里
  • 安装 kubectl: 从 github 下载二进制文件后,复制到 /usr/local/bin

hello minikube

  • 启动 minikube

    minikube start

  • 查看 dashboard UI

    minikube dashboard

  • 创建 deployment

    kubectl create deployment hello-node --image=yanxi/demo

如何更好的分配任务、辅导员工

   

自从去年 10 月发过一篇公众号文章,就再也没有发过了。有朋友询问怎么不写了,主要是因为写文章对我来说太费力(要是能像写代码那么轻松就好了),所以一直没有抽出时间写。今天整理了篇培训笔记,主要是作为自己的备忘录。如果也能给其他人带来一点点帮助,那就更好了。

上周六参加了公司 HR 安排的培训课程《任务分配与员工辅导》,课程是采用老师讲和自由讨论相结合的方式。主要讲的是工作中的沟通问题,听的过程中有不少收获,都是针对平时工作中的问题,但课程完成后回忆起来,却只能想起来几个少数的点。为了能够更系统的记住这些,并运用到平时的工作当中。回来对照教材列了个简单的大纲,算是个总结,便于记忆,也供自己在今后的工作中参考。(据说请老师讲一天课要几万块成本,总得值回票价吧)

Part 1 任务分配

确定任务合适人选

做任务分配,在确定合适人选的时候,主要需要考虑任务接受者下面四个方面的因素:

  1. 工作能力(能不能胜任工作?)
  2. 工作余力(有没有时间做?)
  3. 工作动力(有没有意愿做?)
  4. 发展需要(对个人发展有没有帮助?)

standard JS 代码规范和提交代码时检查

   

公司的 Javascript 项目最开始有一个代码规范,也用 jsHint 写了检查脚本。但是随着团队人员的逐渐增加和项目的时间紧迫,有一段时间没有特别强调要去做代码规范的检查。导致后来每次运行 jsHint 脚本都是错误无数,于是更没有人做相关的检查了。由于缺乏代码规范,不同的人有不同的偏好,代码可读性逐渐降低。也出现过几次由于不小心带来的线上 bug,这些完全是可以通过代码检查避免的。于是我决定是时候对代码规范和检查做强制性的要求了。

之前的 JS 代码规范比较简单,也没有涉及到 jsx 部分的规范。不同的人对于 JS 的写法有不同的习惯和看法,其实本没有对错之分。但作为一个开发团队,应该采用相同的规范,不同的人写的代码应该看起来是出自同一个人之手。这样能显著提高代码的可读性,有利于团队合作,避免出现不必要的错误。而且规范一旦制定,一定要有可行的办法强制执行,不然规则再完美再有效,也没有实际的意义。关于代码规范,非常认同下面的几句话:

“对风格的挑刺毫无意义可言。它们必须是指导原则,且你必须遵循。”

–Rebecca Murphey

“成为一个优秀的成功项目管理者的一个条件是,明白按自己的偏好风格写代码是非常不好的做法。如果成千上万的人都在使用你的代码,那么请尽可能通俗易懂地写出你的代码,而非在规范之下自作聪明地使用自己偏好的风格。”

–Idan Gazit

Objective-C 学习笔记

   

趁过年在家有点时间,从除夕到今天终于把 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"]);

ES6 中 import/export 和 require/exports 对比

   

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) {});

Redux + immutable.js 学习实践

   

用 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)

成长在凤金 (北邮校招分享)

   

前晚(周五)作为校友参加凤凰金融在北邮的校招宣讲会,做了一个小分享,主要讲在公司一年半以来的成长,下面是分享的内容。


各位学弟学妹们,大家好。时隔多年回到母校,走进期待已久的教三,感觉很亲切。为什么说期待已久呢,因为从我大一入学的时候开始,这里就是一片空地,那时旧的教三已经拆除了,一直期盼到快毕业新教三才盖起来,所以我很羡慕你们。

先简单介绍一下我自己,我叫阎曦,是我们学校 2000 级电信工程学院的学生,电院应该是现在信通学院的前身。目前我在凤凰金融技术部移动端负责移动 Web 组工作。从毕业到现在转眼 12 年多了,基本都在互联网行业做开发,大概经历了三个阶段。第一个阶段是在亚马逊中国,8年时间经历了个多个团队和项目组。在这里学习到了很多先进的技术和理念,也感受到了他们在中国的不足。第二阶段的3年时间,折腾的事情比较多。开始是自学股票期货知识,做了一段时间期货程序化交易,开始还挣不少,后来因为风险没控制好亏得更多;然后是和朋友尝试做大数据方面的创业,产品上线了两版,由于没有找到投资放弃了;后来又加入了一家微电商创业公司。第三阶段就是今天大家看到的凤凰金融。