加入收藏 | 设为首页 | 会员中心 | 我要投稿 武汉站长网 (https://www.027zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 交互 > 正文

最新Java校招面试题及答案

发布时间:2020-12-24 21:03:34 所属栏目:交互 来源:网络整理
导读:本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向。在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点。 主要包括以下几个部分: Java 基础知识点 Java 常见集合 高并发编程(JUC 包) JVM 内存管理 Java 8 知识点 网络协议相关 数

大对象直接进入老年代,如很长的字符串数组,虚拟机提供一个;XX:PretenureSizeThreadhold 参数,令大于这个参数值的对象直接在老年代中分配,避免在 Eden 区和两个 Survivor 区发生大量的内存拷贝;

  1. 发生 Minor GC 时,虚拟机会检测之前每次晋升到老年代的平均大小是否大于老年代的剩余空间大小,如果大于,则进行一次 Full GC,如果小于,则查看 HandlePromotionFailure 设置是否允许担保失败,如果允许,那只会进行一次 Minor GC,如果不允许,则改为进行一次 Full GC。

6)内存泄漏和内存溢出

答:

概念:

  1. 内存溢出指的是内存不够用了;

  2. 内存泄漏是指对象可达,但是没用了。即本该被 GC 回收的对象并没有被回收;

  3. 内存泄露是导致内存溢出的原因之一;内存泄露积累起来将导致内存溢出。

内存泄漏的原因分析:

  1. 长生命周期的对象引用短生命周期的对象;

  2. 没有将无用对象置为 null。

小结:本小节涉及到 JVM 虚拟机,包括对内存的管理等知识,相对较深。除了以上问题,面试官会继续问你一些比较深的问题,可能也是为了看看你的极限在哪里吧。
比如:内存调优、内存管理,是否遇到过内存泄漏的实际案例、是否真正关心过内存等。由于本人实际项目经验不足,这些深层次问题并没有接触过,各位有需要可以上网查阅。

(五)Java 8 相关知识点

关于 Java8 中新知识点,面试官会让你说说 Java8 你了解多少,下边主要阐述我所了解,并且在面试中回答的 Java8 新增知识点。

1)HashMap 的底层实现有变化:HashMap 是数组 + 链表 + 红黑树(JDK1.8 增加了红黑树部分)实现。

2)JVM 内存管理方面,由元空间代替了永久代。

区别:

  1. 元空间并不在虚拟机中,而是使用本地内存;

  2. 默认情况下,元空间的大小仅受本地内存限制;

  3. 也可以通过-XX:MetaspaceSize 指定元空间大小。

3)Lambda 表达式(也称为闭包),允许我们将函数当成参数传递给某个方法,或者把代码本身当做数据处理。

4)函数式接口:指的是只有一个函数的接口,java.lang.Runnable 和 java.util.concurrent.Callable 就是函数式接口的例子;java8 提供了一个特殊的注解 @Functionallnterface 来标明该接口是一个函数式接口。

5)引入重复注解:Java 8 中使用 @Repeatable 注解定义重复注解。

6)接口中可以实现方法 default 方法。

7) 注解的使用场景拓宽: 注解几乎可以使用在任何元素上:局部变量、接口类型、超类和接口实现类,甚至可以用在函数的异常定义上。

8) 新的包 java.time 包

  1. 包含了所有关于日期、时间、时区、持续时间和时钟操作的类;

  2. 这些类都是不可变的、线程安全的。

小结:Java8 的一些新特性,面试官一般情况下不要求你有多么精通,主要是看看你有没有一些了解。

(六)网络协议相关

网络协议方面,考察最多的包括服务器和客户端在三次握手、四次挥手过程中的状态变化;还有网络拥塞控制,及其解决办法等。

1)三次握手、四次挥手示意图:

<img src="https://www.52php.cn/res/2019/03-16/23/90da328b76ccddea4f60dd9cf5145b88.jpg" alt="">

总共有四种状态:主动建立连接、主动断开连接、被动建立连和被动断开连接

