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

Java测试题

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

  • TCP:传输控制协议
    • 使用场景:网页浏览(HTTP/HTTPS),文件传输(FTP),电子邮件,远程终端访问(SSH),数据库操作
  • UDP:用户数据报协议
    • 使用场景:音视频流媒体(直播,视频会议),实时在线游戏,DNS查询,网络电话,简单文件传输协议(TFTP)

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

  • 使用场景:
    • 利用多核CPU资源:数据分析,视频/图片编码解码,搜索引擎索引
    • 提供响应性/吞吐量(I/O密集型):Web服务器,图形用户界面应用程序,数据库连接池
    • 模拟并发行为:游戏开发,聊天软件
  • 最佳线程数取决于任务类型和系统资源。核心原则是:尽可能保存CPU处于忙碌状态,同时避免过度的上下文切换和资源竞争。
  • 判断标准:任务类型、系统资源、性能指标、上下文切换开销

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

  • execute(Runnable command):提交一个Runnable任务,用于执行不需要返回结果的异步任务。
  • submit(Callable<T> task)/submit(Runnable task,T result):提交一个Callable,可以在执行后返回一个结果;或提交一个Rannable任务,并指定一个预存的结果。

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

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

  • 防止网络因为数据过多而瘫痪,同时在所有用户直接公平地共享网络带宽资源。
  • 简单来说就是,解决“拥塞崩溃”问题。

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

  • equals()判断是否相等、
  • replace()替换、
  • split()拆分、
  • time()取出首位空白、
  • length()获取长度、
  • append()追加、
  • charAt()获取指定位置字符、
  • indexOf()获取字符位置、
  • toLowCase()/toUpperCase()大小写转换、
  • lastundexOd()从后往前查找、
  • substring()截取子串、
  • concat()连接字符串、
  • isEmpty()是否空字符串、
  • startsWith()/endWith()是否以字符开头/结尾、
  • repeat()重复字符串

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

  • 区别:String是不可变字符,线程安全;StringBuffer和StringBuilder是可变字符基于,但StringBuffer线程安全,可用于多线程,而StringBuilder线程不安全,用于单线程。
  • 基于缓存机制的设计思想。
  • 实现原理:使用一个内置的缓冲区(通常是数组)来批量处理数据,减少底层资源的直接交互次数。
  • 优势:减少系统调用,I/O操作次数,降低开销,提高响应速度。

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

  • String对象一旦被创建,其内容就无法被改变。

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

  • host:指定请求访问的服务器的域名和端口号
  • user-agent:发起请求的客户端设备信息
  • content-type:展示主体中的数据格式

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

  • error(错误):程序无法处理的错误
  • exception(异常):运行时异常,非运行时异常

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

  • 硬盘阶段:Class.forName("类全名")  例如:Class class = Class.forName("com.qcby.demo.Person");
  • 类阶段:类名.class()  例如:Class class = Person.class;
  • 对象阶段:对象名.getClass()  例如:Person person = new Person(); Class class = person.getClass();

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

  • 静态代理
  • 动态代理:JDK动态代理(基于接口)、Cglib动态代理(基于子类)
  • 使用场景:Spring AOP、虚拟代理、保护代理、缓存代理、单元测试

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

  • 作用:判断两个对象是否相等
  • 重写注意事项:
    • 重写equals需要遵守五大契约:自反、对称、传递、一致、非空性。否则,依赖对象相等性的类会出现无法预测的混乱行为。
    • 必须同时重写hashCode()方法,因为规定:如果两个对象equals()为true,它们的哈希码必须相等,否则它们无法在哈希集合中正常工作。

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

  • Java严格是按值传递
  • 引用传递:是指将实际参数的内存地址传入函数,通过这个地址修改数据,会影响原始数据
  • 值传递:是指将实际参数值的副本传入函数,修改副本不会影响原始数据
  • 支持引用传递的语言:C++、C#、PHP
  • 支持值传递的语言:Java、js、python

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

  • 先静态后实例,最后构造器;同类成员按顺序:静态属性=静态代码块(看书写顺序)>属性=构造代码块(看书写顺序)>构造方法
  • 先父类后子类:父类静态>子类静态>父类非静态>父类构造方法>子类非静态>子类构造方法

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

  • 是为了Java程序调用的本地方法提供内存空间,用于执行本地方法所需的栈操作。

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

  • 双亲委派机制:是指Java类加载器用来加载类的一种工作机制,它规定了类加载请求应该如何传递。
  • 双亲委派机制是一种优雅的类加载协调方案。它通过“先父后子”的层级委托,确保了Java核心类库的绝对安全、避免了类的重复加载、保证基础类的正确行为,并维护了Java运行时环境的稳定性和一致性。它是Java生态体系稳固的基石之一。

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

  • 重写:子类继承父类,子类重写父类的方法,方法名、参数列表都必须相同。
  • 重载:在同一个类中,方法名相同,但参数列表不同。

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

  • 隐式调用:默认调用父类无参构造;super();
  • 显示调用:在子类构造方法中的第一行使用super(参数列表)
  • this和super不能同时出现

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

  • 触发

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

  • instanceof关键字是一个运行时类型检测运算符。
  • 作用:
    • 确保向下转型的安全性,防止ClassCastException
    • 根据对象的实际类型执行不同的分支逻辑
    • 结合模式匹配,使类型检查和转换代码更加简洁明了

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

  • 可能会,取决于转换的方向和类型的大小。
  • 注意:类型安全,向上转型-子类转父类,自动,安全;向下转型-父类转子类,显式,可能会抛出异常;必须使用instanceof检查安全。

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

  • 重入锁的含义:是指同一个线程可以多次进入由同一个锁保护的代码块。
  • 重入锁有那些:
    • synchronized关键字(内置锁/隐式锁)public synchronized void outer() {}
    • java.util.concurrent.locks.ReentrantLock(显示锁)lock.lock(); // 获取锁
  • 为什么?是为了防止线程“自己把自己锁死”。

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

  • 优先:极大地提升程序执行性能(核心优点)
    • 充分利用CPU流水线
    • 提高缓存命中率
    • 更高效地利用多核资源
  • 原因:编译器优化、处理器乱执行、内存系统缓存

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

  • 根据排序地数据类型和大小,自动选择最高效的排序算法。

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

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

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

  • 62比特
  • 过程:
    • 统计字符频率:a出现6次,s 5次,f 4次,g 2次,h 2次,j 1次,k 2次,d 1次
    • 构建哈夫曼树:按频率从效到大叶子节点,合并:
      • 初始:d(1), j(1), g(2), h(2), k(2), f(4), s(5), a(6)
      • 步骤1:合并 d(1) + j(1) → 节点(2)   节点列表:g(2), h(2), k(2), 节点(2), f(4), s(5), a(6)
      • 步骤2:合并 g(2) + h(2) → 节点(4)  节点列表:k(2), 节点(2), 节点(4), f(4), s(5), a(6)
      • 步骤3:合并 k(2) + 节点(2) → 节点(4)  节点列表:节点(4), 节点(4), f(4), s(5), a(6)
      • 步骤4:合并 节点(4) + 节点(4) → 节点(8)  节点列表:f(4), s(5), a(6), 节点(8)
      • 步骤5:合并 f(4) + s(5) → 节点(9)  节点列表:a(6), 节点(8), 节点(9)
      • 步骤6:合并 a(6) + 节点(8) → 节点(14)  节点列表:节点(9), 节点(14)
      • 步骤7:合并 节点(9) + 节点(14) → 根节点(23) 
    • 分配哈夫曼编码:a-10,s-01,f-00,k-110,g-1110,h-1111,d-11010,j-11011
    • 计算总比特数:总比特数=Σ(频率 × 码长)
      • a(6) × 2 + s(5) × 2 + f(4) × 2 + k(2) × 3 + g(2) × 4 + h(2) × 4 + d(1) × 5 + j(1) × 5 = 62

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

  • 优点:解决CPU与注解之间的速度鸿沟,提示系统性能
    • 极高的速度
    • 降低平均内存访问时间
    • 减少CPU空闲等待,提高吞吐量
    • 降低系统总线负载
  • 缺点:成本高昂、容量有限、设置复杂、功耗和发热较大、引入步确定性,执行时间波动

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

  • 安全的类:
    • java.util.concurrent包下的类:ConcurrentHashMap、CopyOnWriteArrayList/CopyOnWriteArraySet
    • java.util包中的包装类:Collections.synchronizedList(List list)、Collections.synchronizedMap(Map map)
    • 不可变类:String、Integer、Long、Double等

