各种收益率

.note-content {font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeiti, "Microsoft YaHei", "WenQuanYi Micro Hei", SimSun, Song, sans-serif;} 相信很多人都和我一样,被投资理财产品的各种收益率术语搞的很迷糊,什么收益率、年化利率、七日年化利率、万份投资收益、复合年化收益率、平均年化收益率等等。这些概念如果闹不清楚,你就不能衡量一项投资是否赚钱,或者一个投资产品是否比另一个更赚钱。 收益率 将收益公式带入上边的公式后,收益率变为 年化收益率 按照上述的计算方式,

  • vincent chen
12 min read
docker

Docker 入门简介

Docker是什么 Docker是一种虚拟化技术,类似虚拟机,这使得安装在其中的程序能够只依赖虚拟机的环境,而不受外部操作系统环境的影响。同虚拟机不同的是,Docker的虚拟容器占用空间更小,使得它比虚拟机更容易分发和多实例安装。 Docker容器化技术的整个开发使用方式非常类似java应用开发,这里同java应用开发做一个类比,帮助有过java开发经验的同学快速掌握其中的核心概念 Dockerfile 相当于Java应用开发中的Maven配置文件pom.xml或则gradle的build.gradle文件。java开发中的pom.xml和build.gradle是用来声明java应用依赖的jar包,和应用的构建方式。而Dockerfile是用来声明一个程序依赖的环境和构建运行方式。比如redis的Dockerfile如下: # 第一部分,声明redis程序依赖系统环境,是使用的debian FROM debian:stretch-slim # 第二部分,配置系统权限,添加新的组和用户,专供redis使用 RUN groupadd

  • vincent chen
20 min read

《飞驰人生》观后感

春节从各种人情世故中奔波完后回成都的第一件事,就是去看了韩寒的《飞驰人生》。我读韩寒的小说不多,主要是在博客时代,被深深的吸引,他的文字有趣,在我思想还比较幼稚的彼时,其文章思想也刷新了我很多的三观认知。所以韩寒的电影,我是一直抱有期待的,从《后会无期》到《乘风破浪》,我都有到电影院支持。 《后会无期》做为处女作,在当时烂片横行的中国电影市场,应该说完成的质量是合格的。这是一部公路电影,充满了文艺气息,一群年轻人跨过山河大海,一心只向远方,孤独而又迷茫,有些人会莫名的消失,就像胡生半路被弄丢了,旅程总是孤独的,就像独自飞向太阳系外的旅行者一号。这种孤独让我感动。 《乘风破浪》中徐太浪穿越回父亲年轻的时候,通过跟父亲一起单纯善良而又中二一系列帮派生活,

  • vincent chen
3 min read

打造和规划自己的技术人生

如何准备面试 最近参与了述职。其中的技术部分,让我感觉不爽。评委问了很多细枝末节的点,比如某个参数、某个方法、甚至某个命令是什么样子的,这许多的细节,我没有答上来,因为对我来说,一个技术点学习一周以后,一个月以后,我只能记得其中的大概原理,那些具体到参数的细节,真的记不住。 这是评委的问题吗?我想部分原因是的。技术的庞杂,使得每一个人,都无法掌握所有的细节。评委不应该用自己记住的细节,去考察应试者的细节。这种面试方式有点向应试教育,考察的是一个人的知识点记忆能力。 我觉得好的面试,应该是探讨式的,去了解应试者所做的项目细节,从中挖掘分析其解决问题能力,思考能力,工作态度等。这些素质,才是一个优秀工程师必须具备的。

  • vincent chen
5 min read

spark简明笔记

一、Spark结构使用java、scala、python任意一种语言编写的Spark应用叫DriverDriver程序一般负责初始SparkContext,然后通过SparkContext与整个集群通信,进行分布式计算,比如通过SparkContext创建RDD。鉴于Driver行驶的地位,其角色上有可叫central coordinatorSparkContext与集群通信的方式  第一步先通过Cluster Manager申请计算资源Executor 第二步,SparkContext与Executor直接通信,将分布式计算程序发送到每个Executor 第三步,SparkContext发送当前要执行的计算Task给Executor执行  Worker Node是Spark集群中的某个具体节点,也叫slaveExecutor是在Worker Node上开的一个应用执行器,他会在worknode上起一个JVM, 他可以执行多个Task, Executor是应用隔离的。也即一个Executor只能属于某一个Spark应用,这样Spark集群才能同时服务多个Spark应用,互不干扰。Executor有点像Java中的工作线程一样,可以执行SparkContext发来的多个任务。不同的是Executor是一个独立的JVM进程Cluster Manager是有多种类型,可以是Spark自带的Standalone 集群,

  • vincent chen
