【深圳五兴科技】Java后端面经

本文目录

  • 写在前面
  • 试题总览
  • 1、java集合
  • 2、创建线程的方式
  • 3、对spring的理解
  • 4、Spring Boot 和传统 Spring 框架的一些区别
  • 5、springboot如何解决循环依赖
  • 6、对mybatis的理解
  • 7、缓存三兄弟
  • 8、接口响应慢的处理思路
  • 9、http的状态码

写在前面

关于这个专栏:
本专栏记录一些互联网大厂、小厂的面试实录!包含校招、社招!
内容主要来源:博主面试总结以及博主从牛客网等平台摘录
专栏地址:2023Java面试实录

试题总览

在这里插入图片描述

1、java集合

Java集合框架提供了一组用于存储和操作数据的接口和类。以下是Java集合框架中最常用的一些集合类型:
List(列表):有序、可重复的集合,常用的实现类有ArrayList和LinkedList。
Set(集合):无序、不可重复的集合,常用的实现类有HashSet和TreeSet。
Map(映射):键值对的集合,每个键唯一,常用的实现类有HashMap和TreeMap。
Queue(队列):先进先出(FIFO)的集合,常用的实现类有LinkedList和PriorityQueue。
Stack(栈):后进先出(LIFO)的集合,常用的实现类是Stack。
Deque(双端队列):既可以作为队列使用,也可以作为栈使用的集合,常用的实现类是ArrayDeque。
除了以上常用的集合类型,Java还提供了一些其他的集合类,如BitSet、Vector等,以满足不同的需求

2、创建线程的方式

在 Java 中,创建线程的方式主要有以下几种:

1、继承 Thread 类:定义一个类继承自 Thread 类,并重写其 run() 方法来定义线程执行的任务。然后创建该类的实例并调用 start() 方法启动线程

class MyThread extends Thread {
    public void run() {
        // 线程执行的任务
    }
}
MyThread thread = new MyThread();
thread.start();

2、实现 Runnable 接口:定义一个实现了 Runnable 接口的类,实现接口中的 run() 方法来定义线程执行的任务。然后将该实现类的实例传递给 Thread 类的构造函数,并调用 start() 方法启动线程。

class MyRunnable implements Runnable {
    public void run() {
        // 线程执行的任务
    }
}

MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();

3、使用匿名内部类:可以通过匿名内部类的方式实现 Runnable 接口,简化代码编写。

Runnable myRunnable = new Runnable() {
    public void run() {
        // 线程执行的任务
    }
};

Thread thread = new Thread(myRunnable);
thread.start();

4、使用 Lambda 表达式:Java 8 引入的 Lambda 表达式可以进一步简化线程创建的代码。

Runnable myRunnable = () -> {
    // 线程执行的任务
};

Thread thread = new Thread(myRunnable);
thread.start();

3、对spring的理解

Spring 是一个开源的轻量级框架,它为构建企业级应用程序提供了全面的基础设施支持。以下是对 Spring 框架的一些理解:
IoC(控制反转):Spring 提供了 IoC 容器,通过依赖注入的方式管理组件之间的依赖关系,降低了组件之间的耦合度,使得代码更加灵活、可维护、可测试。
AOP(面向切面编程):Spring 支持 AOP 编程,通过切面(Aspect)将横切逻辑(如日志记录、事务管理等)与核心业务逻辑分离,提高了代码的模块化和可重用性。
声明式事务管理:Spring 提供了声明式事务管理的支持,简化了事务管理的配置,使开发者能够专注于业务逻辑的实现,而不必过多关注事务管理的细节。
模块化设计:Spring 框架被设计成由多个独立的模块组成,开发者可以根据需要选择合适的模块来使用,例如 Spring Core、Spring MVC、Spring Data 等,使得开发更加灵活和轻量级。
简化开发:Spring 提供了大量的现成解决方案和模板,并且支持各种技术整合,如与 ORM 框架(如 Hibernate、MyBatis)的集成、与消息队列(如 ActiveMQ、RabbitMQ)的集成等,可以大大简化企业应用的开发过程。
总的来说,Spring 框架通过提供一套全面的功能和良好的设计思想,帮助开发者快速构建可扩展、高效、易维护的企业级应用程序。

4、Spring Boot 和传统 Spring 框架的一些区别

