以找工作(系统底层方向)为前提,接下来学什么?

2020-12-18 11:24:13 +08:00
 Harv
2506 次点击
所在节点    职场话题
15 条回复
lewis89
2020-12-18 14:30:06 +08:00
APUE 没什么帮助.. ?? 不会用 怎么知道怎么实现??

另外系统编程包括内核底层一般不用 C++吧,我看 Redis 的代码 也是用结构体+函数指针在模拟 面向对象,
写 C 那帮哥们他们宁愿用宏来搞各种神奇的操作也不用 C++,其实这些操作 C++语言自带的,像 uint8 uint16 用 C++模板就很好就完成任务了,但是 Redis 硬是用宏+C 语言给完成了。

另外 C++真的语法太恐怖了,生命短暂,放弃 C++吧,或者只用很少一部分 C++的子集。

最后语言是看你做的领域来选,做 linux 内核跟驱动 肯定是 C,毋庸置疑的。
hoyixi
2020-12-18 14:43:32 +08:00
系统层面结合互联网,大概就是文件系统、数据库、网络方面(例如高性能 http 服务器)。你喜欢哪个方向,再去看好了。不过大概率 C++还是逃不过的。
要么就学 Go,只不过瞄准的应用不会那么底层,要偏上一点。
Harv
2020-12-18 14:57:21 +08:00
@lewis89 首先,APUE 肯定有用。不然我也不会计划看这本书。
但从应试的角度来看,加之我只有半年的时间准备,我也理解我朋友的观点,这本书对我找工作帮助不大。内容几乎是系统调用,估计面试官很少会抓着深问。
Harv
2020-12-18 15:15:10 +08:00
@lewis89 关于语言,你说的对。底层当然是用 C 。我其实是在担心,只会 C 够不够用。
我去翻了翻我想投的岗位,几乎都是“熟悉 C/C++或 java”、“有丰富的底层开发经验者优先”之类的话。如果要把 C++捡起来,确实比较费时间。
lewis89
2020-12-18 15:19:09 +08:00
@Harv #4 捡起来 C with Class 就够了,模板元编程,就算你会写,也会被打死
changyou
2020-12-18 15:33:06 +08:00
APUE 有点用吧, 我的工作基本就是 APUE 和 UNP
Harv
2020-12-18 16:05:00 +08:00
@wanghaunchun 您的技术方向是?
songlinliee
2020-12-18 18:14:35 +08:00
嵌入式和互联网比起来面经太少了,我比较建议先行动起来。
找几家你心仪的公司,你之前有工作经验完全可以包装成在职,然后看面试官会问你什么问题。
你说的这两个方向我觉得选一条进行和两条并行来都是可以的。面向就业学习吧。
然后就是避免现在投了简历影响你半年后求职就可以。
changyou
2020-12-18 19:27:24 +08:00
@Harv 有 arm 嵌入式,x86,内核,网络编程,公司主营 nas
hanguofu
2020-12-19 01:03:17 +08:00
@wanghaunchun : 有兴趣创业吗 ?
changyou
2020-12-19 11:34:47 +08:00
@hanguofu
做什么?
yangzhezjgs
2020-12-19 12:41:10 +08:00
个人一些看法,你首先要明确具体方向,系统底层包括的范围很大,举几个我稍微了解的
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/,作者是上交的陈海波教授
其他的方向就不太了解了,建议你还是细化自己的目标,现在是分工越来越细的时代
hanguofu
2020-12-19 23:52:52 +08:00
@wanghaunchun : 方便留个邮箱吗 ? 我写个项目简介给你哈 ~~~
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++强大的抽象封装能力的场景 基本上等于没有了。
Harv
2020-12-22 13:27:36 +08:00
感谢各位大佬,我悟了。确实是需要明确具体方向的。比起编程语言的发展空间,我更在意自身技术栈与目标岗位的匹配度。所以我又去翻了翻 JD (职位描述)。
我接下来准备优先啃(一部分) linux 内核源码,再用 python 搞个机器学习的项目(我也学过 python )。前者是因为技术面都喜欢问。后者是因为我目标岗位都有提到“会机器学习有加分”,而且正好下学期有门课我可以用来做课题。
虽然还有半年时间,但除开课业、刷题,剩下的时间其实没多少。估计整完前面两个再加上刷题就差不多要应付暑期实习。之后再考虑学啥来准备秋招。
现在思路清晰了很多,再次感谢各位大佬。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736695

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX