以下内容转自 https://www.toutiao.com/i6661021082251690508/

如果大家详细的分析一下自己所从事过的项目,或者分析一下目前热门招聘岗位,就可以抽取一些公共的技术(或者基础技术),如果能熟练掌握这些基础技术,对开发工作将达到事半功倍的效果,同时对以后跳槽也有很大的帮助。如果本文直接说出这些技术概念,大家肯定非常清楚,但达到熟悉的程度确实难上加难。因此,本文搜集了目前比较流行的几个开源项目,这些项目中基本上包含了这些技术,如果大家能把这些开源项目学透,在以后的开发工作中将如鱼得水。

Redis

Redis的全称是REmote DIctionary Server,由Salvatore Sanfilippo写的key-value存储系统,更多的场景是作为数据库的前端缓存。Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,其最大的特点是可以基于网络进行访问。虽然称为KV数据库,但Redis支持的值类型非常丰富,可以是字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类类型。

废话说了这么多,那么我们可以从这个开源项目学到什么内容呢?具体来说主要可以学习如下内容:

  1. 算法和数据结构: 由于其支持如此之多的数据类型,除了常规的链表等数据结构外,还有调表、散列和集合等实现。由于其对性能的要求,因此在其实现的时候对数据结构和算法的应用达到了吹毛求疵的地步。
  2. 网络编程:Redis实现了跨平台的支持,为了支持不同平台的网络编程,特别是异步编程模型。

Nginx

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。详细进行Web开发和运维的同学没有不知道Nginx的,它既可以做Web服务器,又可以做反向代理实现负载均衡。

Nginx的代码非常值得阅读,通过阅读其代码可以熟悉如下内容:

  1. 网络编程: 可以熟悉网络编程及服务端异步框架模型。例如select、poll、epoll和kqueue等的使用方式。
  2. HTTP协议:属性HTTP协议的实现细节。
  3. 插件架构: Nginx的扩展功能通过插件实现,阅读其代码可以了解插件的实现原理,插件机制在软件开发中应用广泛。

Leveldb或RocksDB

Leveldb是一个google实现的非常高效的kv数据库,RocksDB功能与其相同,但其内部做了很多完善和改进。两者都是在互联网领域应用广发的开源项目。

学习其源代码可以对如下领域有更加深入的理解:

  1. 网络编程: 不过多介绍了
  2. 磁盘数据存储: 两者的目的都是实现一种高效的KV存储,因此对磁盘的访问及数据组织都费了很多心思,以保证其性能的最大化。
  3. 数据结构: 前面几个开源想更多的是在内存中的数据结构,但对于磁盘数据的存储却没有任何优势。LevelDB和RocksDB中对磁盘数据存储和读取有其独特的数据结构。阅读其代码可以让我们在数据结构的另外一个领域大开眼界。

SQLite

SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQlite的代码量才1万行左右,去掉注释后5千多行,代码量不大,注释丰富,非常适合学习。

阅读其代码可以对关系型数据库的实现细节有深入的了解。特别是数据的组织、磁盘访问和数据一致性的保证等。

Tinyhttpd

Nginx的代码量是比较大的,几万行的代码阅读起来可能比较吃力。如果想了解HTTP协议的具体实现,由不太敢阅读Nginx的代码怎么办?正好有个替代方案,那就是tinyhttpd,它是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。

好了,先介绍到这,相信还有很多值得学习的开源项目,这里就不一一介绍了。

