当前位置: 首页 > news >正文

Java面试中等测试题

1. 计算机网络传输层有哪些协议?分别适用于什么场景?

答案:
TCP(传输控制协议):适用于需要可靠传输的场景,如文件传输、网页浏览、电子邮件等
UDP(用户数据报协议):适用于实时性要求高、可接受少量丢失的场景,如视频流、语音通话、DNS查询等


2. 多线程的使用场景有哪些?线程开启多少个合适?判断标准有哪些?

答案:
使用场景:高并发请求处理、异步任务执行、大数据处理、定时任务执行等
线程数量:

  • CPU密集型任务:CPU核心数 + 1

  • IO密集型任务:2 × CPU核心数
    判断标准:CPU利用率、系统响应时间、资源消耗、吞吐量等


3. 线程池的提交方式有哪几种?

答案:

  • execute(Runnable command):执行无返回值的任务

  • submit(Callable<T> task):执行有返回值的任务,返回Future对象

  • submit(Runnable task):执行无返回值任务,返回Future对象

  • invokeAll/invokeAny:批量执行任务


4. 锁的实现原理介绍一下?

答案:
锁的实现基于AQS(AbstractQueuedSynchronizer)框架,通过CAS(Compare and Swap)操作和队列管理实现:

  • 状态变量:表示锁的占用状态

  • 等待队列:管理等待获取锁的线程

  • CAS操作:保证原子性的状态变更


5. TCP协议中拥塞控制的主要作用是什么?

答案:
防止网络过载,通过慢启动、拥塞避免、快速重传、快速恢复等机制动态调整发送速率,保证网络稳定性和公平性


6. String类的常用函数有哪些?列举十种

答案:
length(), charAt(), substring(), indexOf(), replace(), split(), trim(), toLowerCase(), equals(), compareTo()


7. String和StringBuffer,StringBuilder的区别有哪些?所有类名包含Buffer的类的内部实现原理是什么?有什么优势?

答案:
区别:

  • String:不可变,线程安全

  • StringBuffer:可变,线程安全

  • StringBuilder:可变,非线程安全
    Buffer类原理:基于字符数组实现动态扩容,减少内存分配次数
    优势:提高字符串操作性能,减少内存开销


8. String字符串的不可变是指哪里不可变?

答案:
指String对象内部的字符数组(char[] value)被声明为final,一旦创建就不能修改,任何修改操作都会创建新的String对象


9. HTTP协议有哪些字段,列举3个就可以

答案:
Content-Type, User-Agent, Cookie


10. Java异常类有哪些?分别管理什么异常?

答案:

  • Exception:受检异常,如IOException、SQLException

  • RuntimeException:非受检异常,如NullPointerException、ArrayIndexOutOfBoundsException

  • Error:系统错误,如OutOfMemoryError、StackOverflowError


11. Java反射获取类信息的方式有哪几种?分别是什么?

答案:

  • Class.forName("全限定类名")

  • 对象.getClass()

  • 类名.class


12. Java代理的主要方法有哪几种?列举代理的使用场景2个

答案:
代理方法:

  • 静态代理

  • 动态代理(JDK代理、CGLIB代理)
    使用场景:AOP面向切面编程、远程方法调用


13. equals()方法的作用是什么?重写equals需要注意哪些事项?为什么?

答案:
作用:比较两个对象的内容是否相等
注意事项:

  • 必须重写hashCode()方法

  • 保证自反性、对称性、传递性、一致性

  • 非空性:x.equals(null) 返回false
    原因:保证对象在集合类中正确工作


14. Java是按值传递还是按引用传递?什么是引用传递,什么是值传递,哪些语言支持引用传递?

答案:
Java是按值传递:

  • 基本类型传递值副本

  • 引用类型传递引用地址的副本
    引用传递:直接传递变量地址,如C++的引用参数
    值传递:传递变量值的副本
    支持引用传递的语言:C++、C#等


15. 描述java的类初始化顺序?如果存在继承,初始化顺序会如何

答案:
初始化顺序:

  1. 父类静态变量和静态代码块

  2. 子类静态变量和静态代码块

  3. 父类实例变量和实例代码块

  4. 父类构造方法

  5. 子类实例变量和实例代码块

  6. 子类构造方法


