跳槽者、应届生必看JAVA面试题系列(三)

简介: 跳槽者、应届生必看JAVA面试题系列(三)

文章标题

一: 前言

二: 面试挑战

三: 后端基础知识篇(三)

一: JAVA中有序和无序的区别

二: IO密集型和CPU密集型

三: 垃圾回收中ROOTS对象有哪些

四: 标记(引用计数和可达性分析的区别)

五: J2EE的核心组件有哪些

六: Servlet的生命周期

七: 使用POI技术时遇到内存溢出该如何解决

八: JAVA中代码块和构造函数等的执行顺序

九: JAVA是面向对象的语言,有什么特点

十: MVC模式是什么,它的优缺点

十一: Int和Integer所占用的内存大小比较

十二: JSP和Servlet的区别

十三: 什么是Shell

十四: 什么是Restful

十五: Tomcat的部署方式

十六: 基本数据类型占用的字节大小

十七: JAVA中序列化为什么要实现Serializable接口

十八: 对象的Finalize方法作用

十九: Maven项目中pom、war、jar工程的区别

二十: 互联网”三高”是指什么?

二十一: 并发和并行的区别

二十二: 常见衡量高并发的一些指标

二十三: 提升系统并发能力的措施

四: 面试题目大纲

五: 总结

六: 热门推荐

一: 前言

image.png

二: 面试挑战

 在开始第三章题目之前,还是先安利下"面试挑战": 凡是满足下面的挑战条件的,如果一个月内没有拿到一个Offer的,免费提供简历封装建议和相关面试题目解答。


 如果面试通过的,可以截图分享领红包,让大家一起见证,具体条件如下:


 1、计算机相关专业或者经过计算机相关专业的培训(不少于3个月,正常来说培训机构培训时间不会少于三个月),准备从事JAVA开发人员。


  2、从事的工作是JAVA开发,年限是1-3年(大神的话就忽略我说的,可以直接退出了)或者是符合计算机相关专业,准备从学校出来就业的。


  3、持续学习本人《面试大全》至少两个月且对其中的内容基本掌握的。


 4、需要提供相关面试证据或者是面试题目。


 如果大家对这个感兴趣的,可以关注【IT学习日记】回复【面试挑战】即可参与,现在参与还免费赠送一份面试资料。



三: 后端基础知识篇(三)


一: JAVA中有序和无序的区别


 有序:

   存储的顺序和添加的顺序相同,并且可以通过下标进行访问,如List



 无序:

   存储的顺序和添加的顺序无关,没有下标如TreeSet,它是存储的顺序和添加的顺序无关,但其中的对象也进行了相应规范的排序。



二: IO密集型和CPU密集型


 CPU密集型(计算密集型):


   指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。



 IO密集型(I/O bound)


   IO密集型指的是系统的CPU性能相对硬盘、内存要好很多,此时,系统运作,大部分的状况是CPU在等I/O (硬盘/内存) 的读/写操作,此时CPU Loading并不高。



三: 垃圾回收中ROOTS对象有哪些


 1、引用栈帧中的本地变量表的所有对象


 2、引用方法区中静态属性的所有对象


 3、引用方法区中常量的所有对象


 4、引用native方法的所有对象



四: 标记(引用计数和可达性分析的区别)


 1、引用计数:


   存在一个计数器,对象每被调用一次,则计数器加1,每被释放一次,则计数器减1。但是它难解决几个对象循环引用的问题。



 2、可达性分析:


   以GC ROOTS的对象为起点,从此处开始搜索,搜索与该节点直接或者间接引用关系的对象,并将他们以链的形式组合起来(引用链),GC则回收不在此链上的对象。



五: J2EE的核心组件有哪些


 1、JDBC

 2、JNDI

 3、RMI

 4、JSP

 5、SERVLET

 6、XML

 7、JMS

 8、EJB

 9、IDL

 10、JTS

 11、JTA

 12、JAVA MAIL

 13、JAF


六: Servlet的生命周期


 1、加载和实例化


   当Servlet容器启动或者客户端发起一个请求时,Servlet容器查找内存中是否存在该Servlet,若存在则直接读取该实例的响应,若不存在则创建。


 2、初始化


   Servlet容器调用init方法机型初始化


 3、处理服务


   在service方法中处理具体的业务需求


 4、销毁


   服务器关闭或者重启时,执行destroy方法销毁容器。



七: 使用POI技术时遇到内存溢出该如何解决


 1、写操作时遇到内存溢出:


   数据量大时,写操作存在溢出风险,可以使用POI官方提供的SXSSYWorkBook相关的API进行写操作(它支持xlsx),它保证了任何时候只有可配置的行才会被保存在内存中,最大程度的避免了内存溢出的问题,但是还是存在内存溢出问题,建议使用阿里巴巴的easyExcel组件代替。


 2、读取数据时内存溢出


   可以将导出的格式用csv替换excel。



