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

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

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

10959 次点击
所在节点    程序员
120 条回复
pkookp8
2018-05-29 16:47:23 +08:00
为啥很多公司招聘喜欢把 c++和 c 放一起,明明差好多
说一个 c 的
没经验能半小时手写一个链表
一年能写代码,15 分钟手写一个双向链表 /排序等等
二年能看反汇编调试出错位置,编译失败分分钟修改好,编译步骤了然于心。
三年写代码能力精进,讲解代码或项目井井有条,有良好的各种意识例如编程规范,文档。特殊情况下能够修改二进制文件来达到让异常程序正常运行的目的
natscat
2018-05-29 16:48:13 +08:00
我是面试官的话可能会问下 epoll 然后由这个展开问下线程进程 还有就是些基本的数据结构
Applenice
2018-05-29 16:51:54 +08:00
@pkookp8 是的,看招聘信息的时候确实好多放在一起~~谢谢您,嘿嘿
Applenice
2018-05-29 16:53:14 +08:00
@natscat 谢谢~~
pkookp8
2018-05-29 16:57:45 +08:00
@Applenice 这是我这边的情况,因为人招不到,会写链表的基本都过了,还招不到。。。
我不了解其他的牛人。像 2 楼说的也会根据某个项目,某个特性或系统实现往深层问。当初招我的人就是拿一个 printf 开始问,入参是什么,怎么实现的,为什么可以变参,参数怎么获得等等,看看我对这个了解多深
Applenice
2018-05-29 17:15:43 +08:00
@pkookp8 这样子,了解,感谢~之前我面试的时候就有写链表逆序
Chyroc
2018-05-29 17:59:30 +08:00
@pkookp8 「修改二进制文件来达到让异常程序正常运行的目的」这个是怎么做到的
GeruzoniAnsasu
2018-05-29 18:40:11 +08:00
@Chyroc 我理解是非常小的 patch,比如改改值,改改条件跳转,这种级别的而已
pkookp8
2018-05-29 18:48:47 +08:00
@Chyroc 说起原理,其实就是一个常数编译在二进制文件中,你修改这个常数就行了。因为很多时候库是不开源的,没办法从源码编译,又很难推动二进制文件的提供方。所以我也说是特殊情况下没办法的办法
我组长手撸二进制的时候我都惊呆了,第一次发现还能这么做
当然,怎么找到这个常数是关键
有两种,一种通过编译器反汇编,确定某个参数是有问题的,修改再重新编译,一种改二进制。第二种比较难,除非是特殊值,比如 0x12345678 这种有规律的,第一种要能分析汇编。单纯搞 c 的应该会接触到汇编,但又不是必须的,所以即使只是会看,也可以多一种解决问题的思路
GeruzoniAnsasu
2018-05-29 18:49:14 +08:00
前面有人说了 C,我来说一个我同学,搞 C++的,做主(switch)机游戏(炒冷饭)
第一年的时候我们讨论过的问题有,static object 的初始化,allocator,unique_ptr 所有权,CRTP,这种东西
第二年(今年)我已经跟不上他了:two phase name lookup 和类型推导你了解得多吗
pkookp8
2018-05-29 18:49:50 +08:00
@GeruzoniAnsasu 是,就改一个值,一条指令。而且很难做到增删,只能做到改
GeruzoniAnsasu
2018-05-29 18:53:14 +08:00
@pkookp8 哈哈哈哈,其实吧,这种东西对于学安全的特别是二进制相关方面的同学来说属于入门基本功,增删也是能做到的,但很蛋疼不会这么弄就是了
changnet
2018-05-29 18:57:26 +08:00
前面两位太偏底层了吧。做业务的谁整天搞那些东西,学生吗
across
2018-05-29 19:01:31 +08:00
上面说的偏 c。一两年经验面 c++一般都是 stl 和 oo 的题
shijingshijing
2018-05-29 19:08:21 +08:00
@pkookp8
@natscat
现在搞底层的都这么不济了么?写个链表都 pass,以前不是起步就是翻转二叉树,进阶手写红黑树么。。。

IPC 和多线程不都是操作系统入门必备的么。。。

话说撸 C/C++真的是吃力不讨好,性价比不高~

最后,@pkookp8 你说的 C 和 C++差好多是个啥意思,是 C 比 C++差好多还是 C++比 C 差好多?
maxco292
2018-05-29 19:12:18 +08:00
@GeruzoniAnsasu Two phase name lookup 模板名称查找,算是 C++阴暗角落之一了( LLVM 团队博客实现这个功能单独发了一篇博客 http://blog.llvm.org/2009/12/dreaded-two-phase-name-lookup.html ),了解模板 /类型推导这东西,推荐( https://github.com/wuye9036/CppTemplateTutorial/blob/master/ReadMe.md
dosmlp
2018-05-29 19:19:51 +08:00
这又不是学校你几年级应该学会哪些东西,应该能考到多少分数,60 分才及格。
实际上,工作中一般都是根据公司业务特点来招人的,你说你汇编玩的溜,人家公司又不搞二进制安全,
当然你会的多总是好的,
加入我来面试,我比较注重基础,包括操作系统和语言的,如果一些基础概念都搞不清我觉得你这人太虚,
别笑,我遇到过 5 年 经验的还不知道线程是啥
pkookp8
2018-05-29 19:30:55 +08:00
@shijingshijing 差别好大的意思。因为性价比不高,所以没人,因为没人,所以招人要求低。主要是工资低,加班多,最终就是能写个简单的链表就行就
pkookp8
2018-05-29 19:32:32 +08:00
@GeruzoniAnsasu 因为汇编级都是偏移,做增删要改非常多的东西,不过貌似听说有专业的编辑器能做到,我接触不多,还是个渣
shijingshijing
2018-05-29 19:34:56 +08:00
@pkookp8 那你觉得你招人碰到的到底是写 C 厉害的人多还是写 C++厉害的人多? 你是说写 C++的对底层了解的不够深入么?能力偏向工程所需的设计模式和 OOP ?

PS:专门搞汇编破解什么的,有一个神器叫 IDA Pro

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

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

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

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

© 2021 V2EX