今天面试被问傻了,大家看看该怎么回答

skdjfsk 2013-11-19 10:22:44
加精
1. c++为什么适合做底层开发? 我答效率高,底层的指针操作方便,还提供位操作等等,其实语言只是工具,每个语言都为特定的目标而设计的,侧重不同而已;(考官不满意)
2.讲讲c++中印象深刻的一些高级技术? (不知道。无法回答)

...全文
58424 575 打赏 收藏 转发到动态 举报
写回复
用AI写文章
575 条回复
切换为时间正序
请发表友善的回复…
发表回复
鑫森淼 2014-10-22
  • 打赏
  • 举报
回复
这些都是浮云,回答不知道就OK了
仙境之桥2046 2014-10-11
  • 打赏
  • 举报
回复
很精彩 赞一个
ruf 2014-08-19
  • 打赏
  • 举报
回复
OS引导起来了,只要是编译型语言都可以用来写内核的,只是说c相对来说,更贴近汇编,更适合底层人员的思考模式,不需要更多关注各种编程语言性的技巧而已
ruf 2014-08-19
  • 打赏
  • 举报
回复
C++是编译型语言,编译后的是可以在CPU上执行的指令集 好好一个话题,被上面那群货弄去争语言的好坏了。
xingbaozhushu 2014-08-13
  • 打赏
  • 举报
回复
引用 578 楼 cxb23 的回复:
万恶的积分,呼吁大家上传资料时不要积分就可以下载,影响大家工作效率.
是啊。
chdr 2014-07-29
  • 打赏
  • 举报
回复
C/C++码农路过, 无意介入语言之争, 但还是给说C++写不了操作系统内核的同学提个醒, 看看Symbian OS的实现吧. 顺便mark下.
wangen12345 2014-06-27
  • 打赏
  • 举报
回复
一个HR和一个C++的愣头青
percepto 2014-06-17
  • 打赏
  • 举报
回复
引用 18 楼 caozhy 的回复:
我说了,拿出代码证明C++效率高低,这个层次上讨论问题的是码农。 因为你和那个傻X面试官一样,提出了一个Loaded的命题。C++是否适合底层和代码的抽象程度、效率、代码长短等等本身也不能画等号。 如果你非要拿出代码,请你用C++改写下Linux内核。因为它的份额最大,当你能取代它的时候,那么你的影响力足以影响业界的观点。
为什么你说码农的时候 就觉得是在说我 - - 请问码农是什么
maxime 2014-06-14
  • 打赏
  • 举报
