冯61诺依曼简历,他为什么会冯诺依曼提出计算机由控制理论

&&& 说到计算机的发展,就不能不提到美国科学家冯诺依曼。从20世纪初,物理学和电子学科学家们就在争论制造可以进行数值计算的机器应该采用什么样的结构。人们被十进制这个人类习惯的计数方法所困扰。所以,那时以研制模拟计算机的呼声更为响亮和有力。20世纪30年代中期,美国科学家冯诺依曼大胆的提出,抛弃十进制,采用二进制作为数字计算机的数制基础。同时,他还说预先编制计算程序,然后由计算机来按照人们事前制定的计算顺序来执行数值计算工作。
  冯诺依曼理论的要点是:数字计算机的数制采用二进制;计算机应该按照程序顺序执行。人们把冯诺依曼的这个理论称为冯诺依曼体系结构。从ENIAC到当前最先进的计算机都采用的是冯诺依曼体系结构。所以冯诺依曼是当之无愧的数字计算机之父。
&&& 冯&诺依曼结构又称作普林斯顿体系结构(Princeton architecture)。
&&& 1945年,冯&诺依曼首先提出了&存储程序&的概念和二进制原理,后来,人们把利用这种概念和原理设计的电子计算机系统统称为&冯.诺曼型结构&计算机。冯.诺曼结构的处理器使用同一个存储器,经由同一个总线传输。
  冯.诺曼结构处理器具有以下几个特点:
必须有一个存储器;
必须有一个控制器;
必须有一个运算器,用于完成算术运算和逻辑运算;
必须有输入设备和输出设备,用于进行人机通信。
另外,程序和数据统一存储并在程序控制下自动工作
&&& 根据冯诺依曼体系结构构成的计算机,必须具有如下功能:
把需要的程序和数据送至计算机中。
必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。
能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。
能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作。
能够按照要求将处理结果输出给用户。
&&& 为了完成上述的功能,计算机必须具备五大基本组成部件,包括:
输人数据和程序的输入设备;
记忆程序和数据的存储器;
完成数据加工处理的运算器;
控制程序执行的控制器;
输出处理结果的输出设备 。
冯&诺伊曼结构(von Neumann architecture),也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。本词描述的是一种实作通用图灵机的计算装置,以及一种相对于平行计算的序列式结构参考模型(referential model)。
本结构隐约指导了将储存装置与中央处理器分开的概念,因此依本结构设计出的计算机又称储存程式型电脑。
将CPU与内存分开并非十全十美,反而会导致所谓的冯&诺伊曼瓶颈(von Neumann bottleneck):在CPU与内存之间的流量(资
料传输率)与内存的容量相比起来相当小,在现代电脑中,流量与CPU的工作效率相比之下非常小,在某些情况下(当CPU需要在巨大的资料上执行一些简单指
令时),资料流量就成了整体效率非常严重的限制。CPU将会在资料输入或输出内存时闲置。由于CPU速度以及内存容量的成长速率远大于双方之间的流量,因
此瓶颈问题越来越严重。
而冯&诺伊曼瓶颈是约翰&巴科斯在1977年ACM图灵奖得奖致词时第一次出现,根据巴科斯所言:
&&确实有一个变更储存装置的方法,比借由冯&诺伊曼瓶颈流通大量资料更为先进。瓶颈这词不仅是对于问题本身资料流量的叙述,更重要地,也是个使我
们的思考方法局限在&一次一字符&模式的智能瓶颈。它使我们怯于思考更广泛的概念。因此编程成为一种计划与详述通过冯&诺伊曼瓶颈的字符资料流,且大部分
的问题不在于资料的特征,而是如何找出资料。
在CPU与内存间的快取内存抒解了冯&诺伊曼瓶颈的效能问题。另外,分支预测(branch prediction)算法的建立也帮助缓和了此问题。巴科斯在1977年论述的&智能瓶颈&已改变甚多。且巴科斯对于此问题的解决方案并没有造成明显影响。现代的函数式编程以及面向对象编程已较少执行如早期Fortran一般会&将大量数值从内存搬入搬出的操作&,但平心而论,这些操作的确占用电脑大部分的执行时间。
本文已收录于以下专栏:
相关文章推荐
存储器 分层的存储体系 虚拟存储器 寄存器与缓存 冯·诺依曼体系结构
1. 冯·诺依曼结构
    冯·诺依曼结构,又称为普林斯顿体系结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。取指令和取操作数都在同一总线上,通过分时复用的方式进行;缺点是在高...