八: JAVA中代码块和构造函数等的执行顺序


 1、父类静态代码快


 2、子类静态代码快


 3、父类代码快


 4、父类构造函数


 5、子类代码快


 6、子类构造函数



九: JAVA是面向对象的语言,有什么特点


 1、易于理解,有更好的可读性


 2、平台无关性,一次编译,处处运行


 3、提供了许多类库,方便开发者的工作,减少开发时间


 4、提供了对web的支持


 5、具有较好的安全性和健壮性(如垃圾回收)


 6、去除了C++中难以理解,易于混淆的特性



十: MVC模式是什么,它的优缺点


 1、定义:


   全称是:Model、View、Controller,它是一个通过业务逻辑、数据和界面显示分离的方式来组织代码的一种模式。


   典型的案例: JSP + Servlet + JavaBean。


   JavaBean作为模型(model)即作为数据模型封装业务数据、JSP作为View用于界面展示,Servlet作为Controller,用于控制界面View和Model之间的流转。


 2、优点:


   1、耦合性低: View和Model分离,允许修改视图层代码而不用重编译Model和Controller层的代码。


   2、重用性高: 允许不同的视图使用同一个服务器的代码


   3、可维护性高: 分离View和Model使Web应用更易于维护和修改


 3、缺点:


   1、完全理解MVC模式比较复杂


   2、调试比原来更加麻烦


   3、增加了系统结构和实现的复杂性



十一: Int和Integer所占用的内存大小比较


 Integer占用的内存更大,因为它是一个对象,需要存储对象的元数据。Int是一个原始数据类型,没有这部分的数据。



十二: JSP和Servlet的区别


 1、JSP本质上是Servlet,但是它更擅长于界面展示,Servlet更擅长于逻辑控制


 2、Servlet中没有内置对象


 3、Servlet的应用逻辑是在java文件中,完全从表现层的HTML代码中分离出来了


 4、JSP是java和html组成的一个拓展名文件为.jsp的文件



十三: 什么是Shell


 定义:


   它是一个命令解释工具,将用户输入的命令转换成内核能够理解的语言。


   延申知识: 为程序分配系统资源,处理计算机内部细节的软件叫做操作系统或者内核


   它本身是用C语言编写的程序,是使用unix/linux的桥梁,简单来说它是一种命令语言,也是一种程序设计语言。


   它调用了系统中大部分功能来执行程序,建立文件并以并行的方式协调各个程序的运行。


 执行方式:


   1、交互式: 解释执行用户命令,用户输入一条,shell便解释执行一条。


   2、批处理: 先将写好的shell脚本(script),再让shell一次执行完,它是解释执行的,无序编译。



十四: 什么是Restful


 因为关于Restful风格的知识篇幅较多,在此处不好拓展,想要了解关于Restful风格更详细知识,可以查看之前的文章,在这之前有专门的文章非常描述了Restful风格的问题。



十五: Tomcat的部署方式


 方式1、将编译号的web项目打包成war包放入tomcat的webapps目录下


 方式2、修改tomcat的server.xml文件,在Host标签中添加Context标签,属性如下:


   Path: 浏览器访问时的路径(相对与项目名),如:/webproject


   docBace: web项目的webroot所在的路径,是编译后的项目,如:”D:/web”


   Reloadable: 取值true/false,表示项目有改动时,tomcat是否重新加载该项目


 方式3、在tomcat的conf/Catalina/localhost目录中创建一个xml文件,加入Context标签,属性和第二种部署的方式一样,如:


十六: 基本数据类型占用的字节大小


 Byte(1),Short(2),int(4),long(7),char(2),float(4),double(8),boolean(未知)



十七: JAVA中序列化为什么要实现Serializable接口


 因为在调用序列化接口写入方法(writeObject)时,会进行类型判断,如果对象是String、Array、Enum、Serializable类型的对象则可以正常序列化,否则会抛出NotSerializableException异常,代码如下:

image.png

十八: 对象的Finalize方法作用


 作用:


   在对象被回收前(既被标记之后),该对象的该方法会被调用,可以重写用于释放关联的对象空间或者重新将对象引用,以防被GC回收。


 步骤:


   对象先进行一次标记,在下一次GC之前执行对象中的finalize方法,在执行的时候,先判断对象是否重写了该方法,如果没有,则直接回收,如果重写了,则先放在一个队列中,由虚拟机开一个低优先级的线程去执行它,随后,会进行第二次小规模的标记,在此次被标记的对象就会被真正的回收了。



