﻿<?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++博客-life02-随笔分类-笔试</title><link>http://www.cppblog.com/life02/category/11788.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Feb 2012 06:01:41 GMT</lastBuildDate><pubDate>Tue, 28 Feb 2012 06:01:41 GMT</pubDate><ttl>60</ttl><item><title>字符转int(转)</title><link>http://www.cppblog.com/life02/archive/2012/02/21/166147.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Tue, 21 Feb 2012 08:37:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2012/02/21/166147.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/166147.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2012/02/21/166147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/166147.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/166147.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/life02/archive/2012/02/21/166147.html'>阅读全文</a><img src ="http://www.cppblog.com/life02/aggbug/166147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2012-02-21 16:37 <a href="http://www.cppblog.com/life02/archive/2012/02/21/166147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>链表反转 （转）</title><link>http://www.cppblog.com/life02/archive/2012/02/21/166145.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Tue, 21 Feb 2012 08:32:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2012/02/21/166145.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/166145.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2012/02/21/166145.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/166145.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/166145.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/life02/archive/2012/02/21/166145.html'>阅读全文</a><img src ="http://www.cppblog.com/life02/aggbug/166145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2012-02-21 16:32 <a href="http://www.cppblog.com/life02/archive/2012/02/21/166145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符逆序（转载）</title><link>http://www.cppblog.com/life02/archive/2012/02/21/166143.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Tue, 21 Feb 2012 08:26:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2012/02/21/166143.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/166143.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2012/02/21/166143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/166143.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/166143.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/life02/archive/2012/02/21/166143.html'>阅读全文</a><img src ="http://www.cppblog.com/life02/aggbug/166143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2012-02-21 16:26 <a href="http://www.cppblog.com/life02/archive/2012/02/21/166143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Activity的启动模式（转）</title><link>http://www.cppblog.com/life02/archive/2012/02/21/166138.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Tue, 21 Feb 2012 08:06:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2012/02/21/166138.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/166138.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2012/02/21/166138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/166138.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/166138.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/life02/archive/2012/02/21/166138.html'>阅读全文</a><img src ="http://www.cppblog.com/life02/aggbug/166138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2012-02-21 16:06 <a href="http://www.cppblog.com/life02/archive/2012/02/21/166138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android笔试总结 (转)</title><link>http://www.cppblog.com/life02/archive/2012/02/21/166136.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Tue, 21 Feb 2012 07:43:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2012/02/21/166136.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/166136.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2012/02/21/166136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/166136.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/166136.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/life02/archive/2012/02/21/166136.html'>阅读全文</a><img src ="http://www.cppblog.com/life02/aggbug/166136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2012-02-21 15:43 <a href="http://www.cppblog.com/life02/archive/2012/02/21/166136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个HR给应届毕业生的面试建议 后悔看到的太晚了 （转）</title><link>http://www.cppblog.com/life02/archive/2009/11/27/102098.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Fri, 27 Nov 2009 13:14:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/11/27/102098.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/102098.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/11/27/102098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/102098.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/102098.html</trackback:ping><description><![CDATA[开始之前务必记住：<br><br>　　黄金法则：<font color=#ff0000>80/20---你要承担起80%的谈话而面试官只会说20%。<br></font><br>　　白金法则：<font color=#ff0000>你必须试着控制面试的节奏和话题。<br></font><br>　　钻石法则：<font color=#ff0000>对于没有把握的问题，抛回给面试官。<br></font><br>　　1．在一分钟内介绍一下你自己<br><br>　　这似乎是必答题。不要以为这很容易。如果你用一分钟来重复你的简历，恭喜你，你的印象加分没有了！建议你最多用二十秒钟介绍自己的姓名、学校、专业。然后话锋一转，引出自己的优势或强项。一定要在最短时间内激发起面试官对你的好感，或者至少是兴趣。<br><br>　　成功的模式可以是：我叫XXX，英文名字XXX，XX省XX市人，今年6月将从XX学校XX专业本科（专科）毕业。除了简历上您看到的介绍，我愿意特别说一下我在XXX方面的特长/我最大的特点是&#8230;&#8230;（给出事例）。正是基于对自己这方面的自信，使我有勇气来应聘贵公司的XXX这一职位。（看表）一分钟到了，希望我没有超时。（很阳光的微笑）<br><br>　　如果面试官不是EQ太低，你的最后一句话应该会使他放松和微笑。资历嫩一点的还会接着问：&#8220;为什么你会这么认为呢？&#8221;如果他真的这么问你，Bingo!你完全有机会操纵这次面试！<br><br>　　2．应届生经常会被问到的一个问题是：你为什么会选择你目前学习的专业呢？千万当心，这个问题的目的是考察你的DecisionQuality这一项胜任力，所以不要简单的说&#8220;感兴趣&#8221;或者&#8220;就业前景乐观&#8221;等。给大家一个成功的范例（同样适用于诸如&#8216;您所做过的一个成功/最大的决定是什么&#8221;）：<br><br>　　问：张先生，您为什么会选择财务专业呢？<br><br>　　答：的确，财务已经连续多年成为高校热门专业，这造成了就业时无可避免的激烈竞争。可当初我选择财务专业时并不是单纯因为它的热门程度。我早就把就业目标锁定在苏州工业园区的外资企业。根据我高三时搜集到的统计资料，园区当时有外企XXX家，而且每年以XXX%的速度在增加。以每个公司财务部至少5个人计算（总账，应收应付，税务，出纳再加上一个经理），加上园区的平均离职率是15%，则在我毕业时，可以有XXX个空缺。我毕业那年应该全国有XX相关专业的毕业生。其中可能有10%会瞄准苏州，而我填报的苏州大学在当地口碑尚可，属于中等偏上。那么，有1/2的对手能被我淘汰。再加上我就在苏州本地学习，四年中可以更早的寻求机会，所以，我很有信心的选择了这个专业。<br><br>　　其实，没有哪个面试官会相信你真的作过如此缜密的调查分析，但你已经展示了你做决策时的思路，所以可以加分。<br><br>　　记住：所有的回答要符合你专业的特点。不要说得太到位，可以自圆其说就行了，不然，他们会觉得你要么太虚伪，要么太狂妄。还有，应该表示对自己的专业的确感兴趣，或者增加点戏剧效果：我本来理解的财务管理就是管账，所以开始的时候还真后悔了一阵，直到大三时开始了在企业的实践，才有了改观，并真正喜欢上了我的专业。这样显得真实可信，更重要的是，很自然的由你引导到准备好的问题：实习的收获。<br><br>　　3．为了考察您LearningontheFly这一条胜任力，通常我们会问您在实习期间的收获。此时，不要夸大自己的成绩，谦虚一点。还有，不妨说一下自己的失误（不用怕，毕竟你是在实习）。记住：详细说明当时的情况（Situation），你要达到的目的（Task），你采取了哪些步骤（Actions），事情的结果（Result），还有你得到的经验教训(Lessonlearned)以及后来怎样运用到工作中避免犯类似的错误。最后做出总结：原来书本上的知识要能够在工作中熟练运用，这期间还有很长的一段路要走。还可以说：回到学校后，我对自己的实习经历作了一番总结，发现自己在XXX方面还需要加强。所以，我很注意利用大学的最后一个学期来弥补这一不足。现在，我对自己很有信心，如果时间能够倒流，我相信我能做到更好。<br><br>　　4．你有过和别人合作的经历吗？（千万要回答&#8220;有&#8221;）那么，在这过程中，你是如何处理意见分歧的呢？现在是考察你的ConflictsManagement。现在的绝大部分企业都不欣赏没有原则的老好人。所以，你要把自己包装得强势一些。<br><br>　　我本人比较满意的回答：<br><br>　　每个人在团队中都应该可以自由坦诚地发表意见，我会非常认真的聆听，分析；但对于自己的意见我不会没有原则的轻易放弃。民主过后还需要集中。我是学校英语俱乐部的主席，在组织校际年度联欢时，有两个干事的意见和我不一致。（停顿一下，让面试官记住你的这个闪光点）我和他们开了会。大家都阐述了各自的理由。很遗憾，我仍然没有说服这两人。在这种情况下，我感谢他们的积极参与，但表示仍然会采用我的方案。我的理念是：Meeting不等于Voting，完全不需要少数服从多数；我是负责人，我相信自己有能力采取最佳方案；假如失败了，我也会承担主要责任。而如果我是团队的普通一员，我会保留自己的意见，但还是认真执行管理者已经做出的决策。当然，学校毕竟不同于公司，情况会更加复杂，但我坚信，只要遵循&#8220;对事不对人&#8221;的原则，任何问题都可以得到解决。<br><br>　　在回答时，一定要眼睛看着面试官，微笑，以冲淡你的咄咄逼人。<br><br>　　如果你实在没有把握，可以把问题抛还给面试官，试举一例（还是同样的问题）：<br><br>　　问：你是如何处理意见分歧的呢？<br><br>　　答：您问的恰好也是我最困惑的一点，而学校里老师从来不给我们这样的指点。一方面，我不想做没有原则的老好人，另一方面，大家都是朝夕相处的同学，我不想让他们觉得我盛气凌人。我当时是这样做的：&#8230;&#8230;可一直到现在，我都不知道是否作的正确，也许我可以从您那里得到一些指教，您说我当时这么做有问题吗？<br><br>　　如果对方马上对你言传身教，那他铁定是菜鸟，你不用紧张了，因为，合理的反应应该是不置可否的说：其实这个问题永远不会有标准答案。<br><br>　　5．有人问起多个问题同时出现时，应该如何解决。这就是PrioritySetting的胜任力。应对思路是把所有要处理的事情按轻重缓急分成4个象限：重要而且紧急；重要但不紧急；不重要但紧急；不重要也不紧急。但记住，不要直接叙述这个思路，这会让人觉得你不像应届生。还是通过举例说明比较好。我面试过的一个比较好的例子：我在大三时正好要复习准备英语6级考试，这时有机会可以去一家企业做兼职部门助理，但需要每周花三个半天。同时，每月一次的英语沙龙活动要组织安排，还要(不好意思地说)抽空陪陪女朋友（最后一点很重要，可以活跃气氛，还为下面制造了一个不重要不紧急的事例）。我当时利用没有课程的下午去公司工作，一般要到5点半回学校。在公车上的30分钟正好用来总结当天在公司的收获和需要了解的知识。在食堂与女朋友吃晚饭，六点半去教室自习，到十点回宿舍。英语沙龙的工作委派给大二的两个干事，他们每天会到自习教室找我谈10分钟，我会给他们一些建议。这样，我没有花太多的精力在沙龙活动上，可对整个过程都有了解和掌控。后来6级考试顺利通过，那家公司对我的工作评价很高，我也学了很多东西；英语沙龙的活动如期举行，我和女朋友也没有疏远。<br><br>　　这同时展示了三条胜任力：prioritysetting；delegation和work/lifebalance<br><br>　　作为应届生，在面试前，应该了解一下外企的部门架构。以欧美企业为例，一般部门内的职位从低到高依次为：助理（如果是本科生，有时候可以跳过）---专员---资深专员---主管---资深主管---部门副经理/SectionManager---部门经理。一般，主管要求有5年以上的相关工作经验，这是一个分水岭。好，回过来谈谈面试时如何回答关于职业生涯规划问题。其实,这种问题并不需要你回答得无懈可击,这也办不到---你说得通俗了,认为你胸无大志;回答太专业了,又觉得你好高鹜远.<br><br>　　回答这类问题，有以下几点可以帮你加分：<br><br>　　1．设定一个与自己专业相关的长远目标；这个目标要和公司的工作有关但不要局限在企业内部（因为空间有限，会遭遇许多太过于细节的问题）。例如，HR专业的学生可以说，自己的目标是在35岁之前，也就是10年内，成为一名优秀的人才测评专家或者资深企业人力资源顾问；工程技术专业的学生，可以成为精益生产专家或者黑带大师；IT专业则可以在信息资源整合和ERP解决方案方面成为专家，等等。注意，要着重在你想做些什么，而不是你想爬到什么级别。<br><br>　　2．把这个目标分解，以1年，3年，5年，10年的进度，逐步推进。这个就要靠你自己编了，恕在下不能一一举例。记住，每个阶段都要说明你能为公司做出怎样的贡献，你能得到怎样的提高，这与你长远目标的关系在哪里。此时，可以适当联系到刚刚提到的部门架构。<br><br>　　3．在此过程中，除了自己想办法不断充电，还要说一下你希望公司可以给你怎样的帮助。比如能够有岗位轮换的机会；或者能够参与各种项目等。不要提希望公司会给你培训，送你出国，给你报销学费，要表现得自己希望在实践中成长。<br><br>　　4．强调自己的稳定的心态。你可以这样说：&#8220;中国人最讲究&#8216;名正言顺&#8217;或者&#8216;不在其位，不谋其职&#8217;，所以很多人都认为，只有给了主管的职位，才能运用主管的权利，发挥主管的作用。我的理念和别人不同，我认为恰恰相反，当你展示出了主管该具有的能力，能完成更多的工作，公司自然会考虑对你的职位进行调整。在没有足够的权力时，要使用自己的影响力，所以我鄙视那些成天想着晋升却没有任何建树的人。&#8221;这样子，你的自我包装就成功了一大半。<br><br>　　5．最后要注意，在回答类似问题时，不要显得太胸有成竹。偶尔显示出涉世未深可以让面试官觉得你还有学生的单纯。&#8220;这个问题很大，我在学校里也曾经断断续续的考虑过，现在我简单的讲一下，可能会显得一厢情愿，希望得到您的指教&#8221;这样的一个缓冲在许多时候很管用哦。（还记得钻石法则吗？）<br><br>　　最后想提一下面试的肢体语言。我面试过的应届生应该没有1000也有800了吧。我发现几乎90%的人在入座后都采用一种非常闭合的姿势，很拘谨。这不能说是坏事，但的确会让面试开始的破冰显得艰难。现在，闭上眼睛，想象一对亲密情侣在烛光下甜蜜交谈，他们的姿势应该是几乎一样的；你们平时和好朋友促膝长谈，相信采用的也是相同的姿势；电视上的国家元首交谈时，绝大多数情况两人的姿势也相同或接近。这是因为：两个人如果在交谈过程中采用同一种姿势，则双方在潜意识中会有彼此认同的感觉。我们把这样的姿势一致称为Rapport。我本人非常注重采用Rapport来增进沟通效果（特别是，如果有人盛气凌人的叉腰对我说话，不论他的职位高低，我也会叉腰和他说话---输人不输阵：））<br><br>　　还有，面试时，手势的运用很重要。特别是回答较大的问题时，用手虚拟的在桌面上列出1，2，3，这样会让人觉得你很有条理，而且不会显得很稚嫩。而说到我会怎样怎样时，把手掌放在心口，真的有强化的效果。
<img src ="http://www.cppblog.com/life02/aggbug/102098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-11-27 21:14 <a href="http://www.cppblog.com/life02/archive/2009/11/27/102098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>群殴篇</title><link>http://www.cppblog.com/life02/archive/2009/11/01/99955.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Sun, 01 Nov 2009 14:31:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/11/01/99955.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/99955.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/11/01/99955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/99955.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/99955.html</trackback:ping><description><![CDATA[<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">这种面试形式相信很多同学经历过，就是<span>5-12</span>个人一组，给你们一个题目，给几分钟时间思考，然后发表各自意见，再进行小组自由讨论，要求最后达成一致意见，最后选出一个代表进行总结陈词，每个人再对自己刚才的表现作一下总结。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">这类面试只要掌握好技巧，应该其实比较好过。首先要理解：这种面试形式考查的目的是什么？实际上，这类面试考查的无法就是一点：你的团队合作能力。理解了这一点，剩下的问题就好办了。个人感觉，参加这类面试，一定要注意以下方面：<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">1</span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">、<strong><span style="FONT-FAMILY: 宋体">不要过分表现自己，</span></strong>表现最多的那个人一定首先被淘汰。道理很简单：既然考查的是团队合作能力，那么，集体利益显然是最重要的，如果你总是抢着表现自己，那只能说明，你把自身利益放到了集体利益之前，集体观念淡薄，肯定会被第一个淘汰。当然，也有例外，但那绝对是极少数。大家可以仔细回味一下。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">2</span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">、<strong><span style="FONT-FAMILY: 宋体">说话不要太多，但也不能太少，</span></strong>太少了就不会给考官留下深刻印象。要注意掌握小组的发展动向，在最关键的时刻，说出最有分量的话，简言之，要么不说，要说就要选在最该你说的时候说。例如：当小组意见分歧严重，时间所剩不多时，你可以试着提出一个缓解矛盾的折衷方案；或者当大家讨论的问题偏离主题的时候，你可以及时提醒大家；或者当你发现其他人的意见忽略了某些重要方面时，可以及时提出来。具体的请参考后面的成功案例。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">3</span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">、<strong><span style="FONT-FAMILY: 宋体">要多与你旁边的人交流，多交换意见。</span></strong>团队合作离不开交流，多跟他们交流，交换意见，会对你个人有很大启发，也会对小组达到统一意见起到重要作用。当然，这一切考官都看在眼里：）<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">4</span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">、考虑问题和说话时，要把集体利益放到第一位，一切都要服从集体目标。要<strong><span style="FONT-FAMILY: 宋体">多说<span>"</span>我们小组<span>..."</span>，少说<span>"</span>我<span>..."</span>，</span></strong>要多向你旁边的人或团队核心成员提意见，让他代你说。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">5</span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">、总结时，要首先肯定、强调其他每个成员在团队的这次任务中的作用，向他们表示感谢，再说自己为团队作出的贡献，并要看到自己的不足。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">以下以具体的安全来说明面试细节。首先是成功案例。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体"><span>1、<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">华为<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">华为的一面采用的就是这种形式，据说这个环节淘汰率是相当高的。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">题目：<span>12</span>个人，分成<span>2</span>组，给出<span>14</span>种职业，给每个组<span>20</span>分钟时间讨论，要求达到统一意见，对这<span>14</span>种职业，按照其重要程度排序；然后每个组选出一位代表，陈述小组讨论结果及理由；接下来进入自由辩论阶段，两组互相<span>PK</span>；最后，每个人选出一个自己认为刚才表现最出色的人，并说明理由。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体"><span>1）<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">小组讨论<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">在这个环节里，有一个南大学生表现得很冒尖，当时就知道他肯定挂了（后来得到了印证）。经过<span>20</span>分钟，大家达成了统一意见。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体"><span>2）<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">陈述<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">他们选我来陈述小组意见，当时想倒霉了，结果后来面试官指定另一个人作陈述（心中窃喜）。后来他也挂了。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体"><span>3）<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">辩论<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">对方开始对我们的排序结果进行质疑。主要质疑的是，为什么我们把水产养殖人员和印章刻字人员排那么靠钱。我想到质疑他们把娱乐场所健身人员排到保育人员前面，<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">告诉那个比较冒尖的人，让他说（心想，他反正那么想表现，就让他说吧）。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">在整个辩论过程中，基本都是南大那个人在抢着说，跟对方辩论，我们组其他人都没插上话，后来是面试官指定我们组其他人说，结果，对方的质疑他们都顶不住了。最后，面试官看我从头到尾都没说话，让我说，我就举出北京当时吃海鲜吃死人的例子和刻假章的例子，对他们进行了反驳，瞬间扭转局势。语气略带调侃，面试官也跟着乐了。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体"><span>4）<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">总结<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">最后，让每个人选出刚才表现最出色的人。很多人都选我，但最后我没有选自己，而是选了我旁边那个人，原因是<span>"</span>他沟通做的比较好<span>"</span>。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">相信我最后一句话给面试官留下了深刻的印象，因为他又笑着重复了一遍。当时面完，我就知道：我肯定进下一轮，南大那个肯定被淘汰（结果果然不出所料）<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体"><span>2、<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">阳光财险<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">采用的是无领导小组讨论形势，即：给定一个话题，小组成员在<span>30</span>分钟内进行自由讨论，最后选出一个人来作总结，期间面试官不给任何提示，不作任何干预。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">我们的题目是：假设你们是北京市政府工人人员，<span>08</span>年奥运将至，对于北京的一些外来务工人员及流动人员，应该如何安置？是否应把他们遣散回家？<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">小组一共<span>12</span>个人，一半天大一半南大的。整个讨论过程比较乏味，因为大部分人都在抢着说话，希望多赢得表现机会。我只说了两段话，一个是在开头，一个是在结尾。开头时，我只说了几句：面对这个问题，我觉得大家应该考虑<span>xx</span>、<span>xx...</span>方面，请大家提出补充意见。结尾时，我也只说了几句：大家讨论了这么久，都忽略了一个很重要的方面<span>...</span>最后的总结不是我做的，整个过程我只说了这几句话，但后来我还是进入了下一轮。另外，我们组作总结的那个人过了，还有我的朋友，他最后对总结的那个人作了点补充。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体"><span>3、<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">国家外汇储备管理局中央外汇业务中心<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">一面采用的是这种形式，小组<span>5</span>个人，给定一个题目，<span>10</span>分钟时间看，<span>1</span>分钟时间陈述自己观点，<span>20</span>分钟时间讨论，最后选一个人用<span>3</span>分钟对小组讨论结果进行描述，其他人用<span>2</span>分钟对自己刚才的表现作总结。我们的题目是：假设唐僧四人再次西天取经，但因为资金不足，必须淘汰一人，请问应该淘汰谁？并说出理由。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">我们组的意见完全一致：淘汰猪八戒。所以，讨论环节变得很轻松，大家的任务变成了，找出为什么淘汰八戒而保留其他人的理由。具体过程不多说了。我最突出的表现是在最后。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">最后，每个人轮流对自己刚才的表现作总结，前四个人都说了自己刚才对整体起到什么作用，最后到我说时，我的原话是：<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">"</span><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">刚才通过我们小组的努力，最后出色的完成了任务，在这个过程中，其他几位同学都起到了重要作用，例如：<span>1</span>号同学<span>...3</span>号<span>...4</span>号<span>...5</span>号<span>...</span>。另外我想说的是，我们在讨论的题目跟我们刚才做的说明了同一个道理，就是：在一个团队中，一定要明确自己的定位，找到自身的角色，否则就会像猪八戒那样因为定位不明确而被淘汰。我刚才在团队中的角色主要是沟通和串联的作用。表现不足的地方就是，很抱歉，刚才忘了帮大家掐时间。<span>"</span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">下面是失败案例。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">联想：给小组一个鸡蛋，一些吸管和胶带，请小组在<span>20</span>分钟时间内想出一个办法，利用这些资源，让鸡蛋从<span>2</span>米的高空掉下来，而不碎。最后选出一个人作演示和总结，并请每一个人对自己刚才的表现作总结。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">我们组最后成功的完成了任务，并由我来作演示。可惜最后，我们的方案被<span>HR</span>批评了，说我们用光了所有的胶带和吸管，不懂得节约手上的资源。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">最后的结果：我们组被整组淘汰。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">教训总结：个人利益和集体利益是息息相关的，如果整体的方案失败了，那么个人的成功也无从谈起。<span></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">&nbsp;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="COLOR: #2a2a2a; FONT-FAMILY: 宋体">下一篇请关注面试之非技术面试篇。<span></span></span></p>
<img src ="http://www.cppblog.com/life02/aggbug/99955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-11-01 22:31 <a href="http://www.cppblog.com/life02/archive/2009/11/01/99955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习下，牛人的面试记录（转）</title><link>http://www.cppblog.com/life02/archive/2009/10/30/99859.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Fri, 30 Oct 2009 13:11:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/30/99859.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/99859.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/30/99859.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/99859.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/99859.html</trackback:ping><description><![CDATA[我尽量地把整个过程完整地重现出来吧，虽然很多<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%9C%B0%E6%96%B9">地方</span>已经记得不太清楚了<br><span style="DISPLAY: none">! b&nbsp;&nbsp;K$ ~7 ~) M. |' N) ?3 c</span><font face="'宋体' ">阿里巴巴<font face="Times ">B2B</font><font face="宋体 ">，这个是什么公司？其实我没多大感觉</font></font><br><span style="DISPLAY: none"># Q: y; m3 {4 x( ]$ X) d</span><font face="'宋体' ">我只知道昨天早上被班上的<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%A5%B3%E7%94%9F">女生</span>拉去陪她<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E7%AC%94%E8%AF%95">笔试</span>，在<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%8D%8E%E5%B7%A5">华工</span>五山校区<font face="Times ">34</font><font face="宋体 ">号楼</font><font face="Times ">102</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">- U/ B# E8 |% k$ |$ y</font><br><font face="'宋体' ">晚上的时候，永跃拉我去中大的<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%A4%A7%E5%AD%A6%E5%9F%8E">大学城</span>校区笔试阿里巴巴的研究院</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: H( \4 ^3 z$ d* i% E1 p, o&amp; h</font><br><font face="'宋体' ">然后当晚就收到了阿里巴巴<font face="Times ">B2B</font><font face="宋体 ">的面试通知，让我第二天带<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E7%AE%80%E5%8E%86">简历</span>，成绩单，笔过去面试</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">+ z* D; M! {: y: t* [/ f+ K</span><font face="'宋体' ">时间是<font face="Times ">12</font><font face="宋体 ">：</font><font face="Times ">00</font><font face="宋体 ">，对，就是中午</font><font face="Times ">12</font><font face="宋体 ">点，怪吧，<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%9C%B0%E7%82%B9">地点</span>在华工五山校区逸夫人文馆的</font><font face="Times ">1</font><font face="宋体 ">楼中厅</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">3 N0 Y7 j" C2 \; [3 P+ Y</span><font face="'宋体' ">同时收到网易邮箱的面试通知，在网易大厦，时间是早上<font face="Times ">9</font><font face="宋体 ">：</font><font face="Times ">00</font><font face="宋体 ">，好在没有冲突</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">3 B* o) ]8 t% h1 z) G</span><font face="'宋体' ">早上一大早就起床，然后刷牙刷到一半的时候，又接到一个电话，是阿里巴巴研究院的</font><font face="'宋体' "></font><br><span style="DISPLAY: none">; I; ~) C: w/ r&nbsp;&nbsp;U7 \</span><font face="'宋体' ">汗，居然<font face="Times ">14</font><font face="宋体 ">：</font><font face="Times ">00</font><font face="宋体 ">在中山<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%A4%A7%E5%AD%A6">大学</span>面试，一直没面试，一来就来三个，</font><font face="Times ">XX</font><font face="宋体 ">的</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># Z; Q4 z&amp; e, V</font><br><font face="宋体 "><font size=4><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ [! L! t6 ]9 j7 u2 H9 Y</font><br></font></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, R2 r&amp; k+ y7 P, Y</font><br><font face="'宋体' "></font><br><span style="DISPLAY: none">/ P5 W8 I0 S8 Z" _0 b</span><font face="'宋体' ">赶到网易，好<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%A4%9A%E4%BA%BA">多人</span>穿着西装在等，汗，貌似就我一个不是穿西装的了<font face="Times ">...</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 W1 \8 @- e9 c</font><br><font face="'宋体' ">没多久就开始面试了，可是等到<font face="Times ">10</font><font face="宋体 ">点多都没人叫我，于是我去前台问了一下</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ j&nbsp;&nbsp;|&amp; N1 D8 r8 C* Z5 [% J5 A$ x</font><br><font face="'宋体' ">发现，面试时间居然是<font face="Times ">29</font><font face="宋体 ">日上午</font><font face="Times ">9</font><font face="宋体 ">点</font><font face="Times ">...</font><font face="宋体 ">我早了一天过来</font><font face="Times ">...</font><font face="宋体 ">汗</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 ?4 L( ~6 L. I0 F</font><br><font face="'宋体' ">接着搭<font face="Times ">2</font><font face="宋体 ">线赶往华工五山校区，去到阿里巴巴</font><font face="Times ">B2B</font><font face="宋体 ">的面试地点</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ Y- `. u: ?, d% j</font><br><font face="'宋体' ">工作人员马上让我们填一份表，然后说让我先去吃饭</font><font face="'宋体' "></font><br><span style="DISPLAY: none">) l5 H, L8 P" {2 g! j&nbsp;&nbsp;x' Y</span><font face="'宋体' ">我跟他们说<font face="Times ">2</font><font face="宋体 ">点还有研究院的面试，能不能让我先面，我晚点吃也无所谓的</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" T5 K% e$ ~$ ?6 k</font><br><font face="'宋体' ">一个工作人员就说把我的顺序调到下一个，再过了<font face="Times ">5</font><font face="宋体 ">分钟左右，就被叫去面试了，果然神速</font></font><br><span style="DISPLAY: none">&nbsp;&nbsp;w&amp; P! l- _. v: U! N</span><font face="宋体 "><font size=4><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" }9 Z% v&amp; Z$ {7 Y/ ?% G</font><br></font></font><br><span style="DISPLAY: none">9 w. p- w! C6 v&nbsp;&nbsp;r* k8 N</span><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: q4 L, d2 f, J</font><br><font face="'宋体' ">走到面试官的台前，他主动地和我握了手，然后就开始看我填的那份表</font><font face="'宋体' "></font><br><span style="DISPLAY: none">8 J3 ]" w&amp; m; e5 i* C5 c</span><font face="'宋体' ">突然就说：&#8220;哇，你是搞<font face="Times ">ACM</font><font face="宋体 ">的啊？拿了不少奖哦，我们公司内部也搞</font><font face="Times ">ACM</font><font face="宋体 ">比赛的。&#8221;</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 j" I, z( m6 E6 i</font><br><font face="'宋体' ">我说：&#8220;呵呵，<font face="Times ">ACM</font><font face="宋体 ">的确很好，比较能够锻炼团队精神。&#8221;</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 }6 _. i# C" m% q( V</font><br><font face="'宋体' ">&#8220;是吗？我们公司打比赛都是靠个人的，哪个人牛，一个人就可以搞定全部。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 U&nbsp;&nbsp;q&amp; E' ?* C&nbsp;&nbsp;Y9 ]</font><br><font face="'宋体' ">心里有点汗<font face="Times ">...</font><font face="宋体 ">继续说&#8220;可能比赛的对象不同吧，我们都是大一才开始接触编程的，可是我们的对手中，很大一部分人都已经搞了</font><font face="Times ">6-7</font><font face="宋体 ">年的算法了，不配合的话，一个人再强，也是强不过一个团队的！&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">&nbsp;&nbsp;F/ `&amp; r# a( h7 n</span><font face="'宋体' ">这时，他翻开我昨天笔试的题目，看了下我最后<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E4%B8%A4%E4%B8%AA">两个</span>问答题的答案，这里放题目出来给大家看看：</font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% p5 q; r9 j6 K% v' z&nbsp;&nbsp;d$ J</font><br><font face="'宋体' ">1.</font><font face="'宋体' ">如果你有一个<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E7%BD%91%E7%AB%99">网站</span>，连接着几台服务器，怎么去写一个自动测试的程序去检测每一台服务器或者相关<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E7%BD%91%E7%BB%9C">网络</span>设备是否出现问题，且必须是无论你在任何地方，任何时间，你都可以第一时间知道？</font><br><span style="DISPLAY: none">- R4 S$ o- [. c0 I% t/ Y4 ]' c9 U! W</span><font face="'宋体' ">我的答案：使用一台<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E4%B8%BB%E6%9C%BA">主机</span>连接外网，每隔一个很小的时间片就去主动地连接每一台服务器，如果在一段时间内，某个服务器一直都无法连接，则证明它出现了故障，这时就主动地提醒管理员</font><br><span style="DISPLAY: none">9 x. k3 X. h6 h&amp; y1 X&amp; G</span><font face="'宋体' ">2.</font><font face="'宋体' ">假如有三台服务器，其中一台突然出现了崩溃，这时你要怎么办？</font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 t$ ^/ Y, E7 Y; X# b- h</font><br><font face="'宋体' ">我的答案：先检查连接数，看是否存在黑客攻击，然后检查是否有<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%86%85%E5%AD%98">内存</span>泄露，（剩下的就不写出来了）</font><font face="'宋体' "></font><br><span style="DISPLAY: none">+ \0 N% b9 U6 A&nbsp;&nbsp;q5 N. N$ h</span><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" R+ Z&amp; ?' p3 B: m# M5 P" G</font><br><font face="'宋体' ">然后突然说：&#8220;第一题那个，你的想法是好的，可是我们一般不是用这种方法，你想想，如果你有几百台服务器，你一个个地去<font face="Times ">ping</font><font face="宋体 ">，是不太可能的，我们一般是这样，你需要监视哪些服务器，就让他们主动地来</font><font face="Times ">ping</font><font face="宋体 ">你，这样就</font><font face="Times ">OK</font><font face="宋体 ">了。&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">; \! S4 a. y) Z&nbsp;&nbsp;n* o5 \</span><font face="'宋体' ">我说：&#8220;哦，原来是这样，<font face="Times ">XXX</font><font face="宋体 ">（省略</font><font face="Times ">N</font><font face="宋体 ">字）&#8221;，突然发现我好像不是来面试，而是来听课的</font><font face="Times ">...</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; V+ K) T. I# H9 z% z! C+ Y4 q</font><br><font face="'宋体' ">接着我说：&#8220;第二题那个，后来我想了一下，觉得应该先调用一台服务器来备份数据，然后再做链接检查吧。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, E- g/ r/ D6 k</font><br><font face="'宋体' ">他说：&#8220;不需要的，根本不需要备份，因为我们都假设服务器是对等的，对等的，你知道吧？（我点头），所以根本不需要备份任何数据，没了就没了。&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">2 G1 M, N9 B1 y</span><font face="'宋体' ">我惊讶地说：&#8220;那一些用户的重要数据呢？这些也不需要管吗？&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: K* ?: {3 {( X: j4 G% u* `</font><br><font face="'宋体' ">他回答说：&#8220;哦，这些数据都是和服务器分离的，那些怎么可能放在服务器上呢，要是那样的话，会很惨的。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># ?- ^% [8 l&nbsp;&nbsp;E8 I) u5 z$ b6 `</font><br><font face="'宋体' ">我突然醒悟地点了点头</font><font face="'宋体' "></font><br><span style="DISPLAY: none">4 w3 c' x9 @7 C$ W</span><font face="宋体 "><font size=4><br><span style="DISPLAY: none">3 h0 v$ s. ?/ h&nbsp;&nbsp;@</span></font></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 P* ?&amp; o/ |9 Z5 Q' T$ g6 c</font><br><font face="'宋体' "></font><br><span style="DISPLAY: none">+ d2 P&nbsp;&nbsp;c6 ~&amp; d( X; o</span><font face="'宋体' ">然后他就开始写对我的评价了，同时一边笑着说：&#8220;呃，你先做个自我介绍吧。&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">! Z' s$ J! b5 N7 F</span><font face="'宋体' ">这时我也笑了，居然说了这么久才开始自我介绍，呵呵，然后就<font face="Times ">balala</font><font face="宋体 ">地说了一通</font><font face="Times ">...</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">; N) l- G6 i# c</span><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 r$ }4 s, _3 N* ~* b) d&amp; Z</font><br><font face="'宋体' ">接着面试官就笑着问：&#8220;能不能说说你<font face="Times ">ACM</font><font face="宋体 ">主要搞了些什么？&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">5 I; `&amp; E/ @/ W, V' O- l$ ]9 w+ z</span><font face="'宋体' ">我接着说：&#8220;各种都有吧，零零散散的，其实我觉得很多时候不需要拘泥于算法的本身，很多人和我说他学了什么算法什么算法，我觉得其实这些都不重要，最重要的应该是算法的那种思想，就拿<font face="Times ">dijk</font><font face="宋体 ">来说，有人说它是图论，也有的说是搜索，或者是动态规划，但我觉得，从另一个角度来说，你也可以说它是一种贪心啊，甚至说，大部分的动态规划，其实都是贪心的一种。很多东西，没有明显的界限的。&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">( K- P/ x2 L6 h4 Q</span><font face="'宋体' ">他好像很有感慨地点点头，然后继续问：&#8220;你觉得你会搞技术搞多少年？&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% U* I( e( E7 b</font><br><font face="'宋体' ">我毫不犹豫地说：&#8220;十年吧，因为我不确定将来会不会转管理，刚才介绍也和你说了，我比较注重自己综合<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E8%83%BD%E5%8A%9B">能力</span>的发展，做过许多<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%AD%A6%E7%94%9F">学生</span>干部的工作，等我做了十年，达到高级工程师的时候，我真的不确定我会选择哪个方向，是做技术，还是管理。&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">, M&amp; Z* T; `&nbsp;&nbsp;c7 R: [' D- ]% e</span><font face="'宋体' ">他接着说：&#8220;其实做技术做到后面都肯定要转管理的。&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">9 x8 [; h+ P. d% G$ S/ \7 B</span><font face="'宋体' ">我问：&#8220;啊？不是管理和技术都分开，有不同的发展方向，我记得你们说都有一个等级的啊？&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">! I( o3 j' |. U- c</font><br><font face="'宋体' ">他说：&#8220;是的，但是你还是得去带领一个团队的，做管理的话，其实很多人与人之间的交流，那些需要看个人的能力，不过有时候，那些东西还是很烦人的。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># D+ @&amp; Z$ }( Y! \</font><br><font face="'宋体' ">我深有感触地说：&#8220;的确，所以我也不确定以后会怎么样，但至少还是先搞好技术吧。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;@" `" T9 T1 L% F</font><br><font face="'宋体' ">（呃<font face="Times ">...</font><font face="宋体 ">面到这里，我突然感觉面试官有点眼熟</font><font face="Times ">...</font><font face="宋体 ">细看一下，发现原来就是我打开阿里巴巴<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E6%A0%A1%E5%9B%AD">校园</span><span class=t_tag onclick=tagshow(event) href="tag.php?name=%E6%8B%9B%E8%81%98">招聘</span>主页的一幅图片，下面一行文字写的是啥？与资深工程师一起成长</font><font face="Times ">...</font><font face="宋体 ">汗原来他就是阿里巴巴最资深的架构师之一的那个牛人</font><font face="Times ">...</font><font face="宋体 ">无限</font><font face="Times ">Orz</font><font face="宋体 ">）</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 B&amp; O! n* F2 s7 H. w</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 o&amp; ]# O, l) k3 Z, f: F</font><br><font face="'宋体' ">他突然诡异地笑了一下，然后好像很有兴致地看着我，说：&#8220;好啦！现在我开始问你问题了&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">* ]* w8 w5 U6 }3 \/ k4 O/ K6 P</span><font face="'宋体' ">我也马上回应了他一个笑容，心理面想：<font face="Times ">Orz</font><font face="宋体 ">，面试终于真正开始了</font><font face="Times ">...</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">% Z9 x+ E5 p$ q. X</span><font face="'宋体' ">&#8220;你可以说说为什么析构函数是要定义为虚函数吗？&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">; L3 M+ Q) E! i# |</span><font face="'宋体' ">&#8220;因为这样才可以防止内存泄露，如果基类动态地开辟了内存的话，而析构函数不是虚的，那么派生类就无法自动执行基类的析构函数了，这样就会造成内存泄露，很可能会被黑客利用，不然也会直接导致<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E7%B3%BB%E7%BB%9F">系统</span>崩溃。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ H! ^* P# ?# K# N0 C. h1 s! {</font><br><font face="'宋体' ">他满意地点点头，而且明显感觉他对我答的速度有点惊讶<font face="Times ">...</font><font face="宋体 ">他继续问：&#8220;那你能不能和我说说什么是断言？使用断言又有什么好处呢？&#8221;</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;|- }/ E&nbsp;&nbsp;{, |; ^</font><br><font face="'宋体' ">&#8220;在<font face="Times ">Debug</font><font face="宋体 ">版本中，断言一般用来检查传入的函数参数是否存在问题，例如传入指针，就可以用断言去检查指针是否为空，如果为空的话就中断程序，而且生成</font><font face="Times ">Release</font><font face="宋体 ">版本后，断言会被自动屏蔽的，非常地方便。&#8221;我再次脱口而出</font><font face="Times ">...</font><font face="宋体 ">呃</font><font face="Times ">...</font><font face="宋体 ">看来在金山的确学了不少有用滴东西</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">. e/ Z; r- V# b6 x- k/ M</span><font face="'宋体' ">他微笑地点点头，然后再次问到：&#8220;能不能和我说说智能指针是什么，它和指针有什么区别呢？&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' G- Q2 O: {&nbsp;&nbsp;m4 @: _' E" ^</font><br><font face="'宋体' ">我想了一下，说：&#8220;智能指针我以前用过，但记不太清了，但我知道其实智能指针和普通的指针没有太大区别的，不过智能指针限定了它指向的范围，好像是这样吧，真的不太记得了。&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">1 F1 s- [* Q% V2 l</span><font face="'宋体' ">他笑了笑，继续问：&#8220;那你给我说说，为什么不能在创建一个线程的时候，把指向类成员函数的指针传给它呢？&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; J- C- A1 Y! S7 Q5 {% m: F7 v( V</font><br><font face="'宋体' ">汗<font face="Times ">...</font><font face="宋体 ">开始多线程了，越来越复杂，几乎全部都不会了，我很不好意思地说：&#8220;呃</font><font face="Times ">...</font><font face="宋体 ">这个我不太清楚，我也没有使用过</font><font face="Times ">C++</font><font face="宋体 ">写多线程，只用过</font><font face="Times ">Python</font><font face="宋体 ">，调用里<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E9%9D%A2%E7%9A%84">面的</span></font><font face="Times ">Threading</font><font face="宋体 ">库，而且也没用多线程写过项目，只做过比较简单的练习</font><font face="Times ">...</font><font face="宋体 ">&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">&amp; f' i&nbsp;&nbsp;Y# B" ?) g4 V</span><font face="'宋体' ">这时他看了看我的简历，然后突然恍然大悟地说：&#8220;哦！原来你是本科的啊！&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" I* T! r5 e8 O' q: O</font><br><font face="'宋体' ">狂汗，原来之前他把我当成研究生了？！天啊！！我说：&#8220;嗯<font face="Times ">...</font><font face="宋体 ">是的，我<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%8F%AA%E6%98%AF">只是</span>本科生而已。&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">7 H6 x/ O* R- Y; t&nbsp;&nbsp;{! {: V; M</span><font face="'宋体' "></font><br><span style="DISPLAY: none">4 A8 t) a5 G&nbsp;&nbsp;I% m; N5 q. L</span><font face="'宋体' ">然后他问：&#8220;那么，你觉得你哪方面比较强呢？&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">- g&nbsp;&nbsp;\/ {( i: B</span><font face="'宋体' ">我想了想，说：&#8220;算法和数据结构吧，毕竟大学主要都是搞这几个。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 x) n&amp; T. ?) Y! T</font><br><font face="'宋体' ">他说：&#8220;好吧，那我就问你算法的题目吧。&#8221;（囧阿囧，千万表问难题呀，我很菜的呀<font face="Times ">...</font><font face="宋体 ">）</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">2 G2 f8 m* h, l- N6 k5 u</span><font face="'宋体' ">他顿了顿，说：&#8220;问个图论的吧，两个点之前的最短路径很容易求，是吧？（我点点头）那么如果<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E6%88%91%E8%A6%81">我要</span>求第二短路径呢？而且是不能和最短路径有任何重复的地方的。着是&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 v8 I, [, o1 x3 `) E! I4 I3 ~&nbsp;&nbsp;e</font><br><font face="'宋体' ">我陷入思考<font face="Times ">...</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, m" v: V9 N3 W: l" H0 y</font><br><font face="'宋体' ">他继续说：&#8220;没事，说说你的想法吧，你用什么方法求最短路径呢？&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">( N- c$ d$ Z5 d) e</span><font face="'宋体' ">我说：&#8220;<font face="Times ">dijk</font><font face="宋体 ">吧，这个问题我只想到一个比较简单的办法，但效率可能不是太高的。&#8221;</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. a3 E6 m$ G( r, D# z</font><br><font face="'宋体' ">他说：&#8220;没事，尽管说，没问题的。&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">5 Y9 e* ~9 T; Q&nbsp;&nbsp;X% o</span><font face="'宋体' ">我说：&#8220;先求最短路径，然后把这个路径的边全部删掉，然后再求一次最短路径就可以了。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 l9 G/ @' _% }$ p4 v</font><br><font face="'宋体' ">他突然说：&#8220;也只有这样啦！你还可以想到其他的方法吗？这样的就是最好嘛。&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">5 m. {$ e# n# J% a# B" I7 g</span><font face="'宋体' ">汗<font face="Times ">...</font><font face="宋体 ">我还以为要怎样</font><font face="Times ">...</font><font face="宋体 ">我说：&#8220;啊？！这样吗</font><font face="Times ">...</font><font face="宋体 ">没有更好的吗？我确定不了啊！&#8221;我耸了耸肩</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 _- L% L&nbsp;&nbsp;q* \7 d. W&nbsp;&nbsp;{, x9 m</font><br><font face="'宋体' ">突然他问：&#8220;如果要你转语言，你怎么看？&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">. d" }2 t' o: z&amp; c/ N</span><font face="'宋体' ">我说：&#8220;无所谓啊，我刚刚不是说了吗，我不会拘泥于具体的语言的，最重要的是思想。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">1 z0 E" C; }5 x* o, J# k</font><br><font face="'宋体' ">他说：&#8220;有人会介意的。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 Q) K, N4 m* U/ y</font><br><font face="'宋体' ">然后他继续说：&#8220;好，下一个问题，有一篇文章，我这里有<font face="Times ">n</font><font face="宋体 ">个关键字，要你在最短的时间内把所有关键字的位置全部找出来，你给我想一个算法吧。&#8221;</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" [+ B7 e2 I1 m! ^) W# F$ x) h</font><br><font face="'宋体' ">汗<font face="Times ">...</font><font face="宋体 ">这不就是腾讯笔试最后一题，说有很多种脏话，当别人打脏话出来的时候，就要把脏话去掉吗那题的变形么</font><font face="Times ">...</font><font face="宋体 ">刚刚等面试的时候一个中大的还和我讨论这题，我说用</font><font face="Times ">Trie</font><font face="宋体 ">树，还被他鄙视了，然后他说他也不知道怎么做</font><font face="Times ">...5555</font><font face="宋体 ">，这次囧大了</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. b) R0 r; M1 X- H5 ]: V</font><br><font face="'宋体' "></font><br><span style="DISPLAY: none">+ i0 c. g7 B# S</span><font face="'宋体' ">我陷入沉思，他好像看我挺苦恼地样子，然后说：&#8220;不用怕，就说你的想法就可以了，这个在<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E4%B8%96%E7%95%8C">世界</span>上都是比较难解决的题目来的，你可以随便说，都没有关系。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 M" A9 s* f2 N' j* M8 m% ?- j</font><br><font face="'宋体' ">呃<font face="Times ">...</font><font face="宋体 ">既然这样，我就随便说吧：&#8220;呃</font><font face="Times ">...</font><font face="宋体 ">我想到的是用</font><font face="Times ">Trie</font><font face="宋体 ">树（他笑着点了点头，</font><font face="Times ">Orz</font><font face="宋体 ">，运气居然这么好？！），然后把所有的关键字输入进去，完成</font><font face="Times ">Trie</font><font face="宋体 ">树，然后每个节点代表一个字，且同时设一个</font><font face="Times ">bool</font><font face="宋体 ">来标志到此节点是否形成一个单词，若匹配，则返回该位置，若不匹配，则用类似</font><font face="Times ">KMP</font><font face="宋体 ">的方法，看不匹配的地方在哪里，然后在原文那里进行一次跳跃，而不是直接在下一个字那里重新开始匹配，从而提高效率，我只想到这样的了。&#8221;</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 o/ H) Q* W* _) j6 N. a" V! L8 K4 Z: p</font><br><font face="'宋体' ">他满意的点了点头，然后说：&#8220;嗯，这样的方法不错（<font face="Times ">Orz</font><font face="宋体 ">，我就说嘛，肯定可以用</font><font face="Times ">Trie</font><font face="宋体 ">树的），可是你这是对于</font><font face="Times ">C++</font><font face="宋体 ">来说的，</font><font face="Times ">C++</font><font face="宋体 ">里面可以动态地创建内存，就是</font><font face="Times ">Trie</font><font face="宋体 ">树上的节点你可以一个一个地动态创建，而不会浪费内存，但如果是</font><font face="Times ">Java</font><font face="宋体 ">的话就不同了，它是一开始就分配好内存的，这样的话如果你使用</font><font face="Times ">Trie</font><font face="宋体 ">树，内存根本不够用，这样你要怎么办？&#8221;</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' D- i2 m1 \3 p' Y8 X</font><br><font face="'宋体' ">Orz<font face="宋体 ">，又是</font><font face="Times ">Java...</font><font face="宋体 ">我再次陷入苦恼之中</font><font face="Times ">...</font><font face="宋体 ">确实，一开始就分配好内存，这样再多空间都不够用的，神啊，快来打救我啊</font><font face="Times ">...</font><font face="宋体 ">为了争取多些时间，我说：&#8220;呃</font><font face="Times ">...</font><font face="宋体 ">我其实不会</font><font face="Times ">Java</font><font face="宋体 ">的</font><font face="Times ">...</font><font face="宋体 ">&#8221;，然后他说：&#8220;没关系，我都已经把</font><font face="Times ">Java</font><font face="宋体 ">的弊端告诉你了，你直接告诉我这种<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E6%83%85%E5%86%B5">情况</span>下你要怎么做就可以了。&#8221;</font><font face="Times ">Orz...</font><font face="宋体 ">看来不能蒙混过关了</font><font face="Times ">...</font><font face="宋体 ">苦思冥想了一段时间，我马上缴械投降：&#8220;呃，这个我真的想不出了</font><font face="Times ">...</font><font face="宋体 ">&#8221;，让我以外的是，他马上把草稿纸拿了过来，然后一边画图一边和我说：&#8220;你看，这样使用一个双数组的形式，也是和</font><font face="Times ">Trie</font><font face="宋体 ">树差不多，一个一个地指下来（我靠！这不是</font><font face="Times ">AC</font><font face="宋体 ">自动机吗？！），这样就可以了，这种方法也会浪费一点内存，但是就很少&#8221;，顿了顿，他继续说：&#8220;你可以上网去搜一下</font><font face="Times ">dats</font><font face="宋体 ">，</font><font face="Times ">d,a,t,s</font><font face="宋体 ">，</font><font face="Times ">dats</font><font face="宋体 ">，关于这个问题有很多种解法。&#8221;我迅速地点了点头，面试官大人真的很有当<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E8%80%81%E5%B8%88">老师</span>的天分呀 </font><font face="Times ">Orz</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. Q' w5 z&nbsp;&nbsp;V+ h9 I, w</font><br><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># P6 E$ Q+ o* n5 g+ x! `&amp; c7 S</font><br><font face="'宋体' ">&#8220;好吧，那我们进入下一个问题吧，假如有一百万个文件，每个文件内部的内容是有序的，现在我要你把他们合并成一个文件，内容也必须是有序的。要求是时间复杂度在<font face="Times ">O(n)</font><font face="宋体 ">以内。&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">- t- [6 J! K4 c0 l&nbsp;&nbsp;a</span><font face="'宋体' ">汗<font face="Times ">...O(n)</font><font face="宋体 ">，反复和他了解过题意之后，我再次陷入苦思，然后他又多次让我说说想法，不需要想太具体，最后我说我实在想不到</font><font face="Times ">O(n)</font><font face="宋体 ">的了，然后他又直接告诉了我答案：&#8220;你知道竞赛树吗？一开始，把所有文件中最小的那个数拿出来，然后用竞赛数的方式就可以确定最小的那个数是多少，然后就把他写入大的那个文件，然后这个数是哪个文件读进来的，就再次在那个文件中再读一次数，然后不断地&#8220;竞赛&#8221;就可以了，你能明白吗？&#8221;我想了想，然后说：&#8220;嗯，明白，可是你给的方法好像不是</font><font face="Times ">O(n)</font><font face="宋体 ">哦</font><font face="Times ">...</font><font face="宋体 ">每个数读出来已经用了 </font><font face="Times ">n </font><font face="宋体 ">的时间了，然后&#8220;竞赛&#8221;一次就要 </font><font face="Times ">logn </font><font face="宋体 ">的时间</font><font face="Times ">...</font><font face="宋体 ">&#8221;然后他彻底无语</font><font face="Times ">...</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">1 p; ^$ j/ G/ t! k4 T</font><br><font face="'宋体' "></font><br><span style="DISPLAY: none">, W) A( a&nbsp;&nbsp;v. {. g; q</span><font face="'宋体' ">接着算法的问题就到此结束了，后来他又问了我关于<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E8%BD%AF%E4%BB%B6">软件</span>工程、设计模式等方面的问题，然后差不多就说让我去等等了，<font face="Times ">1</font><font face="宋体 ">面就到这里结束，顺利晋级</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 p! G6 n% F0 g/ n9 ]&nbsp;&nbsp;W# P</font><br><font face="'宋体' ">这时我赶紧去搞个泡面吃，饿到胃都抽搐了<font face="Times ">...</font><font face="宋体 ">好不容易买个泡面，然后发现华工热水机坏了，只好厚着脸皮跑进一家咖啡厅，让一个</font><font face="Times ">MM</font><font face="宋体 ">帮我打热水，还好里面的</font><font face="Times ">MM</font><font face="宋体 ">都很热心，</font><font face="Times ">Orz</font><font face="宋体 ">回来的时候，一个</font><font face="Times ">HRMM</font><font face="宋体 ">问我刚刚去哪里了，找了我好久都没找到，然后看我拿着杯面，说：&#8220;啊？！你还没有吃饭啊？&#8221;我说：&#8220;呃</font><font face="Times ">...</font><font face="宋体 ">是啊，刚刚不是和你说我还得去你们的研究院那里面吗</font><font face="Times ">...</font><font face="宋体 ">我以为这里会很快面完，所以就</font><font face="Times ">...</font><font face="宋体 ">&#8221;，她用手贴着胸口，十分抱歉地对我说：&#8220;哦！对哦，我差点忘了，真的不好意思，你再等等吧，刚刚那个面试官在面另外一个人了，等会他们面完，我马上通知你，你赶紧先把面吃完，别饿坏了。&#8221;</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">! ^/ O, q7 {, M$ A$ ?% h</font><br><font face="'宋体' ">XXXX<font face="宋体 ">（省略</font><font face="Times ">N</font><font face="宋体 ">字）</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">, a- S% |- \, I. }/ Y: i! |</span><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">! A3 ?5 B9 e+ R3 R* `5 T: T( _</font><br><font face="'宋体' ">开始<font face="Times ">2</font><font face="宋体 ">面后，对方是一个胖胖的工程师，给我感觉听和蔼的，刚坐下就让我做自我介绍，呵呵，这次没有</font><font face="Times ">1</font><font face="宋体 ">面那么囧了，面到一半才自我介绍</font><font face="Times ">...</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 ^/ D# w# A5 e! y! J</font><br><font face="'宋体' ">自我介绍完后，他说：&#8220;好！我们先写个程序，你知道字符串比较函数吗？&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">2 R0 Q5 Y8 y/ K7 u6 Z4 Z) Q$ Y6 C! f</span><font face="'宋体' ">我说：&#8220;是<font face="Times ">strcmp</font><font face="宋体 ">函数吗？&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">% m% v, I% D; L# C, n&amp; ^&amp; z</span><font face="'宋体' ">他说：&#8220;是的，就是这个，你可以写出来给我看吗？&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ C2 F2 k# |# F2 p( y</font><br><font face="'宋体' ">然后我就开始写了，写到一半，我说可以假设输入时字符串都非空吗？</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ u( y; x/ x8 Z8 X; R8 |1 _</font><br><font face="'宋体' ">他马上说：&#8220;要考虑任何输入情况。&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">3 D: F! ^. p/ y# |( n, y</span><font face="'宋体' ">我点点头，接着写程序，<font face="Times ">strcmp</font><font face="宋体 ">？</font><font face="Times ">so easy </font><font face="宋体 ">啦</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;^: E! j9 }7 I</font><br><font face="'宋体' ">写完给他看，他说：&#8220;嗯，你的程序基本上正确，不过输入参数这里写错了。&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">/ s, `* ~" ^" @3 j0 j# i</span><font face="'宋体' ">我一看，巨汗，<font face="Times ">const char *a </font><font face="宋体 ">居然被我写成 </font><font face="Times ">const *a </font><font face="宋体 ">，连类型都没指定 </font><font face="Times ">Orz</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">/ U+ n7 X+ ?9 p</span><font face="'宋体' ">我很不好意思地说：&#8220;哦，不好意思，一时比较紧张，连类型都忘了写了。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( D2 N8 {' E/ f6 Q</font><br><font face="'宋体' ">接着他开始问我在金山实习的一些情况，我和他说了第二个月在插件组实习</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 j1 j&nbsp;&nbsp;A0 D6 ^( h: I( \3 E</font><br><font face="'宋体' ">然后他问我写的插件是否有发布，我说有，随着<font face="Times ">WPS</font><font face="宋体 ">校园版一起发布的</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( S$ B; g% Y&amp; N$ y&nbsp;&nbsp;x&nbsp;&nbsp;v</font><br><font face="'宋体' ">然后他满意地点点头，接着问关于金山给我<font face="Times ">offer</font><font face="宋体 ">的<span class=t_tag id=ajaxid_0.8797900343971576 onclick=tagshow(event) unselectable="true" href="tag.php?name=%E4%BA%8B%E6%83%85" overfunc="null" outfunc="null" initialized="true">事情</span></font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 [/ \) d0 k&nbsp;&nbsp;m2 {" E3 W</font><br><font face="'宋体' ">我说，首先，我必须得对我的家人负责，金山的<font face="Times ">offer</font><font face="宋体 ">我不得不签</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; k/ M7 J% ?* x3 e. o</font><br><font face="'宋体' ">因为我没把握可以找到一个更好的单位，而且那个不是三方</font><font face="'宋体' "></font><br><span style="DISPLAY: none">3 g) m8 W6 x: E; F" [" [&amp; G</span><font face="'宋体' ">让我意外的是，他没说觉得我是没诚信，反而有点认同我的观点</font><font face="'宋体' "></font><br><span style="DISPLAY: none">4 o* @) C$ F9 \1 W; Q9 @</span><font face="'宋体' ">要知道，诚信问题可是让我苦恼了很久的</font><font face="'宋体' "></font><br><span style="DISPLAY: none">- a0 h3 l8 f# _7 J( j1 |/ F$ F</span><font face="'宋体' ">接着他就开始问我怎么看待阿里巴巴，然后又问我怎么去看待一家公司</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 D* ^5 q! ]; W</font><br><font face="'宋体' ">我就说，阿里巴巴改进了人们进行商业活动的方式，极大地推动了电子商务的发展</font><font face="'宋体' "></font><br><span style="DISPLAY: none">* E' ]5 {1 r/ a3 T7 b3 Z) v+ H6 |3 I</span><font face="'宋体' ">可以说，国内其实没有多少家公司可以在取得良好业绩的同时</font><font face="'宋体' "></font><br><span style="DISPLAY: none">; d9 \7 k1 x- ~3 ]</span><font face="'宋体' ">内部的员工都可以明显地感觉自己是在为这个社会作贡献的，阿里巴巴这点很让人羡慕</font><font face="'宋体' "></font><br><span style="DISPLAY: none">! ~0 h3 ~. C6 p; @2 _</span><font face="'宋体' ">至于公司，我比较看重的是发展前景，至于薪水我是无所谓的，毕竟刚毕业</font><font face="'宋体' "></font><br><span style="DISPLAY: none">+ r# O1 W: F&nbsp;&nbsp;|2 L5 V9 ~( a</span><font face="'宋体' ">（省略<font face="Times ">N</font><font face="宋体 ">个字）</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">+ i' {: {7 v7 d- _* J# b0 F! `</span><font face="'宋体' ">记得我说道：&#8220;就好比网易，就算他给我<font face="Times ">1W</font><font face="宋体 ">一个月都好，其实这些我都没有太大感觉的。&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">/ i$ L6 s* e% k$ Q</span><font face="'宋体' ">然后他的眼睛明显大了一圈，哈哈，虽然没太大感觉</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 P( G/ K&amp; u" z0 @&nbsp;&nbsp;X</font><br><font face="'宋体' ">但是如果有滴话，我真的不介意滴！嘎嘎<font face="Times ">...</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ S0 i' S; w1 _&nbsp;&nbsp;{2 |( E* I* ]</font><br><font face="'宋体' ">不过没打算去阿里巴巴，怎么说也就无所谓了</font><font face="'宋体' "></font><br><span style="DISPLAY: none">5 Q2 y8 d2 r, q/ w</span><font face="'宋体' ">最后他问我有没有什么问题需要问他的</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;M/ A; b! I8 K</font><br><font face="'宋体' ">我就问了他几个关于如何更快地提高自己技术的问题</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 Q/ A" V9 s&amp; Y1 X: t( i. u</font><br><font face="'宋体' ">然后<font face="Times ">2</font><font face="宋体 ">面就到此结束，顺利进阶</font><font face="Times ">3</font><font face="宋体 ">面，哇塞，比</font><font face="Times ">1</font><font face="宋体 ">面轻松多了</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none"># v&amp; a&amp; ^! y# X# T</span><font face="'宋体' ">算一算时间，<font face="Times ">10</font><font face="宋体 ">分钟多一点而已 </font><font face="Times ">Orz</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">9 c&nbsp;&nbsp;X5 i7 X&nbsp;&nbsp;v0 Z/ V3 E</span><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 F7 z# e/ q1 c&nbsp;&nbsp;t( ~&nbsp;&nbsp;k</font><br><font face="'宋体' ">因为<font face="Times ">3</font><font face="宋体 ">面是</font><font face="Times ">HR</font><font face="宋体 ">面，很快就有另外一个</font><font face="Times ">HRMM</font><font face="宋体 ">（和之前说的</font><font face="Times ">HRMM</font><font face="宋体 ">不同的一个</font><font face="Times ">MM</font><font face="宋体 ">）来叫我去</font><font face="Times ">3</font><font face="宋体 ">面了，一坐下，她就说：&#8220;听说你等了很久是吧？&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">8 s' d&amp; L&amp; S3 L; R0 L8 o</span><font face="'宋体' ">我说：&#8220;呃，不是，我只以为会比较快，然后可以去研究院那边面试一下而已，我没什么所谓的。&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">, r, @! P9 ~: f* H; k</span><font face="'宋体' ">她接着慢悠悠地说：&#8220;你不觉得？其实如果去不了的话，也许会是一件好事吗？&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 K! a' B&amp; w- ^* n</font><br><font face="'宋体' ">Orz...<font face="宋体 ">我顿时无语</font><font face="Times ">...</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">" q/ f5 o; E' C&nbsp;&nbsp;K. O! L: U</span><font face="'宋体' ">看到我吃瘪的样子，她继续慢慢地说：&#8220;可以和我说说你大学的生活吗？&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) q' i( Z0 G9 @: C) z! E</font><br><font face="'宋体' ">然后我就<font face="Times ">balala</font><font face="宋体 ">地说了学生工作，还有</font><font face="Times ">ACM</font><font face="宋体 ">，刚说</font><font face="Times ">ACM</font><font face="宋体 ">，她就开始问</font><font face="Times ">ACM</font><font face="宋体 ">队的事情了</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">4 _5 P+ |# d: q7 O</span><font face="'宋体' ">然后问我说，我认为在<font face="Times ">ACM</font><font face="宋体 ">收获最大的是什么，我说</font><font face="Times ">ACM</font><font face="宋体 ">给我最大的收获时，我认识了一群志同道合的<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E6%9C%8B%E5%8F%8B">朋友</span>，我知道什么才叫做团队精神，而且在</font><font face="Times ">ACM</font><font face="宋体 ">队，我学会了坚持</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">- E6 v- W/ o. D" O6 O/ a</font><br><font face="'宋体' ">接着和她又聊起了我们<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%AD%A6%E6%A0%A1">学校</span><font face="Times ">ACM</font><font face="宋体 ">的历史，从我大一时的惨淡，到现在，我们<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%B8%88%E5%BC%9F">师弟</span>们已经杀进</font><font face="Times ">World Final</font><font face="宋体 ">了，让我不解的是，她对此好像深有体会的感觉，而且说到这些历史，她居然好像也知道，她还说跟我们</font><font face="Times ">ACM</font><font face="宋体 ">的教练韩老师聊过很多东西</font><font face="Times ">...Orz</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">' `+ e/ R&nbsp;&nbsp;U5 D8 v! w' ~</span><font face="'宋体' ">接着她问我最喜欢的是什么公司，我直接说是网易，然后<font face="Times ">XXX</font><font face="宋体 ">（省略）</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ B" y) |* `0 ^1 o. K3 f</font><br><font face="'宋体' ">最后她问我：&#8220;你有什么问题需要问我的吗？&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" Q$ ^0 A5 Q; U&amp; V% ?+ \$ Z1 X</font><br><font face="'宋体' ">我说：&#8220;你不觉得我签了金山的<font face="Times ">offer</font><font face="宋体 ">，然后再来这里面试，我的诚信会有问题吗？&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">$ u' h2 V$ T) o( Y, [+ b! s</span><font face="'宋体' ">我觉得这个问题必须得问她，可是出乎意料，她的回答是：</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% i8 }: C+ a. {7 a+ L, o</font><br><font face="'宋体' ">&#8220;我认为，一个有能力的强者，就应该拥有更多的选择权，这是一件理所当然的事情。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">* O&amp; i( H! i&nbsp;&nbsp;V4 j6 f</font><br><font face="'宋体' ">然后我再问：&#8220;那么，假如你给了我<font face="Times ">offer</font><font face="宋体 ">，我最后又去了网易怎么办？我刚刚和你说过我一直很喜欢网易的。&#8221;</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 x# p2 i- Y$ p</font><br><font face="'宋体' ">她说：&#8220;无所谓，你如果找得到的话，我们很乐意看到这样的事情，这更加说明，我们的眼光是没错的，如果你愿意，我们可以给足够多的时间给你，例如一直到<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E6%8B%9B%E8%81%98%E4%BC%9A">招聘会</span>全部结束，让你去不断挑战你认为适合你的公司，等什么时候你决定来阿里巴巴了，你再跟我说，我们就给你<font face="Times ">offer</font><font face="宋体 ">。&#8221;</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 k! X$ D+ P$ }2 `</font><br><font face="'宋体' ">巨汗，<font face="Times ">Orz</font><font face="宋体 ">，无语！我惊呆啦啦啦啦！！！好牛叉滴态度呀</font><font face="Times ">...</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># T3 t7 l4 Q6 l" o+ E: S' t! p( t$ u$ u</font><br><font face="'宋体' ">&#8220;你还有问题吗？&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">1 w: }1 p3 R1 G4 |/ e3 P</font><br><font face="'宋体' ">我摇摇头：&#8220;呃<font face="Times ">...</font><font face="宋体 ">没有了</font><font face="Times ">...</font><font face="宋体 ">&#8221;我还有问题吗？！彻底没<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E6%84%8F%E8%A7%81">意见</span>了</font><font face="Times ">...</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) s; F&nbsp;&nbsp;Q2 O3 H$ y+ W2 o0 O) _</font><br><font face="'宋体' ">接着她就说要给我<font face="Times ">offer</font><font face="宋体 ">了</font><font face="Times ">...</font><font face="宋体 ">然后说</font><font face="Times ">5</font><font face="宋体 ">点才有，结合一下时间</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">- M1 X" M+ k" ?' D</span><font face="'宋体' ">至少要到<font face="Times ">6</font><font face="宋体 ">点才能到大学城，去中大的阿里巴巴研究院面试了</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">1 g- C4 g; I% [&nbsp;&nbsp;e! R1 ]9 m</span><font face="'宋体' ">那边也打了电话过来问我什么时候可以去到</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 A% R&amp; _5 Z- [$ m' t7 ^&amp; d</font><br><font face="'宋体' ">我说这里拿到<font face="Times ">offer</font><font face="宋体 ">了，</font><font face="Times ">5</font><font face="宋体 ">点才能签，可能要</font><font face="Times ">6</font><font face="宋体 ">点才回到去</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">5 j7 ]0 V6 \* ]) a: i( s</span><font face="'宋体' ">然后听到电话那边的另一个人说：&#8220;让他过来吧，没问题&#8221;</font><font face="'宋体' "></font><br><span style="DISPLAY: none">$ ?% E4 M" |3 {- T</span><font face="'宋体' ">Orz<font face="宋体 ">，通知的可是</font><font face="Times ">2</font><font face="宋体 ">点面试，居然能等我</font><font face="Times ">4</font><font face="宋体 ">个<span class=t_tag onclick=tagshow(event) href="tag.php?name=%E5%B0%8F%E6%97%B6">小时</span>，看来拿了</font><font face="Times ">offer</font><font face="宋体 ">的确牛叉</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( n* ~; {&amp; o. h4 c' |/ d</font><br><font face="'宋体' ">最后<font face="Times ">5</font><font face="宋体 ">点签</font><font face="Times ">offer</font><font face="宋体 ">，然后还做了性格测试，等到</font><font face="Times ">5:30</font><font face="宋体 ">的时候我就打电话给研究院那边说我真的赶不过去了，实在不好意思，那边说无所谓</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% ]. O8 ^+ b+ B0 W% }$ M, r</font><br><font face="'宋体' ">签完<font face="Times ">offer</font><font face="宋体 ">之后，</font><font face="Times ">3</font><font face="宋体 ">面的那个</font><font face="Times ">HRMM</font><font face="宋体 ">跟我们说了一下具体的福利，</font><font face="Times ">5</font><font face="宋体 ">险</font><font face="Times ">1</font><font face="宋体 ">金</font><font face="Times ">+</font><font face="宋体 ">商业保险之类的</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">3 D% U5 O* d7 ~8 C2 o; _</span><font face="'宋体' ">然后就开始一个一个人地谈待遇了，轮到我的时候，刚过去坐下</font><font face="'宋体' "></font><br><span style="DISPLAY: none">&nbsp;&nbsp;R$ j- p0 v2 x% G+ _. M</span><font face="'宋体' ">她就说：&#8220;吴嘉澍是吧？我们商量后决定给你税前<font face="Times ">nk</font><font face="宋体 ">的工资，你觉得有问题吗？&#8221;</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">&amp; u6 W' X! S/ _' Z3 T</span><font face="'宋体' ">我问：&#8220;是税前<font face="Times ">nk</font><font face="宋体 ">吗？&#8221;（鉴于不能透露公司的具体工作，</font><font face="Times ">n</font><font face="宋体 ">就不说是多少了，大家可以自由想象）</font></font><font face="'宋体' "></font><br><span style="DISPLAY: none">$ s, e0 ~" ]6 K: \# g</span><font face="'宋体' ">她说：&#8220;是的，年底还有<font face="Times ">3</font><font face="宋体 ">个月的业绩评定，也就是一年给</font><font face="Times ">15</font><font face="宋体 ">个月工资。&#8221;</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 s3 u7 U' h' G( m: F</font><br><font face="'宋体' ">我说：&#8220;没问题。&#8221;</font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 q' h* c3 W1 C* K- ^5 F4 Q</font><br><font face="'宋体' ">呃<font face="Times ">...</font><font face="宋体 ">还能有问题么</font><font face="Times ">...</font><font face="宋体 ">偶滴神啊</font><font face="Times ">...</font></font><font face="'宋体' "></font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ @2 {, K&nbsp;&nbsp;O% J" i+ N0 E" z</font><br><font size=3><font face="'Times ">看来我好像真的得去阿里巴巴了 Orz</font><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 ^&nbsp;&nbsp;g% \# `. c) L( u6 a# [</font><br></font><font face="'宋体' ">我<font face="Times ">TM</font><font face="宋体 ">的终于遇到赏识偶的公司了</font><font face="Times ">...10</font><font face="宋体 ">月</font><font face="Times ">28</font><font face="宋体 ">日，</font><font face="Times ">It's a nice day!</font></font>
<img src ="http://www.cppblog.com/life02/aggbug/99859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-30 21:11 <a href="http://www.cppblog.com/life02/archive/2009/10/30/99859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>东南融通笔试题（转）</title><link>http://www.cppblog.com/life02/archive/2009/10/25/99404.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Sun, 25 Oct 2009 04:44:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/25/99404.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/99404.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/25/99404.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/99404.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/99404.html</trackback:ping><description><![CDATA[<a href="http://topic.csdn.net/u/20091025/12/a7554371-06a8-4ebc-a116-ccca6d014322.html?99765">http://topic.csdn.net/u/20091025/12/a7554371-06a8-4ebc-a116-ccca6d014322.html?99765</a><br><br><br>1:下列运算符中，优先级最高的是 <br>A.[] <br>B.++ <br>C.% <br>D.&amp;&amp; <br>2:以&#8220;只读&#8221;方式打开文本文件 a: \ aa.dat, 下列语句中哪一个是正确的 <br>A.fp=fopen( &#8221; a: \ aa.dat &#8221; , &#8221; ab &#8221; ) <br>B.fp=fopen( &#8221; a: \ aa.dat &#8221; , &#8221; a &#8221; ) <br>C.fp=fopen( &#8221; a: \ aa.dat &#8221; , &#8221; wb &#8221; ) <br>D.fp=fopen( &#8221; a: \ aa.dat &#8221; , &#8221; r &#8221; ) <br>3:设 int a[ ]={1,2,3,4,5},*p=a;则数组元素的正确表示是 <br>A.a[2] <br>B.&amp;(a+1) <br>C.a[5] <br>D.&amp;p <br>4:C语言中计算a的3次方，正确的表达是 <br>A.a^3 <br>B.pow(a,3) <br>C.a**3 <br>D.power(a,3) <br>5:c语言对文件的操作提供了提供了若于个标准库函数，其中对格式化读函数fscanf的函数调用正确格式是 <br>A.fscanf(文件指针，格式控制字符串，输入项表）； <br>B.fscanf(格式控制字符串，输入项表，文件指针）； <br>C.fscanf(格式控制字符串，文件指针，输入项表）； <br>D.fscanf(文件指针，输入项表，格式控制字符串）； <br>6:对于while语句，错误的说法是 <br>A.用条件控制循环体的执行次数 <br>B.循环体至少要执行一次 <br>C.循环体有可能一次也不执行 <br>D.循环体中可以包含若干条语句 <br>7:设有程序 <br>#include <br>main() <br>{ <br>int i,j; <br>for (i=0,j=1;i &lt;=j+1;i+=2,j--) <br>printf("%d\n",i); <br>} <br>在运行上述程序时，for语句中循环体的执行次数是 <br>A.3 <br>B.2 <br>C.1 <br>D.0 <br>8:main() <br>{ int x=1,y=1; <br>　　y=x-- ; <br>　　printf( &#8220; %d,%d\n &#8221; ,x,y); <br>}运行结果为 <br>A.0 ， 0 <br>B.0 ， 1 <br>C.1 ， 0 <br>D.1 ， 1 <br>9:函数调用语句&#8220; f((e1,e2),(e3,e4,e5)) &#8221;中参数的个数是 <br>A.1 <br>B.2 <br>C.3 <br>D.5 <br>10:执行语句&#8220; for(d=0;d!=60; d+=0.6) s+=d; &#8221;时， <br>A.循环在 d 等于 60 时终止 <br>B.循环在 d 大于 60 时终止 <br>C.循环在 d 小于 60 时终止 <br>D.循环在 d 大于 60 后继续 <br>11:使用语句scanf(&#8243;a=%f, b=%f&#8243;, &amp;a, &amp;b);输入变量a、b的值(□代表空格)，正确的是 <br>A.1.25，2.4 <br>B.1.25□2.4 <br>C.a=1.25, b=2.4 <br>D.a=1.25□b=2.4 <br>12:全局变量的存储类型可以定义为 <br>A.auto或static <br>B.extern或register <br>C.auto或extern <br>D.extern或static <br>13:调用函数时，若实参是一个数组名，则向函数对应的形参传送的是 <br>A.数组的长度 <br>B.数组的首地址 <br>C.数组第一个元素的值 <br>D.整个数组元素的值 <br>14:若变量已正确定义并且指针p已经指向变量x, 则*&amp;x相当于 <br>A.x <br>B.p <br>C.&amp;x <br>D.&amp;*p <br>15:编译程序的功能是 <br>A.将汇编语言程序转换为目标程序 <br>B.将汇编语言程序转换为高级语言程序 <br>C.将高级语言程序转换为目标程序 <br>D.将高级语言程序转换为汇编语言程序 <br>简答题 <br>16:Write a program to count blanks, tabs, and newlines. <br>17:硬盘上保存有一个密码表，文本文件格式，文件名为&#8220;code.txt&#8221;，内容如下： <br>abcdefghijklmnopqrstuvwxyz <br>ushecginpaywdqmlxbozrtfvjk <br>试编写程序实现一个简单的加密程序，循环读取用户输入，按此密码表将字符进行替换， <br>并直接打印输出；例如&#8220;baidu&#8221;将被替换成&#8220;super&#8221;。 <br>18:int a[3]; <br>a[0]=0; a[1]=1; a[2]=2; <br>int *p, *q; <br>p=a; <br>q=&amp;a[2]; <br>则a[q-p]=? <br>19:下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR)，请评论一下这段代码的错误。 <br><br>__interrupt double compute_area (double radius) <br>{ <br>double area = PI * radius * radius; <br>printf(" Area = %f", area); <br>return area; <br>} <br>20:程序填空 <br>把文本文件 d1.dat 复制到文本文件 d2.dat 中，要求仅复制 d1.dat 中的英文字符。 <br>　　#include <br>　　void main() <br>　　{ _______ char ch; <br>　　 fpd1=fopen( &#8243; d1.dat &#8243; , &#8243; r &#8243; );_______ <br><br>　　 while(fscanf(fpd1, &#8243; %c &#8243; ,&amp;ch)_______) <br><br>　　 if(_______||ch&gt;= &#8242; a &#8242; &amp;&amp;ch &lt;= &#8242; z &#8242; )fprintf(fpd2, &#8243; %c &#8243; ,ch); <br><br>　　fclose(fpd1);fclose(fpd2); <br><br>　　} <br>21:在某工程中，要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。 <br>22:请定义一个宏，比较两个数a、b的大小，不能使用大于、小于、if语句。 <br>23:C/C++源代码中，检查花括弧&#8220;（&#8221;与 &#8220;）&#8221;，&#8220;{&#8221;与&#8220;}&#8221;）是否匹配，若不匹配，则输出不匹配花括弧所在的行与列。 <br>
<img src ="http://www.cppblog.com/life02/aggbug/99404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-25 12:44 <a href="http://www.cppblog.com/life02/archive/2009/10/25/99404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>腾讯笔试题（转）</title><link>http://www.cppblog.com/life02/archive/2009/10/23/99290.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Fri, 23 Oct 2009 07:00:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/23/99290.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/99290.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/23/99290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/99290.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/99290.html</trackback:ping><description><![CDATA[<p>部分腾讯笔试题(2009-10-07 10:21:44)<br>标签：杂谈&nbsp;&nbsp;&nbsp; </p>
<p><a href="http://blog.sina.com.cn/s/blog_5dde893c0100fjap.html">http://blog.sina.com.cn/s/blog_5dde893c0100fjap.html</a><br>1. 1-20的两个数把和告诉A,积告诉B，A说不知道是多少，</p>
<p>B也说不知道，这时A说我知道了，B接着说我也知道了，问这两个数是多少？<br>答案：2和3</p>
<p>注（本人分析）：看了几篇类似的分析，首先我觉得拿出的两个数是不应该重复的，比如不能拿2，2，然而别人分析中没有这么认为。A说不知道，说明由和分解的结果不唯一，而B说不知道也是因为由分解的数不唯一，这时候A说他知道了，我觉得他是把分解的情况做了一个分析，假如分解的情况为x1，x2；y1，y2（如果分解的情况多了的话，我个人认为他不会很快判断出是那个数的），应该有一种情况是x1*x2或者y1*y2的值积分解唯一，而另一个积分解不唯一，因为B说不知道，可以知道答案应该是积分解不唯一的那个，所以A知道了。B在反过来推测，也该得到结论。</p>
<p>在1到20个数中寻找，可以发现2和3满足要求，自我感觉分析有漏洞，智商如此，请高手指点了。</p>
<p>4 如何输出源文件的标题和目前执行行的行数？</p>
<p>答案： printf("The file name: %d\n", __FILE__);</p>
<p>printf("The current line No:%d\n", __LINE__);</p>
<p>ANSI C标准预定义宏:</p>
<p>__LINE__</p>
<p>__FILE__</p>
<p>__DATE__</p>
<p>__TIME__</p>
<p>__STDC__ 当要求程序严格遵循ANSI C标准时该标识符被赋值为1</p>
<p>__cplusplus__ 当编写C++程序时该标识符被定义</p>
<p>7. 希尔 冒泡 快速 插入 哪个平均速度最快？</p>
<p>答案：快速排序nlog2n<br>快速排序、归并排序和基数排序在不同情况下都是最快最有用的。<br>8. enum的声明方式</p>
<p>答案：enum 枚举类型名 {</p>
<p>枚举常量1，</p>
<p>枚举常量2，</p>
<p>...</p>
<p>枚举常量n</p>
<p>};</p>
<p>For example:</p>
<p>enum weekday { sunday, monday, tuesday, wednesday, thursday, friday, saturda<br>y};</p>
<p>enum weekday week_day;//week_day 就是一个枚举类型变量</p>
<p>11. 顺序查找的平均时间</p>
<p>答案：(1+2+3+...+n)/n = (n+1)/2</p>
<p>14.不使用其他变量，交换两个整型a，b的值</p>
<p>答案：x = x+y; y = x-y; x = x-y</p>
<p>还有x=x^y;y=x^y;x=x^y这个更好一些</p>
<p>15. 写出float x 与&#8220;零值&#8221;比较的if语句。</p>
<p>if(x&gt;=0.000001 &amp;&amp; x&lt;=-0.000001)（x不为0的比较）</p>
<p>float: 6位精度</p>
<p>double: 16位精度</p>
<p>2. Internet采用哪种网络协议？该协议的主要层次结构？</p>
<p>答案：TCP/IP协议。应用层、传输层、网络层、数据链路层和物理层。</p>
<p>3. Internet物理地址和IP地址转换采用什么协议？</p>
<p>答案：地址解析协议ARP address resolution protocol</p>
<p>4. IP地址的编码分为哪俩部分？</p>
<p>答案：网络号和主机号。不过是要和&#8220;子网掩码&#8221;按位与上之后才能区分哪些是网络位<br>哪些是主机位。</p>
<p>&nbsp;</p>
<p>大题： </p>
<p>1 把字符串转换为小写，不成功返回NULL,成功返回新串 </p>
<p>char* toLower(char* sSrcStr)<br>{<br>char* sDest= NULL;<br>if( __1___)<br>{<br>int j;<br>sLen = strlen(sSrcStr);<br>sDest = new [_______2_____];<br>if(*sDest == NULL)<br>return NULL;<br>sDest[sLen] = '\0';<br>while(_____3____)<br>sDest[sLen] = toLowerChar(sSrcStr[sLen]);<br>}<br>return sDest;<br>}</p>
<p>2 把字符串转换为整数 例如："-123" -&gt; -123</p>
<p>main()<br>{<br>.....<br>if( *string == '-' )<br>n = ____1______;<br>else<br>n = num(string);<br>.....<br>}</p>
<p>int num(char* string)<br>{<br>for(;!(*string==0);string++)<br>{<br>int k;<br>k = __2_____;<br>j = --sLen;<br>while( __3__)<br>k = k * 10;<br>num = num + k;<br>}<br>return num;<br>}</p>
<p>&nbsp;</p>
<p><br>附加题： </p>
<p>1 linux下调试core的命令，察看堆栈状态命令<br>2 写出socks套接字 服务端 客户端通讯程序<br>3 填空补全程序，按照我的理解是添入：win32调入dll的函数名 <br>查找函数入口的函数名 找到函数的调用形式 <br>把formView加到singledoc的声明 将singledoc加到app的声明 </p>
<p><br>#define Max(a,b) ( a/b)?a:b</p>
<p><br>写一个病毒<br>while (1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int *p = new int[10000000];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>不使用额外空间,将 A,B两链表的元素交叉归并<br>将树序列化 转存在数组或 链表中<br>struct st{<br>int i;<br>short s;<br>char c;<br>};<br>sizeof(struct st);<br>答案：8<br>&nbsp;&nbsp;&nbsp; char * p1;<br>&nbsp;&nbsp;&nbsp; void * p2;<br>&nbsp;&nbsp;&nbsp; int *p3;<br>&nbsp;&nbsp;&nbsp; char p4[10];<br>&nbsp;&nbsp;&nbsp; sizeof(p1...p4) =?<br>答案：4，4，4，10</p>
<p><br>二分查找<br>快速排序<br>双向链表的删除结点<br>有12个小球,外形相同,其中一个小球的质量与其他11个不同 <br>给一个天平,问如何用3次把这个小球找出来 <br>并且求出这个小球是比其他的轻还是重<br>解答:<br>哈哈，据说这是微软前几年的一个面试题。很经典滴啊！三次一定能求出来，而且能确定是重还是轻。 <br>数据结构的知识还没怎么学透，不过这个题我到是自己研究过，可以分析下。 <br>将12个球分别编号为a1,a2,a3.......a10,a11,a12.<br>第一步：将12球分开3拨，每拨4个，a1~a4第一拨，记为b1， a5~a6第2拨，记为b2，其余第3拨，记为b3； <br>第二步：将b1和b2放到天平两盘上，记左盘为c1，右为c2；这时候分两中情况： </p>
<p>1.c1和c2平衡，此时可以确定从a1到a8都是常球；然后把c2拿空，并从c1上拿下a4，从a9到a12四球里随便取三球，假设为a9到a11，放到c2上。此时c1上是a1到a3，c2上是a9到a11。从这里又分三种情况： <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A：天平平衡，很简单，说明没有放上去的a12就是异球，而到此步一共称了两次，所以将a12随便跟11个常球再称一次，也就是第三次，马上就可以确定a12是重还是轻； <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B：若c1上升，则这次称说明异球为a9到a11三球中的一个，而且是比常球重。取下c1所有的球，并将a8放到c1上，将a9取下，比较a8和a11（第三次称），如果平衡则说明从c2上取下的a9是偏重异球，如果不平衡，则偏向哪盘则哪盘里放的就是偏重异球； <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C：若c1下降，说明a9到a11里有一个是偏轻异球。次种情况和B类似，所以接下来的步骤照搬B就是； </p>
<p>2.c1和c2不平衡，这时候又分两种情况，c1上升和c1下降，但是不管哪种情况都能说明a9到a12是常球。这步是解题的关键。也是这个题最妙的地方。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A：c1上升，此时不能判断异球在哪盘也不能判断是轻还是重。取下c1中的a2到a4三球放一边，将c2中的a5和a6放到c1上，然后将常球a9放到c2上。至此，c1上是a1，a5和a6，c2上是a7，a8和a9。此时又分三中情况： <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1）如果平衡，说明天平上所有的球都是常球，异球在从c1上取下a2到a4中。而且可以断定异球轻重。因为a5到a8都是常球，而第2次称的时候c1是上升的，所以a2到a4里必然有一个轻球。那么第三次称就用来从a2到a4中找到轻球。这很简单，随便拿两球放到c1和c2，平衡则剩余的为要找球，不平衡则哪边低则哪个为要找球； <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）c1仍然保持上升，则说明要么a1是要找的轻球，要么a7和a8两球中有一个是重球（这步懂吧？好好想想，很简单的。因为a9是常球，而取下的a2到a4肯定也是常球，还可以推出换盘放置的a5和a6也是常球。所以要么a1轻，要么a7或a8重）。至此，还剩一次称的机会。只需把a7和a8放上两盘，平衡则说明a1是要找的偏轻异球，如果不平衡，则哪边高说明哪个是偏重异球； <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3）如果换球称第2次后天平平衡打破，并且c1降低了，这说明异球肯定在换过来的a5和a6两求中，并且异球偏重，否则天平要么平衡要么保持c1上升。确定要找球是偏重之后，将a5和a6放到两盘上称第3次根据哪边高可以判定a5和a6哪个是重球； <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B：第1次称后c1是下降的，此时可以将c1看成c2，其实以后的步骤都同A，所以就不必要再重复叙述了。至此，不管情况如何，用且只用三次就能称出12个外观手感一模一样的小球中有质量不同于其他11球的偏常的球。而且在称的过程中可以判定其是偏轻还是偏重。</p>
<p>给一个奇数阶N幻方，填入数字1，2，3...N*N,使得横竖斜方向上的和都相同<br>答案:<br>#include&lt;iostream&gt; <br>#include&lt;iomanip&gt; <br>#include&lt;cmath&gt; <br>usingnamespace std; <br>int main() <br>{ <br>&nbsp;int n; <br>&nbsp;cin&gt;&gt;n; <br>&nbsp;int i; <br>&nbsp;int **Matr=newint*[n];//动态分配二维数组 <br>&nbsp;for(i=0;i&lt;n;++i) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matr[ i ]=newint[n];//动态分配二维数组 <br>&nbsp;//j=n/2代表首行中间数作为起点，即1所在位置 <br>&nbsp;int j=n/2,num=1;//初始值 <br>&nbsp;i=0; <br>&nbsp;while(num!=n*n+1) <br>&nbsp;{ <br>//往右上角延升，若超出则用%转移到左下角 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matr[(i%n+n)%n][(j%n+n)%n]=num; <br>&nbsp;&nbsp;&nbsp; //斜行的长度和n是相等的，超出则转至下一斜行 <br>&nbsp;&nbsp;&nbsp; if(num%n==0) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++; <br>&nbsp;&nbsp; else <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i--; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j++; <br>&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; num++; <br>&nbsp;} <br>&nbsp;for(i=0;i&lt;n;i++) <br>&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(j=0;j&lt;n;++j) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;setw((int)log10(n*n)+4)&lt;&lt;Matr[ i][ j ];//格式控制 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;endl&lt;&lt;endl;//格式控制 <br>&nbsp;} <br>for(i=0;i&lt;n;++i) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete [ ]Matr[ i ]; <br>return1; <br>} <br>腾讯的一道面试题:(与百度相似,可惜昨天百度死在这方面了)////<br>在一个文件中有 10G 个整数，乱序排列，要求找出中位数。内存限制为 2G。只写出思路即可。<br>答案:<br>1， 把整数分成256M段，每段可以用64位整数保存该段数据个数，256M*8 = 2G内存，先清0<br>2，读10G整数，把整数映射到256M段中，增加相应段的记数 <br>3，扫描256M段的记数，找到中位数的段和中位数的段前面所有段的记数，可以把其他段的内存释放 <br>4，因中位数段的可能整数取值已经比较小（如果是32bit整数，当然如果是64bit整数的话，可以再次分段），对每个整数做一个记数，再读一次10G整数，只读取中位数段对应的整数，并设置记数。 <br>5，对新的记数扫描一次，即可找到中位数。 <br>如果是32bit整数，读10G整数2次，扫描256M记数一次，后一次记数因数量很小，可以忽略不记<br>(设是32bit整数，按无符号整数处理 <br>整数分成256M段？ 整数范围是0 - 2^32 - 1 一共有4G种取值，4G/256M = 16，每16个数算一段 0-15是1段，16-31是一段，...<br>整数映射到256M段中？如果整数是0-15，则增加第一段记数，如果整数是16-31，则增加第二段记数，...</p>
<p>其实可以不用分256M段，可以分的段数少一写，这样在扫描记数段时会快一些，还能节省一些内存)</p>
<p><br>腾讯题二:<br>一个文件中有40亿个整数，每个整数为四个字节，内存为1GB，写出一个算法：求出这个文件里的整数里不包含的一个整数<br>答:<br>方法一: 4个字节表示的整数，总共只有2^32约等于4G个可能。 <br>为了简单起见，可以假设都是无符号整数。 <br>分配500MB内存，每一bit代表一个整数，刚好可以表示完4个字节的整数，初始值为0。基本思想每读入一个数，就把它对应的bit位置为１，处理完40G个数后，对500M的内存遍历，找出一个bit为0的位，输出对应的整数就是未出现的。 <br>算法流程： <br>１）分配５００ＭＢ内存buf，初始化为０ <br>２）unsigned int x=0x1;<br>&nbsp;&nbsp;&nbsp; for each int j in file<br>&nbsp;&nbsp;&nbsp; buf=buf &#166;x &lt; &lt;j;<br>&nbsp;&nbsp;&nbsp; end<br>(3) for(unsigned int i=0; i &lt;= 0xffffffff; i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(buf &amp; x &lt; &lt;i))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>以上只是针对无符号的，有符号的整数可以依此类推。<br>方法二:<br>文件可以分段读啊，这个是O（2n）算法，应该是很快的了，而且空间也允许的。 <br>不过还可以构造更快的方法的，更快的方法主要是针对定位输出的整数优化算法。 <br>思路大概是这样的，把值空间等分成若干个值段，比如值为无符号数，则 <br>00000000H-00000FFFH<br>00001000H-00001FFFH<br>......<br>0000F000H-0000FFFFH<br>.....<br>FFFFF000H-FFFFFFFFH<br>这样可以订立一个规则，在一个值段范围内的数第一次出现时，对应值段指示值Xn=Xn+1，如果该值段的所有整数都出现过，则Xn=1000H，这样后面输出定位时就可以直接跳过这个值段了，因为题目仅仅要求输出一个，这样可以大大减少后面对标志数值的遍历步骤。 <br>理论上值段的划分有一定的算法可以快速的实现，比如利用位运算直接定位值段对应值进行计算。</p>
<img src ="http://www.cppblog.com/life02/aggbug/99290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-23 15:00 <a href="http://www.cppblog.com/life02/archive/2009/10/23/99290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>09腾讯笔试题（转）</title><link>http://www.cppblog.com/life02/archive/2009/10/23/99291.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Fri, 23 Oct 2009 07:00:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/23/99291.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/99291.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/23/99291.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/99291.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/99291.html</trackback:ping><description><![CDATA[<p><a href="http://blog.csdn.net/yysdsyl/archive/2007/12/30/2005232.aspx">http://blog.csdn.net/yysdsyl/archive/2007/12/30/2005232.aspx</a><br>另一个笔试版本<br><br>1，题：请定义一个宏，比较两个数a，b的大小，不能使用大于、小于、if语句。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 答案：#define Max(a,b)&nbsp; (a/b)?a:b</p>
<p>相关：</p>
<p>（1）在C语言源程序中允许用一个标识符来表示一个字符串，称为&#8220;宏&#8221;。被定义为&#8220;宏&#8221;的标识符称为&#8220;宏名&#8221;。在编译预处理时，对程序中所有出现的&#8220;宏名&#8221;，都用宏定义中的字符串去代换，这称为&#8220;宏代换&#8221;或&#8220;宏展开&#8221;。</p>
<p>（2）宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。</p>
<p>（3）在C语言中，&#8220;宏&#8221;分为有参数和无参数两种。</p>
<p>（4）无参数宏定义</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般形式：&nbsp;&nbsp; #define&nbsp; 标识符 字符串</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中的&#8220;#&#8221;表示这是一条预处理命令。凡是以&#8220;#&#8221;开头的均为预处理命令。&#8220;define&#8221;为宏定义命令。&#8220;标识符&#8221;为所定义的宏名。&#8220;字符串&#8221;可以是常数、表达式、格式串等。比如说符号常量的定义就是一种无参宏定义。此外，常对程序中反复使用的表达式进行宏定义。例如：# define M&nbsp;&nbsp; （y*y+3*y），定义M为表达式（y*y+3*y），在编写源程序时，所有的（y*y+3*y）都可由M代替，而对源程序做编译时，将先有预处理程序进行宏代换，即用（y*y+3*y）表达式去置换所有的宏名M，然后再进行编译。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例子：</p>
<p>&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;&nbsp;&nbsp; #&nbsp;&nbsp; define M （y*y+3*y）</p>
<p>&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;&nbsp;&nbsp; main(){</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int s,y;</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf ("input a number:")</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf("%d",&amp;y);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s=3*M+4*M+5*M;</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("s=%d\n",s);</p>
<p>&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;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：上例程序中。宏定义表达式（y*y+3*y）两边的括号不能少，否则会发生错误。当做以下定义后：# define M y*y+3*y在宏展开时将得到下述语句：</p>
<p>s=3*y*y+3*y+4*y*y+3*y+5*y*y+3*y，显然与题意不符。因此，在作宏定义时必须十分注意，应保证在宏代换之后不发生错误。</p>
<p>（5）带参数宏定义</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C语言允许宏带有参数。在宏定义中的参数称为形式参数，在宏调用中的参数称为实际参数。对带参数的宏，在调用中，不仅要宏展开，而且要用实参去代换形参。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般定义形式：&nbsp;&nbsp;&nbsp; # define&nbsp; 宏名 （形参表） 字符串&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在字符串中含有各个形参。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般调用形式：&nbsp;&nbsp;&nbsp;&nbsp; 宏名（实参表）</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如：&nbsp;&nbsp; </p>
<p>&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;&nbsp; define&nbsp; MAX(a,b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a&gt;b)?a:b</p>
<p>&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; main () {</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int x,y,max;</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("input two numbers:");</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf("%d%d",&amp;x,&amp;y);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; max=MAX(x,y);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("max=%d\n",max);</p>
<p>&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; }</p>
<p>（6） 对于宏定义语句，预处理程序对它不作任何检查，如果有错误，只能在编译已被宏展开后的源程序时发现。</p>
<p>（7）宏定义在行末不必加分号，如加上分号则连分号也一起置换。</p>
<p>（8）宏定义必须写在函数之外，其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#underf命令。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如：</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp; define&nbsp; PI 3.14159</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main()</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ......</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # underf&nbsp; PI</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f1()&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这段程序中，PI只在main函数中有效，在f1()中无效。</p>
<p>（9）宏名在源程序中若用引号括起来，则预处理程序不对其做宏代换。</p>
<p>&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; 例如：</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp; define&nbsp;&nbsp; Ok&nbsp; 100</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main()</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("OK");</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n");</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这段程序中，宏名OK表示100，但在printf语句中OK被引号括起来，因此不做宏代换，把&#8220;OK&#8221;当字符串处理。程序的运行结果为：OK</p>
<p>&nbsp;（10）宏定义允许嵌套，在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。</p>
<p>&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; 例如：</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define&nbsp;&nbsp; PI&nbsp;&nbsp; 3.14159</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define&nbsp;&nbsp; S&nbsp;&nbsp;&nbsp;&nbsp; PI*y*y</p>
<p>（11）习惯上宏名用大写字母表示，以便与变量区别。但也允许用小写字母。</p>
<p>（12）可用宏定义表示数据类型，使书写方便。</p>
<p>&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; 例如：</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # define&nbsp; STU&nbsp; struct stu</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样一来，可以在程序中使用STU做变量说明，例如：</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STU&nbsp; body[5],*p;</p>
<p>（14）对&#8220;输出格式&#8221;做宏定义，可以减少书写麻烦。</p>
<p>&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;&nbsp; 例如：</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # define&nbsp; P printf</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define&nbsp;&nbsp; D "%d\n"</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define&nbsp; F "%f\n"</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main(){</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int a=5, c=8, e=11;</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float b=3.8,&nbsp; d=9.7,&nbsp;&nbsp; f=21.08;</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P(D F,a,b);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P(D F,c,d);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P(D F,e,f);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>（15）带参宏定义中，宏名和形参表之间不能有空格出现。</p>
<p>&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; #define&nbsp; MAX(a,b)&nbsp; (a&gt;b)?a:b</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不能写成&nbsp;&nbsp;&nbsp;&nbsp; #define&nbsp; MAX&nbsp; (a,b)&nbsp; (a&gt;b)?a:b&nbsp; 这样一来，宏调用语句：</p>
<p>max=MAX(x,y)&nbsp; 将变为：&nbsp; max=MAX(a,b)(a&gt;b)?a:b(x,y)&nbsp;&nbsp; ，这显然是错误的。</p>
<p>（16）再带参宏定义中，形式参数不分配内存单元，因此不必做类型定义。而宏调用中的实参有具体值。要用他们去代换形参，因此必须做类型说明。这是与函数中的情况不同的。在函数中，形参和实参是两个不同的量，各有自己的作用域，调用时要把实参值赋予形参，进行&#8220;值传递&#8221;。而在带参宏中，只是符号代换，不存在值传递的问题。</p>
<p>（17）在宏定义中的形参是标识符，而宏调用中的实参可以是表达式。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如：</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define SQ(y)&nbsp; (y)*(y)</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main(){</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int a,sq;</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("input a number:");</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf("%d",&amp;a);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sq=SQ(a+1);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("sq=%d\n",sq);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; </p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>（18）在宏定义中，字符串内的形参通常要用括号括起来以避免出错，例如把上面的例子改成：</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define SQ(y)&nbsp; y*y</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main(){</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int a,sq;</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("input a number:")</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf("%d",&amp;a);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sq=SQ(a+1)</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当给a赋值为3时运行的结果是sq=7。</p>
<p>（19）为避免错误，对于宏定义不仅应在参数两侧加括号，也应在整个字符串外加括号。</p>
<p>（20）宏定义也可以用来定义多个语句，在宏调用时，把这些语句又代换到源程序内。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如：</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define SSSV(s1,s2,s3,v)&nbsp;&nbsp;&nbsp; s1=l*w;s2=l*h,s3=w*h,v=w*l*h;</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main(){</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int l=3,w=4,h=5,sa,sb,sc,vv;</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SSSV(sa,sb,sc,vv);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("sa=%d\nsb=%d\nsc=%d\nvv=%d\n",sa,sb,sc,vv);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上述程序第一行为宏定义，用宏名SSSV表示4个赋值语句，4个形参分别为4个赋值符左边的变量。在宏调用时，把4个语句展开并用实参代替形参。使计算结果送入实参中。</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/omaigaode/archive/2008/12/04/3441834.aspx">http://blog.csdn.net/omaigaode/archive/2008/12/04/3441834.aspx</a></p>
<img src ="http://www.cppblog.com/life02/aggbug/99291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-23 15:00 <a href="http://www.cppblog.com/life02/archive/2009/10/23/99291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>别人的百度面试学习下（转）</title><link>http://www.cppblog.com/life02/archive/2009/10/23/99288.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Fri, 23 Oct 2009 06:56:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/23/99288.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/99288.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/23/99288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/99288.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/99288.html</trackback:ping><description><![CDATA[<p>[此帖已被设为精华] 转载</p>
<p>发信站: 北邮人论坛 (Tue Oct 20 16:52:13 2009), 站内</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 先简单介绍一下本人，本人小硕，信通院通信与信息系统，无线方向，投的百度无线新技术研发，技术岗。虽然在实验室做过一些项目，但也都是无线通信的底层开发，和互联网没有任何关系。。。<br>&nbsp;&nbsp; 今早尚未睡醒，突然一阵手机铃声传来，一个陌生的手机号码，见其不是响一声电话，遂接之，在不算清楚的状态下被通知下午一点普天大厦百度面试，突如其来的通知搞的我有点措手不及。本来觉得18号笔试完直接被鄙视了，这从天而降的机会还是迫使我需要在短时间内做好必要的准备，所谓的准备也就是从网上查查面经，复习复习笔试题目，总之还是抱着学习的态度去的，没抱太大希望。<br>&nbsp;&nbsp; 下午12点40到达普天大厦，签到后稍微等了一会儿，接待我的jj将我指到一个小型的广场，阳光很好，有很多小圆桌，我的面试官已经坐在其中一个小圆桌上等我了，是一对一的面试，坐下后简单打了个招呼，面试就开始了，先是按照我的简历问我关于最近一个项目的相关内容，包括项目组的职责，做过什么，贡献在哪，碰到过什么难题等等，因为面试官gg估计也不太懂我做过的东西，我就blabla一顿介绍，然后又问我学的课程中认为哪个比较困难，困难在哪，有没有具体例子，总之问的比较细。我觉得在这个环节最重要的就是让面试官觉得项目是你做的，有的可讲，对于自己的贡献的部分讲的越细越好，对方听没听懂没有关系，关键在于能够有条理的回答对方问的问题（当然，如果对方对自己做过的项目非常了解，回答问题的时候就应该尽量谨慎，不要扯淡，以免露怯。。。）<br>&nbsp;&nbsp; 之后的环节是算法，数据结构，编程题，由面试官现场出题，他先出了两个比较简单的题目，一个是 char str ="hello";sizeof(str)和strlen(str)为多少，还有一个是floata；将其和0做比较的if语句如何编写。然后出了一个数据结构算法实现题：给定二叉树，写出计算该二叉树的高度的函数，这题我没想出来。。。他又出了一个：给定二叉树，写出拷贝该二叉树的函数，返回拷贝后根节点值，这道题我只说出了大概的思路，看面试官的表情，不是很满意。。。随后又问了关于二叉树深度优先和广度优先的算法问题，和堆排序的算法问题，无奈专业背景相差过大，这些我都没答上来，对于学计算机的学生，我觉得这些问题应该都不难。。。最后又给我出了道关于字符串的问题：给定字符串，内容为a-z的字符，其中有一个字符出现为奇数次，其他均为偶数次，找出出现奇数次的字符，我简单给出了一个算法，但是时间复杂度过高，于是面试官gg问我能不能对算法进行优化，这个又难住我了，虽然面试官gg人很好，在我想的过程中一直给予提示，无奈我水平不够。。。想出来的答案都相去甚远。。。我觉得这个环节本身考察的问题其实并不难，都是基础，换一个学计算机的学生，这些东西不过是平时的功课罢了，只要算法，数据结构的基础知识过硬，回答这些问题应该都不会很困难<br>&nbsp;&nbsp; 距离面试结束还有几分钟的时候，和面试官gg简单聊了聊，获知对方是南开计算机毕业的，告诉我互联网行业技术岗主要要求的素质包括算法和数据结构，网络的基本知识，编程能力等等，期间还说了一些我没太明白的专有名词，总之，他觉得以我现在的知识储备和项目经历，目前还不太适合这个职位。。。<br>&nbsp;&nbsp;&nbsp; 一个小时后，面试结束，本来我也是抱着学习的心态过来试试，对于这样的结果我还是预想的到的，这一趟面试也算没有白来，能够学到一些东西我就知足了。希望大家都能找到好工作，共勉！<br>转载请注明出自应届生求职招聘论坛 <a href="http://bbs.yingjiesheng.com/">http://bbs.yingjiesheng.com/</a>,本贴地址:http://bbs.yingjiesheng.com/thread-253544-1-1.html</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/life02/aggbug/99288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-23 14:56 <a href="http://www.cppblog.com/life02/archive/2009/10/23/99288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QQ笔试题</title><link>http://www.cppblog.com/life02/archive/2009/10/19/98996.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Mon, 19 Oct 2009 13:59:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/19/98996.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/98996.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/19/98996.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/98996.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/98996.html</trackback:ping><description><![CDATA[<font face=Verdana>1 计算 a^b &lt;&lt; 2 (运算符优先级问题) <br>int a = 2;<br>int b = 1;<br>int c = 2;<br>cout &lt;&lt; (a ^ b &lt;&lt; c);<br>6<br>2 根据先序中序求后序 <br><br>3 a[3][4]哪个不能表示 a[1][1]: *(&amp;a[0][0]) *(*(a+1)+1) *(&amp;a[1]+1) *(&amp;a[0][0]+4) <br>cout &lt;&lt; *(&amp;a[1][1]) &lt;&lt; endl<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt;*(*(a+1)+1) &lt;&lt; endl<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; *(&amp;a[1]+1) &lt;&lt; endl<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; *(&amp;a[0][0]+4);<br>6<br>6<br>0012FEC8<br>5<br>4 for(int i...) <br>&nbsp;&nbsp;&nbsp; for(int j...) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(i,j); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(j) <br>会出现什么问题 <br>J没有定义，不在其作用域<br>5 for(i=0;i&lt;10;++i,sum+=i);的运行结果 <br>&nbsp;&nbsp;&nbsp; int i, sum = 0;<br>for(i=0;i&lt;10;++i,sum+=i);<br>cout &lt;&lt; sum;<br>55<br>6 10个数顺序插入查找二叉树，元素62的比较次数 <br><br>7 10个数放入模10hash链表，最大长度是多少 <br><br>8 fun((exp1,exp2),(exp3,exp4,exp5))有几个实参 <br>2个，逗号运算符，<br>9 希尔 冒泡 快速 插入 哪个平均速度最快 <br><br>10 二分查找是 顺序存储 链存储 按value有序中的哪些 <br><br>11 顺序查找的平均时间 <br><br>12 *p=NULL *p=new char[100] sizeof(p)各为多少 <br>都是4<br>13 频繁的插入删除操作使用什么结构比较合适，链表还是数组 <br>链表<br>14 enum的声明方式 <br>enum A{<br>a1,<br>a2,<br>a3,<br>};<br>15 1-20的两个数把和告诉A,积告诉B，A说不知道是多少，<br>B也说不知道，这时A说我知道了，B接着说我也知道了，问这两个数是多少 <br><br><br>大题： <br><br>1 把字符串转换为小写，不成功返回NULL,成功返回新串 <br><br>char* toLower(char* sSrcStr) <br>{ <br>&nbsp;&nbsp;&nbsp; char* sDest= NULL; <br>&nbsp;&nbsp;&nbsp; if( __1___) <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sLen = strlen(sSrcStr); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sDest = new [_______2_____]; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(*sDest == NULL) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NULL; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sDest[sLen] = '\0'; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(_____3____) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sDest[sLen] = toLowerChar(sSrcStr[sLen]); <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; return sDest; <br>} <br>char toLowerChar(char a)<br>{<br>&nbsp;&nbsp;&nbsp; if(a &gt;= 'A' &amp;&amp; a &lt;= 'Z')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a - 'A' + 'a';<br>}<br><br>char* toLower(char* sSrcStr) <br>{ <br>&nbsp;&nbsp;&nbsp; char* sDest= NULL; <br>&nbsp;&nbsp;&nbsp; if(sSrcStr) <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int sLen = strlen(sSrcStr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sDest = new char[sLen + 1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(*sDest == NULL) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NULL; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sDest[sLen] = '\0'; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(sLen--) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sDest[sLen] = toLowerChar(sSrcStr[sLen]); <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; return sDest; <br>}<br><br>2 把字符串转换为整数 例如："-123" -&gt; -123 <br><br>main() <br>{ <br>&nbsp;&nbsp;&nbsp; ..... <br>&nbsp;&nbsp;&nbsp; if( *string == '-' ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = ____1______; -1* num(string+1)<br>&nbsp;&nbsp;&nbsp; else <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = num(string); <br>&nbsp;&nbsp;&nbsp; ..... <br>} <br><br>int num(char* string) <br>{ <br>&nbsp;&nbsp;&nbsp; for(;!(*string==0);string++) <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int k; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = __2_____; *string<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = --sLen; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while( __3__) j--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = k * 10; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; num = num + k; <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; return num; <br>} <br><br>附加题： <br><br>1 linux下调试core的命令，察看堆栈状态命令 <br><br>2 写出socks套接字 服务端 客户端 通讯程序 <br><br>3 填空补全程序，按照我的理解是添入：win32调入dll的函数名 <br>查找函数入口的函数名 找到函数的调用形式 <br>把formView加到singledoc的声明 将singledoc加到app的声明 <br><br>4 有关系 s(sno,sname) c(cno,cname) sc(sno,cno,grade) <br>1 问上课程 "db"的学生no <br>2 成绩最高的学生号 <br>3 每科大于90分的人数<br><br>2005年腾讯招聘<br>选择题(60) <br>c/c++ os linux 方面的基础知识 c的Sizeof函数有好几个! <br>程序填空(40) <br>1.(20) 4空x5 <br>不使用额外空间,将 A,B两链表的元素交叉归并 <br>2.(20) 4空x5 <br>MFC 将树序列化 转存在数组或 链表中!<br><br>发信人: ChinaOfey (勇敢的傻，傻得勇敢), 信区: Career_Plaza<br>标 题: 腾讯笔试题<br>发信站: 水木社区 (Sat Nov 5 16:25:25 2005), 站内<br><br>希望明年的兄弟有用!(B卷)<br><br>第一部分:基本都是数据结构题+1,2道操作系统和数据库相关的(比较基本)<br><br>有印象的:<br><br>1,为节省空间,两个栈共用一个空间,栈底在两边,问什么时候表明空间用完<br>&nbsp;&nbsp;&nbsp; 答案:栈顶相遇时<br>&nbsp;&nbsp;&nbsp; 这道题就是很基础的一个题目,因为是第一道题,所以印象比较深^_^<br><br>2,char A[5]; char* B ="abcdefg"; void * C; C = new char[100];<br>&nbsp;&nbsp;&nbsp; sizeof(A) sizeof(B) size(C)<br>5,4,4<br>3,爸爸,妈妈,妹妹,小强,至少两个人同一生肖的概率是多少<br>&nbsp;&nbsp;&nbsp; 1- 12*11*10*9/12*12*12*12 = 43% ,我忘用1减了....<br><br>然后还有几个看程序给结果的题,考察了类,指针的内容<br><br>第二部分:程序填空<br><br>&nbsp;&nbsp; 主要要能看出他的思路<br><br>第三部分:写代码<br><br>&nbsp;&nbsp; 1,关于mfc的,一个控件,显示时间,1s钟刷新一次<br><br>&nbsp;&nbsp; 2,SQL语言进行简单的数据库操作,建表,查询,求平均工资等<br><br>&nbsp;&nbsp;&nbsp;&nbsp; 不记得语言了,因此只好自创....ft<br><br>&nbsp;&nbsp; 3,Unix进程通信有哪些方式,各有什么特点?<br><br>&nbsp;&nbsp; (其中A卷给的是道网络编程题目)<br><br>第四部分:主观题<br><br>考rp的,比较无聊,手都写酸了....<br><br>程序4说明]<br>设 M 叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值部分<br>(设为一个字符) 和用&#8220;( )&#8221;,括起来的各子树的列表 (如有子树的话) ,各子列表间用&#8220;<br>,&#8221;,分隔。例如下面的三叉树可用列表 a( b( c,d ),e,f( g,h,i ))表示。<br>　<br><br>本程序输入列表,生成一棵 M 叉树,并由 M 叉树输出列表。假定输入无错误。<br>[程序4]<br>#include〈stdio.h〉<br>#include〈stdlib.h〉<br>#define M 3<br>typedef struct node{ char val;<br>struct node *subTree[M];<br>} NODE;<br>char buf[255] ,*str = buf<br>NODE *d = NULL<br>NODE *mackTree( ) /*由列表生成M叉树*/<br>{ int k; NODE *s ;<br>s = __(1)__<br>s -&gt; val = *str++ ;<br>for ( k = 0 ; k &lt; M ; k++ ) s-&gt; subTree[k] = NULL ;<br>if(*str='( '){<br>k = 0;<br>do { str++;<br>s -&gt; subTree[k] = __(2)__ ;<br>if ( *str == ')' ) { str++; break ; }<br>k = k+l ;<br>} while ( __(3)__ );<br>}<br>return s ;<br>}<br>void walkTree( NODE *t ) /*由 M 叉树输出列表*/<br>{ int i ;<br>if（ t != NULL ) {<br>__(4)__<br>if ( t -&gt; subTree[0] == NULL ) return ;<br>putchar ( '( ' ) ;<br>for ( i = 0 ; i &lt; m ; i++) {<br>__(5)__<br>if ( i! = M - l &amp;&amp; t -&gt; subTree[i+l] != NULL )<br>putchar ( ', ' ) ;<br>}<br>putchar ( ') ' ) ;<br>}<br>}<br>　<br>void main( )<br>{ printf( "Enter exp:" ) ;<br>scanf( "%S" , str ) ;<br>d = makeTree() ;<br>walkTree( d ) ; putchar( '\n') ;<br>}<br>有两个集合&nbsp;&nbsp; <br>集合A{1，7，19，21，55，100。。。}&nbsp;&nbsp; <br>集合B{7，22，100。。。}&nbsp;&nbsp; <br>两个集合都是10万个数据(已排序)，要求写一个算法，判断B是不是A的子集，算法时间复杂度为Q（N）</font>
<img src ="http://www.cppblog.com/life02/aggbug/98996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-19 21:59 <a href="http://www.cppblog.com/life02/archive/2009/10/19/98996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>淘宝笔试题（转）</title><link>http://www.cppblog.com/life02/archive/2009/10/18/98898.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Sun, 18 Oct 2009 13:28:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/18/98898.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/98898.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/18/98898.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/98898.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/98898.html</trackback:ping><description><![CDATA[<p>今天上午在南大，做了阿里巴巴的技术题，我两份都做了，下面把其中C++相关的题回忆了一部分起来，希望对大家有帮助啊，<br>为了给大家省点钱，我就直接粘贴在页面上啦，描述不全的，大家谅解啊</p>
<p>1.Stuct Foo{<br>Foo(){}<br>Foo(int){}<br>Void fun(){}<br>};</p>
<p>int main (){<br>Foo a(10);<br>(1)<br>a.fun();<br>(2)<br>Foo b();<br>(3)<br>b.fun();<br>(4)<br>}<br>上面的程序中哪个语句是错误的；</p>
<p>2.struct 和 class 的区别；</p>
<p>3.const char*p1=&#8221;hello&#8221;;</p>
<p>Char *const p2=&#8221;world&#8221;;<br>下面哪些操作是合法的：（1）p1++;<br>(2)*p1=&#8221;w&#8221;;<br>(3)p2++;<br>(4)*p2=&#8221;h&#8221;;</p>
<p>4.n进制下。567*456=150216成立，则n的值是多少？</p>
<p>5.C++中不能重载的运算符是？</p>
<p>6.排序方法中元素比较次数与初始化排序无关的是哪种排序方法。</p>
<p>7. int x[4]={0}; int y[4]={1};则x,y的值是多少？</p>
<p>8.二分查找的理论</p>
<p>9.采取FIFO页面淘汰算法，如何计算缺页。</p>
<p>10.顺序栈的容量如何计算</p>
<p>11．文件索引结构</p>
<p>12.搜索所用的数据结构的内存，以及速度的问题</p>
<p>13.堆中的数据的存储机制</p>
<p>14.页式存储系统，如何计算分块的大小</p>
<p>15.std::vector::iterator<br>可重载的运算符是哪些： ++，&gt;&gt;, *(前置), ==</p>
<p>16.判断单向链表是否存在环的最佳方案是什么？</p>
<p>17.100张多米诺骨牌1，2，3 &#8230;&#8230;100，第一次先把所有的基数位置的牌拿掉，第二次把剩下的基数位置的牌拿掉，依此类推，最后剩下的牌是哪个：(A)32，(B)64，(C)88，(D)96</p>
<p>18.在C++中不能重载下面的哪个运算符：（A）*<br>(B) ?:<br>(C) ::<br>(D) delete</p>
<p>19.就是指针的一大堆问题啦，什么函数指针啊，数组指针之类的</p>
<p>20. sizeof() 计算问题</p>
<p>21. public,protected在派生或者继承之后的访问权的问题<br>转载请注明出自应届生求职招聘论坛 <a href="http://bbs.yingjiesheng.com/">http://bbs.yingjiesheng.com/</a>,本贴地址:http://bbs.yingjiesheng.com/thread-239002-1-1.html</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/life02/aggbug/98898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-18 21:28 <a href="http://www.cppblog.com/life02/archive/2009/10/18/98898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>阿里巴巴试题（转）</title><link>http://www.cppblog.com/life02/archive/2009/10/17/98851.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Sat, 17 Oct 2009 14:18:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/17/98851.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/98851.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/17/98851.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/98851.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/98851.html</trackback:ping><description><![CDATA[作者:baihacker <br>来源:http://hi.baidu.com/feixue http://hi.csdn.net/baihacker <br><br>问题描述: <br>12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? <br>这个笔试题,很YD,因为把某个递归关系隐藏得很深. <br><br>问题分析: <br>我们先把这12个人从低到高排列,然后,选择6个人排在第一排,那么剩下的6个肯定是在第二排. <br>用0表示对应的人在第一排,用1表示对应的人在第二排,那么含有6个0,6个1的序列,就对应一种方案. <br>比如000000111111就对应着 <br>第一排:0 1 2 3 4 5 <br>第二排:6 7 8 9 10 11 <br>010101010101就对应着 <br>第一排:0 2 4 6 8 10 <br>第二排:1 3 5 7 9 11 <br>问题转换为,这样的满足条件的01序列有多少个. <br>观察1的出现,我们考虑这一个出现能不能放在第二排,显然,在这个1之前出现的那些0,1对应的人 <br>要么是在这个1左边,要么是在这个1前面.而肯定要有一个0的,在这个1前面,统计在这个1之前的0和1的个数. <br>也就是要求,0的个数大于1的个数. <br>OK,问题已经解决. <br>如果把0看成入栈操作,1看成出栈操作,就是说给定6个元素,合法的入栈出栈序列有多少个. <br>这就是catalan数,这里只是用于栈,等价地描述还有,二叉树的枚举,多边形分成三角形的个数,圆括弧插入公式中的 <br>方法数,其通项是c(2n, n)/(n+1). <br><br>在 &lt; &lt;计算机程序设计艺术&gt;&gt;,第三版,Donald E.Knuth著,苏运霖译,第一卷,508页,给出了证明: <br>问题大意是用S表示入栈,X表示出栈,那么合法的序列有多少个(S的个数为n) <br>显然有c(2n, n)个含S,X各n个的序列,剩下的是计算不允许的序列数(它包含正确个数的S和X,但是违背其它条件). <br>在任何不允许的序列中,定出使得X的个数超过S的个数的第一个X的位置.然后在导致并包括这个X的部分序列中,以 <br>S代替所有的X并以X代表所有的S.结果是一个有(n+1)个S和(n-1)个X的序列.反过来,对一垢一种类型的每个序列,我们都能 <br>逆转这个过程,而且找出导致它的前一种类型的不允许序列.例如XXSXSSSXXSSS必然来自SSXSXXXXXSSS.这个对应说明,不允许 <br>的序列的个数是c(2n, n-1),因此an = c(2n, n) - c(2n, n-1).[Comptes Rendus Acad.Sci.105(Paris, 1887), 436~437] <br><br>验证: <br>其中F表示前排,B表示后排,在枚举出前排的人之后,对应的就是后排的人了,然后再验证是不是满足后面的比前面对应的人高的要求. <br>
<dl class=code>
<dt>C/C++ code
<dd>
<pre>
<div><!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">
</span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;
</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> bit_cnt(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> n)
{
</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">;
</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (; n; n </span><span style="COLOR: #000000">&amp;=</span><span style="COLOR: #000000"> n</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">result);
</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> result;
}
</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main()
{
</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> F[</span><span style="COLOR: #800080">6</span><span style="COLOR: #000000">], B[</span><span style="COLOR: #800080">6</span><span style="COLOR: #000000">];
</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> ans </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">;
</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> state </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">; state </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> (</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">12</span><span style="COLOR: #000000">); </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">state) </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (bit_cnt(state) </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">6</span><span style="COLOR: #000000">)
{
</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">, j </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">;
</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> k </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">; k </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">12</span><span style="COLOR: #000000">; </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">k) </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (state</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">k)) F[i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> k; </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> B[j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> k;
</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> ok </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">;
</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> k </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">; k </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">6</span><span style="COLOR: #000000">; </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">k) </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (B[k] </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> F[k]) {ok </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">; </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;}
ans </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> ok;
}
cout </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> ans </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> endl;
</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">;
}</span></div>
</pre>
</dd></dl>结果:132 <br>而c(12, 6)/7 = 12*11*10*9*8*7/(7*6*5*4*3*2) = 132 <br>注意:c(2n, n)/(n+1) = c(2n, n) - c(2n, n-1) <br><br>估计出题的人也读过 &lt; &lt;计算机程序艺术&gt;&gt;吧. <br><br>PS: <br>另一个很YD的问题: <br>有编号为1到n(n可以很大,不妨在这里假定可以达到10亿)的若干个格子,从左到右排列. <br>在某些格子中有一个棋子,不妨设第xi格有棋子(1 &lt;=i &lt;=k, 1 &lt;=k &lt;=n) <br>每次一个人可以把一个棋子往左移若干步, <br>但是不能跨越其它棋子,也要保证每个格子至多只有一个棋子. <br>两个人轮流移动,移动不了的为输,问先手是不是有必胜策略.
<img src ="http://www.cppblog.com/life02/aggbug/98851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-17 22:18 <a href="http://www.cppblog.com/life02/archive/2009/10/17/98851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深信服笔试（转）</title><link>http://www.cppblog.com/life02/archive/2009/10/15/98669.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Thu, 15 Oct 2009 03:59:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/15/98669.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/98669.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/15/98669.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/98669.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/98669.html</trackback:ping><description><![CDATA[<div class=postText>
<p>1. 匹配"[10]:dddddd"和"[9]:abcdegf"但不匹配"[a]:xfdf"的正则表达式。</p>
<p>2. int a[5]={1,2,3,4,5};</p>
<p>&nbsp;&nbsp;&nbsp; printf("%d\n", *((int*)(&amp;a+1)-2);</p>
<p>&nbsp;&nbsp;&nbsp; 输出是什么。</p>
<p>&nbsp;&nbsp;&nbsp; 答：4.&nbsp;&nbsp;&nbsp; 分析：(int*)(&amp;a+1)=a+5=&amp;a[5]</p>
<p>编程题：</p>
<p>1. 给定一个int型数组array[n]，写一个函数sort(int array[], int n)，n为数组长度。使得数组中不大于零的元素在前，大于零的元素在后，要求时间复杂度O(n)。</p>
<p>2. 有1001个球。甲乙两人交替取球，每次可取1、2、4个球，谁拿到最后一个球就算输。如果甲先拿，问他有没有必胜的把握？为什么？</p>
<p>&nbsp;&nbsp; 答：有。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一次甲拿1个球，以后每次：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i. 乙拿1个，甲拿2个；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ii. 乙拿2个，甲拿1个或4个；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iii. 乙拿4个，甲拿2个。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后肯定剩一个，并轮到乙拿。</p>
<p>3. 实现atoi()和itoa()</p>
<p>4. 给定一个int型数n，写一个尽可能简单的函数判断n是否为2的幂，不能用循环。</p>
<p>&nbsp;&nbsp; 答：bool foo(int n)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int a=n;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(n&lt;=0) return false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a=((a&amp;0xAAAAAAAA)&gt;&gt;1)+(a&amp;0x55555555);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a=((a&amp;0xCCCCCCCC)&gt;&gt;2)+(a&amp;0x33333333);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a=((a&amp;0xF0F0F0F0)&gt;&gt;4)+(a&amp;0x0F0F0F0F);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a=((a&amp;0xFF00FF00)&gt;&gt;8)+(a&amp;0x00FF00FF);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a=((a&amp;0xFFFF0000)&gt;&gt;16)+(a&amp;0x0000FFFF);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(a==1) return true;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else return false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>简答题：</p>
<p>1. 哪些方法可以避免或减少锁的使用？</p>
<p>2. release版本的可执行程序为什么非常大？</p>
<p>3. 使用C++赋值运算符应注意什么地方？</p>
<p>4. strcpy()为什么会造成缓冲区溢出？可用哪个函数替代？</p>
<p>5. 阻塞模式的recv在没受到数据的情况下如何返回？（不能将socket修改为非阻塞）</p>
<p>8. 有红、绿、蓝三色球分别3,2,1个。取任意两个不同颜色的球都会使它们变成第三种颜色的两个球。问最少取多少次，可使这些球都变成同一种颜色？</p>
<p>&nbsp;&nbsp; 答：无论多少次，都不可以使这些球变成同一种颜色，分析：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一、对于(R,R,R,G,G,B)即（3,2,1），有：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i.&nbsp;&nbsp; (R,G) ---&gt; (B,B,B,R,R,G)即(3,2,1)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ii. (R,B)&nbsp;&nbsp; ---&gt; (G,G,G,G,R,R)即(4,2)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iii. (G,B) ---&gt; (R,R,R,R,R,G)即(5,1)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二、对于(G,G,G,G,R,R)即(4,2)，有 ：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i. (R,G) ---&gt; (G,G,G,B,B,R)即(3,2,1)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三、对于(R,R,R,R,R,G)即(5,1)有 ：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i. (R,G) ---&gt; (R,R,R,R,B,B)即(4,2)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因此，只有三种状态(3,2,1), (4,2)和(5,1)，不可能出现(6,0)这种情况。&nbsp;&nbsp;&nbsp; </p>
<p>9. 哪些方法可让一个进程仅有一个实例运行？</p>
<p>10. exit()和_exit() 的区别。</p>
<p>11. 红黑树比AVL树的优势在哪？</p>
<p>12. 软件开发过程包含哪些阶段？各阶段质量保证措施是什么？<br></p>
</div>
<img src ="http://www.cppblog.com/life02/aggbug/98669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-15 11:59 <a href="http://www.cppblog.com/life02/archive/2009/10/15/98669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网易游戏笔试（转）</title><link>http://www.cppblog.com/life02/archive/2009/10/15/98652.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Thu, 15 Oct 2009 02:42:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/15/98652.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/98652.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/15/98652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/98652.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/98652.html</trackback:ping><description><![CDATA[<p>网易2007Hust游戏开发工程师笔试</p>
<p>1.拼七巧板，还是比较有意思的（10分）</p>
<p>2.判断下列图案中哪一个与其他三个不同。（10）</p>
<p>&nbsp;</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&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; B&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;&nbsp; C&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; D</p>
<p>3.有一个队列长一百米，有一个人从尾走到头，再从头走到尾，期间他的速度和队列的速度都不变，队列正好行进了100米，问这个人走了多少距离。（10）</p>
<p>&nbsp;</p>
<p>4.推理题。关于白帽、黑帽的，可以网上搜搜类似的。（10）</p>
<p>&nbsp;</p>
<p>5.一个文章系统，用户登陆后输出欢迎信息：（20）</p>
<p>1.用户注册时间不足一个月，输出信息A：欢迎新用户，您还没有发表文章，可以先熟悉一下系统，查看帮助信息。</p>
<p>2.用户注册时间不足一个月，输出信息B：欢迎新用户，您已经发表了文章，不过在最初一个月发表3篇或3篇以上文章会对以后很有帮助。</p>
<p>3.用户注册时间小于三个月，输出信息C：用户您好，在最初一个月后您没有发表文章，请多多努力。</p>
<p>4.用户注册大于三个月，输出信息D：用户您好，最近3个月您都未发表文章，如果长时间不发表文章，您的帐号将被冻结。</p>
<p>5.其他情况输出E：欢迎您的登陆。</p>
<p>&nbsp;</p>
<p>1）画出流程图</p>
<p>2）写出实现代码，不需要定义变量类型</p>
<p>&nbsp;</p>
<p>相关函数</p>
<p>GetRegisterTime(username)<br>&nbsp;获得用户username的注册时间<br>&nbsp;<br>GetNowTime()<br>&nbsp;获得现在时间<br>&nbsp;<br>TimeDiff(time1,time2)<br>&nbsp;获得time1到time2的天数<br>&nbsp;<br>AddDay(time1,day_num)<br>&nbsp;在time1上加上天数，可以为负，得到新时间<br>&nbsp;<br>GetArticleCount(username,time1,time2)<br>&nbsp;获得用户在time1和time2之间发表的文章数量<br>&nbsp;<br>Print(A)<br>&nbsp;输出信息A，可以将A换成B、C等等<br>&nbsp;</p>
<p>如有其他函数请自己定义并说明用途。</p>
<p>6.计算概率，具体不记得了。（10）</p>
<p>7.英文题目Next Number。（20）</p>
<p>大意就是要根据输入数字，输出一个新数，要求输出数字各个位的和加起来与原数相等。输出的数字是大于原数的第一个数。</p>
<p>&nbsp;</p>
<p>如Input:113，output:122，Input 0050，output: 0104。</p>
<p>输入的N位数字k（0&lt;=k&lt;=101000,0&lt;=N&lt;2000）。</p>
<p>设计完成函数，用伪码实现。</p>
<p>&nbsp;</p>
<p>游戏研发工程师必做题</p>
<p>1.一个游戏，角色属性有：生命、攻击、速度、防御、魔法，试设计一个角色的数据结构，用代码实现。</p>
<p>2.若该游戏发布了资料篇，资料篇中角色属性添加了两个：魔防、敏捷。现改进原设计，怎么区分老版游戏和资料篇玩家，并正确读取。</p>
<p>3.在网络游戏中GM通常有一定特权可以对角色属性进行修改，现有GM1，可以对角色的攻击属性修改，而不能对其他属性修改，试设计系统（所有属性都是可读的）。GM的指令通常为以下模式：//moveto x,y；移动到x，y；//kick 用户，踢出某一用户。</p>
<p>&nbsp;</p>
<p>2.最优打怪路线</p>
<p>玩家从东往西进行，打怪只能打南北的怪，消耗的能量与怪物离玩家的距离有关，试找出一个最好的打怪路线。</p>
<p>注：玩家只能水平移动，怪物均是静止的，不移动。</p>
<p>&nbsp;</p>
<p>1）证明该路线是最佳路线</p>
<p>2）代码实现</p>
<p>&nbsp;</p>
<p>3.用户支付</p>
<p>1）某一网络游戏用户分为3种类型：计时用户、包月用户、合作用户，合作用户是与别的厂家合作，可能在某一段时间免费或计费与别的不同，试设计一个支付系统，支付部分代码实现。</p>
<p>2）后来又添加了一种用户：道具收费用户，即玩家游戏时间免费，而是通过购买游戏中道具需要钱，4种用户运行于同一台服务器，试改进系统。</p>
<p><br>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/qiluofei/archive/2007/10/20/1834263.aspx">http://blog.csdn.net/qiluofei/archive/2007/10/20/1834263.aspx</a><font style="BACKGROUND-COLOR: #cce8cf"></font></p>
<img src ="http://www.cppblog.com/life02/aggbug/98652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-15 10:42 <a href="http://www.cppblog.com/life02/archive/2009/10/15/98652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>迅雷2010笔试题-成都站 (转)</title><link>http://www.cppblog.com/life02/archive/2009/10/07/98012.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Wed, 07 Oct 2009 03:08:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/07/98012.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/98012.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/07/98012.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/98012.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/98012.html</trackback:ping><description><![CDATA[<p>题目转自:<br><a href="http://blog.163.com/ecy_fu/blog/static/444512620098228849190/">http://blog.163.com/ecy_fu/blog/static/444512620098228849190/</a><br>&nbsp;二笔只有三道题，分值分别为30, 30, 40，题分别如下：<br>1、实现strtol函数，其原型如为int strtol(const char *num_str, char **endptr, int base)，num_str存放待转换的字符串，可以是负数也可以是正数；endptr指向第一个非法字符的地址，如果endptr为NULL则不指向第一个非法字符的地址；base用于指示进制，若base为0，则根据num_str的指示来转换。函数必须检查溢出，如果正数溢出，返回INT_MAX；若负数溢出，返回INT_MIN。<br>2、一亿个数找最大的1000个数，要求效率高占用内存少。函数原型为：find_max_data(int* source_data, int* max_data)，其中source_data是存放一亿个数的数组，max_data用于存放其中最大的1000个数。<br>3、将一个集合拆分成两个不相交的子集，两个子集元素之和相等，如{1, 2, 3, 4, 5, 6, 7}，拆分成：<br>{2, 5, 7}, {1, 3, 4, 6}<br>给出一个集合，求所有符合上面要求的拆分，效率最高分越高，函数原型为int cal_num(int n);</p>
<p>第三题：<br>利用回溯剪枝法<br>空间复杂度：O(n) 栈的最大深度也就是n了<br>时间复杂度：接近于O(2^n-1), 因为本质上程序时一个遍历树的过程，如果没有剪枝，那么树是一个满二叉树，结点共2^n-1个，也就要遍历2^n-1次。虽然剪枝，但速度估计仍是 2^n次方级别的。<br>试了下，调用cal_num(104),好久了结果都没有出来。。。</p>
<p>不知用上DP算法会不会好点，不过听说回溯法怎么弄效率都跟不上，最好用递推？<br>在哪听说的？<br><a href="http://topic.csdn.net/u/20090922/11/ebc26b48-6581-40c3-afe0-a95ca2d700d5.html">http://topic.csdn.net/u/20090922/11/ebc26b48-6581-40c3-afe0-a95ca2d700d5.html</a></p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_65_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_65_Open_Text.style.display='none'; Codehighlighter1_0_65_Closed_Image.style.display='inline'; Codehighlighter1_0_65_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_65_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_65_Closed_Text.style.display='none'; Codehighlighter1_0_65_Open_Image.style.display='inline'; Codehighlighter1_0_65_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_65_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_65_Open_Text><span style="COLOR: #808080">///////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"></span></span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">file&nbsp;divide_set.h:</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#ifndef&nbsp;__DIVIDE_SET_H__<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;__DIVIDE_SET_H__</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;计算集合set的所有满足下列条件的子集合：子集合元素之和等于value<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;子集合的元素对应的label置1</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;divide_set(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">[],&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;label[],&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i_set,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;value&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;对集合{1,2,<img src="http://www.cppblog.com/Images/dot.gif">n}划分</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;cal_num(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_325_390_Open_Image onclick="this.style.display='none'; Codehighlighter1_325_390_Open_Text.style.display='none'; Codehighlighter1_325_390_Closed_Image.style.display='inline'; Codehighlighter1_325_390_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_325_390_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_325_390_Closed_Text.style.display='none'; Codehighlighter1_325_390_Open_Image.style.display='inline'; Codehighlighter1_325_390_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_325_390_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_325_390_Open_Text><span style="COLOR: #808080">///////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"></span></span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">file&nbsp;divide_set.cpp:</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stdafx.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">divide_set.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;查找集合set中，满足元素之和等于value的子集合，结果存于label里</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;divide_set(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">[],&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;label[],&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i_set,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;value&nbsp;)<br><img id=Codehighlighter1_617_1153_Open_Image onclick="this.style.display='none'; Codehighlighter1_617_1153_Open_Text.style.display='none'; Codehighlighter1_617_1153_Closed_Image.style.display='inline'; Codehighlighter1_617_1153_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_617_1153_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_617_1153_Closed_Text.style.display='none'; Codehighlighter1_617_1153_Open_Image.style.display='inline'; Codehighlighter1_617_1153_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_617_1153_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_617_1153_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;输出结果</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;value&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;)<br><img id=Codehighlighter1_648_923_Open_Image onclick="this.style.display='none'; Codehighlighter1_648_923_Open_Text.style.display='none'; Codehighlighter1_648_923_Closed_Image.style.display='inline'; Codehighlighter1_648_923_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_648_923_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_648_923_Closed_Text.style.display='none'; Codehighlighter1_648_923_Open_Image.style.display='inline'; Codehighlighter1_648_923_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</span><span id=Codehighlighter1_648_923_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_648_923_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">len;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i&nbsp;)<br><img id=Codehighlighter1_696_756_Open_Image onclick="this.style.display='none'; Codehighlighter1_696_756_Open_Text.style.display='none'; Codehighlighter1_696_756_Closed_Image.style.display='inline'; Codehighlighter1_696_756_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_696_756_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_696_756_Closed_Text.style.display='none'; Codehighlighter1_696_756_Open_Image.style.display='inline'; Codehighlighter1_696_756_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_696_756_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_696_756_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;label[i]&nbsp;)<br><img id=Codehighlighter1_720_748_Open_Image onclick="this.style.display='none'; Codehighlighter1_720_748_Open_Text.style.display='none'; Codehighlighter1_720_748_Closed_Image.style.display='inline'; Codehighlighter1_720_748_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_720_748_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_720_748_Closed_Text.style.display='none'; Codehighlighter1_720_748_Open_Image.style.display='inline'; Codehighlighter1_720_748_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_720_748_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_720_748_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">[i]</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;,&nbsp;{&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">len;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i&nbsp;)<br><img id=Codehighlighter1_821_882_Open_Image onclick="this.style.display='none'; Codehighlighter1_821_882_Open_Text.style.display='none'; Codehighlighter1_821_882_Closed_Image.style.display='inline'; Codehighlighter1_821_882_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_821_882_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_821_882_Closed_Text.style.display='none'; Codehighlighter1_821_882_Open_Image.style.display='inline'; Codehighlighter1_821_882_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_821_882_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_821_882_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;label[i]&nbsp;)<br><img id=Codehighlighter1_850_878_Open_Image onclick="this.style.display='none'; Codehighlighter1_850_878_Open_Text.style.display='none'; Codehighlighter1_850_878_Closed_Image.style.display='inline'; Codehighlighter1_850_878_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_850_878_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_850_878_Closed_Text.style.display='none'; Codehighlighter1_850_878_Open_Image.style.display='inline'; Codehighlighter1_850_878_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_850_878_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_850_878_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">[i]</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;i_set&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;len&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;value&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_959_972_Open_Image onclick="this.style.display='none'; Codehighlighter1_959_972_Open_Text.style.display='none'; Codehighlighter1_959_972_Closed_Image.style.display='inline'; Codehighlighter1_959_972_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_959_972_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_959_972_Closed_Text.style.display='none'; Codehighlighter1_959_972_Open_Image.style.display='inline'; Codehighlighter1_959_972_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</span><span id=Codehighlighter1_959_972_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_959_972_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;取第i_set个元素</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;label[i_set]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;divide_set(&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">,&nbsp;label,&nbsp;len,&nbsp;i_set</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;value</span><span style="COLOR: #000000">-</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">[i_set]&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;不取第i_set个元素</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;label[i_set]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;divide_set(&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">,&nbsp;label,&nbsp;len,&nbsp;i_set</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;value&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;cal_num(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n&nbsp;)<br><img id=Codehighlighter1_1178_1508_Open_Image onclick="this.style.display='none'; Codehighlighter1_1178_1508_Open_Text.style.display='none'; Codehighlighter1_1178_1508_Closed_Image.style.display='inline'; Codehighlighter1_1178_1508_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1178_1508_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1178_1508_Closed_Text.style.display='none'; Codehighlighter1_1178_1508_Open_Image.style.display='inline'; Codehighlighter1_1178_1508_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1178_1508_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1178_1508_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[n];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;label&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[n];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;initialize&nbsp;set&nbsp;and&nbsp;label</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;sum_value&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i&nbsp;)<br><img id=Codehighlighter1_1308_1351_Open_Image onclick="this.style.display='none'; Codehighlighter1_1308_1351_Open_Text.style.display='none'; Codehighlighter1_1308_1351_Closed_Image.style.display='inline'; Codehighlighter1_1308_1351_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1308_1351_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1308_1351_Closed_Text.style.display='none'; Codehighlighter1_1308_1351_Open_Image.style.display='inline'; Codehighlighter1_1308_1351_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</span><span id=Codehighlighter1_1308_1351_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1308_1351_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;sum_value&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">[i];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;memset(&nbsp;label,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;n</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;保证元素总和为偶数</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;sum_value</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;divide_set(&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">,&nbsp;label,&nbsp;n,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;sum_value</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;delete[]&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;delete[]&nbsp;label;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/zdl1016/archive/2009/10/04/4632688.aspx">http://blog.csdn.net/zdl1016/archive/2009/10/04/4632688.aspx</a></p>
<img src ="http://www.cppblog.com/life02/aggbug/98012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-07 11:08 <a href="http://www.cppblog.com/life02/archive/2009/10/07/98012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试问题</title><link>http://www.cppblog.com/life02/archive/2009/10/02/97759.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Fri, 02 Oct 2009 08:36:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/10/02/97759.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/97759.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/10/02/97759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/97759.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/97759.html</trackback:ping><description><![CDATA[<span style="COLOR: #0000ff"><span style="FONT-SIZE: 16px">面试过程中，面试官会向应聘者发问，而应聘者的回答将成为面试官考虑是否接受他的重要依据。对应聘者而言，了解这些问题背后的&#8220;猫腻&#8221;至关重要。本文对面试中经常出现的一些典型问题进行了整理，并给出相应的回答思路和参考答案。读者无需过分关注分析的细节，关键是要从这些分析中&#8220;悟&#8221;出面试的规律及回答问题的思维方式，达到&#8220;活学活用&#8221;。 <br>&nbsp; <br>&nbsp; 问题一：&#8220;请你自我介绍一下&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、这是面试的必考题目。 2、介绍内容要与个人简历相一致。 3、表述方式上尽量口语化。 4、要切中要害，不谈无关、无用的内容。 5、条理要清晰，层次要分明。6、事先最好以文字的形式写好背熟。 <br>&nbsp; <br>&nbsp; 问题二：&#8220;谈谈你的家庭情况&#8221; <br>&nbsp; <br>&nbsp; 思路：1、 况对于了解应聘者的性格、观念、心态等有一定的作用，这是招聘单位问该问题的主要原因。 2、 简单地罗列家庭人口。 3、 宜强调温馨和睦的家庭氛围。 4、 宜强调父母对自己教育的重视。 5、 宜强调各位家庭成员的良好状况。 6、 宜强调家庭成员对自己工作的支持。 7、 宜强调自己对家庭的责任感。 <br>&nbsp; <br>&nbsp; &nbsp; 问题三：&#8220;你有什么业余爱好？&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 业余爱好能在一定程度上反映应聘者的性格、观念、心态，这是招聘单位问该问题的主要原因。 2、 最好不要说自己没有业余爱好。 3、 不要说自己有那些庸俗的、令人感觉不好的爱好。 4、 最好不要说自己仅限于读书、听音乐、上网，否则可能令面试官怀疑应聘者性格孤僻。 5、 最好能有一些户外的业余爱好来&#8220;点缀&#8221;你的形象。 <br>&nbsp; <br>&nbsp; 问题四：&#8220;你最崇拜谁？&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 最崇拜的人能在一定 程度上反映应聘者的性格、观念、心态，这是面试官问该问题的主要原因。 2、 不宜说自己谁都不崇拜。 3、 不宜说崇拜自己。 4、 不宜说崇拜一个虚幻的、或是不知名的人。 5、 不宜说崇拜一个明显具有负面形象的人。 6、 所崇拜的人人最好与自己所应聘的工作能&#8220;搭&#8221;上关系。 7、 最好说出自己所崇拜的人的哪些品质、哪些思想感染着自己、鼓舞着自己。 <br>&nbsp; <br>&nbsp; 问题五：&#8220;你的座右铭是什么？&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、座右铭能在一定程度上反映应聘者的性格、观念、心态，这是面试官问这个问题的主要原因。 2、不宜说那些医引起不好联想的座右铭。 3、不宜说那些太抽象的座右铭。 4、不宜说太长的座右铭。 5、座右铭最好能反映出自己某种优秀品质。 6、 参考答案——&#8220;只为成功找方法，不为失败找借口&#8221;。 <br>&nbsp; <br>&nbsp; 问题六：&#8220;谈谈你的缺点&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 不宜说自己没缺点。 2、 不宜把那些明显的优点说成缺点。 3、 不宜说出严重影响所应聘工作的缺点。 4、 不宜说出令人不放心、不舒服的缺点。 5、 可以说出一些对于所应聘工作&#8220;无关紧要&#8221;的缺点，甚至是一些表面上看是缺点，从工作的角度看却是优点的缺点。 <br>&nbsp; <br>&nbsp; 问题七：&#8220;谈一谈你的一次失败经历&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 不宜说自己没有失败的经历。 2、 不宜把那些明显的成功说成是失败。 3、 不宜说出严重影响所应聘工作的失败经历， 4、 所谈经历的结果应是失败的。 5、 宜说明失败之前自己曾信心白倍、尽心尽力。 6、 说明仅仅是由于外在客观原因导致失败。 7、 失败后自己很快振作起来，以更加饱满的热情面对以后的工作。 <br><br>&nbsp; 问题八：&#8220;你为什么选择我们公司？&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 面试官试图从中了解你求职的动机、愿望以及对此项工作的态度。 2、 建议从行业、企业和岗位这三个角度来回答。 3、 参考答案——&#8220;我十分看好贵公司所在的行业，我认为贵公司十分重视人才，而且这项工作很适合我，相信自己一定能做好。&#8221; <br><br>&nbsp; 问题九：&#8220;对这项工作，你有哪些可预见的困难？&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 不宜直接说出具体的困难，否则可能令对方怀疑应聘者不行。 2、 可以尝试迂回战术，说出应聘者对困难所持有的态度——&#8220;工作中出现一些困难是正常的，也是难免的，但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备，任何困难都是可以克服的。&#8221; <br><br>&nbsp; 问题十：&#8220;如果我录用你，你将怎样开展工作&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 如果应聘者对于应聘的职位缺乏足够的了解，最好不要直接说出自己开展工作的具体办法， 2、 可以尝试采用迂回战术来回答，如&#8220;首先听取领导的指示和要求，然后就有关情况进行了解和熟悉，接下来制定一份近期的工作计划并报领导批准，最后根据计划开展工作。&#8221; <br>&nbsp; <br>&nbsp; 问题十一：&#8220;与上级意见不一是，你将怎么办？&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 一般可以这样回答&#8220;我会给上级以必要的解释和提醒，在这种情况下，我会服从上级的意见。&#8221; 2、 如果面试你的是总经理，而你所应聘的职位另有一位经理，且这位经理当时不在场，可以这样回答：&#8220;对于非原则性问题，我会服从上级的意见，对于涉及公司利益的重大问题，我希望能向更高层领导反映。&#8221; <br>&nbsp; <br>&nbsp; 问题十二：&#8220;我们为什么要录用你？&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 应聘者最好站在招聘单位的角度来回答。 2、 招聘单位一般会录用这样的应聘者：基本符合条件、对这份共组感兴趣、有足够的信心。 3、 如&#8220;我符合贵公司的招聘条件，凭我目前掌握的技能、高度的责任感和良好的饿适应能力及学习能力 ，完全能胜任这份工作。我十分希望能为贵 公司服务，如果贵公司给我这个机会，我一定能成为贵公司的栋梁！&#8221; <br><br>&nbsp; 问题十三：&#8220;你能为我们做什么？&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 基本原则上&#8220;投其所好&#8221;。 2、 回答这个问题前应聘者最好能&#8220;先发制人&#8221;，了解招聘单位期待这个职位所能发挥的作用。 3、 应聘者可以根据自己的了解，结合自己在专业领域的优势来回答这个问题。 <br>&nbsp; <br>&nbsp; 问题十四：&#8220;你是应届毕业生，缺乏经验，如何能胜任这项工作？&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 如果招聘单位对应届毕业生的应聘者提出这个问题，说明招聘单位并不真正在乎&#8220;经验&#8221;，关键看应聘者怎样回答。 2、 对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业。 3、 如&#8220;作为应届毕业生，在工作经验方面的确会有所欠缺，因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现，实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力，而且比较勤奋，所以在兼职中均能圆满完成各项工作，从中获取的经验也令我受益非浅。请贵公司放心，学校所学及兼职的工作经验使我一定能胜任这个职位。&#8221; <br><br>&nbsp; 问题十五：&#8220;你希望与什么样的上级共事？&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 通过应聘者对上级的&#8220;希望&#8221;可以判断出应聘者对自我要求的意识，这既上一个陷阱，又上一次机会。 2、 最好回避对上级具体的希望，多谈对自己的要求。 3、 如&#8220;做为刚步入社会新人，我应该多要求自己尽快熟悉环境、适应环境，而不应该对环境提出什么要求，只要能发挥我的专长就可以了。&#8221; <br>&nbsp; <br>&nbsp; 问题十六：&#8220;您在前一家公司的离职原因是什么？&#8221; <br>&nbsp; <br>&nbsp; 思路： 1、 最重要的是：应聘者要使找招聘单位相信，应聘者在过往的单位的&#8220;离职原因&#8221;在此家招聘单位里不存在。 2、 避免把&#8220;离职原因&#8221;说得太详细、太具体。 3、 不能掺杂主观的负面感受，如&#8220;太幸苦&#8221;、&#8220;人际关系复杂&#8221;、&#8220;管理太混乱&#8221;、&#8220;公司不重视人才&#8221;、&#8220;公司排斥我们某某的员工&#8221;等。 4、 但也不能躲闪、回避，如&#8220;想换换环境&#8221;、&#8220;个人原因&#8221;等。 5、 不能涉及自己负面的人格特征，如不诚实、懒惰、缺乏责任感、不随和等。 6、 尽量使解释的理由为应聘者个人形象添彩。 7、 如&#8220;我离职是因为这家公司倒闭。我在公司工作了三年多，有较深的感情。从去年始，由于市场形势突变，公司的局面急转直下。到眼下这一步我觉得很遗憾，但还要面对显示，重新寻找能发挥我能力的舞台。&#8221; 同一个面试问题并非只有一个答案，而同一个答案并不是在任何面试场合都有效，关键在于应聘者掌握了规律后，对面试的具体情况进行把握，有意识地揣摩面试官提出问题的心理背景，然后投其所好。 </span></span>
<img src ="http://www.cppblog.com/life02/aggbug/97759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-10-02 16:36 <a href="http://www.cppblog.com/life02/archive/2009/10/02/97759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>09腾讯笔试题</title><link>http://www.cppblog.com/life02/archive/2009/09/23/97047.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Wed, 23 Sep 2009 12:50:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/09/23/97047.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/97047.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/09/23/97047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/97047.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/97047.html</trackback:ping><description><![CDATA[一.&nbsp; 单选题(每题4分,15题,共60分)
<p>　　1.考虑函数原型void hello(int a,int b=7,char* pszC="*"),下面的函数调用钟,属于不合法调用的是:</p>
<p>　　A hello(5)&nbsp;&nbsp;&nbsp;&nbsp; B.hello(5,8)&nbsp;&nbsp;&nbsp;&nbsp; C.hello(6,"#")&nbsp;&nbsp;&nbsp;&nbsp; D.hello(0,0,"#")</p>
<p>　　2.下面有关重载函数的说法中正确的是:</p>
<p>　　A.重载函数必须具有不同的返回值类型&nbsp;&nbsp; B.重载函数形参个数必须不同</p>
<p>　　C.重载函数必须有不同的形参列表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D.重载函数名可以不同</p>
<p>　　3.分析一下程序的运行结果:</p>
<p>　　#include&lt;iostream.h&gt;</p>
<p>　　class CBase</p>
<p>　　{</p>
<p>　　public:</p>
<p>　　CBase(){cout&lt;&lt;&#8221;constructing CBase class&#8221;&lt;&lt;endl;}</p>
<p>　　~CBase(){cout&lt;&lt;&#8221;destructing CBase class&#8221;&lt;&lt;endl;}</p>
<p>　　};</p>
<p>　　class CSub : public CBase</p>
<p>　　{</p>
<p>　　public:</p>
<p>　　CSub(){cout&lt;&lt;&#8221;constructing CSub class&#8221;&lt;&lt;endl;}</p>
<p>　　~CSub(){cout&lt;&lt;&#8221;destructing CSub class&#8221;&lt;&lt;endl;}</p>
<p>　　};</p>
<p>　　void main()</p>
<p>　　{</p>
<p>　　CSub obj;</p>
<p>　　}</p>
<p>　　A. constructing CSub class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B. constructing CBase class</p>
<p>　　constructing CBase class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; constructing CSub class</p>
<p>　　destructing CSub class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destructing CBase class</p>
<p>　　destructing CBase class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destructing CSub class</p>
<p>　　C. constructing CBase class</p>
<p>　　constructing CSub class</p>
<p>　　destructing CSub class</p>
<p>　　destructing CBase class</p>
<p>　　D. constructing CSub class</p>
<p>　　constructing CBase class</p>
<p>　　destructing CBase class</p>
<p>　　destructing CSub class</p>
<p>　　4.在一个cpp文件里面,定义了一个static类型的全局变量,下面一个正确的描述是:</p>
<p>　　A.只能在该cpp所在的编译模块中使用该变量</p>
<p>　　B.该变量的值是不可改变的</p>
<p>　　C.该变量不能在类的成员函数中引用</p>
<p>　　D.这种变量只能是基本类型(如int,char)不能是C++类型</p>
<p>　　5.观察下面一段代码:</p>
<p>　　class ClassA</p>
<p>　　{</p>
<p>　　public:</p>
<p>　　virtual ~ ClassA(){};</p>
<p>　　virtual void FunctionA(){};</p>
<p>　　};</p>
<p>　　class ClassB</p>
<p>　　{</p>
<p>　　public:</p>
<p>　　virtual void FunctionB(){};</p>
<p>　　};</p>
<p>　　class ClassC : public ClassA,public ClassB</p>
<p>　　{</p>
<p>　　public:</p>
<p>　　};</p>
<p>　　ClassC aObject;</p>
<p>　　ClassA* pA=&amp;aObject;</p>
<p>　　ClassB* pB=&amp;aObject;</p>
<p>　　ClassC* pC=&amp;aObject;</p>
<p>　　关于pA,pB,pC的取值,下面的描述中正确的是:</p>
<p>　　A.pA,pB,pC的取值相同.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B.pC=pA+pB</p>
<p>　　C.pA和pB不相同&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D.pC不等于pA也不等于pB</p>
<p>　　6.参照1.5的代码,假设定义了ClassA* pA2,下面正确的代码是:</p>
<p>　　A.pA2=static_cast&lt;ClassA*&gt;(pB);</p>
<p>　　B.void* pVoid=static_cast&lt;void*&gt;(pB);</p>
<p>　　pA2=static_cast&lt;ClassA*&gt;(pVoid);</p>
<p>　　C.pA2=pB;</p>
<p>　　D.pA2=static_cast&lt;ClassA*&gt;(static_cast&lt;ClassC*&gt;(pB));</p>
<p>　　7.参照1.5的代码,下面那一个语句是不安全的:</p>
<p>　　A.delete pA&nbsp;&nbsp; B.delete pB&nbsp;&nbsp; C.delete pC</p>
<p>　　8.下列程序的运行结果为:</p>
<p>　　#include&lt;iostream.h&gt;</p>
<p>　　void main()</p>
<p>　　{</p>
<p>　　int a=2;</p>
<p>　　int b=++a;</p>
<p>　　cout&lt;&lt;a/6&lt;&lt;endl;</p>
<p>　　}</p>
<p>　　A.0.5&nbsp;&nbsp; B.0&nbsp;&nbsp; C0.7&nbsp;&nbsp; D.0.6666666－</p>
<p>　　9.有如下一段代码:</p>
<p>　　#define ADD(x,y) x+y</p>
<p>　　int m=3;</p>
<p>　　m+=m*ADD(m,m);</p>
<p>　　则m的值为:</p>
<p>　　A.15&nbsp;&nbsp; B.12&nbsp;&nbsp; C.18&nbsp;&nbsp; D.58</p>
<p>　　10.如下是一个带权的图,图中结点A到结点D的关键路径的长度是:</p>
<p>　　A.13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B.15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C.28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D.58</p>
<p>　　11.下面的模板声明中,正确的是:</p>
<p>　　A.template&lt;typename T1,T2&gt;</p>
<p>　　B.template&lt;class T1,T2&gt;</p>
<p>　　C.template&lt;class T1,class T2&gt;</p>
<p>　　D.template&lt;typename T1;typename T2&gt;</p>
<p>　　12.在Windows编程中下面的说法正确的是:</p>
<p>　　A.两个窗口,他们的窗口句柄可以是相同的&nbsp;&nbsp;&nbsp;&nbsp; B.两个窗口,他们的处理函数可以是相同的</p>
<p>　　C.两个窗口,他们的窗口句柄和窗口处理函数都不可以相同.</p>
<p>　　13.下面哪种情况下,B不能隐式转换为A?</p>
<p>　　A.class B:public A{}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B.class A:public B{}<br>C.class B{operator A();}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D.class A{A(const B&amp;);}</p>
<p>　　14.某公司使用包过滤防火墙控制进出公司局域网的数据,在不考虑使用代理服务器的情况下,下面描述错误的是&#8221;该防火墙能够(&nbsp;&nbsp; )&#8221;.</p>
<p>　　A.使公司员工只能访问Internet上与其业务联系的公司的IP地址.</p>
<p>　　B.仅允许HTTP协议通过,不允许其他协议通过,例如TCP/UDP.</p>
<p>　　C.使员工不能直接访问FTP服务器端口号为21的FTP地址.</p>
<p>　　D.仅允许公司中具有某些特定IP地址的计算机可以访问外部网络</p>
<p>　　15.数字字符0的ASCII值为48,若有以下程序:</p>
<p>　　main()</p>
<p>　　{</p>
<p>　　char a=&#8217;1&#8217;,b=&#8217;2&#8217;;</p>
<p>　　printf(&#8220;%c,&#8221;,b++);</p>
<p>　　printf(&#8220;%d\n&#8221;,b-a);</p>
<p>　　}</p>
<p>　　程序运行之后的输出结果是:</p>
<p>　　A.3,2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B.50,2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C.2,2&nbsp;&nbsp;&nbsp;&nbsp; D.2,50</p>
<p>　　二.&nbsp; 填空题(共40分)</p>
<p>　　本程序从正文文件text.in读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它的出现次数输出到正文文件word.out中.</p>
<p>　　程序用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立.然后中序遍历该二叉树,将遍历经过的二叉树上的节点的内容输出.<br>程序中的外部函数</p>
<p>　　int getword(FILE* pFile,char* pszWordBuffer,int nBufferLen);</p>
<p>　　从与pFile所对应的文件中读取单词置入pszWordBuffer,并返回1;若单词遇文件尾,已无单词可读时,则返回0.</p>
<p>　　#include &lt;stdio.h&gt;</p>
<p>　　#include &lt;malloc.h&gt;</p>
<p>　　#include &lt;ctype.h&gt;</p>
<p>　　#include &lt;string.h&gt;</p>
<p>　　#define SOURCE_FILE "text.in"</p>
<p>　　#define OUTPUT_FILE "word.out"</p>
<p>　　#define MAX_WORD_LEN 128</p>
<p>　　typedef struct treenode</p>
<p>　　{</p>
<p>　　char szWord[MAX_WORD_LEN];</p>
<p>　　int nCount;</p>
<p>　　struct treenode* pLeft;</p>
<p>　　struct treenode* pRight;</p>
<p>　　}BNODE;</p>
<p>　　int getword(FILE* pFile,char* pasWordBuffer,int nBufferLen);</p>
<p>　　void binary_tree(BNODE** ppNode,char* pszWord)</p>
<p>　　{</p>
<p>　　if(ppNode != NULL &amp;&amp; pszWord != NULL)</p>
<p>　　{</p>
<p>　　BNODE* pCurrentNode = NULL;</p>
<p>　　BNODE* pMemoNode = NULL;</p>
<p>　　int nStrCmpRes=0;</p>
<p>　　____(1)_____;pCurrentNode=*ppNode</p>
<p>　　while(pCurrentNode)</p>
<p>　　{</p>
<p>　　/*寻找插入位置*/</p>
<p>　　nStrCmpRes = strcmp(pszWord, ___(2)___ );pCurrentNode-&gt;nCount</p>
<p>　　if(!nStrCmpRes)</p>
<p>　　{</p>
<p>　　___(3)___; pCurrentNode-&gt;nCount++</p>
<p>　　return;</p>
<p>　　}</p>
<p>　　else</p>
<p>　　{</p>
<p>　　___(4)___; pMemoNode=pCurrentNode</p>
<p>　　pCurrentNode = nStrCmpRes&gt;0? pCurrentNode-&gt;pRight : pCurrentNode-&gt;pLeft;</p>
<p>　　}</p>
<p>　　}</p>
<p>　　}</p>
<p>　　pCurrent=new BNODE;</p>
<p>　　if(pCurrentNode != NULL)</p>
<p>　　{</p>
<p>　　memset(pCurrentNode,0,sizeof(BNODE));</p>
<p>　　strncpy(pCurrentNode-&gt;szWord,pszWord,MAX_WORD_LEN-1);</p>
<p>　　pCurrentNode-&gt;nCount=1;</p>
<p>　　}</p>
<p>　　if(pMemoNode==NULL)</p>
<p>　　{</p>
<p>　　___(5)___; *ppNode= pCurrentNode</p>
<p>　　}</p>
<p>　　else if(nStrCmpRes&gt;0)</p>
<p>　　{</p>
<p>　　pMemoNode-&gt;pRight=pCurrentNode;</p>
<p>　　}</p>
<p>　　else</p>
<p>　　{</p>
<p>　　pMemoNode-&gt;pLeft=pCurrentNode;</p>
<p>　　}</p>
<p>　　}</p>
<p>　　void midorder(FILE* pFile,BNODE* pNode)</p>
<p>　　{</p>
<p>　　if(___(6)___) return;!pNode||!pFile</p>
<p>　　midorder(pFile,pNode-&gt;pLeft);</p>
<p>　　fprintf(pFile,"%s %d\n",pNode-&gt;szWord,pNode-&gt;nCount);</p>
<p>　　midorder(pFile,pNode-&gt;pRight);</p>
<p>　　}</p>
<p>　　void main()</p>
<p>　　{</p>
<p>　　FILE* pFile=NULL;</p>
<p>　　BNODE* pRootNode=NULL;</p>
<p>　　char szWord[MAX_WORD_LEN]={0};</p>
<p>　　pFile=fopen(SOURCE_FILE,"r");</p>
<p>　　if(pFile==NULL)</p>
<p>　　{</p>
<p>　　printf("Can't open file %s\n",SOURCE_FILE);</p>
<p>　　return;</p>
<p>　　}</p>
<p>　　while(getword(pFile,szWord,MAX_WORD_LEN)==1)</p>
<p>　　{</p>
<p>　　binary_tree(___(7)___);// pRootNode,szWord</p>
<p>　　}</p>
<p>　　fclose(pFile);</p>
<p>　　pFile=fopen(OUTPUT_FILE,"w");</p>
<p>　　midorder(pFile,pRootNode);</p>
<p>　　fclose(pFile);</p>
<p>　　}</p>
<p>　　三.&nbsp; 附加题(每题30分,2题,共60分)</p>
<p>　　1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从程序健壮性进行分析,下面的FillUserInfo函数和Main函数分别存在什么问题?</p>
<p>　　#include &lt;iostream&gt;</p>
<p>　　#include &lt;string&gt;</p>
<p>　　#define MAX_NAME_LEN 20</p>
<p>　　struct USERINFO</p>
<p>　　{</p>
<p>　　int nAge;</p>
<p>　　char szName[MAX_NAME_LEN];</p>
<p>　　};</p>
<p>　　void FillUserInfo(USERINFO* parUserInfo)</p>
<p>　　{</p>
<p>　　stu::cout&lt;&lt;"请输入用户的个数:";</p>
<p>　　int nCount=0;</p>
<p>　　std::cin&gt;&gt;nCount;</p>
<p>　　for(int i=0;i&lt;nCount;i++)</p>
<p>　　{</p>
<p>　　std::cout&lt;&lt;"请输入年龄:";</p>
<p>　　std::cin&gt;&gt;parUserInfo[i]-&gt;nAge;</p>
<p>　　std::string strName;<br>std::cout&lt;&lt;"请输入姓名:";</p>
<p>　　std::cin&gt;&gt;strName;</p>
<p>　　strcpy(parUserInfo[i].szName,strName.c_str());</p>
<p>　　}</p>
<p>　　}</p>
<p>　　int main(int argc,char* argv[])</p>
<p>　　{</p>
<p>　　USERINFO arUserInfos[100]={0};</p>
<p>　　FillUserInfo(arUserInfos);</p>
<p>　　printf("The first name is:");</p>
<p>　　printf(arUserInfos[0].szName);</p>
<p>　　printf("\n");</p>
<p>　　return 0;</p>
<p>　　}</p>
<p>　　2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 假设你在编写一个使用多线程技术的程序,当程序中止运行时,需要怎样一个机制来安全有效的中止所有的线程?请描述其具体流程.</p>
<p><br></p>
<img src ="http://www.cppblog.com/life02/aggbug/97047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-09-23 20:50 <a href="http://www.cppblog.com/life02/archive/2009/09/23/97047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NOKIA笔经＋面经（转）</title><link>http://www.cppblog.com/life02/archive/2009/09/16/96439.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Wed, 16 Sep 2009 09:38:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/09/16/96439.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/96439.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/09/16/96439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/96439.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/96439.html</trackback:ping><description><![CDATA[<p><a href="http://bbs.yingjiesheng.com/thread-15033-1-1.html">http://bbs.yingjiesheng.com/thread-15033-1-1.html</a><br>今天应该是毕业找工作生涯的最后一次面试了，发个笔经面经，为后来人 <br>铺路.我面的是Radio Network Planning。<br>笔试：海选，通过chinahr出的一组能力测试题筛选。好像筛了不少人。<br>题目包括词语填空，阅读理解，图形，数字题，基本数学题，表格题。<br>一面：面试官为应聘职位的部门经理。基本上为中文，中间可能抓住项目的<br>某个部分突击一下英文。面试官很和蔼，不用紧张。<br>问的内容涉及：个人介绍，项目介绍，然后抓住关心的项目问细节问题。<br>做过的项目很match的话，问的会更详细一些。然后问，项目中碰到的最<br>大困难是什么？怎么应对的？优势，缺点，举例说明一下？三个词形容<br>一下自己。然后，被面者问面试官问题。<br>二面：二面是nokia请专业人员做的人力测评，大概要多半天的时间。主要看个<br>人特点和潜力。改专业人员会把测评结果提交给部门经理，辅助经理做<br>决定。网上有比较多的面经，讲的也很详细。流程大致如下：<br>1）7个人小组活动：构建一个太空站的项目，给了太空站的地图和项目介绍，要求<br>说服董事会投资和盈利。黑板上写好了每个人的拼音名字，所以也没有进行个人介<br>绍，然后hr用英文介绍了一下我们下面project主要的任务，给了10分钟的时间想，并且<br>期间可以提问。然后30分钟时间group讨论和实现。在整个过程中一半中文，一半英文。<br>这个时候会有人记录你的表现，后来我知道他们不是要你表现的最优秀，但是要有grou<br>p spirit，能够接受他人的意见和提出自己的见解。讨论结束以后，group可以任意方式<br>做中英文综述，接着hr会要求你给给自己打一个分数，然后问你为什么这样打分。<br>2）逻辑能力测评：24道图形题，15分钟做完。<br>3）午饭。<br>4）性格测试：300多道题，对一句话的描述回答true or false。<br>5）一组问卷：你的优点缺点，职业规划，等<br>6）Interview：问了我是否有看到网上的面经，有什么帮助？<br>刚才的表现中为什么会想到哪些？<br>自己选一个项目说明自己是怎么工作的？由于我说的那个项目中我是项目 某小组的组长，就问到我是如何带领团队工作的？这个问了比较多。<br>你的职业规划是怎么样的？<br>提问。<br>7）Over。<br>本贴地址:http://bbs.yingjiesheng.com/thread-15033-1-1.html</p>
<p>笔试：<br>　　电路，自控，机械，net,c#,结构表，英文翻译&#8230;&#8230; <br>　　这还不算啥，最后一页才搞笑。 <br>　　请书写无机和有机化学方程式各一个。 <br>　　牛顿三大定律，热力学三大定律 <br>　　&#8230;&#8230; <br>　　面试：<br>　　job hunting（2）之NokiA　　Nokia一直是很牛b的，从9月开始就收简历，折腾到了12月，历时2个半月之久。<br>　　第一次收到电话面试，正在上班，觉得十分尴尬，跑到外面在门卫面前表现了半个小时的英语，估计他都以为我有病，话都说不明白。<br>　　实现一点没有准备，就被Nokia给突击了，事后我一直想，简历一定要做好，绝不能再犯类似错误，我竟然写了C＋＋项目经验比C时间还长，让面试的gg抓住了不放，非要问个一二三。<br>　　还是庆幸那段时间还在看friends，对英语的基本感觉还在，没有生疏，顺利通过了电话面试。接下来的技术笔试，复试，都没有悬念的通过了，nokia还是比较正式的，就是战线拉的太长了，后来因为签了其它公司，就没有参加最后一次hr面试。<br>　　一直以来，我在bbs上是属于潜水者一型的，接到nokia的offer也有一段时间了。忽然就很有点感触。很想写出来和大家分享一下我的面试，希望能够给下一届的同学们一点参考。前面也有一些关于nokia面试的文章，我看了一下，和我的面试情况基本相同。我就不重复说了，把我在面试中觉得应该注意的地方写一下吧。<br>　　1，第一面的时候主要是考你的base knowledge，笔试完三页纸的技术问题以后（我当时考的主要是基本的通讯知识和GSM的基本概念），部门的manager就会问你一些技术问题，如果你有项目经验的话，也会大概问一些，但是没有深入（这个很重要，其实他在第一面以后就会对你的个人经历有一个初步认识，以后的面试也是基本上围绕这些问题展开。）整个过程很轻松，大概面试30分钟左右，然后他会通知你回去等消息。<br>　　2，老实说来，我就经过两次面试就接到录用通知了，因为nokia的第二次面试安排的很紧凑，基本上是整整一天。第二次面试我是到异地去面试的，nokia之类的外企如果通知你去外地面试是一定会报销路费和三星级以上（nokia指定）酒店的住宿费的。等我到了公司以后，发现我们是安排一个group一起面试的。当时我们那个group是6个人，听说也有8个的。等大家到齐了，我们被安排到一个小房间做一个&#8220;构建动物园&#8221;的project，这个project还蛮重要的，hr，部门manager和老总（一个荷兰老外，很象圣诞老人）都来了，黑板上写好了每个人的拼音名字，所以也没有进行个人介绍，然后hr用英文介绍了一下我们下面project主要的任务，给了5分钟的时间想，然后15分钟时间group讨论和实现。在整个过程中可以用中文，这个时候会有人记录你的表现，后来我知道他们不是要你表现的最优秀，但是要有group spirit，能够接受他人的意见和提出自己的见解。<br>　　讨论结束以后，group推荐一个人出来做中英文综述，当时我们组是推荐了一个女生讲的，都是她一个人讲（呵呵，后来听别的组说他们是推荐一个人用英文，一个人用中文），我当时忽然很胆怯，事实上英语也没有那么牛，所以基本上没有说什么。接着hr会要求你给整个group打出一个分数，给自己打一个分数，然后说你为什么这样打分。我们那组出了一个意外，第一个站起来回答的dd居然给每个人都打了分数，我在极度惊讶之下，也飞快的给每个人打了分数。后来问到我时，我说了我的分数，我给自己打的分数比group分数高，事实上只有我一个人这样打了，hr很奇怪的问我，为什么我觉得自己的表现很好？<br>　　我当时特别的窘迫，想了一下我说我觉得自己能够积极主动的说出自己的想法，能够接纳他人的建议，而且给group打分和给自己打分不是基于同一个评判标准的。所以建议ddmm们以后如果要打分一定要想好为什么要给自己打这样的分数。基本上，nokia的面试官都会特别的客气，不会咄咄逼人，但是如果你自己要准确的给自己定一个位。现在想起来还是觉得当时好丢人阿。。。。。后来我们很惊讶的发现，那个表现最好的mm没有录取，很可惜，不过这也能够看出来，nokia不是要求你能够表现多出色，它要的合适的人，所以面试的时候不要有压力，如果是你的，一定会是你的。<br>　　3，午餐，nokia请客，好丰盛的KFC大餐，不过大家好像都没有什么胃口，大家都在相互聊天和分享公司信息。<br>　　4，下午的时候就发了一堆的考卷，有365题的人格测试题，好像是要划出一个曲线看看和公司要求的人才符合不符合，总之你要尽量表现得乐观就对了，他们很看重这个。那个人格测试题，特别的搞笑，还有造句题，for example，我认为女人——————————。我当时的答案是我认为女人应该独立自主。大家的答案五花八门，什么我认为女人能顶半边天。女人应该靠自己。。。。。还有50题的智力测试。（就是那种几个图形，要你选择最相近的一个之类的）。我是乱来一气，我一直以来都不知道这个到底是怎么回事，都是直觉。同步进行的是hr面试，一个一个的叫出去，大概每个40分钟左右。<br>　　5，终于轮到我面试了。进门前，我没有敲门，直接开门进去了，说了一声下午好，面试我的是hr和一个部门的manager，在整个面试期间我觉得最好的就是他们很尊重你，他们对你的情况特别清楚，好像就是和老朋友聊天一样。其中重点就是问了我的项目经历，因为我有专利，他们特别问了我对自己专利所有权的看法，问我为什么基本上由我完成的项目，老板做第一专利人？<br>　　我说其实这个构思是老板的，虽然具体实施由我个人完成，但是指导工作和申请都是老板完成的。而且由其他的师兄弟也能够完成，具体会找我来做是因为当时我自己提早学习了工具，所以老板觉得我来搞比较合适。他们开玩笑说是不是你比较聪明？我说：其实能够读到这个程度大家应该都差不多，我觉得自己属于比较勤奋。他们好像很满意，问了我对薪水的要求。我知道他们是准备要我了。<br>　　我问他们根据这几轮的面试他们觉得我应该拿怎么样一个薪水比较正常？他们说基本上他们会尊重个人的意愿，当然是在不会太离谱的条件下。我当时开的不高，他们给的也属于我开的范围里面。从这点可以看出，如果你个人比较牛，那么你不妨开出自己比较中意的工资。如果他们能够给，他们基本上不会太拒绝。现在想来，当时真的开的亏了。<br>　　面试完以后，他们告诉我2个星期之内会给你答复。后来想想这个面试很重要，基本上要人也是这个环节，其他环节都是参考。问的东西特别的细，最好不要骗人，如果你是撒谎的话，hr会一步一步的问出来的。还会问一些你和他人相处的事情，不会直接问，他会一点一点的追问，在回答每个问题之前不要太紧张开口，想想在说，说话不要太快，直视他们的眼睛有助于消除紧张并且给人一种自信的感觉。<br>　　大概6天以后，他们给了我答复，希望我能够加入他们公司。。。。<br>　　算来从第一次面试到给offer经历了大概1个月的时间。自己的求职也算是落下了帏幕，虽然还有一家公司开的待遇比nokia高，但是我希望感受一下nokia的氛围，所以还是决定把自己卖了。感谢gg在我求职期间给我的帮助和鼓励。<br>　　在整个求职期间，我可能本身不是特别着急，所以心态很好，大概会有一定的帮助吧。还有在求职的时候，女生化一点淡妆真的很必要，这样给人比较职业的感觉，虽然不一定要穿职业装，但是一定要穿得得体大方。<br>　　最后祝福大家都能够找到理想中的工作，也希望我的求职经历给大家一点帮助。<br>本文来自面经网-求职就业好帮手，原文地址：<a href="http://www.51mianjing.cn/">http://www.51mianjing.cn</a></p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/life02/aggbug/96439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-09-16 17:38 <a href="http://www.cppblog.com/life02/archive/2009/09/16/96439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>嵌入式方面的试题（转）</title><link>http://www.cppblog.com/life02/archive/2009/09/14/96112.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Mon, 14 Sep 2009 04:50:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/09/14/96112.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/96112.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/09/14/96112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/96112.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/96112.html</trackback:ping><description><![CDATA[<h2>嵌入式方面的试题</h2>
<div class=t_msgfontfix>
<table cellSpacing=0 cellPadding=0>
    <tbody>
        <tr>
            <td class=t_msgfont id=postmessage_5101947>预处理器（Preprocessor）<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 n# S1 W+ C8 m. b</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ ~6 M$ \&amp; T2 K* U&amp; Z! |" I&nbsp;&nbsp;o</font><br>1 . 用预处理指令#define 声明一个常数，用以表明1年中有多少秒（忽略闰年问题）<br><span style="DISPLAY: none">2 \&amp; |+ t, D; d3 \, H</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 y" |2 O4 C1 i0 P: `! I0 f</font><br>我在这想看到几件事情：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">* J6 ?8 U6 l! A8 N</font><br>1) #define 语法的基本知识（例如：不能以分号结束，括号的使用，等等）<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) m4 M1 _&nbsp;&nbsp;[( t6 w</font><br>2)懂得预处理器将为你计算常数表达式的值，因此，直接写出你是如何计算一年中有多少秒而不是计算出实际的值，是更清晰而没有代价的。<br><span style="DISPLAY: none">4 N7 R&amp; k+ g1 u" t</span> 3) 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。<br><span style="DISPLAY: none">: @% a- C&amp; `7 `) e&amp; d5 b) O9 J</span> 4) 如果你在你的表达式中用到UL（表示无符号长整型），那么你有了一个好的起点。记住，第一印象很重要。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" b' k% ^7 |- Q% l1 L! k/ t$ G</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ I2 ^. l! A1 X+ F</font><br>2 . 写一个"标准"宏MIN ，这个宏输入两个参数并返回较小的一个。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: M% ~% I- @5 D' O2 ~/ \7 I</font><br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;#define MIN(A,B) （（A） &lt;= (B) ? (A) : (B)) <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ ?" [) s/ _, R! q$ E, b8 i9 p</font><br>这个测试是为下面的目的而设的：<br><span style="DISPLAY: none">7 N% M5 O6 D' G&nbsp;&nbsp;k8 h5 i&amp; P/ {+ U</span> 1) 标识#define在宏中应用的基本知识。这是很重要的。因为在&nbsp;&nbsp;嵌入(inline)操作符 变为标准C的一部分之前，宏是方便产生嵌入代码的唯一方法，对于嵌入式系统来说，为了能达到要求的性能，嵌入代码经常是必须的方法。<br><span style="DISPLAY: none">* E&nbsp;&nbsp;X9 T! O) _/ f' {</span> 2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码，了解这个用法是很重要的。<br><span style="DISPLAY: none">2 k# n&nbsp;&nbsp;w. p0 _+ G: C</span> 3) 懂得在宏中小心地把参数用括号括起来<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ [8 c4 M+ E&amp; x2 q* K2 r9 @</font><br>4) 我也用这个问题开始讨论宏的副作用，例如：当你写下面的代码时会发生什么事？<br><span style="DISPLAY: none">' a( N* C! B* K</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;least = MIN(*p++, b);<br><span style="DISPLAY: none">! a8 Q5 g+ e9 O* L' {! l6 i</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># `1 c# ^* Z7 Y6 u# z</font><br>3. 预处理器标识#error的目的是什么？<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">! m/ @2 _, y8 u/ t- o</font><br>如果你不知道答案，请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子，那么应试者最好希望自己不要知道答案。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 C4 }5 v- ~7 o. i! e</font><br><br><span style="DISPLAY: none">4 b6 D6 d7 @% z&nbsp;&nbsp;z3 Y</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;V0 o1 W9 D! `- B</font><br>死循环（Infinite loops）<br><span style="DISPLAY: none">7 ?7 k2 s1 {$ }0 j! _. B</span> <br><span style="DISPLAY: none">' N8 j9 M: v) t' ?1 p</span> 4. 嵌入式系统中经常要用到无限循环，你怎么样用C编写死循环呢？<br><span style="DISPLAY: none"># h# \1 M0 u( |&nbsp;&nbsp;@" _</span> 这个问题用几个解决方案。我首选的方案是：<br><span style="DISPLAY: none">+ K1 w* ]3 [% c</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ s4 f+ \% ^. H8 o4 @7 I! q</font><br>while(1)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 |- V$ D0 \) {% c+ x( C: R</font><br>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ S&amp; G( }8 |' Q6 D. L% B: m3 K</font><br><br><span style="DISPLAY: none">. v/ A, B% r4 ?5 w8 y7 j4 H2 Q</span> }<br><span style="DISPLAY: none">&amp; x" d; o+ ]+ C6 l; z1 I</span> <br><span style="DISPLAY: none">6 X" A- Q, Z" U, J, e0 F0 E+ J</span> 一些程序员更喜欢如下方案：<br><span style="DISPLAY: none">4 d; p9 [1 w. u) v5 U' H3 g</span> <br><span style="DISPLAY: none">/ Y. M&amp; [6 ?' Z- H6 U8 a&amp; A* ~</span> for(;;)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 Q, h( y' z2 I+ `# X&amp; n, Q</font><br>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">! f&amp; [; F! b: ^( ~# A4 {</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 J9 i" H0 s( q&nbsp;&nbsp;K</font><br>}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" k$ n3 S- [! ?7 i1 E5 @/ x6 h</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 i" R, S, m9 t: T</font><br>这个实现方式让我为难，因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案，我将用这个作为一个机会去探究他们这样做的基本原理。如果他们的基本答案是："我被教着这样做，但从没有想到过为什么。"这会给我留下一个坏印象。<br><span style="DISPLAY: none">% U. y5 J6 Y5 N* T4 q</span> <br><span style="DISPLAY: none">5 F/ Q&amp; W" b; K" n: j) m' x</span> 第三个方案是用 goto<br><span style="DISPLAY: none">1 N. g) K( P" P/ ]</span> Loop:<br><span style="DISPLAY: none">' N! F0 q+ ~6 h' }) g2 m% Q+ A</span> ...<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, Z3 T5 ~0 A5 W0 F" _</font><br>goto Loop;<br><span style="DISPLAY: none">" Q' K4 A1 o1 L2 J/ P/ k8 Y</span> 应试者如给出上面的方案，这说明或者他是一个汇编语言程序员（这也许是好事）或者他是一个想进入新领域的BASIC/FORTRAN程序员。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">! j$ y$ |+ c2 |# A1 D; Q! o</font><br><br><span style="DISPLAY: none">: p* z7 ^; w; H</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" Q; O; a+ ~7 P# i* n* d</font><br>数据声明（Data declarations） <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( E- V# z, ?* o5 \</font><br><br><span style="DISPLAY: none">( \+ V: N0 ]5 f2 t4 C6 B</span> 5. 用变量a给出下面的定义<br><span style="DISPLAY: none">% v&nbsp;&nbsp;h+ a9 j4 L&nbsp;&nbsp;H9 g</span> a) 一个整型数（An integer） <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;K5 A# B&amp; x0 o9 h+ M) J- V</font><br>b)一个指向整型数的指针（ A pointer to an integer） <font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># u, d6 X6 Z1 P) \" E( d: l</font><br>c)一个指向指针的的指针，它指向的指针是指向一个整型数（ A pointer to a pointer to an intege）r <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: X" L" _' Q: w/ w&nbsp;&nbsp;n4 f9 D</font><br>d)一个有10个整型数的数组（ An array of 10 integers） <br><span style="DISPLAY: none">9 C6 z+ X9 _7 H1 L1 G</span> e) 一个有10个指针的数组，该指针是指向一个整型数的。（An array of 10 pointers to integers） <br><span style="DISPLAY: none">; y- j) S- q4 C4 ^6 s6 t% o/ t2 u5 n; N0 x</span> f) 一个指向有10个整型数数组的指针（ A pointer to an array of 10 integers） <br><span style="DISPLAY: none">+ c- L&amp; d8 I1 E&amp; ^6 J$ g% ]</span> g) 一个指向函数的指针，该函数有一个整型参数并返回一个整型数（A pointer to a function that takes an integer as an argument and returns an integer） <br><span style="DISPLAY: none">&nbsp;&nbsp;v5 t. D. [6 ]4 Y2 n</span> h) 一个有10个指针的数组，该指针指向一个函数，该函数有一个整型参数并返回一个整型数（ An array of ten pointers to functions that take an integer argument and return an integer ）<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. s, k( g&amp; l9 g; _0 M. f</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: @4 t6 M8 o$ J3 t</font><br>答案是： <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 N* N) C% t2 x7 K% x* e2 N; n5 ~</font><br>a) int a; // An integer <font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># z: B&amp; D4 [7 Y! ]6 Q</font><br>b) int *a; // A pointer to an integer <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 x' Z- A0 z8 U</font><br>c) int **a; // A pointer to a pointer to an integer <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 q, A9 R2 \4 j) x</font><br>d) int a[10]; // An array of 10 integers <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 q5 m4 ?8 E: Y% i0 E; V</font><br>e) int *a[10]; // An array of 10 pointers to integers <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 G: \% S1 ~1 q( S&amp; W; n</font><br>f) int (*a)[10]; // A pointer to an array of 10 integers <br><span style="DISPLAY: none">1 z" i! t) A5 I% o/ y</span> g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 R8 }4 |3 A- F" x% r) D% q3 a</font><br>h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 b. {' F5 p% [' l</font><br><br><span style="DISPLAY: none">; H$ H6 f( `5 ^&amp; X</span> 人们经常声称这里有几个问题是那种要翻一下书才能回答的问题，我同意这种说法。当我写这篇文章时，为了确定语法的正确性，我的确查了一下书。但是当我被面试的时候，我期望被问到这个问题（或者相近的问题）。因为在被面试的这段时间里，我确定我知道这个问题的答案。应试者如果不知道所有的答案（或至少大部分答案），那么也就没有为这次面试做准备，如果该面试者没有为这次面试做准备，那么他又能为什么出准备呢？<br><span style="DISPLAY: none">) Z2 ?&amp; ]3 X. A6 b7 L' p( i3 v% X</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% t/ S/ s! E7 ~8 I) ?9 U</font><br>Static <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 s9 \&nbsp;&nbsp;b3 h. R* b, h</font><br><br><span style="DISPLAY: none">9 K3 i$ L# Z% m</span> 6. 关键字static的作用是什么？<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% v( y) E: E- B$ z, s</font><br>这个简单的问题很少有人能回答完全。在C语言中，关键字static有三个明显的作用：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 m: B! t+ Z; n" b. W. b9 w5 m2 r# R. M</font><br>1)在函数体，一个被声明为静态的变量在这一函数被调用过程中维持其值不变。<br><span style="DISPLAY: none">% U9 O- |% ^4 T- p0 o: u6 h; M$ W</span> 2) 在模块内（但在函数体外），一个被声明为静态的变量可以被模块内所用函数访问，但不能被模块外其它函数访问。它是一个本地的全局变量。<br><span style="DISPLAY: none">1 }* @% k* h8 u( `/ d&amp; p</span> 3) 在模块内，一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是，这个函数被限制在声明它的模块的本地范围内使用。<br><span style="DISPLAY: none">5 E8 W. a5 ~&amp; J) W" r/ O</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. Q. R; N, U$ i5 W. r</font><br>大多数应试者能正确回答第一部分，一部分能正确回答第二部分，同是很少的人能懂得第三部分。这是一个应试者的严重的缺点，因为他显然不懂得本地化数据和代码范围的好处和重要性。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( y; w5 p) \&amp; {; x9 H/ O</font><br><br><span style="DISPLAY: none">/ p- u' L1 s( @! O) u# g5 w* T</span> <br><span style="DISPLAY: none">; @( s; R/ k7 Y6 x/ |( C1 ?! `</span> Const <br><span style="DISPLAY: none">% y9 O* t# P8 y&nbsp;&nbsp;H4 v</span> <br><span style="DISPLAY: none">; m% |0 Z7 ^$ z! x</span> 7．关键字const有什么含意？<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" d3 f* M, k% z&amp; n$ c</font><br>我只要一听到被面试者说："const意味着常数"，我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法，因此ESP(译者：Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章，只要能说出const意味着"只读"就可以了。尽管这个答案不是完全的答案，但我接受它作为一个正确的答案。（如果你想知道更详细的答案，仔细读一下Saks的文章吧。）<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 H5 [: G" L0 B* W</font><br>如果应试者能正确回答这个问题，我将问他一个附加的问题：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 G' S" F" b) K# s* U</font><br>下面的声明都是什么意思？<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, O, O$ w( d" V</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 Z2 U* n* L7 Y$ c( ]# B</font><br>const int a;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 |6 `&amp; m6 U. N* G7 p5 P; S</font><br>int const a;<br><span style="DISPLAY: none">' c: B: P&nbsp;&nbsp;]! N1 ]6 Z</span> const int *a;<br><span style="DISPLAY: none">% v+ m; y) e&amp; o</span> int * const a;<br><span style="DISPLAY: none">% z- O: Y&nbsp;&nbsp;g: R8 `( y&nbsp;&nbsp;{: y5 x</span> int const * a const;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, W+ i&amp; r. Z9 {) l</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; O+ l% H9 ]&nbsp;&nbsp;]&amp; S0 {" Q* ^</font><br>/******/<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 J&amp; @% |, Q* W1 C( u</font><br>前两个的作用是一样，a是一个常整型数。第三个意味着a是一个指向常整型数的指针（也就是，整型数是不可修改的，但指针可以）。第四个意思a是一个指向整型数的常指针（也就是说，指针指向的整型数是可以修改的，但指针是不可修改的）。最后一个意味着a是一个指向常整型数的常指针（也就是说，指针指向的整型数是不可修改的，同时指针也是不可修改的）。如果应试者能正确回答这些问题，那么他就给我留下了一个好印象。顺带提一句，也许你可能会问，即使不用关键字 const，也还是能很容易写出功能正确的程序，那么我为什么还要如此看重关键字const呢？我也如下的几下理由：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. O. E&amp; ^- b5 ?+ K( S</font><br>1) 关键字const的作用是为给读你代码的人传达非常有用的信息，实际上，声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾，你就会很快学会感谢这点多余的信息。（当然，懂得用const的程序员很少会留下的垃圾让别人来清理的。）<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, m% \&nbsp;&nbsp;J&nbsp;&nbsp;X; P! A; W: x</font><br>2) 通过给优化器一些附加的信息，使用关键字const也许能产生更紧凑的代码。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. v&amp; H1 I' T: V) c9 W% f. i1 S</font><br>3) 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数，防止其被无意的代码修改。简而言之，这样可以减少bug的出现。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 l0 Y* t9 F&amp; W7 Y( ^7 e. p( L6 c</font><br><br><span style="DISPLAY: none">8 ^: d# D$ h5 i) c; q</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; D% o$ b/ t5 D</font><br>Volatile <br><span style="DISPLAY: none">5 X# }4 M" s- p&nbsp;&nbsp;l2 [</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. S% ^/ c* w; U4 I" x/ ], C6 A</font><br>8. 关键字volatile有什么含意?并给出三个不同的例子。<br><span style="DISPLAY: none">8 [/ ~, Z* p" w# f5 [! h1 t</span> 一个定义为volatile的变量是说这变量可能会被意想不到地改变，这样，编译器就不会去假设这个变量的值了。精确地说就是，优化器在用到这个变量时必须每次都小心地重新读取这个变量的值，而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: h9 R) A( |* k</font><br>1) 并行设备的硬件寄存器（如：状态寄存器）<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' G+ m$ p! Y5 D6 l&nbsp;&nbsp;v' A% C</font><br>2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 [5 A6 E&amp; G&nbsp;&nbsp;U1 ]9 P" z# }</font><br>3) 多线程应用中被几个任务共享的变量<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% V$ ?&amp; X: v8 c) T" M% ?</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" o) R% y+ i3 h/ l5 a) u2 L</font><br>回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道，所有这些都要求用到volatile变量。不懂得volatile的内容将会带来灾难。<br><span style="DISPLAY: none">- g+ D&nbsp;&nbsp;V1 E# z$ z4 b</span> 假设被面试者正确地回答了这是问题（嗯，怀疑是否会是这样），我将稍微深究一下，看一下这家伙是不是直正懂得volatile完全的重要性。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">! K! H; b' ?, x</font><br>1)一个参数既可以是const还可以是volatile吗？解释为什么。<br><span style="DISPLAY: none">&amp; {' o0 r! D&amp; B/ q: T* m1 q</span> 2); 一个指针可以是volatile 吗？解释为什么。<br><span style="DISPLAY: none">3 a$ j4 M! \4 E% Q. U&amp; F/ C: |</span> 3); 下面的函数有什么错误：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">* k; n; ?, O7 U" C+ V1 r</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( V, Y' Y% e1 D8 R) T5 w1 b* W</font><br>int square(volatile int *ptr)<br><span style="DISPLAY: none">2 R9 N: B- O&amp; s! p</span> {<br><span style="DISPLAY: none"># o&amp; o- s- _) C* ]8 `</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return *ptr * *ptr;<br><span style="DISPLAY: none">% Q5 H2 q2 }: h9 C- @( _% |</span> }<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ L6 P- o( J, n: Q</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">1 r5 f&amp; R" {&amp; _$ X# |0 U</font><br>下面是答案：<br><span style="DISPLAY: none">+ e# T" h3 h0 d' L</span> 1)是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。<br><span style="DISPLAY: none">8 b&amp; [&nbsp;&nbsp;N$ ^1 _5 l' ], P</span> 2); 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; {% J3 F3 N, M0 }# \3 h</font><br>3) 这段代码有点变态。这段代码的目的是用来返指针*ptr指向值的平方，但是，由于*ptr指向一个volatile型参数，编译器将产生类似下面的代码：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;|- k3 U! M2 f( ?6 v' _</font><br><br><span style="DISPLAY: none">8 B- n, K+ x* V&nbsp;&nbsp;s2 o</span> int square(volatile int *ptr) <br><span style="DISPLAY: none"># b8 B&amp; F( e; B0 Y, _3 f</span> {<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 U. g1 p" H5 Q' O# Z- M- @, u</font><br>&nbsp; &nbsp;&nbsp;&nbsp;int a,b;<br><span style="DISPLAY: none">; O2 Q; C% S&amp; Z8 }. Q' @</span>&nbsp; &nbsp;&nbsp;&nbsp;a = *ptr;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, f2 V5 ^1 X% u1 Q0 I</font><br>&nbsp; &nbsp;&nbsp;&nbsp;b = *ptr;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" D4 B4 @% W: N, x</font><br>&nbsp; &nbsp;&nbsp;&nbsp;return a * b;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; b( n0 O* M" m</font><br>}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' x* U. _' U1 i4 q$ \# D</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" l: H9 f$ P1 l6 W! Z$ P. b9 M- b</font><br>由于*ptr的值可能被意想不到地该变，因此a和b可能是不同的。结果，这段代码可能返不是你所期望的平方值！正确的代码如下：<br><span style="DISPLAY: none">&amp; y) ^2 ], [" E9 A7 i# N$ F* ?</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) ^, t' Q+ Y. u2 T8 g</font><br>long square(volatile int *ptr) <br><span style="DISPLAY: none">/ I&nbsp;&nbsp;N5 m$ l1 X</span> {<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 Y) I/ i. S1 s( {3 u6 c8 R4 F</font><br>&nbsp; &nbsp;&nbsp;&nbsp;int a;<br><span style="DISPLAY: none">- L/ w( `% i" z; [+ B0 }</span>&nbsp; &nbsp;&nbsp;&nbsp;a = *ptr;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" Y9 B4 S6 ?: W7 T1 ]</font><br>&nbsp; &nbsp;&nbsp;&nbsp;return a * a;<br><span style="DISPLAY: none">7 w: x3 j: o; T4 V! m</span> }<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ s* Z/ v/ H/ m% G</font><br><br><span style="DISPLAY: none">6 g+ X7 F2 q' P3 Q* `, S</span> 位操作（Bit manipulation） <br><span style="DISPLAY: none">, E$ w' G- @: {" y</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( n5 j, v0 N+ d% E2 h&nbsp;&nbsp;^+ u+ V</font><br>9. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a，写两段代码，第一个设置a的bit 3，第二个清除a 的bit 3。在以上两个操作中，要保持其它位不变。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% j5 n+ |' `# d</font><br>对这个问题有三种基本的反应<br><span style="DISPLAY: none">( ~5 g( @9 ~! i9 q. T. L, {</span> 1)不知道如何下手。该被面者从没做过任何嵌入式系统的工作。<br><span style="DISPLAY: none">* C. Z4 ]' ^+ @. @. R1 S# y8 g</span> 2) 用bit fields。Bit fields是被扔到C语言死角的东西，它保证你的代码在不同编译器之间是不可移植的，同时也保证了的你的代码是不可重用的。我最近不幸看到 Infineon为其较复杂的通信芯片写的驱动程序，它用到了bit fields因此完全对我无用，因为我的编译器用其它的方式来实现bit fields的。从道德讲：永远不要让一个非嵌入式的家伙粘实际硬件的边。<br><span style="DISPLAY: none">% g+ w- L* s, X( C&nbsp;&nbsp;V</span> 3) 用 #defines 和 bit masks 操作。这是一个有极高可移植性的方法，是应该被用到的方法。最佳的解决方案如下：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) Q" a2 Q" S) T4 ?</font><br><br><span style="DISPLAY: none">1 F" I; a1 k8 _8 W8 H</span> #define BIT3 (0x1 &lt;&lt; 3)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 [2 L5 C! D" o5 }3 y/ ?</font><br>static int a;<br><span style="DISPLAY: none">+ b&amp; Q! b+ ]2 b&nbsp;&nbsp;Y&amp; _1 B</span> <br><span style="DISPLAY: none">&nbsp;&nbsp;m8 j/ i&nbsp;&nbsp;r+ a) O</span> void set_bit3(void) <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 O) C, i; z# g: p3 O: W</font><br>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 c/ p8 J" Z7 G$ b</font><br>&nbsp; &nbsp;&nbsp;&nbsp;a |= BIT3;<br><span style="DISPLAY: none">' L6 f# V. b5 A5 u7 T</span> }<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ r( S) t: s$ F4 \- X+ m&nbsp;&nbsp;o1 v</font><br>void clear_bit3(void) <br><span style="DISPLAY: none">% b' S5 Y3 |' r7 a</span> {<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ N! ]9 c0 r&amp; V9 X1 E- V( z</font><br>&nbsp; &nbsp;&nbsp;&nbsp;a &amp;= ~BIT3;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># q$ I&nbsp;&nbsp;n, J9 l8 ~&amp; F" p) G</font><br>}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 D1 L2 V" n+ K' ]2 [8 ~&amp; C</font><br><br><span style="DISPLAY: none">/ e2 M- e* W. s</span> 一些人喜欢为设置和清除值而定义一个掩码同时定义一些说明常数，这也是可以接受的。我希望看到几个要点：说明常数、|=和&amp;=~操作。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 x, j7 r&nbsp;&nbsp;i8 b&amp; [0 q' n( K</font><br><br><span style="DISPLAY: none">% i+ D, I4 g# S&amp; V6 ~6 p6 [8 @&nbsp;&nbsp;Z</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 s1 A+ G$ |) A" f) v% v</font><br>访问固定的内存位置（Accessing fixed memory locations） <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, K) U' H4 T8 I* i0 ~</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% @: _- ^, N# r4 R" z5 ^</font><br>10. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中，要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。<br><span style="DISPLAY: none">&nbsp;&nbsp;z) n9 w3 b% N! Q( V</span> 这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换（typecast）为一指针是合法的。这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 g3 {/ f1 N9 A</font><br>&nbsp; &nbsp;&nbsp;&nbsp;int *ptr;<br><span style="DISPLAY: none">/ f6 {&amp; ~" _) L$ g* {1 ]</span>&nbsp; &nbsp;&nbsp;&nbsp;ptr = (int *)0x67a9;<br><span style="DISPLAY: none">1 f3 m5 S4 g$ U, P</span>&nbsp; &nbsp;&nbsp;&nbsp;*ptr = 0xaa55;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 W0 U4 m( F, `</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">- C2 I' G5 T; ?9 D3 m</font><br>&nbsp;&nbsp;A more obscure approach is: <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;r# a4 R6 L) r. A&amp; [</font><br>一个较晦涩的方法是：<br><span style="DISPLAY: none">) K&amp; s! X9 h; g. |&amp; p7 q1 U</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; j0 D( k4 s$ G" w3 D1 E1 L$ D( v&amp; Z</font><br>&nbsp; &nbsp;&nbsp;&nbsp;*(int * const)(0x67a9) = 0xaa55;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% j8 R8 O3 m- [; o' g, x</font><br><br><span style="DISPLAY: none">2 _1 D. p. d; K; o# Y</span> 即使你的品味更接近第二种方案，但我建议你在面试时使用第一种方案。<br><span style="DISPLAY: none">7 e9 G1 k9 k0 n. E5 c2 u</span> <br><span style="DISPLAY: none">% H7 U/ v&amp; r&amp; C" H/ ^1 P. J</span> 中断（Interrupts） <br><span style="DISPLAY: none">( u# N( o( t+ m7 f# ^* N( V</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">* q: K3 ]. B&nbsp;&nbsp;N</font><br>11. 中断是嵌入式系统中重要的组成部分，这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是，产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR)，请评论一下这段代码的。<br><span style="DISPLAY: none">6 R- v. @1 s* l3 G</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">1 W) N: T* Q' A. c: {</font><br>__interrupt double compute_area (double radius) <br><span style="DISPLAY: none">&nbsp;&nbsp;q: f' }% K&amp; ?</span> {<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; A! B1 d1 L( N6 D</font><br>&nbsp; &nbsp;&nbsp;&nbsp;double area = PI * radius * radius;<br><span style="DISPLAY: none">% x/ Q5 N+ E4 c</span>&nbsp; &nbsp;&nbsp;&nbsp;printf("\nArea = %f", area);<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( q/ A4 L* K# u6 o6 ]</font><br>&nbsp; &nbsp;&nbsp;&nbsp;return area;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" p! N( R&amp; q/ `8 o1 a$ t. x$ I</font><br>}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: J6 `# p/ z$ V. R/ E( y</font><br><br><span style="DISPLAY: none">: [3 o- o3 q% L( {</span> 这个函数有太多的错误了，以至让人不知从何说起了：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;f* m$ a+ s! o7 P4 [</font><br>1)ISR 不能返回一个值。如果你不懂这个，那么你不会被雇用的。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 E) k# |% B+ U" \7 h0 b</font><br>2) ISR 不能传递参数。如果你没有看到这一点，你被雇用的机会等同第一项。<br><span style="DISPLAY: none">+ q; u9 H9 K* w$ [' f</span> 3) 在许多的处理器/编译器中，浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈，有些处理器/编译器就是不允许在ISR中做浮点运算。此外，ISR应该是短而有效率的，在ISR中做浮点运算是不明智的。<br><span style="DISPLAY: none">( F. \6 s+ ]2 D</span> 4) 与第三点一脉相承，printf()经常有重入和性能上的问题。如果你丢掉了第三和第四点，我不会太为难你的。不用说，如果你能得到后两点，那么你的被雇用前景越来越光明了。<br><span style="DISPLAY: none">* g' [) M. I; i3 G6 a" i+ n) C</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;?' [! Z. D$ c0 x</font><br><br><span style="DISPLAY: none">; I! G6 B* M7 k* m' Q5 x. x</span> 代码例子（Code examples）<br><span style="DISPLAY: none">% k- A: ^) H&amp; Y; S# a; R, K</span> <br><span style="DISPLAY: none">. \+ q5 L&amp; c&nbsp;&nbsp;C" Y&amp; L</span> 12 . 下面的代码输出是什么，为什么？<br><span style="DISPLAY: none">: v5 M4 d1 U8 M! P&amp; s: Q</span> <br><span style="DISPLAY: none">/ b2 {; I+ F1 i7 o* n&nbsp;&nbsp;A</span> void foo(void)<br><span style="DISPLAY: none">0 m! @+ X) y0 F7 G: y8 N5 Q% N8 X</span> {<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 K/ H, ]+ m7 C" A</font><br>&nbsp; &nbsp;&nbsp;&nbsp;unsigned int a = 6;<br><span style="DISPLAY: none">- z* U" ?6 w- Z/ \</span>&nbsp; &nbsp;&nbsp;&nbsp;int b = -20;<br><span style="DISPLAY: none">6 v" \/ Z3 m9 f9 G% K% {6 P9 d</span>&nbsp; &nbsp;&nbsp;&nbsp;(a+b &gt; 6) ? puts("&gt; 6") : puts("&lt;= 6");<br><span style="DISPLAY: none">' E' }, P&amp; a, }! w&nbsp;&nbsp;i2 s: f1 C</span> }<br><span style="DISPLAY: none">0 T3 n$ }$ j" `&amp; Z1 f</span> 这个问题测试你是否懂得C语言中的整数自动转换原则，我发现有些开发者懂得极少这些东西。不管如何，这无符号整型问题的答案是输出是 "&gt;6"。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数，所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题，你也就到了得不到这份工作的边缘。<br><span style="DISPLAY: none">3 U, ?# Y: V! e% B' ^</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; y/ H2 i0 z0 s8 ^7 z</font><br>13. 评价下面的代码片断：<br><span style="DISPLAY: none">9 b, I: k5 b2 R8 B3 r5 ?&nbsp;&nbsp;m# s9 H</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, }&amp; d+ t# q3 ]. ?1 Y* j! F</font><br>unsigned int zero = 0;<br><span style="DISPLAY: none">. Z- q5 j2 A: }; F3 x, y% J) G; `6 k+ o</span> unsigned int compzero = 0xFFFF; <br><span style="DISPLAY: none">6 x&nbsp;&nbsp;{6 b5 N! E9 E8 k4 b&nbsp;&nbsp;e</span> /*1's complement of zero */<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 o7 _0 V&nbsp;&nbsp;t&nbsp;&nbsp;F3 ^. z</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 A4 z; U6 k6 d, n&amp; W: l' A# I</font><br>对于一个int型不是16位的处理器为说，上面的代码是不正确的。应编写如下：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; |5 P: S/ f&amp; _8 w. v</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">1 X7 c8 F( I&nbsp;&nbsp;H9 C&nbsp;&nbsp;C* p</font><br>unsigned int compzero = ~0;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) T% _&nbsp;&nbsp;m" |&nbsp;&nbsp;x2 ?5 _9 D. F: u, B3 X</font><br><br><span style="DISPLAY: none">, u( F$ u2 o* g' ?" U7 m</span> 这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里，好的嵌入式程序员非常准确地明白硬件的细节和它的局限，然而PC机程序往往把硬件作为一个无法避免的烦恼。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; \. G' E; y7 a3 S( V# ?( [</font><br>到了这个阶段，应试者或者完全垂头丧气了或者信心满满志在必得。如果显然应试者不是很好，那么这个测试就在这里结束了。但如果显然应试者做得不错，那么我就扔出下面的追加问题，这些问题是比较难的，我想仅仅非常优秀的应试者能做得不错。提出这些问题，我希望更多看到应试者应付问题的方法，而不是答案。不管如何，你就当是这个娱乐吧...<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( R. U0 x) H- ?/ K- H; N( {</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: a1 i) N0 _8 @' l) u" e</font><br><br><span style="DISPLAY: none">$ m" d' z$ o! G&amp; w3 A. x- D&amp; r</span> 动态内存分配（Dynamic memory allocation） <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ N3 r( C5 m! R# D) J+ N1 J" U</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) U1 c$ W6 }; W$ ]</font><br>14. 尽管不像非嵌入式计算机那么常见，嵌入式系统还是有从堆（heap）中动态分配内存的过程的。那么嵌入式系统中，动态分配内存可能发生的问题是什么？<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">1 S% u) _9 L4 l( h4 v4 m</font><br>这里，我期望应试者能提到内存碎片，碎片收集的问题，变量的持行时间等等。这个主题已经在ESP杂志中被广泛地讨论过了（主要是 P.J. Plauger, 他的解释远远超过我这里能提到的任何解释），所有回过头看一下这些杂志吧！让应试者进入一种虚假的安全感觉后，我拿出这么一个小节目：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">! P! f&nbsp;&nbsp;l' ^4 k</font><br>下面的代码片段的输出是什么，为什么？<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ O5 @) Z! q. y* M9 I</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># T; e" {. T/ n* x</font><br>char *ptr;<br><span style="DISPLAY: none">' j* O% c4 z/ B+ T7 ]7 B</span> if ((ptr = (char *)malloc(0)) == NULL) <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( T3 T, h. c+ b# H</font><br>&nbsp; &nbsp;&nbsp;&nbsp;puts("Got a null pointer");<br><span style="DISPLAY: none"># P' ?9 ^( e9 Y6 h$ i$ u</span> else<br><span style="DISPLAY: none">5 R8 t- p! P) q2 Y&nbsp;&nbsp;m" w</span>&nbsp; &nbsp;&nbsp;&nbsp;puts("Got a valid pointer");<br><span style="DISPLAY: none">+ l0 t" F: s1 O</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 B9 G! o&amp; g% q, u0 z2 b1 Z</font><br>这是一个有趣的问题。最近在我的一个同事不经意把0值传给了函数malloc，得到了一个合法的指针之后，我才想到这个问题。这就是上面的代码，该代码的输出是"Got a valid pointer"。我用这个来开始讨论这样的一问题，看看被面试者是否想到库例程这样做是正确。得到正确的答案固然重要，但解决问题的方法和你做决定的基本原理更重要些。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: u0 l9 e5 B) B&amp; o8 E</font><br><br><span style="DISPLAY: none">5 p7 s9 A% x$ ?( b8 J</span> Typedef <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; w3 `, I) i( A+ j</font><br>&nbsp;&nbsp;<br><span style="DISPLAY: none">; `+ T) [) p; l* r" u, K! Z" S</span> 15 Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如，思考一下下面的例子：<br><span style="DISPLAY: none">) p8 ^5 ?' e* N8 @6 W! H" s</span> <br><span style="DISPLAY: none">2 l5 q+ p6 i4 k# N% m! N</span> #define dPS struct s *<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% O: x9 \% d) U7 a1 T0 D/ X</font><br>typedef struct s * tPS;<br><span style="DISPLAY: none">8 j8 T* u" A6 _3 r</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># @+ A3 l1 M4 O' |( y9 r% ?&nbsp;&nbsp;Z</font><br>以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢？（如果有的话）为什么？<br><span style="DISPLAY: none">" T4 ~* V3 z* A( k% c$ o</span> 这是一个非常微妙的问题，任何人答对这个问题（正当的原因）是应当被恭喜的。答案是：typedef更好。思考下面的例子：<br><span style="DISPLAY: none">0 k2 \&nbsp;&nbsp;A+ e) @- z</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ n7 U: a9 ^- y</font><br>dPS p1,p2;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 B4 m$ F- M' d+ w7 [. }</font><br>tPS p3,p4;<br><span style="DISPLAY: none">! G) {- h" M- B5 O* Q. ?; U</span> <br><span style="DISPLAY: none">8 G% d$ A! d. {+ l+ l</span> 第一个扩展为<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" o) W7 P) O! d8 u( x4 p</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 ?. S" X+ D$ v$ J</font><br>struct s * p1, p2;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 ?" z, y5 h: s7 ]! \# y</font><br>.<br><span style="DISPLAY: none">0 H% T$ m% J( q&nbsp;&nbsp;{&amp; g( x</span> 上面的代码定义p1为一个指向结构的指，p2为一个实际的结构，这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。<br><span style="DISPLAY: none">0 |' J8 @' f) ]# X* g$ w" ?</span> <br><span style="DISPLAY: none">2 A- J" q% w! g, f0 I9 S</span> <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. `! @7 r* z5 J8 X</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' o( f$ E. s1 o2 r; z+ S</font><br>晦涩的语法<br><span style="DISPLAY: none">. m% @, }* z: _</span> <br><span style="DISPLAY: none">0 c# d, d. B&nbsp;&nbsp;?3 S( T6 B</span> 16 . C语言同意一些令人震惊的结构,下面的结构是合法的吗，如果是它做些什么？<br><span style="DISPLAY: none">5 ~&amp; T6 |, H( e* j</span> <br><span style="DISPLAY: none">+ \" x: g&nbsp;&nbsp;x8 L! _&amp; s&amp; B</span> int a = 5, b = 7, c;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ \8 ]9 e- p, J&amp; n, L; b</font><br>c = a+++b;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ d6 q7 `' J4 j2 s! o7 |</font><br><br><span style="DISPLAY: none">: b+ \" U* Z+ h5 A2 i+ a</span> 这个问题将做为这个测验的一个愉快的结尾。不管你相不相信，上面的例子是完全合乎语法的。问题是编译器如何处理它？水平不高的编译作者实际上会争论这个问题，根据最处理原则，编译器应当能处理尽可能所有合法的用法。因此，上面的代码被处理成：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, |8 _0 C; \* m( o1 Y4 e" I</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">- l: I# P, O/ e3 M+ h0 `- v</font><br>c = a++ + b;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 G8 \&amp; W/ a&amp; K6 s</font><br><br><span style="DISPLAY: none">4 f2 _$ N( Q/ H&nbsp;&nbsp;x&amp; i" N# `! D) g</span> 因此, 这段代码持行后a = 6, b = 7, c = 12。<br><span style="DISPLAY: none">' w+ E* S; O3 q, `3 I' K. ]% @</span> 如果你知道答案，或猜出正确答案，做得好。如果你不知道答案，我也不把这个当作问题。我发现这个问题的最大好处是这是一个关于代码编写风格，代码的可读性，代码的可修改性的好的话题。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, M( X# L9 z# z3 x' R9 U</font><br><br><span style="DISPLAY: none">( f- ?! ?% ~) h: n&amp; m3 t5 F</span><br><span style="DISPLAY: none">! k&nbsp;&nbsp;z) e3 u- K) H0 h5 X- A8 s- _: M</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;n* w&amp; W; f( e% @</font><br><br><span style="DISPLAY: none">! w! L&nbsp;&nbsp;{. l: s5 I- q</span><br><span style="DISPLAY: none">/ s5 q&amp; W- o6 Q</span>1、将一个字符串逆序 <br><span style="DISPLAY: none">3 L1 f" I&nbsp;&nbsp;G; V8 D) o+ n</span>2、将一个链表逆序 <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ k. J$ B! y% E! z9 U</font><br>3、计算一个字节里（byte）里面有多少bit被置1 <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' o9 c' p+ O7 A" e! r&nbsp;&nbsp;a9 t</font><br>4、搜索给定的字节(byte) <br><span style="DISPLAY: none">! {, j# F- E" {</span>5、在一个字符串中找到可能的最长的子字符串 <br><span style="DISPLAY: none">1 b2 R* `&amp; {7 I</span>6、字符串转换为整数 <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: a&amp; k+ V2 F1 }7 t5 v* r</font><br>7、整数转换为字符串</td>
        </tr>
    </tbody>
</table>
</div>
<img src ="http://www.cppblog.com/life02/aggbug/96112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-09-14 12:50 <a href="http://www.cppblog.com/life02/archive/2009/09/14/96112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>周立功单片机软件面试方面的部分题目和解答（转）</title><link>http://www.cppblog.com/life02/archive/2009/09/14/96111.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Mon, 14 Sep 2009 04:48:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/09/14/96111.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/96111.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/09/14/96111.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/96111.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/96111.html</trackback:ping><description><![CDATA[<h2>周立功单片机软件面试方面的部分题目和解答</h2>
<div class=t_msgfontfix>
<table cellSpacing=0 cellPadding=0>
    <tbody>
        <tr>
            <td class=t_msgfont id=postmessage_5101945>1、&nbsp; &nbsp; &nbsp; &nbsp; 编写函数从一个包含由逗号分隔的100个16进制数的字符串中提取这100个16进制数，按从大到小的顺序输出其中的偶数。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ m; f1 y# }+ S9 M</font><br>解：此题按步骤解即可：先解析100个整数；再对其中的偶数排序；最后输出。<br><span style="DISPLAY: none">8 s7 O7 V8 v&amp; E2 A( t</span><br><span style="DISPLAY: none">" g- Y! o, m' L</span>#incluede&lt;iostream&gt;<br><span style="DISPLAY: none">1 X( s3 k2 q' n3 Q$ ~5 V: R</span>void coma(char *s,int b[],int bl)<br><span style="DISPLAY: none">9 k0 b4 j1 O( D2 C: Z0 P</span>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 j9 j&nbsp;&nbsp;O. @/ o- Y2 e5 K&nbsp;&nbsp;\' S% M</font><br>&nbsp; &nbsp; &nbsp; &nbsp; int i,j=0,k;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; i$ v&nbsp;&nbsp;u0 G0 R6 i9 _( L/ w</font><br>&nbsp; &nbsp;<br><span style="DISPLAY: none">/ Y' x$ l8 G1 l2 w4 I! G. o</span>&nbsp; &nbsp; //将字符串s按分隔符&#8217;,&#8217;解析成100个整数，存放在数组b中<br><span style="DISPLAY: none">$ [" ], q4 |9 e' V</span>&nbsp; &nbsp; &nbsp; &nbsp; for(i=0;i&lt;bl;i++)<br><span style="DISPLAY: none">' u/ j1 o&amp; y$ V) A" u# t1 f</span>&nbsp; &nbsp; &nbsp; &nbsp; {<br><span style="DISPLAY: none">8 r# ?; ?6 v9 Z2 g0 A* d</span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;while(s[j]!=','&amp;&amp;j&lt;strlen(s))<br><span style="DISPLAY: none">+ c* J: t, l2 l2 [4 D</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br><span style="DISPLAY: none">/ Q; T6 Q( L% o4 Y5 h1 J" r</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(s[j]&gt;='0'&amp;&amp;s[j]&lt;='9')<font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># a8 d) o! I" M* }</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k=s[j]-'0';<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 |5 Z&amp; \+ q4 P: G4 c</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if(s[j]&gt;='a'&amp;&amp;s[j]&lt;='f')<br><span style="DISPLAY: none">0 q( p9 D6 K) i</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k=s[j]-'a'+10;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># S0 ~7 |* Q$ Q/ C" s</font><br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;b<em>=b<em>*16+k;<br><span style="DISPLAY: none">7 T7 V&nbsp;&nbsp;P9 ]0 \+ v</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j++;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">* v; o" w) S&nbsp;&nbsp;W) B- w4 X4 d</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 S/ V7 v" t; D6 D</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j++;<br><span style="DISPLAY: none">0 h1 s* c# B3 `0 V</span>&nbsp; &nbsp; &nbsp; &nbsp; }<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, @% |: T1 F* R" B&nbsp;&nbsp;@" K</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; a+ k+ U' M0 y% T</font><br>&nbsp; &nbsp; &nbsp; &nbsp; int max;<br><span style="DISPLAY: none">% F* |; X' H3 D% \" f' ]5 w</span>&nbsp; &nbsp; &nbsp; &nbsp; int blen=bl;<br><span style="DISPLAY: none">1 w5 o&nbsp;&nbsp;D4 N, X; W; q. k; \</span>&nbsp; &nbsp; &nbsp; &nbsp; int cur,t,even=0;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. u% l7 z# e! h2 a/ M5 c&amp; k1 ^</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, p: e2 Y+ l/ E* X( T/ p</font><br>&nbsp; &nbsp; //对b数组的偶数按从大到小排列，交换到数组的前端。<br><span style="DISPLAY: none">; m5 E1 p3 L: O3 p; ^7 `+ A9 D2 w</span>&nbsp; &nbsp; &nbsp; &nbsp; for(i=0;i&lt;blen;i++)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: u" l/ v; a+ s/ L, l$ u3 R- b" v</font><br>&nbsp; &nbsp; &nbsp; &nbsp; {<br><span style="DISPLAY: none">2 Y+ d# [&nbsp;&nbsp;M- ?$ d, b</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; max=0;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% A, ~3 B! I0 ^</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cur=-1;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 Q! H&amp; O7 R; Z. h: F+ q</font><br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;//j从i开始，因为i以前已是有序偶数，且已从大到小排列<br><span style="DISPLAY: none">4 ~( I' I&amp; G&amp; z0 A( T</span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for(j=i;j&lt;blen;j++)<br><span style="DISPLAY: none">! C9 |) V. R; [2 Q4 G9 y1 W( k</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br><span style="DISPLAY: none">. x; \2 N9 u; {* X8 v+ \; Z</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if(b[j]&gt;max&amp;&amp;b[j]%2==0)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% I&nbsp;&nbsp;M% S2 ]: k/ Y</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br><span style="DISPLAY: none"># T1 n$ K" t9 K% k9 A</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; max=b[j];<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">1 [( `' G- I3 E8 r9 I</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; cur=j;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 k&amp; P1 ?&amp; A9 z$ J6 K) K</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">- P( T" n% w4 \9 \0 F3 f. r</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br><span style="DISPLAY: none">5 g$ ^+ K0 r! `0 e3 r; O</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ u6 ?5 H: d0 G' o' q</font><br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;//找到剩余数组中的最大值，交换到数组前端<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 j+ ]+ T, |' ?&nbsp;&nbsp;j. u7 Z</font><br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if(cur!=-1)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; Q( Q( w( Y3 j) }$ X</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, X3 N&amp; e8 S' W# k2 W# f</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;t=b[cur];<br><span style="DISPLAY: none">( T. y. d, Z1 A. G0 ~, I$ v</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b[cur]=b<em>;<br><span style="DISPLAY: none">4 j' `) R( F/ A) I# f1 z+ B</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b<em>=t;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' d4 j# m&amp; q" I1 Z</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; even++;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ w/ r6 o; _, j</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br><span style="DISPLAY: none">! g7 D! Z* x+ C0 E6 N0 J" T+ ?6 T</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;//剩余数组找不到偶数时，跳出循环<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' _7 \$ _2 n6 v</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br><span style="DISPLAY: none">: V+ Y# }' C6 E- L$ g* }8 x( d3 w8 f9 w</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, h8 g" Y+ R5 O$ h</font><br>&nbsp; &nbsp; &nbsp; &nbsp; }<br><span style="DISPLAY: none">5 k3 G; o' c$ B</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 a5 M7 |* F! V+ N( Y) u</font><br>&nbsp; &nbsp; //输出前even个排序好的偶数<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 q' F2 [3 g% u; Y5 f# [; s1 [</font><br>&nbsp; &nbsp; &nbsp; &nbsp; for(i=0;i&lt;even;i++)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. P1 H7 \3 K+ r9 K7 d8 H# K4 R</font><br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;//十六进制格式输出<br><span style="DISPLAY: none">&amp; r5 Z; t7 L7 M9 j' A</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cout&lt;&lt;hex&lt;&lt;b<em>&lt;&lt;"&nbsp;&nbsp;";<br><span style="DISPLAY: none">" n' a7 `* G3 Y: Z&nbsp;&nbsp;c+ s&nbsp;&nbsp;l. A</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //printf("%x&nbsp;&nbsp;",b<em>);<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;n&nbsp;&nbsp;o$ [, X( A# L# {" e</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 w6 \&amp; k2 G( {/ W7 p5 n</font><br>&nbsp; &nbsp; cout&lt;&lt;endl;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; o6 A8 u&amp; {3 k3 W" |0 T# b</font><br>&nbsp; &nbsp; return;<br><span style="DISPLAY: none">&nbsp;&nbsp;[1 D- i7 _&nbsp;&nbsp;~" S1 g/ @</span>}<br><span style="DISPLAY: none"># V4 L3 T" m. ~- ^- ^* u2 y% Z! _</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" q1 _' h2 a&amp; Z1 Y) X* @7 C</font><br>//测试<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: C9 N1 |; Y; J' s7 o( m+ g; l$ C</font><br>int main()<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' B3 R* k: ^, W; e</font><br>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">! k9 [/ m&nbsp;&nbsp;v: }. `/ f3 J2 A</font><br>char *s="1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10,11,12,13,14,15,16,17,18,19,1a,1b,1c,1d,1e,1f,21,22,23,24,25,26,27,28,29,2a,2b,2c,2d,2e,2f,30,31,32,33,34,35,36,37,38,39,3a,3b,3c,3d,3e,3f,40,41,42,43,44,45,46,47,48,49,4a,4b,4c,4d,4e,4f,50,51,52,53,54,55,56,57,58,59,5a,5b,5c,5d,5e,5f,60,61,62,63,64,65";<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: G/ h0 _' U1 Z6 R0 c</font><br>&nbsp; &nbsp; &nbsp; &nbsp; int sb[100]={0};<br><span style="DISPLAY: none">% L* d0 c; W6 w/ b</span>&nbsp; &nbsp; &nbsp; &nbsp; coma(s,sb,100);<br><span style="DISPLAY: none">% q. ~) o. R, Y&amp; v1 i&amp; A6 Q3 E</span>return 0;<br><span style="DISPLAY: none">0 c; u! @+ K. s6 b4 J1 j: ^</span>}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 K9 k/ ?* d- H5 u: P- T9 c</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ j* n6 Z0 r1 p! q- U) [</font><br>测试输出：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ P# b9 f9 Z' i' C; c! `2 e3 j&nbsp;&nbsp;d! v</font><br>64 62 60 5e 5c 5a 58 56 54 52 50 4e 4c 4a 48 46 44 42 40 3e 3c 3a 38 36 34 32 30 2e 2c 2a 28 26 24 22 20 1e 1c 1a 18 16 14 12 10 e c a 8 6 4 2 0<br><span style="DISPLAY: none">. }. _! S) s' b</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 x7 G4 E% \0 K5 r6 `' a&nbsp;&nbsp;{0 Y</font><br>2、&nbsp; &nbsp; &nbsp; &nbsp; 编写函数数N个BYTE的数据中有多少位是1。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 K, o9 T9 Q) D, v</font><br>解：此题按步骤解：先定位到某一个BYTE数据；再计算其中有多少个1。叠加得解。<br><span style="DISPLAY: none">3 \7 y- ^&amp; h: ^( v) E5 s</span><br><span style="DISPLAY: none">' I3 {$ {; h- z$ x0 ]: b</span>#incluede&lt;iostream&gt;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 H7 T+ m2 @$ E&amp; c</font><br>#define N 10<br><span style="DISPLAY: none">5 U) P% X9 M4 d' |! U- \</span>//定义BYTE类型别名<br><span style="DISPLAY: none">: ^9 J; Y% X4 ^2 g</span>#ifndef BYTE<br><span style="DISPLAY: none"># @4 K% X$ E: o5 y/ A9 {</span>typedef unsigned char BYTE;<br><span style="DISPLAY: none">; V4 k3 Z8 t1 w$ [% F0 \</span>#endif<br><span style="DISPLAY: none">2 {9 t8 ?( w6 E! H, l! d( V</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 X) {( n: I# ?+ t2 |&nbsp;&nbsp;s* r</font><br>int comb(BYTE b[],int n)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' f9 r0 ?1 ?9 ~&amp; M' ?: u</font><br>{<br><span style="DISPLAY: none">" C$ @% l/ U' S) ~% c) r" }&nbsp;&nbsp;V- o&amp; H</span>&nbsp; &nbsp; int count=0;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' g( j&amp; [7 ]7 P$ h6 [" J- p</font><br>&nbsp; &nbsp; &nbsp; &nbsp; int bi,bj;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;Q- I$ L" {) X, u5 l&amp; {1 s* I</font><br>BYTE cc=1,tt;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 ~0 q4 G) q0 s* _&nbsp;&nbsp;y* n</font><br><br><span style="DISPLAY: none">; S: }&amp; K1 J8 M: @$ J&nbsp;&nbsp;c</span>//历遍到第bi个BYTE数据<br><span style="DISPLAY: none">5 R5 V% t" N, @&nbsp;&nbsp;K</span>&nbsp; &nbsp; &nbsp; &nbsp; for(bi=0;bi&lt;n;bi++)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 f3 z5 b7 U$ A2 n" {, y</font><br>&nbsp; &nbsp; &nbsp; &nbsp; {<br><span style="DISPLAY: none">&nbsp;&nbsp;c&amp; x) _. X# A</span>//计算该BYTE的8个bit中有多少个1<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;r5 [&nbsp;&nbsp;?! V; u0 ~) O7 y- f! b</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tt=b[bi];<br><span style="DISPLAY: none">) g6 R$ r: n- i: `0 p</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for(bj=0;bj&lt;8;bj++)<br><span style="DISPLAY: none">4 W8 O% k) r2 f&amp; F, L</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br><span style="DISPLAY: none">1 V. ]- b: N1 i! D0 |</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;//与1相与或模2结果是否是1？测试当前bit是否为1<br><span style="DISPLAY: none">% G' u5 ?* R7 C</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;//if(tt%2==1)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; d! L&nbsp;&nbsp;j3 _5 x% L</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if((tt&amp;cc)==1)<br><span style="DISPLAY: none"># Y3 w+ f' k2 T4 `% y3 _- v" f! J, K</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br><span style="DISPLAY: none">8 ^# D( P; {1 T- P* e</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; count++;<br><span style="DISPLAY: none">0 I7 [' h1 e3 C, [: I' U$ J</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br><span style="DISPLAY: none">; Q9 R4 H4 k' f. q( e3 N. @</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;//右移一位或除以2，效果相同<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 `" t! y, ]&nbsp;&nbsp;e! l' I5 c2 @</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //tt=tt&gt;&gt;1;<br><span style="DISPLAY: none">; l, _' ^$ S9 U* Q</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tt=tt/2;<br><span style="DISPLAY: none">; x) ^6 M# k% s/ @6 x$ l* M</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br><span style="DISPLAY: none">' J&amp; y% W$ u: l- Q5 s</span>&nbsp; &nbsp; &nbsp; &nbsp; }<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, E* V2 z&amp; b, @# k4 }</font><br>&nbsp; &nbsp; &nbsp; &nbsp; return count;<br><span style="DISPLAY: none">+ \&amp; R7 C/ u2 K</span>}<br><span style="DISPLAY: none"># g) i4 e- x0 D, d7 Y7 ?/ w</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( x( ^&nbsp;&nbsp;l2 }8 Z% C9 A) t</font><br>//测试<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">! ~' G" a# b0 |! v</font><br>int main()<br><span style="DISPLAY: none">&amp; N+ T&amp; m8 w: l/ P( y0 I: l</span>{<br><span style="DISPLAY: none">9 d" E) d8 J" r2 j6 o/ b&amp; Q</span>BYTE b[10]={3,3,3,11,1,1,1,1,1,1};<br><span style="DISPLAY: none">$ r. p, v+ r&nbsp;&nbsp;~3 n</span>&nbsp; &nbsp; &nbsp; &nbsp; cout&lt;&lt;comb(b,N)&lt;&lt;endl;<br><span style="DISPLAY: none">7 `&nbsp;&nbsp;N( P- {5 X/ r</span>&nbsp; &nbsp; return 0;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 N7 M. _0 j8 y4 Y. I. V</font><br>}<br><span style="DISPLAY: none">+ u4 j&nbsp;&nbsp;@* J0 O3 Z; X, F</span><br><span style="DISPLAY: none">6 R+ Z; H0 W" X</span>测试输出：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 Q( s: a&nbsp;&nbsp;Q3 O9 n7 R4 \# R&nbsp;&nbsp;j! N</font><br>15<br><span style="DISPLAY: none">5 A' V0 n6 L6 j0 }6 z4 t</span><br><span style="DISPLAY: none">2 |&nbsp;&nbsp;}7 |* ^+ s. A+ |$ [&nbsp;&nbsp;_</span>3、&nbsp; &nbsp; &nbsp; &nbsp; 编写函数比较两个字符串。<br><span style="DISPLAY: none">5 Q" g$ A( p# `8 c4 u. {</span>解：此题简单，可能只要注意一下下标越界问题。<br><span style="DISPLAY: none">9 @1 `# h' ^( [0 k* u: }5 n</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ S9 h; a. E# q</font><br>#incluede&lt;iostream&gt;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 a$ s2 p' Y% j3 ]7 g&amp; [5 }* n</font><br>int mstrcmp(char *st1,char *st2)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; \5 T) U% p7 q4 b</font><br>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;l6 l7 M# l! F8 s8 o4 X$ v$ j</font><br>&nbsp; &nbsp; /*注意到当st1，st2任一为空时，*st1==*st2测试为假；当st1，st2同时为空时，*st1==*st2语句为假，故不会越界。*/<br><span style="DISPLAY: none">2 w&amp; _9 f&nbsp;&nbsp;u7 g, I) S&nbsp;&nbsp;B) t</span>&nbsp; &nbsp; &nbsp; &nbsp; while(*st1==*st2)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 j* j* A5 ^2 @- i</font><br>&nbsp; &nbsp; &nbsp; &nbsp; {<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( ~2 w! I7 X1 m8 V</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; st1++;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( i, ~# B* U6 }</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; st2++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br><span style="DISPLAY: none">5 X4 _, O9 H. `7 I( K&amp; o2 X</span>&nbsp; &nbsp; &nbsp; &nbsp; }<br><span style="DISPLAY: none">8 V# X1 c- v# r. N2 E# q</span>&nbsp; &nbsp; &nbsp; &nbsp; if(*st1&gt;*st2)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, Y/ y2 R* ]4 _5 G- M# w</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 1;<br><span style="DISPLAY: none">&amp; S5 n% @% @7 k2 t9 w% a' \</span>&nbsp; &nbsp; &nbsp; &nbsp; else if(*st1&lt;*st2)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% q* p" ^" _3 l! K&amp; R8 f</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return -1;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; a, W# x" d' h</font><br>&nbsp; &nbsp; &nbsp; &nbsp; else <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 W$ U) Q- I, f1 D' ^</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 0;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 G&amp; x' j&nbsp;&nbsp;f8 S9 f: Y9 q1 V1 k</font><br>}<br><span style="DISPLAY: none">( J+ t0 L- j0 u7 B! ~, i$ K</span><br><span style="DISPLAY: none">1 W7 }&nbsp;&nbsp;Q9 H3 d</span>//测试<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; w! H&nbsp;&nbsp;~' u6 D% g, h</font><br>int main()<br><span style="DISPLAY: none">9 x- Z4 K+ i9 O&nbsp;&nbsp;?9 F/ W7 `</span>{<br><span style="DISPLAY: none">- q, G3 e# s) [</span>&nbsp; &nbsp; char* x1="def2";<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: S# n$ t! j# A</font><br>&nbsp; &nbsp; &nbsp; &nbsp; char* x2="def223";<br><span style="DISPLAY: none">" [$ ]/ C5 O' W: V1 V/ ]</span>&nbsp; &nbsp; //c标准库自带字符串比较函数<br><span style="DISPLAY: none">0 Z5 i$ r' y9 r' Y</span>&nbsp; &nbsp; &nbsp; &nbsp; cout&lt;&lt;strcmp(x1,x2)&lt;&lt;endl;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 j! U6 \( W' j5 ]2 B</font><br>&nbsp; &nbsp; //自己写的<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' ?* X, ~! H9 @% G% g</font><br>&nbsp; &nbsp; cout&lt;&lt;mstrcmp(x1,x2)&lt;&lt;endl;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 E$ s+ q# g5 x5 T( b</font><br>}<br><span style="DISPLAY: none">0 F$ m, R7 _&amp; g% V; B&nbsp;&nbsp;v1 i</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 C) Y% Q2 r. h6 j</font><br>测试输出：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ b) F- i9 P&amp; ]: o3 R</font><br>-1<br><span style="DISPLAY: none">% u9 C7 ?) D5 E</span>-1<br><span style="DISPLAY: none">1 c: f: E) ]7 g8 R</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 W3 D* D3 v% B# f- B</font><br>4、&nbsp; &nbsp; &nbsp; &nbsp; 计算一个结构占的字节数，及在紧凑模式下占的字节数。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. r$ H0 G1 R&nbsp;&nbsp;R&amp; U4 J/ B" k8 x</font><br>解：char占1个字节；int占4个；short占2个；long占4个。考虑到位对齐：char 占1-4字节；int占4-8字节；short占8-12字节；long占12-16字节。紧凑下不知道如何编写代码，但应该不用位对齐，故估计输出应为：11，00000007。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) ]&nbsp;&nbsp;O2 a3 c* W; h( q+ ~</font><br>这里要提醒大家的是：位对齐与类型的排列顺序有关。若类型排列为：int char short long，则int 占1-4字节；char占4-6字节；short占6-8字节；long占8-12字节；此题输出应为：12，00000008。<br><span style="DISPLAY: none">, n, A4 V4 u1 f1 x</span><br><span style="DISPLAY: none">1 X1 c8 q$ k( k$ X&nbsp;&nbsp;c8 _</span>#incluede&lt;iostream&gt;<br><span style="DISPLAY: none">8 t/ @2 r&nbsp;&nbsp;o8 x: ^0 R0 D: l" k</span>typedef struct _st<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 Q8 M6 e/ j0 ~: p( a9 N8 Z</font><br>{<br><span style="DISPLAY: none">( y( y5 e4 j- y/ M8 _! B9 y) s</span>&nbsp; &nbsp; char a;<br><span style="DISPLAY: none">6 m1 o+ c* u+ q9 g( Y" K7 s0 G</span>&nbsp; &nbsp; &nbsp; &nbsp; int b;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 b% L&amp; u2 {* u" `. R2 ~) ^</font><br>&nbsp; &nbsp; &nbsp; &nbsp; short c;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">: f, x- h$ C/ }&nbsp;&nbsp;n( P9 }/ B" L' b</font><br>&nbsp; &nbsp; &nbsp; &nbsp; long d;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 l+ j" F: d" ~7 P" _</font><br>}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 u1 N/ N! A# [" O; k</font><br>st;<br><span style="DISPLAY: none">1 r/ b7 I8 o9 d9 j8 I; K" S</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 v&nbsp;&nbsp;b, r3 R$ d</font><br>//测试：<br><span style="DISPLAY: none">6 j$ l" o" a, z&amp; O</span>int main()<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;A. D) ^* `) A- j" H7 R</font><br>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 q; s3 Q9 ]2 m2 P) }3 K: o- P</font><br>&nbsp; &nbsp; cout&lt;&lt;sizeof(st)&lt;&lt;endl;<br><span style="DISPLAY: none">0 R5 ?+ P9 I; N7 u2 y5 ?, I</span>&nbsp; &nbsp; &nbsp; &nbsp; cout&lt;&lt;&amp;(((st*)0)-&gt;d)&lt;&lt;endl;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">* \4 _# K' j: W- e# h" _. y</font><br>&nbsp; &nbsp; return 0;<br><span style="DISPLAY: none">9 J2 `; G/ {# Q</span>}<br><span style="DISPLAY: none"># x, @- ]0 D* J6 R* O4 t) |</span><br><span style="DISPLAY: none">. E5 w3 x4 X' u1 s, {</span>测试输出：<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 l. D. u; S! h, @) z, N&nbsp;&nbsp;\+ G</font><br>16<br><span style="DISPLAY: none">/ P7 I9 {; a$ f; p8 K</span>0000000C<font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># M( _0 r0 x: T5 t3 L</font><br>注：如何定义紧凑模式？求紧凑模式下的代码。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 s+ s! Q&amp; S5 |) E) O$ a" ^) P</font><br><br><span style="DISPLAY: none">&amp; o+ B! ]) `5 o, S) U</span>5、&nbsp; &nbsp; &nbsp; &nbsp; 多继承。<br><span style="DISPLAY: none">' A% \2 }. k&nbsp;&nbsp;P</span>解：virtual继承是防止a-b,c-d型继承时维护超基类a的两个版本。此题中virtual继承不影响构造及析构函数的调用顺序。此题另一个需要注意的是：new开辟类空间时需要调用构造函数；只当该类空间被delete释放时，相应类实例才会被析构。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) u; n% u3 l4 U; \( \</font><br><br><span style="DISPLAY: none">" h- e+ i+ {4 L&nbsp;&nbsp;e, g</span>#incluede&lt;iostream&gt;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; M1 v1 I9 i&amp; B) k</font><br>class a<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 j; T. l- v3 |# `/ L3 h! [</font><br>{<br><span style="DISPLAY: none"># ?, {, A: @$ }2 S</span>public: <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; ~&amp; |8 i* B# V: j) U) ~6 R</font><br>&nbsp; &nbsp; &nbsp; &nbsp; a(){cout&lt;&lt;"a"&lt;&lt;endl;}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">- e" Y: K; a# x9 ]# L</font><br>&nbsp; &nbsp; &nbsp; &nbsp; ~a(){cout&lt;&lt;"~a"&lt;&lt;endl;}<br><span style="DISPLAY: none">! q6 w' \3 C7 y</span>};<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">- C8 B" `9 a&amp; N&nbsp;&nbsp;q% d7 B* T</font><br><br><span style="DISPLAY: none">2 \# r$ F: _' \</span>class b : virtual a<br><span style="DISPLAY: none">4 Z+ `! {$ K/ @% Z</span>{<br><span style="DISPLAY: none">: R: C9 t" a( B1 I$ @</span>public:<br><span style="DISPLAY: none">' m) W0 j. q* w( {$ |2 c</span>&nbsp; &nbsp; &nbsp; &nbsp; b(){cout&lt;&lt;"b"&lt;&lt;endl;}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ v' D8 Z( z3 ^1 g+ V7 v# H- F+ X7 \</font><br>&nbsp; &nbsp; ~b(){cout&lt;&lt;"~b"&lt;&lt;endl;}<br><span style="DISPLAY: none">3 }) p( U+ T3 D! `</span>};<br><span style="DISPLAY: none">4 o2 O) {&amp; ^' K&amp; T</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 J" l5 P&amp; [4 Q) ^/ z9 {" ?! q' Y3 k</font><br>class c <font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 j4 p&nbsp;&nbsp;x6 |0 T1 o! W3 e</font><br>{<br><span style="DISPLAY: none">6 v, t. D6 U&amp; }9 z&nbsp;&nbsp;k</span>public:<br><span style="DISPLAY: none">4 L. F; i1 d( T4 S&amp; B/ Q) ^# C</span>&nbsp; &nbsp; &nbsp; &nbsp; c(){cout&lt;&lt;"c"&lt;&lt;endl;}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 @6 w4 ~&amp; Q! d&nbsp;&nbsp;y0 Y) W. q1 i</font><br>&nbsp; &nbsp; &nbsp; &nbsp; ~c(){cout&lt;&lt;"~c"&lt;&lt;endl;}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">* Z) T$ d, g2 U7 M$ l</font><br>};<br><span style="DISPLAY: none">4 F4 ~3 j3 ~1 _+ e* n# i( ?</span><br><span style="DISPLAY: none">&amp; q: O+ s+ d2 N. @</span>class d : public c<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&nbsp;&nbsp;A1 n8 ]3 X. K&amp; T4 T</font><br>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) r0 r; c&nbsp;&nbsp;n1 \2 k2 c</font><br>public:<br><span style="DISPLAY: none">5 c/ I* [- ]- P</span>&nbsp; &nbsp; &nbsp; &nbsp; d(){cout&lt;&lt;"d"&lt;&lt;endl;}<br><span style="DISPLAY: none">&nbsp;&nbsp;b( i+ {# k1 o, m</span>&nbsp; &nbsp; &nbsp; &nbsp; ~d(){cout&lt;&lt;"~d"&lt;&lt;endl;}<br><span style="DISPLAY: none">9 l&amp; i8 W. P- Q: y# [" u6 B</span>};<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' m7 U( D&nbsp;&nbsp;]8 A5 }$ ]</font><br><br><span style="DISPLAY: none">- p: O1 _&nbsp;&nbsp;t/ x- p/ f</span>class e : public b, public d<br><span style="DISPLAY: none">6 O( o+ _6 W&amp; m7 ?, [&nbsp;&nbsp;r</span>{<br><span style="DISPLAY: none">; s; \&nbsp;&nbsp;y# }* z+ d3 R$ e1 p1 n( f</span>public:<br><span style="DISPLAY: none">0 D( H* t&nbsp;&nbsp;D" O$ _" V+ c, |</span>&nbsp; &nbsp; &nbsp; &nbsp; e(){cout&lt;&lt;"e"&lt;&lt;endl;}<br><span style="DISPLAY: none">/ k3 S4 x( R% R/ O</span>&nbsp; &nbsp; &nbsp; &nbsp; ~e(){cout&lt;&lt;"~e"&lt;&lt;endl;}<br><span style="DISPLAY: none">5 y; m# T8 N) e9 w</span>};<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">; \. C9 ^5 W( o, u1 r0 N</font><br><br><span style="DISPLAY: none">* C; A1 o# x* i( X" [0 p</span>//测试<br><span style="DISPLAY: none">&amp; F0 o8 o9 _* Q+ M4 x- c</span>int main()<br><span style="DISPLAY: none">0 n: N, Y+ C6 M$ V0 k</span>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">* X/ a- T7 K9 j&nbsp;&nbsp;~" x7 J&nbsp;&nbsp;a</font><br>e es;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 X1 W# u7 C% A/ J1 ?2 V&nbsp;&nbsp;n) @&nbsp;&nbsp;p! m</font><br>&nbsp; &nbsp; &nbsp; &nbsp; e *ep=new e;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 R8 \) _2 N/ h* J$ w( t</font><br>&nbsp; &nbsp; &nbsp; &nbsp; //delete ep;<br><span style="DISPLAY: none">/ q2 Z+ m( B. [1 \7 M5 z8 s</span>&nbsp; &nbsp; return 0;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># v) x5 {, ?&amp; s* i: T</font><br>}<br><span style="DISPLAY: none">, y; }+ J6 c6 U; \8 C4 _- ~</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 ^$ B+ L: v&amp; \+ d</font><br>//测试输出<br><span style="DISPLAY: none">6 X' u( B3 n) j6 c( e' C</span>a <br><span style="DISPLAY: none">9 A% p7 _: n1 J" `) G( M% {</span>b<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 V( u) Q7 z0 z9 ?# P6 `' s</font><br>c<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 e5 l* r; T$ W</font><br>d<br><span style="DISPLAY: none">* r+ m+ a) z, i! I</span>e<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 Y5 G6 T7 z( A&amp; Q- b</font><br>a<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 C. R) E/ A&amp; @5 Q4 z! k</font><br>b<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 i7 u! z9 L5 j. b&nbsp;&nbsp;O</font><br>c<br><span style="DISPLAY: none">: }- c9 V% S2 ~9 z</span>d<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 p$ Y4 I" R% h+ |* G</font><br>e<br><span style="DISPLAY: none">, `' q9 l( A9 Y9 l$ N" m* _# S</span>~e<br><span style="DISPLAY: none">5 x2 i% T6 R2 X% A" t5 W</span>~d<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' L# S- N0 e0 |" E&nbsp;&nbsp;q4 f: e2 J</font><br>~c<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ g3 d&nbsp;&nbsp;T5 R2 p8 T( M7 m4 m</font><br>~b<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ }7 m5 F3 L&amp; S- m- a</font><br>~a<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 m0 y. U" z) x</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">4 p: L&nbsp;&nbsp;}* Y8 N</font><br>6、&nbsp; &nbsp; &nbsp; &nbsp; 编写String类，实现加法和赋值运算符重载。<br><span style="DISPLAY: none">2 D&amp; L; F5 h5 g</span>解：此题名不见经传，实现中需要注意：必须实现拷贝构造函数，在加法重载中返回一个类实例才能成功。<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">' T3 L&amp; B0 X5 U% @&amp; r, M/ N+ F</font><br><br><span style="DISPLAY: none">. Q/ J* L, L- R% G</span>#incluede&lt;iostream&gt;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">1 Q- `; |2 G4 E4 O7 R% ^+ b&nbsp;&nbsp;c$ ]</font><br>class String<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ c2 s3 Q9 c- o( L8 b/ o+ D- V, {</font><br>{<br><span style="DISPLAY: none">* g* O' S. m1 s" @5 X</span>public:<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ F( H" }$ f/ u' P</font><br>&nbsp; &nbsp; //构造函数<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 G- M; @&nbsp;&nbsp;s- b&amp; ~( Z; t2 d5 M: e" a</font><br>&nbsp; &nbsp; String(char *s=0,int len=0):len(len)<br><span style="DISPLAY: none">3 n&nbsp;&nbsp;n) n; n) q8 ?, a; z, _" h</span>&nbsp; &nbsp; &nbsp; &nbsp; {<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, \: \1 u1 ^' c&amp; G1 g) d7 J</font><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this-&gt;s=new char[len];<br><span style="DISPLAY: none">3 w- t+ I3 I9 x&nbsp;&nbsp;n. l1 n</span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int i;<br><span style="DISPLAY: none">2 L# o( Q# Q; e+ N</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(i=0;i&lt;len;i++)<br><span style="DISPLAY: none">" r" _) g4 C# Z3 p" A( b4 s</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this-&gt;s<em>=s<em>;<br><span style="DISPLAY: none">3 W+ a% L) c5 ~3 z</span>&nbsp; &nbsp; &nbsp; &nbsp; }<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ E; a/ x! D9 s! `9 I</font><br>&nbsp; &nbsp; &nbsp; &nbsp; //析构函数<br><span style="DISPLAY: none">! j2 }, Q6 |* g4 k</span>&nbsp; &nbsp; &nbsp; &nbsp; ~String(){delete []s;len=0;}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) ]) I) u' v3 w3 K2 y2 t$ P</font><br>&nbsp; &nbsp; void prints();<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 d&nbsp;&nbsp;?- I) {9 ?" ]6 }- N' C</font><br>&nbsp; &nbsp; &nbsp; &nbsp; String(const String &amp;str);<br><span style="DISPLAY: none">; G&amp; i/ v- v) q; j9 U2 Z$ E7 a: r</span>&nbsp; &nbsp; &nbsp; &nbsp; String&amp; operator=(const String &amp;str);<br><span style="DISPLAY: none">&amp; \" Y. D. d" S&nbsp;&nbsp;F: R, S- U' S9 N5 ^</span>&nbsp; &nbsp; &nbsp; &nbsp; String operator+(const String &amp;str);<br><span style="DISPLAY: none">! G8 V* V( [: l7 [</span>protected:<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% d; M5 j* j2 Z2 c</font><br>&nbsp; &nbsp; &nbsp; &nbsp; char *s;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ z8 q: Z( z8 j7 C</font><br>&nbsp; &nbsp; &nbsp; &nbsp; int len;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 y7 l1 H8 }% ^. z! n5 T</font><br>};<font style="FONT-SIZE: 0px; COLOR: #fdfdf9"># O4 f0 J5 h% K( E+ H. ]</font><br><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 T* i2 Z* }&nbsp;&nbsp;j" [* R$ r/ p</font><br>//打印函数<br><span style="DISPLAY: none">. t% I2 S0 r( B; P5 U* y+ e* z</span>void String::prints()<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, z* O; {&amp; Y$ y7 k+ G9 Y</font><br>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 T( R8 q9 b6 W7 l9 T* Y9 i: o% `</font><br>&nbsp; &nbsp; &nbsp; &nbsp; int i;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">6 L% F- p1 w1 e: n0 a</font><br>&nbsp; &nbsp; for(i=0;i&lt;len;i++)<br><span style="DISPLAY: none">! X, g0 t! P' G5 |/ e9 w7 _4 ^</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cout&lt;&lt;s<em>;<br><span style="DISPLAY: none">2 q- X4 L# ]# C9 G* b9 G</span>&nbsp; &nbsp; &nbsp; &nbsp; cout&lt;&lt;endl;<br><span style="DISPLAY: none">6 i1 K2 B" w. z) N</span>}<br><span style="DISPLAY: none">- k) k5 k# V4 h: K/ U( f</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">8 {: \3 J' H' ~% p+ Z8 V/ ^! _7 \+ d</font><br>//赋值运算符重载<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">$ X: @' r* [7 {&nbsp;&nbsp;?/ g/ B: u9 @</font><br>String&amp; String::operator=(const String &amp;str)<br><span style="DISPLAY: none">$ I* R% V7 A2 H0 {</span>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" n; z. P! a) N6 R</font><br>&nbsp; &nbsp; delete []s;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">7 j* ]&amp; ^# k! T$ U% W* q</font><br>&nbsp; &nbsp; &nbsp; &nbsp; len=str.len;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">) G* I- X7 V5 ^4 p3 }" l&amp; N</font><br>&nbsp; &nbsp; &nbsp; &nbsp; s=new char[len];<br><span style="DISPLAY: none">8 m6 `- u&amp; H% \</span>&nbsp; &nbsp; &nbsp; &nbsp; int i;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">/ ?! K8 G( m+ `. _</font><br>&nbsp; &nbsp; &nbsp; &nbsp; for(i=0;i&lt;len;i++)<br><span style="DISPLAY: none">- g* N, U" B" t- L</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s<em>=str.s<em>;<br><span style="DISPLAY: none">2 h. k8 _' n# T1 f: [/ D. y4 y</span>&nbsp; &nbsp; &nbsp; &nbsp; return *this;<br><span style="DISPLAY: none">7 p; n9 C( S+ @4 v4 C* J! _</span>}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, b, c) v* U9 R$ u( T" U" y7 C</font><br><br><span style="DISPLAY: none">' v) D3 M9 f9 \8 i</span>//加法运算符重载<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">3 b4 u0 I/ L&nbsp;&nbsp;z- `/ e2 @</font><br>inline String String::operator+(const String &amp;str)<br><span style="DISPLAY: none">- C7 X) C" O, A: ?9 u</span>{<br><span style="DISPLAY: none">" H! X( d1 _" y! t3 I</span>&nbsp; &nbsp; String st(s,len+str.len);<br><span style="DISPLAY: none">( ]! M+ v&amp; m! ~0 g1 q8 y9 p</span>&nbsp; &nbsp; &nbsp; &nbsp; int i;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, N. `1 Q4 }% {</font><br>&nbsp; &nbsp; &nbsp; &nbsp; for(i=len;i&lt;st.len;i++)<br><span style="DISPLAY: none">; ^4 a4 v&amp; g% u( ?( E3 P</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; st.s<em>=str.s[i-len];<br><span style="DISPLAY: none">$ W8 j( }9 q&nbsp;&nbsp;s# y3 a' o1 Z0 {3 s/ H</span>&nbsp; &nbsp; &nbsp; &nbsp; return st;<br><span style="DISPLAY: none">- x8 R/ d. E, V: O8 P</span>}<br><span style="DISPLAY: none">- S7 @; l5 b/ B# B( ^; c) i: f</span><br><span style="DISPLAY: none">+ B5 m&amp; [4 M( d* F! E</span>//拷贝构造函数<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">* T% g9 K# f; G) P&amp; p6 I</font><br>String::String(const String &amp;str)<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">, d$ m: o1 @$ d" t8 g; |</font><br>{<br><span style="DISPLAY: none">, H5 X2 m4 J# h- H: R# X</span>&nbsp; &nbsp; &nbsp; &nbsp; len=str.len;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">( q" x/ M. k* y' O' ]6 I( z</font><br>&nbsp; &nbsp; &nbsp; &nbsp; s=new char[len];<br><span style="DISPLAY: none">0 E8 Z&nbsp;&nbsp;?0 P: c( F% @; S</span>&nbsp; &nbsp; &nbsp; &nbsp; int i;<br><span style="DISPLAY: none">2 j4 W9 C3 N- G$ r% A&nbsp;&nbsp;j/ @" R</span>&nbsp; &nbsp; &nbsp; &nbsp; for(i=0;i&lt;len;i++)<br><span style="DISPLAY: none">&amp; a. Z: V/ E' o. C</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s<em>=str.s<em>;<br><span style="DISPLAY: none">' A* f# q8 i&nbsp;&nbsp;I&amp; I, y( p# O9 {; Z</span>}<br><span style="DISPLAY: none">2 H% s0 w; i&nbsp;&nbsp;c&amp; V</span><br><span style="DISPLAY: none">% W( c4 \/ z* Y7 o7 Z9 @</span>//测试<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ b7 C) X&amp; x* k0 `0 A</font><br>int main()<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">5 z5 B+ C0 w: F2 L6 H6 @: N' }</font><br>{<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 }, k1 h: l! r; l8 b. w&amp; Q2 ?</font><br>&nbsp; &nbsp; &nbsp; &nbsp; char *s1="123";<br><span style="DISPLAY: none">/ U; h: B&amp; |&amp; Z</span>&nbsp; &nbsp; &nbsp; &nbsp; char *s2="4567";<br><span style="DISPLAY: none">7 U4 X6 {. ?5 q: i1 z</span><br><span style="DISPLAY: none">% H&amp; n' B# r6 @</span>&nbsp; &nbsp; //第一个字符串<br><span style="DISPLAY: none">9 {5 b$ z# f! e- @- m</span>&nbsp; &nbsp; String str(s1,3);<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">% u- n" V1 x3 Q0 O* f0 g</font><br>&nbsp; &nbsp; &nbsp; &nbsp; str.prints();<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">1 ^2 a( v0 a, q+ V- M7 K$ L</font><br><br><span style="DISPLAY: none">3 A&amp; O5 \2 Q( ?&nbsp;&nbsp;|: i) J8 w</span>&nbsp; &nbsp; //第二个字符串<br><span style="DISPLAY: none">/ r&amp; ]: ]&nbsp;&nbsp;~&nbsp;&nbsp;a/ c) |/ \. w* X</span>&nbsp; &nbsp; &nbsp; &nbsp; String str2(s2,4);<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">&amp; J* P9 ?- f. p- a! I2 I&amp; K&nbsp;&nbsp;Q4 Q</font><br>&nbsp; &nbsp; &nbsp; &nbsp; str2.prints();<br><span style="DISPLAY: none">' r$ j) j) }+ G4 \' _: g! ]7 K5 ^</span><br><span style="DISPLAY: none">: @* Z: n1 R; k' h&nbsp;&nbsp;{- l</span>&nbsp; &nbsp; //赋值运算符重载测试<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ P6 q% r4 }( c/ i; @</font><br>&nbsp; &nbsp; &nbsp; &nbsp; String st;<br><span style="DISPLAY: none">&nbsp;&nbsp;a8 }9 e: a&nbsp;&nbsp;_% ^% I8 y( T</span>&nbsp; &nbsp; &nbsp; &nbsp; st=str;<br><span style="DISPLAY: none">3 e- {! O/ \. N, \0 r6 i</span>&nbsp; &nbsp; &nbsp; &nbsp; st.prints();<br><span style="DISPLAY: none">- w' {; c/ q- v* M; j, q</span><font style="FONT-SIZE: 0px; COLOR: #fdfdf9">2 e; g2 Q5 {" w3 r2 s</font><br>&nbsp; &nbsp; //加法运算符重载测试<br><span style="DISPLAY: none">&amp; H7 N% w5 {* j% h&amp; r6 Q4 A( {. b</span>&nbsp; &nbsp; &nbsp; &nbsp; String string;<br><span style="DISPLAY: none">. p&nbsp;&nbsp;J' O/ P6 j. H, c' K' _* ~</span>&nbsp; &nbsp; &nbsp; &nbsp; string=str+str2;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">9 a% R&nbsp;&nbsp;A/ T&amp; j&amp; S( Z3 d) X</font><br>&nbsp; &nbsp; &nbsp; &nbsp; string.prints();<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">0 L: ^" y! {0 l! |0 c3 m</font><br><br><span style="DISPLAY: none">! n- B2 z7 }0 l* R</span>return 0;<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">" _' Q) Q! \. M! c; Q- [" Y# L</font><br>}<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">. c8 i' _$ z) H3 B7 A</font><br><br><span style="DISPLAY: none">( @% ]# j&amp; H+ m&nbsp;&nbsp;\( r&nbsp;&nbsp;{6 K' {. z% n</span>测试输出：<br><span style="DISPLAY: none">* m0 ?% `! z1 \+ k: Q, L</span>123<br><span style="DISPLAY: none">5 B+ L4 N! h. I7 y$ c( s. t</span>4567<font style="FONT-SIZE: 0px; COLOR: #fdfdf9">+ C&amp; i; H' C0 P. i</font><br>123<br><span style="DISPLAY: none">! V/ g, i&nbsp;&nbsp;s5 c6 K; m6 x</span></em></em></em></em></em></em></em></em></em></em></em></em></em></em></td>
        </tr>
    </tbody>
</table>
</div>
<img src ="http://www.cppblog.com/life02/aggbug/96111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-09-14 12:48 <a href="http://www.cppblog.com/life02/archive/2009/09/14/96111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>笔试题</title><link>http://www.cppblog.com/life02/archive/2009/09/13/96052.html</link><dc:creator>life02</dc:creator><author>life02</author><pubDate>Sun, 13 Sep 2009 08:29:00 GMT</pubDate><guid>http://www.cppblog.com/life02/archive/2009/09/13/96052.html</guid><wfw:comment>http://www.cppblog.com/life02/comments/96052.html</wfw:comment><comments>http://www.cppblog.com/life02/archive/2009/09/13/96052.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/life02/comments/commentRss/96052.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/life02/services/trackbacks/96052.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">2009.9.12日下午 迅雷2笔试题<br>一<br>有一副牌编号0~51，请把这副牌尽可能随机的发到4个人手里<br>注1：已经有rand()函数可以调用，但是rand()函数开销较大，请尽量少调用</p>
<p style="FONT-SIZE: 12pt">a,b,c,d分别是13个元素的1维数组<br>函数原型 void deal( int[] a, int[] b, int[] c, int[] d );</p>
<p style="FONT-SIZE: 12pt">二<br>实现字符串反转的c库函数 char* strrev(char* string)<br>注1：不可利用其他库函数，算法尽量高效、占用空间少。</p>
<p style="FONT-SIZE: 12pt">三<br>有10亿个数，这些数的值都在0~1000万之内。实现接口 get_bigger_count( unsigned value )<br>输入一个值value，返回这10亿个数中比value值大的数的数目。<br>class order_calculate<br>{<br>public:<br>order_calculate();<br>~order_calculate();<br>unsinged get_bigger_count( unsigned value )<br>}<br>注1：get_bigger_count接口会被频繁的调用，实现要高效<br>注2：可以自己往内部任意添加变量和接口<br>注3：有个现成的接口 unsigned get_value_by_index( int idx ) 可以调用，该接口返回指定索引的value值<br>&nbsp;&nbsp;&nbsp;&nbsp; 比如 get_value_by_index( 100 )， 返回10亿个数中第100个数的值。该接口开销较大，尽量少调用。 <br></p>
<p style="FONT-SIZE: 12pt"><br><br><a href="http://topic.csdn.net/u/20090912/20/8c60e06e-321c-49a6-b2cc-59248ba9cf36.html?28642">http://topic.csdn.net/u/20090912/20/8c60e06e-321c-49a6-b2cc-59248ba9cf36.html?28642</a>&nbsp;</p>
<img src ="http://www.cppblog.com/life02/aggbug/96052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/life02/" target="_blank">life02</a> 2009-09-13 16:29 <a href="http://www.cppblog.com/life02/archive/2009/09/13/96052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>