My Booklist and Reservations for 2017

一直没有写关于2016的回顾,有很多方面吧。2016年发生很多事儿的一年,对于技术上的发展也有了新的思考,搞技术不再是死磕某种工具、算法或bug,其实本质上是为了解决问题或者做更好的产品。虽然我做的不是具体的产品而是底层的工具和平台,但这些工具的出口也是依赖”pillar application”, 多想想也是好处的。

2016工作忙,读的书没有很多,但想想扎克伯克比我们还忙一年能挑战23本书确实很牛,其实自己的时间管理是不太到位的,大部分周末都懒散睡觉或者出去逛街了,回归2016年,读的书们:

Eight Queens Problem In Scala

I have dedicated in Programming in Scala for about 4 months. My work is busy, but I can’t give up reading more books.
Scala is a fabulous language, both object oriented and functional.
Eight qeens problem can be expressed in scala easily and concise.

Machine Learning Neural Networks

This week is about the mysterious Neural Networks. The courses in this week just explain the basics about Neural Networks.

What is Neural Networks

It’s a technique to train our data based on how human brains works. A simple Neural Network has:

  • input layer
  • hidden layer
  • output layer

We use Neural NetWorks to make classification and regression.
We use sigmoid function the map data from input layer to hidden layer then the output layer, the function is called activation function.

Programming In Scala Overview Key Note

过去半年里,都在忙着spark相关的项目,主要的编程语言是scala,前些年主要用的是c++,刚转到scala上时,有点不适应函数式编程语言的思想,现在已经半年多过去了,觉得scala真的是awesome,简洁有力的表达,整合了functional programming和object programming,并且设计良好。
去年上了Martin Odersky的编程课Functional Programming In Scala, 觉得挺感兴趣,学习了很多,想在scala语言上看得更多,更深入些,我选择了Scala的权威著作Programming In Scala, 虽然这书有快900页,但我想挑战下,与其每天泡在各种新闻资讯里,还不如看看书泡在书里。每天都看看书,觉得挺好,有些笔记和心得就写在博客里,毕竟工作忙,写博客的时间很少,但我想还是应该多总结和留下写想法。之后阅读Spark的源码,我也会坚持写下些东西,看过了和写下来总还是不一样嘛。

Learning Akka

最近学习了scala,主要是跟着Functional Programming in Scala的课程学习的,scala主要的用处还是在spark上,关于spark也看了一些源码,处于继续探索中。

并发时的消息通信是处理spark这样的分布式系统的关键。spark主要依赖scala社区的akka进行消息通讯。在spark1.2的代码中可以看到很多actor的影子,然而spark1.4中,都是封装为EndPoint,但Actor的思想和模式还在。

基于Actor的消息通讯模型是akka的核心。Akka为处理并发、容错和可扩展性的分布式问题提供了一套基于Actor模型的库。并发的消息通讯中,抽象是关键的方面。Actor模型是1973年由Carl Hewitt在论文”Actor Model of Computation- Scalable Robust Information Systems”中提出, 后被应用于爱立信公司研发的Elang语言,爱立信公司应用Actor模型开发了高并发和可靠的通信系统。

位排序和快排

这已经不是一个新话题了,但是从开始实现一个C++位排序和快排,我还是花费了2个多小时,这里就记下自己的一点点体会啦。

首先,题目来自《编程珠玑》第一章,主要是做位排序,同时和快排做比较:

1. 实现位逻辑运算,实现位向量,并用该位向量实现1,000,000个数字的排序,数字最大是10,000,000

2. 实现1000,000个数字的快排序

3. 实现生成小于n且没有重复的k个整数,这里n=10,000,000, k = 1,000,000

查找两个排序数组的中位数

题目是:求两个排序数组的中位数。
设:两个排序的数组a[m], b[n],求a和b数组的中位数。
算法是:
mid_a是数组a的中位数index,同理mid_b是数组b的中位数索引
1. 如果a[mid_a] == b[mid_b] 中位数为a[mid_a]

2. 如果a[mid_a] < b[mid_b], 递归查找a(mid_a + 1, m - 1), b(0, mid_b),因为a[mid_a]比较小,不可能作为下一次查询的中位数

3. 如果a[mid_a] > b[mid_b], 递归查找a(0, mid_a), b(mid_b + 1, n - 1),因为b[mid_b]比较小,不可能作为下一次查询的中位数

4. 当只少于4个元素需要查找时递归停止,merge这少于4的元素,求出中位数。这里需要考虑奇偶数的情况,只剩下2个或3个元素,不如只考虑4个简单。

注意:这里求上中位数,当n为奇数时,中位数是唯一的,出现位置为n/2;当n为偶数时候,存在两个中位数,数组index从0开始,位置分别为n/2 - 1(上中位数)和n/2(下中位数)。

Copyright
© 2018 Cyanny Liang