回复
引用 517 楼 yishuidongtian 的回复:
[quote=引用 516 楼 yishuidongtian 的回复:] [quote=引用 508 楼 rainbowsix 的回复:] [quote=引用 505 楼 yishuidongtian 的回复:] [quote=引用 493 楼 rainbowsix 的回复:] [quote=引用 472 楼 yishuidongtian 的回复:] 不对其他语言带偏见的说一下我个人的观点 首先必须说的是,C++不适合初学者,尤其不适合作为第一门语言学,第一门语言应该学C,因为C简单易上手,学完了可以很快去关注计算机的其他知识:数据结构、算法、操作系统啥的。 其次,如果要学C++,内存是必须了解的,这和C了解内存是不同的,C++程序员在了解C语言对内存的管理机制上,还需要再加上C++的对象的管理,从而构造出支持面向对象的特性。 题外话是,没有任何事实可以证明,在不使用C++面向对象特性时,C的效率比C++高,这一点大家可以先去了解了C++对象模型再来评价,而且在不使用C++面向对象特性的时候,C++的对象是可以使用malloc分配内存的,事实上,也是有内存池来管理的。 最主要的原因是,如果你要了解其他面向对象的语言模塑对象时的内存管理机制,学习C++是一个很好的途径,在这方面C++已经有足够的书使你去了解了。而且,阐述的也绝对比很对语言在支持面向对象时的阐述透彻。 当然,下面的观点是带偏见的 linus关于C++的评价以及C++适不适合写内核,这他妈就是扯淡,这个世界上的软件全他妈是内核?linus对C++的评价就是一个从没学好过物理的数学教授在给数学系学生讲物理学就是一坨屎。
请教一下 不使用C++面向对象的特性 怎么会有对象? 又怎么能对对象使用malloc分配内存? 另外如果不使用C++的面向对象的特性那跟C有什么不一样吗? [/quote] C++的对象是有区别的,使用malloc分配内存并不代表就不是C++,任何一个翻过《Effective C++》的人都知道,C++可以看作由四部分组成,至于你说的和C有什么不一样,支持不一样。使用malloc分配内存就是不使用C++面向对象特性了?C++的对象的生成包括两步:分配内存、构造对象;第二步也就是初始化,你说第一步怎么就不能使用malloc分配内存了?所以说你们在聊C++的时候,对C++存在很大偏见,而且很多根本就不了解C++,看到有人还那反汇编出来的指令条数来说C++new一个对象花了多少指令,我就想笑,不同的C++编译器在new的时候的实作方式是不一样的,你说上面那些拿一个使用malloc分配内存然后不初始化和一个给你使用malloc分配内存,然后可能会初始化的比,有毛用?只不过让别人觉得好笑罢了。会写class五个字母就算C++程序员了? 就我一个很初级的C++程序员,也不觉得自己对C会有多陌生,至少我是汇编、C、C++一路学过来的,学到C++,恰恰是它在一般特性上面的异常方便,以及它对内存的管理让我有继续学下去的动力。希望你们这些C程序员也能略微了解下C++再作评论,至少先了解下C++为何物![/quote] 嗯, 听起来好像很有道理, 不过还是有些迷惑, 你前面说 “而且在不使用C++面向对象特性的时候,C++的对象是可以使用malloc分配内存” 后面又说 “使用malloc分配内存就是不使用C++面向对象特性了?” ,这句话的意思应该是说,使用malloc也是可以使用C++面向对象的特性了。 那malloc到底是使用C++面向对象的特性没有? C++的malloc跟C的malloc有什么不一样?[/quote] 那我如果说即便是在使用了面向对象特性的时候也能使用malloc分配内存,你是否可以明白呢?C++不是纯面向对象的,但你其他能使用面向对象的类来使用这个基本类,你说是不是面向对象呢?你去看看侯捷的《STL源码剖析》,就清楚了,如果不愿意看,我就标明下我的主要意思,C++的对象的产生包括内存的分配(某些库在某些情况下使用的就是malloc)和构造对象内容两部分,简单点就是你用c malloc了一块内存。 前面说的,你可以构造一个不使用面向对象特性的类,然后再另外一个类里使用组合等面向对象的手法。 malloc与面向对象半毛钱关系都没有,我说的你之所以不能理解,是因为你比我对C++的了解还少。[/quote] C++的类的构造函数分为有用的、和没有用的,实现内存分配那一步的时候也就可以做优化。再者,面向对象是一种编程方式吧,怎么扯着扯着扯远了?C++提供的是面向对象的支持,所以你一个没有使用面向对象什么多态等基础特性的类在C++里的其他方面当然也能使用面向对象了,单个类可以没有面向对象的特性,但放到其他有面向对象特性的类里,就可以使用C++提供的对面向对象的支持了。 尼玛,好像确实不怎么好理解[/quote] 首先要理解:一个实际运行的程序,是由“程序本身的算法”和“操作系统或其他第三方库”两部分共同实现的。那么,设计C语言的时候,C语言之父决心让“C语言本身语法精简,贴近系统底层,而将由系统实现的功能(比如IO相关的、内存分配相关的)以函数库的形式提供”。 那么,在C语言设计之初,就将这些系统功能进行了标准化定义,这就是C标准库的由来。一般来说,标准库定义了标准函数的接口规范,而函数的具体实现则是由操作系统提供的,这样C语言就很容易实现跨平台了,在新的平台上提供一个新的C标准库就可以了。C标准库就主要提供了内存、IO相关的操作。所以,在C语言里面是没有直接内存分配的语句的,必须通过malloc来分配内存,所以,malloc准确说,是C的标准库函数,和C++没有任何联系。 那么,当C++诞生时,为class对象分配内存就成了一个问题:每个class对象的所需的内存尺寸是不一样的,这个内存尺寸只有编译器才知道,C++对象分配是没办法象C语言内存分配那样交给标准库来实现的,因此,C++语言中定义了一个新的关键字“new”来专门进行对象的初始化工作:分配内存和调用class的构造函数。那么,在new的实际上是调用malloc来执行实际的内存分配。所以,准确说,new才是C++的对象(内存)分配机制。 再来说一下,C++语言与C语言的比较。 C语言诞生之初的目标很明确,就是作为“系统级编写语言”,所以,C语言精简而优美,没有多余的东西,理论上可以实现任何复杂的逻辑与算法。然而,这仅仅只是理论上,因为当系统或代码规模达到一定程度,代码的管理和维护将会非常昂贵。 当80年代计算机在应用领域广泛应用时,C++应运而生,面向对象的编程模式,使得C++在面向应用的开发中远远优于C语言。但是,C++语言的内存分配却成了它在“系统级编程领域”的软肋,因为C++对象机制要求自动分配和释放对象的内存,这样就十分容易出现内存碎片化,这对于要求长时间运行的系统编程不可接受,这也是linux说C++不能承担系统编程的缘故;而另一方面,在“应用级软件开发领域”,C++继承了C语言的指针和内存模型,又导致一个小小编程漏洞就足以毁掉整个软件的内存环境,而且,极其难以追查错误源头。所以,C++是一门对程序员素质要求极高的语言。 90年代以及2000年后,Java、C#两种以虚拟机为核心的语言诞生了,彻底杜绝了C/C++可能出现的内存覆写的致命缺陷,对程序元素质要求大幅降低,开发成本也大幅降低。在2005年后,由于硬件性能的提升,Java、C#已基本接管了“应用级软件开发领域”。 总的来说,在“系统编程领域”,由于对内存、性能非常敏感,C++语言的确不合适;而在“应用领域”,必然属于虚拟机语言Java、C#。真正留给C++语言的空间只有一个狭缝空间,就是“关注性能、算法的高性能中间组件”,比如,视频编解码组件、3D引擎、网络通信组件、浏览器引擎。再就是“嵌入式设备领域”,但随着安卓系统的发展和嵌入设备性能的提高,这块迟早会让位Java。 从市场的角度,高性能中间组件也就那么几种,并对开发团队的算法技术要求也高,因此,在国内基本上没有此类组件的开发项目存在,比如,浏览器大家都在用webkit组件。 从某种意义上说,C++是一个因需求而生迅速发展,又迅速被市场抛弃的过渡编程语言。更糟糕的是,伴随C++而生的范型编程、Boost库以及许多编码技巧,同样是看起来美而已,,,除非有志于“组件级开发或高性能开发”,否则,C++语言不适合深度学习,转投Java才是明智之举。
zcsking 2014-04-29
  • 打赏
  • 举报
