澳门网络娱乐游戏平台-澳门电子游戏娱乐网址-官方直营

工作五年,面试被秒,这些问题大家觉得难吗?

面了两家公司,被秒了问题如下1.在一个64位的操作系统上,一个指针占多大存储2.lucene是先分词还是先创建索引3.dubbo是长连接,那么dubbo和谁是长连接?是和tomcat长连接还是和zookeeper是长连接?4.ListarrayList=newArrayList(),这个arrayList占多大空间5.往mysql里面insert一条数据快还是update一条数据快?为什么?

dubbo作为当前国内热门的RPC框架,其基本原理、配置调优等是面试中会经常问到的,了解这些或者知道这些配置项的存在对工作也会事半功倍,遇到类似的问题可以不再去问那个广告满天飞的某度了。

背景

今天与同学聊天说到了人到35岁之后应该有自己的独特的技术特长。说完之后我就意识到现在就必须坚持写博客学习技术了。
其中我们谈到了一个话题就是分布式框架dubbo,其中涉及到一个知识点就是长连接和短连接。
在这里我会从以下几个角度来阐述长连接相关的知识。
1.长连接产生的背景。
2.什么时候用长连接。
3.长连接在社会中的运用实例。
4.附:一些补充的知识。

1.Dubbo简介

产生背景

以前http 1.0 是无状态的,无状态的意思就是网页上有个链接你点击两下,第一次点击与第二次点击获取的网页是没有联系的。所以我们每次向服务器发起请求都会从新创建一个连接,且每次创建连接后只做一次数据传输就断开。 TCP 3次握手建立连接和4次握手释放连接都很消耗资源,所以长连接就应运而生。在http 1.1 报文头中设置Connection:keep-alive就可以使用长连接。

Dubbo |ˈdʌbəʊ|是一个由阿里巴巴开源的、分布式的RPC(Remote Procedure Call Protocol-远程过程调用)和微服务框架,现为Apache顶级项目。

长连接怎么通信的

长连接就是一次请求发过去之后连接不断,它的交互模式为。
建立连接 -> 发送数据1,发送数据2 ...... 发送数据 -> 断开连接
而短连接的方式为:
建立连接 -> 发送数据1 -> 断开连接。
建立连接 -> 发送数据2 -> 断开连接。
即短连接每个连接只做一次数据传输,而长连接建立连接后可以进行多次数据传输。

在tcp连接和释放协议中,短连接一般是有客户端主动断开连接。
而对于长连接来说来接是一直保持的,如果已经不用的客户端长连接一直连着会消耗很多资源,比如线程池和数据库连接池连接数都有 一个最大值,如果连接不能释放那么达到最大值后其他连接就无法建立,就无法响应客户端的请求。所以长连接中服务器会隔一段时间发送10次心跳报文,如果服务器没有收到一次响应则认为客户端关闭或不可达相应的会把长连接关闭。

Dubbo提供了三个关键功能:基于接口的远程调用,容错与负载均衡,服务自动注册与发现。

什么时候用长连接

前面提到短连接不能对连接复用每次传输要新建立请求,所以不适合操作频繁的客户端。而长连接中如果大量连接一直保值着会消耗很多的资源,长连接适合量小频繁的操作,比如数据库连接池、socket通信就是使用的长连接。

你如果在服务器中执行命令“netstat -ant | grep 1521” 会一些连接,这些就是oracle数据库的连接。

而对于web应用由于有成千上万个请求,所以这是不方便使用长连接的。

Dubbo使得调用远程服务就像调用本地java服务一样简单。

长连接在实践中的运用

写这篇文章是由于讨论dubbo话题引起的,所以这里对dubbo中的长连接进行一些描述。

在dubbo中消费者和生产者是通过单一的长连接维护的,因为客户端是不停的往服务器发送数据。
如果客户端是高并发的应用,这就是客户端的多线程往单一长连接发送数据场景。这样的话服务器需要知道这个数据是哪个线程发过来的,以便通知对应的线程。
这个解决办法就是在报文头加id,当服务器返回是会把id带过去,这样线程只接收自己认识的id响应报文。

其形式如下:
thread1 id = 1
客户端 发送数据 thread2 id = 2 ---单一长连接---> server
thread3 id = 3

            thread1 只接收 id=1的响应

客户端 接收数据 thread1 只接收 id=2的响应
thread1 只接收 id=3的响应

下图为Dubbo的结构图:

附:

图片 1

通讯协议说明

说到网络通信有必要把通信协议在这里说明一下,让大家知道网络上的报文如何传输的。

在网络通信协议模型分为4层:从底到上依次是物理层、网络互连层、传输层、应用层。
其中网络互连层使用ip协议解决路由和寻址问题,即一个报文从北京出发如何经过路由器交换机到达目的地上海的过程。
传输层主要保证报文从北京发出正确无误按顺序的在上海被接收到(保证不丢包顺序不乱等等)。

因为连接的建立和释放是通过tcp完成的,我们说的http长连接实际上就是tcp长连接。

关于Dubbo的使用可以参考官方文档 ,本文不作赘述。

写完之后的感受

自己先想明白整个逻辑,然后一篇文章只描述其中一个点就可以了。但是一定 要是自己的推导思路。

2.Dubbo服务暴露与消费过程

先来看下面问题:

1) Dubbo服务提供者发布服务的流程

2) Dubbo服务消费者消费服务的流程

3) 什么是本地暴露和远程暴露,他们的区别

Dubbo服务提供者发布服务过程:

先来看dubbo的启动日志:

图片 2

图中从上到下框起来的日志分别是:

1) 暴露服务到本地

2) 暴露服务到远程

3) 启动netty服务

4) 连接zookeeper

5) 注册服务到zookeeper

6) 监听zookeeper中消费服务

本文由澳门网络娱乐游戏平台发布于操作系统,转载请注明出处:工作五年,面试被秒,这些问题大家觉得难吗?

相关阅读