30. 什么是LRU算法?

  • LRU全程是Least Recently Used,它是一种非常典型的缓存淘汰策略。
  • 核心思想:如果数据最近被访问过,那么它将来北方网的几率也更高。因此,当缓存空间已满时,我们应该优先淘汰那些最近最少被访问的数据。

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

  • Spring Bean容器:就是负责创建、配置、组装和管理Bean对象。
  • 不同:
    • Bean容器是一个广义概念,IOC容器是其具体实现。
    • IOC容器实现了控制反转思想,是Bean容器的核心机制。

32. Spring IOC 如何理解?

  • IOC,Inversion of Control,控制反转,将对象的创建权力反转给Spring框架。可以用来降低代码之间的耦合度。

33. Spring DI 如何理解?

  • DI,Dependency Injection,依赖注入,是实现IOC的具体方式。在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中。

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

  • 作用域:@Scope
  • 延迟加载机制:@Lazy

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

  • 机制:反射机制和工厂模式
  • 目的:防止资源耗尽,保证数据完整性
  • 内存泄漏:是指程序中已分配的内存由于某种原因未被释放,导致系统可用内存逐渐减少,最终可能导致程序崩溃。

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

  • 处理流程:
    • 用户发起请求,web容器接受,匹配到前端控制器DispatcherServlet
    • DispatcherServlet请求HandlerMapping,HandlerMapping根据请求的URL,找到对应的Controller和Interceptor并将它们封装成一个HandlerExecutionChain返回
    • DispatcherServlet调用HandlerAdapter执行Controller
    • DispatcherServlet请求ViewResolver解析视图
    • DispatcherServlet将模型数据交给View进行渲染
    • DispatcherServlet向用户返回响应
  • 应用优势:职责分离清晰、高度可配置和可扩展、注解驱动开发,简洁高效、无缝集成Spring、强大的拦截器机制

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

  • 编程式事务:手动控制事务边界,灵活性高;但代码耦合度高。
  • 声明式事务:通过配置XML或注解自动管理事务,事务管理和业务代码解耦,简洁;但粒度较粗,通常只能用在方法级别进行控制。

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

  • #:预编译参数占位符,防止SQL注入,安全。  
  • $:字符串拼接符,直接替换,存在SQL注入风险。  
  • 同:都用于参数替换。
  • 异:#安全,$性能略高但风险大

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

  • 解决了SQL语句拼接复杂、条件判断繁琐的问题,使SQL更灵活、可维护性更强,支持<if>、<choose>、<foreach>等标签。

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

  • 认证:用户提交身份信息 → SecurityManager → Realm验证 → 登录成功/失败。
  • 授权:用户访问资源 → SecurityManager → Realm获取权限 → 判断是否授权。