Spring Boot 是基于 Spring 框架的一个开发框架,它旨在简化基于 Spring 的应用程序的配置和部署。下面是 Spring Boot 和传统 Spring 框架的一些区别:
自动配置: Spring Boot 通过使用自动配置(auto-configuration)的机制,根据应用程序的依赖和配置,自动配置 Spring 相关的组件和功能。而传统的 Spring 框架需要手动配置大量的 XML 或 Java 配置文件。
起步依赖: Spring Boot 引入了起步依赖(Starter Dependencies)的概念,它是一种预配置的依赖项集合,可以简化项目的依赖管理。通过引入相关的起步依赖,开发者无需手动添加和管理每个单独的依赖项。
嵌入式服务器: Spring Boot 默认内嵌了常用的 Web 服务器,如 Tomcat、Jetty 或 Undertow,开发者无需手动配置或部署额外的服务器。
简化的配置: Spring Boot 使用约定优于配置的原则,提供了默认的配置,使得开发者能够快速启动应用程序。同时,Spring Boot 支持外部化配置,可以通过属性文件、环境变量等方式灵活配置应用程序。
健康检查和监控: Spring Boot 提供了健康检查和监控的功能,通过访问特定的端点(如/actuator/health)可以获取应用程序的运行状态、性能指标等信息。
总的来说,Spring Boot 提供了一种更简化、更快速的开发方式,使得基于 Spring 的应用程序的开发、配置和部署更加高效和便捷。它适用于构建独立的、可扩展的、自包含的应用程序,而传统的 Spring 框架则更适用于需要更精细控制和配置的复杂应用程序。

5、springboot如何解决循环依赖

在 Spring Boot 中,处理循环依赖(circular dependency)的方式与传统的 Spring 框架是一致的。Spring 框架本身提供了解决循环依赖的机制,而 Spring Boot 作为基于 Spring 的快速开发框架,并未改变这一机制。
通常情况下,Spring 解决循环依赖的方式是利用三级缓存(three-level cache):

第一级缓存:Spring 在创建 bean 实例时,将正在创建的 bean 放入一个缓存中,以便后续引用。
第二级缓存:如果在创建 bean 的过程中遇到循环依赖,Spring 将创建一个包装过的代理对象作为占位符,同时将未完成创建的 bean 放入第二级缓存中。
第三级缓存:当出现循环依赖时,Spring 会尝试从第二级缓存中获取代理对象,然后通过调用代理对象的方法来完成对另一个 bean 的注入。

通过这种方式,Spring 能够在遇到循环依赖时,仍然能够正常创建和管理 bean 实例。

6、对mybatis的理解

MyBatis 是一个优秀的持久层框架,它将 SQL 语句和 Java 代码进行分离,通过 XML 文件或注解来配置 SQL 映射关系,从而简化了数据库操作的编写和维护。以下是对 MyBatis 的一些理解:
SQL 与 Java 之间的分离:MyBatis 采用了将 SQL 语句与 Java 代码进行分离的方式,通过编写 XML 文件或使用注解来定义 SQL 映射关系,使得开发者能够更清晰地管理 SQL 语句,减少了 Java 代码中硬编码 SQL 的情况。
灵活的映射配置:MyBatis 支持灵活的映射配置,可以通过 XML 文件或注解来定义对象与数据库表之间的映射关系,包括字段映射、关联关系、结果集映射等,同时还支持动态 SQL,可以根据条件动态生成 SQL 语句。
高度可定制化:MyBatis 提供了丰富的配置选项和插件机制,可以对其行为进行高度定制,例如配置缓存、执行器、日志输出等,同时还可以编写自定义插件来扩展 MyBatis 的功能。
优秀的性能:MyBatis 使用 JDBC 进行底层数据库操作,性能较高,同时提供了缓存机制和延迟加载等功能,可以有效提升查询效率,并且避免了 ORM 框架的性能问题。
轻量级框架:相比于其他 ORM 框架,MyBatis 是一个轻量级的框架,学习曲线较低,使用简单,适合对 SQL 有较好掌握的开发者使用,同时也支持与 Spring 等主流框架集成。
总的来说,MyBatis 是一个功能强大、灵活可定制、性能优秀的持久层框架,适用于需要灵活控制 SQL 语句和数据库操作的项目,能够帮助开发者提高开发效率,同时保持良好的性能表现。

7、缓存三兄弟

"缓存三兄弟"通常指的是缓存击穿、缓存雪崩和缓存穿透,它们是在使用缓存时可能会遇到的一些常见问题。
缓存击穿
问题描述:指的是在某个时间点,某个热点数据突然失效,此时大量请求并发访问这个热点数据,导致所有请求都直接访问数据库,造成数据库压力剧增。
解决方法:可以在缓存中设置热点数据的过期时间,或者使用互斥锁(如分布式锁)来避免多个线程同时访问数据库。
缓存雪崩:
问题描述:指的是缓存中大量数据同时失效,导致大量请求直接访问数据库,类似于缓存击穿,但是影响范围更广,可能涉及多个缓存键值对。
解决方法:可以给缓存数据设置不同的过期时间,采用多级缓存策略,或者使用熔断机制来保护数据库。
缓存穿透:
问题描述:指的是恶意请求访问不存在的数据,由于缓存没有命中,请求直接访问数据库,这种请求可能是攻击性的,也可能是由于程序错误导致的。
解决方法:可以在缓存中设置空对象占位,或者使用布隆过滤器等技术来拦截无效请求,另外也可以对请求参数进行校验来过滤无效请求。
解决缓存问题需要综合考虑缓存的设计、失效策略、并发控制等多个方面,通常需要结合具体的业务场景和系统架构来进行调整和优化。

