极客时间-左耳听风-程序员攻略-系统知识

程序员练级攻略:系统知识

进入专业的编程领域,学习系统知识是非常关键的一部分。

本书的最大优点是为程序员描述计算机系统的实现细节,帮助其在大脑中构造一个层次型的计算机系统。从最底层的数据在内存中的表示到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户态应用。通过掌握程序是如何映射到系统上,以及程序是如何执行的,你能够更好地理解程序的行为为什么是这样的,以及效率低下是如何造成的。

网络编程知识

理查德·史蒂文斯(Richard Stevens) 的三套巨经典无比的书。大师的 个人主页

Linux网络编程与协议分析知识

学习网络协议不单只是看书,最好用个抓包工具看看这些网络包是什么样的。

  • Wireshark 数据包分析实战》。在这本书中,作者结合一些简单易懂的实际网络案例,图文并茂地演示使用 Wireshark 进行数据包分析的技术方法,可以让我们更好地了解和学习网络协议。当然,也拥有了一定的黑客的技能。

看完《Unix 高级环境编程》后,可以趁热打铁看看《Linux/Unix 系统编程手册》或是罗伯特·拉姆(Robert Love)的 Linux System Programming 英文电子版 。其中文翻译版Linux 系统编程 也值得一读,虽然和《Unix 高级环境编程》很像,不过其主要突出的是 Linux 的一些关键技术和相关的系统调用。

关于 TCP 相关文章。

对于系统知识,主要有以下一些学习要点。

  • 用这些系统知识操作一下文件系统,实现一个可以拷贝目录树的小程序。
  • 用 fork / wait / waitpid 写一个多进程的程序,用 pthread 写一个多线程带同步或互斥的程序。比如,多进程购票的程序。
  • 用 signal / kill / raise / alarm / pause / sigprocmask 实现一个多进程间的信号量通信的程序。
  • 学会使用 gcc 和 gdb 来编程和调试程序(参看我的《用 gdb 调试程序)。
  • 学会使用 makefile 来编译程序(参看我的《跟我一起写 makefile十一十二十三十四)。
  • Socket 的进程间通信。用 C 语言写一个 1 对 1 的聊天小程序,或是一个简单的 HTTP 服务器。

C10K 问题

操作系统处理大并发请求的问题

实践项目

实现语言可以用 C、C++ 或 Java。

实现一个 telnet 版本的聊天服务器,主要有以下需求。

  • 每个客户端可以用使用telnet ip:port的方式连接到服务器上。
  • 新连接需要用用户名和密码登录,如果没有,则需要注册一个。
  • 然后可以选择一个聊天室加入聊天。
  • 管理员有权创建或删除聊天室,普通人员只有加入、退出、查询聊天室的权力。
  • 聊天室需要有人数限制,每个人发出来的话,其它所有的人都要能看得到。

实现一个简单的 HTTP 服务器,主要有以下需求。

  • 解释浏览器传来的 HTTP 协议,只需要处理 URL path。
  • 然后把所代理的目录列出来。
  • 在浏览器上可以浏览目录里的文件和下级目录。
  • 如果点击文件,则把文件打开传给浏览器(浏览器能够自动显示图片、PDF,或 HTML、CSS、JavaScript 以及文本文件)。
  • 如果点击子目录,则进入到子目录中,并把子目录中的文件列出来。

实现一个生产者 / 消费者消息队列服务,主要有以下需求。

  • 消息队列采用一个 Ring-buffer 的数据结构。
  • 可以有多个 topic 供生产者写入消息及消费者取出消息。
  • 需要支持多个生产者并发写。
  • 需要支持多个消费者消费消息(只要有一个消费者成功处理消息就可以删除消息)。
  • 消息队列要做到不丢数据(要把消息持久化下来)。
  • 能做到性能很高。

小结

编程语言。以工业级的 C、C++、Java 这三门语言为主,推荐学习 Go 语言。

算法和数据结构。尤其是最基础的算法和数据结构

计算机的相关系统。至少要掌握三个系统的基础知识,一个是操作系统,一个是网络系统,还有一个是数据库系统。它们分别代表着计算机基础构架的三大件——计算、存储、网络。

但是,往后面走,你需要开始需要术业有专攻了。下面给一些建议的方向。

  • 底层方向:操作系统、文件系统、数据库、网络……
  • 架构方向:分布式系统架构、微服务、DevOps、Cloud Native……
  • 数据方向:大数据、机器学习、人工智能……
  • 前端方向:你对用户体验或是交互更感兴趣,那么你走前端的路吧。
  • 其它方向:比如,安全开发、运维开发、嵌入式开发……
posted @ 2019-03-24 21:41  17bdw  阅读(753)  评论(0编辑  收藏  举报