回复
引用 8 楼 stereoMatching 的回复:
[quote=引用 5 楼 caozhy 的回复:] C++公认不适合编写底层程序,至少比C要差得多。很少听说有用C++写操作系统的。大部分嵌入式设备也都使用C语言。 对于这种Loaded Question,你可以反问面试官,为什么你每次买春只找路边洗头房的。
Scott Meyers: Effective C++ in an Embedded Environment http://www.aristeia.com/c++-in-embedded.html 不会不适合,就怕程度不够的程序员 大多数复杂,大型且需要效率的软体都是由c过渡到c++,而不是c++过渡到c http://www.lextrait.com/vincent/implementations.html Qt老早就在嵌入式设备中发光发热多年 支持c++编译器的嵌入式设备是越来越多而不是越来越少 就可以看见c++逐渐攻入c的嵌入式王朝
引用 楼主 skdjfsk 的回复:
1. c++为什么适合做底层开发? 我答效率高,底层的指针操作方便,还提供位操作等等,其实语言只是工具,每个语言都为特定的目标而设计的,侧重不同而已;(考官不满意) 2.讲讲c++中印象深刻的一些高级技术? (不知道。无法回答)
1 : 因为效率不输给c的同时还支援了许多c没有的抽象机制,例如template和RAII 善用c++可以用更少的代码,更低的开发时间写出效率不输给c的软体 如果他质疑效率问题,认为c效率比较高 也可以向他展示boost spirit胜过c标准库的优异效率 http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/spirit/karma/performance_measurements.html 明确的告诉他更高层的抽象不代表效率一定比较差 重点是你会不会用 如果考官拿不出代码,是个一厢情愿的认为c++的效率一定输给c的半仙 这家公司不值得去,去了你大概也待不久 经过这么多年,c的效率一定比c++好的论点从来没被验证过 只有蹩脚的c程序员或c宗教的信仰者才会盲目的相信这个无法被证明的流言 如果你坚持c++的效率不输给c,而且不愿意妥协 那你可以和他说"talk is cheap, show me your codes" 直接用你写的例子干掉他写的c代码 不用担心赢不了,能用原始的c代码写出效率高于c++标准库的人 这机率绝对远低于1% 不过实验证明,就算他们的代码效率被c++的标准库打得一败涂地 通常还是会坚持“c的效率一定比c++高,不需要证明” 2 : c++的“高深技术”很多,不知道他爱那一样? TMP, expression template, policy based design,type_traits? 其实我印象最深刻的不是高深的技术,而是最朴实常用的RAII 最后就是你其实也可以考你的面试官,尤其是RAII一定要问 如果对方不懂就代表他们连c++的大门都还没踏入 十之八九在用c++写着很糟糕的代码 RAII is a must know technique for c++ programmers, no excuse. http://qtandopencv.blogspot.com/2013/10/why-raii-is-must-know-technique-for-c.html[/quote] 获益匪浅。
方紫涵 2014-01-06
  • 打赏
  • 举报
