计算机知识 查漏补缺

1、HTTP状态:301,302

301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:
301 redirect: 301 代表永久性转移(Permanently Moved)。
302 redirect: 302 代表暂时性转移(Temporarily Moved )。

301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。

 2、TCP和UDP的区别

TCP(Transmission Control Protocol,传输控制协议)是可靠的,面向连接,三次握手,四次挥手
UDP(User Data Protocol,用户数据报协议)不可靠,不面向连接的

TCPUDP

3、TCP和HTTP的区别

http是超文本传输协议,应用层协议,基于tcp的连接方式
TCP是运输层协议,面向连接

 

4、进程和线程的区别,线程共享什么资源?

进程是一个可拥有资源的独立单位,进程又是可独立调度和分派的基本单位。
如果操作系统中引入进程的目的,是为了使多个程序能并发执行,以提高资源利用率和系统吞吐量,那么,在操作系统中引入线程,则是为了减少程序在并发执行时所付出的时间开销,使OS具有更好的并发性。

进程(英语:process),是计算机中已运行程序的实体。
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

1. 进程:程序的一次执行
2. 线程:CPU的基本调度单位

进程的内存空间是共享的,每个线程都可以使用这些共享内存。
同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

 

5、tcp 的状态close_wait状态

CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。

解决办法:有两种措施可行
一、解决:
原因是因为调用ServerSocket类的accept()方法和Socket输入流的read()方法时会引起线程阻塞,所以应该用setSoTimeout()方法设置超时(缺省的设置是0,即超时永远不会发生);超时的判断是累计式的,一次设置后,每次调用引起的阻塞时间都从该值中扣除,直至另一次超时设置或有超时异常抛出。
比如,某种服务需要三次调用read(),超时设置为1分钟,那么如果某次服务三次read()调用的总时间超过1分钟就会有异常抛出,如果要在同一个Socket上反复进行这种服务,就要在每次服务之前设置一次超时。

二、规避:
调整系统参数,包括句柄相关参数和TCP/IP的参数;
当客户端因为某种原因先于服务端发出了FIN信号,就会导致服务端被动关闭,若服务端不主动关闭socket发FIN给Client,此时服务端Socket会处于CLOSE_WAIT状态(而不是LAST_ACK状态)。通常来说,一个CLOSE_WAIT会维持至少2个小时的时间(系统默认超时时间的是7200秒,也就是2小时)。如果服务端程序因某个原因导致系统造成一堆CLOSE_WAIT消耗资源,那么通常是等不到释放那一刻,系统就已崩溃。因此,解决这个问题的方法还可以通过修改TCP/IP的参数来缩短这个时间,于是修改tcp_keepalive_*系列参数:
tcp_keepalive_time:
/proc/sys/net/ipv4/tcp_keepalive_time
INTEGER,默认值是7200(2小时)
当keepalive打开的情况下,TCP发送keepalive消息的频率。建议修改值为1800秒。

 

6、54张牌,分成两堆,大王小王分在一起的概率?

C(2,2)C(52,25) *2 / C(54,27)
= [52!/(25!27!)*2]/[54!/(27!27!)] = 26/53

 

7、找出n个数字中前k个最大的数,时间复杂度最低

方法一、

快速排序法,排序后求前k个数字,时间复杂度o(nlogn)+o(k) = o(nlogn)

冒泡排序,或者选择排序,只排前k个,时间复杂度o(n*k)

根据nlogn 与 K的大小决定选择部分排序还是全排序

 

 

方法二、
N个数字存储在数据S中,从s中随机找出一个元素X,把数组分为两部分Sa和Sb。Sa中元素大于等于x,Sb中元素小于x
有两种可能性:
1、Sa中元素的个数小于K,Sa中所有的数和Sb中最大的K-|Sa| 个元素(|Sa|指Sa中元素的个数)就是数组S中最大的K个数
2、Sa中元素的个数大于或等于K,则需要返回Sa中最大的K个元素
递归分解问题,平均时间复杂o(N*logK)

 

方法三、
前K个数建立一个小根堆,第K+1个数和小根堆的顶点对比,如果小于顶点,则小根堆不变,若大于顶点,则更新堆

 

 

方法四、
N个数都是正整数,用a[N]记录每个数字出现的次数,比如数字出现3,对 a[3]++ ,扫描一遍后,找最大的K个数字

 

 

8、一个二维平面中 N个点,求斜率最大的两个点【平面上N个点,每两个点都确定一条直线,求出斜率最大的那条直线所通过的两个点(斜率不存在的情况不考虑)。时间效率越高越好。】

按x的值排序,求相邻的点的斜率,找出最大值。
理论依据:假如斜率最大的两点是a,b,并且a,b不相邻,那么一定可以找出点c,使得ac或bc的斜率>=a,b的斜率

3个点A,B,C,把它们的按x坐标排序。假设排序后的顺序是ABC,那么有两种情况:
1.ABC共线,则k(AB)=k(BC)=k(AC)
2.ABC不共线,则ABC将形成一个三角形,那么k(AC)<max(k(AB), k(BC))

其中k()表示求斜率。
所以程序的基本步骤就是:
1.把N个点按x坐标排序。o(nlogn)
2.遍历,求相邻的两个点的斜率,找最大值。o(n-1)
时间复杂度哦 o( Nlog(N) )+o(N-1) = o(Nlog(N))

 

9、一个链表,出现环的情况下,一般是最后一个节点没有指向NULL,而是指向了之前的一个节点,找出一个时间复杂度最低的方法判断是否有环。消除环并倒置出现环位置的链表

答:因为出现环,所以会有两个指针指向同一个节点,也就是说地址相同。取指针p1,p2,遍历链表,指针p1每次走一步,p2每次走两步,如果存在环,则遍历一遍的时候一定会导致p1==p2,即可证明有环。类似追击问题

倒置链表,用头插法即可。

http://www.nowamagic.net/librarys/veda/detail/1811

 

10、android 主线程 和后台线程的区别,为什么要分主线程和后台线程

android UI操作不是线程安全的。
线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
不需要考虑同步问题就是线程安全的。
UI线程更新界面,超过5s的耗时操作都会导致”application not responding” ,所以在后台线程进行下载、数据库查询等超时操作。

 

11、如何计算activity显示的时间

Activity生命周期需要牢记。
onStart就开始显示activity的界面了,在这个状态开始计时

 

12、hashmap与map的区别,什么是hashmap

map是一个接口,而HaspMap是它下面的一个实现类

 

13、HashMap和Hashtable的区别

HashMap和Hashtable都实现了Map接口,它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。
HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行
HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable
HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。
由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。

http://www.importnew.com/7010.html

 

14、arraylist和linklist的区别

数组和链表的区别

 

Tagged on:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>