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

Java面试总结(1)

问题1

自我介绍:

面试官您好,我叫xxx,是来自xxxx大学软件工程专业的一名应届生,我这次想应聘的是java开发实习生,在校期间,我热爱编程,能够使用java,C++,python的编程语言,其中系统的学习过java及其相关技术栈,使用过SSM,springMVC,springboot等框架开发,开发过web应用,微信小程序等,很期待能到贵公司实习,提高我的开发能力。

问题2

项目经验(简历上的)

问题3

我的项目用的什么框架(springboot和vue3)

问题3

springboot的核心注解和作用简述一下

1. @SpringBootApplication
作用:是一个复合注解,包含了以下三个常用注解:

@Configuration:指示该类是一个配置类,Spring 会处理它并自动注册为 Spring 容器中的 bean。
@ComponentScan:启用组件扫描,Spring 会扫描该包及其子包中的所有
@Component、@Service、@Mapper、@Controller 等注解标注的类,自动将它们注册为 Spring
容器中的 bean。
2. @RestController
作用:结合了 @Controller 和 @ResponseBody,用于标记一个类作为控制器,并且它的每个方法返回的结果都直接写入 HTTP 响应体中,通常用于构建 RESTful API。
用途:定义 RESTful Web 服务的控制器,简化了响应的处理。
3. @RequestMapping
作用:用于处理 HTTP 请求,支持 GET、POST、PUT、DELETE 等不同的请求方式。可以应用于类或方法级别,通常用于定义请求路径和 HTTP 方法的映射。

用途:设置方法或类的 URL 映射规则,通常配合 @GetMapping、@PostMapping 等注解使用。
4.@Autowired
作用:自动注入 Spring 容器中的 Bean。可以自动根据类型注入依赖,常用于构造器注入、字段注入和方法注入。
用途:自动装配依赖对象,减少手动配置。
5.@Value
作用:用于从配置文件(如 application.properties 或 application.yml)中注入值。可以注入基本类型、字符串、数组、集合等。
用途:从配置文件中读取配置并注入到属性中。

问题5

springMVC的执行流程:

  1. 客户端请求 -> 2. DispatcherServlet -> 3. HandlerMapping -> 4. Controller -> 5. ViewResolver -> 6. 视图渲染 -> 7. 返回响应给客户端

Spring MVC 的执行流程从客户端请求开始,到 DispatcherServlet 作为前端控制器处理请求,然后通过
HandlerMapping 定位到合适的 Controller,再由 HandlerAdapter 调用 Controller
处理请求,最终将结果交由 ViewResolver
渲染为视图并返回给客户端。整个流程灵活、可扩展,并且通过不同的配置选项支持各种视图技术和请求映射方式。

问题6

java中重载和重写的区别

重载是指在同一个类中定义多个方法,它们的方法名称相同,但方法的参数列表不同(可以是参数的个数、类型或顺序不同)。

特点: 方法名相同,但参数不同。 返回类型可以相同也可以不同。 重载发生在编译时(静态多态)。 可以在同一个类中定义多个重载方法。
方法签名不同,编译器根据方法签名来选择调用哪个重载方法。

重写是指在子类中重新定义父类中已存在的方法。重写的方法与父类中的方法必须有相同的方法签名(方法名、参数列表、返回类型),并且重写的方法必须具备相同的可见性或者更高的可见性(例如,public
可以重写 protected)。

特点: 方法名、参数列表和返回类型都相同。 重写发生在运行时(动态多态)。 子类中的方法将覆盖父类中被重写的方法。
重写通常用来实现子类特定的行为或修改父类方法的实现。 重写时可以改变方法的实现,但不能改变方法的参数列表、返回类型和访问权限。

问题7

重载和返回值类型有关系吗

重载和返回值类型没有直接关系。
在 Java中,方法的重载是基于方法签名来区分的,而方法签名不包含返回类型。方法签名仅由方法名和参数列表(包括参数的类型、数量和顺序)组成。因此,仅凭返回类型的不同,不能构成重载。

问题8

HashMap和TreeMap的区别

HashMap 和 TreeMap 都是 Java 中用于存储键值对的集合类,它们实现了 Map
接口,但在实现方式和特性上有一些显著的区别。下面是它们的主要区别:

  1. 实现方式 HashMap: 基于哈希表(Hash Table)实现。 使用 hashCode() 方法来确定键的存储位置。 通过链表(或红黑树)解决哈希冲突。 TreeMap: 基于红黑树实现。 键按自然顺序(或提供的 Comparator)进行排序。
    所以如果要求有顺序的就用TreeMap
  2. 允许 null 键和值
    HashMap:
    允许 一个 null 键和多个 null 值。
    TreeMap:
    不允许 null 键(因为不能与 null 比较),但允许多个 null 值。
  3. 性能
    HashMap:
    查找、插入和删除操作的时间复杂度是 O(1),但是这取决于哈希函数的分布和冲突的数量。
    在最坏情况下,所有元素可能都在同一个桶中,导致性能退化为 O(n)
    TreeMap:
    查找、插入和删除操作的时间复杂度是 O(log n),因为 TreeMap 是基于红黑树实现的,每次操作都需要进行树的平衡调整。
  4. 键的类型要求
    HashMap:
    键可以是任何对象,只要该对象重写了 hashCode() 和 equals() 方法。
    TreeMap:
    键必须是可比较的(实现了 Comparable 接口)或者你需要提供一个自定义的 Comparator,以便对键进行排序。
    如果你试图插入无法比较的键,TreeMap 会抛出 ClassCastException。
