背景
请教下各位大佬。小弟正在读香港水硕,还有半年左右就是暑期实习和秋招了。想找大伙讨论下我的自学计划。
个人情况
我给自己的定位是做 OS (操作系统)底层开发方向,已经有两三年的嵌入式系统工作经验。(工作后脱产读的硕。)
之前已经看完 C 专家编程,现在 CSAPP (深入理解计算机系统)也快看完了,每个 lab 都有做。原本计划是接下来半年看 APUE ( UNIX 环境高级编程),挑 linux 内核的一个模块的源码啃啃就准备面试。
纠结
但最近跟朋友聊,他说 APUE 可能对找工作没太大帮助,建议我把 C++捡起来。这确实是个问题,我简历只敢写熟悉 C 语言,刷题我都是用 C 刷的哈哈。C++学过但已经生疏了。所以问题来了,找操作系统岗位,我看 APUE 还合适吗?或者说看别的系统书? C++有没有必要捡起来?
1
lewis89 2020-12-18 14:30:06 +08:00 1
APUE 没什么帮助.. ?? 不会用 怎么知道怎么实现??
另外系统编程包括内核底层一般不用 C++吧,我看 Redis 的代码 也是用结构体+函数指针在模拟 面向对象, 写 C 那帮哥们他们宁愿用宏来搞各种神奇的操作也不用 C++,其实这些操作 C++语言自带的,像 uint8 uint16 用 C++模板就很好就完成任务了,但是 Redis 硬是用宏+C 语言给完成了。 另外 C++真的语法太恐怖了,生命短暂,放弃 C++吧,或者只用很少一部分 C++的子集。 最后语言是看你做的领域来选,做 linux 内核跟驱动 肯定是 C,毋庸置疑的。 |
2
hoyixi 2020-12-18 14:43:32 +08:00 1
系统层面结合互联网,大概就是文件系统、数据库、网络方面(例如高性能 http 服务器)。你喜欢哪个方向,再去看好了。不过大概率 C++还是逃不过的。
要么就学 Go,只不过瞄准的应用不会那么底层,要偏上一点。 |
3
Harv OP @lewis89 首先,APUE 肯定有用。不然我也不会计划看这本书。
但从应试的角度来看,加之我只有半年的时间准备,我也理解我朋友的观点,这本书对我找工作帮助不大。内容几乎是系统调用,估计面试官很少会抓着深问。 |
4
Harv OP @lewis89 关于语言,你说的对。底层当然是用 C 。我其实是在担心,只会 C 够不够用。
我去翻了翻我想投的岗位,几乎都是“熟悉 C/C++或 java”、“有丰富的底层开发经验者优先”之类的话。如果要把 C++捡起来,确实比较费时间。 |
6
changyou 2020-12-18 15:33:06 +08:00
APUE 有点用吧, 我的工作基本就是 APUE 和 UNP
|
7
Harv OP @wanghaunchun 您的技术方向是?
|
8
songlinliee 2020-12-18 18:14:35 +08:00 2
嵌入式和互联网比起来面经太少了,我比较建议先行动起来。
找几家你心仪的公司,你之前有工作经验完全可以包装成在职,然后看面试官会问你什么问题。 你说的这两个方向我觉得选一条进行和两条并行来都是可以的。面向就业学习吧。 然后就是避免现在投了简历影响你半年后求职就可以。 |
10
hanguofu 2020-12-19 01:03:17 +08:00
@wanghaunchun : 有兴趣创业吗 ?
|
12
yangzhezjgs 2020-12-19 12:41:10 +08:00 1
个人一些看法,你首先要明确具体方向,系统底层包括的范围很大,举几个我稍微了解的
C++服务器后端:APUE (系统编程),UNP (网络编程)就是基础,入门基本标准应该自己能独立写出个高并发的 web 服务器或者网络库,看参见 https://book.douban.com/subject/20471211/ 分布式数据库相关:可以去学习 pingcap 的课程 https://university.pingcap.com/talent-plan/,或者 mit6.824 ( b 站有翻译版),需要 go 基础 编译器相关:目前我了解到有一些大公司在做深度学习编译优化,如 TVM 之类的工作,知乎上有个叫蓝色的大佬在阿里做这方面的工作,有兴趣可以去关注,我不怎么了解 云原生相关:主要就是基于 k8s 造轮子,想入门可以去极客时间学习《深入理解 k8s 》那门课 操作系统相关:可以去看 book.douban.com/subject/35208251/,作者是上交的陈海波教授 其他的方向就不太了解了,建议你还是细化自己的目标,现在是分工越来越细的时代 |
13
hanguofu 2020-12-19 23:52:52 +08:00
@wanghaunchun : 方便留个邮箱吗 ? 我写个项目简介给你哈 ~~~
|
14
lewis89 2020-12-20 19:37:38 +08:00
我还是那句话,随着各种语言的兴起,C++已经走向绝路了,
在高性能中间件需要非托管语言的二进制编译的场景,golang 其实表现的非常好了, 如果没有实时性要求,例如 GC 停顿响应,用 golang 来做消息队列 流控 等等,已经非常好了, 在很多大型互联网公司,golang 已经得到生产验证了,在这些场景使用 C++纯属自己找不痛快, 而以前这些中间件都是 C++在做的。 在对内存需要精细化管理,例如实现自己的内存池,像 Redis 这种 对性能有极致要求的工具以及操作系统这些东西, 我觉得未来肯定还是 C 的天下,这是毋庸置疑的,毕竟 C 的历史太久远了,积累也很深,而且这些工具很明显都是跟业务抽象无关的底层算法,基本上也不太需要 C++的抽象,即使需要像 Redis 也是拿指针跟宏在模拟简陋面向对象编程。 另外新兴的 Rust 也在抢 C++的地盘。 可以说 C++现在处于一个非常尴尬的位置,需要抽象封装的地方跟场景,其实上层开发是可以在性能上做出一些妥协的,Python 就是一个最好的例子,基本上底层都是 C/C++,上层应用逻辑都是 Python 。 而既需要 C++的高实时性,又要有 C++强大的抽象封装能力的场景 基本上等于没有了。 |
15
Harv OP 感谢各位大佬,我悟了。确实是需要明确具体方向的。比起编程语言的发展空间,我更在意自身技术栈与目标岗位的匹配度。所以我又去翻了翻 JD (职位描述)。
我接下来准备优先啃(一部分) linux 内核源码,再用 python 搞个机器学习的项目(我也学过 python )。前者是因为技术面都喜欢问。后者是因为我目标岗位都有提到“会机器学习有加分”,而且正好下学期有门课我可以用来做课题。 虽然还有半年时间,但除开课业、刷题,剩下的时间其实没多少。估计整完前面两个再加上刷题就差不多要应付暑期实习。之后再考虑学啥来准备秋招。 现在思路清晰了很多,再次感谢各位大佬。 |