2015校招面试笔试题笔记

来源:互联网 发布:经纬度计算距离软件 编辑:程序博客网 时间:2024/06/05 14:37

1、Java泛型中List<? extends T>和List<? super T>的区别是什么?

答:List<? extends T>中规定了List所能存储的只是T或者是T的子类(上限),而且一次只能是存储器中的一种,List<? extends T>只提供get()而不提供put()函数,put(T)会产生编译错误。而List中规定了List所能存储的必须是T类或者是T类的超类(下限),而且List<? super T>只提供了get()函数而不提供put()函数。

详细区别参见 Generics



2、实现ava的单例模式Singletong。

答: 最简单的实现代码如下:

public class Singletong{    private static Singletong instance = new Singletong();    private Singletong(){}    public static Singletong getInstance(){        return instance;    }}


3、StringBuilder和StringBuffer的区别。

答:StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而StringBuilder 没有这个修饰,可以被认为是线程不安全的。因而StringBuilder在单线程的情况下性能要优于StringBuffer。另外,StringBuffer 始于 JDK 1.0,StringBuilder 始于JDK 1.5(从 JDK 1.5 开始,带有字符串变量的连接操作(+),JVM 内部采用的是StringBuilder 来实现的,而之前这个操作是采用 StringBuffer 实现的。)



4、TCP属于哪个层?OSI模型的七层协议分别是哪七层?和现在用的TCP/IP五层协议有什么不同?

答:TCP在TCP/IP网络协议中属于传输层。OSI模型中的七层模型分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而实际采用的网络协议只有五层,分别是物理层、数据链路层、网络层、传输层和应用层。

5、解释一下TCP协议中的三次握手和四次握手,为什么建立连接的时候需要三次握手?

答:TCP/IP协议中,TCP采用三次握手建立一个连接。
第一次握手:建立连接时,由客户端发送syn包(syn=j)到服务器,此时客户端进入SYN_SENT状态,等待服务器确认。(SYN:同步序列号)
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时服务器给客户端发送一个syn(syn=k),即发送SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。服务器接收到此包后,客户端和服务器进入ESTABLISHED状态,三次握手完成。

TCP/IP协议三次握手只是为了满足在不可靠的信道上可靠地传输信息。假设这样一个假设,client发送的一个连接请求由于链路传输的原因延误到链接失效时候才被server接收到,此时server误以为client再次发出一个新的连接请求,于是就向client发送确认报文段,同时建立连接。但是client并没有发出连接请求,所以client会无视server的确认,也不会给server发送任何消息,但此时server却一厢情愿地认为连接已经建立,并一直等待client发来数据。这样子和容易导致资源的浪费,而三次握手可以避免这种情况。

TCP连接是全双工的,因此每个方向都必须单独进行关闭。当一方完成了数据发送业务之后可以发送一个FIN来终止这个方向的连接,而收到FIN的另一方只意味着再也没有数据从对方传过来。一个TCP连接收到一个FIN后仍能发送数据。发送FIN的连接一方主动关闭而另一方则被动关闭。过程:
客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送;
服务器B收到这个FIN后,发回一个ACK,确认序号为收到的序号加1。
服务器B关闭与客户端A的连接,发送一个FIN给客户端A
客户端A发回ACK报文确认,并将确认序号设置为收到序号加1 。
TCP断开需要四次握手?这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。


6、抽象类和接口各自的应用场景。

答: 1 接口是核心,其定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。
2 如果许多类实现了某个接口,那么每个都要用代码实现那些方法
3 如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现。

所以,抽象类是为了简化接口的实现,他不仅提供了公共方法的实现,让你可以快速开发,又允许你的类完全可以自己实现所有的方法,不会出现紧耦合的问题。

应用场合很简单了
1 优先定义接口
2 如果有多个接口实现有公用的部分,则使用抽象类,然后集成它。

7、MySql和Hibernate的区别

答:MySql是一个关系型数据库管理系统,同时也是一个软件。MySql数据库将数据保存在不同的表中。
而Hibernate是一个对象关系映射框架。在开发过程中java操作的是对象,而数据库中的数据是以表的形式存在的,Hibernate完成的就是对象模型和基于SQL的关系模型的映射关系,从而开发过程中可以完全采用面向对象的方式来开发应用程序。

8、HTTP状态码1XX,2XX, 3XX,4XX,5XX分别代表什么?列出常见的几个例子。
答:
    消息(1字头)
    ▪ 100 Continue
    ▪ 101 Switching Protocols
    ▪ 102 Processing

    成功(2字头)
    ▪ 200 OK
    ▪ 201 Created
    ▪ 202 Accepted
    ▪ 203 Non-Authoritative Information
    ▪ 204 No Content
    ▪ 205 Reset Content
    ▪ 206 Partial Content
    ▪ 207 Multi-Status

    重定向(3字头)
    ▪ 300 Multiple Choices
    ▪ 301 Moved Permanently
    ▪ 302 Move temporarily
    ▪ 303 See Other
    ▪ 304 Not Modified
    ▪ 305 Use Proxy
    ▪ 306 Switch Proxy
    ▪ 307 Temporary Redirect

    请求错误(4字头)
    ▪ 400 Bad Request
    ▪ 401 Unauthorized
    ▪ 402 Payment Required
    ▪ 403 Forbidden
    ▪ 404 Not Found
    ▪ 405 Method Not Allowed
    ▪ 406 Not Acceptable
    ▪ 407 Proxy Authentication Required
    ▪ 408 Request Timeout
    ▪ 409 Conflict
    ▪ 410 Gone
    ▪ 411 Length Required
    ▪ 412 Precondition Failed
    ▪ 413 Request Entity Too Large
    ▪ 414 Request-URI Too Long
    ▪ 415 Unsupported Media Type
    ▪ 416 Requested Range Not Satisfiable
    ▪ 417 Expectation Failed
    ▪ 421
    ▪ 422 Unprocessable Entity
    ▪ 423 Locked
    ▪ 424 Failed Dependency
    ▪ 425 Unordered Collection
    ▪ 426 Upgrade Required
    ▪ 449 Retry With

    服务器错误(5字头)
    ▪ 500 Internal Server Error
    ▪ 501 Not Implemented
    ▪ 502 Bad Gateway
    ▪ 503 Service Unavailable
    ▪ 504 Gateway Timeout
    ▪ 505 HTTP Version Not Supported
    ▪ 506 Variant Also Negotiates
    ▪ 507 Insufficient Storage
    ▪ 508 Loop Detected
    ▪ 509 Bandwidth Limit Exceeded
    ▪ 510 Not Extended
    ▪ 600 Unparseable Response Headers
0 0
原创粉丝点击