您的位置:首页 > 职场人生

【面试】经典面试题,你会做几道(持续更新)

2014-09-22 00:26 441 查看
基本算法:

1.对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。

2.一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
  比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; {3,6}{2,4,3} m=2; {3,3}{2,4}{6}
m=3 所以m的最大值为3

3.求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}

4.一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。二分法,要在lg(n)时间完成。

5
找出数组中两个只出现一次的数字:一个整型数组里除了两个数字之外,其他的数字都出现了两次。如果有两个数字只出现一次,而其他数字出现了两次。 

6.
给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数

要求下排每个数都是先前上排那十个数在下排出现的次数。

上排的十个数如下:【0,1,2,3,4,5,6,7,8,9】

举个例子,

上排数值: 0,1,2,3,4,5,6,7,8,9

下排数值: 6,2,1,0,0,0,1,0,0,0

0在下排出现了6次,1在下排出现了2次,

2在下排出现了1次,3在下排出现了0次....

7.通过交换a,b
中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小

8.有一些人,他们一些是冤家,现在给很多这样的“冤家对”,问给的这些人是否可以分成两组,每一组里面没有冤家

 
更多算法:

两个有序数组A[],B[],查找第K大的A[i]+B[j]  杨氏矩阵查找 转自:http://www.darkswordzone.com/?p=1632

x个服务员,n个人,现在已知每个服务员走路都是沿着x、y方向走,而不会走斜线,问哪个服务员距离所有的人的距离和最近。

【快速计算距离和】

首先,考虑一维情况下: 

  当x是【 x1 ... xn】中位数是xm时(中位数两种情况,奇数情况下只有xm,偶数情况下有[ xm, x(m+1) ])