十九: Maven项目中pom、war、jar工程的区别


 1、POM项目: 用于父级工程或者聚合工程,用来做jar包的版本控制


 2、war项目: 项目会可以被打包成war,发布在服务器上的工程


 3、JAR项目: 项目可以被打包成jar,一把是需要提供第三方使用或者单独运行的项目



二十: 互联网”三高”是指什么?


 三高: 高并发、高可用、高性能(3H)


 高并发: 简单的说是单位时间内软件最大能够承受的请求数量。


 高可用: 服务集群化,当某个服务down时,可以有备用的替换,不会导致服务不可用,如:Redis的哨兵模式


 高性能: 单位时间可以处理任务的数量,提高性能主要分为以下两方面。


   1、软件方面: 如正确的编码,SQL解决慢查询、引入缓存、使用多线程


   2、硬件方面: 提高服务器配置(内存、CPUT)等



二十一: 并发和并行的区别


 并发量:


   一段时间内,最大能够处理请求的数量。


 并行量:


   同一时间内,最大能够处理请求的数量。


 区别:


   并行是指同一个时间处理的请求数,并发是指一段时间内可以处理的请求数。并发是一个cpu(核)交替执行多个任务,并行是同一时刻不同cpu执行的任务数。



二十二: 常见衡量高并发的一些指标


 1、响应时间:


   客户端发起请求开始,到客户端接收到服务端返回的响应时间结束,这个过程所花费的时间。性能检测中一般以压力发起段至压测服务器返回处理结果的时间为计量,单位一般为秒或者毫秒。


 2、平均响应时间:


   系统在稳定的运行时间段内,同一个交易的平均时间,一般而言,交易响应时间均指平均响应时间。标值应根据不同的交易分别设定,一般情况下,分为复杂交易响应时间、简单交易响应时间、特殊交易响应时间。其中,特殊交易响应时间的设定必须明确该交易在响应时间方面的特殊性。


 3、吞吐量


   单位时间内处理请求的数量。


 4、QPS(Query Per Second)


   每秒查询数量(与吞吐量的含义相似)


 5、并发用户数


   同时承载正常使用系统功能的用户数量。



二十三: 提升系统并发能力的措施


 要提升系统的并发能力,理论上来讲,可以通过: 垂直拓展(Scale UP)和水平拓展(Scale OUT)两种方式。



一: 垂直拓展


 方式一: 可以提升机器的硬件性能,如四核cpu提升到8核cpu,添加固态硬盘等


 方式二: 提升系统的架构性能,如引入缓存减少IO次数,使用线程池和异步提高系统的吞吐量等


二: 水平拓展


 原因:


   无论进行哪一种方式的垂直拓展,当业务量和数据量到达一定量级后,单机的瓶颈还是会出现,此时,再使用垂直拓展对系统的性能并没有多大的效果,此时需要通过水平拓展,引入新的机器,来解决系统性能瓶颈问题。


 解决:


   当垂直拓展出现了单机性能瓶颈后,只需要引入新的机器,就能线性扩充系统性能,但是水平拓展对系统的架构也是存在要求的。


四: 面试题目大纲


  注意: 题目和面试材料会一直持续不断更新。

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

五: 总结

  由于文章篇幅的限制,面试大全的第三章暂时到这里就告一段落。如果有意见或者建议,可以在下方或者私信留言,看到会及时回复,也欢迎大家参加面试挑战和面试题投稿,希望大家早日获得心仪的Offer,如果觉得文字对你有帮助,欢迎关注和点赞。

相关文章
|
9月前
|
人工智能 Cloud Native Java
2025 年 Java 应届生斩获高薪需掌握的技术实操指南与实战要点解析
本指南为2025年Java应届生打造,涵盖JVM调优、响应式编程、云原生、微服务、实时计算与AI部署等前沿技术,结合电商、数据处理等真实场景,提供可落地的技术实操方案,助力掌握高薪开发技能。
441 2
|
10月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
525 1
|
7月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
9月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
607 0
|
9月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
400 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
10月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
5597 50
|
7月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
10月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
272 5
|
10月前
|
NoSQL Java 微服务
2025 年最新 Java 面试从基础到微服务实战指南全解析
《Java面试实战指南:高并发与微服务架构解析》 本文针对Java开发者提供2025版面试技术要点,涵盖高并发电商系统设计、微服务架构实现及性能优化方案。核心内容包括:1)基于Spring Cloud和云原生技术的系统架构设计;2)JWT认证、Seata分布式事务等核心模块代码实现;3)数据库查询优化与高并发处理方案,响应时间从500ms优化至80ms;4)微服务调用可靠性保障方案。文章通过实战案例展现Java最新技术栈(Java 17/Spring Boot 3.2)的应用.
868 9
下一篇
开通oss服务