C语言开发工程师一定要熟读的5个开源项目相关推荐

  1. Go语言开发工程师一定要熟读的5个开源项目

    文章目录 1.简介 2.开源项目 2.1.Codis 2.2.Etcd 2.3.Kubernetes 2.4.Caddy 2.5.Go-MySQL 3.原文地址 1.简介 写代码同写文章一样,既是技术 ...

  2. 兴业数金C语言笔试,2021兴业数金校园招聘C语言开发工程师职位

    中公金融人银行招聘网整理分享各大银行官方发布的招聘考试信息,整理的内容仅供格式参考,详情以官方发布的为准,忘各位考生悉知!笔面试通知等信息以各位考生接收到官方发布的短信或邮件为准! 岗位职责: 1.负 ...

  3. 熟读这5个开源项目就是合格的GO语言工程师

    写代码同写文章一样,既是技术活,又是艺术活.不是懂了语法能够写出优秀的代码,也正如不是认识字就能够写出优美的文章一样.那个作家饱读史书,那个架构师不是在代码堆里和Bug堆里泡出来的. 因此,程序员刚入 ...

  4. c语言开发工程师英文,工程师用英语怎么说

    有些职位我们能日常见到,所以知道英语怎么说,下面给大家分享一些关于工程师用英语怎么说,希望对大家有所帮助. 一.工程师用英语怎么说 engineer: 总工程师 chief engineer; 高级工 ...

  5. go新手看的开源项目 哪些适合_最近大家都在用 Go 语言玩什么?这几个新的开源项目告诉你...

    自 2009 年 11 月正式宣布推出以来,Go 语言凭借着其简单.高效.资源占用低的优势逐渐在开发者人群中变得热门起来,优秀的 Go 语言开源项目层出不穷.Gitee 上优秀的开发者们也已经分享了近 ...

  6. 阿里 c语言开发工程师,阿里巴巴2014秋季校园招聘软件研发工程师笔试题

    阿里巴巴2014秋季校园招聘软件研发工程师笔试题 1. 单选题 1. 假设把整数关键码K散列到N个槽列表,以下哪些散列函数是好的散列函数 A: h(K)=K/N; B: h(K)=1; C: h(K) ...

  7. C语言开发工程师笔试面试题整理(七)——数据库SQL

    1.简述一下数据库的三大范式(2020兴业数金面试题) 答:第一范式(1NF):原子性 字段不可再分,否则就不是关系数据库; 第二范式(2NF):唯一性 一个表只说明一个事物; 第三范式(3NF):每 ...

  8. python游戏服务器框架_mqant首页、文档和下载 - Golang/python语言开发的分布式游戏服务器框架 - OSCHINA - 中文开源技术交流社区...

    mqant mqant 是一款基于 Golang 语言的简洁,高效,高性能的分布式游戏服务器框架,研发的初衷是要实现一款能支持高并发,高性能,高实时性的游戏服务器框架,也希望 mqant 未来能够做即 ...

  9. c语言调用json编程,c语言开发JSON - wangxuwei的个人空间 - OSCHINA - 中文开源技术交流社区...

    安装json-c 库 $ sudo apt-get install libjson0-dev libjson0 代码json_test.c #include #include #include #in ...

最新文章

  1. 推荐一些软件,平时工作中可能会用到【不断更新】
  2. 实现自己的连接池(一)
  3. IBatis.Net学习笔记六--再谈查询
  4. 面对 iPad,Surface 的键盘是必杀技
  5. 19-7-15学习笔记
  6. vue 回车查询 按钮_前后端分离商城,前端基于Vue后端nodejs包含小程序源码免费分享...
  7. 【通知】有三个人指导以及VIP星球6月份之后升级,你的专属AI顾问了解一下
  8. 连接mysql报错有乱码_连接mysql服务器报错时,出现乱码
  9. 【李宏毅2020 ML/DL】补充:Ensemble: Bagging, Boosting, Adaboost, Gradient Boosting, Stacking
  10. 如何使用ImageRanger Pro Edition mac版创建缩略图?
  11. input 文件提交 按钮制作
  12. html自动选择省市,jQuery中国省市区地址三级联动插件Distpicker
  13. 10大主流3D建模技术
  14. SMSBMS超市订单管理系统详解(一:准备工作)
  15. 带你了解ae2021版新功能 ae 2021中文直装版
  16. 用VBA代码下载网络上的文件
  17. 联想电脑去掉开机广告 关闭开机广告 ideapad 去掉开机广告
  18. 由于文件组 'PRIMARY 中的磁盘空间不足,无法为数据库 'newnet' 分配新页。请删除文件组中的对象、将其他文件添加到文件组或者为文件组中的现有文件启用自动增长,以便增加必要的空间。
  19. ACM_置换群 burnside引理 Polya定理
  20. Android 高仿微信头像截取 打造不一样的自定义控件

热门文章

  1. Geotools中实现NC转等值面
  2. 数字图像融合相关评价指标
  3. 【日常学习】【双端队列】 Uva - 210 Concurrency Simulator题解
  4. Dell Precision T5600 双系统安装
  5. 360急救盘ISO镜像制作
  6. Web前端开发------第五周
  7. 应用计算机软件matlab使用迭代法仿真激光谐振腔模式_【激光器诞生60周年】带“旋”光束不简单...
  8. 读书笔记之C Primer Plus 3
  9. ROS::差速运动模型机器人运动控制
  10. 买过蓝科高新的在哪里