8、接口响应慢的处理思路

理接口响应慢的问题需要综合考虑系统性能、网络延迟、数据库查询等多个方面,以下是一些处理思路:
性能监控和日志分析:
首先,需要对系统进行性能监控和日志分析,通过监控工具和日志记录系统的响应时间、CPU 使用率、内存占用情况等,定位慢响应问题所在。
优化数据库查询:
如果接口涉及数据库查询,可以通过索引优化、SQL 优化、分库分表等方式来提升数据库查询效率。
并发处理和线程池:
对于需要大量并发处理的接口,可以采用线程池来管理并发请求,避免因为线程创建和销毁带来的性能损耗。
缓存优化:
对于需要频繁访问的数据,可以考虑增加缓存层,减少对数据库的访问,提高数据读取速度。
网络优化:
如果接口涉及跨网络通讯,可以通过优化网络拓扑结构、使用 CDN 等方式来提高网络传输效率。
降级和限流:
当接口响应慢时,可以考虑实施降级策略,返回默认数据或者提示信息,避免影响整个系统的稳定性;另外也可以考虑实施限流策略,控制并发访问量,避免系统过载。
技术选型优化:
对于某些核心接口,可以考虑优化底层技术选型,例如更高效的框架、更适合的数据库等。
代码优化:
在代码层面,可以通过优化算法、减少不必要的计算、减少内存使用等方式来提高接口响应速度。

9、http的状态码

HTTP 协议定义了多种状态码,用于表示客户端请求的处理结果。以下是一些常见的 HTTP 状态码及其含义:

1xx 信息性状态码:

100 Continue:服务器已经收到请求头,并且客户端应该继续发送请求体。
101 Switching Protocols:服务器正在切换协议,例如切换到 WebSocket。

2xx 成功状态码:

200 OK:请求成功。
201 Created:请求已创建新资源。
204 No Content:服务器成功处理请求,但不返回任何内容。

3xx 重定向状态码:

301 Moved Permanently:永久重定向。
302 Found:临时重定向。
304 Not Modified:资源未修改,可使用缓存的版本。

4xx 客户端错误状态码:

400 Bad Request:请求无效。
401 Unauthorized:未授权。
403 Forbidden:禁止访问。
404 Not Found:资源未找到。

5xx 服务器错误状态码:

500 Internal Server Error:服务器内部错误。
502 Bad Gateway:网关错误。
503 Service Unavailable:服务不可用。
504 Gateway Timeout:网关超时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/432500.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序云开发教程——墨刀原型工具入门(页面交互+交互案例教程)

引言 作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计? “时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

AlibabaCloud微服务:Linux 部署 Sentinel 流量控制

目录 一、实验 1.环境 2.Linux 部署 Sentinel 3. 微服务接入Sentinel配置 二、 问题 1.Linux本地启动Sentinel控制台 2.JDBC连接失败 一、实验 1.环境 (1)主机 表1 主机 系统软件版本IP备注Linuxopenjdk 1.8.0192.168.204.200 maven3.5.0nac…

基于QGIS的研究区域遥感影像裁切下载方法-以岳麓区为例

目录 前言 一、数据说明 1、遥感影像 2、矢量范围 二、按矢量范围导出 1、第一步、导出影像 2、第二步、设置输出格式 3、设置裁切范围 4、设置分辨率 三、按矢量范围掩膜 1、第一步、打开裁剪工具 2、第二步、参数设置 ​编辑 3、执行掩膜 四、webgis支持 1、生成运行…

【Redis】Redis持久化模式AOF

目录 引言 AOF持久化模式​编辑​编辑 AOF与RDB的混合持久化(4.x后的新特性) AOF的优缺点 修复破损aof文件 到底用RDB还是AOF 引言 AOF就相当于上面的日志形式。是追加式备份。所有发生的写操作,新增啊,修改啊,删除啊,这些命…

AI大模型与小模型之间的“脱胎”与“反哺”(第四篇)

76. **动态领域适应网络(Dynamic Domain Adaptation Networks, DDANs)**: 创建能动态调整自身参数以适应新行业特性的网络结构,使得AI大模型能在不完全重新训练的情况下快速适应新的业务场景和环境变化。 77. **元学习中的元策略优…