16 min read

语义网络

Ontology 中文将Ontology翻译成本体,我觉得这个翻译应用于哲学还行,应用于信息科学,简直是误导众生。翻译成知识图谱或语义网络更为贴切。当然知识图谱有自己的专有英文Knowledge Graph。本文就叫语义网络吧。 我们目前的万维网,是非结构化的,计算机无法自动的将万维网中的文本内容所隐含的信息组织起来,并基于这些信息做出一些推理 语义网络包含了实体、命名、分类、属性、关系、继承等概念。通过这些去描述整个信息网络。同时通过一些标准,使得所有的信息能够在这一套描述体系下,互联互通,建立一张网络,从而能够理解语义,并能够根据已知事实,做出一些推理。这一特点,可以应用于许多知识问答、数据分析等业务。 为了达成这个目的,需要定义一些标准化的数据结构,使得遵循这个数据结构的数据能够互联互通,

  • vincent chen
3 min read

OLAP基础入门

一、Data WareHousing和OLAP的区别 DW是一套数据处理流程和数据结构,其目的是将一个公司的各种数据整理存储。OLTP(online transaction processing)数据模型用于记录公司的业务流水,除了查询数据,还涉及到数据的新增和更新,并且要保证数据的事务性,即Transaction。而DW更多是应对大数据的查询和报表计算,不会涉及事务和更新等场景。 OLAP是基于DW中的海量数据做分析,挖掘出数据中隐藏的信息从而指导商业决策 二、什么是Star schema 2.1 定义 将原始OLTP中的业务表,按照一定的业务逻辑组织成事实表(Fact Table)和维度表(Dimension Table)两种类型的表。且一张事实表,

  • vincent chen
6 min read

拼多多为什么能成为现象级电商?

特别说明:本篇文章首发于"点融黑帮"公众号 前言 本篇文章,是自己对于拼多多现象好奇而触发的了解和分析。最后以自己的理解给出简短的论述,不打算也没能力给出各个论点的数据支撑,没有严谨性可言,博君一笑。 拼多多的话题性 拼多多上市了,这家公司成立不足三年,就完成了纳斯达克上市,市值达300亿美金。对比这一成就,京东的大强子用了近十年。这一惊人的速度极具话题性,但它的话题性还不只这一点,拼多多售卖的商品,许多都是山寨货。比如山寨的小米,山寨的三星,山寨的康佳。朋友圈也段子齐飞 以下品牌恭祝拼多多成功美国上市:小米新品、松下新品、老于妈、粤利粤、

  • vincent chen
5 min read

何为金融系统性风险?

互联网金融行业存在已经有几年了,不时会有监管部门出来发声,说什么提防系统性风险,最近P2P行业更是风声鹤唳,时有爆雷的声音,监管尺度将愈加严苛。 我一直不明白,为什么政府会如此担心这个行业的风险,以及哪来的系统风险。现金贷公司,或者P2P公司有出借的业务,贷款人如果不还,顶多是现金贷公司垮掉,或者P2P公司的投资方损失,怎么就会出现系统性风险了呢? 后来知道,所有金融玩法其利益的来源,都在于如何的提高资金的利用率和资金流转速度,同样的一笔钱,流经的环节越多,其资金利用率便越高,相对的,如果一环出了问题,当然也会牵连甚广。聪明的金融公司们,会想办法把10块钱的本金,加杠杆做成数倍,甚至数十倍的盘子。 对于现金贷公司来说 贷款用户像现金贷公司求贷10元的小额贷款,虽然利率较高,但短平快,解了用户的燃眉之急,

  • vincent chen
4 min read

IO模型介绍

