CSDN:多年C和C++项目开发及管理,有什么经验可以分享给这个领域的工作者?在程序员修养方面,他们又应该注意什么,多学些什么,多看些什么?
许鹏:尽管从事C和C++开发多年,我还是不敢说自己非常精通。有的只是一点点的感悟和体会,如果是进行Linux平台下的C语言开发,最好还是就下面几个问题多做一些试验,多读一些相关的书。
1. 程序的运行和加载,推荐程序员的自我修养一书。
2. 内存分配,推荐阅读Ptmalloc源码分析,无论是C还是C++程序员,这一部分是最容易踩雷的,多读一点基础的东西,会在解决实际问题的时候,不至于手足无措。以这些为基础,再结合Valgrind或Purify,相信效果会更好。
3. 多读一点C和C++开发的成功产品,如Apache Http Server和Nginx,这样就容易搞清楚在设计一个系统的时候需要有哪些关注点。
4. 《深入理解计算机系统》真的是一本非常不错的书,为什么要这么说,软件的设计还是要以物理设备支持的特性为基础的,这本书让我们在CPU的级别来进一步思考程序设计。
阅读源代码的经验
CSDN:大量开源项目使用和学习经验,您对开源运动怎么看?如何才能更好的学习一个开源项目?开源项目使用时又该注意些什么?
许鹏: 开源项目离不开大家的广泛参与和支持,要让一个开源项目取得成功,有多个方面的因素。
CSDN:能否分享一些您对当下大数据的看法?
许鹏: 大数据要解决的两大基本问题是“数据存储”和“数据分析”,在数据存储领域,开源实现方面似乎大家都已经首肯HDFS的方式,不再怀疑。
而在数据分析的计算框架方面,目前还有大量的竞争或博弈出现。Spark就是一例,分析领域除了基于传统关系型数据库的分析方式,还有图计算相关和机器学习为代表的数据挖掘。显然机器学习是一个大热门,这一方面个人所知甚少,不敢胡说八道,但门槛似乎很高,数学底子一定要好,决不是简简单单的调用几个API就完事了的。
云计算是大数据的支撑,虽然脱胎于虚拟化,不乏商业宣传的味道,但是大量机器的安装部署,如果全部使用物理机一台台去装,肯定会让人发疯,云计算让大规模部署和产品迁移变的更为简单。
CSDN:对于阅读源码您有着丰富的经验,对想阅读源码又不知道如何下手的同学可否做一些分享?
许鹏: 源码阅读其实是一个逆向的工程,这期间必须会遇到种种问题。一般来说,我会遵循这样一个思维范式——Problem domain→model→architecture&implementation→improvement→best practice。
1. 首先搞清楚要分析的产品解决的问题是什么,这个问题在哪个大的范畴里,也就是要搞清楚problem domain。一个著名的开源产品必定在Wikipedia上有相应的条目,所以一开始去看wikipedia是破题的一种极好方式。
2. 清楚要分析产品的大体框架和关键性的概念,也就是理解清楚architecture和key concept。
3. 将分析的产品实实在在的运行起来,我一般选择debian或archlinux作为工作平台,它们提供了丰富的软件包,可以很快的将东西安装并运行。熟悉Linux本身对于开源项目的源码阅读还是大有裨益的。
4. 修改日志级别,得到丰富的日志信息。有了这个为基础,再来开始真正的源码阅读和分析。
5. 源码分析的时候,要始终问这几个问题。
- 这一部分代码是在同一个进程中么,同一个线程中么,运行在同一台机器中么
- 每一个线程都要问清楚,什么时候启动的,什么时候停止的
- 当前实现的性能如何,比如i/o, cpu, network 这个需要做相应的测试方面的试验
- 当前的解决方案还有优化空间吗,比如针对spark中的scheduling问题,就有sparrow的优化机制提出
6. 碰到具体的问题一时解决不了怎么办
7. 编程语言选择
- 基本语法:数据类型、控制语句、函数定义
- 是否支持FP
- 多态和继承
稍微总结一下,我想源码分析心中要有两幅大图,将整体与局部很好的结合起来思考
在电脑上杀过U盘病毒后经常会在盘符根目录下产色产生一个autorun.inf文件夹(其实是u盘免疫的结果),用这个方法能快速删除,有遇到的不防试一试,这样就不需要借助u盘杀毒等软件。方法如下:假设autorun.inf文件夹是在D盘,操作如下: 打开“开始”,选择“运行”,输入“CMD”,打开命令行窗口,在命令行窗口中输入一下命令:第一步:输入D: 然后回车第二步:输入rmdir /s a...
Android主题与Toolbar样式之间的关系标签: android2016-07-02 15:07 3161人阅读 评论(11) 收藏 举报 分类:Android(17) 版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]更新本项目相关源码地址:http://git.osc
参考资料:https://blog.csdn.net/wo541075754/article/details/76735019 在使用IDEA创建包时会出现这样一种场景,就是当一个空包很长时,比如com.secbro.drools.model。这个时候如果你想给drools或model创建同级的包,你会发现,默认创建的包不是同级的,而是在model下面的。 取消Project视图...
AnimatedContainer属性改变, 根据设定的时间过渡大小颜色位移等, 类似transition属性变化的动画GestureDetector( onTap: () { setState(() { widget.width = 100.0; }); }, child: AnimatedContainer( duration: Dur...
对于SQLite的使用远远没有MySQL、Oracle等数据库的名声响亮,尤其在学生当中,我也是通过笑哥才了解的但作为单用户轻量级数据库SQLite还是有着举足轻重的地位,下面来看看网上找到的SQLite的简介我,我说的太部官方了,也需要写很久时间~~~~ :SQLite is a software library that implements a self-contained, serve...
This article was written in Linux firefox.安装安装完成后的界面如下所示: 安装过程可大致描述为:准备好启动盘,可以是U盘或是DVD盘备份好Windows系统下的数据安装openSUSE安转过程截图1> 创建分区这次安装的情况相当于在完全新的硬盘上安装系统,计算机中有两块硬盘sda和sdb,分区创建如下 2> 选择桌面环境从图上可以看出,ope...
1. 创建连接使用Jedis操作Redis Cluster,我们需要创建JedisCluster对象,再通过JedisCluster对象实例操作数据,代码一般如下:// 初始化所有节点(例如6个节点)Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>() {{ add(new Ho...
莫比乌斯反演由于莫比乌斯反演的应用非常广泛,内容很多但是结论却并不复杂。 一道经典的莫比乌斯反演题: 求:∑ni=1∑mj=1[gcd(i,j)==d]∑i=1n∑j=1m[gcd(i,j)==d] 也就是说有多少对(i,j)的gcd为d。 莫比乌斯反演公式 莫比乌斯函数程序模板void mobius(){ int i,j; mbs[1] =...
GCD & LCM InverseTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 16795 Accepted: 3107DescriptionGiven two positive integers a and b, we can easily calcu
1、继承thread方式//1、继承Thread类public class Student extends Thread { private String name; private Punishment punishment; public Student(String name, Punishment punishment) { //2、调用Thre...
一、数学内置函数1、Step(a,x):如果x&lt;a返回0;如果x&gt;或=a返回12、Clamp(x,a,b):如果x&lt;a返回a;如果x&gt;b返回b;如果在a和b之间就返回x3、smoothstep(min,max,x):返回的值为–2*((x –min )/(max –min ))3 +3*((x –min )/(max –min ))24、lerp(a,b,f...
题目: k倍区间给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i &lt;= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。 你能求出数列中总共有多少个K倍区间吗? 输入-----第一行包含两个整数N和K。(1 &lt;= N, K &lt;= 100000) 以下N行每行包含一个整数Ai。(1 &lt;= Ai &...