V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Harv
V2EX  ›  职场话题

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

  •  
  •   Harv · 2020-12-18 11:24:13 +08:00 · 2522 次点击
    这是一个创建于 1443 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 背景
      请教下各位大佬。小弟正在读香港水硕,还有半年左右就是暑期实习和秋招了。想找大伙讨论下我的自学计划。

    • 个人情况
      我给自己的定位是做 OS (操作系统)底层开发方向,已经有两三年的嵌入式系统工作经验。(工作后脱产读的硕。)
      之前已经看完 C 专家编程,现在 CSAPP (深入理解计算机系统)也快看完了,每个 lab 都有做。原本计划是接下来半年看 APUE ( UNIX 环境高级编程),挑 linux 内核的一个模块的源码啃啃就准备面试。

    • 纠结
      但最近跟朋友聊,他说 APUE 可能对找工作没太大帮助,建议我把 C++捡起来。这确实是个问题,我简历只敢写熟悉 C 语言,刷题我都是用 C 刷的哈哈。C++学过但已经生疏了。所以问题来了,找操作系统岗位,我看 APUE 还合适吗?或者说看别的系统书? C++有没有必要捡起来?

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