一、几种IO模型介绍 1.1 同步/阻塞 同步和阻塞大体上描述的是同一种行为,比如方法A调用方法B。方法A一定要等到方法B执行完毕后,再返回。在方法B执行过程中,方法A依然占用时间片,阻塞等待方法B执行完成。这种IO模型又叫BIO 即Blocking IO 1.2 非阻塞 方法A调用方法B后,立即返回,不阻塞。但方法B可能需要执行很长时间,如果想要拿到方法B执行后的结果,需要循环d定时的去查询方法B的执行情况,这个查询过程也是非阻塞的,调用后立即返回。当查询到方法B已经执行完成,则方法A再调用获取数据的方法,去拉方法B的执行结果。 这种IO模型又叫NIO 即 Non

  • vincent chen
5 min read

Java NIO 笔记

一、NIO和IO的区别 1.1 单向和双向 传统IO在读写数据到一个具体位置(可能是文件、网络主机)时,读写操作需要分别对应一个流。而NIO是通过channel的方式连接具体位置,且channel是双向,即可用来读,也可用来写 1.2 直接和间接 传统的流,读取时,直接从流中即可获取内容,写时,直接向流写内容即可。而NIO中,channel读写需要通过Buffer间接进行。 一段典型的IO代码如下: import java.io.*; public class CopyFile { public static

  • vincent chen
7 min read

秒杀系统设计

一、前言 这篇文章的设计思想来源于沈剑。很受启发。为了加强记忆,做此笔记。 二、秒杀业务的典型场景 100w个人抢1w台小米 三、秒杀业务的特点 抢之前,需要读库存。如果还有库存,则写数据库进行锁库操作。考虑到人多货少。所以实际有100w人读了库存,但成功锁库的只有1w人。典型的读多,写少的场景。读是主要造成系统压力的操作。且这些读有两个特点: 库存可以不精确,用户关心的是有货没货。并不一定关心到底还有多少货 允许脏读。实际库存只有5台。但是展示给用户有10台都可以。因为用户最终下单锁库时,会去操作真正的库存。这个时候库存不足,可以直接给用户提示下单失败即可。因为即便下单之前读的库存精确,

  • vincent chen
4 min read

HBase学习之结构设计

一、HBase在应用层面存取的数据结构 应用层面上,不考虑实现细节。我们对Hbase的操作像其他数据库一样。是以表为单位来存放数据的。但HBase中的表跟传统的关系数据库表,在结构上和存储上有一定差别。 上图中存储了一行cnn的网站数据,这行数据又具体存储了网站的网页内容(contents),和网站的链接(anchor)数据 HBase的表有以下几个重要术语 Row Key :标示一行的主键,按字典顺序排列。查找数据都是通过Row Key来进行。比如上图中展示了Row key为“com.cnn.www”的一行数据(不要看上图表格有多行。那是由于Hbase每列数据有一个版本概念,在逻辑上,只要他们的Row key相同,则属同一行)

  • vincent chen
6 min read

RabbitMQ使用入门

一、 四个组件 P: producer,消息生产者 X: exchange,所有消息先送达到这里,然后他再按Queue的定义规则,将消息分类发送给对应的queue queue: 图中红色部分则为queue.他们申明自己所要消息的规则,然后从exchange获取对应的消息。另一端则将该消息推送给对应的comsumer 。queue可以设置durable,这样可以保证RabbitMQ挂后,不丢数据,但是有一定时间窗口,没落盘的数据,可能还是会丢。 C: comsumer,也叫Receiver 从指定的queue中获取消息,并执行一系列动作。Receiver可以开通ACK机制,这样Receiver挂后,依然可以让其它Receiver消费消息 二、两种大的使用方式 2.1

  • vincent chen
4 min read

LSM Tree

一、大幅度制约存储介质吞吐量的原因 首先抛出结论。无论任何存储介质(不管是机械硬盘还是SSD,抑或是内存)的顺序访问速度都远远高出随机访问的速度。 二、传统数据库的实现机制 传统数据库,比如Mysql使用的b+树索引,对读友好。但容易造成随机写。比如新插入一个值到数据库,首先我们要读取b+树,判断新插入的值放在树的什么位置,其次在特定的位置写入新值,并做一系列调整,分裂,使之满足b+树的特性。这不可避免的造成了磁盘的随机访问,大数据量的插入速度很慢。当然这也符合历史发展趋势,早起的IT行业,数据量和数据增长速度有限,只要拥有良好的查询性能,即可满足需求。 但随着硬件性能的提升,业务形态的变化,现今的互联网系统,

  • vincent chen
7 min read

分布式系统学习笔记

一、分布式的两大场景 数据存储的分布式 服务的分布式 二、数据存储的分布式 比如海量数据,单机存储不下,需要多机,以集群的方式存储,即为数据的分布式存储,数据存储的分布式一般涉及如下几个方面 数据的分片策略 全局主键的实现机制 跨结点数据的聚合 分布式事务 数据容灾机制 2.1数据分片策略 2.1.1 基于数据范围来分 比如库1,存放id 1到1000w的数据,库2存放id 1000w到2000w的数据 优点: 单库数据规模提前预估。超规模后,加机器,不需要迁移数据。

  • vincent chen
10 min read

百分比分流算法设计

一,需求 在A/B测试系统中,常常将进入系统中的流量按百分比分组。对不同的分组做不同的业务逻辑,一段时间后观测两组达成的业务效果。比如实验组为20%的流量,对比组为80%的流量,由于最终进入系统总的流量数和具体进入系统有哪些流量都是为止了。需要一个分流算法来保证. 进入流量的分配,在宏观上按实验的百分比配置分配,比如20%的流量进入实验组,80%的流量进入对比组 同一份流量多次进入系统时,保证分组的一致性。即不要出现一会分到实验组,一会分到对比组 二,算法实现 算法思想 通过hash算法,将流量平均分配到100个桶 按百分比顺序取分分配这一个百个桶 具体实现 算法总共分为三个流程 使用MurmurHash将流量id,计算出一个hash值

  • vincent chen
2 min read

有意思的增量计算算法

问题场景 假设有一张表(user_info),其数据结构如下 last_login_time记录的是每个用户最后一次登录时间。现在有这样一组标签"1天内","1~3天","3天以上"来描述用户登录日期和当前日期之间的差值,且为了保证查询的效率,需要将每个用户的登录标签提前计算出来并存储,方便前端高效查询,存储的表(user_tag)结构为 请问该如何实现。 普通的方式 每天将每个用户的最后登录日期和今天进行比较,计算出其登录标签,sql伪代码如下: select

  • vincent chen
3 min read

我看锤子手机

最新的锤子坚果PRO发布了。也像往常一样看了发布会,但同往常不一样的是,我没能坚持把发布会看完。我开始对锤子手机和老罗有了一些厌倦。要知道,我曾经很是欣赏老罗,甚至跟很多人安利过老罗。可是为什么,在锤子可能发布了有史以来综合实力最好的产品之际,我开始感到厌倦? 五年前,老罗开始踏足手机领域,在这之初,其言行高调,对其它手机品牌的工业设计和人机交互进行了诸多批判,结合他之前已经给自己塑造的形象。似乎传递出,他能制造改变世界,或者起码给这个世界带来一点惊喜的产品。我对这点满怀期待,甚至深信不疑。 最新的坚果PRO,从外观和综合实力上来看,这基本就是锤子五年来最优秀的手机。但老罗偏执的采用方正设计,觉得其它手机在设计上都趋同平庸,美其名曰为“圆滑当道时代的锐利异类”。可能方正的设计是要看一点,可是会很割手,这一点饱受诟病,甚至有网友真的用其削苹果、

  • vincent chen
3 min read

读《万历十五年》

万历十五年,也即1587年。这一年在同整个万里朝的其它年份比起来算是稀松平常的一年。但是黄仁宇先生通过对这一年的前后事件串联,试图说明明帝国的衰败已无可避免。 背景 首先我们的国家幅员辽阔,在统治技术简陋无力时,历朝历代为了维持帝国的统治,便求助于基于儒学的传统道德来约束整个社会,而道德本身并不足以弥补技术上的拙劣。而明朝洪武开国定下财政,资源分配政策,更是让明帝国在中后期对整个国家统筹管理上乏力。洪武制定的粮饷不必全部上缴中央,就近送往各地政府单位开销,虽然其目的是出于减少资源集中到再分派过程的运输损耗,节省运力,但这种收支没有两条线(我party就做的很好)分开的做法。在国家一旦遭遇战争或瘟疫时,很难集中力量办大事(好熟悉的味道) 到了万历朝时,文官集团趋于成熟。作为儒家思想的卫道者,这样的成熟集团,对国家是种灾难。他们口口声声呼号着家国天下,但实际上阳奉阴违。儒家思想所倡导的中庸不过是努力掩盖道德所代表的阳和人性所代表的阴之间不可调和的矛盾。同时代的欧洲正在经历着大航海时代,

  • vincent chen
4 min read

为什么单元测试很重要

单元测试对程序员不陌生,可是对很多程序员来说,并不太喜欢写单元测试,感觉不是业务代码,又要做数据初始化,又要做数据清理,显得较为麻烦。毋庸置疑单元测试是重要的,尤其是可重复执行的单元测试,甚至早些年还有一些极端的公司践行着测试驱动开发的软件开发模式,但这份重要不见得每个程序员都认识,我就遇到过同事反问我,写单元测试有什么用?基于我自己的程序经验,我觉得有有以下几点进行阐述 白盒测试 大多数测试人员只只能做黑盒测试,但单元测试能更好的做白盒测试,因为代码就是你写的,你理应更清楚其逻辑和风险,从而在单元测试中进行测试。 节省开发时间 是的,你满以为不写单元测试,就是节约时间。但bug是守恒的,你不在单元测试的时候揪出来,那么他会被QA揪出来,甚至揪不出来,直至在某个深夜在线上他爆发出来,这个时候你焦头烂额,你要基于日志还原事发现场,你要一遍一遍读着好几周甚至几个月前的代码,

  • vincent chen
2 min read
soa

微服务的注册与发现

一、服务注册中心 Service Register 由于服务的的众多,且服务本身变更可能频繁。所以典型的分布式服务,需要一个服务注册中心来作为服务调用方和服务提供方之间的桥梁。 注册中心像一个数据库,存储了当前的可用服务。注册中心需提供API,供服务端注册、更新服务到注册中心,供客户端查询可用服务。 可用框架: etcd consul Apache Zookeeper 二、服务的注册 服务自己注册到注册中心 服务端自己发起注册,将自己的信息注册到注册中心。 优点 实现简单 缺点 不同语言的服务端,都需要实现服务注册的功能 框架 Netflix OSS Eureka

  • vincent chen
3 min read

跨域请求之JSONP

前言 由于安全原因,浏览器会限制脚本发起跨站请求,是为浏览器的同源策略。而有时我们又需要跨站请求,比如一个大型网站多个域名之间的信息协同共享。在不违反同源策略的前提下,大概有CORS,JSONP,Proxy Server等技术达到跨站请求的目的。前面我介绍了CORS,它是W3C推荐跨站请求方式,也更安全。这篇文章主要介绍JSONP。 什么是JSONP JSONP全称(JSON with Padding),是一种基于html中<script>标签实现跨域请求的技术。 为了方便全文举例说明,某页面所在的网站假设为www.foo.com,请求跨站至www.bar.com获取数据。 浏览器同源策略虽然限制了跨站AJAX请求,

  • vincent chen
4 min read
hibernate

Hibernate和Mybatis应该如何选择

介绍 Hibernate和Mybatis都是J2EE领域优秀的ORM框架。不同于纯JDBC方式在数据操作时的繁琐,他们很好的隐藏了前者的一些操作细节,提供给调用方更为友好简洁的API。 Hibernate Hibernate更自动化,抽象层次更高,更面向对象。开发者在Hibernate中配置好Java Bean同数据库表的映射关系以及Java Bean之间的关联关系后,就可以专注于业务代码编写,仅通过Hibernate的API进行数据库操作,最终提交给数据库执行的SQL由Hibernate自动生成,在正确使用的情况下,其生成的SQL都是高效妥帖的。值得一提的是,这些配置都是一次性的,不需要反复修改。 MyBatis 比起Hibernate来说,Mybatis的工作方式显得不那么自动,所以也有人称其为半自动化框架。使用Mybatis,开发者不光要关注业务代码怎么写,还要关注其对应的SQL该如何写,并将这些SQL配置在Mybatis中,而业务代码的变更还可能导致这些配置被反复修改。 如何选择 理论上来说,Mybatis这种半自动的方式,能够让开发者能很细粒度的控制持久层的运作方式,

  • vincent chen
3 min read