我觉得java;Pascal程序员或者说服务器端程序员对linux的学习可以分几个部分:
- 运维相关的,你得知道怎么运行cmd,编写简单的shell脚本,基本的string处理(grep sed这些东西),查看系统日志,查看系统软硬件的当前状态,更新软件包和打补丁等。这又分为你是只操作一台linux服务器,还是操作一个几百甚至上万台服务器/容器的集群。你肯定会借助不同的工具,有些朋友也提到了docker等。不能啥事都指望运维,有些事得研发来看的。
- IO相关的,我们做服务器端开发的,其实会有非常多时间在和io打交道,对于大多数应用io也最容易产生瓶颈。比如说你可以学学epoll,这样比较容易理解nio。还有文件系统等等。
- 安全相关的,这个对于开发人员也很重要。各种文件的权限,也包括如何进行安全的网络传输和加密等等。
- 进程/线程调度,比如说线程是怎么park/block/wait的,这对你开发高并发应用是很有必要的。
- 网络。linux的网络配置还是挺繁复的,而java其实是一门网络编程语言(这个是96年java创始人定下来的基调)。还有就是socket编程,虽然windows下也有socket编程,但是写c写的多的朋友肯定知道linux和win下面差别还挺大的,不过这点java已经封装的很好了,但出了问题的时候还是需要程序员能对底层有一定了解的。
有些东西我觉得没必要学,除非你特别有兴趣:
x相关,以及图形界面的开发,有qt呢,再说.net都能跨平台呢//笑
过于高端的shell脚本技巧和string处理技巧,有python呢
作为近年来运用越来越广泛,被互联网企业越来越认可的技术,内核底层原理技术该如何学习呢?
这里给大家推荐零声教育全网独家的【Linux内核源码 】 课程体系,通过20项目案例,2W+行手写代码,全面解析6个内核技术方向。
学习路线
- 进程管理专题
- 内存管理专题
- 网络协议栈专题
- 设备驱动专题
- 文件系统及内核组件专题
- 零声服务与内核参考资料
- 等等。。
进程管理专题
内存管理专题
网络协议栈专题
设备驱动专题
文件系统及内核组件专题
零声服务与内核参考资料
适合于
- Linux 内核优化、内存管理 ,内核开发岗位、定制化自己OS
- 深入系统内核研究、网络安全逆向分析
- 提升自己能力,为了更好做应用层开发提供核心依据
- 跳槽面试大厂(腾讯、华为、中兴、中微、中芯等等)
- 从事业务开发多年,对底层原理理解不够深入的在职工程师
- 从事嵌入式方向开发,想转入内核开发的在职工程师
- 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
- 从事非开发岗位(算法岗,运维岗,测试岗),想转内核开发岗位的在职工程师