两两组合还是 4 种组合:

  1. 主动建立连接、主动断开连接会经历的状态:
    SYNC_SENT——ESTABLISHED—-FIN_WAIT_1—-FIN_WAIT_2—-TIME_WAIT

  2. 主动建立连接、被动断开连接会经历的状态:
    SYNC_SENT——ESTABLISHED—-CLOSE_WAIT—-LAST_ACK

  3. 被动建立连接、主动断开连接会经历的状态:
    LISTEN—-SYN_RCVD—-ESTABLISHED—-FIN_WAIT_1—-FIN_WAIT_2—-TIME_WAIT

  4. 被动建立连接、被动断开连接会经历的状态:
    LISTEN—-SYN_RCVD—-ESTABLISHED—-CLOSE_WAIT—-LAST_ACK

2)滑动窗口机制

由发送方和接收方在三次握手阶段,互相将自己的最大可接收的数据量告诉对方。也就是自己的数据接收缓冲池的大小。这样对方可以根据已发送的数据量来计算是否可以接着发送。

在处理过程中,当接收缓冲池的大小发生变化时,要给对方发送更新窗口大小的通知。

3)拥塞避免机制

拥塞:对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。

拥塞控制:防止过多的数据注入到网络中,使得网络中的路由器或链路不致过载。

拥塞控制方法:

  • 慢开始 + 拥塞避免;

  • 快重传 + 快恢复。

<img src="https://www.52php.cn/res/2019/03-16/23/263da2b28578374aae35b687ab769227.jpg" alt=""><img src="https://www.52php.cn/res/2019/03-16/23/20f28c2fca25490dae6d42258c5bdccc.jpg" alt="">

4)浏览器中输入:“www.xxx.com” 之后都发生了什么?请详细阐述。

解析:经典的网络协议问题。

答:

  1. 由域名→IP 地址
    寻找 IP 地址的过程依次经过了浏览器缓存、系统缓存、hosts 文件、路由器缓存、 递归搜索根域名服务器。

  2. 建立 TCP/IP 连接(三次握手具体过程)

  3. 由浏览器发送一个 HTTP 请求

  4. 经过路由器的转发,通过服务器的防火墙,该 HTTP 请求到达了服务器

  5. 服务器处理该 HTTP 请求,返回一个 HTML 文件

  6. 浏览器解析该 HTML 文件,并且显示在浏览器端

  7. 这里需要注意:

  • HTTP 协议是一种基于 TCP/IP 的应用层协议,进行 HTTP 数据请求必须先建立 TCP/IP 连接

  • 可以这样理解:HTTP 是轿车,提供了封装或者显示数据的具体形式;Socket 是发动机,提供了网络通信的能力。

  • 两个计算机之间的交流无非是两个端口之间的数据通信,具体的数据会以什么样的形式展现是以不同的应用层协议来定义的。

5)常见 HTTP 状态码

  1. 1xx(临时响应)

  2. 2xx(成功)

  3. 3xx(重定向):表示要完成请求需要进一步操作

  4. 4xx(错误):表示请求可能出错,妨碍了服务器的处理

  5. 5xx(服务器错误):表示服务器在尝试处理请求时发生内部错误

  6. 常见状态码:

  • 200(成功)

  • 304(未修改):自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容

  • 401(未授权):请求要求身份验证

  • 403(禁止):服务器拒绝请求

  • 404(未找到):服务器找不到请求的网页

6)TCP 和 UDP 的区别:

答:

  1. 回答发送数据前是否存在建立连接的过程;

  2. TCP过确认机制,丢包可以重发,保证数据的正确性;UDP不保证正确性,只是单纯的负责发送数据包;

  3. UDP 是面向报文的。发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付给 IP 层。既不拆分,也不合并,而是保留这些报文的边界,因 此,应用程序需要选择合适的报文大小;

  4. UDP 的头部,只有 8 个字节,相对于 TCP 头部的 20 个字节信息包的额外开销很小。

(编辑:武汉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读