补充Java面试记录
背景:这两天面试遇到的部分问题都分散在了前面两篇文摘中,这里再做一些其他的记录,以备不时之需!
一、谈谈你对SpringBoot的理解?
SpringBoot简介:
SpringBoot是一个框架,它的目的就是用来简化Spring应用的初始化搭建以及开发过程;该框架使用了特定的方式来进行配置,从而使开发人员不在需要自定义样板化的配置;它可以自动配置Spring的各种组件,并不依赖代码生成和XML配置文件。
我对SpringBoot的理解:
SpringBoot是微服务框架的起点,他简化了配置过程、部署过程和监控过程;它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,SpringBoot整合了很多的框架,同时将其他技术同Spring结合起来形成SpringBoot框架,从而简化Spring应用的搭建以及开发过程。
二、说说你了解及使用的Java容器?
容器接口:
1、Collection接口;
2、Map接口,存放键值对,Map中的值可以是一个容器;
3、Iterator接口。
子接口:
1、List,有序可重复,可以在方法中加入索引参数;
2、Set,无需不可重复,无序因而不能通过索引操作对象;
3、ListIterator,Iterator for List,List是双向表,因而Iterator上增加了一些新的方法,允许traverse the List in either direction
4、SortedMap,有序;
5、SortedSet,主要用于排序操作,实现此类接口的子类都是排序的子类;
具体容器类:
1、Collection:ArrayList,LinkedList,Vector,Stack,TreeSet,HashSet,LinkedHashSet
2、Map:HashMap,LinkedHashMap,WeakHashMap,TreeMap,HashTable,IdentityHashTable
常用的容器类:
1、ArrayList与LinkedList(均非同步,多线程时需考虑线程安全问题),Vector(同步),Stack
1)List接口支持通过索引的方法来访问元素,ArrayList随机访问快修改慢,LinkedList修改快随机访问慢,Vector实现了同步因此比ArrayList慢;
2)LinkedList使用双向链表实现,LinkedList提供额外的get,remove和insert方法在LinkedList的首部或尾部,这些操作是的LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque);
3)ArrayList没有定义增长算法,当需要插入大量元素时,可调用ensureCapacity方法提高添加效率;
4)Vector类似于ArrayList,但其是同步的,多线程安全(另外一点区别就是ArrayList扩容时默认增长一半,Vector增长一倍),无论是单线程还是多线程,Vector都比ArrayList慢;
5)Stack继承自Vector,实现一个后进先出的堆栈;
6)若需要实现同步可以调用Collections工具类的synchronizedList方法。
2、HashMap(非同步),HashTable(线程安全),TreeMap,WeakHashMap
1)HashTable与HashMap的区别:
a.HashTable继承自Dictionary类,而HashMap继承自AbstractMap类,但二者都实现了Map接口;
b.HashTable中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的;
c.HashTable中,key和value都不允许出现null值;HashMap中,null可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为null;
d.HashTable直接使用对象的hashCode,而HashMap重新计算hash值。
2)WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,WeakHashMap使用元素的引用而不是值作为key,也就是说必须在引用相同(a==b)的情况下才能找到相关的值,另外一个key不在被外部引用,那么该key可以被GC回收;
3)TreeMap是SortedMap接口的基于红黑树的实现,此类保证了映射按照升序顺序排列关键字,根据使用的构造方法不同,可能会按照键的类的自然顺序进行排序。
三、Http&Https的区别?
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
四、Http是长连接,还是短连接,长短连接?
在HTTP/1.0中,默认使用的是短连接;But从HTTP/1.1起,默认使用的是长连接。
短连接:
HTTP短连接,也称非持久连接,客户端和服务器进行一次HTTP请求/响应后,就关闭连接;下一次的HTTP请求/响应就需要重新建立连接。在HTTP/1.0中,默认使用的是短连接。
长连接:
HTTP长连接,也称持久连接,客户端和服务器建立一次连接后,可以在这条连接上进行多次请求/响应操作;持久连接可以设置保活时间(keep-alive),也可以不设置。从HTTP/1.1起,默认使用的是长连接。
使用长连接的HTTP协议,会在响应消息报文中加入如下字段: Connection:keep-alive ,这个字段是让一个TCP连接更持久一些。
五、http与Tcp的关系?
1、TCP连接
手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接;TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上;
建立起一个TCP连接需要经过“三次握手”:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连 接之前,TCP 连接都将被一直保持下去;断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就是服务器和客户端交互,最终确定断开)。
2、HTTP连接
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用;
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接,从建立连接到关闭连接的过程称为“一次连接”;
1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接;
2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求;
由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即使不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客 户端“在线”;若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
六、Http协议的过程?
当输入www.baidu.com时,页面会作何选择:
1.域名解析
域名解析检查顺序为:浏览器自身DNS缓存---》OS自身的DNS缓存--》读取host文件--》本地域名服务器--》权限域名服务器--》根域名服务器;如果有且没有过期,则结束本次域名解析;域名解析成功之后,进行后续建立连接的操作。
2.tcp3次握手建立连接;
3.建立连接后,发起http请求;
4.服务器端响应http请求,浏览器得到到http请求的内容;
5.浏览器解析html代码,并请求html代码中的资源;
6.浏览器对页面进行渲染,将页面向用户展示。
七、说说你对RPC的了解?
RPC(Remote Promote Call)一种进程间通信方式;其允许像调用本地服务一样调用远程服务。
RPC框架的主要目标就是让远程服务调用更简单、透明;RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/JSON/二进制)和通信细节。
开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。
八、怎么把http变为https?
JAVA环境下http修改https:使用.pfx证书
1.在Tomcat上部署PFX证书:打开Tomcat配置文件 confserver.xml,注释code里有:Define a SSL HTTP/1.1 Connector on port 8443,取消注释并添keystoreFile,keystoreType,keystorePass属性:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="C:/ProgramData/RSSBus/connect/data/test.pfx"
certificateKeystoreType="PKCS12"
certificateKeystorePassword="test" />
</SSLHostConfig>
</Connector>
2.重启Tomcat即可。
九、说说Mysql优化?