问题9

数组和集合的区别

数组: 数组是存储相同类型元素的固定大小的集合。 数组的大小在创建时确定,并且一旦确定后就无法改变。
集合: 集合是一个更加灵活的数据结构,用于存储一组元素。集合属于 Java 的 java.util 包。
集合的大小可以动态变化,支持元素的添加、删除等操作。
2.
数组 适用于元素个数固定且访问频繁的场景,具有高效的内存和访问性能。
集合 提供了更大的灵活性,支持动态调整大小和丰富的操作方法,适用于需要频繁插入、删除和查找数据的场景。
3.
数组:
数组是通过索引来访问元素的,索引从 0 开始。
访问速度非常快,时间复杂度是 O(1)。
集合:
集合的访问方式取决于具体的实现。例如,List 可以通过索引访问元素,Set 通常不支持按索引访问。
对于 List(如 ArrayList),可以通过索引访问;而 Set(如 HashSet)是基于元素而非索引来访问的。
在某些实现中(如 LinkedList),访问元素的时间复杂度可能是 O(n)。
4.
数组:
数组中的元素必须是相同的数据类型。 例如,int[] 存储的是 int 类型的元素,String[] 存储的是 String 类型的元素。
集合:
集合也存储相同类型的数据,但可以使用泛型来指定元素的类型,这样可以确保类型安全。 例如,List 存储的是 Integer
类型的元素,Set 存储的是 String 类型的元素。

问题10

Oracle和Mysql分别是怎么分页的

在 MySQL 中,分页查询通常使用 LIMIT 语句。LIMIT 语法允许你指定返回结果的行数和偏移量。基本的分页方法如下:
假设你有一个包含 1000 行数据的表,你想分页获取每页 10 行的数据:

1 页(记录 110):
SELECT * FROM your_table LIMIT 0, 10;
这里 0 表示跳过 0 行数据,从第一行开始返回 10 行。

第 2 页(记录 1120):

SELECT * FROM your_table LIMIT 10, 10;
这里 10 表示跳过前 10 行数据,从第 11 行开始返回 10 行。

第 3 页(记录 2130):

SELECT * FROM your_table LIMIT 20, 10;

Oracle 引入了 FETCH 和 OFFSET 语法,简化了分页查询。

示例:

1 页(记录 110):
SELECT * FROM your_table
ORDER BY some_column
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;2 页(记录 1120):
SELECT * FROM your_table
ORDER BY some_column
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;3 页(记录 2130):
SELECT * FROM your_table
ORDER BY some_column
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
问题11

目前最新项目负责的是哪个模块,具体有哪些模块,具体业务有什么

在这个项目中,我主要负责了用户认证模块,包括登录、注册、权限管理等功能的开发。这个模块的主要作用是确保系统的安全性和用户数据的保护。

问题12

你的项目总共有多少张表

问题13

我看你的项目是在tomcat上部署的,weblogic也部署过,Nginx负载均衡,还有KafKa。

我使用了多个技术栈来保证系统的高可用性、扩展性和高并发处理能力。Web 应用的部署使用了 Tomcat 和 WebLogic。Tomcat
主要用于较轻量级的应用托管,而 WebLogic
用于处理一些复杂的企业级需求,尤其是在事务管理和集群方面。在高并发的环境下,为了保证负载均衡和高可用性,我们引入了 Nginx
作为反向代理和负载均衡器,确保了请求能够均匀分配到各个应用实例上。此外,我们还使用了 Kafka
作为消息队列,帮助我们处理高吞吐量的实时数据流,保证了系统的异步处理能力。

问题14

在Linux服务器查看磁盘空间的命令,查看进程的命令,解压zip的命令,编辑文件的命令,编辑完保存命令

查看磁盘空间:df -h
查看进程:ps aux 或 top
解压 ZIP 文件:unzip filename.zip
编辑文件:vim filename 或 nano filename
保存并退出:vim 中使用 :wq,nano 中使用 Ctrl + O 保存后 Ctrl + X 退出

http://www.kler.cn/a/505226.html

相关文章:

  • Banana Pi BPI-RV2 RISC-V路由开发板采用矽昌通信SF2H8898芯片
  • 少一点If/Else - 状态模式(State Pattern)
  • 用Guiguider生成的字体代替LVGL默认字体
  • 怎么防止SQL注入攻击
  • iOS - 关联对象的实现
  • Open FPV VTX开源之betaflight配置
  • 迅翼SwiftWing | ROS 固定翼开源仿真平台正式发布!
  • 2Spark Core
  • 昇腾部署onnx模型问题总结
  • ubuntu18.04开发环境下samba服务器的搭建
  • Pcl联合Qt显示点云
  • EF Core执行原生SQL语句
  • Python爬虫实战:从抓取年报并分析数据开始
  • [leetcode]链表基础回顾
  • Hadoop开发过程中15个常见问题的详细解决方案
  • 智能网联汽车的数据脱敏
  • 使用Spring BootSpring AI快速构建AI应用程序
  • 从 MySQL 到 ClickHouse 的迁移与优化——支持上亿级数据量的复杂检索
  • JavaSE学习心得(多线程与网络编程篇)
  • 【Rust】结构体示例与调试
  • 关于反向传播算法个人的一些思考
  • 登录系统网址作业
  • 数学:机器学习的理论基石
  • 如何安装cnpm
  • 【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
  • MYSQL的第一次作业