java面试题(二)

java面试题(二)

38,说下java中的集合?
分为Collection集合和Map集合
Collection分为List集合和Set集合,List集合中常用的是ArraysList集合、Vector集合和LinkedList集合,Set集合中常用的是HashSet集合和TreeSet集合。
Map集合中常用到的是HashMap集合,HashTable集合以及TreeMap集合。

39,ArrayList跟Vector的区别?
ArrayList 扩容量为1.5倍 线程不安全,效率高
Vector 扩容量为2倍 线程安全,效率低

40,List Set Map的区别?
List集合里的元素是有序可重复的。底层是一个数组实现的,由于会引起其他元素位置改变,所以查找元素效率高,插入删除元素效率低,。
Set集合里的元素是无序不可重复的。底层是一个HashMap实现的,插入和删除不会引起元素位置改变,检索元素效率低下,删除和插入效率高。
Map集合是由一系列键值对组成的集合,里面的key值是不能重复的,如果重复后者会将前者覆盖掉。

41,说下HashTable HashMap的区别?
Hashtable是线程安全,HashMap是非线程安全。
HashMap的性能会高于Hashtable。
HashMap扩容时是当前容量翻倍2n,Hashtable扩容时是容量翻倍+1,2n+1。
HashMap可以使用null作为key,而Hashtable则不允许null作为key
HashMap中的迭代器是失败快速迭代器,而Hashtable的枚举器不是

42,HashMap(HashSet)用来装学生,人数在37-43人左右,请问如何初始化HashMap数量达到性能最优?
37/0.75=49.33333
43/0.75=57.33333
最大值向上取整为58,性能最优

43,重写equals是否需要重写hashcode? 重写hashcode是否需要重写equals?
重写了equals方法后需要重写hashCode方法
原因:因为在一些场景,比如hashSet、hashMap 里面判断是否是同一个元素,是调用了hashcode方法的,如果在重写equals方法以后,
没有重写hashcode,那么两个对象equals比较返回true,两个hashcode值不一样,往hashset里面存 ,就会存入两个相同的元素。
重写hashcode不需要重写equals

44,说下数组跟链表的区别?
数组静态分配内存,链表动态分配内存;
数组在内存中连续,链表不连续;
数组元素在栈区,链表元素在堆区;

45,throw跟throws区别?
throw关键字用来在程序中抛出可能出现的异常,没有顺序。
throws语句写在方法后面,用来表明方法不能处理的异常,并将异常抛给调用者,多个异常是用逗号分隔的。

46,你知道哪些JDK8新特性?
Lambda表达式
流是Java API的新成员,它允许你以声明性方式处理数据集合
方法引用的基本思想是,如果一个Lambda代表的只是“直接调用这个方法”,那最好还是用名称来调用它,而不是去描述如何调用它。
为了以兼容方式改进API,Java 8中加入了默认方法,具体写法是在接口中加default关键字修饰。
JDK8 新增了Method.getParameters方法,可以获取参数信息,包括参数名称。

47,where跟having的区别?
where的搜索条件是在执行语句进行分组之前应用
having的搜索条件是在分组条件后执行的
即如果where和having一起用时,where会先执行,having后执行

48,JS中 == 跟 === 有什么区别?
  == :表示值相等则都为true
  ===:表示 不仅要值相等,双方类型也要相等才为true

49,请说下xml跟json的区别?
区别是:json在传输上远远快于xml,但是xml的可读性比较好
json与xml的区别:
(1)可读性方面:基本相同,xml的可读性比较好
(2)可扩展性方面:都具有很好的扩展性
(3)编码难度方面:相对而言,json的编码比较容易
(4)解码难度:json的解码难度基本为零,xml需要考虑子节点和父节点
(5)数据体积方面:json相对于xml来讲,数据体积小,传递速度快一点
(6)数据交互方面:son与JavaScript的交互更加方面,更容易解析处理,更好的数据交互
(7)数据描述方面:xml对数据描述性比较快好
(8)传输速度方面:json的速度远远快于xml

50,请说下3次握手跟4次挥手?
客户端与服务器之间建立连接与断开连接需要经过3次握手与4次挥手。