回复
引用 1 楼 wangdahu888 的回复:
1. c++为什么适合做底层开发? 我答效率高,底层的指针操作方便,还提供位操作等等,其实语言只是工具,每个语言都为特定的目标而设计的,侧重不同而已;(考官不满意) 你应该说相比之下C更适合底层开发,相比之下C++不能提供稳定的ABI接口(考官都很贱哟,你要否定..) 2.讲讲c++中印象深刻的一些高级技术? (不知道。无法回答) 这个一定要扯<<Modern C++ Design>>提到的那些奇技淫巧......
ccwRadar 2014-01-06
  • 打赏
  • 举报
回复
wangsufu77 2014-01-04
  • 打赏
  • 举报
回复
haibo521333 2013-12-06
  • 打赏
  • 举报
回复
看着个帖子,我明显看到了不同职位人的不同。 版主讨论的是需求,技术人员永远看到的只是技术。 需求决定技术,搞技术的一定要跳出来呀。
YouNeverCanTell 2013-12-06
  • 打赏
  • 举报
回复
引用 8 楼 stereoMatching 的回复:
[quote=引用 5 楼 caozhy 的回复:] C++公认不适合编写底层程序,至少比C要差得多。很少听说有用C++写操作系统的。大部分嵌入式设备也都使用C语言。 对于这种Loaded Question,你可以反问面试官,为什么你每次买春只找路边洗头房的。
Scott Meyers: Effective C++ in an Embedded Environment http://www.aristeia.com/c++-in-embedded.html 不会不适合,就怕程度不够的程序员 大多数复杂,大型且需要效率的软体都是由c过渡到c++,而不是c++过渡到c http://www.lextrait.com/vincent/implementations.html Qt老早就在嵌入式设备中发光发热多年 支持c++编译器的嵌入式设备是越来越多而不是越来越少 就可以看见c++逐渐攻入c的嵌入式王朝
引用 楼主 skdjfsk 的回复:
1. c++为什么适合做底层开发? 我答效率高,底层的指针操作方便,还提供位操作等等,其实语言只是工具,每个语言都为特定的目标而设计的,侧重不同而已;(考官不满意) 2.讲讲c++中印象深刻的一些高级技术? (不知道。无法回答)
1 : 因为效率不输给c的同时还支援了许多c没有的抽象机制,例如template和RAII 善用c++可以用更少的代码,更低的开发时间写出效率不输给c的软体 如果他质疑效率问题,认为c效率比较高 也可以向他展示boost spirit胜过c标准库的优异效率 http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/spirit/karma/performance_measurements.html 明确的告诉他更高层的抽象不代表效率一定比较差 重点是你会不会用 如果考官拿不出代码,是个一厢情愿的认为c++的效率一定输给c的半仙 这家公司不值得去,去了你大概也待不久 经过这么多年,c的效率一定比c++好的论点从来没被验证过 只有蹩脚的c程序员或c宗教的信仰者才会盲目的相信这个无法被证明的流言 如果你坚持c++的效率不输给c,而且不愿意妥协 那你可以和他说"talk is cheap, show me your codes" 直接用你写的例子干掉他写的c代码 不用担心赢不了,能用原始的c代码写出效率高于c++标准库的人 这机率绝对远低于1% 不过实验证明,就算他们的代码效率被c++的标准库打得一败涂地 通常还是会坚持“c的效率一定比c++高,不需要证明” 2 : c++的“高深技术”很多,不知道他爱那一样? TMP, expression template, policy based design,type_traits? 其实我印象最深刻的不是高深的技术,而是最朴实常用的RAII 最后就是你其实也可以考你的面试官,尤其是RAII一定要问 如果对方不懂就代表他们连c++的大门都还没踏入 十之八九在用c++写着很糟糕的代码 RAII is a must know technique for c++ programmers, no excuse. http://qtandopencv.blogspot.com/2013/10/why-raii-is-must-know-technique-for-c.html[/quote] 大牛 !!! TMP, expression template, policy based design,type_traits? 其实我印象最深刻的不是高深的技术,而是最朴实常用的RAII 这个都给元编程搞定!
cxb23 2013-12-03
  • 打赏
  • 举报
