`

好的面试题和不好的面试题

阅读更多

C++在中国有很大的市场需求,几乎现在找工作,C++和Java还是最大的两块。从以前别人面试我,到我现在面试别人,谈不上什么面经,只能说我觉得的一些好的面试题目,和一些不太好的面试题目。

 

不好的面试题:

[1] 虚函数如何实现的。 在i = 0; ++i++之后,就属这道题最囧了。我被别人问过,我也听过我同事问这个问题。我只想说,这个题绝对不需要问。只要你不实现C++编辑器,这道题对你没有用。你只需要知道虚函数,纯虚函数是做什么用的,他们和普通函数有什么区别,就足够了。或者说,什么时候你会用虚函数,什么时候用纯虚函数。换个角度,为什么从来没有人问Java的动态绑定如何实现的呢?

 

好的面试题

[1] (5星) C++程序进入main函数之前,退出main函数之后会做些什么?

[2] (5星) 如何使用C++实现一个线程安全的singleton类,要求延迟初始化。如果这个singleton类获得了一种资源,

譬如socket,数据库的connection,如何释放呢? (这个题其实蛮难的)

[3] (5星) 你们在多线程环境中如何使用mutex。其实是要求考差对mutex进行封装,初始化即获得,并且析构的时候unlock,以避免异常抛出的情况。

[4] (5星) 实现一个itoa的函数。包括函数需要什么样的参数,返回值,为什么这么设计。这道题可以看出一个人基本的编程习惯和能力。并且可以要求对这个函数设计测试用例。

[5] (4星) C++类的static变量是什么时候初始化的,函数的static变量是什么时候初始化的?

[6] (4星) 我需要使用std::string rst来存放一个字符串拼接的结果,并且我知道这个结果大概有4k,你会怎么来拼接。其实就是考察要reserve长度,然后呢,使用+=。

[7] (3星) 这个和算法有些关系。std::map的find函数,一定是读线程安全的吗?就是说如果你有一个std::map,已经存好了内容。然后有N个线程同时find它,但是没有任何线程会往里面添加东西。这样不加锁访问,是一定安全的吗?答案是不是,有的实现就不是。 为什么?这个题目很有意思,大家可以google一下。

 

分享到:
评论
14 楼 exe 2010-08-13  
Elminster 写道
ankyhe 写道
...
[7] (3星) 这个和算法有些关系。std::map的find函数,一定是读线程安全的吗?就是说如果你有一个std::map,已经存好了内容。然后有N个线程同时find它,但是没有任何线程会往里面添加东西。这样不加锁访问,是一定安全的吗?答案是不是,有的实现就不是。 为什么?这个题目很有意思,大家可以google一下。


我很好奇,哪家的实现这种情况下是线程不安全的?我想不出理由。
SGI 的 STL 明确声明了多个线程只读共享同一个容器是安全的:http://www.sgi.com/tech/stl/thread_safety.html

另,不觉得问一下虚函数如何实现有什么大问题。固然没太大用处,但是了解一下也是好的,至少对虚函数的额外性能开销也会有个数。



同意,想不通map的读会线程不安全,如果没有修改的话,n个线程读的内容都是相同的,难道是你自己的实现?
我想你的答案是错的:)
13 楼 benjiam 2010-07-21  
c++ 神奇的地方就是没有一款c++编译器满足所有iso标准。

12 楼 healshui 2010-06-23  
  public class TestA{
     public static void main(String args[]){
      
     }
  }
11 楼 EldonReturn 2010-06-10  
不知道虚函数怎么实现的而用C++
那只能说此人是熟练地码工,缺乏探究问题的精神和能力
10 楼 wkoffee 2010-06-08  
今天碰到的情况,分析一个core dump,-O2编译的,没有debug symbol,知道一个地址是某个类的对象,但不知道具体的子类,通过vtable分析虚函数入口,最后确定具体是什么类,所以知道虚函数怎样实现还是有好处的
9 楼 Elminster 2010-06-08  
楼主人哪?

另外,boost 那么多 trick 其实并不是什么值得夸耀的事情。那些固然很聪明,但更大程度上是类似于不得不用小学数学工具来解中学题的无奈之举。
8 楼 mathgl 2010-06-01  
这个难说的很, 我隔壁做引擎的c++程序员,写的就是 better c风格的c++。不要说boost,连stl都没怎么用过。异常我敢保证他根本就没用过。


boost是对stl的补充。我用到的有些子库就属于 实验性质,有问题当然要读代码找到 并且解决。 这个  和 什么 用xx非要读源码 证明 设计失败毫无关系。

stl的源码我也看过,要说玩template的trick,和boost比有些距离。

ISO增加特性 是要投票的。。gui 库,之流连个统一的标准都没有,投票到猴年马月去了。光一个0x 现在 连gc的proposal都还要延期。

要说资金限制,说不过去,qt当时有几个人,不也一样搞起来鸟? 要我看那纯粹是组织运作效率低下。

c#那是 ecma的标准吧? cli是标准。 ms的clr是实现。这个还是不一样的。
7 楼 runes 2010-05-31  
mathgl 写道
runes 写道
mathgl 写道
虚函数 就是一 链表,函数指针的包装。

c++的 最难缠之处在于template以及使用其作的design和实现。


我感觉c++的最难缠之处在于异常。模板还好吧,只要不滥用,我觉的STL整体上说还是挺优雅的。
c++最欠缺的地方是,自身定位于一个全能选手---从底层到各类的上层应用,但是没有一个完整的标准库,一个平台一个样,有的甚至是每个公司都有自己的一套库,这个比较烦。


异常我实际用的并不多。。它的标准异常throw是放在stack上的。比较影响性能..

带有template 用法的c++和很多传统的oop风格 已经不大一样了。boost有些库穷尽template的技巧,光看也够喝一壶的了。


至于c++欠缺的东西 倒不是它的问题。c++是ISO..不是公司,或者私人组织拥有,很多很常用的gui,xml等等的库自然加上去是比较困难的。说到底它仅是另外一种系统语言。用它来做更高一层的应用开发并非它的强项。还不如用别的语言呢。


大哥,异常不是你不想用就不用的。相比写出异常安全的程序,我觉得template那点trick不算什么。
另外,别太把boost当回事,template应用最广泛的还是STL。 再说用boost就一定非得要读boost代码吗? 绝大多数人都用过STL吧,你感觉啥时候在用STL的时候非得读其代码不可呢?如果一个库非得读起代码才能使用,那么这个库设计的也忒失败了。当然如果就是没事活跃活跃脑细胞,可以去读http://www.ioccc.org/。

相比于C,我感觉C++不太称得上是系统语言,这里姑且把系统语言定义为开发系统软件(os/db)。C++现在用的比较多的地方,常见的有 游戏,电信,当然还有最近的cloud。。。。。

印象中记得程序员杂志刊登过一次BJ的采访,BJ说C++由于当时的资源亦或说财力资金的限制没有机会去做很多库,后来才出现五花八门的局面。所以说和C++是否ISO没有啥必然关系。

PS. C#就是ISO的,不知道这ISO和.NET之间的关系是如何界定的,做MS技术开发的可以讲讲。。。
6 楼 mathgl 2010-05-31  
runes 写道
mathgl 写道
虚函数 就是一 链表,函数指针的包装。

c++的 最难缠之处在于template以及使用其作的design和实现。


我感觉c++的最难缠之处在于异常。模板还好吧,只要不滥用,我觉的STL整体上说还是挺优雅的。
c++最欠缺的地方是,自身定位于一个全能选手---从底层到各类的上层应用,但是没有一个完整的标准库,一个平台一个样,有的甚至是每个公司都有自己的一套库,这个比较烦。


异常我实际用的并不多。。它的标准异常throw是放在stack上的。比较影响性能..

带有template 用法的c++和很多传统的oop风格 已经不大一样了。boost有些库穷尽template的技巧,光看也够喝一壶的了。


至于c++欠缺的东西 倒不是它的问题。c++是ISO..不是公司,或者私人组织拥有,很多很常用的gui,xml等等的库自然加上去是比较困难的。说到底它仅是另外一种系统语言。用它来做更高一层的应用开发并非它的强项。还不如用别的语言呢。
5 楼 iamlotus 2010-05-31  
chandler 写道
Java的动态绑定?反射么?

不是吧,应该是说virtual吧。
话说这个其实是有人问的,问实现。
4 楼 chandler 2010-05-30  
Java的动态绑定?反射么?
3 楼 runes 2010-05-30  
mathgl 写道
虚函数 就是一 链表,函数指针的包装。

c++的 最难缠之处在于template以及使用其作的design和实现。


我感觉c++的最难缠之处在于异常。模板还好吧,只要不滥用,我觉的STL整体上说还是挺优雅的。
c++最欠缺的地方是,自身定位于一个全能选手---从底层到各类的上层应用,但是没有一个完整的标准库,一个平台一个样,有的甚至是每个公司都有自己的一套库,这个比较烦。
2 楼 mathgl 2010-05-29  
虚函数 就是一 链表,函数指针的包装。

c++的 最难缠之处在于template以及使用其作的design和实现。
1 楼 Elminster 2010-05-28  
ankyhe 写道
...
[7] (3星) 这个和算法有些关系。std::map的find函数,一定是读线程安全的吗?就是说如果你有一个std::map,已经存好了内容。然后有N个线程同时find它,但是没有任何线程会往里面添加东西。这样不加锁访问,是一定安全的吗?答案是不是,有的实现就不是。 为什么?这个题目很有意思,大家可以google一下。


我很好奇,哪家的实现这种情况下是线程不安全的?我想不出理由。
SGI 的 STL 明确声明了多个线程只读共享同一个容器是安全的:http://www.sgi.com/tech/stl/thread_safety.html

另,不觉得问一下虚函数如何实现有什么大问题。固然没太大用处,但是了解一下也是好的,至少对虚函数的额外性能开销也会有个数。

相关推荐

    前端面试题大全(40个VUE3.0面试题PDF、CSS、JS、REACT、全栈面经、小程序、性能优化)千道面试题,送前端简历模板

    好的前端面试题可以帮助大家快速就业,单单靠背面试题是错误的想法,要透过面试题真正理解掌握对应的前端知识点才行。本套面试题主要是通过习题让大家真正掌握对应的前端知识点!!! 1 前端知识点分类详细 2 每个...

    java面试题,肯定好,不好怪我!

    ### Java面试知识点详解 #### 一、成员访问修饰符与非访问成员修饰符 在Java中,`public`, `private`, `protected` 和无修饰符(即默认的包级访问权限)是四种用来控制类成员(如字段、方法)可见性的访问修饰符。...

    程序员面试题汇总

    Leetcode之类抄题的山寨网站可以刷,但是建议复习一下基本知识(比如基本的算法和数据结构,自己练练他们的实现),然后根据topcoder的教程学会这些题目的套路,按照套路来不会造成原题都会变一下就抓瞎的情况。...

    2023年软件测试经典面试题.doc

    在软件测试领域,面试题是一个非常重要的部分,它可以帮助 testers 和开发者更好地理解软件测试的概念和技术。下面,我们将对软件测试经典面试题进行详细的解释和分析。 1. 什么是兼容性测试? 兼容性测试是软件...

    C++好的面试题和不好的面试题

    好的面试题应该能反映出候选人在实际工作中可能遇到的问题,并能考察他们的理解、解决问题的能力以及编程习惯。以下是一些关于C++面试题目的分析,包括一些被认为是不好的问题以及推荐的优质问题。 不好的面试题: ...

    JAVA面试题JAVA面试题JAVA面试题JAVA面试题

    所以在谈话和提问式的面试中,总有一些问题是面试者常常提问的,例如:“简单地自我介绍”、“为什么要应聘这个职位”、“你认为你为什么能胜任这个工作”、“你能不能举两个例子来证明你刚才所说的能力和素质”、 ...

    测试工程师必备的面试题

    "测试工程师必备的面试题" 本文将对软件测试基础知识进行详细的解释,涵盖了软件测试的定义、目的、目标、缺陷、黑盒测试、等价类划分、边界值分析、决策分析法、因果图分析法、测试用例设计、软件生命周期、软件...

    逻辑题 计算题 面试题 JAVA资料(嗷嗷全).rar

    标题中的“逻辑题 计算题 面试题 JAVA资料(嗷嗷全).rar”表明这是一个包含各种逻辑、计算和面试题目,特别是与JAVA编程语言相关的综合资源包。这个压缩文件很可能包含了各种Java编程的练习题,算法挑战,以及可能的...

    高级面试题刷多了,这些Android基础面试题你还会做吗?

    想起疫情之前在给公司招聘3年以下经验的android开发人员,趁这个空闲的机会整理下一些基本的面试题,不是很多,我个人觉得比较典型的,时间长了一些不常用的细节问题都快忘记了,也许是轮子用多了吧,如果能在赶项目...

    医疗卫生面试真题:卫生类典型面试题汇总.docx

    【经典话题二】如果到一个新单位,和同事关系不好,你怎么处理? 这个问题考察的是应聘者的团队合作能力和解决人际冲突的能力。回答时,应当展现积极的态度和解决问题的决心。首先,进行自我反省,检查自己的言行...

    香港大学面试题(三)打印.pdf

    发达国家将垃圾倒到发展中国家,并给与一些补偿,是否好不好?这是一个非常复杂的问题。发达国家将垃圾倒到发展中国家,可能会对当地环境造成破坏。但是,如果发展中国家可以通过环境污染防治投资和环境保护法律法规...

    Linux 41 道面试题及答案.docx

    Linux 系统管理员面试题及答案 本文总结了 Linux 系统管理员面试题及答案,涵盖了 Linux 基础知识、运维知识、存储系统、网络管理、缓存服务器等方面的知识点。 一、Linux 基础知识 1. 什么是运维?运维是指大型...

    网页设计面试题.docx

    网页设计面试题 本文档提供了网页设计面试题,涵盖了网页设计的各种方面,包括设计理念、技术技能、工具使用、设计风格、浏览器使用、语言编程、数据库知识、行业门户网站设计、Web2.0 风格网站设计等。同时,还...

    农行面试题zz.pdf

    农行面试题zz.pdf 本文整理了农行面试中的常见问题,并提供了相应的回答思路和参考答案。这些问题涵盖了自我介绍、家庭情况、业余爱好、崇拜的人、座右铭、缺点、失败经历等方面。了解这些问题背后的“猫腻”至关...

    教师资格证结构化面试真题.doc

    【教师资格证结构化面试真题解析】 面试是教师资格认证过程中的重要环节,它旨在评估候选人的教育理念、教学能力和...通过自我认知和人际沟通的实践,候选人可以更好地适应教师角色,为未来的教育工作奠定坚实基础。

Global site tag (gtag.js) - Google Analytics