2018-01-03 Wed 13:00 huamao center 2 floor
备注:采用流水账的方式写下来了,有些地方可能表述有误的,请指正.
谈话记录
谈话主要以QA的方式展开,如下:
基本面
luke: 你是什么时候来公司的?
sq: 今年4月10日,来名策有8个月了。
luke: 在恒生工作了几年?
sq: 算上实习期 共2年。
luke: 在恒生的工作怎么样?是不是学到了很多东西?
sq: 还可以,主要了解了一些开发流程和规范性的东西,主要感觉开发效率太低,一个消息的改动,前中后台都得修改。
luke: 恒生不是也有中间件吗?
sq: 是的,但是都是封装好的,开发的时候也只能看到对应的api,遇到问题还得找研发中心解决。
luke: 当初在恒生你也是跟张前平做事的?
sq: 恩,当时我们那个产品部,遇到比较难的技术问题都找他解决的,比如sql死锁,程序Crash等。
...找到一个咖啡厅坐下....
luke: 学校里数学学得怎么样?
sq:有点偏科,就数学稍微学得好点。
luke: 如果这行要继续做下去,主要还是靠兴趣,你是从高中开始编程还是大学?
sq: 大学,感觉老师C语言课讲得很好!然后跟老师进了实验室;准备课件、组织比赛。
luke: 你觉得计算机的本质是什么?或者说操作系统的本质?
sq: cpu,内存,寄存器?
luke: 不是,计算机本质就是符号逻辑。解决的是可计算的问题。不是所有的问题都可以用计算机来解决的。比 如停机问题,哥德尔不完备定理。
luke: 计算机能解决的问题是有限的,比如双精度浮点数表示的范围 1.710^308 ~1.710^-308。浮点数的分布密度是不是均匀的?
sq: 均匀是什么意思?
luke: 就是 一个很小的数 [0,1]和 [110^300, 110^301]表示的浮点数个数。应该是0~1能表示的浮点数个数更多,因为整数部分用很少的位数就能表示,留给小数的比特位更多。
luke: 整个人类社会,到目前产生的代码行数是不是可以用自然数来统计?
sq: 恩。
luke: 但是计算机无法表示所有自然数,因为自然数是无限多个,计算机的计算能力是有限的,只能表示有限的自然数。
luke: 大学学过编译原理吗?
sq: 恩,还记得一部分,语法分析,词法分析,AST。
luke: 推荐你看一本书: CSAPP, 你可以好好看一下!国外本科生的入门教材。
sq: 恩,好。
work
luke: 之前做了线性回归, 谈谈你学习GPU编程的过程?
sq: 当时正好买了一本GPU的书,把一些cuda的基本概念讲的很细,然后看一下cuda 开发者手册,很快就上手了。
luke: 为什么会想到买这一本呢?
sq: 6月份的时候买了几本机器学习的书,顺带买了一本叫《CUDA并行程序设计》的书,可能是JD推荐算法的原因,这几本书的相关性比较高:) 。
luke: GPU弄完了学到了什么?
sq: 当时主要奔着实现目标去的,也没了解太多,主要看了下怎么手动指定GPU使用的线程数,理解了下 grid 和 block 的关系。
luke: 谈谈GPU和CPU的差别?
sq: 就像您之前给我们说的,CPU处理复杂的逻辑运算,适合计算密集型的任务,GPU核数非常多,并发性强,适合批量的执行逻辑简单的任务。
luke: 为什么GPU只能处理简单的逻辑?他们的指令集是一样的吗?
sq: Um... 一个是Intel,一个是 Nvidia ,应该不一样。
luke: 这两个设计是不一样的,GPU是基于大的吞吐量设计。GPU适合计算密集型,易于并行的程序。
luke: 总体来说,今年招的这批人中,你还是比较能干的。
sq: 谢谢:) 。
技术认知
luke: 现在zmq和libuv 了解的怎么样了?
sq: 基本能上手写东西,底层的细节还不是很清楚。
luke: 能用一句话概括 libuv 做了什么事?
sq: 这个... 是一个异步框架,事件驱动?
luke:不是,事件驱动只是我们拿它来做事件驱动编程, libuv 本质是一个同步的event_loop, 管理用户注册的事件。linux底层是调用select 或者 epoll 来实现的,windows 下使用 IOCP。
luke: 你可以去了解下I/O模型, 同步复用,多路复用,信号驱动I/O, 异步I/O。
sq: 恩,好。
luke: 也可以看下 《The Linux Programming Interface》.
sq: 看过一点《UNIX环境高级编程》感觉都是讲的操作系统的系统调用:(。
luke: 恩.
luke: 有没有想过做微妙级的 交易系统?该选取什么样基础组件,用libuv,zmq 能不能符合要求?
sq: 这个还没有仔细想过这个问题:(.
luke: 有没有考虑过git 替换 svn?
sq: 这个我自己平时使用git,感觉git的branch管理很好用,cherry-pick 也不错。当时在恒生也想大家使用git(开发团队),无果。
luke: git 的本质是什么?用一句话概括。
sq:之前了解过一点git的实现,是一个版本管理工具?看成一个微型的数据库?文件差异比较?
luke: 不对,版本工具只是表象。差异比较git也是借用别人的。
sq: 哦,里面好像用了个 hash 算法。
luke: 恩, git核心就是一个 键值管理工具,在这个基础上做了好用的管理命令(shell脚本),后面的人采用c/c++又实现了一遍。
luke: 我们公司也可以推广使用git,相信你来做个入门的培训也没有问题。
sq: 恩,当前我们的项目库还不是太多。
luke: 如果换用git,有没想过刘江波,刘艳慧他们要学点什么,做哪些修改?
sq: 自动化集成这块我自己还没做过,从这个方面来看我思考问题还不够全面。首先看有没有必要切换到git,对比下git和svn的优缺点,再做决定。 如果只是单纯的切换到git,应该只需要调整目前的shell脚本,最好是了解下 git 的规范化的集成流程比较好。
luke: 你自己有没有特别想做的事?
sq: 这个我目前还没有太多的想法,目前还是习惯被动的分配任务:-P。
luke: 那就像比如我让你去参观动物园,然后回来告诉我动物园有哪些动物! 然后你就去了,然后看了大象,狮子,猴子等,回来写了一篇观后感,很好的完成了任务。但是不知道动物园背后的运作模式,怎么饲养动物、和动物相处。
luke: 计算机里面东西确实很多,随便找个分支就足够你钻研一生,但一定要找一到两个方向深钻下去,然后你出来看其他领域的问题就能看到相应的深度,触类旁通。
luke: 探索未知,做一些感兴趣的,有意义的事,主要还是喜欢。
luke: 虽然很多时候,看起来都在解决实际的业务问题,很多工作不懂底层也能做,但是很多方向性的判断上都关系到对计算机底层的认知。
luke: 如果告诉你有两个人,或者程序,你知道他们的交易策略(什么样的价格买或者卖), 然后你有一台性能更优的机器,你能不能预测股价的趋势?
sq: 应该大致上可以预测吧。
luke: 一开口就知道底层知识的欠缺! 答案是不能,就拿一点: 你能不能保证这两个人看到的最新行情的时刻是一样的?网络时延,委托报送到交易所的时间是否有差异?
sq: 这样的话, 不确定的因素太多了。
luke: 恩,不考虑人行为的不确定性,外界环境就有这么多不确定性,所以很难做到精确预测。
luke: 希望我或者公司 能为你做点什么?
sq: 多开展几次技术培训哈~
luke: 没有其他的了?
sq: en... 好像没有了.