java后台面经

牛客网 

1.在Java中抽象类之间也允许出现继承关系

2.接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

3.接口中的成员变量和成员方法只能是Public(或者缺省不写)

4 FIFO:先进先出算法。

OPT:最佳置换算法。

LRU:最近最久未使用算法。

LFU:最近最少使用算法。

NUR:最近未使用算法。

5 反向代理的原理

所谓反向代理就是指在用户发起访问请求,由代理服务器接收,然后将请求转发给正式服务器,并且将正式服务器处理完的数据返回给客户端,此时代理服务器就表现为一个服务器。这么做看起来多经过了一步,稍显麻烦,但实则是好处多多。

6.负载均衡原理方法

weight轮询(默认),ip_hash,fair,url_hash,权重

7.Redis 5种类型

String,hash,list,Sorted Set,set

8.Nginx需要隔离出来单独做一台服务器吗?如果nginx挂掉能不能访问tomcat

tomcat和nginx可以部署在同一个服务器上,nginx挂掉不能在通过nginx访问但可以越过nginx直接访问tomcat,只是要知道tomcat的地址和端口号

9.Session 共享怎么做?单点登陆原理和单点注销原理

放在数据库,sso单点登陆,作为一个单独的认证中心

注销就是摧毁全局回话,然后就摧毁所有局部回话

10.死锁:互斥,不可侵占,请求与保持,循环条件

HashMap怎么根据K来求值

HashMap里面存的是一个entry,一个对象,相当key,value是一直保持着一起

HsahMap用来那种hash算法

Objects.hashCode(key) ^ Objects.hashCode(value);
int hash = hash(key.hashCode()); 
int i = indexFor(hash, table.length);  
static int hash(int h) {  
    // This function ensures that hashCodes that differ only by  
    // constant multiples at each bit position have a bounded  
    // number of collisions (approximately 8 at default load factor).  
    h ^= (h >>> 20) ^ (h >>> 12);  
    return h ^ (h >>> 7) ^ (h >>> 4);  
}  
  /** 
 * Returns index for hash code h. 
 */  static int indexFor(int h, int length) {  
    return h & (length-1);  
}  

10Arp是什么?Arp欺骗的原理是什么?

IP地址转为mac地址

当一台主机向另一台主机通信的时候。

1首先是做通信操作,

           2然后装载数据,装载双方的IP和mac地址

           3只知道对分的ip不知道mac,就通过ip的网关广播找到对应的ip,恢复mac.如果在对分的arp表中已经存在啦当前的ip就更换   mac

           4然后装载通信

Arp欺骗原理就是当a在广播的时候,把已经装好的数据包返给对方,用对方的ip但是用自己的mac地址。就能实现arp欺骗原理。

11.数据库事物4大特征:acid,原子性,一致性,隔离性,持久性。

数据库隔离类别  读未提交,读已提交,不可重复的,串行:实现原理 第一个未做任何锁。第二个读共享锁,写就是排它锁执行完就释放。 第三个是要等事物结束才释放行级锁。第四个是表锁。

12 TCP三次握手,为什么是三次,不是二次,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(TCP连接成功)状态,完成三次握手。

四次挥手

为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

为什么不能用两次握手进行连接?

答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

       现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值