16. 本地方法栈有什么作用?

答案:
用于执行Native方法(本地方法),为JVM调用本地方法提供内存空间,如调用C/C++编写的函数库


17. 描述Java的双亲委派机制,为什么要用到双亲委派机制

答案:
双亲委派机制:类加载器在加载类时,先委托父加载器尝试加载,只有父加载器无法加载时才自己加载
作用:

  • 避免类重复加载

  • 保证核心类库的安全性

  • 保证类的唯一性


18. 重写和重载的区别是什么?

答案:
重写(Override):子类重新定义父类的方法,方法签名相同
重载(Overload):同一类中方法名相同但参数列表不同


19. 子类构造方法调用父类构造方法的注意事项有哪些?

答案:

  • 必须通过super()调用父类构造方法

  • super()必须是子类构造方法的第一条语句

  • 如果父类没有无参构造,必须显式调用有参构造


20. 子类实例初始化是否触发父类实例初始化?

答案:
是,创建子类实例时会先初始化父类,包括父类的实例变量、实例代码块和构造方法


21. instanceof关键字的作用是什么?

答案:
用于判断对象是否属于某个类或其子类/实现类,返回boolean值


22. 基本类型的强制类型转换是否会丢失精度?引用类型的强制类型转换需要注意什么?

答案:
基本类型:可能丢失精度,如double转int
引用类型:需要在继承关系内转换,否则抛出ClassCastException


23. 重入锁有哪些?为什么要有重入锁?

答案:
重入锁:ReentrantLock、synchronized
原因:允许线程重复获取已持有的锁,避免死锁,支持锁的重入性


24. 指令重排序的优点是什么?由什么原因导致的?

答案:
优点:提高程序执行性能
原因:编译器优化、处理器乱序执行、内存系统重排序


25. Arrays.sort()的内部原理介绍一下?

答案:

  • 基本类型数组:双轴快速排序(Dual-Pivot Quicksort)

  • 对象数组:TimSort(归并排序+插入排序的优化算法)


26. 堆排序的时间复杂度是多少,空间复杂度是多少?

答案:
时间复杂度:O(n log n)
空间复杂度:O(1)


27. 字符串"asdasjkfkasgfgshaahsfaf"经过哈夫曼编码之后存储比特数是多少?

答案:
需要先统计字符频率,构建哈夫曼树,计算加权路径长度。具体数值需计算后得出。


28. CPU高速缓存的优点和缺点有哪些?

答案:
优点:提高数据访问速度,减少CPU等待时间
缺点:成本高,存在缓存一致性问题,容量有限


29. 线程安全的类有哪些?列举2个以上就可以

答案:
Vector, Hashtable, ConcurrentHashMap, StringBuffer


30. 什么是LRU算法?

答案:
最近最少使用算法,用于缓存淘汰策略,优先淘汰最久未使用的数据


31. 何为Spring Bean容器?Spring Bean容器与Spring IOC容器有什么不同吗?

答案:
Spring Bean容器是Spring框架中用于管理Bean(即Java对象)的容器,负责Bean的创建、配置、组装和管理。Spring IOC(控制反转)容器是Bean容器的具体实现,它通过依赖注入(DI)机制来实现控制反转。实际上,Spring Bean容器和Spring IOC容器是同一个概念,通常互换使用,但IOC容器更强调控制反转的原则。


32. Spring IOC如何理解?

答案:
Spring IOC(控制反转)是一种设计原则,它将对象的创建和依赖关系的管理从应用程序代码中转移到容器中。容器负责实例化、配置和组装Bean,从而降低组件之间的耦合度。IOC通过依赖注入(DI)实现,使得对象不需要直接创建依赖对象,而是由容器注入。


33. Spring DI如何理解?

答案:
Spring DI(依赖注入)是IOC的具体实现方式,指容器在运行时动态地将依赖对象注入到目标对象中。主要有三种注入方式:构造器注入、Setter方法注入和字段注入。DI减少了代码的耦合性,提高了可测试性和可维护性。


34. Spring中基于注解如何配置对象作用域?以及如何配置延迟加载机制?