3次握手体现在:
① 客户端向服务器发送SYN请求连接报文,其中SYN置为1,同时随机生成序号(ISN)x。报文发送完毕后客户端由 CLOSED 状态转为 SYN_SEND 状态
②服务端接收到客户端发送的SYN连接报文后,如果不同意建立连接,则直接发送rst报文终止通信。如果同意建立连接,则发回确认连接的报文(ACK)。在确认连接的报文中,SYN应该置为1,同时将确认号置为x+1,同时随机生成序列号(ISN)y+1。报文发送完毕后,服务器由 LINTEN 状态转为 SYN_RCVD 状态。
③客户端(A)接收到服务器(B)发送的确认连接的报文后,向B发回一个确认连接的报文。在A发送的确认连接的报文中,将确认号置为y+1,序列号为x+1(传送数据时的第一个数据字节的序号)。客户端发送完ACK报文后,由 SYN_SEND 状态变为 ESTABLISHED 状态。服务端在接收到ACK报文后,由 SYN_RCVD 状态变为 ESTABLISH 状态。
在客户端和服务器都进入ESTABLISHED状态后,客户端和服务器之间就可以进行通信了。
4次挥手体现在:
① 客户端发送FIN报文请求断开连接,同时指定序列号,报文发送完毕后客户端由 ESTABLISHED 状态变为 FIN_WAIT-1 状态。
② 服务器收到客户端的FIN报文后立即发送一个ACK报文,报文发送完毕后服务器由 ESTABLISHED状态变为 CLOSE-WAIT 状态。(此时不会立即关闭连接,而是通知应用进程即将要关闭连接)
③服务器在应用进程处理完毕后(被动关闭)向客户端发送FIN报文,报文发送完毕后,服务器由 CLOSE-WAIT 状态变为 LAST-ACK 状态。此时客户端到服务器的单向连接已经关闭了。
④ 客户端在接收到服务器发送的FIN报文后向服务器发送一个ACK报文,报文发送完毕后,客户端由 FIN-WAIT2 状态变为 TIME-WAIT状态。之后等待2MSL后关闭连接,进入到 CLOSED状态。

51,断开连接的时候客户端为什么需要的等待2MSL时间?
(1)为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
(2)他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。

52,servlet是单线程还是多线程?是单例的吗?
servlet单实例多线程。

53,请说下servlet的生命周期?
加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求处理(服务阶段)—>销毁

54,get请求与post的请求的区别是什么?
get请求:参数拼接在url,不安全,只能是字符串类型,大小有限制2kb,速度快;
post请求:参数封装到请求体,安全,还可以是非字符串类型比如文件 ,理论上大小没限制,速度慢。

55,请求转发跟请求重定向的区别是什么?
转发:服务器内部跳转,特点:浏览器的地址栏不会发生变化,速度快
重定向:服务器外部跳转,特点:浏览器地址栏会改变,速度慢

56,JSP是服务器端页面还是客户端页面?
jsp是服务器端页面。

57,jsp的本质是?
jsp本质是一个Servlet,它比Servlet的生命周期多了一个编译阶段。

58,静态包含(指令)跟动态包含(动作)有什么区别
静态包含:先合并再翻译,静态包含在转换成为java文件的时候将包含文件的内容“复制”到主体文件,然后作为一个整体编译。最终编译为一个java文件。
​动态包含:先翻译在包含,动态包含在翻译的时候,每个JSP文件都翻译成了对应java文件(Servlet),在程序运行加载到JVM中的时候动态合并。

59,JSP的9大内置对象?

  1. request:HttpServletRequest对象,代表请求
  2. response:HttpServletResponse对象,代表响应
  3. out:JspWriter对象,代表输出
  4. session:HttpSession对象,代表每个会话
  5. application:ServletContext应用对象,代表整个应用程序
  6. config:ServletConfig配置对象,代表配置文件中的信息
  7. pageContext:PageContext对象页面上下文对象,包含页面信息
  8. page:当前页面对象(this)(基本不使用)
  9. exception:Throwable异常对象,包含jsp异常信息

60,会话跟踪的几种技术?
四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值