百度实习面试实用4篇
【导言】此例“百度实习面试实用4篇”的范文资料由阿拉题库网友为您分享整理,以供您学习参考之用,希望这篇资料对您有所帮助,喜欢就复制下载支持吧!
百度实习面试1
每个人的成功不可复制,但是每个人成功的方法却都是一样。百度三面经历,我发在这里,希望自己能够力所能及的为大家提供些帮助。
1. 百度电话一面
刚刚进行完百度的电话一面,感觉一定要把这个感觉记录下来。其实每次面试完我都对自己面试过程挺有感觉的,觉得面试表现应该还不错!但其实是不是这样,相信大家面试过几次就能明白。我只能告诫大家,感觉好的确实不一定是真的好!
从12点40就开始, 我就找了一个安静的教室准备百度的电话面试。中午饭点的外卖,因为约定的是一点钟面试,由于送外卖的太慢,没有赶上吃。等啊等,等到1点半。我都已经准备走了,因为这个教室都快有人来上课了。
可就当我把笔记本合起来的时候,百度面试官的电话终于来了,你不能想象出那是有多巧。好吧,接电话,接受面试。
我觉得电话的那一边应该是一个很安静的男生。他让我简单的介绍一下自己的项目,我就捡着自己理解的东西,简要的说了一下。果然是百度,找你没有细心准备的点,一找一个准啊!问我的还有哪些需要完善的,我就把无法实现游戏联网对战的想法说了说。他接着就要往深里面问,问你说说winsock编程的几种方式。我就说有五种,但是我仅仅说了其中的一种,却是忘了其他四种是什么了!我的天,估计这点自己真是悲剧了。还是怨自己啊,看书不往深里看。这里面还问到自己的网站情况,我就说自己挂了几天就没有挂了,因为没有那么多钱,但是其实你一定要注意,能拿出来给他看的东西,他肯定会非常喜欢的,当然你也可以引导他,说自己可以把东西发给他!要让他信服,你过的机会当然就大很多。
接着,就是问数据结构算法方面的问题了。先问几万个数的排序,找出最大的几百个数。
我先说了,最起码快排后可以满足。然后提到了位图的解决办法,这个以前自己是看过的。然后就变成有重复数字的存储了,然后就又变成了几十亿了。这个一看就蒙了,虽然自己曾经看过类似的题目,就用了mergesort的方法。也忘说时间效率了,不过这个面试官也是好的不行,慢慢的引导回来了。用最小堆,维护一个100左右大小的最小堆,遍历N就行了,时间复杂度是N*log(M)。而自己实现的算法是N*log(N),效率还是低了一些,而且辅助内存要需要不少。
第二个问题是关于农夫,羊,狼和白菜的问题。先让我说个答案出来。然后告诉我要实现一个程序。我开始说模拟,然后他说会有很多种方法!好吧,我就用DFS的办法遍历吧。感觉应该是能实现的。
然后,让我问问题:我就问了,百度的产品那么多好的,为什么百度没有努力的推广呢。就瞎扯了一顿吧,也没问什么时候能收到通知,人家也懒得给你说这事了。
2. 百度电话二面
百度能给我这次机会,我确实非常的感到意外。百度公司里的人其实都是蛮善良的,由心的感谢百度能给我这次机会,最起码让我感觉到了自己不比别人差多少。
下面讲讲百度电话二面吧,约定的是10点钟面试,这次真的很准时。我准点就收到了电话。因为早上有自己很喜欢的西方经济学,所以根本没有时间准备面试的问题,我就匆匆忙忙拿上电脑到了隔壁实验室准备面试了。刚把电脑打开,电话就打进来了。首先让我做个自我介绍,我就做了个极其简短的自我介绍。然后还是介绍自己做的东西,我就又继续象一面那样的讲自己的项目,不过面试官打断了,说:这个你是不是已经在一面说了。我说是的……肯定让他非常尴尬了,可能他们面试官都有所交流吧。下面就是一道题目:没完全做出。做一个诚信的人一直是我做人的信条,我没有利用可以上网的机会去搜答案。确实是当时没有想出。事后,感觉确实比较简单。哎,自己的思路没有打开啊!题目是这样的,两个连续的质数中,有一个和数,这个和数是能被6整除的,请证明。第二道题目,是一个比较简单的编程题目。但是这么简单的题目,事后我回来验证都没有完全写正确啊!
第三个问题,自己看过,也就解决了,是关于怎么求逆序数的问题。接着估计面试官一看时间都一个多小时了,到时间了,该结束了。让我问问题,我自己脑子也是没什么东西,就随便问了问百度的内部文化,也不敢问很多问题,因为已经超出这么多的时间了。最后,我还是真心感谢了这位Baidu工程师,谢谢给了我面试的机会。求职不易,我清楚,我会努力。
2. 百度电话三面
我不去想能否成功,既然在路上,便只顾风雨兼程。这便是我百度三面的后的心情。
百度三面的面试官是一个姐姐,声音很好听。刚开始还是让我做一个自我介绍,我呱啦呱啦的讲了,但好像那边没反应啊!
介绍下项目,我又呱啦呱啦的讲,根本就跑题了呀!哎。然后就问了我一道搜索引擎的题目:怎么样获取百度和谷歌的资源不同的数目。自己左思右想也没有想出来,然后姐姐就降低了题目的难度,问我你怎么求出泰国的所有资源的总数。我就按照自己的思想就讲了一下,不知道正确不正确,但是面试官姐姐没有问我了。
然后就是长达一个小时的聊天吧,什么都聊:
1. 你们寝室有多少个人,他们都准备毕业去干什么啊?
2. 大学期间你有些什么样的朋友,能给我简要的介绍介绍么?
3. 你是北方的,为什么想去南方上大学啊?
4. 那么我们百度也是在北京,属于北方哦,你是不是还愿意来啊?
5. 班级,实验室最近有没有准备什么活动啊?
6. 你最近有没有出去玩过?是个什么情况?
7. 在大学里面最自豪的事情是什么?
8. 最遗憾的事情是什么?
反正就是通过谈吐看你适不适合百度,我们无须去掩盖自己的内心,求职是一场恋爱,硬性条件达到了,还需要缘分。
3. 百度三面过后,发offer
三面过了之后三天吧,HR就打电话来确定实习时间,说如果能够五月中旬就来实习的话就可以现在发offer,我当时拒绝了,我说自己想7月再去。我以为百度能够协调实习时间。没有经验,差点让我错过百度,看到这篇文章的同学一定要注意,百度的offer时间你一般不要拒绝,他说五月去,(如果你觉得课比百度的offer更重要,你可以坚持)如果你觉得offer更重要,请一定要注意,当时就要答应他吧!
漫长的实习求职总算是告一段落,这一路上的艰辛也只能我自己知道,厌倦了等待却又习惯了等待!幸亏还有一颗坚强的心,不然真不知道自己能否走完这一路。期间的很多辛酸我就不说了,每个人的经历定然是不同的,只是希望你日后的求职能够一帆风顺。
谢谢垂览。
[百度实习面试]
百度面试经验2
下午四点的时候,面试官打来电话
面试官说:现在有时间吗,进行一下电面。
我(灰常不好意思的)说:不好意思啊,我在厕所呢,能改个时间吗?
面试官说:那5点可以吗?
我说:行。
其实不太想这么早面试的,本来想推到下周,不过想想5点就5点吧,反正早晚都是死~赶紧收拾东西从实验室回宿舍。
到了宿舍赶紧架上电脑,手机插上耳机,忐忑的等待面试官的电话。期间还顺便复习了一下常见的几个问题,比如电梯测试啦、链表操作啦之类的,还顺便把现在在百度工作的师兄前段时间讲过的多种测试方法看了一下。没想到临时抱佛教居然全抱住了。
1、开始让自我介绍,我实在不知道怎么做自我介绍,就随便说了一下,包括家乡、爱好、做过的东西等等,好多都是简历上已经有的东西。
2、面试官说那我们讨论一个关于链表的问题吧,他问怎么判断两个链表是否相交。不得不承认,我很狗屎运,刚刚把编程之美这本书放下(我拿起这本书的时候恰好看到这道题),就面到这道题!其实这道题以前看过,晚上宿舍卧谈的时候也讨论过这个问题,不过如果不是刚刚看到这个题的多种解法我顶多也就能说出两种方法,幸好刚刚看了,才记住了剩下的两种解法。很流利的回答了这个问题(其实应该装作思考状的^_^)。
3、面试官感到没有难住我,反而被我搞晕了(因为记录尾节点的方法面试官似乎不知道,这个我很差异,他当时进百度的时候应该有看过编程之美啊!),所以继续链表的问题,怎么判断链表是否有环,这个问题之前宿舍同样也讨论过,我还记得两个指针,一个走一步,一个走两步,面试官不满意,接着问:如何证明一定能相遇呢?我晕,当时有天晚上宿舍卧谈的时候后来我仔细想了这个问题,当时感觉证明了一定能相交的,可是现在哪还能想得起来,就故意做思考状,然后思考了半天也没想出来,我说现在脑子有点晕,一时半会证明不了。面试官说不证明了,现在找出环的入口处。我这个汗那,这个更忘了…象征性的想了半天,没有结果,面试官说没关系。
4、接着面试官问了一个组合数学的题,其实不难,只是我当时真的脑子不是很清楚,死活没有把特殊情况想出来,其实挺简单,就是爬楼梯,有三种方式:一是一次走一步,二是一次走两步,三是一次走三步然后回退一步。问一共有多少种走法。我马上说应该用递推公式吧。他说嗯。然后我就想,递推公式应该是f(n) = f(n - 1) + 2*f(n - 2)。然后他说入口呢,我说f(1) = 1,f(2) = 2。后来他说在最顶层有个问题,我突然就意识到了,但是结果应该还是这个递推式。这个问题就算过去了。
5、接下来面试官说介绍一下你自己印象最深刻的项目吧。我就把本科毕设说了一下,因为我觉得说我看过的操作系统源码有点虚,而且好多细节都忘了,万一面试官恰好精通内核那我就死定了,不过我觉得面试官对无线传感网络了解的应该不多,所以就说起了我的毕设,扯了一通,面试官似乎挺满意,然后问我:你的毕设里面写了用TCL脚本吧……我连忙解释:其实我只是做毕设的时候用了,仅仅是会用即可,对它了解的不多。面试官转而问起其他的问题了。
6、然后面试官似乎又看了遍简历,说看你用过python,这个我又连忙说:其实我是大三的时候学的,之后就没怎么用过,所以忘得差不多了,然后他说没关系,咱们讨论一个比较宽泛的问题:你觉得python和其他语言相比最大的缺点是什么。我就着重说了下python程序分块的问题,采用制表符分块,我说这个有时候容易出问题,我觉得不是很好。然后又扯了扯python的效率问题。这个也就算过去了。
7、然后面试官又问我:看你写的是熟悉TCP/IP协议栈,说说TCP/IP的分层,我就以相当熟练的把五层和七层都说了,也就过去了。然后面试官说能说说你的毕设是在哪层上做的吗?我就说这个问题我和老师讨论过,无线传感网络其实分层不是很明确,似乎物理层上面都应该叫应用层,但是上面还分了MAC层和路由层,其实我在路由层上做的,这个也就过去了,面试官感觉应该挺满意。
8、接着他又问以前的项目中有过测试吗?我直接说了实话:我在计算机学院,可能没有软件学院对软件流程要求的那么好,所以测试基本没做过,但是之前实验室给讲了点一些测试的注意事项,包括功能测试、回归测试、压力测试、性能测试、冒烟测试、自动化测试等等。然后又说了回归测试的意思,我感觉面试官应该算满意,因为这几个知识点是之前在百度的师兄给我们讲的。
9、面试官又问了问如何测试一直钢笔,我瞎说了一通,首先是功能测试,然后是对部件进行测试,然后是压力、性能测试等等。也就算过去了。
10、最后面试官说有什么要问的吗?我就问了问他对我的面试感觉如何,他一直说挺好的。然后我问如果有二面的话什么时候通知?他说一般一周之内通知,我说时间能不能另行商量,因为我这几天要带本科生做实验,然后面试官说可以的。然后就挂掉电话了。
就这么多了,写得太流水账了,不过基本把整个过程表述清楚了吧应该,以备以后使用。
好好准备二面才是现在的事情,估计二面会找个比较牛的面试官了。给自己打打气,加油!
ps:还漏了两道题,一道是关于水仙花数的,求三位数的水仙花数,这个比较简单,可以暴力,不过面试官不太满意,我想了会又说也可以打表,考虑个位数字,然后能知道十位数字和百位数组的组合,就算过去了;另外一道是如何将一个十进制数转换成八进制,我说用栈就可以做,说了流程,最后不知道面试官满意不满意,这道题就算过去了。
百度暑期实习笔试面试应聘秘籍3
基础题,输入结果是什么?
public static void main(String[] args) {
String str = new String(“abc”);
char[] ch = {‘a’,'b’,'c’};
change(str,ch);
(str+” “);
(ch);
}
public static void change(String str,char[] ch){
str = “gbc”;
ch[0] = ‘g’;
}
,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法
的启动模式有哪几种
4.介绍Handler机制
5.线程考核,解析sleep,wait,join,yield方法,以及notify 和notifyAll是如何控制线程同步的
存储方式以及各至用法
中BaseAdapter的使用和优化;在ListView中的item放置一个按钮,如何使用按钮对不能的item响应不同的事件
8.编程题:
题意:生成一个1-100的随机数组,但数组中的数字不能重复,即位置是随机的,但数组元素不能重复
笔试题目就只能记住这么多了。
由于笔试时间是在晚上,麦洛答好题目才交卷,时间大概用一个半小时(感觉其他人答得非常快,有的没有半个小时就交卷了).
总体上,麦洛感觉笔试题目还是比较简单的,只要平时稍微注意学习,这些题目都不是很难。
百度评卷的效率也是很高的,麦洛刚从茂业大厦(百度深圳研发中心)出来不多久,就电话通知进入面试了。第二天面试时,被麦洛瞄到了答卷的分数,93分!
面试的第一轮是第二天9:00开始,在酒店里。因为深圳这边的研发中心刚刚建立起来,面试官都是从北京飞过来的。第一轮面试的面试官,应该也是 Android工程师,这一轮问的题目基本都还行。就是其中一个题目是说,监听数据库变化的一个接口,这个接口麦洛用的比较少,所以没有答上来,就是 ContentObserver这个接口。
这一轮的题目:
1.以前做过项目的,画个简单的架构图,介绍之前的项目;
2.项目中遇到的问题,以及怎么解决的。麦洛就举了之前写的上拉下拉这个控件的例子
Activity生命周期
中View重用的问题
就回忆起这么多了
第一轮讨论的话题是项目比较多,都是介绍项目经验之类的。
这一关讨论了一个多小时,顺利通过。
第二轮还是面试,是另外一个工程师来面试,就是面试官交换面试。
这一轮难度其实也不是特别大,但是因为问到几个麦洛没有做过的东西,被卡住了一下。
能回忆起的题目有:
1.介绍Http协议
协议实现多线程下载并支持断点续传,以及服务端是怎么支持的?
3.面向对象的理解,面向对象的原则C开发封闭原则的理解
wap与net的两种连接方式
5.项目中的一些问题
这一轮主要是一些java基础知识,以及项目中的一些问题
两轮下来一个上午就过去了。麦洛也感觉精疲力尽了。然后就是吃午饭,等待第三轮面试了。
第三轮是比较轻松了。这一轮的面试应该是部门老大级别的了。随便聊聊,说说为何离职,以及有什么问题需要问的,大概半个小时就搞定了。
然后就回去等通知,要1周到两周时间。OMG!麦洛可不想等那么久啊
从笔试到面试总体感觉其实不是特别的难,只要做好准备平时注意积累,很多问题都是很好回答的。
百度面试问题4
百度是全球最大的中文搜索引擎,由李彦宏、徐勇两人创立于北京中关村,源于中国宋朝词人辛弃疾的《青玉案・元夕》词句“众里寻他千百度”。本将介绍百度面试问题。
百度面试问题:
1. cookies和sission的区别和联系:
cookie和session机制之间的区别与联系
具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持。cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力。
而session机制采用的是一种在客户端与服务器之间保持状态的解决方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的。而session提供了方便管理全局变量的方式
session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器。
就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些。因为它不会任意读取客户存储的信息。
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie
从网络服务器观点看所有HTTP请求都独立于先前请求。就是说每一个HTTP响应完全依赖于相应请求中包含的信息状态管理机制克服了HTTP的一些限制并允许网络客户端及服务器端维护请求间的关系。在这种关系维持的期间叫做会话(session)。
Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies
cookie和session机制区别与联系
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。
cookie机制。正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。
cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式
session机制。session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。
2. 实现求1-100内的质数
首先来看一下百度百科上质数的概念:
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数(不包括0)整除的数。因为合数是由若干个质数相乘而得来的,所以,没有质数就没有合数,由此可见质数在数论中有着很重要的地位。比1大但不是质数的数称为合数。1和0既非质数也非合数。质数是与合数相对立的两个概念,二者构成了数论当中最基础的定义之一。基于质数定义的基础之上而建立的问题有很多世界级的难题,如哥德巴赫猜想等。算术基本定理每一个比1大的数(即每个比1大的正整数)要么本身是一个质数,要么可以写成一系列质数的乘积,如果不考虑这些质数的在乘积中的顺序,那么写出来的形式是唯一的。这个定理的重要一点是,将1排斥在质数集合以外。
下面是我面试时在纸上的实现:
View Code
输出:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
3. 三次握手
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
详细请百度:
4. 四次挥手
连接终止协议(四次挥手)
[1]由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
CLOSED: 这个没什么好说的了,表示初始状态。
LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。
SYN_RCVD: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。
SYN_SENT: 这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
ESTABLISHED:这个容易理解了,表示连接已经建立了。
FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。\\而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。
FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也就会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。
LAST_ACK: 这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。
5. STL中map的实现原理
6. STL中vector的实现原理
7. linux gdb调试多线程的方法
info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。
thread ID 切换当前调试的线程为指定ID的线程。
break thread_:123 thread all 在所有线程中相应的行上设置断点
thread apply ID1 ID2 command 让一个或者多个线程执行GDB命令command。
thread apply all command 让所有被调试线程执行GDB命令command。
set scheduler-locking off|on|step 估计是实际使用过多线程调试的人都可以发现,在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。off 不锁定任何线程,也就是所有线程都执行,这是默认值。 on 只有当前被调试程序会执行。 step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。
gdb对于多线程程序的调试有如下的支持:
线程产生通知:在产生新的线程时, gdb会给出提示信息
(gdb) r
Starting program: /root/thread
[New Thread 1073951360 (LWP 12900)]
[New Thread 1082342592 (LWP 12907)]---以下三个为新产生的线程
[New Thread 1090731072 (LWP 12908)]
[New Thread 1099119552 (LWP 12909)]
查看线程:使用info threads可以查看运行的线程。
(gdb) info threads
4 Thread 1099119552 (LWP 12940) 0xffffe002 in ??
3 Thread 1090731072 (LWP 12939) 0xffffe002 in ?? ()
2 Thread 1082342592 (LWP 12938) 0xffffe002 in ?? ()
* 1 Thread 1073951360 (LWP 12931) main (argc=1, argv=0xbfffda04) at :21
(gdb)
注意,行首的蓝色文字为gdb分配的线程号,对线程进行切换时,使用该该号码,而不是上文标出的绿色数字。
另外,行首的红色星号标识了当前活动的线程
切换线程:使用 thread THREADNUMBER 进行切换,THREADNUMBER 为上文提到的线程号。下例显示将活动线程从 1 切换至 4。
(gdb) info threads
4 Thread 1099119552 (LWP 12940) 0xffffe002 in ?? ()
3 Thread 1090731072 (LWP 12939) 0xffffe002 in ?? ()
2 Thread 1082342592 (LWP 12938) 0xffffe002 in ?? ()
* 1 Thread 1073951360 (LWP 12931) main (argc=1, argv=0xbfffda04) at :21
(gdb) thread 4
[Switching to thread 4 (Thread 1099119552 (LWP 12940))]#0 0xffffe002 in ?? ()
(gdb) info threads
* 4 Thread 1099119552 (LWP 12940) 0xffffe002 in ?? ()
3 Thread 1090731072 (LWP 12939) 0xffffe002 in ?? ()
2 Thread 1082342592 (LWP 12938) 0xffffe002 in ?? ()
1 Thread 1073951360 (LWP 12931) main (argc=1, argv=0xbfffda04) at :21
(gdb)
后面就是直接在你的线程函数里面设置断点,然后continue到那个断点,一般情况下多线程的时候,由于是同时运行的,最好设置 set scheduler-locking on
这样的话,只调试当前线程
更多相关文章推荐:
1.工商银行面试问题及答案
2.外贸业务员面试常见问题及答案
3.新媒体运营的面试常见问题
4.管培生面试问题
5.经典的面试问题
6.单位面试问题
7.中小学教师面试问题
护士结构化面试问题
9.最新青年志愿者协会面试问题
大学青年志愿者协会面试问题
卫生系统结构化面试问题
12.护士面试问题
事业单位结构化面试问题及答案
14.事业单位结构化面试问题及答案
上一篇:学生会面试问题(通用4篇)