41. BeanFactory和ApplicationContext有什么区别?   

  • BeanFactory:基础IOC容器,延迟加载,功能简单。
  • ApplicationContext:高级IOC容器,默认立即加载,支持AOP、事务、国际化等。

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

  • 实例化Bean → 注入依赖 → Aware 接口回调 → 初始化前处理(BeanPostProcessor) → 调用初始化方法(如@PostConstruct)→ 初始化后处理  → Bean就绪 → 销毁前处理 → 调用销毁方法(如@PreDestroy)

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

  • singleton:单例,默认作用域。  
  • prototype:每次请求创建新实例。  
  • request:每次HTTP请求创建一个实例(Web环境)。  
  • session:每个Session一个实例(Web环境)。  

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

  • 方便解耦,简化开发
  • 支持AOP
  • 通过注解,方便程序测试
  • 方便集成各种优秀框架
  • 降低Java EEAPI的使用难度

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

  • 工厂模式
  • 单例模式
  • 代理模式
  • 模板模式
  • 观察者模式
  • 适配器模式
  • 策略模式
  • 装饰品模式

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

  • Spring Controller默认是单例的,通过避免使用实例变量或使用线程安全的数据结构(如ThreadLocal)来保证并发安全。

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

  • 方便解耦,简化开发
  • 支持AOP
  • 通过注解,方便程序测试
  • 方便集成各种优秀框架
  • 降低Java EEAPI的使用难度

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

  • 注入固定值集合:@Value/@Bean
  • 注入固定的复杂对象集合:@Bean
  • 收集所有同类型接口的实现类:@Autowired

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

  • 编程式事务管理
  • 声明式事务管理(推荐)

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

  • 一致的事务抽象层
  • 声明式事务管理
  • 灵活性高
  • 与Spring生态无缝集成
  • 同时支持编程式和声明式事务
  • 易于测试

