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的执行流程:
- 客户端请求 -> 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
接口,但在实现方式和特性上有一些显著的区别。下面是它们的主要区别:
- 实现方式 HashMap: 基于哈希表(Hash Table)实现。 使用 hashCode() 方法来确定键的存储位置。 通过链表(或红黑树)解决哈希冲突。 TreeMap: 基于红黑树实现。 键按自然顺序(或提供的 Comparator)进行排序。
所以如果要求有顺序的就用TreeMap- 允许 null 键和值
HashMap:
允许 一个 null 键和多个 null 值。
TreeMap:
不允许 null 键(因为不能与 null 比较),但允许多个 null 值。- 性能
HashMap:
查找、插入和删除操作的时间复杂度是 O(1),但是这取决于哈希函数的分布和冲突的数量。
在最坏情况下,所有元素可能都在同一个桶中,导致性能退化为 O(n)。
TreeMap:
查找、插入和删除操作的时间复杂度是 O(log n),因为 TreeMap 是基于红黑树实现的,每次操作都需要进行树的平衡调整。- 键的类型要求
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 页(记录 1 到 10):
SELECT * FROM your_table LIMIT 0, 10;
这里 0 表示跳过 0 行数据,从第一行开始返回 10 行。
第 2 页(记录 11 到 20):
SELECT * FROM your_table LIMIT 10, 10;
这里 10 表示跳过前 10 行数据,从第 11 行开始返回 10 行。
第 3 页(记录 21 到 30):
SELECT * FROM your_table LIMIT 20, 10;
Oracle 引入了 FETCH 和 OFFSET 语法,简化了分页查询。
示例:
第 1 页(记录 1 到 10):
SELECT * FROM your_table
ORDER BY some_column
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;
第 2 页(记录 11 到 20):
SELECT * FROM your_table
ORDER BY some_column
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
第 3 页(记录 21 到 30):
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 退出