补充Java面试记录
补充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配置文件 conf\server.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优化?
https://www.cnblogs.com/taojietaoge/p/11117806.html
补充Java面试记录的更多相关文章
- 普华永道高级JAVA面试记录
最近在考虑换个工作 原因?咱能不逗吗? 一面感觉发挥不错 二面之后累觉不爱 基本上浪费了半天的工资(好多钱啊~~~) PWD上海地址在浦东软件园 工作环境说实话没我现在工作的环境好,不过里面的人 ...
- 阿里、百度等多家公司Java面试记录与总结
算算自己大概面试了近十家公司,也拿到了几个Offer,现在面试告一段落,简单总结下面试经验. 我现在主要的方向是Java服务端开发,把遇到的问题和大家分享一下,也谈谈关于技术人员如何有方向的提高自己, ...
- java面试记录
怎么确保一个集合不能被修改 ArrayList<String> list = new ArrayList<>();list.add("x");Colle ...
- java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类
口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...
- java面试记录二:spring加载流程、springmvc请求流程、spring事务失效、synchronized和volatile、JMM和JVM模型、二分查找的实现、垃圾收集器、控制台顺序打印ABC的三种线程实现
注:部分答案引用网络文章 简答题 1.Spring项目启动后的加载流程 (1)使用spring框架的web项目,在tomcat下,是根据web.xml来启动的.web.xml中负责配置启动spring ...
- java面试记录一:跳表、判断二叉树相同、冒泡排序、cookie和session的区别、设计模式(单例、工厂、模板方法、原型、代理、策略)、抽象类与接口的区别
1.什么是跳表? 跳表实际上就是多层链表 跳表可用在让链表的元素查询接近线性时间 代码结构及java实现参考博客园随笔 2.判断两棵二叉树是否相同?(结构相同,内容相同) 思路:(1)先定义树节点Tr ...
- 2019上海爱奇艺大数据Java实习生-面试记录
目录 一轮 电话面试 二轮 代码笔试 三轮 技术面试 总结 附:电话面试问题点解惑 补充:面试未通过 一轮 电话面试 2019.04.28 16:21 [w]:面试官,[m]:我,下面的内容来自电话录 ...
- JAVA面试精选【Java基础第一部分】
这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...
- JAVA面试精选
JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对 ...
随机推荐
- 【JAVA】POI生成EXCEL图表(柱状图、折线等)
1.使用excel工具自带的图形工具创建一个图: 2.绑定数据区域: 3.数据区域绑定完成,我们要做的就是将数据写入到数据区域中: 4.标记 5.POI 引入包 <!-- https://mvn ...
- 【设计模式】行为型06命令模式(Command Pattern)
命令模式 个人理解:命令模式,本质上是一种多层次的封装. 好处:降低耦合,扩展极其方便. 以下一段文案摘抄自:http://www.runoob.com/design-pattern/command- ...
- Spring5深度源码分析(三)之AnnotationConfigApplicationContext启动原理分析
代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian AnnotationCon ...
- Codeforces Gym101097I:Sticks (思维)
http://codeforces.com/gym/101097/attachments 题意:现在有k种颜色的木棍,每种颜色有ni根木棍,每根木棍有一个长度,问是否有三根木棍可以组成三角形,并且这三 ...
- Parameters.AddWithValue(“@参数”,value)方法
以前用command方法执行存储过程增加参数时,总是先用cmd.Parameters.Add方法来设置参数和参数类型,再用Parameters[0].Value来给参数赋值.以前的一个动作代码示例: ...
- c++ 函数知识点汇总
c++ 函数知识点汇总 swap函数 交换两个数组元素 比如 swap(a[i],a[j]); 就是交换a[i] 和 a[j] 的值 strcpy() 复制一个数组元素的值到另一个数组元素里 strc ...
- 数字IC前后端设计中的时序收敛(一)前言
本文转自:自己的微信公众号<数字集成电路设计及EDA教程> 里面主要讲解数字IC前端.后端.DFT.低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教程. 为了纪念,同时 ...
- Linux系统下word转pdf,xls转pdf,ppt转pdf
word转换pdf的技术方案,供参考.[doc/docx/ppt/pptx/xls/xlsx均支持转换] 本方案是Java结合shell命令完成,不同于以往的仅依赖java组件转换 ...
- LINUX安装源码软件经典三部曲
这几天一直在搞suse下的mplyaer.ffmpeg等源码编译安装,总结出源码软件安装三部曲,网上称为经典三部曲. 这三步分别为: 1. ./configure [options] 2. make ...
- 牛客小白月赛16 E 小雨的矩阵 ( 暴搜)
链接:https://ac.nowcoder.com/acm/contest/949/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...