答案:
作用域配置:使用@Scope注解,例如@Scope("singleton")或@Scope("prototype")
延迟加载:使用@Lazy注解,例如@Lazy(true),表示Bean在第一次被请求时才初始化


35. Spring工厂底层构建Bean对象借助什么机制?当对象不使用了要释放资源,目的是什么?何为内存泄漏?

答案:
构建机制:反射机制(Reflection)
释放资源目的:避免内存泄漏,提高系统资源利用率
内存泄漏:程序中已分配的内存未能正确释放,导致内存浪费,可能引发OutOfMemoryError


36. 描述Spring MVC处理流程及应用优势?

答案:
处理流程:

  1. 用户请求 → DispatcherServlet

  2. HandlerMapping查找处理器

  3. 调用Controller处理请求

  4. 返回ModelAndView

  5. ViewResolver解析视图

  6. 渲染视图返回响应
    优势:分层清晰、配置灵活、集成便捷、支持RESTful


37. Spring中的事务处理方式及优缺点?

答案:
方式:

  • 编程式事务:代码中显式控制,灵活但繁琐

  • 声明式事务:基于注解或XML配置,简洁但不够灵活
    优点:统一管理、减少冗余代码、支持事务传播特性
    缺点:声明式事务调试困难,编程式事务代码侵入性强


38. MyBatis应用中#与$有什么异同点?

答案:
#{}:预编译处理,防止SQL注入,会自动添加引号
${}:字符串拼接,有SQL注入风险,直接替换
相同点:都用于参数替换
不同点:安全性和处理方式不同


39. MyBatis应用动态SQL解决了什么问题?

答案:
解决了根据不同条件动态生成SQL语句的问题,避免了在Java代码中拼接SQL字符串的繁琐和安全隐患


40. Shiro框架权限管理时的认证和授权流程描述?

答案:
认证流程:Subject.login() → Realm认证 → 返回AuthenticationInfo
授权流程:权限检查 → Realm授权 → 返回AuthorizationInfo
核心组件:Subject、SecurityManager、Realm


41. BeanFactory和ApplicationContext有什么区别?

答案:
BeanFactory:基础IOC容器,懒加载,功能相对简单
ApplicationContext:继承BeanFactory,提供更多企业级功能,如事件发布、国际化支持,默认立即加载Bean


42. 请解释Spring Bean的生命周期?

答案:

  1. 实例化Bean

  2. 属性赋值(依赖注入)

  3. 调用Aware接口方法

  4. BeanPostProcessor前置处理

  5. 初始化方法(@PostConstruct、InitializingBean)

  6. BeanPostProcessor后置处理

  7. Bean使用中

  8. 销毁方法(@PreDestroy、DisposableBean)


43. Spring Bean的作用域之间有什么区别?

答案:

  • singleton:单例,整个容器只有一个实例

  • prototype:多例,每次请求创建新实例

  • request:每次HTTP请求创建一个实例

  • session:每个HTTP会话创建一个实例

  • globalSession:全局HTTP会话(Portlet应用)


44. 使用Spring框架的好处是什么?

答案:

  • 降低耦合度,提高可维护性

  • 支持AOP编程

  • 声明式事务管理

  • 方便集成其他框架

  • 提高开发效率


45. Spring中用到了那些设计模式?

答案:
工厂模式、单例模式、代理模式、模板方法模式、观察者模式、适配器模式等


46. Spring如何保证Controller并发的安全?

答案:

  • Controller设计为无状态(stateless)

  • 避免使用实例变量

  • 使用ThreadLocal存储线程相关数据

  • 合理使用同步机制


48. 在Spring中如何注入一个java集合?

答案:
XML配置方式:

xml

<list>、<set>、<map>、<props>

注解方式:使用@Autowired直接注入集合对象


49. Spring支持的事务管理类型?

答案:

  • 编程式事务管理

  • 声明式事务管理(基于XML或注解)


50. Spring框架的事务管理有哪些优点?

答案:

  • 提供一致的事务管理API

  • 支持声明式事务配置

  • 支持多种事务传播行为

  • 与Spring其他模块无缝集成


51. Spring MVC的主要组件?

