好奇地了解人们的想法。我经常进行采访,在我的职业生涯中已经有足够多的时间来反射(reflection)他们,我注意到了各种各样的问题。我使这个 c++ 特定,但值得注意的是,有人通过电话问我算法复杂性问题,我什至不是说哈希查找与二叉树的复杂性是什么,我的意思更像是分析问题,例如“假设有 4 只大黄蜂,每只都在嗡嗡叫。”
现在我个人更喜欢让电话屏幕更具体一些,而将抽象问题留给白板。那么在进行 c++ 电话面试时,您会涵盖哪些主题,尤其是针对高级开发人员?
我知道还有另一个与此类似的线程,但坦率地说,它似乎完全没有捕获重点,这是关于电话屏幕,而不是面对面的采访。另外,这是更特定于 C++ 的。
最佳答案
我会问有关资源/内存管理的问题,因为它是 C++ 中的一个重要主题,并且不需要具体代码。只需勾画一个简单的假设场景,并询问他们如何确保即使在出现错误/异常时也能释放一些重要资源。假设他们正在开发网络应用程序,他们如何确保我们正确关闭套接字?当然,正确的答案是将它包装在 RAII 对象中,但不要直接问他们(很容易用谷歌搜索“RAII”,而上面的问题“你如何确保资源得到正确释放”实际上告诉你是否他们是否知道适当的技术。如果他们回答“将所有内容包装在 try/catch 中”,他们可能会遇到问题。这与有关堆和堆栈之间差异的问题很好地联系在一起。
您也可以想出一些关于异常安全的简单问题,这不需要任何实际代码。总的来说,我认为讨论所有各种 C++ 习语可能是个好主意,因为其中许多不需要太多实际代码,但仍然是重要的特定于语言的概念。
看看他们是否了解智能指针(同样最好给他们一个需要智能指针的情况,看看他们将如何解决问题),也许还有模板/元程序(在后一种情况下,可能只是找出如果他们意识到这是可能的,而不是要求他们在手机上编写实际的元程序)
你可能还想问一些未定义行为的常见区域(执行a = b++ + b++后a和b的值是多少??),或者分配一个10个元素的数组,并将 10 或 11 添加到数组指针,并询问每种情况下的结果是什么(+=10 是合法的,给你一个尾后指针,+=11 是未定义的)。或者给他们一个他们需要复制大量对象的场景,并询问他们将如何做到这一点(一次复制每个元素的普通 for 循环,memcpy 或 std::copy 是显而易见的答案。请注意 memcpy 的注意事项,它对非 POD 对象不安全)
或者询问他们的编码风格。他们如何看待迭代器?他们更喜欢普通的旧 for 循环吗?他们知道如何使用 std::for_each 或 std::transform 吗?
编辑:
似乎 a = b++ + b++(答案是未定义的行为,顺便说一句)建议特别产生了很多评论。也许人们对它读得太多了。正如 OP 所说,他更喜欢问具体(不是抽象的,并且易于通过电话解释/回答/讨论)问题,这会揭示一些关于受访者的 C++ 技能,这是一个一个简单的(是的,也许是挑剔的)例子。它背后的原因是 1) 它有一个直观的含义,这是错误的,以及 2) 在你意识到这一点之前你必须有一定水平的 C++ 经验。当然还有 3),通过电话询问既简短又容易。它不需要任何人写下代码。不,它不会透露候选人是否是“伟大的程序员”,但据我了解这个问题,这也不是目标。如果有人弄错了,那根本没有多大意义,但如果他们答对了,你就可以相当确定他们懂一点 C++。但是,如果您再次阅读我的回答,您会发现这只是我认为应该展示的一类问题的简单示例。 C++ 充满了未定义的行为,即使在看起来完全无害且直观的代码中也是如此。要求候选人识别这方面的一些实例可能会有用,无论是上面的“在同一表达式中修改同一变量两次”的例子,还是其他不同的例子。
关于c++ - 什么样的面试题适合c++手机屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/365823/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?