51. Spring MVC的主要组件?

  • 前端控制器(DispatcherServlet)
  • 处理器映射器(HandlerMapping)
  • 处理器(Handler)
  • 处理器适配器(HandlAdapter)
  • 视图解析器(View Resolver)
  • 视图(View)

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

  • SpringMVC返回数据给Ajax(后端→前端):使用@ResponseBody和@ResController注解
  • SpringMVC接受Ajax发送的数据(前端→后端):使用@RequestBody注解

53. Mybatis 中#和$的区别?

  • #:预编译参数占位符,防止SQL注入,安全。  
  • $:字符串拼接符,直接替换,存在SQL注入风险。  
  • 同:都用于参数替换。
  • 异:#安全,$性能略高但风险大

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

  • 一级:SqlSession级别;与SqlSession共存;默认开启状态;同一个SqlSession内共享。
  • 二级:Mapper级别;与整个应用同步,可跨SqlSession;需要手动配置开启;与所有SqlSession共享。

55. SpringMVC与Struts2的区别?

  • SpringMVC:基于方法的框架;拦截器机制灵活、解耦;性能更高;与Spring无缝集成。
  • Struts2:基于类的框架;拦截器强大、重量;性能较低;需要额外配置进行集成;重度依赖OGNL。

56.  Mybatis 的基本工作流程?

  • 读取配置文件→ 创建SqlSession对象 → 获取Mapper接口的代理对象 → 执行SQL → 提交事务 → 关闭SqlSession

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

  • 接口绑定:是指通过接口定义SQL映射,无需实现类。
  • 好处:简化开发、提高可维护性、支持动态代理。

58. MyBatis的编程步骤?

  • 添加依赖
  • 创建核心配置文件:mybatis-config.xml
  • 创建实体类
  • 创建Mapper接口
  • 创建Mapper XML映射文件
  • 编写Java代码执行数据库操作

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

  • JDBC不足:SQL硬编码、代码冗余、手动映射
  • 解决:MyBatis使用连接池、模板化封装、提供自动映射、SQL分离、缓存机制、动态SQL等解决方案。

60. MyBatis的优缺点?

  • 优点:SQL灵活、学习成本低、与Spring集成好
  • 缺点:SQL需手动编写、数据库迁移成本高
http://www.dtcms.com/a/613930.html

相关文章:

  • YOLO v11的学习记录(五) 使用自定义数据从头训练一个实例分割的模型
  • 大模型Agent工作流设计模式深度解析:从ReAct到ReWOO的实践演进
  • redis的配置windows
  • 漯河英文网站建设秦皇岛陵县网站建设
  • HTML5+CSS3+JS小实例:螺旋鼠标轨迹
  • 长沙市云网站建设大型电商网站开发方案
  • 从一到无穷大 #57:Snowflake的剪枝方案
  • 网页网站的区别是什么最适合seo的wordpress主题
  • 深入理解 OverlayFS:用分层的方式重新组织 Linux 文件系统
  • 定制型网站制作公司织梦图片自适应网站源码
  • 解决mac端pycharm执行allure命令报错:returned non-zero exit status 127
  • 公司官网制作报价青岛关键词优化平台
  • ModelScope微调模型
  • Ollama本地电脑运行无限制AI模型超简单案例
  • 银川网站建设那家好品牌整合营销方案
  • 南京手机网站制作公司手机做图纸app下载网站
  • 学习笔记九:线性判别分析
  • RHCE的SSH配置文件及实验
  • 网站开发基础知识公众号里链接的网站怎么做的
  • 人工智能之数据分析 numpy:第四章 数组属性和数据类型
  • 网站建设所需美工app界面设计的软件
  • 营口网站建设开发制作家装公司加盟哪个公司好
  • openwrt源码编译环境搭建-安装Luci
  • synchronized全解析:从锁升级到性能优化,彻底掌握Java内置锁
  • FPGA工程师12实战项目-基于PCIe的高速ADC采集项目
  • Linux驱动开发实战指南-中
  • 网站的开发环境是什么个人制作个网站
  • 减速机在不同工况下如何安装才更稳?
  • 哪个网站可以做线上翻译赚钱织梦系统seo网站模板
  • RocketMq面试