和【x1...xn】距离和最短为minD。
而如果x位于xm左边,且介于xi和x(i+1)之间,那么距离和为minD+2*(|x-x(i+1)|+2*(|x-x(i+2)|..+   |x-xm|*k(如果仅有一个xm为中位数,k取1,;如果有xm,x(m+1)为中位数,k取2)

然后考虑二维情况下:

中位点(xm, ym) 到所有点距离和明显最短,为minDx+minDy
对于非中位点(x,y),距离为 (minDx+ 2*(|x-x(i+1)|+2*(|x-x(i+2)|..+   |x-xm|*k )+ (minDy+ 2*(|y-y(j+1)|+2*(|y-y(j+2)|..+   |y-ym|*k ).k取1或2.
这个式子等于  (minDx+ 2*(|x(i+1)-x(i+2)|..+   |x(i+1)-xm|*k )+ (minDy+ 2*(2*(|y(j+1)-y(j+2)|..+   |y(j+1)-ym|*k ) + s*(x-x(i+1))+t*(y-y(j+1) .粗体部分可以提前dp算出来。后面一部分只需要O(1)时间代价。

那么给定(x,y),寻找距离和的时间代价主要在于找到  [x, x(i+1)]和[yj, y(j+1)]. O(lgn)的
总时间代价O(xlgn)

网络有关:
编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思?
这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用 端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息, 指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧 使用同一端口,此时 SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期 望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不 可能。 
TCP报文在传送过程中可能因为路由故障被迫缓冲延迟、选择非最优路径等等,结果 发送方TCP机制开始超时重传。前一个TCP报文可以称为"漫游TCP重复报文",后一个 TCP报文可以称为"超时重传TCP重复报文",作为面向连接的可靠协议,TCP实现必须 正确处理这种重复报文,因为二者可能最终都到达。  
client server 

FIN M 

close -----------------> (被动关闭) 

ACK M+1 

<----------------- 

FIN N 

<----------------- close 

ACK N+1 

-----------------> 
1 为什么需要 TIME_WAIT 状态? 

一般来说,tcp正常关闭需要四个包。比如a和b关闭连接,a先给b发一个fin,b会进行确认ack,然后b也会发出fin,当a接受到这个fin,并发出最后一个ack后,就会处于time_wait状态。这个时间长短跟操作系统有关,一般会在1-4分钟,也就是两倍的数据包(2msl)最大生存时间。TCP主动关闭方采用TIME_WAIT主要是为了实现终止 TCP全双工连接的可靠性及允许老的重复分节在网络中消逝,等过了2msl(大约1~4分钟)后TIME_WAIT就会消失。 

TIME_WAIT状态的目的是为了防止最后a发出的ack丢失,让b处于LAST_ACK超时重发FIN

2、连接终止协议(四次握手)
   由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
 (1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
 (2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
 (3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
 (4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

3、 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

智力相关

n个绅士,标号1~n,n顶帽子随机发放给绅士,帽子也标号1~n。由于第i个绅士可能发到的不是第i顶帽子,所以要和别人交换以达到第i个人拿到的是标号为i的帽子。 分两种情况:

① 如果只允许第1个绅士来和别人交换怎么办(任何人只能和第一个绅士交换帽子)

② 如果可以两两交换,但是规定每一轮里面每个人只能和别人交换一次。比如四个人 1,2,3,4    1和2交换,3和4交换,算作1轮 (1和4, 2和3都不能交换了,因为他们都和别人交换过了),求最好的交换策略.

有5栋5种颜色的房子; ⒉每一位房子的主人国籍都不同; ⒊5个人每人只喝一种饮料、只抽一个牌子的香烟、养一种宠物; 
提示: 
*⒈英国人住红房子; 
*⒉瑞典人养狗; 
*⒊丹麦人喝茶; 
*⒋绿房子在白房子左边; 
*⒌绿房子主人喝咖啡; 
*⒍抽PALL MALL烟的人养鸟; 
*⒎黄房子主人抽DUNHILL烟; 
*⒏住中间房子的人喝牛奶; 
*⒐挪威人住第一间房子; 
*⒑抽混合烟的人住养猫人旁边; 
*⒒养马人住抽DUNHILL人旁边; 
*⒓抽BLUE MASTER的人住养马人旁边; 
*⒔德国人抽DRINCE烟; 
*⒕挪威人住蓝房子旁边; 
*⒖抽混合烟人邻居喝矿泉水。 
问题:谁养金鱼? 

某公司有F、G、H、I、M和P六位总经理助理,三个部门。每一部门恰由三个总经理助理分管。每个总经理助理至少分管一个部门。以下条件必须满足:
(1)有且只有一位总经理助理同时分管三个部门。
(2)F和G不分管同一部门。
(3)H和I不分管同一部门。
42.以下哪项一定为真?
A、有的总经理助理恰分管两个部门。
B、任一部门由F或G分管。
C、M或P只分管一个部门。
D、没有部门由F、M和P分管。
E、P分管的部门M都分管。
解析:答案A
解析:三个部门,每一部门恰由三个总经理助理分管,计有九个职位。有且只有一位总经理助理同时分管三个部门,那么剩下六个职位将由五人担任。又由于每个总经理助理至少分管一个部门,因此,一定有的总经理助理恰分管两个部门。

/////////////////////////////////
如果F和M不分管同一部门,则以下哪项一定为真?
A、F和H分管同一部门。
B、F和I分管同一部门。
C、I和P分管同一部门。
D、M和G分管同一部门。
E、M和P不分管同一部门。

有个警察,抓了三个逃犯。现警长决定给他们一次机会。他拿出3顶黑帽子,两顶白帽子,然后往这三个逃犯头上每人戴了一顶帽子,每个逃犯只能看到另外两个逃犯帽子的颜色,不能看到自己帽子的颜色,而且不能进行通讯,不能进行讨论,只能靠自己的推理推出来,如果猜出来了,放一条生路,否则处死。 

警长先问第一逃犯,结果第一逃犯猜错了,被杀掉了。 
警长问第二个逃犯,结果还是猜错了,同样被杀掉了。 
警长再问第三个逃犯,结果第三个逃犯猜对了。 
说明一下,每个逃犯在回答问题时,其他逃犯是听不到的。为什么第三个一定能猜中,请你给出解释。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: