﻿<?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++博客-beautykingdom-随笔分类-interview</title><link>http://www.cppblog.com/beautykingdom/category/9607.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 06 Jun 2012 13:59:31 GMT</lastBuildDate><pubDate>Wed, 06 Jun 2012 13:59:31 GMT</pubDate><ttl>60</ttl><item><title>IT公司笔试算法题</title><link>http://www.cppblog.com/beautykingdom/archive/2012/06/03/177318.html</link><dc:creator>chatler</dc:creator><author>chatler</author><pubDate>Sun, 03 Jun 2012 04:02:00 GMT</pubDate><guid>http://www.cppblog.com/beautykingdom/archive/2012/06/03/177318.html</guid><wfw:comment>http://www.cppblog.com/beautykingdom/comments/177318.html</wfw:comment><comments>http://www.cppblog.com/beautykingdom/archive/2012/06/03/177318.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/beautykingdom/comments/commentRss/177318.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/beautykingdom/services/trackbacks/177318.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: from:http://blog.csdn.net/zhsenl/article/details/7515279&nbsp;1、将一整数逆序后放入一数组中（要求递归实现）void convert(int *result, int n) {&nbsp;if(n&gt;=10)&nbsp;&nbsp;convert(result+1, n/10);&nbsp;*result = n%10;&nbsp;...&nbsp;&nbsp;<a href='http://www.cppblog.com/beautykingdom/archive/2012/06/03/177318.html'>阅读全文</a><img src ="http://www.cppblog.com/beautykingdom/aggbug/177318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/beautykingdom/" target="_blank">chatler</a> 2012-06-03 12:02 <a href="http://www.cppblog.com/beautykingdom/archive/2012/06/03/177318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>必看的70道面试题回答</title><link>http://www.cppblog.com/beautykingdom/archive/2010/02/28/108629.html</link><dc:creator>chatler</dc:creator><author>chatler</author><pubDate>Sun, 28 Feb 2010 12:49:00 GMT</pubDate><guid>http://www.cppblog.com/beautykingdom/archive/2010/02/28/108629.html</guid><wfw:comment>http://www.cppblog.com/beautykingdom/comments/108629.html</wfw:comment><comments>http://www.cppblog.com/beautykingdom/archive/2010/02/28/108629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/beautykingdom/comments/commentRss/108629.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/beautykingdom/services/trackbacks/108629.html</trackback:ping><description><![CDATA[1、请你自我介绍一下你自己，<br><br>回答提示：一般人回答这个<a href="http://blog.ceconlinebbs.com/BK/%CE%CA%CC%E2.HTM" target="_blank">问题</a>过于平常，只说姓名、年龄、爱好、<a href="http://blog.ceconlinebbs.com/BK/%B9%A4%D7%F7.HTM" target="_blank">工作</a>经
验，这些在简历上都有，其实，企业最希望知道的是求职者能否胜任工作，包括：最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事，
主要的成就等，这些都可以和学习无关，也可以和学习有关，但要突出积极的个性和做事的能力，说得合情合理企业才会相信。企业很重视一个人的礼貌，求职者要
尊重考官，在回答每个问题之后都说一句&#8220;谢谢&#8221;。企业喜欢有礼貌的求职者。<br>2、你觉得你个性上最大的优点是什么？<br><br>回答提示：沉着冷静、条理清楚、立场坚定、顽强向上。<br>乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在北大青鸟经过一到两年的培训及项目实战，加上实习工作，使我适合这份工作。我相信我能成功。<br>3、说说你最大的缺点？<br><br>回
答提示：这个问题企业问的概率很大，通常不希望听到直接回答的缺点是什么等，如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低，企业肯定不
会录用你。绝对不要自作聪明地回答&#8220;我最大的缺点是过于追求完美&#8221;，有的人以为这样回答会显得自己比较出色，但事实上，他已经岌芨可危了。企业喜欢求职者
从自己的优点说起，中间加一些小缺点，最后再把问题转回到优点上，突出优点的部分。企业喜欢聪明的求职者。<br>4、你对加班的看法？<br><br>回答提示：实际上好多<a href="http://blog.ceconlinebbs.com/BK/%B9%AB%CB%BE.HTM" target="_blank">公司</a>问这个问题，并不证明一定要加班。 只是想测试你是否愿意为公司奉献。<br>回答样本：如果是工作需要我会义不容辞加班。我现在单身，没有任何家庭负担，可以全身心的投入工作。但同时，我也会提高工作效率，减少不必要的加班<br>5、你对薪资的要求？<br><br>回
答提示：如果你对薪酬的要求太低，那显然贬低自己的能力；如果你对薪酬的要求太高，那又会显得你分量过重，公司受用不起。一些雇主通常都事先对求聘的职位
定下开支预算，因而他们第一次提出的价钱往往是他们所能给予的最高价钱。他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。<br>回答样本一：&#8220;我对工资没有硬性要求。我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会，所以只要条件公平，我则不会计较太多<br>回答样本二：我受过系统的软件编程的训练，不需要进行大量的培训。而且我本人也对编程特别感兴趣。因此，我希望公司能根据我的情况和市场标准的水平，给我合理的薪水。<br>回答样本三：如果你必须自己说出具体数目，请不要说一个宽泛的范围，那样你将只能得到最低限度的数字。最好给出一个具体的数字，这样表明你已经对当今的人才市场作了调查，知道像自己这样学历的雇员有什么样的价值。<br>6、在五年的时间内，你的职业规划？<br><br>回
答提示：这是每一个应聘者都不希望被问到的问题，但是几乎每个人都会被问到。比较多的答案是&#8220;管理者&#8221;。但是近几年来，许多公司都已经建立了专门的技术途
径。这些工作地位往往被称作&#8220;顾问&#8221;、&#8220;参议技师&#8221;或&#8220;高级软件工程师&#8221;等等。当然，说出其他一些你感兴趣的职位也是可以的，比如产品销售部经理，生产部
经理等一些与你的专业有相关背景的工作。要知道，考官总是喜欢有进取心的应聘者，此时如果说&#8220;不知道&#8221;，或许就会使你丧失一个好机会。最普通的回答应该是
&#8220;我准备在技术领域有所作为&#8221;或&#8220;我希望能按照公司的管理思路发展&#8221;。<br>7、你朋友对你的评价？<br><br>回答提示： 想从侧面了解一下你的性格及与人相处的问题。<br>回答样本：&#8220;我的朋友都说我是一个可以信赖的人。因为，我一旦答应别人的事情，就一定会做到。如果我做不到，我就不会轻易许诺。<br>回答样本：&#8221;我觉的我是一个比较随和的人，与不同的人都可以友好相处。在我与人相处时，我总是能站在别人的角度考虑问题&#8220;<br>8、你还有什么问题要问吗？<br><br>回
答提示：企业的这个问题看上去可有可无，其实很关键，企业不喜欢说&#8220;没有问题&#8221;的人，因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类
的问题，如果有人这样问：贵公司对新入公司的员工有没有什么培训项目，我可以参加吗？或者说贵公司的晋升机制是什么样的？企业将很欢迎，因为体现出你对学
习的热情和对公司的忠诚度以及你的上进心。<br>9、如果通过这次面试我们单位录用了你，但工作一段时间却发现你根本不适合这个职位，你怎么办？<br><br>回答提示：一段时间发现工作不适合我，有两种情况：<br><br>1、如果你确实热爱这个职业，那你就要不断学习，虚心向领导和同事学习业务知识和处事经验，了解这个职业的精神内涵和职业要求，力争减少差距；<br><br>2、你觉得这个职业可有可无，那还是趁早换个职业，去发现适合你的，你热爱的职业，那样你的发展前途也会大点，对单位和个人都有好处。<br>10、在完成某项工作时，你认为领导要求的方式不是最好的，自己还有更好的方法，你应该怎么做？<br><br>回答提示：①.原则上我会尊重和服从领导的工作安排；同时私底下找机会以请教的口吻，婉转地表达自己的想法，看看领导是否能改变想法；<br>②如果领导没有采纳我的建议，我也同样会按领导的要求认真地去完成这项工作； <br>③.还有一种情况，假如领导要求的方式违背原则，我会坚决提出反对意见；如领导仍固执己见，我会毫不犹豫地再向上级领导反映。<br>11、如果你的工作出现失误，给本公司造成经济损失，你认为该怎么办？<br><br>回答提示：<br>①我本意是为公司努力工作，如果造成经济损失，我认为首要的问题是想方设法去弥补或挽回经济损失。如果我无能力负责，希望单位帮助解决；<br>②是责任问题。分清责任，各负其责，如果是我的责任，我甘愿受罚；如果是一个我负责的团队中别人的失误，也不能幸灾乐祸，作为一个团队，需要互相提携共同完成工作，安慰同事并且帮助同事查找原因总结经验。<br>③总结经验教训，一个人的一生不可能不犯错误，重要的是能从自己的或者是别人的错误中吸取经验教训，并在今后的工作中避免发生同类的错误。检讨自己的工作方法、分析问题的深度和力度是否不够，以致出现了本可以避免的错误。<br>12、如果你在这次考试中没有被录用，你怎么打算？<br><br>回
答提示：现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败.往往成功的背后有许多的困难和挫折,如果
这次失败了也仅仅是一次而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败.<br>第一、要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行.能够超越自我.<br>第二、善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人.<br>第三、走出阴影,要克服这一次失败带给自己的心理压力,时刻牢记自己弱点,防患于未然,加强学习,提高自身素质.<br>第四、认真工作,回到原单位岗位上后,要实实在在、踏踏实实地工作,三十六行,行行出状元,争取在本岗位上做出一定的成绩.<br>第五、再接再厉,成为软件工程师或网络工程师一直是我的梦想,以后如果有机会我仍然后再次参加竞争.<br>13、如果你做的一项工作受到上级领导的表扬，但你主管领导却说是他做的，你该怎样？<br><br>回
答提示：我首先不会找那位上级领导说明这件事，我会主动找我的主管领导来沟通，因为沟通是解决人际关系的最好办法，但结果会有两种：1.我的主管领导认识
到自己的错误，我想我会视具体情况决定是否原谅他；2.他更加变本加厉的来威胁我，那我会毫不犹豫地找我的上级领导反映此事，因为他这样做会造成负面影
响，对今后的工作不利。<br>14、谈谈你对跳槽的看法？<br><br>回答提示：（1）正常的"跳槽"能促进人才合理流动，应该支持；<br>（2）频繁的跳槽对单位和个人双方都不利，应该反对。<br>15、工作中你难以和同事、上司相处，你该怎么办？<br><br>回答提示：<br>①我会服从领导的指挥，配合同事的工作。<br>②我会从自身找原因，仔细分析是不是自己工作做得不好让领导不满意，同事看不惯。还要看看是不是为人处世方面做得不好。如果是这样的话 我会努力改正。<br>③如果我找不到原因，我会找机会跟他们沟通，请他们指出我的不足。有问题就及时改正。<br>④作为优秀的员工，应该时刻以大局为重，即使在一段时间内，领导和同事对我不理解，我也会做好本职工作，虚心向他们学习，我相信，他们会看见我在努力，总有一天会对我微笑的！<br>16、假设你在某单位工作，成绩比较突出，得到领导的肯定。但同时你发现同事们越来越孤立你，你怎么看这个问题？你准备怎么办？<br><br>回答提示：<br>①成绩比较突出，得到领导的肯定是件好事情，以后更加努力<br>②检讨一下自己是不是对工作的热心度超过同事间交往的热心了，加强同事间的交往及共同的兴趣爱好。<br>③工作中，切勿伤害别人的自尊心<br>④不再领导前拨弄是非<br>⑤乐于助人对面<br>17、你最近是否参加了培训课程？谈谈培训课程的内容。是公司资助还是自费参加？<br><br>回答提示：是自费参加，就是北大青鸟的培训课程（可以多谈谈自己学的技术）。<br>18、你对于我们公司了解多少？<br><br>回答提示：在去公司面试前上网查一下该公司主营业务。如回答：贵公司有意改变策略，加强与国外大厂的OEM合作，自有品牌的部分则透过海外经销商。<br>19、请说出你选择这份工作的动机？<br><br>回答提示：这是想知道面试者对这份工作的热忱及理解度，并筛选因一时兴起而来应试的人，如果是无经验者，可以强调&#8220;就算职种不同，也希望有机会发挥之前的经验&#8221;。<br>20、你最擅长的技术方向是什么？<br><br>回答提示：说和你要应聘的职位相关的课程，表现一下自己的热诚没有什么坏处。<br>21、你能为我们公司带来什么呢？<br><br>回答提示：<br>①假如你可以的话，试着告诉他们你可以减低他们的费用——&#8220;我已经接受过北大青鸟近两年专业的培训，立刻就可以上岗工作&#8221;。<br>②
企业很想知道未来的员工能为企业做什么，求职者应再次重复自己的优势，然后说：&#8220;就我的能力，我可以做一个优秀的员工在组织中发挥能力，给组织带来高效率
和更多的收益&#8221;。企业喜欢求职者就申请的职位表明自己的能力，比如申请营销之类的职位，可以说：&#8220;我可以开发大量的新客户，同时，对老客户做更全面周到的
服务，开发老客户的新需求和消费。&#8221;等等。<br>22、最能概括你自己的三个词是什么？<br><br>回答提示：<br>我经常用的三个词是：适应能力强，有责任心和做事有始终，结合具体例子向主考官解释，<br>23、你的业余爱好是什么？<br><br>回答提示：找一些富于团体合作精神的，这里有一个真实的故事：有人被否决掉，因为他的爱好是深海潜水。主考官说：因为这是一项单人活动，我不敢肯定他能否适应团体工作。<br>24、作为被面试者给我打一下分<br><br>回答提示：试着列出四个优点和一个非常非常非常小的缺点，（可以抱怨一下设施，没有明确责任人的缺点是不会有人介意的）。<br>25、你怎么理解你应聘的职位？<br><br>回答提示：把岗位职责和任务及工作态度阐述一下<br>26、喜欢这份工作的哪一点？<br><br>回
答提示：相信其实大家心中一定都有答案了吧！每个人的价值观不同，自然评断的标准也会不同，但是，在回答面试官这个问题时可不能太直接就把自己心理的话说
出来，尤其是薪资方面的问题，不过一些无伤大雅的回答是不错的考虑，如交通方便，工作性质及内容颇能符合自己的兴趣等等都是不错的答案，不过如果这时自己
能仔细思考出这份工作的与众不同之处，相信在面试上会大大加分。<br>27、为什么要离职?<br><br>回答提示：<br>①回答这个问题时一定要
小心，就算在前一个工作受到再大的委屈，对公司有多少的怨言，都千万不要表现出来，尤其要避免对公司本身主管的批评，避免面试官的负面情绪及印象；建议此
时最好的回答方式是将问题归咎在自己身上，例如觉得工作没有学习发展的空间，自己想在面试工作的相关产业中多加学习，或是前一份工作与自己的生涯规划不合
等等，回答的答案最好是积极正面的。<br>②我希望能获得一份更好的工作，如果机会来临，我会抓住；我觉得目前的工作，已经达到顶峰，即沒有升迁机会。<br>28、说说你对行业、技术发展趋势的看法？<br><br>回
答提示：企业对这个问题很感兴趣，只有有备而来的求职者能够过关。求职者可以直接在网上查找对你所申请的行业部门的信息，只有深入了解才能产生独特的见
解。企业认为最聪明的求职者是对所面试的公司预先了解很多，包括公司各个部门，发展情况，在面试回答问题的时候可以提到所了解的情况，企业欢迎进入企业的
人是&#8220;知己&#8221;，而不是&#8220;盲人&#8221;。<br>29、对工作的期望与目标何在？<br><br>回答提示：这是面试者用来评断求职者是否对自己有一定程度的期
望、对这份工作是否了解的问题。对于工作有确实学习目标的人通常学习较快，对于新工作自然较容易进入状况，这时建议你，最好针对工作的性质找出一个确实的
答案，如业务员的工作可以这样回答：&#8220;我的目标是能成为一个超级业务员，将公司的产品广泛的推销出去，达到最好的业绩成效；为了达到这个目标，我一定会努
力学习，而我相信以我认真负责的态度，一定可以达到这个目标。&#8221;其他类的工作也可以比照这个方式来回答，只要在目标方面稍微修改一下就可以了。<br>30、说说你的家庭。<br><br>回
答提示：企业面试时询问家庭问题不是非要知道求职者家庭的情况，探究隐私，企业不喜欢探究个人隐私，而是要了解家庭背景对求职者的塑造和影响。企业希望听
到的重点也在于家庭对求职者的积极影响。企业最喜欢听到的是：我很爱我的家庭！我的家庭一向很和睦，虽然我的父亲和母亲都是普通人，但是从小，我就看到我
父亲起早贪黑，每天工作特别勤劳，他的行动无形中培养了我认真负责的态度和勤劳的精神。我母亲为人善良，对人热情，特别乐于助人，所以在单位人缘很好，她
的一言一行也一直在教导我做人的道理。企业相信，和睦的家庭关系对一个人的成长有潜移默化的影响。<br>31、就你申请的这个职位，你认为你还欠缺什么？<br><br>回
答提示：企业喜欢问求职者弱点，但精明的求职者一般不直接回答。他们希望看到这样的求职者：继续重复自己的优势，然后说：&#8220;对于这个职位和我的能力来说，
我相信自己是可以胜任的，只是缺乏经验，这个问题我想我可以进入公司以后以最短的时间来解决，我的学习能力很强，我相信可以很快融入公司的企业文化，进入
工作状态。&#8221;企业喜欢能够巧妙地躲过难题的求职者。<br>32、你欣赏哪种性格的人？<br><br>回答提示：诚实、不死板而且容易相处的人、有"实际行动"的人。<br>33、你通常如何处理別人的批评？<br><br>回答提示：①沈默是金。不必说什么，否则情况更糟，不过我会接受建设性的批评；②我会等大家冷靜下来再讨论。<br>34、你怎样对待自己的失敗？<br><br>回答提示：我们大家生来都不是十全十美的，我相信我有第二个机会改正我的错误。<br>35、什么会让你有成就感？<br><br>回答提示：为贵公司竭力效劳；尽我所能，完成一个项目<br>36、眼下你生活中最重要的是什么？<br><br>回答提示：对我来说，能在这个领域找到工作是最重要的；望能在贵公司任职对我说最重要。<br>37、你为什么愿意到我们公司来工作？<br><br>回
答提示：对于这个问题，你要格外小心，如果你已经对该单位作了研究，你可以回答一些详细的原因，像&#8220;公司本身的高技术开发环境很吸引我。&#8221;，&#8220;我同公司出
生在同样的时代，我希望能够进入一家与我共同成长的公司。&#8221;&#8220;你们公司一直都稳定发展，在近几年来在市场上很有竞争力。&#8221;或者&#8220;我认为贵公司能够给我提供
一个与众不同的发展道路。&#8221;这都显示出你已经做了一些调查，也说明你对自己的未来有了较为具体的远景规划。<br>38、你和别人发生过争执吗？你是怎样解决的？<br><br>回
答提示：这是面试中最险恶的问题。其实是考官布下的一个陷阱。千万不要说任何人的过错。应知成功解决矛盾是一个协作团体中成员所必备的能力。假如你工作在
一个服务行业，这个问题简直成了最重要的一个环节。你是否能获得这份工作，将取决于这个问题的回答。考官希望看到你是成熟且乐于奉献的。他们通过这个问题
了解你的成熟度和处世能力。在没有外界干涉的情况下，通过妥协的方式来解决才是正确答案。<br>39、问题：你做过的哪件事最令自己感到骄傲?<br><br>回答提示：这是考官给你的一个机会，让你展示自己把握命运的能力。这会体现你潜在的领导能力以及你被提升的可能性。假如你应聘于一个服务性质的单位，你很可能会被邀请去午餐。记住：你的前途取决于你的知识、你的社交能力和综合表现。<br>40、你新到一个部门,一天一个客户来找你解决问题,你努力想让他满意，可是始终达不到群众得满意,他投诉你们部门工作效率低,你这个时候怎么作?<br><br>回
答提示：(1)首先，我会保持冷静。作为一名工作人员，在工作中遇到各种各样的问题是正常的，关键是如何认识它，积极应对，妥善处理。
(2)其次，我会反思一下客户不满意的原因。一是看是否是自己在解决问题上的确有考虑的不周到的地方，二是看是否是客户不太了解相关的服务规定而提出超出
规定的要求，三是看是否是客户了解相关的规定，但是提出的要求不合理。
(3)再次，根据原因采取相对的对策。如果是自己确有不周到的地方，按照服务规定作出合理的安排，并向客户作出解释；如果是客户不太了解政策规定而造成的
误解，我会向他作出进一步的解释，消除他的误会；如果是客户提出的要求不符合政策规定，我会明确地向他指出。
(4)再次，我会把整个事情的处理情况向领导作出说明，希望得到他的理解和支持。(5)我不会因为客户投诉了我而丧失工作的热情和积极性，而会一如既往地
牢记为客户服务的宗旨，争取早日做一名领导信任、公司放心、客户满意的职员。<br>41、对这项工作，你有哪些可预见的困难？&#8221;<br><br>回答提示：：①不宜直接说出具体的困难，否则可能令对方怀疑应聘者不行；②可以尝试迂回战术，说出应聘者对困难所持有的态度——&#8220;工作中出现一些困难是正常的，也是难免的，但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备，任何困难都是可以克服。&#8221;<br>分
析：一般问这个问题，面试者的希望就比较大了，因为已经在谈工作细节。但常规思路中的回答，又被面试官&#8220;骗&#8221;了。当面试官询问这个问题的时候，有两个目
的。第一，看看应聘者是不是在行，说出的困难是不是在这个职位中一般都不可避免的问题。第二，是想看一下应聘者解决困难的手法对不对，及公司能否提供这样
的资源。而不是想了解应聘者对困难的态度。<br>42、如果我录用你，你将怎样开展工作？&#8221;<br><br>回答提示： ①如果应聘者对于应聘的职位缺乏足够的了解，最好不要直接说出自己开展工作的具体办法；②可以尝试采用迂回战术来回答，如&#8220;首先听取领导的指示和要求，然后就有关情况进行了解和熟悉，接下来制定一份近期的工作计划并报领导批准，最后根据计划开展工作。&#8221;<br>分析：这个问题的主要目的也是了解应聘者的工作能力和计划性、条理性，而且重点想要知道细节。如果向思路中所讲的迂回战术，面试官会认为回避问题，如果引导了几次仍然是回避的话。此人绝对不会录用了。<br>43、&#8220;你希望与什么样的上级共事？&#8221;<br><br>回
答提示：①通过应聘者对上级的&#8220;希望&#8221;可以判断出应聘者对自我要求的意识，这既上一个陷阱，又是一次机会；②最好回避对上级具体的希望，多谈对自己的要
求；③如&#8220;做为刚步入社会的新人，我应该多要求自己尽快熟悉环境、适应环境，而不应该对环境提出什么要求，只要能发挥我的专长就可以了<br>分析：这个问题比较好的回答是，希望我的上级能够在工作中对我多指导，对我工作中的错误能够立即指出。总之，从上级指导这个方面谈，不会有大的纰漏。<br>44、在完成某项工作时，你认为领导要求的方式不是最好的，自己还有更好的方法，你应该怎么做？<br><br>回答提示：<br>①.原则上我会尊重和服从领导的工作安排；同时私底下找机会以请教的口吻，婉转地表达自己的想法，看看领导是否能改变想法；<br>②如果领导没有采纳我的建议，我也同样会按领导的要求认真地去完成这项工作；<br>③.还有一种情况，假如领导要求的方式违背原则，我会坚决提出反对意见；如领导仍固执己见，我会毫不犹豫地再向上级领导反映。<br>45、与上级意见不一是，你将怎么办？&#8221;<br><br>回
答提示：①一般可以这样回答&#8220;我会给上级以必要的解释和提醒，在这种情况下，我会服从上级的意见。&#8221;②如果面试你的是总经理，而你所应聘的职位另有一位经
理，且这位经理当时不在场，可以这样回答：&#8220;对于非原则性问题，我会服从上级的意见，对于涉及公司利益的重大问题，我希望能向更高层领导反映。&#8221;<br>分析：这个问题的标准答案是思路1，如果用2的回答，必死无疑。你没有摸清楚改公司的内部情况，先想打小报告，这样的人没有人敢要。<br>46、&#8220;你工作经验欠缺，如何能胜任这项工作？&#8221;<br><br>常
规思路：①如果招聘单位对应届毕业生的应聘者提出这个问题，说明招聘公司并不真正在乎&#8220;经验&#8221;，关键看应聘者怎样回答；②对这个问题的回答最好要体现出应
聘者的诚恳、机智、果敢及敬业；③如&#8220;作为应届毕业生，在工作经验方面的确会有所欠缺，因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现，
实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力，而且比较勤奋，所以在兼职中均能圆满完成各项工作，从中获取的经验也令我受益
非浅。请贵公司放心，学校所学及兼职的工作经验使我一定能胜任这个职位。&#8221;
点评：这个问题思路中的答案尚可。突出自己的吃苦能力和适应性以及学习能力（不是学习成绩）为好。<br>47、您在前一家公司的离职原因是什么？&#8221;<br><br>回
答提示：①最重要的是：应聘者要使找招聘单位相信，应聘者在过往的单位的&#8220;离职原因&#8221;在此家招聘单位里不存在；②避免把&#8220;离职原因&#8221;说得太详细、太具
体；③不能掺杂主观的负面感受，如&#8220;太辛苦&#8221;、&#8220;人际关系复杂&#8221;、&#8220;管理太混乱&#8221;、&#8220;公司不重视人才&#8221;、&#8220;公司排斥我们某某的员工&#8221;等；④但也不能躲闪、
回避，如&#8220;想换换环境&#8221;、&#8220;个人原因&#8221;等；⑤不能涉及自己负面的人格特征，如不诚实、懒惰、缺乏责任感、不随和等；⑥尽量使解释的理由为应聘者个人形象添
彩；⑦相关例子：如&#8220;我离职是因为这家公司倒闭；我在公司工作了三年多，有较深的感情；从去年始，由于市场形势突变，公司的局面急转直下；到眼下这一步我
觉得很遗憾，但还要面对显示，重新寻找能发挥我能力的舞台。&#8221;同一个面试问题并非只有一个答案，而同一个答案并不是在任何面试场合都有效，关键在应聘者掌
握了规律后，对面试的具体情况进行把握，有意识地揣摩面试官提出问题的心理背景，然后投其所好。<br>分析：除非是薪资太低，或者是最初的工作，否则不
要用薪资作为理由。&#8220;求发展&#8221;也被考官听得太多，离职理由要根据每个人的真实离职理由来设计，但是在回答时一定要表现得真诚。实在想不出来的时候，家在外
地可以说是因为家中有事，须请假几个月，公司又不可能准假，所以辞职。这个答案一般面试官还能接受。<br>48、&#8220;你工作经验欠缺，如何能胜任这项工作？&#8221;<br><br>回
答提示：①如果招聘单位对应届毕业生的应聘者提出这个问题，说明招聘公司并不真正在乎&#8220;经验&#8221;，关键看应聘者怎样回答；②对这个问题的回答最好要体现出应
聘者的诚恳、机智、果敢及敬业；③如&#8220;作为应届毕业生，在工作经验方面的确会有所欠缺，因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现，
实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力，而且比较勤奋，所以在兼职中均能圆满完成各项工作，从中获取的经验也令我受益
非浅。请贵公司放心，学校所学及兼职的工作经验使我一定能胜任这个职位。&#8221;<br>分析：这个问题思路中的答案尚可。突出自己的吃苦能力和适应性以及学习能力（不是学习成绩）为好。<br>49、为了做好你工作份外之事，你该怎样获得他人的支持和帮助？<br><br>回
答提示：每个公司都在不断变化发展的过程中；你当然希望你的员工也是这样。你希望得到那些希望并欢迎变化的人，因为这些人明白，为了公司的发展，变化是公
司日常生活中重要组成部分。这样的员工往往很容易适应公司的变化，并会对变化做出积极的响应。此外，他们遇到矛盾和问题时，也能泰然处之。下面的问题能够
考核应聘者这方面的能力。<br>据说有人能从容避免正面冲突。请讲一下你在这方面的经验和技巧。<br>有些时候，我们得和我们不喜欢的人在一起共事。说说你曾经克服了性格方面的冲突而取得预期工作效果的经历。<br>50、如果你在这次面试中没有被录用，你怎么打算？<br><br>回
答提示：现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败.往往成功的背后有许多的困难和挫折,如果
这次失败了也仅仅是一次而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败.<br>第一、要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行.能够超越自我.<br>第二、善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人.<br>第三、走出阴影,要克服这一次失败带给自己的心理压力,时刻牢记自己弱点,防患于未然,加强学习,提高自身素质.<br>第四、认真工作,回到原单位岗位上后,要实实在在、踏踏实实地工作,三十六行,行行出状元,争取在本岗位上做出一定的成绩.<br>第五、再接再厉,成为国家公务员一直是我的梦想,以后如果有机会我仍然后再次参加竞争.<br>51、假如你晚上要去送一个出国的同学去机场，可单位临时有事非你办不可，你怎么办？<br><br>回答提示：我觉得工作是第一位的，但朋友间的情谊也是不能偏废的。这个问题我觉得要按照当时具体的情况来决定。<br>（1）、如果我的朋友晚上9点中的飞机，而我的 加班八点就能够完成的话，那就最理想了，干完工作去机场，皆大欢喜。<br>（2）、如果说工作不是很紧急，加班仅仅是为了明天上班的时候能把报告交到办公室，那完全可以跟领导打声招呼，先去机场然后回来加班，晚点睡就是了。<br>（3）、如果工作很紧急，两者不可能兼顾的情况下，我觉得可以由两种选择。1）如果不是全单位都加班的话，是不是可以要其他同事来代替以下工作，自己去机场，哪怕就是代替你离开的那一会儿。2）如果连这一点都做不到的话，<br>那只好忠义不能两全了，打电话给朋友解释一下，小心他会理解，毕竟工作做完了就完了，朋友还是可以再见面的。<br>52、如果通过这次面试我们单位录用了你，但工作一段时间却发现你根本不适合这个职位，你怎么办？<br><br>回答提示：一段时间发现工作不适合我，有两种情况：<br><br>1、如果你确实热爱这个职业，那你就要不断学习，虚心向领导和同事学习业务知识和处事经验，了解这个职业的精神内涵和职业要求，力争减少差距；<br><br>2、你觉得这个职业可有可无，那还是趁早换个职业，去发现适合你的，你热爱的职业，那样你的发展前途也会大点，对单位和个人都有好处。<br>53、你做过的哪件事最令自己感到骄傲?<br><br>回答提示：这是考官给你的一个机会，让你展示自己把握命运的能力。这会体现你潜在的领导能力以及你被提升的可能性。假如你应聘于一个服务性质的单位，你很可能会被邀请去午餐。记住：你的前途取决于你的知识、你的社交能力和综合表现。<br>54、谈谈你过去做过的成功案例<br><br>回答提示：举一个你最有把握的例子，把来龙去脉说清楚，而不要说了很多却没有重点。切忌夸大其词，把别人的功劳到说成自己的，很多主管为了确保要用的人是最适合的，会打电话向你的前一个主管征询对你的看法及意见，所以如果说谎，是很容易穿梆的。<br>55、谈谈你过去的工作经验中，最令你挫折的事情<br><br>回
答提示：曾经接触过一个客户，原本就有耳闻他们以挑剔出名，所以事前的准备功夫做得十分充分，也投入了相当多的时间与精力，最后客户虽然并没有照单全收，
但是接受的程度已经出乎我们意料之外了。原以为从此可以合作愉快，却得知客户最后因为预算关系选择了另一家代理商，之前的努力因而付诸流水。尽管如此，我
还是从这次的经验学到很多，如对该产业的了解，整个team的默契也更好了。<br>分析：借此了解你对挫折的容忍度及调解方式。<br>56、如何安排自己的时间？会不会排斥加班？<br><br>回答提示：基本上，如果上班工作有效率，工作量合理的话，应该不太需要加班。可是我也知道有时候很难避免加班，加上现在工作都采用责任制，所以我会调配自己的时间，全力配合。<br>分析：虽然不会有人心甘情愿的加班，但依旧要表现出高配合度的诚意。<br>57、为什么我们要在众多的面试者中选择你？<br><br>回答提示：根据我对贵公司的了解，以及我在这份工作上所累积的专业、经验及人脉，相信正是贵公司所找寻的人才。而我在工作态度、ＥＱ上，也有圆融、成熟的一面，和主管、同事都能合作愉快。<br>分析：别过度吹嘘自己的能力，或信口开河地乱开支票，例如一定会为该公司带来多少钱的业务等，这样很容易给人一种爱说大话、不切实际的感觉。<br>58、对这个职务的期许？<br><br>回答提示：希望能借此发挥我的所学及专长，同时也吸收贵公司在这方面的经验，就公司、我个人而言，缔造&#8220;双赢&#8221;的局面。<br>分析：回答前不妨先询问该公司对这项职务的责任认定及归属，因为每一家公司的状况不尽相同。以免说了一堆理想抱负却发现牛头不对马嘴。<br>59、为什么选择这个职务？<br><br>回答提示：：这一直是我的兴趣和专长，经过这几年的磨练，也累积了一定的经验及人脉，相信我一定能胜任这个职务的。<br>分析：适时举出过去的&#8220;丰功伟业&#8221;，表现出你对这份职务的熟稔度，但避免过于夸张的形容或流于炫耀。<br>60、为什么选择我们这家公司？<br><br>回答提示：曾经在报章杂志看过关于贵公司的报道，与自己所追求的理念有志一同。而贵公司在业界的成绩也是有目共睹的，而且对员工的教育训练、升迁等也都很有制度。<br>分析：去面试前先做功课，了解一下该公司的背景，让对方觉得你真的很有心想得到这份工作，而不只是探探路。<br>61、你认为你在学校属于好学生吗？<br><br>回
答提示：企业的招聘者很精明，问这个问题可以试探出很多问题：如果求职者学习成绩好，就会说：&#8220;是的，我的成绩很好，所有的成绩都很优异。当然，判断一个
学生是不是好学生有很多标准，在学校期间我认为成绩是重要的，其他方面包括思想道德、实践经验、团队精神、沟通能力也都是很重要的，我在这些方面也做得很
好，应该说我是一个全面发展的学生。&#8221;如果求职者成绩不尽理想，便会说：&#8220;我认为是不是一个好学生的标准是多元化的，我的学习成绩还可以，在其他方面我的
表现也很突出，比如我去很多地方实习过，我很喜欢在快节奏和压力下工作，我在学生会组织过 &#215;&#215;活动，锻炼了我的团队合作精神和组织能力。&#8221;
有经验的招聘者一听就会明白，企业喜欢诚实的求职者。<br>62、请谈谈如何适应办公室工作的新环境？<br><br>回答提示①办公室里每个人有各自的岗位与职责，不得擅离岗位。<br>②根据领导指示和工作安排，制定工作计划，提前预备，并按计划完成。<br>③多请示并及时汇报，遇到不明白的要虚心请教。<br>④抓间隙时间，多学习，努力提高自己的政治素质和业务水平。<br>63、在工作中学习到了些什么？<br><br>回答提示：这是针对转职者提出的问题，建议此时可以配合面试工作的特点作为主要依据来回答，如业务工作需要与人沟通，便可举出之前工作与人沟通的例子，经历了哪些困难，学习到哪些经验，把握这些要点做陈述，就可以轻易过关了<br>64、有想过创业吗？<br><br>回答提示：这个问题可以显示你的冲劲，但如果你的回答是&#8220;有&#8221;的话，千万小心，下一个问题可能就是&#8220;那么为什么你不这样做呢？&#8221;<br>65、最能概括你自己的三个词是什么？<br><br>回答提示：我经常用的三个词是：适应能力强，有责任心和做事有始终，结合具体例子向主考官解释，使他们觉得你具有发展潜力<br>66、你认为你在学校属于好学生吗？<br><br>回
答提示：企业的招聘者很精明，问这个问题可以试探出很多问题：如果求职者学习成绩好，就会说：&#8220;是的，我的成绩很好，所有的成绩都很优异。当然，判断一个
学生是不是好学生有很多标准，在学校期间我认为成绩是重要的，其他方面包括思想道德、实践经验、团队精神、沟通能力也都是很重要的，我在这些方面也做得很
好，应该说我是一个全面发展的学生。&#8221;如果求职者成绩不尽理想，便会说：&#8220;我认为是不是一个好学生的标准是多元化的，我的学习成绩还可以，在其他方面我的
表现也很突出，比如我去很多地方实习过，我很喜欢在快节奏和压力下工作，我在学生会组织过 &#215;&#215;活动，锻炼了我的团队合作精神和组织能力。&#8221;
有经验的招聘者一听就会明白，企业喜欢诚实的求职者。<br>67、除了本公司外，还应聘了哪些公司？<br><br>回答提示：很奇怪，这是相当多公司会问的问题，其用意是要概略知道应徵者的求职志向，所以这并非绝对是负面答案，就算不便说出公司名称，也应回答&#8220;销售同种产品的公司&#8221;，如果应聘的其他公司是不同业界，容易让人产生无法信任的感觉。<br>68、何时可以到职？<br><br>回答提示：大多数企业会关心就职时间，最好是回答\&#8217;如果被录用的话，到职日可按公司规定上班&#8221;，但如果还未辞去上一个工作、上班时间又太近，似乎有些强人所难，因为交接至少要一个月的时间，应进一步说明原因，录取公司应该会通融的<br>69、你并非毕业于名牌院校？<br><br>回答提示：是否毕业于名牌院校不重要，重要的是有能力完成您交给我的工作，我接受了北大青鸟的职业培训，掌握的技能完全可以胜任贵公司现在工作，而且我比一些名牌院校的应届毕业生的动手能力还要强，我想我更适合贵公司这个职位。<br>70、你怎样看待学历和能力？<br><br>回
答提示：学历我想只要是大学专科的学历，就表明觉得我具备了根本的学习能力。剩下的，你是学士也好，还是博士也好，对于这一点的讨论，不是看你学了多少知
识，而是看你在这个领域上发挥了什么，也就是所说的能力问题。一个人工作能力的高低直接决定其职场命运，而学历的高低只是进入一个企业的敲门砖，如果贵公
司把学历卡在博士上，我就无法进入贵公司，当然这不一定只是我个人的损失，如果一个专科生都能完成的工作，您又何必非要招聘一位博士生呢？
<br><br>from:<br>http://blog.ceconlinebbs.com/BLOG_ARTICLE_8896.HTM
<br><br><img src ="http://www.cppblog.com/beautykingdom/aggbug/108629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/beautykingdom/" target="_blank">chatler</a> 2010-02-28 20:49 <a href="http://www.cppblog.com/beautykingdom/archive/2010/02/28/108629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简历中的自我评价用语</title><link>http://www.cppblog.com/beautykingdom/archive/2010/02/28/108594.html</link><dc:creator>chatler</dc:creator><author>chatler</author><pubDate>Sun, 28 Feb 2010 03:35:00 GMT</pubDate><guid>http://www.cppblog.com/beautykingdom/archive/2010/02/28/108594.html</guid><wfw:comment>http://www.cppblog.com/beautykingdom/comments/108594.html</wfw:comment><comments>http://www.cppblog.com/beautykingdom/archive/2010/02/28/108594.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/beautykingdom/comments/commentRss/108594.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/beautykingdom/services/trackbacks/108594.html</trackback:ping><description><![CDATA[<font size="4"><font color="#808000">Mature，dynamic and honest．</font></font><br>
<font size="4"><font color="#808000">思想成熟、精明能干、为人诚实。 <br>
Excellent ability of systematical management．</font></font><br>
<font size="4"><font color="#808000">有极强的系统管理能力。 <br>
Ability to work independent1y，mature and resourcefu1．</font></font><br>
<font size="4"><font color="#808000">能够独立工作、思想成熟、应变能力强。 <br>
A person with ability plus flexibility should app1y.</font></font><br>
<font size="4"><font color="#808000">需要有能力及适应力强的人。 <br>
A stable personality and high sense of responsibility are desirable.</font></font><br>
<font size="4"><font color="#808000">个性稳重、具高度责任感。 <br>
Work well with a multi-cultural and diverse work force.</font></font><br>
<font size="4"><font color="#808000">能够在不同文化和工作人员的背景下出色地工作。 <br>
Bright，aggressive applicants.</font></font><br>
<font size="4"><font color="#808000">反应快、有进取心的应聘者。 <br>
Ambitious attitude essential．</font></font><br>
<font size="4"><font color="#808000">有雄心壮志。 <br>
Initiative，independent and good communication skill．</font></font><br>
<font size="4"><font color="#808000">积极主动、独立工作能力强，并有良好的交际技能。 <br>
Willing to work under pressure with leardership quality．</font></font><br>
<font size="4"><font color="#808000">愿意在压力下工作，并具领导素质。 <br>
Willing to assume responsibilities.</font></font><br>
<font size="4"><font color="#808000">应聘者须勇于挑重担。 <br>
Mature，self-motivated and strong interpersonal skills.</font></font><br>
<font size="4"><font color="#808000">思想成熟、上进心强，并具极丰富的人际关系技巧。 <br>
Energetic，fashion-minded person.</font></font><br>
<font size="4"><font color="#808000">精力旺盛、思想新潮。 <br>
With a pleasant mature attitude.</font></font><br>
<font size="4"><font color="#808000">开朗成熟。 <br>
Strong determination to succeed．</font></font><br>
<font size="4"><font color="#808000">有获得成功的坚定决心。 <br>
Strong leadership skills．</font></font><br>
<font size="4"><font color="#808000">有极强的领导艺术。 <br>
Ability to work well with others.</font></font><br>
<font size="4"><font color="#808000">能够同他人一道很好地工作。 <br>
Highly-motivated and reliable person with excellent health and pleasant personality.</font></font><br>
<font size="4"><font color="#808000">上进心强又可靠者，并且身体健康、性格开朗。 <br>
The ability to initiate and operate independently.</font></font><br>
<font size="4"><font color="#808000">有创业能力，并能独立地从业。 <br>
Strong leadership skill while possessing a great team spirit.</font></font><br>
<font size="4"><font color="#808000">有很高的领导艺术和很强的集体精神。 <br>
Be highly organized and effecient．</font></font><br>
<font size="4"><font color="#808000">工作很有条理，办事效率高。 <br>
Willing to learn and progress．</font></font><br>
<font size="4"><font color="#808000">肯学习进取。 <br>
Good presentation skills.</font></font><br>
<font size="4"><font color="#808000">有良好的表达能力。 <br>
Positive active mind essential．</font></font><br>
<font size="4"><font color="#808000">有积极、灵活的头脑。 <br>
Ability to deal with personnel at all levels effectively。</font></font><br>
<font size="4"><font color="#808000">善于同各种人员打交道。 <br>
Have positive work attitude and be willing and able to work diligently without supervision。</font></font><br>
<font size="4"><font color="#808000">有积极的工作态度，愿意和能够在没有监督的情况下勤奋地工作。 <br>
Young，bright，energetic with strong career-ambition.</font></font><br>
<font size="4"><font color="#808000">年轻、聪明、精力充沛，并有很强的事业心。 <br>
Good people management and communication skills. Team player.</font></font><br>
<font size="4"><font color="#808000">有良好的人员管理和交际能力。能在集体中发挥带头作用。 <br>
Able to work under high pressure and time limitation.</font></font><br>
<font size="4"><font color="#808000">能够在高压力下和时间限制下进行工作。 <br>
Be elegant and with nice personality.</font></font><br>
<font size="4"><font color="#808000">举止优雅、个人性格好。 <br>
With good managerial skills and organizational capabilities.</font></font><br>
<font size="4"><font color="#808000">有良好的管理艺术和组织能力。 <br>
The main qualities required are preparedness to work hard, ability to learn, ambition and good health.</font></font><br>
<font size="4"><font color="#808000">主要必备素质是吃苦耐劳精神好、学习能力优、事业心强和身体棒。 <br>
Having good and extensive social connections.</font></font><br>
<font size="4"><font color="#808000">具有良好而广泛的社会关系。 <br>
Being active, creative and innonative is a plus.</font></font><br>
<font size="4"><font color="#808000">思想活跃、有首创和革新精神尤佳。&nbsp; &nbsp; <br>
With good analytical capability.</font></font><br>
<font size="4"><font color="#808000">有较强的分析能力</font></font>
<br><img src ="http://www.cppblog.com/beautykingdom/aggbug/108594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/beautykingdom/" target="_blank">chatler</a> 2010-02-28 11:35 <a href="http://www.cppblog.com/beautykingdom/archive/2010/02/28/108594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>著名企业笔试题汇总持续更新</title><link>http://www.cppblog.com/beautykingdom/archive/2009/12/11/103016.html</link><dc:creator>chatler</dc:creator><author>chatler</author><pubDate>Fri, 11 Dec 2009 15:31:00 GMT</pubDate><guid>http://www.cppblog.com/beautykingdom/archive/2009/12/11/103016.html</guid><wfw:comment>http://www.cppblog.com/beautykingdom/comments/103016.html</wfw:comment><comments>http://www.cppblog.com/beautykingdom/archive/2009/12/11/103016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/beautykingdom/comments/commentRss/103016.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/beautykingdom/services/trackbacks/103016.html</trackback:ping><description><![CDATA[<p>金山笔试题-金山毒霸系列的笔试题</p>
<p>总体感觉题目还是比较简单，主要考C++里面的东西，还有一些windows进程机制的题目，具体如下：</p>
<p>1.讲述const，static，extern的作用；</p>
<p>2.要你描述派生类的内存存储方式。</p>
<p>3.给你一个32位的六进制数，写一个程序让它倒序输出。</p>
<p>4.写一个冒泡或者选择排序的程序，并在讲述一个其余排序的程序，并讲述其特点。</p>
<p>5.从下面5个题目中选做一题或者多题：<br>（1）面向对象是什么意思，C++是如何实现的；<br>（2）多线程中的同步机制是什么，有什么优缺点？<br>（3）TCP与UDP有什么区别，分别有什么具体的应用协议？<br>（4）（不太记得了，好像是关于hook的）<br>（5）同步机制的考察题。</p>
<p>这次面试的笔试题分为WPS软件研发，毒霸研发以及游戏测试三个方向，WPS方向的题比较难，设计深入的C++编程问题，游戏测试全是简答题，如列举魔兽 世界的十大缺点 之类的，都很好回答，感觉就是金山的组织还是比较混乱，大家都一顿乱抢试卷，搞得场面很烂，而且就只有两个小mm在组织现场，呵呵！</p>
<p><br>笔试题-腾讯数据库笔试题：<br>在一个文件中有 10G 个整数，乱序排列，要求找出中位数。内存限制为 2G。只写出思路即可。</p>
<p>腾讯笔试题解答(Peak Wong)：</p>
<p>　　1，把整数分成256M段，每段可以用64位整数保存该段数据个数，256M*8 = 2G内存，先清0</p>
<p>　　2，读10G整数，把整数映射到256M段中，增加相应段的记数</p>
<p>　　3，扫描256M段的记数，找到中位数的段和中位数的段前面所有段的记数，可以把其他段的内存释放</p>
<p>　　4，因中位数段的可能整数取值已经比较小(如果是32bit整数，当然如果是64bit整数的话，可以再次分段)，对每个整数做一个记数，再读一次10G整数，只读取中位数段对应的整数，并设置记数。</p>
<p>　　5，对新的记数扫描一次，即可找到中位数。</p>
<p>　　如果是32bit整数，读10G整数2次，扫描256M记数一次，后一次记数因数量很小，可以忽略不记。</p>
<p>　　解释一下：假设是32bit整数，按无符号整数处理</p>
<p>　　整数分成256M段? 整数范围是0 - 2^32 - 1 一共有4G种取值，4G/256M = 16，每16个数算一段 0-15是1段，16-31是一段，...</p>
<p>　　整数映射到256M段中? 如果整数是0-15，则增加第一段记数，如果整数是16-31，则增加第二段记数，...</p>
<p>　　其实可以不用分256M段，可以分的段数少一些，这样在扫描记数段时会快一些，还能节省一些内存。</p>
<p><br>Baidu面试笔试题 解答答案</p>
<p>一、选择题：15分 共10题 <br>1. 在排序方法中，关键码比较次数与记录地初始排列无关的是 . <br>A. Shell排序 B. 归并排序 C. 直接插入排序 D. 选择排序 </p>
<p>2. 以下多线程对int型变量x的操作，哪几个需要进行同步： <br>A. x=y; B. x&nbsp;&nbsp;&nbsp; C.&nbsp;&nbsp;&nbsp; x; D. x=1; </p>
<p>3. 代码 <br>void func() { <br>static int val; <br>&#8230; <br>} <br>中，变量val的内存地址位于： <br>A. 已初始化数据段 B.未初始化数据段 C.堆 D.栈 </p>
<p>4. 同一进程下的线程可以共享以下 <br>A. stack B. data section <br>C. register set D. thread ID </p>
<p>5. TCP和IP分别对应了 OSI中的哪几层？ <br>A. Application layer <br>B. Data link layer <br>C. Presentation layer <br>D. Physical layer <br>E. Transport layer <br>F. Session layer <br>G. Network layer </p>
<p>6. short a[100]，sizeof(a)返回？ <br>A 2 B 4 C 100 D 200 E 400 </p>
<p>7. 以下哪种不是基于组件的开发技术_____。 <br>A XPCOM B XP C COM D CORBA </p>
<p>8. 以下代码打印的结果是（假设运行在i386系列计算机上）： <br>struct st_t <br>{ <br>int status; <br>short* pdata; <br>char errstr[32]; <br>}; </p>
<p>st_t st[16]; <br>char* p = (char*)(st[2].errstr&nbsp;&nbsp;&nbsp; 32); <br>printf("%d", (p - (char*)(st))); </p>
<p>A 32 B 114 <br>C 120 D 1112 </p>
<p>9. STL中的哪种结构是连续形式的存储 <br>A map B set C list D vector </p>
<p>10. 一个栈的入栈序列是A，B，C，D，E，则栈的不可能的输出序列是（ ） <br>A、EDCBA； B、DECBA； C、DCEAB； D、ABCDE </p>
<p>二、简答题：20分，共2题 </p>
<p>1. （5分）重复多次fclose一个打开过一次的FILE *fp指针会有什么结果，并请解释。 </p>
<p>考察点：导致文件描述符结构中指针指向的内存被重复释放，进而导致一些不可预期的异<br>常。 </p>
<p>2. （15分）下面一段代码，想在调用f2(1)时打印err1，调用f2(2)时打印err4，但是代码<br>中有一些问题，请做尽可能少的修改使之正确。 </p>
<p>1 static int f1(const char *errstr, unsigned int flag) { <br>2 int copy, index, len; <br>3 const static char **__err = {&#8220;err1&#8221;, &#8220;err2&#8221;, &#8220;err3&#8221;, &#8220;err4&#8221;}; <br>4 <br>5 if(flag &amp; 0x10000) <br>6 copy = 1; <br>7 index = (flag &amp; 0x300000) &gt;&gt; 20; <br>8 <br>9 if(copy) { <br>10 len = flag &amp; 0xF; <br>11 errstr = malloc(len); <br>12 if(errstr = NULL) <br>13 return -1; <br>14 strncpy(errstr, __err[index], sizeof(errstr)); <br>15 } else <br>16 errstr = __err&nbsp;&nbsp;&nbsp; index; <br>17 } <br>18 <br>19 void f2(int c) { <br>20 char *err; <br>21 <br>22 swtch(c) { <br>23 case 1: <br>24 if(f1(err, 0x110004) != -1) <br>25 printf(err); <br>26 case 2: <br>27 if(f2(err, 0x30000D) != -1) <br>28 printf(err); <br>29 } <br>30 } </p>
<p>三、编程题：30分 共1题 <br>注意：要求提供完整代码，如果可以编译运行酌情加分。 </p>
<p>1. 求符合指定规则的数。 <br>给定函数d(n) = n&nbsp;&nbsp;&nbsp; n的各位之和，n为正整数，如 d(78) = 78 7 8=93。 这样这个函数<br>可以看成一个生成器，如93可以看成由78生成。 <br>定义数A：数A找不到一个数B可以由d(B)=A，即A不能由其他数生成。现在要写程序，找出<br>1至10000里的所有符合数A定义的数。 <br>输出： <br>1 <br>3 <br>&#8230; </p>
<p>四、设计题：35分 共1题 <br>注意：请尽可能详细描述你的数据结构、系统架构、设计思路等。建议多写一些伪代码或<br>者流程说明。 </p>
<p>1. 假设一个mp3搜索引擎收录了2^24首歌曲，并记录了可收听这些歌曲的2^30条URL，但每<br>首歌的URL不超过2^10个。系统会定期检查这些URL，如果一个URL不可用则不出现在搜索结<br>果中。现在歌曲名和URL分别通过整型的SONG_ID和URL_ID唯一确定。对该系统有如下需求<br>： <br>1) 通过SONG_ID搜索一首歌的URL_ID，给出URL_ID计数和列表 <br>2) 给定一个SONG_ID，为其添加一个新的URL_ID <br>3) 添加一个新的SONG_ID <br>4) 给定一个URL_ID，将其置为不可用 </p>
<p>限制条件：内存占用不超过1G，单个文件大小不超过2G，一个目录下的文件数不超过128个<br>。 </p>
<p>为获得最佳性能，请说明设计的数据结构、搜索算法，以及资源消耗。如果系统数据量扩<br>大，该如何多机分布处理？</p>
<p>第一题<br>&nbsp;&nbsp; 简评<br>&nbsp;&nbsp; 百度的主要业务是搜索，搜索的基本原理如下<br>　　1．编写爬虫程序到互联网上抓取网页海量的网页。<br>　　2．将抓取来的网页通过抽取，以一定的格式保存在能快速检索的文件系统中。<br>　　3．把用户输入的字符串进行拆分成关键字去文件系统中查询并返回结果。<br>　　由以上3点可见，字符串的分析，抽取在搜索引擎中的地位是何等重要。<br>　　因此，百度的笔试面试题中，出现这样的题就变得理所当然了。<br>import java.net.*;<br>import java.io.*;<br>import java.util.*; </p>
<p>/** * @author tzy * 在j2sdk1.4.2下测试通过 */</p>
<p>public class FileNameStat{<br>&nbsp;&nbsp; private String srcPath;//要统计的文件路径<br>&nbsp;&nbsp; private Map statMap;//用于统计的map<br>&nbsp; <br>&nbsp;&nbsp; public FileNameStat(String srcPath)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; this.srcPath=srcPath;<br>&nbsp;&nbsp;&nbsp;&nbsp; statMap=new TreeMap();<br>&nbsp;&nbsp; }<br>&nbsp; <br>&nbsp;&nbsp; /*获得要统计的URL的文件名*/<br>&nbsp;&nbsp; public String getFileName(String urlString)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; URL url=null;<br>&nbsp;&nbsp;&nbsp;&nbsp; String filePath=null;<br>&nbsp;&nbsp;&nbsp;&nbsp; String fileName=null;<br>&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url=new URL(urlString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filePath=url.getPath();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int index=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((index=filePath.lastIndexOf(\"/\"))!=-1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileName=filePath.substring(index+1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileName=\"\";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; catch(MalformedURLException e)<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; return fileName;<br>&nbsp;&nbsp; }<br>&nbsp; <br>&nbsp;&nbsp; /*统计指定文件名的个数*/<br>&nbsp;&nbsp; public void stat(String filename)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; Integer count=null;<br>&nbsp;&nbsp;&nbsp;&nbsp; if(statMap.get(filename)!=null)<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count=(Integer)statMap.get(filename);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count=new Integer(count.intValue()+1);<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count=new Integer(1);<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; statMap.put(filename,count);<br>&nbsp;&nbsp; }<br>&nbsp; <br>&nbsp;&nbsp; /*统计的主方法*/<br>&nbsp;&nbsp; public void start() throws FileNotFoundException,IOException<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader bfin=new BufferedReader(new FileReader(this.srcPath));<br>&nbsp;&nbsp;&nbsp;&nbsp; String temp=null;<br>&nbsp;&nbsp;&nbsp;&nbsp; while((temp=bfin.readLine())!=null)<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stat(getFileName(temp));<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; }<br>&nbsp; <br>&nbsp;&nbsp; /*输出统计结果*/<br>&nbsp;&nbsp; public void result()<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; Iterator it=statMap.entrySet().iterator();<br>&nbsp;&nbsp;&nbsp;&nbsp; while(it.hasNext())<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map.Entry entry=(Map.Entry)(it.next());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println((entry.getKey().equals(\"\")?\"空文件名\":entry.getKey()) + \"的个数是\" + entry.getValue());<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; }<br>&nbsp; <br>&nbsp;&nbsp; public static void main(String[] args) throws Exception<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; FileNameStat fns=new FileNameStat(\"src.txt\");//指定成待统计文件<br>&nbsp;&nbsp;&nbsp;&nbsp; fns.start();<br>&nbsp;&nbsp;&nbsp;&nbsp; fns.result();<br>&nbsp;&nbsp; }<br>}</p>
<p>&nbsp;</p>
<p>　　第二题</p>
<p>　　简评：</p>
<p>　　这道题也与百度的业务有关，百度现在除了搜索外，还有贴吧，知道，博客等重要产品。　　同时也在积极的探索社区化，包括前不久宣布进军电子商务领域， 搜索之外的这些产品，其主要功能的实现主要是对数据库的操作。　　因此，想进入百度，也需要对数据库有一定的认识。 　　实现思路及数据库设计：　　1，该论坛主要有两个实体对象，用户和帖子;对于帖子对象，有一个问题：回复的帖子是否应该跟主题帖子存放在同一个表里?</p>
<p>　　考虑到每天更新10万帖子，说明帖子数比较多，为了方便主题的呈现，我一般都把主题贴和回帖分别放在不同的表中，把主题贴和回帖分开可以提高查询效率(300万的访问量每天)。</p>
<p>　　2，按照1中的思路，该论坛由两个对象(用户和帖子)变成三个实体对象，分别是用户，主题帖子，回复帖子;</p>
<p>　　3，上述三个对象存在三个关系，分别是：</p>
<p>　　用户--主题帖，一个用户可以发0个或多个帖子，一个帖子对应一个用户(一对多关系)，</p>
<p>　　主题帖--回复帖：一个主题有0个或多个回复帖子，一个回复帖子对应一个主题(一对多关系);</p>
<p>　　用户--回复贴：一个用户可以回0个或多个帖，一个帖子对应一个用户(一对多关系)。</p>
<p>　　还存在对回复贴的回复，这个考虑用fatherId来表示。</p>
<p>　　4，由于三个关系 &#8220;用户--主题帖，主题帖--回复帖，用户--回复贴&#8221; 都是一对多关系，根据表设计一般原则，可以将这两个关系独立建立表，也可以不另外建表而将一对多的关系体现在实体表中;然而，表间的连接查询是非常耗资源 的，所以应尽量减少表间连接，那么对三个关系不应该分别建表，而是把用户的id作为主题表和回帖表的外键，把主题贴id作为回帖表的外键。</p>
<p>　　5，鉴于以上考虑，该论坛的三个表如下所示</p>
<p>　　表名：t_user_info (用户信息表)</p>
<p>字段名&nbsp;&nbsp; 类型&nbsp;&nbsp; 缺省值&nbsp;&nbsp; 中文含义&nbsp;&nbsp; 约束&nbsp;&nbsp; 备注&nbsp; <br>id&nbsp;&nbsp; Int&nbsp;&nbsp;&nbsp;&nbsp; 用户编号&nbsp;&nbsp; PRI&nbsp;&nbsp; Auto_increment <br>Name&nbsp;&nbsp; Varchar(30)&nbsp;&nbsp;&nbsp;&nbsp; 用户名&nbsp;&nbsp;&nbsp;&nbsp; <br>Email&nbsp;&nbsp; Varchar(50)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>Phone&nbsp;&nbsp; Varchar(30)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>Addr&nbsp;&nbsp; Varchar(200)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><br>　　其他字段略，根据需要添加　　表名：main_content_info (主题帖信息表)</p>
<p>字段名&nbsp;&nbsp; 类型&nbsp;&nbsp; 缺省值&nbsp;&nbsp; 中文含义&nbsp;&nbsp; 约束&nbsp;&nbsp; 备注 <br>id&nbsp;&nbsp; Int&nbsp;&nbsp;&nbsp;&nbsp; 贴编号&nbsp;&nbsp; PRI&nbsp;&nbsp; Auto_increment <br>Title&nbsp;&nbsp; Varchar(200)&nbsp;&nbsp;&nbsp;&nbsp; 发帖标题&nbsp;&nbsp;&nbsp;&nbsp; <br>Content&nbsp;&nbsp; Text&nbsp;&nbsp;&nbsp;&nbsp; 发帖内容&nbsp;&nbsp;&nbsp;&nbsp; <br>UserID&nbsp;&nbsp; Int&nbsp;&nbsp;&nbsp;&nbsp; 用户编号&nbsp;&nbsp;&nbsp;&nbsp; 外键 </p>
<p><br>　　其他字段略，根据需要添加</p>
<p><br>　　表名：sub_content_info (回复贴信息表)</p>
<p>字段名 类型&nbsp;&nbsp; 缺省值&nbsp;&nbsp; 中文含义 约束&nbsp;&nbsp; 备注&nbsp; <br>id&nbsp;&nbsp; Int&nbsp;&nbsp;&nbsp;&nbsp; 贴编号&nbsp;&nbsp; PRI&nbsp;&nbsp; Auto_increment <br>Title&nbsp;&nbsp; Varchar(200)&nbsp;&nbsp;&nbsp;&nbsp; 发帖标题&nbsp;&nbsp;&nbsp;&nbsp; <br>Content&nbsp;&nbsp; Text&nbsp;&nbsp;&nbsp;&nbsp; 发帖内容&nbsp;&nbsp;&nbsp;&nbsp; <br>UserID&nbsp;&nbsp; Int&nbsp;&nbsp;&nbsp;&nbsp; 用户编号&nbsp;&nbsp;&nbsp;&nbsp; 外键 <br>FatherID&nbsp;&nbsp; Int&nbsp;&nbsp;&nbsp;&nbsp; 父编号&nbsp;&nbsp;&nbsp;&nbsp; <br>MainID&nbsp;&nbsp; Int&nbsp;&nbsp;&nbsp;&nbsp; 主题帖编号&nbsp;&nbsp;&nbsp;&nbsp; 外键 </p>
<p><br>　　其他字段略，根据需要添加</p>
<p>　　6，符合范式分析：</p>
<p>　　上述表中每个字段不可再分，首先满足1NF;</p>
<p>　　然后数据库表中的每个实例或行都是可以被惟一地区分(id)，不存在部分依赖，因此满足2NF;</p>
<p>　　t_user_info (用户信息表)和main_content_info (主题帖信息表)不存在任何传递依赖，至少属于BCNF;</p>
<p>　　但是sub_content_info (回复贴信息表)不满足3NF,因为存在如下传递依赖：id--&gt;FatherID,FatherID--&gt;MainID。</p>
<p>　　范式并不是越高越好，sub_content_info表只满足2NF却更有效率，也是当今论坛较主流的设计。</p>
<p>　　第三题</p>
<p>　　简评：</p>
<p>　　如何对海量数据进行快速检索，这是搜索引擎的必需考虑的问题。这又涉及到数据结构和算法。　　因此，要想进入百度，就必须熟悉一些基本的算法和数据结构。　　　思路及解决方案如下：</p>
<p>　　1: 设计用TRIE树实现关键词到其对应id的快速词典查找</p>
<p>　　TRIE树的每一个节点为一个包含256个元素的数组，同时指针指向其下一级节点</p>
<p>　　节点定义如下：</p>
<p>struct trienode<br>{<br>&nbsp;&nbsp; int&nbsp;&nbsp; id;<br>&nbsp;&nbsp; struct trienode *child[256];<br>}TRIENODE; </p>
<p><br>　　如果TRIE树的某个节点的指针为NULL，说明从跟节点到当前节点的路径构成文件B中的一个关键词，</p>
<p>　　在其节点的id保存该关键词的id;如果指针不为NULL，则id对应为0或者一个无穷大的整数，标志从根节点</p>
<p>　　到当前节点的路径不是一个完整的关键词。</p>
<p>　　将关键词转化为二进制无符号char型数组，即对于汉字等双字节字符视为两个无符号char型整数，</p>
<p>　　每个元素的取值范围在0到255之间。</p>
<p>&nbsp;</p>
<p>　　2：生成文件b的TRIE树</p>
<p>　　步骤1：依次读取文件b的每一行，对每一行执行步骤2到步骤5</p>
<p>　　步骤2：读取关键词id和关键词，令为key</p>
<p>　　步骤3：依次读取key的每一个字符，对每一个字符，执行步骤4;</p>
<p>　　步骤4：如果该字符对应的指针为NULL，则创建其儿子节点;</p>
<p>　　步骤5：为当前节点的对应字符id置为关键词id</p>
<p>　　3：根据A文件生成C文件</p>
<p>　　步骤1：依次读取文件A的每一行，对每一行执行步骤2到步骤5</p>
<p>　　步骤2：分别获取当前行关键词、ip地址和时间</p>
<p>　　步骤3：令关键词key=c1c2...cm，对c1到cm每个字符，执行步骤4</p>
<p>　　步骤4：获取根节点的第c1个元素指针，转移到节点node1，</p>
<p>　　根据node1的第c2个元素指针，转移到node2...</p>
<p>　　根据nodem的第cm个元素，获取关键词的id</p>
<p>　　步骤5：往文件c中写入一行数据，格式为关键词的id、ip地址和时间</p>
<p>　　4：复杂度分析</p>
<p>　　生成文件B的TRIE树过程时间复杂度为O(n*m)，其中n为文件b行数，m为文件b关键词的最大长度。TRIE的空间复杂度为O(n*m)，n和m含义同上，但由于实际应用中关键词之间可能会有很多前缀相同现象，所以实际耗费空间并不会很高。</p>
<p>　　生成C文件的时间复杂度同样为O(n*m)，n为文件a行数，m为文件a关键词的最大长度，因为有了TRIE树之后，给定一个关键词获得其id的时间 复杂度为关键词长度。生成C文件的过程除了TRIE树空间外基本不需要太多额外的空间，空间复杂度为O(1)，由于系统有1G的可用内存，TRIE占用的 空间在几十兆到200M之间(与关键词集合有关)，因此本方法完全可行。</p>
<p>　2、八个人乘两只船：船1和船2，每只船只能且必须坐4人，8人中有3个大人：F、G、H，5个小孩：M、N、X、Y、Z。坐船的规则如下： <br>　　 <br>　　 i. 每条船上至少有一个大人；如果F在船2，则G也分到船2； <br>　　 <br>　　 ii.如果M分到船1，则N坐船2，X、Z必须分乘不同的船。 <br>　　 <br>　　a．下列哪组人员可以坐船1？（ ） <br>　　 <br>　　 A． F、G、H、X B． F、H、N、Y <br>　　 <br>　　 C． F、H、Y、 Z D． F、M、N、X <br>　　 <br>　　b．如果F坐船2，下列哪一对可以坐在同一条船上？（ ） <br>　　 <br>　　 A．F和Y B．G和Y C．M和N D．Y和Z <br>　　 <br>　　c．如果船1上已经坐了3个小孩，下列哪一对可以坐到船2？（ ） <br>　　 <br>　　 A．F和H B．G和Y C．H和N D．M和N <br>　　 <br>　　 <br>　　d．如果G在船1，下列哪个说法是正确的？（ ） <br>　　 <br>　　 A．H坐船2 B．M坐船2 <br>　　 <br>　　 C．船1上有一个大人 D．船2上有2个大人 <br>　　 <br>　　e．如果M和N在一船上，下列哪一对也必须在一条船上？（ ） <br>　　 <br>　　 A．F和H B．F和Y C．G和X D．N和X <br>　　 <br>　　 <br>　　f．如果H与Y乘坐不同的船，下列哪个必须在船1上？（ ） <br>　　 <br>　　 A． F B． G C． H D． M <br>　　 <br>　　g．如果船1上只有1个大人，下列哪个说法是正确的？（ ） <br>　　 <br>　　 A．F在船1上 B．G在船2上 <br>　　 <br>　　 C．H在船2上 D．M在船1上<br><br>&nbsp;from: http://blog.chinaunix.net/u2/76292/showart_1327403.html <br></p>
<img src ="http://www.cppblog.com/beautykingdom/aggbug/103016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/beautykingdom/" target="_blank">chatler</a> 2009-12-11 23:31 <a href="http://www.cppblog.com/beautykingdom/archive/2009/12/11/103016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全面整理的C++面试题</title><link>http://www.cppblog.com/beautykingdom/archive/2009/12/05/102633.html</link><dc:creator>chatler</dc:creator><author>chatler</author><pubDate>Sat, 05 Dec 2009 15:25:00 GMT</pubDate><guid>http://www.cppblog.com/beautykingdom/archive/2009/12/05/102633.html</guid><wfw:comment>http://www.cppblog.com/beautykingdom/comments/102633.html</wfw:comment><comments>http://www.cppblog.com/beautykingdom/archive/2009/12/05/102633.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/beautykingdom/comments/commentRss/102633.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/beautykingdom/services/trackbacks/102633.html</trackback:ping><description><![CDATA[<p>C++面试题</p>
<p><br>1.是不是一个父类写了一个virtual 函数，如果子类覆盖它的函数不加virtual ,也能实现多态?</p>
<p>virtual修饰符会被隐形继承的。</p>
<p>private 也被集成，只事派生类没有访问权限而已</p>
<p>virtual可加可不加</p>
<p>子类的空间里有父类的所有变量(static除外)</p>
<p>同一个函数只存在一个实体(inline除外)</p>
<p>子类覆盖它的函数不加virtual ,也能实现多态。</p>
<p>在子类的空间里，有父类的私有变量。私有变量不能直接访问。</p>
<p><br>--------------------------------------------------------------------------<br>2.输入一个字符串，将其逆序后输出。（使用C++，不建议用伪码）</p>
<p>#include &lt;iostream&gt;<br>using namespace std;</p>
<p><br>void main()<br>{<br>&nbsp; char a[50];memset(a,0,sizeof(a));<br>&nbsp; int i=0,j;<br>&nbsp; char t;<br>&nbsp; cin.getline(a,50,'\n');<br>&nbsp; for(i=0,j=strlen(a)-1;i&lt;strlen(a)/2;i++,j--)<br>&nbsp; {<br>&nbsp;&nbsp; t=a[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[i]=a[j];<br>&nbsp;&nbsp; a[j]=t;<br>&nbsp; }<br>&nbsp; cout&lt;&lt;a&lt;&lt;endl;&nbsp; <br>}</p>
<p>//第二种</p>
<p>string str;<br>cin&gt;&gt;str;<br>str.replace;<br>cout&lt;&lt;str;</p>
<p><br>--------------------------------------------------------------------------<br>3.请简单描述Windows内存管理的方法。</p>
<p>内存管理是操作系统中的重要部分，两三句话恐怕谁也说不清楚吧～～<br>我先说个大概，希望能够抛砖引玉吧</p>
<p>当程序运行时需要从内存中读出这段程序的代码。代码的位置必须在物理内存中才能被运行，由于现在的操作系统中有非常多的程序运行着，内存中不能够完全放下，所以引出了虚拟内存的概念。把哪些不常用的程序片断就放入虚拟内存，当需要用到它的时候在load入主存（物理内存）中。这个就是内存管理所要做的事。内存管理还有另外一件事需要做：计算程序片段在主存中的物理位置，以便CPU调度。</p>
<p>内存管理有块式管理，页式管理，段式和段页式管理。现在常用段页式管理</p>
<p>块式管理：把主存分为一大块、一大块的，当所需的程序片断不在主存时就分配一块主存空间，把程 序片断load入主存，就算所需的程序片度只有几个字节也只能把这一块分配给它。这样会造成很大的浪费，平均浪费了50％的内存空间，但时易于管理。</p>
<p>页式管理：把主存分为一页一页的，每一页的空间要比一块一块的空间小很多，显然这种方法的空间利用率要比块式管理高很多。</p>
<p>段式管理：把主存分为一段一段的，每一段的空间又要比一页一页的空间小很多，这种方法在空间利用率上又比页式管理高很多，但是也有另外一个缺点。一个程序片断可能会被分为几十段，这样很多时间就会被浪费在计算每一段的物理地址上（计算机最耗时间的大家都知道是I/O吧）。</p>
<p>段页式管理：结合了段式管理和页式管理的优点。把主存分为若干页，每一页又分为若干段。好处就很明显，不用我多说了吧。</p>
<p>各种内存管理都有它自己的方法来计算出程序片断在主存中的物理地址，其实都很相似。</p>
<p>这只是一个大概而已，不足以说明内存管理的皮毛。无论哪一本操作系统书上都有详细的讲解</p>
<p><br>--------------------------------------------------------------------------<br>4.<br>#include "stdafx.h"<br>#define SQR(X) X*X</p>
<p>int main(int argc, char* argv[])<br>{<br>&nbsp;int a = 10;<br>&nbsp;int k = 2;<br>&nbsp;int m = 1;</p>
<p>&nbsp;a /= SQR(k+m)/SQR(k+m); <br>&nbsp;printf("%d\n",a); </p>
<p>&nbsp;return 0;<br>}<br>这道题目的结果是什么啊?</p>
<p>define 只是定义而已，在编择时只是简单代换X*X而已，并不经过算术法则的</p>
<p>a /= (k+m)*(k+m)/(k+m)*(k+m);<br>=&gt;a /= (k+m)*1*(k+m);<br>=&gt;a = a/9;<br>=&gt;a = 1;<br>上面的错了，该是<br>a=a/(k+m*k+m/k+m*k+m)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a=a/(2+1*2+1/2+1*2+1)<br>注意，因为k,m为int型，所以1/2=0,即a＝a/7=1(都为int型）<br>gcc下检查过，如果大家都为float型的话结果为10/7.5=1.33333<br></p>
<p>--------------------------------------------------------------------------<br>5.<br>const 符号常量；<br>(1)const char *p<br>(2)char const *p<br>(3)char * const p<br>说明上面三种描述的区别；</p>
<p><br>如果const位于星号的左侧，则const就是用来修饰指针所指向的变量，即指针指向为常量；<br>如果const位于星号的右侧，const就是修饰指针本身，即指针本身是常量。</p>
<p>(1)const char *p</p>
<p>一个指向char类型的const对象指针，p不是常量,我们可以修改p的值，使其指向不同的char，但是不能改变它指向非char对象，如：<br>const char *p;<br>char c1='a';<br>char c2='b';<br>p=&amp;c1;//ok<br>p=&amp;c2;//ok<br>*p=c1;//error</p>
<p>(2)char const *p<br>(3)char * const p</p>
<p>这两个好象是一样的，此时*p可以修改，而p不能修改。</p>
<p>(4)const char * const p<br>这种是地址及指向对象都不能修改。</p>
<p>--------------------------------------------------------------------------<br>6.下面是C语言中两种if语句判断方式。请问哪种写法更好？为什么？<br>&nbsp;int n;<br>&nbsp;if (n == 10) // 第一种判断方式<br>&nbsp;if (10 == n) // 第二种判断方式</p>
<p>如果少了个=号,编译时就会报错,减少了出错的可能行,可以检测出是否少了=</p>
<p>--------------------------------------------------------------------------<br>7.下面的代码有什么问题？<br>void DoSomeThing(...)<br>{<br>&nbsp;char* p;<br>&nbsp;...<br>&nbsp;p = malloc(1024);&nbsp; // 分配1K的空间<br>&nbsp;if (NULL == p)<br>&nbsp; return;<br>&nbsp;...<br>&nbsp;p = realloc(p, 2048); // 空间不够，重新分配到2K<br>&nbsp;if (NULL == p)<br>&nbsp; return;<br>&nbsp;...<br>}</p>
<p>A:<br>p = malloc(1024);&nbsp;&nbsp;&nbsp;&nbsp; 应该写成： p = (char *) malloc(1024); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 没有释放p的空间，造成内存泄漏。</p>
<p><br>--------------------------------------------------------------------------<br>8.下面的代码有什么问题？并请给出正确的写法。<br>void DoSomeThing(char* p)<br>{<br>&nbsp;char str[16];<br>&nbsp;int n;<br>&nbsp;assert(NULL != p);<br>&nbsp;sscanf(p, "%s%d", str, n);<br>&nbsp;if (0 == strcmp(str, "something"))<br>&nbsp;{<br>&nbsp; ...<br>&nbsp;}<br>}</p>
<p>A:<br>sscanf(p, "%s%d", str, n);&nbsp;&nbsp; 这句该写成： sscanf(p, "%s%d", str, &amp;n);</p>
<p>--------------------------------------------------------------------------<br>9.下面代码有什么错误?<br>Void test1() <br>{ <br>&nbsp;char string[10]; <br>&nbsp;char *str1="0123456789";<br>&nbsp;strcpy(string, str1); <br>} </p>
<p>数组越界</p>
<p>--------------------------------------------------------------------------<br>10.下面代码有什么问题?<br>Void test2() <br>{ <br>&nbsp; char string[10], str1[10]; <br>&nbsp; for(i=0; i&lt;10;i++) <br>&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp; str1[i] ='a'; <br>&nbsp; } <br>&nbsp; strcpy(string, str1); <br>} </p>
<p>数组越界</p>
<p>--------------------------------------------------------------------------<br>11.下面代码有什么问题?<br>Void test3(char* str1) <br>{ <br>&nbsp; char string[10]; <br>&nbsp; if(strlen(str1)&lt;=10) <br>&nbsp; { <br>&nbsp;&nbsp;&nbsp; strcpy(string, str1); <br>&nbsp; } <br>} </p>
<p>==数组越界<br>==strcpy拷贝的结束标志是查找字符串中的\0 因此如果字符串中没有遇到\0的话 会一直复制，直到遇到\0,上面的123都因此产生越界的情况<br>&nbsp;<br>建议使用 strncpy 和 memcpy</p>
<p>--------------------------------------------------------------------------<br>12.下面代码有什么问题?</p>
<p>#define MAX_SRM 256 </p>
<p>DSN get_SRM_no() <br>{ <br>&nbsp; static int SRM_no; //是不是这里没赋初值？<br>&nbsp; int I; <br>&nbsp; for(I=0;I&lt;MAX_SRM;I++,SRM_no++) <br>&nbsp; { <br>&nbsp;&nbsp;&nbsp; SRM_no %= MAX_SRM; <br>&nbsp;&nbsp;&nbsp; if(MY_SRM.state==IDLE) <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp; } <br>&nbsp; if(I&gt;=MAX_SRM) <br>&nbsp;&nbsp;&nbsp; return (NULL_SRM); <br>&nbsp; else <br>&nbsp;&nbsp;&nbsp; return SRM_no; <br>} </p>
<p>系统会初始化static int变量为0,但该值会一直保存,所谓的不可重入...</p>
<p>--------------------------------------------------------------------------<br>13.写出运行结果:<br>{// test1<br>&nbsp;&nbsp;&nbsp; char str[] = "world"; cout &lt;&lt; sizeof(str) &lt;&lt; ": ";<br>&nbsp;&nbsp;&nbsp; char *p&nbsp;&nbsp;&nbsp; = str;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; sizeof(p) &lt;&lt; ": ";<br>&nbsp;&nbsp;&nbsp; char i&nbsp;&nbsp;&nbsp;&nbsp; = 10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; sizeof(i) &lt;&lt; ": ";<br>&nbsp;&nbsp;&nbsp; void *pp&nbsp;&nbsp; = malloc(10);&nbsp; cout &lt;&lt; sizeof(p) &lt;&lt; endl;<br>}</p>
<p>6：4：1：4</p>
<p>--------------------------------------------------------------------------<br>14.写出运行结果:<br>{// test2<br>&nbsp;&nbsp;&nbsp; union V {<br>&nbsp;struct X {<br>&nbsp; unsigned char s1:2;<br>&nbsp; unsigned char s2:3;<br>&nbsp; unsigned char s3:3;<br>&nbsp;} x;</p>
<p>&nbsp;unsigned char c;<br>&nbsp;&nbsp;&nbsp; } v;</p>
<p>&nbsp;&nbsp;&nbsp; v.c = 100;<br>&nbsp;&nbsp;&nbsp; printf("%d", v.x.s3); </p>
<p>}</p>
<p>3</p>
<p>--------------------------------------------------------------------------<br>15.用C++写个程序，如何判断一个操作系统是16位还是32位的？不能用sizeof()函数</p>
<p>A1:<br>16位的系统下，<br>int i = 65536;<br>cout &lt;&lt; i; // 输出0；<br>int i = 65535;<br>cout &lt;&lt; i; // 输出-1；</p>
<p>32位的系统下，<br>int i = 65536;<br>cout &lt;&lt; i; // 输出65536；<br>int i = 65535;<br>cout &lt;&lt; i; // 输出65535；</p>
<p>A2:</p>
<p>int a = ~0;<br>if( a&gt;65536 ) <br>{<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"32 bit"&lt;&lt;endl;<br>}<br>else<br>{<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"16 bit"&lt;&lt;endl;<br>}</p>
<p><br>--------------------------------------------------------------------------<br>16.C和C++有什么不同?</p>
<p>从机制上：c是面向过程的（但c也可以编写面向对象的程序）；c++是面向对象的，提供了类。但是，<br>c++编写面向对象的程序比c容易</p>
<p>从适用的方向：c适合要求代码体积小的，效率高的场合，如嵌入式；c++适合更上层的，复杂的；&nbsp; llinux核心大部分是c写的，因为它是系统软件，效率要求极高。</p>
<p>从名称上也可以看出，c++比c多了+，说明c++是c的超集；那为什么不叫c+而叫c++呢，是因为c++比<br>c来说扩充的东西太多了，所以就在c后面放上两个+；于是就成了c++</p>
<p>C语言是结构化编程语言，C++是面向对象编程语言。<br>C++侧重于对象而不是过程，侧重于类的设计而不是逻辑的设计。</p>
<p>--------------------------------------------------------------------------<br>17.在不用第三方参数的情况下，交换两个参数的值<br>#include &lt;stdio.h&gt;</p>
<p>void main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i=60;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j=50;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i=i+j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j=i-j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i=i-j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("i=%d\n",i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("j=%d\n",j);<br>}</p>
<p>方法二：<br>i^=j;<br>j^=i;<br>i^=j;</p>
<p>方法三：<br>// 用加减实现，而且不会溢出<br>a = a+b-(b=a)</p>
<p>--------------------------------------------------------------------------<br>18.有关位域的面试题（为什么输出的是一个奇怪的字符）</p>
<p>a.t = 'b';效果相当于 a.t= 'b' &amp; 0xf;</p>
<p>'b' --&gt; 01100010<br>'b' &amp; 0xf --&gt;&gt;00000010<br>所以输出Ascii码为2的特殊字符</p>
<p><br>char t:4;就是4bit的字符变量，同样<br>unsigned short i:8;就是8bit的无符号短整形变量</p>
<p>--------------------------------------------------------------------------<br>19.int i=10, j=10, k=3; k*=i+j; k最后的值是?</p>
<p>60</p>
<p>--------------------------------------------------------------------------<br>20.进程间通信的方式有?</p>
<p>进程间通信的方式有 共享内存， 管道 ，Socket ，消息队列 , DDE等</p>
<p>--------------------------------------------------------------------------<br>21.<br>struct A <br>{ <br>char t:4; <br>char k:4; <br>unsigned short i:8; <br>unsigned long m; <br>} <br>sizeof(A)=?（不考虑边界对齐）</p>
<p>7</p>
<p>struct CELL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Declare CELL bit field<br>{<br>&nbsp;&nbsp; unsigned character&nbsp; : 8;&nbsp; // 00000000 ????????<br>&nbsp;&nbsp; unsigned foreground : 3;&nbsp; // 00000??? 00000000<br>&nbsp;&nbsp; unsigned intensity&nbsp; : 1;&nbsp; // 0000?000 00000000<br>&nbsp;&nbsp; unsigned background : 3;&nbsp; // 0???0000 00000000<br>&nbsp;&nbsp; unsigned blink&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 1;&nbsp; // ?0000000 00000000<br>} screen[25][80];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Array of bit fields<br>二、位结构 <br>&nbsp;&nbsp;&nbsp; 位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构 <br>比按位运算符更加方便。 <br>&nbsp;&nbsp;&nbsp; 位结构定义的一般形式为: <br>&nbsp;&nbsp;&nbsp;&nbsp; struct位结构名{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型 变量名: 整型常数; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型 变量名: 整型常数; <br>&nbsp;&nbsp;&nbsp;&nbsp; } 位结构变量; <br>&nbsp;&nbsp;&nbsp; 其中: 数据类型必须是int(unsigned或signed)。 整型常数必须是非负的整 <br>数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。 <br>&nbsp;&nbsp;&nbsp; 变量名是选择项, 可以不命名, 这样规定是为了排列需要。 <br>&nbsp;&nbsp;&nbsp; 例如: 下面定义了一个位结构。 <br>&nbsp;&nbsp;&nbsp;&nbsp; struct{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned incon: 8;&nbsp; /*incon占用低字节的0~7共8位*/ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned txcolor: 4;/*txcolor占用高字节的0~3位共4位*/ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned bgcolor: 3;/*bgcolor占用高字节的4~6位共3位*/ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned blink: 1;&nbsp; /*blink占用高字节的第7位*/ <br>&nbsp;&nbsp;&nbsp;&nbsp; }ch; <br>&nbsp;&nbsp;&nbsp; 位结构成员的访问与结构成员的访问相同。 <br>&nbsp;&nbsp;&nbsp; 例如: 访问上例位结构中的bgcolor成员可写成: <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ch.bgcolor <br>&nbsp; <br>&nbsp;&nbsp;&nbsp; 注意: <br>&nbsp;&nbsp;&nbsp; 1. 位结构中的成员可以定义为unsigned, 也可定义为signed,&nbsp; 但当成员长 <br>度为1时, 会被认为是unsigned类型。因为单个位不可能具有符号。 <br>&nbsp;&nbsp;&nbsp; 2. 位结构中的成员不能使用数组和指针, 但位结构变量可以是数组和指针, <br>如果是指针, 其成员访问方式同结构指针。 <br>&nbsp;&nbsp;&nbsp; 3. 位结构总长度(位数), 是各个位成员定义的位数之和,&nbsp; 可以超过两个字 <br>节。 <br>&nbsp;&nbsp;&nbsp; 4. 位结构成员可以与其它结构成员一起使用。 <br>&nbsp;&nbsp;&nbsp; 例如: <br>&nbsp;&nbsp;&nbsp;&nbsp; struct info{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char name[8]; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int age; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct addr address; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float pay; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned state: 1; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned pay: 1; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }workers;<br>&nbsp;&nbsp;&nbsp; 上例的结构定义了关于一个工人的信息。其中有两个位结构成员, 每个位结 <br>构成员只有一位, 因此只占一个字节但保存了两个信息, 该字节中第一位表示工 <br>人的状态, 第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。</p>
<p><br>--------------------------------------------------------------------------<br>22.下面的函数实现在一个固定的数上加上一个数，有什么错误，改正 <br>int add_n(int n) <br>{ <br>&nbsp; static int i=100; <br>&nbsp; i+=n; <br>&nbsp; return i; <br>} </p>
<p>答:<br>因为static使得i的值会保留上次的值。<br>去掉static就可了</p>
<p>--------------------------------------------------------------------------<br>23.下面的代码有什么问题?<br>class A <br>{ <br>public: <br>&nbsp; A() { p=this; } <br>&nbsp; ~A() { if(p!=NULL) { delete p; p=NULL; } } </p>
<p>&nbsp; A* p; <br>};</p>
<p>答:<br>会引起无限递归</p>
<p>--------------------------------------------------------------------------<br>24.<br>union a {<br>&nbsp;int a_int1;<br>&nbsp;double a_double;<br>&nbsp;int a_int2;<br>};</p>
<p>typedef struct<br>{<br>&nbsp;a a1;<br>&nbsp;char y;<br>} b;</p>
<p>class c<br>{<br>&nbsp;double c_double;<br>&nbsp;b b1;<br>&nbsp;a a2;</p>
<p>};</p>
<p>输出cout&lt;&lt;sizeof(c)&lt;&lt;endl;的结果?</p>
<p>答:<br>VC6环境下得出的结果是32</p>
<p>另:<br>我(sun)在VC6.0+win2k下做过试验:<br>short - 2<br>int-4<br>float-4<br>double-8<br>指针-4</p>
<p>sizeof(union)，以结构里面size最大的为union的size</p>
<p>解析C语言中的sizeof</p>
<p>一、sizeof的概念　 <br>　　sizeof是C语言的一种单目操作符，如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。　 </p>
<p>二、sizeof的使用方法　 <br>　　1、用于数据类型　 </p>
<p>　　sizeof使用形式：sizeof（type）　 </p>
<p>　　数据类型必须用括号括住。如sizeof（int）。　 </p>
<p>　　2、用于变量　 </p>
<p>　　sizeof使用形式：sizeof（var_name）或sizeof　var_name　 </p>
<p>　　变量名可以不用括号括住。如sizeof　(var_name)，sizeof　var_name等都是正确形式。带括号的用法更普遍，大多数程序员采用这种形式。　 </p>
<p>　　注意：sizeof操作符不能用于函数类型，不完全类型或位字段。不完全类型指具有未知存储大小的数据类型，如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。　 </p>
<p>　　如sizeof(max)若此时变量max定义为int　max(),sizeof(char_v)　若此时char_v定义为char　char_v　[MAX]且MAX未知，sizeof(void)都不是正确形式。　 </p>
<p>三、sizeof的结果　 <br>　　sizeof操作符的结果类型是size_t，它在头文件</p>
<p>中typedef为unsigned　int类型。该类型保证能容纳实现所建立的最大对象的字节大小。　 </p>
<p>　　1、若操作数具有类型char、unsigned　char或signed　char，其结果等于1。　 </p>
<p>　　ANSI　C正式规定字符类型为1字节。　 </p>
<p>　　2、int、unsigned　int　、short　int、unsigned　short　、long　int　、unsigned　long　、float、double、long　double类型的sizeof　在ANSI　C中没有具体规定，大小依赖于实现，一般可能分别为2、2、2、2、4、4、4、8、10。　 </p>
<p>　　3、当操作数是指针时，sizeof依赖于编译器。例如Microsoft　C/C++7.0中，near类指针字节数为2，far、huge类指针字节数为4。一般Unix的指针字节数为4。　 </p>
<p>　　4、当操作数具有数组类型时，其结果是数组的总字节数。　 </p>
<p>　　5、联合类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这种类型对象的总字节数，包括任何垫补在内。　 </p>
<p>　　让我们看如下结构：　 </p>
<p>　　struct　{char　b;　double　x;}　a;　 </p>
<p>　　在某些机器上sizeof（a）=12，而一般sizeof（char）+　sizeof（double）=9。　 </p>
<p>　　这是因为编译器在考虑对齐问题时，在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。　 </p>
<p>　　6、如果操作数是函数中的数组形参或函数类型的形参，sizeof给出其指针的大小。　 </p>
<p>四、sizeof与其他操作符的关系　 <br>　　sizeof的优先级为2级，比/、%等3级运算符优先级高。它可以与其他操作符一起组成表达式。如i*sizeof（int）；其中i为int类型变量。　 </p>
<p>五、sizeof的主要用途　 <br>　　1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如：　 </p>
<p>　　void　*malloc（size_t　size）,　 </p>
<p>　　size_t　fread(void　*　ptr,size_t　size,size_t　nmemb,FILE　*　stream)。　 </p>
<p>　　2、sizeof的另一个的主要用途是计算数组中元素的个数。例如：　 </p>
<p>　　void　*　memset（void　*　s,int　c,sizeof(s)）。　 </p>
<p>六、建议　 <br>　　由于操作数的字节数在实现时可能出现变化，建议在涉及到操作数字节大小时用sizeof来代替常量计算。</p>
<p><br>=============================================================<br>本文主要包括二个部分，第一部分重点介绍在VC中，怎么样采用sizeof来求结构的大小，以及容易出现的问题，并给出解决问题的方法，第二部分总结出VC中sizeof的主要用法。 </p>
<p>1、 sizeof应用在结构上的情况 </p>
<p>请看下面的结构： </p>
<p>struct MyStruct </p>
<p>{ </p>
<p>double dda1; </p>
<p>char dda; </p>
<p>int type </p>
<p>}; </p>
<p>对结构MyStruct采用sizeof会出现什么结果呢？sizeof(MyStruct)为多少呢？也许你会这样求： </p>
<p>sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13 </p>
<p>但是当在VC中测试上面结构的大小时，你会发现sizeof(MyStruct)为16。你知道为什么在VC中会得出这样一个结果吗？ </p>
<p>其实，这是VC对变量存储的一个特殊处理。为了提高CPU的存储速度，VC对一些变量的起始地址做了"对齐"处理。在默认情况下，VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。下面列出常用类型的对齐方式(vc6.0,32位系统)。 </p>
<p>类型 <br>对齐方式（变量存放的起始地址相对于结构的起始地址的偏移量） </p>
<p>Char <br>偏移量必须为sizeof(char)即1的倍数 </p>
<p>int <br>偏移量必须为sizeof(int)即4的倍数 </p>
<p>float <br>偏移量必须为sizeof(float)即4的倍数 </p>
<p>double <br>偏移量必须为sizeof(double)即8的倍数 </p>
<p>Short <br>偏移量必须为sizeof(short)即2的倍数 </p>
<p><br>各成员变量在存放的时候根据在结构中出现的顺序依次申请空间，同时按照上面的对齐方式调整位置，空缺的字节VC会自动填充。同时VC为了确保结构的大小为结构的字节边界数（即该结构中占用最大空间的类型所占用的字节数）的倍数，所以在为最后一个成员变量申请空间后，还会根据需要自动填充空缺的字节。 </p>
<p>下面用前面的例子来说明VC到底怎么样来存放结构的。 </p>
<p>struct MyStruct </p>
<p>{ </p>
<p>double dda1; </p>
<p>char dda; </p>
<p>int type </p>
<p>}； </p>
<p>为上面的结构分配空间的时候，VC根据成员变量出现的顺序和对齐方式，先为第一个成员dda1分配空间，其起始地址跟结构的起始地址相同（刚好偏移量0刚好为sizeof(double)的倍数），该成员变量占用sizeof(double)=8个字节；接下来为第二个成员dda分配空间，这时下一个可以分配的地址对于结构的起始地址的偏移量为8，是sizeof(char)的倍数，所以把dda存放在偏移量为8的地方满足对齐方式，该成员变量占用sizeof(char)=1个字节；接下来为第三个成员type分配空间，这时下一个可以分配的地址对于结构的起始地址的偏移量为9，不是sizeof(int)=4的倍数，为了满足对齐方式对偏移量的约束问题，VC自动填充3个字节（这三个字节没有放什么东西），这时下一个可以分配的地址对于结构的起始地址的偏移量为12，刚好是sizeof(int)=4的倍数，所以把type存放在偏移量为12的地方，该成员变量占用sizeof(int)=4个字节；这时整个结构的成员变量已经都分配了空间，总的占用的空间大小为：8+1+3+4=16，刚好为结构的字节边界数（即结构中占用最大空间的类型所占用的字节数sizeof(double)=8）的倍数，所以没有空缺的字节需要填充。所以整个结构的大小为：sizeof(MyStruct)=8+1+3+4=16，其中有3个字节是VC自动填充的，没有放任何有意义的东西。 </p>
<p>下面再举个例子，交换一下上面的MyStruct的成员变量的位置，使它变成下面的情况： </p>
<p>struct MyStruct </p>
<p>{ </p>
<p>char dda; </p>
<p>double dda1;&nbsp;&nbsp; </p>
<p>int type </p>
<p>}； </p>
<p>这个结构占用的空间为多大呢？在VC6.0环境下，可以得到sizeof(MyStruc)为24。结合上面提到的分配空间的一些原则，分析下VC怎么样为上面的结构分配空间的。（简单说明） </p>
<p>struct MyStruct </p>
<p>{ </p>
<p>&nbsp; char dda;//偏移量为0，满足对齐方式，dda占用1个字节； </p>
<p>double dda1;//下一个可用的地址的偏移量为1，不是sizeof(double)=8 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //的倍数，需要补足7个字节才能使偏移量变为8（满足对齐 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //方式），因此VC自动填充7个字节，dda1存放在偏移量为8 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //的地址上，它占用8个字节。 </p>
<p>int type；//下一个可用的地址的偏移量为16，是sizeof(int)=4的倍 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //数，满足int的对齐方式，所以不需要VC自动填充，type存 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //放在偏移量为16的地址上，它占用4个字节。 </p>
<p>}；//所有成员变量都分配了空间，空间总的大小为1+7+8+4=20，不是结构 </p>
<p>&nbsp;&nbsp; //的节边界数（即结构中占用最大空间的类型所占用的字节数sizeof </p>
<p>&nbsp;&nbsp; //(double)=8）的倍数，所以需要填充4个字节，以满足结构的大小为 </p>
<p>&nbsp;&nbsp; //sizeof(double)=8的倍数。 </p>
<p><br>所以该结构总的大小为：sizeof(MyStruc)为1+7+8+4+4=24。其中总的有7+4=11个字节是VC自动填充的，没有放任何有意义的东西。 </p>
<p><br>VC对结构的存储的特殊处理确实提高CPU存储变量的速度，但是有时候也带来了一些麻烦，我们也屏蔽掉变量默认的对齐方式，自己可以设定变量的对齐方式。 </p>
<p>VC中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况：第一、如果n大于等于该变量所占用的字节数，那么偏移量必须满足默认的对齐方式，第二、如果n小于该变量的类型所占用的字节数，那么偏移量为n的倍数，不用满足默认的对齐方式。结构的总大小也有个约束条件，分下面两种情况：如果n大于所有成员变量类型所占用的字节数，那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数； </p>
<p>否则必须为n的倍数。下面举例说明其用法。 </p>
<p>#pragma pack(push) //保存对齐状态 </p>
<p>#pragma pack(4)//设定为4字节对齐 </p>
<p>struct test </p>
<p>{ </p>
<p>&nbsp; char m1; </p>
<p>&nbsp; double m4; </p>
<p>&nbsp; int&nbsp; m3; </p>
<p>}; </p>
<p>#pragma pack(pop)//恢复对齐状态 </p>
<p>以上结构的大小为16，下面分析其存储情况，首先为m1分配空间，其偏移量为0，满足我们自己设定的对齐方式（4字节对齐），m1占用1个字节。接着开始为m4分配空间，这时其偏移量为1，需要补足3个字节，这样使偏移量满足为n=4的倍数（因为sizeof(double)大于n）,m4占用8个字节。接着为m3分配空间，这时其偏移量为12，满足为4的倍数，m3占用4个字节。这时已经为所有成员变量分配了空间，共分配了16个字节，满足为n的倍数。如果把上面的#pragma pack(4)改为#pragma pack(16)，那么我们可以得到结构的大小为24。（请读者自己分析） </p>
<p>2、 sizeof用法总结 </p>
<p>在VC中，sizeof有着许多的用法，而且很容易引起一些错误。下面根据sizeof后面的参数对sizeof的用法做个总结。 </p>
<p>A．&nbsp; 参数为数据类型或者为一般变量。例如sizeof(int),sizeof(long)等等。这种情况要注意的是不同系统系统或者不同编译器得到的结果可能是不同的。例如int类型在16位系统中占2个字节，在32位系统中占4个字节。 </p>
<p>B．&nbsp; 参数为数组或指针。下面举例说明. </p>
<p>int a[50];&nbsp; //sizeof(a)=4*50=200; 求数组所占的空间大小 </p>
<p>int *a=new int[50];// sizeof(a)=4; a为一个指针，sizeof(a)是求指针 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //的大小,在32位系统中，当然是占4个字节。 </p>
<p>C．&nbsp; 参数为结构或类。Sizeof应用在类和结构的处理情况是相同的。但有两点需要注意，第一、结构或者类中的静态成员不对结构或者类的大小产生影响，因为静态变量的存储位置与结构或者类的实例地址无关。 </p>
<p>第二、没有成员变量的结构或类的大小为1，因为必须保证结构或类的每一 </p>
<p>个实例在内存中都有唯一的地址。 </p>
<p>下面举例说明， </p>
<p>Class Test{int a;static double c};//sizeof(Test)=4. </p>
<p>Test *s;//sizeof(s)=4,s为一个指针。 </p>
<p>Class test1{ };//sizeof(test1)=1; </p>
<p>D．&nbsp; 参数为其他。下面举例说明。 </p>
<p>&nbsp;&nbsp; int func(char s[5]); </p>
<p>&nbsp;&nbsp; { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;sizeof(s);//这里将输出4，本来s为一个数组，但由于做为函 </p>
<p>&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; //以sizeof(s)实际上为求指针的大小。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; return 1; </p>
<p>} </p>
<p>sizeof(func("1234"))=4//因为func的返回类型为int，所以相当于 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //求sizeof(int). </p>
<p><br>以上为sizeof的基本用法，在实际的使用中要注意分析VC的分配变量的分配策略，这样的话可以避免一些错误。 </p>
<p><br>--------------------------------------------------------------------------<br>25.i最后等于多少?<br>int i = 1;<br>int j = i++;<br>if((i&gt;j++) &amp;&amp; (i++ == j)) i+=j;</p>
<p>答:<br>i = 5</p>
<p>--------------------------------------------------------------------------<br>26.<br>unsigned short array[]={1,2,3,4,5,6,7};<br>int i = 3;<br>*(array + i) = ?</p>
<p>答:<br>4</p>
<p>--------------------------------------------------------------------------<br>27.<br>class A<br>{<br>&nbsp; virtual void func1()；<br>&nbsp; void func2();<br>}<br>Class B: class A<br>{<br>&nbsp; void func1(){cout &lt;&lt; "fun1 in class B" &lt;&lt; endl;}<br>&nbsp; virtual void func2(){cout &lt;&lt; "fun2 in class B" &lt;&lt; endl;}<br>} <br>A, A中的func1和B中的func2都是虚函数.<br>B, A中的func1和B中的func2都不是虚函数.<br>C, A中的func2是虚函数.，B中的func1不是虚函数.<br>D, A中的func2不是虚函数，B中的func1是虚函数.</p>
<p>答:<br>A</p>
<p>--------------------------------------------------------------------------<br>28.<br>数据库：抽出部门，平均工资，要求按部门的字符串顺序排序，不能含有"human resource"部门，</p>
<p>employee结构如下：employee_id, employee_name, depart_id,depart_name,wage</p>
<p>答:<br>select depart_name, avg(wage)<br>from employee<br>where depart_name &lt;&gt; 'human resource'<br>group by depart_name<br>order by depart_name</p>
<p>--------------------------------------------------------------------------<br>29.<br>给定如下SQL数据库：Test(num INT(4)) 请用一条SQL语句返回num的最小值，但不许使用统计功能，如MIN，MAX等</p>
<p>答:<br>select top 1 num<br>from Test<br>order by num desc</p>
<p>--------------------------------------------------------------------------<br>30.<br>输出下面程序结果。 </p>
<p>#include &lt;iostream.h&gt; </p>
<p>class A <br>{ <br>public:<br>&nbsp;virtual void print(void) <br>&nbsp;{ <br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"A::print()"&lt;&lt;endl; <br>&nbsp;} <br>};<br>class B:public A <br>{ <br>public:<br>&nbsp;virtual void print(void) <br>&nbsp;{ <br>&nbsp;&nbsp; cout&lt;&lt;"B::print()"&lt;&lt;endl;<br>&nbsp;}; <br>}; <br>class C:public B<br>{<br>public:<br>&nbsp;virtual void print(void)<br>&nbsp;{<br>&nbsp; cout&lt;&lt;"C::print()"&lt;&lt;endl;<br>&nbsp;}<br>};<br>void print(A a) <br>{ <br>&nbsp;&nbsp; a.print(); <br>} <br>void main(void) <br>{ <br>&nbsp;&nbsp; A a, *pa,*pb,*pc; <br>&nbsp;&nbsp; B b; <br>&nbsp;&nbsp; C c; <br>&nbsp;&nbsp; <br>&nbsp;&nbsp; pa=&amp;a; <br>&nbsp;&nbsp; pb=&amp;b; <br>&nbsp;&nbsp; pc=&amp;c; <br>&nbsp;&nbsp; <br>&nbsp;&nbsp; a.print(); <br>&nbsp;&nbsp; b.print(); <br>&nbsp;&nbsp; c.print(); <br>&nbsp;&nbsp; <br>&nbsp;&nbsp; pa-&gt;print(); <br>&nbsp;&nbsp; pb-&gt;print(); <br>&nbsp;&nbsp; pc-&gt;print(); <br>&nbsp;&nbsp; <br>&nbsp;&nbsp; print(a); <br>&nbsp;&nbsp; print(b); <br>&nbsp;&nbsp; print(c); <br>}</p>
<p>A:<br>A::print()<br>B::print()<br>C::print()<br>A::print()<br>B::print()<br>C::print()<br>A::print()<br>A::print()<br>A::print()</p>
<p>--------------------------------------------------------------------------<br>31.<br>试编写函数判断计算机的字节存储顺序是开序(little endian)还是降序(bigendian)</p>
<p>答:<br>bool IsBigendian()<br>{<br>&nbsp;unsigned short usData = 0x1122;<br>&nbsp;unsigned char&nbsp; *pucData = (unsigned char*)&amp;usData;</p>
<p>&nbsp;return (*pucData == 0x22);<br>}</p>
<p>--------------------------------------------------------------------------<br>32.简述Critical Section和Mutex的不同点</p>
<p>答:<br>对几种同步对象的总结<br>1.Critical Section<br>A.速度快<br>B.不能用于不同进程<br>C.不能进行资源统计(每次只可以有一个线程对共享资源进行存取)</p>
<p>2.Mutex<br>A.速度慢<br>B.可用于不同进程<br>C.不能进行资源统计</p>
<p>3.Semaphore<br>A.速度慢<br>B.可用于不同进程<br>C.可进行资源统计(可以让一个或超过一个线程对共享资源进行存取)</p>
<p>4.Event<br>A.速度慢<br>B.可用于不同进程<br>C.可进行资源统计</p>
<p><br>--------------------------------------------------------------------------<br>33.一个数据库中有两个表:<br>一张表为Customer，含字段ID,Name;<br>一张表为Order，含字段ID,CustomerID（连向Customer中ID的外键）,Revenue；<br>写出求每个Customer的Revenue总和的SQL语句。</p>
<p>建表<br>create table customer<br>(<br>ID int primary key,Name char(10)<br>)</p>
<p>go</p>
<p>create table [order]<br>(<br>ID int primary key,CustomerID&nbsp; int foreign key references customer(id) , Revenue float<br>)</p>
<p>go</p>
<p>--查询<br>select Customer.ID, sum( isnull([Order].Revenue,0) )<br>from customer full join [order] <br>on( [order].customerid=customer.id )<br>group by customer.id</p>
<p>--------------------------------------------------------------------------<br>34.请指出下列程序中的错误并且修改<br>void GetMemory(char *p){<br>&nbsp; p=(char *)malloc(100);<br>}<br>void Test(void){<br>&nbsp; char *str=NULL;<br>&nbsp; GetMemory=(str);<br>&nbsp; strcpy(str,"hello world");<br>&nbsp; printf(str);<br>}</p>
<p>A:错误--参数的值改变后，不会传回<br>GetMemory并不能传递动态内存，Test函数中的 str一直都是 NULL。<br>strcpy(str, "hello world");将使程序崩溃。</p>
<p>修改如下:<br>char *GetMemory(){<br>&nbsp; char *p=(char *)malloc(100);<br>&nbsp; return p;<br>}<br>void Test(void){<br>&nbsp; char *str=NULL;<br>&nbsp; str=GetMemory(){<br>&nbsp; strcpy(str,"hello world");<br>&nbsp; printf(str);<br>}</p>
<p>方法二:void GetMemory2(char **p)变为二级指针.<br>void GetMemory2(char **p, int num)<br>{<br>&nbsp;*p = (char *)malloc(sizeof(char) * num);<br>}</p>
<p>--------------------------------------------------------------------------<br>35.程序改错<br>class mml<br>{<br>&nbsp; private:<br>&nbsp;&nbsp;&nbsp; static unsigned int x;<br>&nbsp; public:<br>&nbsp;&nbsp;&nbsp; mml(){ x++; }<br>&nbsp;&nbsp;&nbsp; mml(static unsigned int &amp;) {x++;}<br>&nbsp;&nbsp;&nbsp; ~mml{x--;}<br>&nbsp; pulic:<br>&nbsp;&nbsp;&nbsp; virtual mon() {} = 0;<br>&nbsp;&nbsp;&nbsp; static unsigned int mmc(){return x;}<br>&nbsp;&nbsp;&nbsp; ......&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;<br>};<br>class nnl:public mml<br>{<br>&nbsp; private:<br>&nbsp;&nbsp;&nbsp; static unsigned int y;<br>&nbsp; public:<br>&nbsp;&nbsp;&nbsp; nnl(){ x++; }<br>&nbsp;&nbsp;&nbsp; nnl(static unsigned int &amp;) {x++;}<br>&nbsp;&nbsp;&nbsp; ~nnl{x--;}<br>&nbsp; public:<br>&nbsp;&nbsp;&nbsp; virtual mon() {};<br>&nbsp;&nbsp;&nbsp;&nbsp; static unsigned int nnc(){return y;}<br>&nbsp;&nbsp;&nbsp; ......&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>};</p>
<p>代码片断:<br>mml* pp = new nnl;<br>..........<br>delete pp;</p>
<p><br>A:<br>基类的析构函数应该为虚函数<br>virtual ~mml{x--;}</p>
<p>--------------------------------------------------------------------------<br>36.101个硬币100真、1假，真假区别在于重量。请用无砝码天平称两次给出真币重还是假币重的结论。</p>
<p>答:<br>101个先取出2堆,<br>33,33<br>第一次称,如果不相等,说明有一堆重或轻<br>那么把重的那堆拿下来,再放另外35个中的33<br>如果相等,说明假的重,如果不相等,新放上去的还是重的话,说明假的轻(不可能新放上去的轻)</p>
<p>第一次称,如果相等的话，这66个肯定都是真的,从这66个中取出35个来,与剩下的没称过的35个比<br>下面就不用说了</p>
<p>方法二:<br>第3题也可以拿A(50),B(50)比一下，一样的话拿剩下的一个和真的比一下。<br>如果不一样，就拿其中的一堆。比如A(50)再分成两堆25比一下，一样的话就在<br>B(50)中，不一样就在A(50)中，结合第一次的结果就知道了。</p>
<p>--------------------------------------------------------------------------<br>37.static变量和static 函数各有什么特点？</p>
<p>答:<br>static变量：在程序运行期内一直有效，如果定义在函数外，则在编译单元内可见，如果在函数内，在在定义的block内可见；<br>static函数：在编译单元内可见；</p>
<p>--------------------------------------------------------------------------<br>38.用C 写一个输入的整数,倒着输出整数的函数,要求用递归方法 ;</p>
<p>答:<br>void fun( int a )<br>{<br>&nbsp;printf( "%d", a%10 );<br>&nbsp;a /= 10;<br>&nbsp;if( a &lt;=0 )return;</p>
<p>&nbsp;fun( a );<br>}</p>
<p>--------------------------------------------------------------------------<br>39.写出程序结果:<br>void Func(char str[100])<br>{<br>&nbsp; printf("%d\n", sizeof(str));<br>}</p>
<p>答:<br>4<br>分析:<br>指针长度</p>
<p>--------------------------------------------------------------------------<br>40.int id[sizeof(unsigned long)];<br>&nbsp;&nbsp;&nbsp; 这个对吗？为什么??</p>
<p>答:<br>对<br>这个 sizeof是编译时运算符，编译时就确定了<br>可以看成和机器有关的常量。</p>
<p><br>本文主要包括二个部分，第一部分重点介绍在VC中，怎么样采用sizeof来求结构的大小，以及容易出现的问题，并给出解决问题的方法，第二部分总结出VC中sizeof的主要用法。 </p>
<p>1、 sizeof应用在结构上的情况 </p>
<p>请看下面的结构： </p>
<p>struct MyStruct </p>
<p>{ </p>
<p>double dda1; </p>
<p>char dda; </p>
<p>int type </p>
<p>}; </p>
<p>对结构MyStruct采用sizeof会出现什么结果呢？sizeof(MyStruct)为多少呢？也许你会这样求： </p>
<p>sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13 </p>
<p>但是当在VC中测试上面结构的大小时，你会发现sizeof(MyStruct)为16。你知道为什么在VC中会得出这样一个结果吗？ </p>
<p>其实，这是VC对变量存储的一个特殊处理。为了提高CPU的存储速度，VC对一些变量的起始地址做了"对齐"处理。在默认情况下，VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。下面列出常用类型的对齐方式(vc6.0,32位系统)。 </p>
<p>类型 <br>对齐方式（变量存放的起始地址相对于结构的起始地址的偏移量） </p>
<p>Char <br>偏移量必须为sizeof(char)即1的倍数 </p>
<p>int <br>偏移量必须为sizeof(int)即4的倍数 </p>
<p>float <br>偏移量必须为sizeof(float)即4的倍数 </p>
<p>double <br>偏移量必须为sizeof(double)即8的倍数 </p>
<p>Short <br>偏移量必须为sizeof(short)即2的倍数 </p>
<p><br>各成员变量在存放的时候根据在结构中出现的顺序依次申请空间，同时按照上面的对齐方式调整位置，空缺的字节VC会自动填充。同时VC为了确保结构的大小为结构的字节边界数（即该结构中占用最大空间的类型所占用的字节数）的倍?/textarea&gt;</p>
<p>&nbsp;</p>
<p>Trackback: <a href="http://tb.blog.csdn.net/TrackBack.aspx?PostId=574158">http://tb.blog.csdn.net/TrackBack.aspx?PostId=574158</a></p><img src ="http://www.cppblog.com/beautykingdom/aggbug/102633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/beautykingdom/" target="_blank">chatler</a> 2009-12-05 23:25 <a href="http://www.cppblog.com/beautykingdom/archive/2009/12/05/102633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>雅虎笔试题 </title><link>http://www.cppblog.com/beautykingdom/archive/2009/11/20/101528.html</link><dc:creator>chatler</dc:creator><author>chatler</author><pubDate>Fri, 20 Nov 2009 15:04:00 GMT</pubDate><guid>http://www.cppblog.com/beautykingdom/archive/2009/11/20/101528.html</guid><wfw:comment>http://www.cppblog.com/beautykingdom/comments/101528.html</wfw:comment><comments>http://www.cppblog.com/beautykingdom/archive/2009/11/20/101528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/beautykingdom/comments/commentRss/101528.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/beautykingdom/services/trackbacks/101528.html</trackback:ping><description><![CDATA[<font size=3>当前位置： 选择试题类型&gt;&gt;答题&nbsp; &nbsp; <br>C试题<br>类型：C试题 | 试题：55道试题（50道选择题，5道问答题）&nbsp;&nbsp;<br>注意: 答题过程如果您不提交答案，或者关闭浏览器退出，我们将不再允许您再次答题。<br>谢谢！ <br>试题 选项 <br>Question 1. (单选)<br>在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值11,所需的关键码比较次数为(3)<br>1. 2<br>2. 3<br>3. 4<br>4. 5<br>Question 2. (单选)<br>设散列表的存储空间大小为19,所用散列函数为h(key)=key mod 19,用开地址线性探查法解决碰撞。散列表的当前状态如下:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 190 194 768 559 582 393 208.现要将关键码值75插入到该散列表中,其地址应为 (1)<br>1. 1<br>2. 11<br>3. 5<br>4. 15<br>Question 3. (单选)<br>作业管理的主要任务包括作业输入、作业处理和作业输出。其中作业处理的工作是Ⅰ.作业调度 Ⅱ.作业控制 Ⅲ.作业后备 (3)<br>1. 只有Ⅰ<br>2. 只有Ⅱ<br>3. Ⅰ和Ⅱ<br>4. 都是<br>Question 4. (单选)<br>系统为了管理文件,设置了专门的数据结构----文件控制块(FC。FCB是在执行下列哪一个系统调用时建立的? (1)<br>1. create<br>2. open<br>3. read<br>4. write<br>Question 5. (单选)<br>下面关于通道的叙述中,正确的是Ⅰ.通道相当于一个功能简单的处理机Ⅱ.通道完成数据输<br>入输出工作Ⅲ.通道与CPU共用一个内存 (4)<br>1. Ⅰ和Ⅱ<br>2. Ⅰ和Ⅲ<br>3. Ⅱ和Ⅲ<br>4. 都是<br>Question 6. (单选)<br>互操作性是指在不同环境下的应用程序可以相互操作,交换信息。要使采用不同数据格式的各种计算机之间能够相互理解,这一功能是由下面哪一层来实现的? (2)<br>1. 应用层<br>2. 表示层<br>3. 会话层<br>4. 传输层<br>Question 7. (单选)<br>在UNIX的Shell程序中,可以使用位置变量。若要指明Shell引用的最近后台进程的号码,可以使用位置变量 (2)<br>1. $$<br>2. $!<br>3. $#<br>4. $-<br>Question 8. (单选)<br>设二叉树根结点的层次为0，一棵深度(高度)为k的满二叉树和同样深度的完全二叉树各有f个结点和c个结点，下列关系式不正确的是： (2)<br>1. f&gt;＝c<br>2. c&gt;f<br>3. f=2k+1-1<br>4. C&gt;2k-1<br>Question 9. (单选)<br>单链表的每个结点中包括一个指针link，它指向该结点的后继结点。现要将指针q指向的新结点插入到指针p指向的单链表结点之后，下面的操作序列中哪一个是正确的？ (3)<br>1. q:=p^.link; p^.link:=q^.link<br>2. p^.link:=q^.link; q:=P^.link<br>3. q^.link:=p^.link; p^.link:=q;<br>4. p^.link:=q; q^.link:=p^,link<br>Question 10. (单选)<br>某二叉树结点的对称序序列为A、B、C、D、E、F、G，后序序列为B、D、C、A、F、G、E。该二叉树结点的前序序列为&nbsp;&nbsp;(2)<br>1. E、G、F、A、C、D、B<br>2. E、A、C、B、D、G、F<br>3. E、A、G、C、F、B、D<br>4. E、G、A、C、D、F、B<br>Question 11. (单选)<br>某二叉树结点的对称序序列为A、B、C、D、E、F、G，后序序列为B、D、C、A、F、G、E。该二叉树对应的树林包括多少棵树？ (2)<br>1. 1<br>2. 2<br>3. 3<br>4. 4<br>Question 12. (单选)<br>某二叉树结点的对称序序列为A、B、C、D、E、F、G，后序序列为B、D、C、A、F、G、E。该二叉树对应的树林结点的层次次序序列为&nbsp;&nbsp;(1)<br>1. E、G、F、A、C、D、B<br>2. E、A、C、B、D、G、F<br>3. E、A、G、C、F、B、D<br>4. E、G、A、C、D、F、B<br>Question 13. (单选)<br>假设就绪队列中有10个进程，系统将时间片设为200ms， CPU进行进程切换要花费10ms。则系统开销所占的比率约为&nbsp;&nbsp;(2)<br>1. 1%<br>2. 5%<br>3. 10%<br>4. 20%<br>Question 14. (单选)<br>长度相同但格式不同的2种浮点数，假设前者阶码长、尾数短，后者阶码短、尾数长，其它<br>规定均相同，则它们可表示的数的范围和精度为： (2)<br>1. 两者可表示的数的范围和精度相同<br>2. 前者可表示的数的范围大但精度低<br>3. 后者可表示的数的范围大且精度高<br>4. 前者可表示的数的范围大且精度高<br>Question 15. (单选)<br>所谓&#8220;变号操作&#8221;是指将一个整数变成绝对值相同但符号相反的另一个整数。假设使用补码表示的8位整数X=10010101，则经过变号操作后结果为：(4)<br>1. 1101010<br>2. 10101<br>3. 11101010<br>4. 1101011<br>Question 16. (单选)<br>设有一个用数组Q[1..m」表示的环形队列，约定f为当前队头元素在数组中的位置，r为队尾元素的后一位置(按顺时针方向)，若队列非空，则计算队列中元素个数的公式应为：(2)<br>1. r-f<br>2. (m+r-f) mod m<br>3. (m-r+f)mod m<br>4. (m-r-f) mod m<br>Question 17. (单选)<br>计算机最主要的工作特点是(2)<br>1. 存储程序与自动控制<br>2. 高速度与高精度<br>3. 可靠性与可用性<br>4. 有记忆能力<br>Question 18. (单选)<br>计算机中数据的表示形式是(3)<br>1. 八进制<br>2. 十进制<br>3. 二进制<br>4. 十六进制<br>Question 19. (单选)<br>下面列出的四种存储器中，易失性存储器是(1)<br>1. RAM<br>2. ROM<br>3. PROM<br>4. CD-ROM<br>Question 20. (单选)<br>I/O接口位于 (2)<br>1. 总线和设备之间<br>2. CPU和I/O设备之间<br>3. 主机和总线之间<br>4. CPU和主存储器之间<br>Question 21. (单选)<br>计算机硬件能直接识别和执行的只有(4)<br>1. 高级语言<br>2. 符号语言<br>3. 汇编语言<br>4. 机器语言<br>Question 22. (单选)<br>具有多媒体功能的微型计算机系统中，常用的CD-ROM是(2)<br>1. 只读型大容量软盘<br>2. 只读型光盘<br>3. 只读型硬盘<br>4. 半导体只读存储器<br>Question 23. (单选)<br>微机中1K字节表示的二进制位数是(4)<br>1. 1000<br>2. 8x1000<br>3. 1024<br>4. 8x1024<br>Question 24. (单选)<br>下列字符中，ASCII码值最小的是(2)<br>1. a<br>2. A<br>3. x<br>4. Y<br>Question 25. (单选)<br>OSI(开放系统互联)参考模型的最低层是(3)<br>1. 传输层<br>2. 网络层<br>3. 物理层<br>4. 应用层<br>Question 26. (单选)<br>在面向对象的系统中，系统责任的良好分配原则是(3)<br>1. 在类之间均匀分配<br>2. 集中分配在少数控制类中<br>3. 根据交互图的消息进行分配<br>4. 根据个人喜好进行分配<br>Question 27. (单选)<br>在CMM模型中，对软件成熟度有以下5个级别，请从低到高排序<br>a 初始级:软件过程的特点是无秩序的，偶尔甚至是混乱的。几乎没有什么过程是经过定义的,成功依赖于个人的努力。<br>b 优化级:利用来自过程和来自新思想、新技术的先导性试验的定量反馈信息，使持续过程改进成为可能。<br>c 已定义级:管理活动和工程活动两方面的软件过程均已文档化、标准化、并集成到组织的标准软件过程。<br>d 已管理级:已采集详细的有关软件过程和产品质量的度量,无论软件过程还是产品均得到定量了解和控制。<br>e 可重复级:已建立基本的项目管理过程去跟踪成本、进度和功能性。必要的过程纪律已经就位，使具有类似应用的项目。能重复以前的成功。(3)<br>1. acdbe<br>2. adceb<br>3. aecdb<br>4. abcde<br>Question 28. (单选)<br>在下面所列举的逻辑测试覆盖中，测试覆盖最强的是(3)<br>1. 条件覆盖<br>2. 条件组合覆盖<br>3. 语句覆盖<br>4. 条件及判定覆盖<br>Question 29. (单选)<br>一般来说，在软件维护过程中，大部分工作是由什么引起的(3)<br>1. 适应新的软件环境<br>2. 适应新的硬件环境<br>3. 用户的需求改变<br>4. 程序的可靠性<br>Question 30. (单选)(2)<br>PSP是？<br>1. 团队软件过程<br>2. 个体软件过程<br>3. 过程改进过程<br>4. 质量管理过程<br>Question 31. (单选)<br>假定a和b为int型变量,则执行以下语句后b的值为&nbsp; &nbsp;(4)<br>a=1; b=10; do { b-=a; a++; } while (b--&lt;0); <br>1. 9<br>2. -2<br>3. -1<br>4. 8<br><br>Question 32. (单选)<br>设有以下宏定义: #define N 3 ，<br>#define Y(n) ( (N+1)*n) ，<br>则执行语句:z=2 * (N+Y(5+1));后,z的值为 (3)<br>1. 出错<br>2. 42<br>3. 48<br>4. 54<br>Question 33. (单选)<br>执行以下程序段后,m的值为&nbsp;&nbsp;(1)<br>int a[2][3]={ {1,2,3},{4,5,6} }; <br>int m,*p; <br>p=&amp;a[0][0]; <br>m=(*p)*(*(p+2))*(*(p+4));<br>1. 15<br>2. 14<br>3. 13<br>4. 12<br>Question 34. (单选)<br>有以下程序 <br>main() <br>{ char a[]="programming", b[]="language"; <br>char *p1,*p2; <br>int i; <br>p1=a; p2=b; <br>for(i=0;i&lt;7;i++) <br>if(*(p1+i)==*(p2+i)) printf("％c",*(p1+i)); } <br>输出结果是 (4)<br>1. gm<br>2. rg<br>3. or<br>4. ga<br>Question 35. (单选)<br>有以下程序 <br>int fun(int x,int y,int *cp,int *dp) <br>{ *cp=x+y; *dp=x-y; } <br>main() <br>{ int a, b, c, d; <br>a=30; b=50; <br>fun(a,b,&amp;c,&amp;d); <br>printf("%d,%d<br>", c, d); } <br>输出结果是 (3)<br>1. 50,30<br>2. 30,50<br>3. 80,-20<br>4. 80,20<br>Question 36. (单选)<br>下述标识符中, 合法的用户标识符是(4)<br>1. A#C<br>2. getch<br>3. void<br>4. sizeOf<br>Question 37. (单选)<br>以下选项中合法的字符常量是(3)<br>1. A<br>2. '10'<br>3. 68<br>4. D<br>Question 38. (单选)<br>以下叙述正确的是 (3)<br>1. 在C程序中，main函数必须位于程序的最前面<br>2. C程序的每行中只能写一条语句<br>3. C语言本身没有输入输出语句<br>4. 在对一个C程序进行编译的过程中，可发现注释中的拼写错误<br>Question 39. (单选)<br>以下叙述中不正确的是 (4)<br>1. 在不同的函数中可以使用相同名字的变量<br>2. 函数中的形式参数是局部变量<br>3. 在一个函数内定义的变量只在本函数范围内有效<br>4. 在一个函数内的复合语句中定义的变量在本函数范围内有效<br>Question 40. (单选)<br>设int类型的数据长度为2个字节，则 unsigned int 类型数据的取值范围是 (2)<br>1. 0~255<br>2. 0~65535<br>3. -32768~32767<br>4. -256~255<br>Question 41. (单选)<br>某文件中定义的静态全局变量(或称静态外部变量)其作用域是 (2)<br>1. 只限某个函数<br>2. 本文件<br>3. 跨文件<br>4. 不限制作用域<br>Question 42. (单选)<br>语句:printf("%d"，12 &amp; 012)；的输出结果是 (3)<br>1. 12<br>2. 012<br>3. 8<br>4. 6<br>Question 43. (单选)<br>设int x=4; 则执行以下语句: x+=x-=x-x;后,x的值为 (3)<br>1. 0<br>2. 4<br>3. 8<br>4. 12<br>Question 44. (单选)<br>while(!x)中的(!x)与下面条件等价。 (4)<br>1. x==1<br>2. x!=1<br>3. x!=0<br>4. x==0<br>Question 45. (单选)<br>已知int i,a;执行语句: i=(a=2*3,a*5),a+6;后,变量i的值是 (3)<br>1. 6<br>2. 12<br>3. 30<br>4. 36<br>Question 46. (单选)<br>整型变量x和y的值相等、且为非0值，则以下选项中，结果为零的表达式是 (4)<br>1. x || y<br>2. x | y<br>3. x &amp; y<br>4. x ^ y<br>Question 47. (单选)<br>x、y、z被定义为int型变量，若从键盘给x、y、z输入数据，正确的输入语句是&nbsp;&nbsp;(2)<br>1. INPUT x、y、z;<br>2. scanf("%d%d%d",&amp;x,&amp;y,&amp;z);<br>3. scanf("%d%d%d",x,y,z);<br>4. read("%d%d%d",x,y,z);<br>Question 48. (单选)<br>以下各选项企图说明一种新的类型名，其中正确的是 (2)<br>1. typedef v1 int;<br>2. typedef int v3;<br>3. typedef v4: int;<br>4. typedef v2=int;<br>Question 49. (单选)<br>char x=3,y=6,z;<br>z=x^y&lt;&lt;2;<br>则z的二进制值是 (2)<br>1. 10100<br>2. 11011<br>3. 11100<br>4. 11000<br>Question 50. (单选)<br>若有说明：int i, j=2，*p=&amp;i;，则能完成i=j赋值功能的语句是 (2)<br>1. i=*p;<br>2. *p=*&amp;j;<br>3. i=&amp;j;<br>4. i=**p;<br>Question 51. (问答)<br>给定一个整型变量a，写两段代码，第一个设置a的bit 3，第二个清除a的bit 3。在上两个操作中，要保持其它位不变。<br>a|=0x4;<br>int b=a&amp;0x7;<br>a&gt;&gt;=4;<br>a=(a&lt;&lt;4)|b;<br>Question 52. (问答)<br>有双向循环链表结点定义为：<br>struct node<br>{ int data;<br>struct node *front,*next;<br>};<br>有两个双向循环链表A，B，知道其头指针为：pHeadA,pHeadB，请写一函数将两链表中dat<br>a值相同的结点删除<br>struct node<br>{ int data;<br>struct node *front,*next;<br>};<br>node* del(node *pHead){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if(pHead==pHead-&gt;next){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;free(pHead);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; return NULL;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;node *p=pHead;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;pHead-&gt;next-&gt;front=pHead-&gt;front;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;pHead-&gt;front-&gt;next=pHead-&gt;next;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;pHead=pHead-&gt;next;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;free(p);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return pHead;<br>}<br>void delequ(node*pHeadA,node *pHeadB){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;node *pA=pHeadA;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;node *pB;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int flag;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;do{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; flag=0;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; pB=pHeadB;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; do{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if(pB-&gt;data==pA-&gt;data){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if(pA==pHeadA){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; pHeadA=pA=del(pHeadA);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; flag=1;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;else{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; pA=del(pA);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;pB=del(pB);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;break;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;pB=pB-&gt;next;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; }while(pB!=pHeadB);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; if(flag==0){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;pA=pA-&gt;next;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; }<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}while(!pA &amp;&amp; !pB &amp;&amp; (flag||(pA!=pHeadA)));<br>}<br>Question 53. (问答)<br>编程实现：找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为"c<br>ad"char* constr(char *A,char *B){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int lenA=strlen(A),lenB=strlen(B);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int itmp,conlen=0;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;char *pequ,*pH=NULL;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;char *pA,*pB,*pA2,*pB2;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for(pA=A;pA-A&lt;lenA-conlen;pA++){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; for(pB=B;pB-B&lt;lenB-conlen;){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if(*pB==*pA){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;pA2=pA+1;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;pB2=pB+1;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for(itmp=1;*pA2==*pB2 &amp;&amp; pA2++-A&lt;lenA &amp;&amp; pB2++-B&lt;lenB;itmp++);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if(itmp&gt;conlen){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; conlen=itmp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; pH=pA;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;pB++;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; }<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;pequ=(char*)malloc(conlen+1);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;memcpy(pequ,pH,conlen);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;*(pequ+conlen)='\0';<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return pequ;<br>}<br>Question 54. (问答)<br>说明关键字static和volatile的含义<br>static用于外部变量或者函数时，限制了它们的作用域为文件内部；static也可以用于内<br>部变量，这样，内部变量在每次函数调用时都为同一存储，值具有连续性。<br>volatile说明了一个变量的值是会随机变化的，即使程序没有对它进行任何赋值操作。它<br>告诉编译器的优化处理器，这些变量是实实在在存在的，在优化过程中不能无故消除，这样就保证了编译后的代码在每次操作是从变量地址<br>处取数。<br>Question 55. (问答)<br>编程实现：把十进制数(long型)分别以二进制和十六进制形式输出，不能使用printf系列<br>库函数<br>void put(long data){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;long mask=0x1&lt;&lt;8*sizeof(long)-1);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int i;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;char c;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if(data&amp;mask)<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;putchar('1');<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;else<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;putchar('0');<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mask=0x1&lt;&lt;8*sizeof(long)-2);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for(i=1;i&lt;8*sizeof(long);i++){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; if(data&amp;mask)<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;putchar('1');<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; else<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;putchar('0');<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; mask&gt;&gt;=1;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;putchar('\n');<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mask=0xf&lt;&lt;8*sizeof(long)-4);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;c=(data&amp;mask)&gt;&gt;(8*sizeof(long)-4);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if(c&lt;10)<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;putchar(c+'0');<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;else<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;putchar(c+'a');<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mask=0xf&lt;&lt;(8*sizeof(long)-8);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for(i=1;i&lt;2*sizeof(long);i++){<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; c=(data&amp;mask)&gt;&gt;(8*sizeof(long)-4*i-4);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; if(c&lt;10)<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;putchar(c+'0');<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; else<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;putchar(c+'a');<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; mask&gt;&gt;=4;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>}<br>注意: 一旦您提交答题后，将不能再修改您的答案</font>
<div>转自：</div>
<div>http://blog.chinaunix.net/u2/67780/showart.php?id=2099687</div>
<img src ="http://www.cppblog.com/beautykingdom/aggbug/101528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/beautykingdom/" target="_blank">chatler</a> 2009-11-20 23:04 <a href="http://www.cppblog.com/beautykingdom/archive/2009/11/20/101528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ms,google,vmware,nvidia美国总部面试题</title><link>http://www.cppblog.com/beautykingdom/archive/2009/02/24/74733.html</link><dc:creator>chatler</dc:creator><author>chatler</author><pubDate>Tue, 24 Feb 2009 01:31:00 GMT</pubDate><guid>http://www.cppblog.com/beautykingdom/archive/2009/02/24/74733.html</guid><wfw:comment>http://www.cppblog.com/beautykingdom/comments/74733.html</wfw:comment><comments>http://www.cppblog.com/beautykingdom/archive/2009/02/24/74733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/beautykingdom/comments/commentRss/74733.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/beautykingdom/services/trackbacks/74733.html</trackback:ping><description><![CDATA[给一个整数数组，其中包含重复的数字，例如1，2，4，2，5，重复的就是2。设计算法找出重复的数。
<br>建议：Hashtable
<br>
<br>给出一个inode，写一段代码遍历这个inode包含的所有文件及目录
<br>建议：递归
<br>
<br>给出随机字符组成的两个字符串，判断是否由相同的字符组成。例如abbffgg==fgbagfb
<br>建议：Hashtable
<br>
<br>写一迷宫探路的程序，使用多线程加快探路速度
<br>
<br>写一个判断找出字符串中最长的对称字串。例如：ababba中最长的对称子串为abba
<br>
<br>写一个字符串匹配的程，包括?（一个字符）和*（任意个字符）。例如：a?*bba和afbba匹配
<br>
<br>写一个查找子串的函数。例如：实现C函数中的strstr函数
<br>
<br>建造一座桥，如何设计，怎样测试
<br>
<br>在地球和火星上各有一个设备，地球上发送1+1，火星上计算结果并传回地球。但是地球接到的是3，问哪些情况可能导致这个问题
<br>
<br>Linux2.4和2.6有啥区别
<br>
<br>spinlock和semaphore有啥区别
<br>
<br>deadlock是咋回事
<br>
<br>page和segment有啥区别
<br>
<br>spinlock在linux里面如何实现，x86架构里面spinlock如何实现
<br>
<br>在控制台打ls命令，从输入命令到屏幕上显示结果，Linux中如何是处理的，具体流程是什么
<br>
<br>给一个没排序的整数数组和一个值，找出数组中那两个数之和等于这个值，算法复杂度
<br>
<br>用C如何模拟C++中的class。父类和继承子类的析构函数如何实现？
<br>
<br>给四个硬币放在四个位置1234，初始状态是正反反正，给三个操作：1.翻转第一个硬币2.把每个硬币向右移动一位。例如：
<br>1234》4123。3.把第二，第三个银币同时翻转。问如何使用最少的操作将银币翻成反反正正。如何处理100个硬币，初始状态随机？
<br>建议：最短路径算法，每个节点往外发三条边
<br>
<br>排序有哪几种算法，时间，空间复杂度，稳定性，O(n)的算法
<br>
<br>给几篇扫描的手写文章，用这些文章里的各个单词的图片拼成另一篇文章，这篇文章的内容已给出，每个图只能用一次。如果使用哈希表，如何处理哈希函
数的不平衡？有的词用的很多，那么这个词在哈希表的对应位置会链上很多图片，而有的词用得少，那么在哈希表的对应位置只有很少图片。
<br>
<br>给一个数，如何count这个数的二进制表示里面有多少个1.例如5=101，有2个1。各种算法的时间空间复杂度，在不同的CPU架构下性能比较。
<br>
<br>如何在stack上分配内存。相对malloc在heap上分配。
<br>建议：函数alloca
<br>
<br>线程和进程的区别，相同进程的2个线程AB，线程A如何访问直接线程B的数据？
<br>
<br>volatile关键字有啥意义？哪些情况使用？
<br>
<br>SCSI设备在处理DMA时有什么要注意的地方
<br>建议：31或32位mask
<br>
<br>Linux系统调用如何开始
<br>建议：中断门
<br>
<br>网络设备处理收到的package有什么处理方式
<br>建议：中断+poll
<br>
<br>给8个0/1信号，和四个加法器。加法器的输入是三位信号，两位数据，一位进位。输出两位，一位数据，一位进位。例如输入数据位1，1，进位0，输出数据位0，进位1。输入数据1，0，进位1，输出数据1，进位0。
<br>要求输出1的个数。例如输入11110000，输出0100（4）
<br>
<br>C语言里面^号什么意思
<br>
<br>给一个函数，里面只有一个int数组包含10个数a[0...9]，并给这个数组的每个数减4，但是减的时候给第11个数a[10]（下标溢出）也减了4，在某些架构中可能会发生什么？
<br>建议：死循环。修改返回地址，程序在调用（call）完这个函数以后返回到call指令的地址，而不是call指令接下去的指令的地址
<br>
<br>一个函数中有两段代码，第一段汇编使用powerpc的"add."指令，接下去一段C使用if判断某个条件是否成立，但是尽管if的条件肯定为true，有时if却判断条件不成立，为什么？
<br>建议：add.修改condition寄存器CR0状态，if判断条件时使用同一个寄存器，编译器重排指令导致if执行时CR0的值并不是if条件计算出的值。<img src ="http://www.cppblog.com/beautykingdom/aggbug/74733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/beautykingdom/" target="_blank">chatler</a> 2009-02-24 09:31 <a href="http://www.cppblog.com/beautykingdom/archive/2009/02/24/74733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>微软亚洲技术中心面试题</title><link>http://www.cppblog.com/beautykingdom/archive/2009/02/18/74214.html</link><dc:creator>chatler</dc:creator><author>chatler</author><pubDate>Wed, 18 Feb 2009 15:40:00 GMT</pubDate><guid>http://www.cppblog.com/beautykingdom/archive/2009/02/18/74214.html</guid><wfw:comment>http://www.cppblog.com/beautykingdom/comments/74214.html</wfw:comment><comments>http://www.cppblog.com/beautykingdom/archive/2009/02/18/74214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/beautykingdom/comments/commentRss/74214.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/beautykingdom/services/trackbacks/74214.html</trackback:ping><description><![CDATA[微软亚洲技术中心面试题 <br>1.进程和线程的差别。 <br><br>线程是指进程内的一个执行单元,也是进程内的可调度实体. <br><br>与进程的区别: <br><br>(1)调度：线程作为调度和分配的基本单位，进程作为拥有资源的基本单位 <br><br>(2)并发性：不仅进程之间可以并发执行，同一个进程的多个线程之间也可并发执行 <br><br>(3)拥有资源：进程是拥有资源的一个独立单位，线程不拥有系统资源，但可以访问隶属于进程的资源. <br><br>(4)系统开销：在创建或撤消进程时，由于系统都要为之分配和回收资源，导致系统的开销明显大于创建或撤消线程时的开销。 <br><br>2.测试方法 <br><br>人工测试：个人复查、抽查和会审 <br><br>机器测试：黑盒测试和白盒测试 <br><br>2.Heap与stack的差别。 <br><br>Heap是堆，stack是栈。 <br><br>Stack的空间由操作系统自动分配/释放，Heap上的空间手动分配/释放。 <br><br>Stack空间有限，Heap是很大的自由存储区 <br><br>C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。 <br><br>程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行 <br><br>3.Windows下的内存是如何管理的? <br><br>4.介绍.Net和.Net的安全性。 <br><br>5.客户端如何访问.Net组件实现Web Service? <br><br>6.C/C++编译器中虚表是如何完成的? <br><br>7.谈谈COM的线程模型。然后讨论进程内/外组件的差别。 <br><br>8.谈谈IA32下的分页机制 <br><br>小页(4K)两级分页模式，大页(4M)一级 <br><br>9.给两个变量，如何找出一个带环单链表中是什么地方出现环的? <br><br>一个递增一，一个递增二，他们指向同一个接点时就是环出现的地方 <br><br>10.在IA32中一共有多少种办法从用户态跳到内核态? <br><br>通过调用门，从ring3到ring0，中断从ring3到ring0，进入vm86等等 <br><br>11.如果只想让程序有一个实例运行，不能运行两个。像winamp一样，只能开一个窗口，怎样实现? <br><br>用内存映射或全局原子(互斥变量)、查找窗口句柄.. <br><br>FindWindow，互斥，写标志到文件或注册表,共享内存。. <br><br>12.如何截取键盘的响应，让所有的&#8216;a&#8217;变成&#8216;b&#8217;? <br><br>键盘钩子SetWindowsHookEx <br><br>13.Apartment在COM中有什么用?为什么要引入? <br><br>14.存储过程是什么?有什么用?有什么优点? <br><br>我的理解就是一堆sql的集合，可以建立非常复杂的查询，编译运行，所以运行一次后，以后再运行速度比单独执行SQL快很多 <br><br>15.Template有什么特点?什么时候用? <br><br>16.谈谈Windows DNA结构的特点和优点。
<img src ="http://www.cppblog.com/beautykingdom/aggbug/74214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/beautykingdom/" target="_blank">chatler</a> 2009-02-18 23:40 <a href="http://www.cppblog.com/beautykingdom/archive/2009/02/18/74214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>