答案:
DispatcherServlet、HandlerMapping、Controller、ViewResolver、HandlerAdapter、ModelAndView等


52. SpringMvc怎么和AJAX相互调用的?

答案:

  • 使用@ResponseBody注解返回JSON数据

  • 使用@RequestBody注解接收JSON参数

  • 配置消息转换器(如MappingJackson2HttpMessageConverter)


54. mybatis的缓存机制,一级,二级介绍一下?

答案:
一级缓存:SqlSession级别,默认开启,同一会话中有效
二级缓存:Mapper级别,需要手动配置,跨SqlSession有效,可自定义缓存实现


55. SpringMVC与Struts2的区别?

答案:

  • SpringMVC基于方法拦截,Struts2基于类拦截

  • SpringMVC与Spring集成更好

  • SpringMVC性能更高,配置更灵活

  • Struts2有更丰富的标签库


56. mybatis的基本工作流程?

答案:

  1. 加载配置文件

  2. 创建SqlSessionFactory

  3. 创建SqlSession

  4. 执行Mapper接口方法

  5. 操作数据库

  6. 提交事务

  7. 关闭SqlSession


57. 什么是MyBatis的接口绑定,有什么好处?

答案:
接口绑定:将Mapper接口与XML映射文件关联,通过动态代理实现
好处:类型安全、代码简洁、IDE支持更好、便于重构


58. MyBatis的编程步骤?

答案:

  1. 定义实体类

  2. 创建Mapper接口

  3. 编写Mapper XML映射文件

  4. 配置MyBatis核心配置文件

  5. 通过SqlSessionFactory创建SqlSession

  6. 获取Mapper接口实例并调用方法


59. JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

答案:
JDBC不足:

  • 代码冗余繁琐

  • 手动管理连接

  • SQL与Java代码耦合

  • 参数处理麻烦
    MyBatis解决方案:

  • 自动映射结果集

  • 连接池管理

  • SQL与代码分离

  • 参数自动绑定


60. MyBatis的优缺点?

答案:
优点:

  • SQL灵活可控

  • 学习成本低

  • 性能较好

  • 与Spring集成良好
    缺点:

  • 需要手动编写SQL

  • 数据库移植性差

  • 复杂关联映射配置繁琐

http://www.dtcms.com/a/613750.html

相关文章:

  • 爱站库全栈网站开发工程师
  • docker避免每次sudo方法
  • 计算机图形学·15 计算机视图(Computer Viewing)
  • 使用rufus制作系统盘及Ubantu24.04.3LTS镜像文件下载
  • opencart做视频网站做网站盈利方式
  • Polar MISC(下)
  • DNS基础介绍
  • Spring Boot 3.4 正式发布,结构化日志!
  • Docker安装和使用kkfileview
  • 做超市dm的网站淘宝联盟网站建设不完整
  • 手机终端传输模式深入介绍
  • 深圳工程造价建设信息网站为什么不做网站做公众号
  • 发那科机器人指令详解:从入门到精通
  • 机器人自主导航方案概述
  • HTTPS 究竟比 HTTP 好在哪?
  • 【机器视觉】一文掌握常见图像增强算法。
  • 新能源激光焊接工作站西门子1500系列PLC通过Profinet转CANopen智能网关和机器人进行通讯案例
  • 成品网站w灬源码火龙果企业网站seo怎么做
  • 前端最佳实践
  • 潍坊网站设计深圳设计公司办公室装修设计
  • excel设置下拉框选项?【图文详解】excel怎么设置下拉框选项?数据验证?下拉框选项格式?
  • 大语言模型四大核心技术架构深度解析
  • 图片分类展示网站源码有哪个网站可以做链接
  • 辽宁城乡建设网站优惠券网站怎么搭建
  • 2025.11.14 力扣每日一题
  • LDO输出电容、磁珠导致的纹波异常以及ADC有效位测量学习
  • 典型的 ROS 2 ament_cmake构建CMake脚本中ament相关指令解释
  • 【高级机器学习】 14. 多任务学习
  • 函数式接口+default接口+springAi 中的ducumentReader去理解为什么存在default接口的形式
  • 购物网站备案水友做的yyf网站