﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-zhuxin-文章分类-面试题</title><link>http://www.cppblog.com/zhuxin/category/20137.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Nov 2012 06:10:57 GMT</lastBuildDate><pubDate>Fri, 02 Nov 2012 06:10:57 GMT</pubDate><ttl>60</ttl><item><title>new与malloc的区别</title><link>http://www.cppblog.com/zhuxin/articles/193898.html</link><dc:creator>zhuxin</dc:creator><author>zhuxin</author><pubDate>Fri, 26 Oct 2012 05:55:00 GMT</pubDate><guid>http://www.cppblog.com/zhuxin/articles/193898.html</guid><wfw:comment>http://www.cppblog.com/zhuxin/comments/193898.html</wfw:comment><comments>http://www.cppblog.com/zhuxin/articles/193898.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuxin/comments/commentRss/193898.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuxin/services/trackbacks/193898.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;malloc是C/C++语言的标准库函数，new是C++运算符。它们都可以申请动态内存和释放内存。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new自动计算需要分配的空间，而malloc需要手工计算字节数。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new是类型安全的，而malloc不是。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new调用constructor，而malloc不能。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new operator由两步构成，分别是operator new和contruct。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面，讨论一下C++里面的new相关知识。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有三种：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一种：new operator，也叫做new表达式；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string* ps = new string("abc");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;它做了两件事情：申请内存和初始化对象。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第二种：operator new，也叫做new操作符。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void* buffer = operator new(sizeof(string));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意多了一个operator。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第三种：placement new，是operator new重载的一个版本。它用于在给定的内存中初始化对象，也就是说你手中已有一块闲置的内存。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void* buffer = new(buffer) string("abc");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;调用了placement new，在buffer所指向的内存中初始化string类型的对象，初始值是"abc"。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><span style="color: red">那么，为什么要有placement new那？</span><br /></strong><strong style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong style="color: #ff0000">我们知道使用new操作符分配内存需要在堆中查找足够大的剩余空间，这个操作速度是很慢的，而且有可能出现无法分配内存的异常（空间不够）。 placement new就可以解决这个问题。我们构造对象都是在一个预先准备好了的内存缓冲区中进行，不需要查找内存，内存分配的时间是常数；而且不会出现在程序运行中途 出现内存不足的异常。所以，placement new非常适合那些对时间要求比较高，长时间运行不希望被打断的应用程序。</strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src ="http://www.cppblog.com/zhuxin/aggbug/193898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuxin/" target="_blank">zhuxin</a> 2012-10-26 13:55 <a href="http://www.cppblog.com/zhuxin/articles/193898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>帽子问题</title><link>http://www.cppblog.com/zhuxin/articles/193858.html</link><dc:creator>zhuxin</dc:creator><author>zhuxin</author><pubDate>Thu, 25 Oct 2012 11:55:00 GMT</pubDate><guid>http://www.cppblog.com/zhuxin/articles/193858.html</guid><wfw:comment>http://www.cppblog.com/zhuxin/comments/193858.html</wfw:comment><comments>http://www.cppblog.com/zhuxin/articles/193858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuxin/comments/commentRss/193858.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuxin/services/trackbacks/193858.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一群人开舞会，每人头上都戴着一顶帽子。帽子只有黑白两种，黑的至少有一顶。每个人都能看到其它人帽子的颜色，却看不到自己的。主持人先让大家 看看别人头上戴的是什幺帽子，然后关灯，如果有人认为自己戴的是黑帽子，就打自己一个耳光。第一次关灯，没有声音。于是再开灯，大家再看一遍，关灯时仍然 鸦雀无声。一直到第三次关灯，才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子？<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解法：很简单，第几次想起就有几顶黑帽子。</p><img src ="http://www.cppblog.com/zhuxin/aggbug/193858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuxin/" target="_blank">zhuxin</a> 2012-10-25 19:55 <a href="http://www.cppblog.com/zhuxin/articles/193858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>给你一块钱，一天的利率是2%，问一年之后是多少？半年那？</title><link>http://www.cppblog.com/zhuxin/articles/193857.html</link><dc:creator>zhuxin</dc:creator><author>zhuxin</author><pubDate>Thu, 25 Oct 2012 11:47:00 GMT</pubDate><guid>http://www.cppblog.com/zhuxin/articles/193857.html</guid><wfw:comment>http://www.cppblog.com/zhuxin/comments/193857.html</wfw:comment><comments>http://www.cppblog.com/zhuxin/articles/193857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuxin/comments/commentRss/193857.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuxin/services/trackbacks/193857.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;给你一块钱，一天的利率是2%，问一年之后是多少？半年那？<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解法：一年：1.02 ^ 365 = 1377<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 半年：开根即可 = 37<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src ="http://www.cppblog.com/zhuxin/aggbug/193857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuxin/" target="_blank">zhuxin</a> 2012-10-25 19:47 <a href="http://www.cppblog.com/zhuxin/articles/193857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>32支球队，进行淘汰赛，问最少多少场比赛决出冠军？</title><link>http://www.cppblog.com/zhuxin/articles/193856.html</link><dc:creator>zhuxin</dc:creator><author>zhuxin</author><pubDate>Thu, 25 Oct 2012 11:44:00 GMT</pubDate><guid>http://www.cppblog.com/zhuxin/articles/193856.html</guid><wfw:comment>http://www.cppblog.com/zhuxin/comments/193856.html</wfw:comment><comments>http://www.cppblog.com/zhuxin/articles/193856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuxin/comments/commentRss/193856.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuxin/services/trackbacks/193856.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32支球队，进行淘汰赛，问最少多少场比赛决出冠军？<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解法一：32进16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16进8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8进4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4进2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2进1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;总共：16 + 8 + 4 + 2 +1 = 31<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解法二：一场比赛淘汰一个人，所以，共32 - 1 = 31。<img src ="http://www.cppblog.com/zhuxin/aggbug/193856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuxin/" target="_blank">zhuxin</a> 2012-10-25 19:44 <a href="http://www.cppblog.com/zhuxin/articles/193856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>找三个满足勾股定理的数字？</title><link>http://www.cppblog.com/zhuxin/articles/193855.html</link><dc:creator>zhuxin</dc:creator><author>zhuxin</author><pubDate>Thu, 25 Oct 2012 11:37:00 GMT</pubDate><guid>http://www.cppblog.com/zhuxin/articles/193855.html</guid><wfw:comment>http://www.cppblog.com/zhuxin/comments/193855.html</wfw:comment><comments>http://www.cppblog.com/zhuxin/articles/193855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuxin/comments/commentRss/193855.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuxin/services/trackbacks/193855.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;勾股定理：a ^ 2 + b ^ 2 = c ^ 2。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;常见的勾股数：3 4 5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6 8 10<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp; 12 15<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;12&nbsp;13<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在，让你找三个不一样的出来。比如说7&nbsp; 24&nbsp; 25。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a ^ 2 = c ^ 2 - b ^ 2 = （c - b）* (c + b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对a ^ 2进行因式分解即可。<img src ="http://www.cppblog.com/zhuxin/aggbug/193855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuxin/" target="_blank">zhuxin</a> 2012-10-25 19:37 <a href="http://www.cppblog.com/zhuxin/articles/193855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有 1000 个一模一样的瓶子，其中有 999 瓶是普通的水，有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在，你只有 10 只小白鼠和一星期的时间，如何检验出哪个瓶子里有毒药？ </title><link>http://www.cppblog.com/zhuxin/articles/193849.html</link><dc:creator>zhuxin</dc:creator><author>zhuxin</author><pubDate>Thu, 25 Oct 2012 11:30:00 GMT</pubDate><guid>http://www.cppblog.com/zhuxin/articles/193849.html</guid><wfw:comment>http://www.cppblog.com/zhuxin/comments/193849.html</wfw:comment><comments>http://www.cppblog.com/zhuxin/articles/193849.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuxin/comments/commentRss/193849.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuxin/services/trackbacks/193849.html</trackback:ping><description><![CDATA[<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>问题：</span><span>有1000个一模一样的瓶子，其中有999瓶是普通的水，有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在有一些老鼠（无穷），给你一个星期时间，问最少需要几只老鼠可以找出这瓶有毒药的水？<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解答：2&nbsp;^ 10 = 1024 &gt; 1000，所以，最少需要10个老鼠。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将1-1000表示为二进制形式：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1234&nbsp;&nbsp; 5678<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;0000&nbsp;&nbsp;&nbsp;0001<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;0000&nbsp;&nbsp; 0010<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp; 0000&nbsp;&nbsp;&nbsp;0011<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp; 0000&nbsp;&nbsp; 0100<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp; 0000&nbsp;&nbsp;&nbsp;0101<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp; 0000&nbsp;&nbsp; 0110<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp; 0000&nbsp;&nbsp; 0111<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp; 0000&nbsp;&nbsp;&nbsp;1000<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp; 0000&nbsp;&nbsp;&nbsp;1001<br />&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;0000&nbsp;&nbsp;&nbsp;1010<br />&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;0000&nbsp;&nbsp;&nbsp;1011<br />&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp; 0000&nbsp;&nbsp;&nbsp;1100<br />&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp; 0000&nbsp;&nbsp; 1101<br />&nbsp;&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;0000&nbsp;&nbsp;&nbsp;1110<br />&nbsp;&nbsp;&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;0000&nbsp;&nbsp;&nbsp;1111<br />&nbsp;&nbsp;&nbsp;&nbsp;&#8230;&#8230;<br />&nbsp;&nbsp;&nbsp; 如上所示：1号老鼠喝第一位为1的水<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2号老鼠喝第二位为1的水<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3号老鼠喝第三位为1的水<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4号老鼠喝第四位为1的水<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5号老鼠喝第五位为1的水<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6号老鼠喝第六位为1的水<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7号老鼠喝第七位为1的水<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8号老鼠喝第八位为1的水<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9号老鼠喝第九位为1的水<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10号老鼠喝第十位为1的水<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果i号老鼠死了，则第i位为1。否则，为0。最后得到的数字即为所求。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;扩展：如果你有两个星期的时间（换句话说你可以做两轮实验），为了从1000个瓶子中找出毒药，你最少需要几只老鼠？注意，在第一轮实验中死掉的老鼠，就无法继续参与第二轮实验了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;提示：用三进制数表示即可。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>  <img src ="http://www.cppblog.com/zhuxin/aggbug/193849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuxin/" target="_blank">zhuxin</a> 2012-10-25 19:30 <a href="http://www.cppblog.com/zhuxin/articles/193849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>