计算机笔试题大全Word文档下载推荐.docx
- 文档编号:8652207
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:61
- 大小:145.64KB
计算机笔试题大全Word文档下载推荐.docx
《计算机笔试题大全Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机笔试题大全Word文档下载推荐.docx(61页珍藏版)》请在冰点文库上搜索。
链表:
知道构建动态链表,删除节点,翻转链表,两两翻转,求环节点,求两链表交点足够。
字符串:
知道高效翻转,回文足够,如果还能完整的写出KMP查找就基本完美。
树:
知道二叉树的三种递归遍历,非递归遍历,查找,知道两种遍历求第三种,再深一点,知道如何分层遍历,如何求两节点距离,就通吃了。
其它:
队列、栈、哈希表的特性,动态规划。
只要上边的只是准备的差不多,算法的笔试和面试题问题就不大了。
本人的本科和研究生都是机械,没学过这些东西,从9月17的第一场微软笔试开始,边考边学,就靠这点东西闯笔试和过面试。
15分的项目分:
如果你没有什么项目,但是你的1很好,那你这部分分基本拿到了,其实这部分很容易作假,一个项目你只是打酱油的,但是你做过了解,说出个大概就够了。
本人有10几个玩具似的小网站,有一页半简历,那些面试官一看就烦,除了XX问了一个感兴趣的项目,其它的都是说挑一个说,这就很简单,凭看的一些东西,我甚至可以说G公司的BigTable是我做的,面试官也不一定懂您的项目。
15分的知识面和扯淡分:
这方面不太好提高,根据面试官和应聘职位可能不同,最好是事先取经。
本人被问过:
PageRank,搜索引擎倒正排索引,数据库优化,web性能优化,浏览器渲染,web安全,爬虫,设计模式,软件架构,推荐系统,加密算法,服务器推等等。
一般来说公司不会根据这部分毙人,而且问的东西基本都能扯。
但是有些公司会根据这部分毙人。
10分的开发语言细节分:
根据个人擅长的语言,可能会问一些细节问题,来考察一个人对语言的掌握程度以及学习态度。
比如C的指针函数、函数指针,高级语言的值类型,引用类型,值传参和引用传参,托管语言的GC等等。
5分的其他:
主要是沟通能力,印象以及有些公司要求的英语。
个人认为如果上边说的你准备差不多了,那么你就有很大可能进入一个顶级互联网公司。
举个人三个例子:
1.碰巧你霸面被批准了,碰巧你看过搜索引擎中爬虫如何爬取和分析正文,碰巧你了解过AJAX,碰巧你知道MVC,那么你过一面了,碰巧你会堆排序,碰巧你会两个链表求交,那么你过二面了,碰巧你的C语言能写出程序,那么你会把这个不复杂但代码有点多程序写出来,碰巧你有一点重构的概念,把你丑陋的代码改的优雅漂亮些,那么你有一个17W的offer了。
2.碰巧笔试后备胎中的你得到了面试机会。
碰巧你做的一个项目很合面试官的口味,碰巧你知道web常见的安全漏洞,碰巧你写过两个链表求教,那么你过一面了,碰巧你准备上述的2,碰巧你能写出堆排和知道ORM,碰巧你能做出简单的链表翻转,那么你过二面了。
碰巧你准备上述的2,碰巧你了解过WEB服务,碰巧你知道ORM,碰巧你知道什么时候用堆排,而且碰巧会基数排序,那么你有一个19W的offer了。
3.碰巧笔试后备胎中的你得到了面试机会。
碰巧你知道MVC,碰巧你了解过一些CSS和JS基本知识,碰巧你了解过浏览器渲染而且用这个解释一个网站的加载顺序,碰巧你学过web性能扩充,那么你过一面了。
碰巧你对web性能优化比较了解,知道pagerank,碰巧你看过大型站点的架构并能说出个大概,那么你有一个20W的offer了。
拿到许多互联网公司的offer后,我发现难度最大的是一个创业公司的。
对于招聘如此不严谨的企业,我不仅有点担心,若企业招的少无所谓,招的多话,若不能和聘用者解除劳动关系,那么招聘上风险不亚于一个重大项目的风险,好的方面是招人多的企业总是有一些没技术含量的活需要大量的人来干。
本人计算机小硕,去年找工作时笔试面试参加了不少,打了不少酱油,没啥大offer,只是抛砖引玉的将求职路上的一些经验与大家分享下,希望对后来人能有所帮助。
1.腾讯后台开发(1面-2面-hr面-实习offer)
没参加笔试,直接同学推荐过去面的,前两面都是技术面,1面简单问些项目经验和自己所擅长的专业知识;
2面项目问的比较深入,还有一些算法和系统架构设计方面的问题;
hr面就是简单的聊聊。
暑期在腾讯实习了两个月,有导师专门负责指导,期间做了一个小项目,收获不少,与leader在留用沟通时,表示不愿留在深圳,最后也没发正式offer。
腾讯大部分都是年轻人,整体氛围比较轻松,电子化办公也很完善,弹性工作制,加班完全凭自愿,晚上8点后会有免费的水果面包饮料,9点后的加班出租车票可以报销,整个公司以产品为主导,产品经理有很强的话语权。
2.360服务器端开发(笔试):
校招参加的第一次笔试,题目不难,可惜编程题写程序时犯了个低级错误,显得的水平很业余,没有面试机会,其实个人和职位要求还是很match的。
3.XX云计算研发(笔试-1面-2面-3面-offer)
笔试都是大题,比较开放式,涉及比较广有线程调度、算法、语言、系统设计等,比较符合个人胃口。
1面刚开始直接就写两个程序,然后问了问项目以及一些数据结构和网络方面的知识,只记得其中有个问题是如何判断程序中堆和栈增长方向;
2面是电面,主要问了些算法问题,让设计一个图片存储系统,并进行优化,问的很细,让把主要的数据结构和调度算法都设计出来,然后根据你设计的系统提一些更高的要求并进行优化;
3面是部门经理的电面,也是技术面,但也问了些个人兴趣、性格特点等问题,比如我说喜欢玩Dota,就问我喜欢玩哪种类型的英雄(当然是根据团队需要,缺啥玩啥,哈哈),技术主要以项目为主,问的很深,问了好多项目中涉及到细节的问题,而且问题一针见血,不得不佩服XX还是牛人多,参加的其他面试都没问过这么深入的,不过自己做的项目还是比较胸有成竹的。
3面完第二天也就是国庆前一天就收到了offer,是收到的第一个校招正式offer,今年XX全国招了快2000人,还有不少都是后面补招进来。
4.搜狗C++开发(笔试-面试-offer)
笔试就是选择题和2道程序题,面试总共就1面不到30分钟,问题包括项目经验、多线程网络编程方面的问题和一个微博系统的设计问题,当场就给了口头offer,2周后发了正式offer。
搜狗今年扩张,待遇开的比XX高点,还有股票,不过整个招聘过程让人感觉不靠谱啊,太容易得到的反而有点犹豫哈。
5.淘宝系统工程师(笔试-1面-2面-3面)
笔试包括选择题、大题、附加题和选做题,选择题都是基础知识,大题包括系统设计和算法题。
3面同一天完成,通过的话会让你留下等待下一轮面面试,1面先让讲了讲项目经验,然后问了些算法和系统设计方面的问题;
2面和1面差不多,然后说了下系统工程师的具体职责,涉及面很广,有Linux内核开发、分布式开发还有些类似于运维方面的工作,问了下自己希望从事哪方面的研发;
3面是2个人,hr和技术经理吧,依然问了些技术问题,然后hr问了下工作意向offer情况等等,表示自己不想去杭州希望去北京,最后裁环⒄給ffer。
6.网易C++开发(笔试-技术面-hr面)
笔试是选择题、填空题和大题,有关于数据库和语言方面的知识,还有些算法题;
技术面主要问了些关于C++语言方面的知识和项目经验,还有个数学证明题(汗,当时没准备,答得比较扯);
hr面主要了解工作意、期望薪水和offer情况等,我表示不想去杭州,后来也没发offer。
7.新浪云计算开发(笔试-面试-offer)
笔试考察范围很广,涉及到数据结构、网络、安全、Linux常用命令、内核、算法、程序设计,以及项目管理等方面;
面试就一轮,3个面试官,2个不同部门的经理和1个hr,主要问了些项目经验,然后根据简历问了些关于内核和网络编程方面的知识,以及一些在项目中遇到的困难如何克服等等,还问了下期望薪水以及希望户口落在哪个城市的问题。
发offer前有hr电话沟通谈户口情况和期望工资,最后给的offer待遇和XX一样,但是户口不能给保证,只说有很大的可能性(去年解决了55%),最后放弃了。
8.人民搜索软开(笔试-面试)
笔试是选择题+大题,面试都是被拉过去给面试官增加经验值的,也是以写程序为主,并且写完后要不断的去优化优化再优化。
人民搜索据说加班挺多,但是待遇还是很给力,尤其是保证解决北京户口。
小结:
互联网企业比较看重算法和项目经验,语言倒是其次,其实面试时问项目经验,并不是单纯的考察你做过什么,而是看你是如何做,为什么这么做,有没有更好的解决方案,做项目时问题考虑的是否全面,是看你思维的方式,对整个计算机系统的认识,更加看重你的发展潜力。
互联网公司太多是弹性工作制,相对比较自由,加班情况通常比较多,不过周末一般不加班。
建议(希望从事技术方面工作的同学)
1.多看些经典书籍,《UNIX环境高级编程》《深入理解计算机系统》《深入理解Linux内核》《UNIX网络编程卷一》《编程珠玑》《C++Primer》《C和指针》《编程之美》等等,这些书籍能够使你对整个计算机系统有更深入的理解,并且其中有许多经典的算法和数据结构可以参考学习,看完前四本书,我就感觉自己对底层编程的认识上升了一个档次,后面四本书主要是针对面试时一些语言和算法问题准备的。
2.多看看经典的开源代码,如Linux内核代码等,因为项目原因,看了不少Linux内存方面和Solaris下的源代码,里面一些精妙的数据结构和系统架构的设计,真的能使人获益匪浅。
3.多动手做些实际项目的开发,实践出真知,在实践中发现并解决问题,能够快速的提高技术水平和思维方式。
通过这一段我找互联网实习的经历说说我个人对于准备互联网工作的见解,希望对有意互联网企业的同学有一点帮助。
虽然是找实习的经历,但很多实习都是可以转正的,所以也差不多。
而且,即将开始的互联网校招我应该绝大多数不会参加,所以那时候也没啥好写的了。
我这里说的互联网企业也包括一些软件公司。
我只投过IBM,腾讯,XX,MS,人搜,拿到过IBM,MS,人搜的offer。
个人情况:
1.有过工作经历;
项目经验一般,没什么大牛项目,简历上只写了两个项目。
文字+叙述能力不错,简历写的还可以,投简历至今包括国企没挂过简历(我简历两页纸,我至今没挂过简历,一页/两页随自己,真的没有什么必须一页的要求);
2.算法还勉强可以写写,两次校内赛进一次决赛,没奖。
校内个人赛去年的阿里巴巴那个,好像是第23名。
操作系统、数据库、网络等均一般。
So,实力真心一般。
周围有一大票拿了一圈offer的人嗯,希望那些大牛们有空也可以写个帖子什么的分享下。
建议的准备:
1.其实我觉得“项目”、“算法”、“操作系统”、“数据库”、“网络”等,只要取其一你比较精通,面试的时候引面试官往你精通的方向侃,基本搞定个互联网offer问题不大。
2.我是走的算法这条路,POJ上几十道题吧,POJ首页上介绍的《程序设计导引及在线实践》做完了,大概有100道题,这100道题其实比较水,然后就是有什么比赛神马的都打打酱油嗯。
刘汝佳的白书《算法竞赛入门经典》看完了,题没怎么做,黑书《算法艺术与信息学竞赛》没看。
《算法导论》完全就是当参考书用,跟新的一样。
《编程之美》看了个半吊子,《程序员面试宝典》看了一遍。
我个人觉得代码这个东西,首先要手写流利,数据结构一定要精通,一般的单链表的操作、排序等等,一定要流利的写出来,然后就是不要默写书上的,要做到自己能敲出自己的代码实现排序等等。
这些都做到了才需要去看一些算法,OJ上敲一些水题,看看《编程之美》的第二三部分基本就够了。
个人面试经历:
1.研一暑期投了IBM、腾讯。
IBM是通过IBM俱乐部投的,直接投的青出于蓝的暑期实习项目,通过俱乐部投的命中率很高。
所以参加个什么俱乐部混混还是有点用的,学校的类似俱乐部还蛮多的,腾讯、MS、XX俱乐部等等。
IBM我投了两个岗位,两个岗位我都收到了offer,但最后实验室不放人没去成嗯。
面的不难,包括数据结构单链表的操作,单例模式,设计数据库等等,代码都没写多少。
腾讯是投的暑期实习,腾讯的我参加了两次笔试了,题型都是一大票选择题,然后一个程序填空,最后一个开放性的题。
腾讯面的有点难度,至少对于当时的我有点难度,包括read/fread的区别,strcpy/memcpy的区别,写堆排序,求一堆字符串的共同后缀。
面的不好,挂掉了。
2.研二暑期投了MS、腾讯、XX、人搜。
MS的笔试实在太早了,我编程之美完全还没动,笔的很烂,直接没有面试机会。
后来我找人给我内推了个,然后得到了个面试机会,与一个老外全英文沟通了一个小时,技术倒是问的不多,大致就是一些数据结构的设计,可offer给的太晚,给我电话的时候他话还没说完我就说我可能最近去不了,想拖一下这个offer,后来就弄丢了,他们招了别人。
我还是蛮向往去ms体验一下的,唉可惜实验室放实习的机会太少了。
XX笔试就挂了,挂的挺莫名其妙的,海笔海面全看人品,笔试题很多都是编程之美上的。
腾讯面的还有点难度的,包括手写二分查找、一堆字符串的最长后缀(字典树或者后缀数组)、10w个字符串找出有相同后缀的字符数目最多的那一些(我用的哈希)、C++多重继承的虚函数内存分布、手写一个虚函数的使用例子、多线程的通信和管理、HTTP协议等。
明显这次面的比研一那次强太多了,基本所有问题都答上来了,和面试官相谈甚欢。
可是,可是,居然挂掉了,也是莫名其妙。
人搜的笔试好像是5道题吧,除了最后一道题有一点算法外,其他的还好吧,难度比不上XX的。
但面试就很难了,问了包括n!
尾部0的个数(编程之美有),链表的重复结点(编程之美有),一个矩阵权重边有关的dp的题,二叉树的序列化与反序列化,一个类似于最长递增子序列但比这个难的dp题(最长递增子序列编程之美有),单例模式,知道节点数求完全二叉树的最后一层的最右边一个结点的0(n)的方法,一个接电线的题(本次面试最难的一个题,搜索质量的经理面的),query结果有10亿个如何存储。
人搜特别注重写代码,除了最后两个题,其余所有的题,都必须严谨的写出代码。
互联网待遇的问题很透明,网上都有,很透明,我就不方便说了。
写在最后:
后头看看写的好乱,实在没办法,如果好好写至少上万字,现在是实在没有这个时间,最近真蛮忙的。
我互联网找工作的经历其实不多。
因为我自己就经常说我现在写代码为的就是以后不写代码,互联网只是练练手保个底。
说一下一个心态的问题吧,我觉得各行各业都有自己存在的意义,每一个工作都是好工作,码农们没不要自嘲,当然了,也有很多同学蛮自傲的,其实也真没必要。
如果有机会的话,能出去实习就出去实习,因为一份工作,你想象的很好,实际干了不一定喜欢,实习能有个保底的工作机会,也能让你看清楚你到底适合什么样的工作。
不断的分析自己,找到最适合自己的发展方向。
论坛上的东西可以参考,但不要全信,对于一份工作,能说清楚的只有那些干了这份工作至少三年并还在做的人,所以,人脉的积累很重要,问人一定要找到这样核心的人问,其他的,要辩证的看,去伪存真,不要人云亦云,不要论坛上的人说这个好那个不好然后你就觉得对,好的工作是相对于人而言的,对于每个人都有适合他自己的好工作。
XX笔经1
一、算法设计
1、设rand(s,t)返回[s,t]之间的随机小数,利用该函数在一个半径为R的圆内找随机n个点,并给出时间复杂度分析。
思路:
这个使用数学中的极坐标来解决,先调用[s1,t1]随机产生一个数r,归一化后乘以半径,得到R*(r-s1)/(t1-s1),然后在调用[s2,t2]随机产生一个数a,归一化后得到角度:
360*(a-s2)/(t2-s2)
2、为分析用户行为,系统常需存储用户的一些query,但因query非常多,故系统不能全存,设系统每天只存m个query,现设计一个算法,对用户请求的query进行随机选择m个,请给一个方案,使得每个query被抽中的概率相等,并分析之,注意:
不到最后一刻,并不知用户的总请求量。
如果用户查询的数量小于m,那么直接就存起来。
如果用户查询的数量大于m,假设为m+i,那么在1-----m+i之间随机产生一个数,如果选择的是前面m条查询进行存取,那么概率为m/(m+i),如果选择的是后面i条记录中的查询,那么用这个记录来替换前面m条查询记录的概率为m/(m+i)*(1-1/m)=(m-1)/(m+i),当查询记录量很大的时候,m/(m+i)==(m-1)/(m+i),所以每个query被抽中的概率是相等的。
3、C++STL中vector的相关问题:
(1)、调用push_back时,其内部的内存分配是如何进行的?
(2)、调用clear时,内部是如何具体实现的?
若想将其内存释放,该如何操作?
vector的工作原理是系统预先分配一块CAPACITY大小的空间,当插入的数据超过这个空间的时候,这块空间会让某种方式扩展,但是你删除数据的时候,它却不会缩小。
vector为了防止大量分配连续内存的开销,保持一块默认的尺寸的内存,clear只是清数据了,未清内存,因为vector的capacity容量未变化,系统维护一个的默认值。
有什么方法可以释放掉vector中占用的全部内存呢?
标准的解决方法如下
template<
classT>
voidClearVector(vector<
T>
&
vt)
{
vector<
vtTemp;
veTemp.swap(vt);
}
事实上,vector根本就不管内存,它只是负责向内存管理框架acquire/release内存,内存管理框架如果发现内存不够了,就malloc,但是当vector释放资源的时候(比如destruct),stl根本就不调用free以减少内存,因为内存分配在stl的底层:
stl假定如果你需要更多的资源就代表你以后也可能需要这么多资源(你的list,hashmap也是用这些内存),所以就没必要不停地malloc/free。
如果是这个逻辑的话这可能是个trade-off
一般的STL内存管理器allocator都是用内存池来管理内存的,所以某个容器申请内存或释放内存都只是影响到内存池的剩余内存量,而不是真的把内存归还给系统。
这样做一是为了避免内存碎片,二是提高了内存申请和释放的效率——不用每次都在系统内存里寻找一番。
二、系统设计
正常用户端每分钟最多发一个请求至服务端,服务端需做一个异常客户端行为的过滤系统,设服务器在某一刻收到客户端A的一个请求,则1分钟内的客户端任何其它请求都需要被过滤,现知每一客户端都有一个IPv6地址可作为其ID,客户端个数太多,以至于无法全部放到单台服务器的内存hash表中,现需简单设计一个系统,使用支持高效的过滤,可使用多台机器,但要求使用的机器越少越好,请将关键的设计和思想用图表和代码表现出来。
三、求一个全排列函数:
如p([1,2,3])输出:
[123]、[132]、[213]、[231]、[321]、[312]
求一个组合函数。
方法1:
依次从字符串中取出一个字符作为最终排列的第一个字符,对剩余字符组成的字符串生成全排列,最终结果为取出的字符和剩余子串全排列的组合。
优点:
该方法易于理解,但无法移除重复的排列,如:
s="
ABA"
,会生成两个“AAB”。
方法2:
利用交换的思想,具体见实例,但该方法不如方法1容易理解。
我们以三个字符abc为例来分析一下求字符串排列的过程。
首先我们固定第一个字符a,求后面两个字符bc的排列。
当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b,求后面两个字符ac的排列。
现在是把c放到第一位置的时候了。
记住前面我们已经把原先的第一个字符a和后面的b做了交换,为了保证这次c仍然是和原先处在第一位置的a交换,我们在拿c和第一个字符交换之前,先要把b和a交换回来。
在交换b和a之后,再拿c和处在第一位置的a进行交换,得到cba。
我们再次固定第一个字符c,求后面两个字符b、a的排列。
既然我们已经知道怎么求三个字符的排列,那么固定第一个字符之后求后面两个字符的排列,就是典型的递归思路了。
基于前面的分析,我们可以得到如下的参考代码:
[1]、[2]、[3]、[1,2]、[2,3]、[1,3]、[1,2,3]
这两问可以用伪代码。
XX笔经2
第一大题:
1.extern"
C"
{}含义,应用在什么场景下?
2.经典设计模式写出至少两个,解释一下,最好写出伪代码
3.TCP连接中的wait_time含义,应用场景,好处和坏处
第二大题
1.一个任务处理器吧,N个任务,任务之间会有依赖关系。
比如A依赖B,A需要B完成之后才能开始,写出算法,找到合适的任务顺序。
说明算法的时间复杂度和空间复杂度。
2.一个英文文本,含有字母,“."
和"
"
和空格。
写出函数,这个函数用于找出英文文本中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 笔试 大全