回复
万恶的积分,呼吁大家上传资料时不要积分就可以下载,影响大家工作效率.
  • 打赏
  • 举报
回复
引用 573 楼 alZou 的回复:
弱弱地问一句:有用c++在搞底层的朋友吗?
油猴!老革命您又出来啦,您还在一边树新蜂,一边破解美军加密芯片吗?您二十五年的IT生涯呀,做了这么多壮举,真的羡慕煞人。
木犀花香 2013-12-02
  • 打赏
  • 举报
回复
太高深了,会去继续学习!
alZou 2013-12-02
  • 打赏
  • 举报
回复
弱弱地问一句:有用c++在搞底层的朋友吗?
FrankHB1989 2013-12-02
  • 打赏
  • 举报
回复
最后一连留给LZ的问题吧。 忠告:没本事玩语言的别把语言只当工具,小心被语言玩。关于C++,这点我一直相信这个星球上没有哪一个自然人能做到,包括Bjarne Stroustrup、Herb Sutter、Dave Abrahams、Andrei Alexandrescu等人,极限也是玩转某一个子集。 回答LZ的问题: 1.首先是作为高级语言的C/C++及其实现能做到的但其它语言不一定能轻松做到或经常难以做到的: 标准支持的freestanding implementation,不需要性能开销很大的运行时或虚拟机; 内建的容易高效实现的底层抽象和抽象,主要包括volatile映射硬件存储、指针的实现直接抽象地址空间、位操作、restrict; 工具链较完备,资源比较多,移植可行性较大。 然后是C和C++之间的差异。主要在于工具链方面C++一般更复杂(基本上C++实现同时是C实现)。此外标准库带有的运行时开销虽然很小,但不是没有,经常需要阉割掉,这个意义上如果不是C++的额外抽象,还不如直接用C。 C++在设计上要能在运行时性能超越C,实际上也做到了一部分(例如C++98的inline完爆C89;再如std::sort可以比qsort快530%)。但是,在语言相关而体系结构无关优化上可以说C++走的并没有太远,主要原因可能的确是因为过于复杂了。所以除了关键特性来说实际未必快太多。加之不合格的C++用户实在太好找了,所以实际代码性能也未必能指望…… 2.很多…… 老一点的Template Metaprograming。 稍微时髦点的就Embedded Domain-Specific Language或者Parser Combinator啥的。 冷一点就Macro Metaprograming。 虽然都不是只有C++才能做,不过C++搞了不少东西。虽然最后一个C也能实用。 例子嘛,boost里什么都有……
加载更多回复(555)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