面试问题总结

来源:互联网 发布:网络群众路线 编辑:程序博客网 时间:2024/05/28 09:33

在浏览器中输入www.baidu.com后执行的全部过程

答:1、客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。
2、在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
3、客户端的网络层不用关心应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

各种协议的介绍

答:ICMP协议: 因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。 TFTP协议:
是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。 HTTP协议:
超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。 DHCP协议:
动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。
NAT协议:网络地址转换属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,
DHCP协议:一个局域网的网络协议,使用UDP协议工作,用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

DNS域名系统,简单描述其工作原理。

答:当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53.
该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。
面向连接和非面向连接的服务的特点是什么?
面向连接的服务,通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。
非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。

同样可以实现互斥,互斥锁和信号量有什么区别?

信号量是一种同步机制,可以当作锁来用,但也可以当做进程/线程之间通信使用,作为通信使用时不一定有锁的概念;互斥锁是为了锁住一些资源,是为了对临界区做保护

简述Linux内存分配–伙伴系统 原理

伙伴系统,其思想是:把内存块分成不同的组(1,2,4,8,16,32….);分配内存时找到能够满足条件
的最小的块;如果找不到,就找大的块,然后一分为2,分配一块,留一块;回收时:如果有相邻的同样大小的块,则合并

简述Linux进程内存空间分为哪几个段?作用分别是什么?

enter description here

简述Malloc实现原理

可以基于伙伴系统实现,也可以使用基于链表的实现

• 将所有空闲内存块连成链表,每个节点记录空闲内存块的地址、大小等信息
• 分配内存时,找到大小合适的块,切成两份,一分给用户,一份放回空闲链表
• free时,直接把内存块返回链表
• 解决外部碎片:将能够合并的内存块进行合并

使用mmap读写文件为什么比普通读写函数要快?

mmap函数:可以将文件映射到内存中的一段区域,普通函数读写文件:用户空间buffer内核空间buffer磁盘;mmap映射之后:用户空间buffer进程内存空间,省掉了拷贝到内核空间的时间?

中文编码占用的字节数

因为:Java默认是用gbk编码,而且汉字是占两个字节,都是负数。 所以输出2+4=6,完全正确。

Java中的UTF-8汉字是三个字节,都是负数,其它是一个字节。

System.out.println(java.nio.charset.Charset.defaultCharset().toString()); //当前平台/系统的默认字符集str.getBytes("unicode").length; //12str.getBytes("gbk").length; //6str.getBytes("utf-8").length; //7

super的位置

使用super()或者this()方法是必须放在构造函数的第一行由于this函数指向的构造函数默认有super()方法,所以规定this()super()不能同时出现在一个构造函数中。
因为staic方法或者语句块没有实例时可以使用,而此时不需要构造实例,所以不能用this()和super()

Thread#join函数

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。

t.join();      //使调用线程 t 在此之前执行完毕。t.join(1000);  //等待 t 线程,等待时间是1000毫秒

join可以保证被调用的线程在调用语句后立即执行,这样可以保证顺序执行的特点。

HashMap与Hashtable的区别

Hashtable是Dictionary类的子类,HashMap是Map接口的一个实现类

  1. HashTable的方法是同步的,HashMap未经同步
  2. HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
  3. HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。
  4. HashTable使用Enumeration,HashMap使用Iterator。

排序算法的稳定性和时间复杂度

  1. 常用的排序有简单插入排序,希尔排序,简单选择排序,冒泡排序,归并排序,堆排序还有快速排序。
  2. 其中稳定的排序有:简单插入排序,冒泡排序,归并排序。
  3. 不稳定的有:希尔排序,简单选择排序,堆排序,快速排序。
  4. 时间复杂度为O(n²)的:简单选择排序,简单插入排序,冒泡排序。
  5. 时间复杂度为O(nlogn)的:快速排序,堆排序,归并排序,希尔排序。
  6. 其中最快的一般为快速排序,但是如果是有序数列,则快速排序的时间复杂度为O(n2).
  7. 快速排序虽然快,但是不稳定。
  8. 既稳定又快的就是归并排序。 还有堆排序的作用是快速选出最大的几个数,使用小顶堆、快速选出最小的数,使用大顶堆。
  9. 当然还有一个基数排序。
0 0
原创粉丝点击