冯·诺依曼结构和哈佛结构是两种典型的微处理器组织结构。
冯·诺依曼(Newman)结构是将程序和数据放在同一存储空间,统一编址,依靠指令计数器提供的地址来区分是程序代码还是数据,取指令和取数据都...
1、冯·诺依曼结构  冯·诺依曼结构又称作普林斯顿体系结构(Princetionarchitecture)。  1945年,冯·诺依曼首先提出了“存储程序”的概念和二进制原理,后来,人们把利用这种概念...
(英语:Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构。中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数...
(英语:Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构。中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数...
程序 和 数据
冯·诺依曼结构 和 哈佛结构
在典型情况下,完成一条指令需要3个步骤,即:取指令、指令译码和执行指令。从指令流的定时关系也可看出冯.诺伊曼结构与哈佛结构处理方式的差别。举一个最简单的对存储器进行读写操作的指令,如下图所示,指令1至...
1945年6月,冯o诺依曼提出了在数字计算机内部的存储器中存放程序的概念(Stored Program Concept),这是所有现代电子计算机的范式,称为冯o 诺依曼体系结构。按照该结构建造的计算机...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)中国大学生求职招聘|交流平台|社区论坛网站 - 乔布简历
现在已拿到offer,所以想写一下自己经验,让更多的人受益。
楼主本人今年研一,因为研二可以参加实习,就从3月份开始准备找实习了。
3月20号左右参加了阿里巴巴的招聘内推,投的是JAVA研发,当时由于刚开始找实习,好多知识没有充分准备,败在了电面上。不过还好不影响校招计划,所以就继续准备参加阿里巴巴校招。
4月10号左右参加了在线笔试,由于当时投的是测试开发,以为会有好多的测试类题目,谁想到,几乎没有测试题目。题目的类型就跟牛客网上的阿里巴巴历年的校招开发类题目差不多,分为选择题,和三道解答题。基本上选择题做好了,就有了面试的机会。好多同学就是在线笔试么有通过,于是没有了后面的面试,很遗憾。
我参加完笔试,在4月17号收到了阿里巴巴面试的通知。由于当时在参加另一个公司的面试,收到邮件后就没有及时看,本来可以预约上海,最后没办法预约到了21号的杭州。其实想想也还好啦,杭州相比上海机会能好点。。毕竟没有那么多牛逼的大学。。然后就是各种准备面试啦~
总结:通过这次阿里巴巴的笔试面试,个人觉得,基础知识的建立特别重要。不管什么开发岗位。都问的基本上是基础知识:算法、数据结构、操作系统、网络,还有自己擅长的语言、数据库,所以要想面试有好的结果,必须有扎实的基础,多看看csdn上牛人的博客,因为那些博客都是有关某个重要知识点的扩展,这个我很有体会。
还有就是大公司也没有想象中的那么难进。。只要基础牢,瞅准哪个岗位,看这个岗位需要具备什么知识技能,从现在开始就去学习,准备。。到时候自然如鱼得水!
不要好高骛远,啥都学,啥都不精通。。。要精不要泛!!
最后,相信自己,成功把握在自己手中。。
楼主拙见,有表达不清楚的勿喷。。。O(∩_∩)O哈哈~
更多关于阿里校招/实习的攻略,请移步:
面经分享开场咯
本人代码能力有限,进360的希望不大,只是来努力争取一下。17号下午2:30的面试,等到四点半才被叫进去,面试老师年龄不大,程序员出身(因为后面问的问题都是程序)。
首先是自我介绍,巴拉巴拉说完后,就开始问语言,因为我只用过java做过一些小项目,C/C++只会基础,所以面试老师直接问java,首先写出用过的java的包和接口,我就在白纸上写出能够记住的接口,util里的,lang里的,……。
写了一些之后,他就从包里选择一些开始提问:因为里面我写了Thread和runnable,所以就问是不是对多线程很了解,我回答是用过多线程,然后说:写一个单例模式吧。虽然以前看过单例模式,可是脑子里一篇空白啊,只得硬着头皮,写了一段,结果可想而知,没有写全,没有对对象进行判断,面试老师挺好,给提示了一下,我马上想起来了,然后回答出来现判断对象是否存在,在返回对象;
第二个问题,从map里的hashmap里问起,怎么样对一个hashmap里的&key,value&根据key进行排序,这个我确实不会,只能怎么想怎么说了:可以实现comparable接口,或者把key取出来直接排序,因为对字符串的排序也有默认的方法,可以用简单排序,冒泡,快速等。这个回答的不知道对不对,不过老师也没说不对的地方。然后问了==和equel的区别,这个简单,回答的也很完整;
接下来又是一个写程序,给出一个路径“D/test/test.txt”其中记录了一个搜索结果“百度,关键词,结果1-10,360,关键词,结果1-10”,用程序实现把这两个搜索结果中出现相同关键词的搜索结果存入另一个文件中。这个问题确实写不出了,流的使用还要看着jdk文档写呢,更别说在纸上直接写了。给5分钟时间,结果没写出来,不过把思想给老师讲了一下,就是用流写入数组,………………。然后问为什么写不出来,只能诚实回答,一些方法记不住……
然后又问测试方面,看着笔试最后一题,问自己写的程序有没有漏洞,最后一题是对一个数组中找出第二大的数,我想了一会,只得回答想不出来,面试官直接给说答案了,没有考虑有两个最大值的情况,(这么简单的情况,竟然想不出来,当时真的有点hold不住了)。还说了,做测试开发一定要考虑到各种情况,只考虑正常情况的思维是不行的。又给出了360搜索,问怎么样测试这个360搜索?回答的不是很好,测试这个真没有实践经验。引以为鉴。
到这个时候,方寸大乱啊,感觉没戏了,毕竟实力不行,面试老师还是接着提问,TCP的三次握手,回答出来后,又问如果是两次握手会怎么样,四次握手会怎么样?这个回答的也算可以吧,最后问我还有什么要问的:我就问,我的代码水平确实不太好,这个需要提高,请问老师在其他方面能不能给点意见?老师挺好,说了一些建议,面试互联网行业一定要对该公司的产品有一定了解,把自己放在用户的角度考虑问题…………,还说了这一点重庆的学生做的都不太好。……就这样结束了一面。
然后就没有然后了。
想进好公司,自己能力才是王道。
日,我参加了阿里巴巴的实习生面试。面试是在西安悦豪酒店进行的。我报的职位是测试开发工程师。最终结果是挂在了2面上。但是我还是把面试过程写下来,希望都大家有些参考。
我预约的是下午1点半的面试,但是我12点就到了。之后工作人员经我们引导到了一间会议室内,让我们等待,期间放了些视频。大约到了1点钟,我们开始拿着打印的通关卡扫码之后来到等待区等待。屏幕会叫号,同时会有发到你的手机提醒你到哪个桌子面试。
不一会我被叫到了去S030桌子去面试。我被引导到一个大厅,大厅感觉像在进行国际象棋比赛,至少有50张桌子,每个桌子都有面试官。每个人都把摆着一台macbook,果然mac才是王道。
我来到我的面试官前,将我的纸质简历递给了他。他先看了我的简历,然后叫我自我介绍一下。我简单说了一下,他说你本科在南农读的,浦口吗?我说卫岗,不过我在浦口待了一年。他听了很惊讶,不知道南农本部在卫岗。
接着步入正题,他看到我的简历上写着博客和github网址,他便用浏览器看了一下。接着他看到我写着的那些技能便开始问我,python和c/c++有啥区别,Git的原理。接着他问了我毕业设计做的网站,如果让我设计登陆注册的测试用例怎么设计。我也不太会,想到什么就说什么。说完之后,他提到了注入,这我完全没接触过。他又问怎么做性能测试。
我说大量用户同时访问,他说那是压力测试(原谅我根本不懂这些)。然后他问我测试的两种方法,我说黑盒测试和白盒测试。他又问黑盒测试具体有哪些,我就不知道了。他说你听过划分等价类吗(原来这就是黑盒测试的方法,软件工程学的不好)。
他说你的这些项目都是PHP做的,有用其他C/C++/java做的吗,我想了想,只能尴尬地说没有。接着他给我出了一道题,让我在纸上写出代码,不限制语言。
1、比如a b b a c d找出不重复的第一个字符,时间复杂度O(n)
我把题理解错了,写了个时间复杂度O(n2)的,而且意思不对。他重新解释了之后,说你说一下思路吧。可惜我没想出来。他便给我讲了一下,就是以空间换时间,每遍历一个字符就标记一下。
最后他问你的网址怎么都叫linjiangxian,我说那是我喜欢临江仙这个词牌名,高中做高考卷时有首侯蒙的《临江仙》
好风凭借力,送我上青云
而且我本科在南京上的学,和这个名字也很符合,他说他原来也是在南京上的学。
最后的最后他说你有什么想问的,我于是说出了之前想好的问题,测试开发工程师和测试有什么不一样。这个职位在哪个城市。
之后我结束了一面,回到等待区,本来我以为自己答得不好,应该没什么希望,没想到很快收到了二面的短信,通知我去S050桌去二面。
通过一面有一定运气成分。二面我的面试官有两人,之前的一面是一个人。我记得其中一人的花名是”叶渡”。二面只要是问的项目和实践,不怎么问前面的基础了。我先讲了12年做的SRT,又说了本科毕业设计做的网站。他问我花了多长时间,遇到了什么困难。我说三个月,然后巴拉巴拉说了其中遇到的问题。之后我又说了我现在做的微信公共账号,因为我是跟许大神做的,他便问我提出了哪些创新。说完之后他让我写一个程序,跟一面一样,在纸上写出来。
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
打印一个这样的东东,输入n 输出n行
我硬着头皮写了一半,写不动了,他等了一会,就把我的纸收走了。之后另一个人问我之前写的程序是PHP的,如果让你改写JAVA的能适应吗,我当然说能,接着说了我会怎么学习。最后还是你有什么要问的,我把一面的提问又问了一遍。
二面结束后我又回到等待区等待,等了一会,工作人员说我今天面完了,回去看网上的结果。回来一查,待回绝,果然是二面挂了。
总结一下,面试必备的,自我介绍,在纸上写程序,最后的提问。另外简历写得很重要,面试基本都是围绕简历面试的。
原文来自于
----------------------------------------------------------------------------------------------------------------------------------------------------------------------小编有话说
大家可以和前面一篇测试开发的帖子对比下,看看阿里这一类的面试流程,技巧
我打算说盛大(经营网游的公司)的笔,面试。
自从上次在 AMD 折戟后,我一直在寻觅新的机会。今天在学校,我和盛大又短暂邂逅
了一把,走完了笔试,面试。
盛大不同部门的笔试面试题都不同。我投的是“创新院”,吃青春饭,搞开发那种。
下面开始透题:
不可否认的一点是,盛大“创新院”的笔试题是我见过的,最有趣的一套。
试题分两部分:智力题和技术题。智力题以寻找规律的题为主。比如给你几幅图或者几个数字,问你接下来一个图或数字应该是什么。其中,给数字找规律的题占了智力题五分之二强,而且也比较显难度,我的笔试时间基本都花在了这部分上。智力题这部分妙趣横生,让人做得津津有味。如同 AMD,技术题做起来仍然很随意,那个难度只适合鄙视非专业人员。题目内容分布比较广,数据结构,网络,操作系统等 CS,SE 主干课程基本都有涉及但并不深入。如果你花十五分钟才做完技术题,应该反省学习态度了。
面试官貌似是盛大“创新院”的头儿,一身穿着 IT 味很浓厚。平易近人,总是面带微笑。我们主要聊了我做过的课程项目。面试总体难度也不大。只要平时认真还是可以轻松应付的。
他问:你愿意在技术一线干几年?
想要了解更多的盛大求职信息请点击
转自大街网
昨天,和班上几位同学一起去参见了网龙的招聘会,去的很早,开始以为还没什么人,到快开始的时候人爆满,连走廊上都站满了人。开始时就是宣讲会,那个副总裁还真挺搞笑的,开场就把一女生问的很尴尬。呵呵,不过老总还是给那个女生留面子了。
但是最终都没有说明具体的薪酬水平。结束后技术类的就去笔试了。报的C++游戏开发职位。开始拿到题目的时候,心中感慨还是考的比较基础,但是基础并不一定说你就能答的很好,指针的题目非常多,由此可以得出结论,基础知识千万不能丢,考的都是编程平常没注意到的地方,下面就简单回顾一下昨天的笔试题吧。
主要考了数组声明、并发、进程和程序的区别、数据库视图、switch分支语句。
1、怎么防止头文件重复引用?为什么?
2、指针和引用的区别?
3、winsock建立连接的步骤?
4、STL是什么?有什么作用?写出你平常使用的三种STL容器并简要说明?
具体题目不能回忆起来,只能说出大概
1、指针的声明、定义的题目,不难。
2、getMemory(char* p)这个题目其实就是林锐博士书上的题目,所以说林锐博士的书真的是现在很多企业笔试面试的材料。一定要啃这本书。
3、各种sizeof取值。呵呵,以前见过,需要弄清楚一系列的概念,全部答对也并不是那么容易。
四、算法题
自己实现数据结构定义和函数。两个有序链表a,b。将他们俩合并为一个链表,合并之后链表还是有序的。这个题目应该是数据结构中最基本的算法了,但是当时脑袋懵了,没有完全搞出来。可惜了。需要苦练内功啊。
五、编程题
将一个面向过程的题目改为面向对象风格的,不难,但是要是设计的很好并非易事。
从以上的题目可以看出,除了一些超大的公司侧重考算法,大部分公司主要还是考C++语言基础,所以基础还需要夯实。等待消息吧,阿门!
来源于 CSDN
想了解更多最新、最全的网龙网络相关信息请戳:
面试了腾讯的安卓职位,职位的工作是给腾讯做一些SDK及其他一些工作。面试得比较仓促,结果比较明显,遂做一些总结,也给以后的自己提一些要求。
1. 第一轮笔试题目:
安卓的基本组件,说说都是做什么用的。Activiy、Intent、IntentFilter、BroadCast、BroadCastReciver。
Activity的生命周期。
安卓定时器的实现,列举出来,越多越好。
代码实现判断手机有无内存卡。
MVC模式在安卓中是如何体现的。
BroadCastReciver有几种注册方式,各有什么优缺点。
第二轮面试
先是简单的自我介绍。
项目经验介绍。
项目中一些知识点提问。
项目中遇到过的难题,是怎么解决的?
现场画出一个项目中网络请求的流程图。
由于这次面试的比较仓促(腾讯也急缺人),在面试过程中,回答的问题总是显得不够条理,叙述不够有力,逻辑性不是很强。据朋友说,腾讯需要的人,是需要你在面试过冲中,显得比较强势,一定要够自信。
所以,在面试过程中,一定需要对Android中的知识点总结,清楚明白地说出它是干什么的。
另外,在开发过程中,一定要对遇到比较麻烦的问题,要做记录,理清楚思路。
还需一些遇到的bug和坑爹的问题,要做记录,写写是如何解决的。
来源于博客园
更多腾讯校招的资讯请猛戳
测试开发工程师面试过程:
首先是初级经理面,问的很概括,就是就着简历的东西问的,做过的项目,工作精力,为啥跳槽,都问的很笼统,也不问技术。
二面是群面,来了三个人,2男1女,也是就着你的简历,问项目中主要做了哪些工作,代码量,c,python,perl,shell你会哪个就问哪个,问在项目中主要用哪个,做了啥工作,我感觉可能公司跨度太大,反正我说的项目他们听的不是很明白,问题也不是很多
第三面是个manager,也是大概问问工作经历,问一下目前的工作内容,这一面有考到英文,我没准备,回答的很烂,还有就是为啥跳槽,职业规划。完了
测试开发工程师面试问题:
用python写过啥工具,用shell写过啥测试代码,为啥跳槽,当前的工作内容,代码量多少
本文整理自职业圈。
更多校招资讯请戳:
21日面试,上午9:30,我是测试开发工程师这一组的第一个。面试的时候,面试官问了浪潮的项目,是黑盒测试的,又问是否做过白盒测试,如实回答没有做过。
看网络方面挺熟,就问HTTP的传输过程,基本上没怎么答好。问我数据库方面,想了想,让我随便写一个感觉最有技术含量的SQL语句,我就写了求第二大值的语句。select max(score) from cj where score& (select max(score) from cj) 。
然后面试官开始和我一起分析笔试试卷最后两个题目,第一题,C 程序找错,因为我不太擅长,简单的表达了一下自己的看法就没再深入探讨。第二题,找出第二大数值,我讲清楚了我的思路,设置两个临时变量,遍历数组时暂存目前最大的两个,面试官模拟了一遍,感觉还可以,又指出了我代码中的一些问题,然后说,根据代码说明我对C还是有一定了解的,因为之前我说我对JAVA熟悉一些。
最后,面试官表示根据我的情况(对JAVA熟悉而他们测试开发主要还是写很多C 代码)和我的经验(我做过黑盒,他们主要是白盒测试),建议我转测试工程师,问我愿意不?然后简历由他直接转交给另一个面试官。
由于面试官之间的沟通出现了一些问题导致我到下午16:00多(大概是这个时间)才开始第一轮面试。一面的面试官哆哆嗦嗦的,挺吓人。自我介绍,刚说没几句,就被不耐烦的打断,问我做过的项目,主要是在浪潮做过的那个项目(我很不小心的看到她在评价表上写着“有测试经验”),又开始问一些问题,让我写,问对方电脑没法上网,我提供技术支持,如果找出原因,给出尽可能详细的方法,我写好之后,她不断的提出问题,我不断的补充,直到我没招了。
又问一个物体,如何判断是否是球体,如何判断其接近球体的程度。我给出的方法是放在一个正方体的盒子里六个面是否正好触到物体的边缘,基本就这个意思,来判断是否接近球体,关于接近球体的程度,我说给物体一个冲击的气压,看在地上自由滚动的程度。这个答案导致她好奇我是不是学物理专业的,都扯到气压上了。
她指出,必须首先要找出球心才行。问用过哪些360产品,我说360浏览器,问我如何与其他浏览器比较,我就写方案,网速,资源使用情况什么的,各种网络情况下的网速。又问我遇到什么人生中遇到什么挫折没有,如何解决的,我就说了当年中考苦练体育那一段悲催的历史。最后我问她,我是外地的,是回学校等消息还是在青岛等消息,她说你觉得你的表现需要在这里等吗,我说那我可没谱,她突然一笑说,那就试试二面吧,祝你好运了。激动的我连书包都忘了拿就要走,毕竟我是那天唯一一个没有被这个面试官终结的人。
一面结束后,HR让10分钟之后直接进去。二面是技术复试,二面的面试官问了TCP和UDP的区别,POST和GET的区别,好像还问了B/S和C/S的区别。问了数据表中如何查找第二大值,这个已经很擅长了。问我最大的特点是什么,我说乐观,善于与人交往,又问我如何与陌生人交往什么的,我说要聊天,必须知识面很广很广才行,要像我这样会吹,跟什么行业的人也能胡吹。问我如果带领一个团队,奋斗了很长时间,但是失败了,是因为我的原因,我会是什么样的心情,A很沮丧,觉得对不起大家,B感觉已经尽力了,无所谓,C还会东山再起。我说我肯定会觉得对不起大家,毕竟是我造成的,但是我还会东山再起的。他问为什么,我说我年轻啊,年轻就是资本,而且经历了这一次失败,失败也是难得的经验。
三面是HR,自我介绍,为什么选择360,以前还试过哪些公司,到了什么程度,为什么没有留在浪潮。关键的问题,说三个性格的优点和缺点,必须分别用三个词语来表述,不能解释,这个真把我难为住了,表现不好。最后回去等消息,没有等到offer。
想要了解更多360求职信息,请使劲儿
去百度大厦面试,职位是测试开发工程师(暑期实习),面试官是一位漂亮、友善的姐姐。
第一道很简单,问程序在内存有几个数据区,堆和栈区有啥区别。
第二道是两个有序数组(可能升序或降序),要求合并到一个大数组中,使其仍然有序,讲了大体思路,并用C简单写了实现代码。
第三道是给出int型的x、 y两个数,要求不借助第三个变量交换x和y的值。
啊。从大一开始学C,碰到过用value传参、引用传参、指针传参、宏定义交换x和y,但都要用到辅助变量,这次遇到JJ给的不借助第三变量交换x 和y,还真是第一次,卡壳了,不过也觉得很新鲜,特别好奇。
姐姐似乎也看出了我不会,于是说:你先想一会吧,在纸上写写,尽量写出算法代码。我没遇到过,不过第七感马上告诉我:这算法肯定不难,但很有技巧,可能是脑筋急转弯,想出来了就会豁然开朗,可惜此刻只缘我身在庐山中,不会呀。
于是乎,我就抛开了指针、引用之类的,想用异或、求反、求交等逻辑运算,还画出了0之类的来比较,可怜一时半会也倒弄不出来。
姐姐提示我想想有数学运算试试,于是我把考研那会的三角运算的加减乘除都想了个遍,也凑合了一个(x+y)和(x-y)的四则运算,可怜想不出下一步该如何做,急得我都流汗了,姐姐看出来我不会,于是跳过了。
第四题有1.txt、2.txt。。。。n.txt的n个文件,要求查出含有字符串“love”的文件,并返回文件名。 我用shell命令 find + grep搞定,姐姐要求我用高级语言写伪代码,我于是小声的问可以用库函数么,她说行,我就直接str.substring()或者split()在strcmp()搞定,结果她似乎不太满意。
第五道题就是让我测试一台自动售货机,我想百度应该只测试程序,于是没说测试按键、电源、硬币纸币等物理特性,直接跳到了测试程序逻辑部分,用等价划分法、边界值分析法以及经验评估法,并讲了塞钱又强行拉出、正常购物、购完物继续再塞钱三个区间,再在正常购物两侧的区间进行边界值测试以及凭经验测试经常容易出错的地方,姐姐看了看我,没说话,继续……
第六道题以后就是一些概念题了,如死锁的四个条件、进程通信的方式(我只想到了管道、消息、全局变量、信号量四个)、空机测试。我当时不知道她空机的意思可能就是宕机,于是姐姐问我懂不懂,我说没遇到过空机,于是姐姐也没再问了。
我记得就这些题,姐姐说话很和气,待人也很好,最后她问我有什么问题,我第一个问题就是问如何不用变量交换x和y的值,她笑而不语,让我回家自己查,之后才恍然大悟,原来就简单的三句,汗。
就这样,百度初面OVER,总体感觉面试题都不是很难,只是当时考虑、描述不是很清楚。
更多关于百度实习/校招的全面攻略,请猛戳:
此话题已被删除
先看看阿里巴巴最全求职攻略投递成功率更高!
岗位描述Job Description
我们是QA,但我们更是阿里的质量专家。
我们希望你能通过需求分析、设计评审,制定测试计划,设计测试用例,搭建测试环境,执行各级别和类型的测试,缺陷跟踪,来参与到互联网软件产品测试的全流程;
我们希望你能站在研发过程的全局,借助最前沿的研发技术和理念,通过测试流程、方法和工具创新,努力提升研发的质量和效率;
我们希望你能够站在用户的角度,不断完善产品的用户体验,影响到我们亿万的用户和消费者,让他们受益;
还有什么比你作为首批用户带来的新鲜感和优越感更刺激的呢? 来吧,加入我们吧!
岗位要求Qualifications
1.熟悉C/C++/Java等至少一种编程语言,有Shell或Ruby/PHP/Perl/Python等使用经验者优先;
2.熟悉Linux或Unix操作系统;
3.熟悉软件的开发测试流程,掌握常用测试用例设计方法,具备设计和开发测试工具和自动化测试框架能力;
4.广泛的技术视野,具备很强的学习能力、分析能力和解决问题的能力;
5.喜欢钻研技术,工作积极主动,不断追求产品的完善;
6.具备奉献精神,善于沟通,善于团队合作。
网申方式:
不知道是HR姐姐认为我表现的还可以,或者因为是师姐的关系。进入了二面。二面仍然被分给了一个姐姐HR,感觉可能是没有校友这层关系了,自己略感紧张。
首先她也是浏览我的简历,顺便让我做自我介绍。
然后让我讲讲自己的项目,因为我之前的经历跟互联网公司实在是关系不大,自己就明说比较偏底层。不过HR还是让讲一讲。就随便说了说。
然后有借鉴意义的就是HR对做过的项目比较感兴趣,与互联网相关的就非常好。
问了个简单算法,单链表,如何判断链表中是否有环?
讲一讲做过的web应用。
大数据表,如何做优化?
有些题目跟一面的时候有些重合,其中写代码的时候囧死了,憋半天没思路,耽误了不少时间。
随后就是问了问,如果让我做web相关的测试,是否愿意,倾向于做前端测试,还是后台测试,为什么,等等。感觉HR问这些的时候已经很不认真了,自己也感觉这次准备很不充分,应该是要黄了。
这次经历虽然可能没成功,不过还是蛮有用的,对面试内容什么的有了大致方向上的了解,之后再参加互联网公司的面试笔试,有了为之准备的方向。
更多关于百度实习/校招的全面攻略,请猛戳:
此话题已被删除
楼主是北邮大四学生,通信专业,现在已经保研了,研究生方向偏互联网,想着出来去互联网公司实习下,一来积攒社会经验,二呢想把自学的编程、算法等知识实际运用下,三嘛就是赚点零花钱。废话少说,下面进入正题,我面试的软件测试开发实习工程师,聊下我的百度实习岗面经。
实习岗有三轮:网申,第一轮面试,第二轮面试。
网申就是看看个人简历,学校、专业、项目经验、语言能力、获奖情况。我是在大街网上投的简历,投完后第二周就接到电话要求去面试。个人觉得如果要找实习,最好去官网上申请比较方便写,是百度的招聘网站,能看到简历处理状态和面试信息。
第一轮面试选在11点,地点就在西二旗的百度大厦。先到前台签到,告诉他面试官编号,等面试官来接你。来面我的面试官是个看起来不到三十岁的GG,蓬松头发,人字拖,给我的感觉像是个技术宅(ps.百度对技术人员着装没太大要求,简单、舒适、得体就行)。
面试官把我领到三楼的一个休息的地方,找了张桌子就坐下了。首先是自我介绍,他对着我的简历,挑了些感兴趣的点画圈圈,我大概知道什么意思了,估计他会对着你的简历,挨个的问你。
他首先问我会哪些语言,我说c++,java,python,最熟悉的是java。GG皱了皱眉,说百度是一个讲究效率,讲究算法的公司,用的大部分是c++。我补充道,我通过java的学习,重新认识了面向对象编程。
他接着问面向对象的三个特征,java和c++在面向对象中的区别,c++有没有接口,java的接口和抽象类的区别。这些比较基础,我都答上了。接着是算法问题,看在我是非计算机专业上,问的比较基础,用最熟悉的语言写个二分查找,分析时间复杂度,空间复杂度。
然后看到我简历中有个安卓聊天软件开发经历,问我TCP/IP的问题,TCP建立连接和释放链接流程,socket通信原理、流程。再就是问关于linux问题,一些简单的命令,查找文件find,文件内查找grep,查看进程ps,查看端口占用(没答上)。
面试中问道的太细节或则太偏的知识,我没接触过的,就直接跟他说不会了,但是后面都补充了一句可以help出来。再就是数据库,我就使用过MySql,建表,查询,索引之类的常用命令。
面试官直接没问我,而是问第二、三范式分别是什么,这个完全忘记了,大二学的数据库,这么理论的知识点考试完后基本都忘了。面试官笑着说要我回家看看书,把知识点都捡起来。
接着他说他会把我的面试情况跟他的manager说,问我还有什么问题。我问了下工作时间,工作内容,待遇的问题。他都一一作了解答,然后我说下次面试有什么要注意的,他说要自信点,算法的东西再看看。
第二轮面试在9点,地点没变,面我的是一个manager,三十出头,年轻干练的GG。面试在二楼大厅,首先也是自我介绍,啪啦啪啦的说了一堆,跟一面相比,我补充了选择百度的原因和自己爱好。
他问我平时用什么搜索引擎,我说百度和谷歌。让我点评下这两个搜索引擎的区别,举例说明。然后谈下百度的缺点,说说改进的方法。我谈了谈英文搜索,说百度搜索的LBS支持不错,本地化服务做得很好,最后是移动端流量引入。
接着他看我研究生方向做网络搜索和数据挖掘,要我讲下自己对数据挖掘的看法。这个还行,之前一周看过一本讲数据挖掘的书,我基本把书里的观点都复述了下,4V等之类的概念。然后他问我会不会hadoop,我讲没接触过,稍微知道点。
然后他好像不是特别满意,说既然我喜欢java,又喜欢数据挖掘,hadoop都不会。顿时有种不太好的预感,他接着问,考你个算法题,一个未知长度数组,里面80%左右的数字出现1次,18%左右的数字出现过2次,其余的出现了3次,要求设计算法,找出第一个重复出现3次的数字的第一个数字的位置。
不会呀,他看到我满脸疑惑,没有思路,给我点提示,先去掉出现一次的数字,然后查找。最后也算是在他的帮助下,我写了个伪代码。(那会他在打电话,好像有事)他看了下,说就到这里,行了。
我心想,呀,是不是没戏了。不行,要为自己争取下,我说了说自己通信专业和计算机专业的优缺点,表达很想得到这份实习的意愿。有点峰回路转,面试官问了下我能什么时候入职,这算是我最后的一个希望吧。离开百度大厦,我呆坐在椅子上想了半天,通信转互联网,到底该不该继续坚持。
这基本是我的面试过程,谈谈经验。
1、个人简历很重要,上面写的东西自己一定要特别熟悉,不要造假
2、百度是个讲究效率,讲究算法的公司,c++和算法要求挺高
3、百度技术面试着装没太多要求,自然得体就行
4、技术面试的面试官一定是行家,不懂知识不要装懂,尽早坦白,如果他能给你提示,说明是看好你的,一定要继续对问题给出自己的理解
5、百度对求职者的知识面要求较广,不仅是精通某一专业,而且对整个互联网行业的动态,竞争对手都最好有所涉猎
6、人品排最后,关键是态度
昨天接到HR的电话,说我过了,那叫一个喜大普奔。入职前赶紧恶补下c++和算法,以后有空再写写实习经验。一直都是在csdn上看人家的技术贴,这是我第一次写blog,不算技术贴,等翅膀硬了,再来跟大家讨论下技术。
(原文来自CSDN)
更多关于百度实习/校招的全面攻略,请猛戳:
此话题已被删除
暑假马上就要到了,最近一直忙于找实习,希望可以找点正事儿来打发一下眼前的暑期生活。之前一直投的都是通信和互联网公司相应技术岗位,其实自己还是希望可以去公司里找一个技术大拿当师傅,这样也可以好好提升提升自己的技术实力,毕竟一个人小打小闹的话,很难上升一个层次。前两天参加了百度质量部的测试实习生面试。
废话不多说,总结一下下。
过去之后,首先填了一张面试表,按上面写的流程,应该是有三面,技术一面,技术二面,经理面(最终证明貌似只有前两面而已)。
技术一面:
HR姐姐把排好队的一队人带着就直奔一楼貌似是百度员工食堂的地方,进去以后,直接给唬住了,一张小饭桌上一个HR坐着,放一台电脑,备好的纸和笔。然后带队的HR姐姐说,大家随便坐,这些都是你们的面试官,随便找位置坐。
我挑了个眼前的一个面善的姐姐,赶紧坐她对面。随后把自己的简历双手奉上。她看了一眼我的简历说,呃,咱们一个学校毕业的。原来是师姐!随后开始各种问问题:
1、写个小程序,一个数组,长100,里边乱序分布数字1-100,在数组中随机挑选一个位置的数字,将其替换为-1,如何判断,被替换掉的数字是多少?
2、假如现在有一个很大很大的数据表,如果要提高数据查询的速度,如何进行优化提升其性能?
3、做过什么web相关的应用,介绍一下。
4、对测试了解多少?
5、是否使用过百度网盘,其中什么功能印象最深刻?分析其原理、工作机制。
6、打开了百度网盘页面,如果现在要你对这个页面上的所有关键部分进行测试,需要进行哪些功能的测试?
能记得的只有上边这么多了,其实关于算法和测试相关的内容,这些都算很简单的问题了,都可以问的更深一些的,因为我对测试确实了解甚少,都是靠自己的想法在解答,而算法部分,由于前一段时间一直忙着实验室的事情,也没有抽出时间准备(不应该!!!)。所以感觉自己有点晕头转向的,表现不是很好。
更多关于百度实习/校招的全面攻略,请猛戳:
此话题已被删除
面试分为早上和下午。
早上一共三个面试官,前两个人没人面试30分钟,第三个人面了一个小时,都是问一些很基础的问题。
第一个面试官问:
1.网络有哪几层,分别是什么
2.路由器和交换机有什么区别,哪个可以防止广播风暴
3.什么是进程,和线程有什么区别
4.进程死锁的条件
5.写一个从文件中读数据再排序的小程序
第二个面试官问:
1.问了我的几个项目
2.让我写冒泡排序
3.然后再让我写一个算法,提示我用栈,可是我没想出来
第三个面试官问:
1.面向对象的基本特征,问的很细,还要举例说明
2.各种排序算法的特点,时间复杂度
3.问了我的几个项目
4.写一个链表转置的算法
5.最后问了我几个智力题
后来,下午又面了一个人,看样子像是测试主管之类的,问我:
1.java和c++有什么区别
2.为什么Java的跨平台性比C++好
3.又问了我很多关于游戏测试的问题
4.写一个x的y次方的算法,时间复杂度尽量小
5.平时喜欢玩什么游戏,谈谈对现在一些热门游戏的看法
最后我就回去了
面试官提出的问题
为什么Java的跨平台性比C++好
Java运行在Java虚拟机上,C++直接运行在系统平台上,有一些系统调用,和操作系统关联大
本文整理自看准网。
更多校招资讯请戳:
1、多任务系统里面,一个任务可以在占有资源的同时申请资源,这会导致____.
2、实现内联函数的关键词是_____.
1、请尽可能举出你所知道的数据库备份与还原的方法(数据库类型不限,只要知道的就写上)
2、中断是什么?CPU在中断的时候做了些什么?
3、markfile文件有什么作用。
4、谈谈你对虚函数的认识,并写出实现虚函数的方法 。
5、ping、tracert是属于TCP/IP协议族里面的哪个协议?
1、1-9这9个数字中,选3个出来,其和为奇数的组合有几个?
2、请把16进制数270F转化为十进制数。
游戏类题目
1、梦幻西游、大话西游是什么类型游戏?
2、请举出至少5个网易出品的游戏。
3、请举出5个以上游戏公司。
4、GM是什么的缩写;职责是什么?
5、网易接受魔兽世界时,其版本号为?
6、请把一个你玩得最久的网游账户的职业、等级、技能、装备描述一下。
7、(先给出一段关于新闻出版总署对于网游中各种不和谐内容的打击行动的材料)请你根据材料并结合自己所熟悉的网游,写出其需要改进以符合版署要求的地方。
8、以你熟悉的网游为例,写出两个玩家面对面交易时,对交易系统的测试点
测试类题目
(非自动化)
给出了一个二叉树的前序排列、中序排列,要你选出它的后续排列
在考虑容错和效率的前提下,用伪码写出对线性表的冒泡排序算法
1、在你面前有条分岔路,一条通向说谎国,一条通向诚实国。此时走来两个人,一位只说谎话,一位只说实话;你向此两人问路,怎样问才能找到通向说谎国?
2、每架飞机只有一个油箱,一箱油可供一架飞机绕地球飞半圈,空中没有加油机,但飞机之间可以相互加油。 问:为使至少使一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机? (所有飞机从同一机场起飞,不允许中途降落,必须全部安全返回机场)
本文整理自PHPERZ。
更多校招资讯请戳:
在网上看了这么多笔试面试的经验,很受启发,也很感激前人的善举。现在把自己2013年的一汽大众预开发经验写出来,前人栽树后人乘凉。
前前后后一共经历了三轮测试:第一轮是笔试,第二轮是群面(无领导小组讨论),第三轮就是终面了(两个老师对你一个人),最后的结果等了2个礼拜才出来。
我是在3月26号参加的笔试,笔试内容也就是跟公务员考试的行测差不多,我提前借了本书看了2、3天。考试的时候时间还是不够,最后蒙了15—20道题目。出来一问,大家都差不多,除了看你的实力,还有一部分靠运气吧!
笔试部分没有太多好讲,注意带好铅笔橡皮什么的,另外需要准备的资料有:在进入考场前连同以下证件原件:身份证、学生证、本科毕业证及学位证(硕士)、外语六级成绩报告单或证书、本科和硕士成绩单(有校方盖章)一同向工作人员出示。特别提醒一下各位:本科和硕士成绩单都要有校方盖章,可以是复印件,但是要有红章!
上午笔试,下午4点半发邮件参加第二天的群面,晚上6点还有人打电话过来特意问了我是否参加。群面是采用无领导小组讨论,11个人一组,两个老师打分。
由于我们是同一个专业分在一组,提前一天晚上大家都找到了在一组的同学,并互相熟悉了下,达到的共识是大家要和谐,就算意见有分歧也要态度和蔼,不要那么针锋相对;
最后的意见一定要达到统一。同时,我们还分工:由一个人讲开场白,规定每个人的发言时间,讨论的计划等;由我来计时;由另一个同学做总结发言。
这样一来,我们就相当于做了准备去面试现场。面试的时候每人发一张纸,上面列了个题目“解决留守儿童问题的四条建议”,由我们讨论,最后给出一条认为最合理的建议,并阐明理由。刚开始是5分钟的看题思考时间,然后每人阐明观点1分钟,然后是组内讨论20分钟,最后4分钟总结发言,一共40分钟。具体的群面方法和技巧在这里就不赘述了,在论坛里都能找到相应的资料,大家可以看看,对于新手来说还是很有帮助的!
我的体会是:轮到你发言的时候,一定不要紧张,在控制的时间内尽量把自己的观点清晰地阐述出来,理由最好分条讲述。如果你的意见跟主流意见不同,不要那么着急改变自己的观点,而是要在适当争取之后才表示自己接受大家的观点;但是注意,也不要等到最后时间不够的时候才同意大家的观点,这样会让老师认为你是被迫无奈才这么做的!
来源于 应届生
想了解更多最新、最全的大众公司相关信息请戳:
linux和os:
netstat :显示网络状态
tcpdump:主要是截获通过本机网络接口的数据,用以分析。能够截获当前所有通过本机网卡的数据包。它拥有灵活的过滤机制,可以确保得到想要的数据。
ipcs:检查系统上共享内存的分配
ipcrm:手动解除系统上共享内存的分配
如果这四个命令没听说过或者不能熟练使用,基本上可以回家,通过的概率较小 ^_^ ,这四个命令的熟练掌握程度基本上能体现面试者实际开发和调试程序的经验)。
cpu、内存、硬盘等等与系统性能调试相关的命令必须熟练掌握,设置修改权限、tcp网络状态查看、各进程状态、抓包相关等相关命令,必须熟练掌握。
(一)查看CPU信息
使用下面的指令,就可以查看到CPU的详细信息了。一般来讲,多核的CPU,或者支持超线程的CPU,或者物理上的多个CPU,就会显示出对应的条数的信息。比如说双核的CPU就会显示2条CPU信息,双核超线程的CPU就会显示出4条CPU信息。虽然条数多了,但是基本信息都一样。
#cat /proc/cpuinfo
(二)查看内存信息
与查看CPU信息对应的,查看内存信息的命令就是:
#cat /proc/meminfo
(三)查看硬盘分区信息
使用下面的命令,可以看到当前硬盘的分区信息,以及容量大小、已使用的空间和剩余空间大小,还可以查看每个分区的挂载点:
(四)查看硬盘的型号信息
可以使用下面的命令显示物理硬盘的个数以及对应的接口,还有硬盘的具体型号信息:
#cat /proc/scsi/scsi
以上的信息的具体解释,可以参考网络上的相关文章,这里就不再详细描述。这些指令在所有的Linux下均是通用的。
linux ps 命令查看进程状态。
共享内存的使用实现原理。
必考必问,然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?
共享内存定义。
共享内存是最快的可用IPC(进程间通信)形式。它允许多个不相关的进程去访问同一部分逻辑内存。共享内存是由IPC为一个进程创建的一个特殊的地址范围,它将出现在进程的地址空间中。其他进程可以把同一段共享内存段“连接到”它们自己的地址空间里去。
所有进程都可以访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会立刻被有访问同一段共享内存的其他进程看到。因此共享内存对于数据的传输是非常高效的。
共享内存的原理。
共享内存是最有用的进程间通信方式之一,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。
c++进程内存空间分布。
注意各部分的内存地址谁高谁低,注意栈从高到低分配,堆从低到高分配。
ELF是什么?其大小与程序中全局变量的是否初始化有什么关系?
注意未初始化的数据放在bss段。
可执行文件。
包含了代码和数据。具有可执行的程序。
可重定位文件。
包含了代码和数据(这些数据是和其他重定位文件和共享的object文件一起连接时使用的)。
共享object文件(又可叫做共享库)。
包含了代码和数据(这些数据是在连接时候被连接器ld和运行时动态连接器使用的)。
使创建共享库容易,使动态装载和共享库的结合更加容易。在ELF下,在C++中,全局的构造函数和析构函数在共享库和静态库中用同样方法处理。
使用过哪些进程间通讯机制,并详细说明(重点)。
makefile编写,虽然比较基础,但是会被问到
vim makefile
hello.o:hello.c hello.h
gcc –c hello.o -Lm
gdb调试相关的经验,会被问到
如何定位内存泄露?
内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的、大小任意的(内存块的大小可以在程序运行期决定)、使用完后必须显示释放的内存。应用程序一般使用malloc、realloc、new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块。否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
C++程序缺乏相应的手段来检测内存信息,只能使用top指令观察进程的动态内存总额。而且程序退出时,我们无法获知任何内存泄漏信息。使用Linux命令回收内存,可以使用ps、kill两个命令检测内存使用情况和进行回收。在使用超级用户权限时使用命令“ps”,它会列出所有正在运行的程序名称和对应的进程号(PID)。kill命令的工作原理是向Linux操作系统的内核送出一个系统操作信号和程序的进程号(PID)。
动态链接和静态链接的区别。
动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的dll文件中,当程序运行时直接从操作系统中找。 而静态链接就是把所有用到的函数全部链接到exe文件中。
动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入;而静态链接是把所有的代码和数据都复制到本模块中,运行时就不再需要库了。
32位系统一个进程最多有多少堆内存。
多线程和多进程的区别,重点。
面试官最最关心的一个问题,必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催。
写一个c程序辨别系统是16位or32位
法一:int k=~0;
if((unsigned int)k &63356) cout&&&at least 32 bits&&&
else cout&&&16 bits&&&
法二://32为系统
int i=65536;
int j=65535;
写一个c程序辨别系统是大端or小端字节序
用联合体:如char类型的,可以看他输出的是int的高字节还是低字节
信号:列出常见的信号,信号怎么处理?
i++是否原子操作?并解释为什么?
说出你所知道的linux系统的各类同步机制(重点),什么是死锁?如何避免死锁(每个技术面试官必问)
死锁的条件。(互斥条件(Mutual exclusion):
1、资源不能被共享,只能由一个进程使用。
2、请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
3、非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
4、循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。
处理死锁的策略:
1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
2.检测死锁并且恢复。
3.仔细地对资源进行动态分配,以避免死锁。
4.通过破除死锁四个必要条件之一,来防止死锁产生。
列举说明linux系统的各类异步机制。
exit()与_exit()的区别?
_exit终止调用进程,但不关闭文件,不清除输出缓存,也不调用出口函数。exit函数将终止调用进程。在退出程序之前,所有文件关闭,缓冲输出内容将刷新定义,并调用所有已刷新的“出口函数”(由atexit定义)。
‘exit()’与‘_exit()’有不少区别在使用‘fork()’,特别是‘vfork()’时变得很突出。
‘exit()’与‘_exit()’的基本区别在于前一个调用实施与调用库里用户状态结构(user-mode-constructs)有关的清除工作(clean-up),而且调用用户自定义的清除程序。
如何实现守护进程?
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同 Unix环境下守护进程的编程规则并不一致。需要注意,照搬某些书上的规则(特别是BSD4.3和低版本的System V)到Linux会出现错误的。下面将给出Linux下守护进程的编程要点和详细实例。
守护进程及其特性。
守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。最后,守护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(shell)执行。
总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。如果对进程有比较深入的认识就更容易理解和编程了。
守护进程的编程要点。
前面讲过,不同Unix环境下守护进程的编程规则并不一致。所幸的是守护进程的编程原则其实都一样,区别在于具体的实现细节不同。这个原则就是要满足守护进程的特性。同时,Linux是基于Syetem V的SVR4并遵循Posix标准,实现起来与BSD4相比更方便。编程要点如下;
1. 在后台运行。
为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。
if(pid=fork())
exit(0); //是父进程,结束父进程,子进程继续
2. 脱离控制终端,登录会话和进程组。
有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。方法是在第1点的基础上,调用setsid()使进程成为会话组长:
说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
3. 禁止进程重新打开控制终端。
现在,进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:
if(pid=fork()) exit(0); //结束第一子进程,第二子进程继续(第二子进程不再是会话组长)
4. 关闭打开的文件描述符。
进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。按如下方法关闭它们:
for(i=0;i 关闭打开的文件描述符close(i);&
5. 改变当前工作目录。
进程活动时,其工作目录所在的文件系统不能卸下。一般需要将工作目录改变到根目录。对于需要转储核心,写运行日志的进程将工作目录改变到特定目录如 /tmpchdir(&/&)
6. 重设文件创建掩模。
进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除:umask(0);
7. 处理SIGCHLD信号。
处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将 SIGCHLD信号的操作设为SIG_IGN。
signal(SIGCHLD,SIG_IGN);
这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程。
守护进程实例。
守护进程实例包括两部分:主程序test.c和初始化程序init.c。主程序每隔一分钟向/tmp目录中的日志test.log报告运行状态。初始化程序中的init_daemon函数负责生成守护进程。读者可以利用init_daemon函数生成自己的守护进程。
linux的内存管理机制是什么?
Linux虚拟内存的实现需要6种机制的支持:地址映射机制、内存分配回收机制、缓存和刷新机制、请求页机制、交换机制和内存共享机制。
内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址。当用户程序运行时,如果发现程序中要用的虚地址没有对应的物理内存,就发出了请求页要求。如果有空闲的内存可供分配,就请求分配内存(于是用到了内存的分配和回收),并把正在使用的物理页记录在缓存中(使用了缓存机制)。如果没有足够的内存可供分配,那么就调用交换机制;腾出一部分内存。
另外,在地址映射中要通过TLB(翻译后援存储器)来寻找物理页;交换机制中也要用到交换缓存,并且把物理页内容交换到交换文件中,也要修改页表来映射文件地址。
linux的任务调度机制是什么?
标准库函数和系统调用的区别?
系统调用和库函数的关系。
系统调用通过软中断int 0x80从用户态进入内核态。函数库中的某些函数调用了系统调用。函数库中的函数可以没有调用系统调用,也可以调用多个系统调用。编程人员可以通过函数库调用系统调用。高级编程也可以直接采用int 0x80进入系统调用,而不必通过函数库作为中介。如果是在核心编程,也可以通过int 0x80进入系统调用,此时不能使用函数库。因为函数库中的函数是内核访问不到的。
从用户调用库函数到系统调用执行的流程。
1) 假设用户调用ssize_t write (int fields, cont void *buff, size_t nbytes);库函数。
2) 库函数会执行int 0x80中断。因为中断使得进程从用户态进入内核态,所以参数通过寄存器传送。
3) 0x80中断对应的中断例程被称为system call handler。其工作是:
存储大多数寄存器到内核堆栈中。这是汇编代码写的。
执行真正的系统调用函数――system call service routine。这是C代码。
iii. 通过ret_from_sys_call ()返回,回到用户态的库函数。这是汇编代码。
系统调用提供的函数如open, close, read, write, ioctl等,需包含头文件unistd.h。以write为例:其函数原型为 size_t write(int fd, const void *buf, size_t nbytes),其操作对象为文件描述符或文件句柄fd(file descriptor),要想写一个文件,必须先以可写权限用open系统调用打开一个文件,获得所打开文件的fd,例如 fd=open(/&/dev/video/&, O_RDWR)。fd是一个整型值,每新打开一个文件,所获得的fd为当前最大fd加1。Linux系统默认分配了3个文件描述符值:0-standard input,1-standard output,2-standard error。
系统调用通常用于底层文件访问(low-level file access),例如在驱动程序中对设备文件的直接访问。
系统调用是操作系统相关的,因此一般没有跨操作系统的可移植性。
系统调用发生在内核空间,因此如果在用户空间的一般应用程序中使用系统调用来进行文件操作,会有用户空间到内核空间切换的开销。事实上,即使在用户空间使用库函数来对文件进行操作,因为文件总是存在于存储介质上,因此不管是读写操作,都是对硬件(存储器)的操作,都必然会引起系统调用。也就是说,库函数对文件的操作实际上是通过系统调用来实现的。例如C库函数fwrite()就是通过write()系统调用来实现的。
这样的话,使用库函数也有系统调用的开销,为什么不直接使用系统调用呢?这是因为,读写文件通常是大量的数据(这种大量是相对于底层驱动的系统调用所实现的数据操作单位而言),这时,使用库函数就可以大大减少系统调用的次数。这一结果又缘于缓冲区技术。在用户空间和内核空间,对文件操作都使用了缓冲区,例如用fwrite写文件,都是先将内容写到用户空间缓冲区,当用户空间缓冲区满或者写操作结束时,才将用户缓冲区的内容写到内核缓冲区,同样的道理,当内核缓冲区满或写结束时才将内核缓冲区内容写到文件对应的硬件媒介。
库函数调用
标准C库函数提供的文件操作函数如fopen, fread, fwrite, fclose, fflush, fseek等,需包含头文件stdio.h。以fwrite为例,其函数原型为size_t fwrite(const void *buffer, size_t size, size_t item_num, FILE *pf),其操作对象为文件指针FILE *pf,要想写一个文件,必须先以可写权限用fopen函数打开一个文件,获得所打开文件的FILE结构指针pf,例如pf=fopen(/&~/proj/filename/&, /&w/&)。实际上,由于库函数对文件的操作最终是通过系统调用实现的。
因此,每打开一个文件所获得的FILE结构指针都有一个内核空间的文件描述符fd与之对应。同样有相应的预定义的FILE指针:stdin-standard input,stdout-standard output,stderr-standard error。
库函数调用通常用于应用程序中对一般文件的访问。
库函数调用是系统无关的,因此可移植性好。
由于库函数调用是基于C库的,因此也就不可能用于内核空间的驱动程序中对设备的操作ping命令所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。
系统如何将一个信号通知到进程?
宏定义和展开(必须精通)
位操作(必须精通)
指针操作和计算(必须精通)
内存分配(必须精通)
sizeof必考
各类库函数必须非常熟练的实现
哪些库函数属于高危函数,为什么?(strcpy等等)
一个String类的完整实现必须很快速写出来(注意:赋值构造,operator=是关键)
虚函数的作用和实现原理(必问必考,实现原理必须很熟)
有虚函数的类内部有一个称为“虚表”的指针(有多少个虚函数就有多少个指针),这个就是用来指向这个类虚函数。也就是用它来确定调用该那个函数。
实际上在编译的时候,编译器会自动加入“虚表”。虚表的使用方法是这样的:如果派生类在自己的定义中没有修改基类的虚函数,就指向基类的虚函数;如果派生类改写了基类的虚函数(就是自己重新定义),这时虚表则将原来指向基类的虚函数的地址替换为指向自身虚函数的指针。那些被virtual关键字修饰的成员函数,就是虚函数。
虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。
每个类都有自己的vtbl,vtbl的作用就是保存自己类中虚函数的地址,我们可以把vtbl形象地看成一个数组,这个数组的每个元素存放的就是虚函数的地址,
虚函数的效率低,其原因就是,在调用虚函数之前,还调用了获得虚函数地址的代码。
sizeof一个类求大小(注意成员变量,函数,虚函数,继承等等对大小的影响)
指针和引用的区别(一般都会问到)
相同点:1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
区别:1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
4. 引用没有 const,指针有 const;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
7. 指针和引用的自增(++)运算意义不一样;
8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。
多重类构造和析构的顺序。
先调用基类的构造函数,在调用派生类的构造函数
先构造的后析构,后构造的先析构
stl各容器的实现原理(必考)
STL共有六大组件
1、容器。2、算法。3、迭代器。4、仿函数。6、适配器。
序列式容器:
vector-数组,元素不够时再重新分配内存,拷贝原来数组的元素到新分配的数组中。
list-单链表。
deque-分配中央控制器map(并非map容器),map记录着一系列的固定长度的数组的地址.记住这个map仅仅保存的是数组的地址,真正的数据在数组中存放着.deque先从map中央的位置(因为双向队列,前后都可以插入元素)找到一个数组地址,向该数组中放入数据,数组不够时继续在map中找空闲的数组来存数据。当map也不够时重新分配内存当作新的map,把原来map中的内容copy的新map中。所以使用deque的复杂度要大于vector,尽量使用vector。
stack-基于deque。
queue-基于deque。
heap-完全二叉树,使用最大堆排序,以数组(vector)的形式存放。
priority_queue-基于heap。
slist-双向链表。
关联式容器:
set,map,multiset,multimap-基于红黑树(RB-tree),一种加上了额外平衡条件的二叉搜索树。
hash table-散列表。将待存数据的key经过映射函数变成一个数组(一般是vector)的索引,例如:数据的key%数组的大小=数组的索引(一般文本通过算法也可以转换为数字),然后将数据当作此索引的数组元素。有些数据的key经过算法的转换可能是同一个数组的索引值(碰撞问题,可以用线性探测,二次探测来解决),STL是用开链的方法来解决的,每一个数组的元素维护一个list,他把相同索引值的数据存入一个list,这样当list比较短时执行删除,插入,搜索等算法比较快。
hash_map,hash_set,hash_multiset,hash_multimap-基于hash table。
extern c 是干啥的,(必须将编译器的函数名修饰的机制解答的很透彻)
volatile是干啥用的,(必须将cpu的寄存器缓存机制回答的很透彻)
volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化。
从而可以提供对特殊地址的稳定访问;如果不使用volatile,则编译器将对所声明的语句进行优化。(简洁的说就是:volatile关键词影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错)
volatile的本质:
1& 编译器的优化
在本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致。
当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致。
2&volatile应该解释为“直接存取原始内存地址”比较合适,“易变的”这种解释简直有点误导人。
static const等等的用法,(能说出越多越好)
数据结构或者算法:
《离散数学》范围内的一切问题皆由可能被深入问到(这个最坑爹,最重要,最体现功底,最能加分,特别是各类树结构的实现和应用)
各类排序:大根堆的实现,快排(如何避免最糟糕的状态?),bitmap的运用等等。
hash, 任何一个技术面试官必问(例如为什么一般hashtable的桶数会取一个素数?如何有效避免hash结果值的碰撞)
网络编程:
tcp与udp的区别(必问)
1.基于连接与无连接
2.对系统资源的要求(TCP较多,UDP少)
3.UDP程序结构较简单
4.流模式与数据报模式
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证
TCP---传输控制协议。
提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP---用户数据报协议。
是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快
tcp连接中时序图,状态图,必须非常非常熟练。
socket服务端的实现,select和epoll的区别(必问)。
select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。
对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。
1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费。
2.1024上限问题,一个处理多个用户的进程,fd值远远大于1024。
所以这个时候应该采用poll,
poll传递的是数组头指针和该数组的长度,只要数组的长度不是很长,性能还是很不错的,因为poll一次在内核中申请4K(一个页的大小来存放fd),尽量控制在4K以内。
epoll还是poll的一种优化,返回后不需要对所有的fd进行遍历,在内核中维持了fd的列表。select和poll是将这个内核列表维持在用户态,然后传递到内核中。但是只有在2.6的内核才支持。
epoll更适合于处理大量的fd ,且活跃fd不是很多的情况,毕竟fd较多还是一个串行的操作。
epoll哪些触发模式,有啥区别?
必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认。
epoll可以同时支持水平触发和边缘触发(Edge Triggered,只告诉进程哪些文件描述符刚刚变为就绪状态,它只说一遍,如果我们没有采取行动,那么它将不会再次告知,这种方式称为边缘触发),理论上边缘触发的性能要更高一些,但是代码实现相当复杂。
epoll同样只告知那些就绪的文件描述符,而且当我们调用epoll_wait()获得就绪文件描述符时,返回的不是实际的描述符,而是一个代表就绪描述符数量的值,你只需要去epoll指定的一个数组中依次取得相应数量的文件描述符即可,这里也使用了内存映射(mmap)技术,这样便彻底省掉了这些文件描述符在系统调用时复制的开销。
另一个本质的改进在于epoll采用基于事件的就绪通知方式。在select/poll中,进程只有在调用一定的方法后,内核才对所有监视的文件描述符进行扫描,而epoll事先通过epoll_ctl()来注册一个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似callback的回调机制,迅速激活这个文件描述符,当进程调用epoll_wait()时便得到通知。
大规模连接上来,并发模型怎么设计。
tcp结束连接怎么握手,time_wait状态是什么,为什么会有time_wait状态?哪一方会有time_wait状态,如何避免time_wait状态占用资源(必须回答的详细)
tcp头多少字节?哪些字段?(必问)
头20字节,选项12字节
什么是滑动窗口(必问)
动窗口(Sliding window )是一种流量控制技术。滑动窗口协议是用来改善吞吐量的一种技术,即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。
当滑动窗口为0时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个1字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;
同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。
connect会阻塞,怎么解决?(必考必问)
最通常的方法最有效的是加定时器;也可以采用非阻塞模式。设置非阻塞,返回之后用select检测状态。
如果select返回可读,结果只读到0字节,什么情况?
某个套接字集合中没有准备好,可能会select内存用FD_CLR清该位为0;
keepalive 是什么东东?如何使用?
设置Keepalive参数,检测已中断的客户连接
Determine how long to wait before probing the connection. On most platforms the default is 2 hours.
Determine how long to wait before retrying the probe.
Determine how many times to probe the connection.
列举你所知道的tcp选项,并说明其作用。
1.窗口扩大因子TCP Window Scale Option (WSopt)
TCP窗口缩放选项是用来增加TCP接收窗口的大小而超过65536字节。
2.SACK选择确认选项
最大报文段长度(M S S)表示T C P传往另一端的最大块数据的长度。当建立一个连接时,每一方都有用于通告它期望接收的 M S S选项(M S S选项只能出现在S Y N报文段中)。通过MSS,应用数据被分割成TCP认为最适合发送的数据块,由TCP传递给IP的信息单位称为报文段或段(segment)。
CP通信时,如果发送序列中间某个数据包丢失,TCP会通过重传最后确认的包开始的后续包,这样原先已经正确传输的包也可能重复发送,急剧降低了TCP性能。为改善这种情况,发展出SACK(Selective Acknowledgment, 选择性确认)技术,使TCP只重新发送丢失的包,不用发送后续所有的包,而且提供相应机制使接收方能告诉发送方哪些数据丢失,哪些数据重发了,哪些数 据已经提前收到等。
3.MSS: Maxitum Segment Size 最大分段大小
socket什么情况下可读?
a. The number of bytes of data in the socket receive buffer is greater than or
equal to the current size of the low-water mark for the socket receive buffer.
A read operation on the socket will not block and will return a value greater than 0
The read half of the connections is closed (i.e., A TCP connection that has received a FIN).
A read operation on the socket will not block and will return 0 (i.e., EOF)
c. The socket is a listening socket and the number of completed connection is nonzero.
An accept on the listening socket will normally not block, although we will describe a
d. A socket error is pending. A read operation on the socket will not block and will return
an error (-1) with errno set to the specific error condition
mysql,会考sql语言,服务器数据库大规模数据怎么设计,db各种性能指标。
最后:补充一个最最重要,最最坑爹,最最有难度的一个题目:
一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和I/O操作,如果让你设计,你怎么设计?
来源于CSDN
更多腾讯校招的资讯请猛戳
1、测试开发工程师
测试开发工程师面试过程:
网上投的简历,电话过去面试,主要是做基站测试的,问了一些自动测试方面的问题,第二面是hr单独谈,主要谈谈薪水以及离职原因等等。
测试开发工程师面试问题:
主要问问labview,一些常用的接口,测试仪器等等
2、软件工程师
软件工程师面试过程:
学校不在上海,所以第一面是电面。二面是去的上海,那时候已经临近毕业,时间也比较多,所以就去了。里面给人总体的感觉是比较轻松,工作氛围不错。但可能是因为有老国企的成分在里面,难免有点跟不上诸如华为,思科等企业的激进的步伐。但是总的来说性价比还不错。
软件工程师面试问题:
目前对通信行业有什么理解?
想要了更多解阿尔卡特朗讯的求职信息请点击
本文来自应届生,由小编整理发布,如有侵权请联系我们
面试之前看过好多学长学姐的面经,现在自己也拿到offer了,所以想写一下,让更多的人受益。。没咋写过东西,写的不好,不好意思哈。。
楼主本人今年研一,因为研二可以参加实习,就从3月份开始准备找实习了。
3月20号左右参加了阿里巴巴的招聘内推,投的是JAVA研发,当时由于刚开始找实习,好多知识没有充分准备,败在了电面上。不过还好不影响校招计划,所以就继续准备参加阿里巴巴校招。
一、在线笔试
4月10几号参加了在线笔试,由于当时投的是测试开发,以为会有好多的测试类题目,谁想到,几乎没有测试题目。题目的类型就跟牛客网上的阿里巴巴历年的校招开发类题目差不多,分为选择题,和三道解答题。基本上选择题做好了,就有了面试的机会。好多同学就是在线笔试么有通过,于是没有了后面的面试,很遗憾。
我参加完笔试,在4月17号收到了阿里巴巴面试的通知。由于当时在参加另一个公司的面试,收到邮件后就没有及时看,本来可以预约上海,最后没办法预约到了21号的杭州。其实想想也还好啦,杭州相比上海机会能好点。。毕竟没有那么多牛逼的大学。。然后就是各种准备面试啦啥的。。
期间还参加了华为的实习生招聘,也都顺利通过。
二、杭州一面
当时在杭州的华洋宾馆面试,去了先拿自己的通关卡签到,基本上是按照签到的顺序面试的。不是按照预约的顺序。。就等啊等。。看着前面的屏幕叫你的号。会有人领你去另一个大堂里参加面试。头一次见这么大的面试场面,全是一对一,好多面试官。。不愧是阿里巴巴。。
我被领到一个桌子前面,面试官看上去很严肃。但是我到的时候主动跟我握手,突然面带微笑。。这时候果断 出手握手,说您好。您先坐。。于是就开始了一面。
1.先让我做一下自我介绍,我就吧啦吧啦的说了之前准备好的自我介绍。PS.自我介绍一定要说重点,不要说什么家庭地址,籍贯什么的,要说毕业学校,本科学校,专业,擅长的技术,做过的项目或者科研经历,可以顺带说一下爱好。。
2.面试官看我的简历说你擅长JAVA吧?那说一下JAVA其他语言相比的优点。easy.JAVA的内存管理机制,堆区,栈区。。。进程间通信。。JAVA的多线程,JAVA能否多继承,equals和==的区别,HASHMAP 冲突检测。。冲突预防。。等等等的核心关键知识点。。
3.熟悉Android是吧?说一下Android的四大组件,Android框架,activity的生命周期。。intent是干什么的。service干什么的。。简单介绍一下你的Android项目。
4.看我项目里有SSH。就让我说一下我对SSH的理解,以及里面一些基本的核心知识。AOP IOC等等。事务。。MVC。。。
5.到了写代码的环节。。让我在纸上写一个生成循环数组的算法。。就下面的东东。。当时写了一半,然后跟他说了一下我的想法。他说OK。
6.让我测淘宝的登录功能。。我说了一下我的测试思路。说的不全。。他提示我忘记了什么,安全性啦。。压力啦。。商业方面的测试。。我就补充了一下。。他感觉还挺满意的。。
7.最后,问我有什么想问他的。。我就问了一下 测试开发和 测试
对应聘人员的主要要求
区别在哪儿。能胜任测试开发岗位测必须具备的素质是什么。。。等等。。问的挺投机。。他也很耐心的跟我讲解。
就完啦。。让我到休息区等等。。
自我感觉能得80分,,都感觉过不了了。。。谁知待会儿收到了二面的通知。于是又等啊等。等了20几分钟被一个姐姐领到了一个小教室。。桌子的纸牌上写的终面。。。啊哈哈。感觉有戏了。。
三、杭州二面&三面
到了桌子边,坐了两个人,都是女面试官。。最后才知道是二面三面在一起。。hr。。。我擦。。。咋办。头一次遇到这种情况。。深呼吸。。
1.还是让我做自我介绍。。balabala....
2.看我的简历。。问我的项目。。问我为什么选择测试开发啦。。。
3.让我在纸上写一下我的项目的技术框架。。。然后对写的东西做一下介绍。
4.问在项目期间都坐了什么类型的测试。。。压力测试啦。并发测试啦。。QC.loadrunner。。都没咋用过,但是我就说了一下。。。
5.让我写一下我做的那个模块的测试用例。。。
6.问我SSH框架的原理个人理解。。。这些都是之前很擅长的。。。
还有些其他问题。记得不是太清楚。。感觉都是开放的题目。。自由发挥。
1.问我大学遇到的最大的挑战是什么。。。我相比别人的优势。。
2.为什么要选择测试开发。。
3.项目里最值得自己自豪的技术或者想法。
4.问我的爱好。。现在还有坚持吗?
5.现在有什么公司的offer..如果阿里给你了你会选择哪个?为什么
6.BAT有都面试过吗??感觉呢?
7.可以实习多久。
二面三面是一起的。。出来后才知道,过了一会通知我今天的面试全部结束。。自我感觉良好。。。觉得有戏。到4月24日收到阿里巴巴的短信和邮件,也就是录用意向书。被分到了技术质量部门。实习地点在杭州。。
总结:通过这次阿里巴巴的笔试,面试。。个人觉得,基础知识的建立特别重要。不管什么开发岗位。都问的基本上是基础知识:算法,数据结构,操作系统。网络。。还有自己擅长的语言。。数据库。。所以要想面试有好的结果,必须有扎实的基础。。多看看csdn上牛人的博客。。因为那些博客都是有关某个重要知识点的扩展。。这个我很有体会。
还有就是大公司也没有想象中的那么难进。。只要基础牢,瞅准哪个岗位,看这个岗位需要具备什么知识技能,从现在开始就去学习,准备。。到时候自然如鱼得水!
不要好高骛远,啥都学,啥都不精通。。。要精不要泛!!
最后,相信自己,成功把握在自己手中。。
楼主拙见,有表达不清楚的勿喷。。。O(∩_∩)O哈哈~
【转自牛克网】
问题:如何快速比较这两个字符是否相等?
两个字符串相等的条件如下,字符串中的两个字母出现的次数都相等。例如:abbcd和acdbb是相等的,因为a都出现1次,b都出现2次,c都出现3次,d都出现4次。请先给出解题思路,然后用你熟悉的语言进行具体的代码实现。(可在答案中注明解题思路)
思路:创建两组桶,用于存放52个字母(假设字符串全部由字母组成),每个桶代表一个
字母,其中有一个值,出现一个字母则对应的值加一。最后两组桶比较每个桶的值便能得
知字符串是否相等。
#include &stdio.h&
#include &string&
/** 给代表对应字母的桶赋值 */
void loadStr(int bucket[52],
char str[32])
int tempStr = 0;
for(int i = 0; i & strlen(str); ++i)
tempStr = str[i] - 'A';
bucket[tempStr] += 1;
/** 对比两组桶中同下标的值 */
void cmp(int bucket_1[52], int bucket_2[52])
for(int i = 0; i & 52; ++i)
if(bucket_1[i] != bucket_2[i])
printf(&字符串丌相等!\n&);
printf(&字符串相等!\n&);
int main()
int bucket_1[52] = {0};
int bucket_2[52] = {0};
char str_1[32];
char str_2[32];
printf(&输入第一组字字母:\n&);
gets(str_1);
printf(&输入第二组字字母:\n&);
gets(str_2);
if (strlen(str_1) != strlen(str_2))
printf(&字符串丌相等&);
getchar();
return -1;
loadStr(bucket_1, str_1);
loadStr(bucket_2, str_2);
cmp(bucket_1, bucket_2);
getchar();
问题1:简单搜索的资料找找感觉!
思路:个人感觉网上的都比较简单,没有现成的代码,可以分2步:
【1】串排序
(从a到z排序,可以用快速排序戒者选择排序算法,好处是每次比较都可以归位一个元素,严蔚敏戒者联考的书上看下代码。快速排序在9种算法中平均效率最好,但是正顺时效率最低,逆序时效率最高;而选择排序不原始数据序列无关。可以说2种排序算法各有优缺点。)
【2】串比较
KMP模式匹配算法
KMP模式匹配算法
(用数据结构串的知识,用与门比较字符串,要是2个子串相等原串就是一样的,
严蔚敏书有代码。题外话,是当今世界最受人们重视的十大经典算法之一。)
快速排序算法:
void qksort(listType r , int s,t)
qkpass(r, s, t, &k);
qksort(r, s, k-1);
qksort(r, k+1, t);
void qkpass(listType r, int s,t,*i)
*i = j = rp = r[s]; x = r[s].
while(i & j)
while((*i & j) (r[j].key &= x))
r[*i] = r[j];
while((*i & j) (r[i].key &= x))
r[j] = r[*i];
KMP模式匹配算法:
void GetNext(SqString t,int next[])
j=0;k=-1;next[0]=-1;
while (j&t.len-1)
if (k==-1 || t.data[j]==t.data[k])
/*k为-1戒比较的字符相等时*/
next[j]=k;
k=next[k];
int KMPIndex(SqString s,SqString t)
int next[MaxSize],i=0,j=0,v;
GetNext(t,next);
while (i&s.len && j&t.len)
if (j==-1 || s.data[i]==t.data[j])
/*i,j各增1*/
else j=next[j];
/*i丌变,j后退*/
if (j&=t.len)
/*返回匹配模式串的首字符下标*/
/*返回丌匹配标志*/
操作:代码来自严蔚敏书本
【1】快速排序代码
【2】KMP模式匹配代码
问题:点评有很多用户,每个用户发表点评或者添加商户都会有一定的积分,积分可能会在使用过程中随时更新。如何在这个千万级别的用户中,找出积分最高的10个用户。(开放性题目)
根据特定的场景,采用巧妙的算法搭配合适的数据结构,才能达到最佳的效果。基于这条设计原则,为了寻求最高的效率,我们综合考虑影响查询的若干前置因素。比如海量数据是否建立了索引,海量数据分布在 N 台电脑中,查询记录的重复性,IO 的开销等。
对于题设已知条件,可以认为隐含了该系统使用了缓存或负载均衡机制,那么查询出来的数据如果是重复的,就会使用缓存中的记录,于是分 2 种情况讨论 :
(1)重复的数据比较多,可能对于所有的 query,一次性就可以加入到内存了。比如虽然有一千万个 Query,但是由于重复度比较高,因此事实上只有 100 万的 Query,每个 Query 10Byte。可以采用 hashMap 建立数据字典,统计每个 query 出现的次数,然后用最小堆排序取}

我要回帖

更多关于 冯诺依曼计算机结构图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信