请教 V 友们,一或两年经验的 C/C++程序员,应该具有什么样的能力才算是合格或者优秀的

2018-05-29 16:36:55 +08:00
 Applenice

想请教 V 友们一下,一或两年经验的 C/C++程序员,应该具有什么样的能力才算是合格或者优秀的,看招聘信息的要求总感觉有些乱,如果你们去面试这样的同学都会考察哪些方面呢?先谢谢大家

11041 次点击
所在节点    程序员
120 条回复
xiadong1994
2018-05-29 23:28:02 +08:00
@shijingshijing 那你这个问题就答错了,printf 和 main 不一样,main 不是可变参数的,他只有两个参数。x86 结构 printf 是在 call 指令之前把参数 push 到 stack 上( x86_64 先放到寄存器里),然后在 printf 里面用格式字符串一个个取出来。这些在 C 里面是用 macro va_list, va_start, va_end 等等来实现,不同的 arch 这些 macro 的实现都不一样。
0x11901
2018-05-29 23:38:04 +08:00
@pkookp8 你说的这些刚好我都会,然而我重来没在工作中用到过。反而是用在了 dark side(●°u°●)​ 」
Applenice
2018-05-29 23:59:29 +08:00
@xiadong1994 真心的佩服大佬....我真的是太渣了
shijingshijing
2018-05-30 00:23:48 +08:00
@xiadong1994 惭愧。。。 大佬我要关注你。。。
msg7086
2018-05-30 02:56:03 +08:00
接 #41 @xiadong1994
所以说学 C 系的人,学好汇编很重要……
不用到手撸汇编的程度,但是这些机制还是要了解到位的。

@Applenice 之前还面过一个想来做 C 开发的,号称很多年 C 语言讲师经验的中年大叔。
我随便扔了一道简单的白板应用题,写不出。
我们老大随便问了个内存对齐的问题,答不出。

再见……
PanPancf
2018-05-30 09:17:19 +08:00
@msg7086 $45 printf 变长参数这个问题,只要去了解一下调用栈的原理就可以知道了。。当然汇编还是能看懂比较好
mashiro233
2018-05-30 09:39:17 +08:00
c/c++由于其特殊性能够在非常多的场合上派上用场,所以不同领域的知识累积也不一样。

比如如果是服务器开发,可能会侧重偏向 tcp/ip 实现,网络模型这块。

如果是搞 linux 内核的,可能会偏指令集,用户层的 syscall 以及在内核里是如何实现等等。

如果是搞渲染器的,对 dx 和 opengl 这套东西肯定得熟了,shared 要怎么写,对指令集也得了解。必要时候还得手写汇编,毕竟渲染器这块对于效率有极高的要求。现在大多都是 arm 和 x86,资料多。上个世代各种偏门的 soc(说的就是 x360 和 ps3)可是把一堆写渲染器折腾的死去活来。

至于语言本身,我个人是不太倾向一开始于过度深入研究,应该关注于如何使用和用好轮子。随着项目的积累你会慢慢的去了解原理。我今年过年放假的时候研究了一个礼拜的元编程,到现在项目里也没啥地方需要用到。再比如楼上提到的 main 函数 printf 这些,如果你知道 crt0/1.o 是个什么东西,写过 ld script,移植过 newlib,闲的时候看过 musl libc 源码,回答这些个问题不是什么难事。如果对这块有兴趣,看优秀库的源码是个很好的提升手段,c++这块 boost 是个非常好的库,代码可读性很高。c 的话推荐 musl libc,也是可读性非常高的 c 标准库实现。同时有精力也可以写个 c 编译器玩玩。
Applenice
2018-05-30 09:42:28 +08:00
@msg7086 受教了,谢谢~~号称很多年的 C 语言讲师,内存对齐出问题这个有点尴尬啊 0.0
jeffson
2018-05-30 09:46:36 +08:00
觉得自己好菜怎么办
Applenice
2018-05-30 09:54:53 +08:00
@mashiro233 谢谢谢谢,十分感谢了,您和楼上大佬们的回复真的让我感觉到自己差好多,要更努力搬砖学习了,感谢
Applenice
2018-05-30 09:55:58 +08:00
@jeffson 我是真的觉得我好菜....
feverzsj
2018-05-30 09:56:34 +08:00
2 年连 c++都还没入门
liuminghao233
2018-05-30 10:09:27 +08:00
比如说 sfinae (
另外写双向链表都要跪的怕是完全没学过数据结构

还有学 c++必须看 深度探索 C++对象模型
看完很多语言上的细节都清楚了
当然 c++11 之后又不同了
wekw
2018-05-30 10:20:03 +08:00
能手写一个协程调度器我觉得就步入高手行列了,因为你要懂得 进程、线程 的概念和 Linux 的设计模型。
wekw
2018-05-30 10:20:49 +08:00
写不出来的话,能一句话概括我也认。绝大多数人都不知道高性能服务器开发领域的协程概念。
c3824363
2018-05-30 10:27:11 +08:00
@wekw 协程是为了方便人类的思维习惯而搞出来的东西吧, 每个连接自己携带一堆上下文数据不是一样的么。 就是用起来不像阻塞编程那么直观,但习惯了还是一样的吧。
wekw
2018-05-30 10:29:59 +08:00
@c3824363 哈哈,不是这样的哦,协程的编程异常复杂,进程才是符合人类思维的。
cgsv
2018-05-30 10:31:37 +08:00
哈哈,偏个题,这样 2 年工作经验比较游戏的能给多少钱啊?
cgsv
2018-05-30 10:32:30 +08:00
@cgsv 打错。比较优秀的
easylee
2018-05-30 10:33:31 +08:00
楼主收到这么多回复,选几个稳的有用的,append 楼号吧。

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

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

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

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

© 2021 V2EX