SoraAI优先体验资格注册教程

SoraA1视频工具优先体验资格申请 申请网址:https://openai.com/form/red-teaming-network 申请步骤: 填写基础信息 请使用英文根据内容填写以下内容,名、姓、电子邮件、居住国家、组织隶属关系(如果有)、教育水平 、学位(哪个领…

【数据结构】顺序表+链表

目录 1.顺序表 1.1初始化顺序表 1.2销毁顺序表 1.3检查容量并扩容 1.4把某个元素插入到下标为pos的位置 1.5头插和尾插 1.6删除下标为pos的元素 1.7头删和尾删 2.顺序表的问题及思考 3.链表 3.1链表的访问 3.2链表的增删查改 1.顺序表 顺序表的本质其实就是一个数组…

整合力-整合思维模型和领导力

整合力和领导力是组织成功的两大关键因素。在当今复杂多变的商业环境中,整合力和领导力的结合对于推动组织发展至关重要。本文将探讨整合力和领导力的概念、重要性以及如何有效整合二者以促进组织的成功发展。 ### 整合力的重要性 整合力指的是组织内部各个部门、…

【3GPP】【核心网】【5G】5G核心网协议解析(三)(超详细)

5G协议 NAS协议消息:UE 与 AMF 之间 UE通过5G NAS协议与AMF建立起安全的信令连接,进行用户数据传输和网络服务请求等操作 消息格式:NAS-PDU ------------------------- | Header | NAS Message(s) | ------------------------- Header…

毕业之前准备材料

文章目录 说明第一波截止时间待办事情(共计2)1、读书报告审核(吴海梅老师审核)2、课程学分审核(吴海梅老师审核,曹主216办公室) 第二波外审截止时间待办事情(王移花老师审核&#xf…

Linux下du命令和df命令的使用

du命令作用是估计文件系统的磁盘已使用量,常用于查看文件或目录所占磁盘容量。df命令是统计磁盘使用情况,可以用来查看磁盘已被使用多少空间和还剩余多少空间。du命令语法du [选项] [文件或目录名称]参数:-a:--all, 列…

第七篇:人工智能与机器学习技术VS量测(Measurement)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司 - 它是如何赋能数字化营销生态的?

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(四)

项目建议与立项申请、初步可行性研究、详细可行性研究、评估与决策是项目投资前使其的四个阶段。在实际工作中,初步可行性研究和详细可行性研究可以依据项目的规模和繁简程度合二为一,但详细可行性研究是不可缺少的。升级改造项目制作初步和详细研究&…

电脑提示“由于仅部分匹配或匹配不明确,因此无法迁移设备”怎么办?

“由于仅部分匹配或匹配不明确,因此无法迁移设备”错误可能会在将较旧的系统更新到较新的系统版本或者安装了双系统之后出现,此外,驱动程序不兼容、系统文件损坏、计算机接口故障、系统不支持出现错误的外接设备等也可能导致该错误出现。了解…

【Selenium】UI自动化|元素定位常见问题

1、报错NoSuchElementException——定位不到元素 分析的可能原因: 页面还没有加载出来,就对页面上的元素进行的操作 元素在iframe中,先要理解下frame的实质,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一…

Cocos Creator 3.8.x 制作模糊效果(比如游戏弹窗需要的模糊效果)

接着上一个讨论的话题,关于3.8.x的后效,今天来分享自定义后效来制作模糊效果,并将他应用到弹窗中做背景,话不多说开整。 一:最终效果 首先咱们来看官网自定义后效怎么搞的,从它的实例开始:自定义后效 二:定义PostProcessSettings给节点提供资源(通过编辑器修改参数的…

两天学会微服务网关Gateway-Gateway路由规则

锋哥原创的微服务网关Gateway视频教程: Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibiliGateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3…

vue3 (四)动态组件Vs异步组件

1.动态组件 点击toggle切换2个组件&#xff0c;配合<keep-alive>使用防止切换后数据丢失 <keep-alive><component :is"currentItem"></component> </keep-alive> 2.异步组件 定义方法&#xff1a;app.component(组件名,Vue.defineAs…

vs创建asp.net core webapi发布到ISS服务器

打开服务器创建test123文件夹&#xff0c;并设置共享。 ISS配置信息&#xff1a; 邮件网站&#xff0c;添加网站 webapi asp.net core发布到ISS服务器网页无法打开解决方法 点击ISS Express测试&#xff0c;可以成功打开网页。 点击生成&#xff0c;发布到服务器 找到服务器IP…

第十篇:如何利用人工智能技术做好营销流量整形管理?(Traffic Shaping)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市​​​​​​​。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先…