Java面试题集合(1)(自己理解)

本文详细介绍了Spring框架及其相关组件,包括Spring、SpringBoot、SpringCloud、SpringMVC等的关键特性和应用场景,同时涵盖了线程创建、Mybatis使用等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

朋友实习面试问题

开篇:我只是一个程序小白,只能通过自己目前理解程度和网上查的来写,写到的点很浅,希望大佬们可以指点

1.聊聊spring

我的理解:
spring是一个大杂烩(全家桶),里面包含很多框架
用一句话说:
Spring是一个轻量级的控制反转依赖注入(IOC)和面向切面(AOP)的容器(框架)。

2.聊聊springboot

springboot是spring开源组织下的子项目
定义:springboot是为了简化程序代码开发过程中大量的配置而开发出来一个框架

springboot的优点:
1.容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。
2.开箱即用,远离繁琐的配置。
3.提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
4.没有代码生成,也不需要XML配置。
5.避免大量的 Maven 导入和各种版本冲突。

springboot的常用注解:
springboot的核心注解是:@SpringBootApplication,他包含了以下三个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring组件扫描

springboot如何解决跨域问题
后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。

如何实现 Spring Boot 应用程序的安全性?
为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其方法。

运行 Spring Boot 有哪几种方式?
1)打包用命令或者放到容器中运行

2)用 Maven/ Gradle 插件运行

3)直接执行 main 方法运行

如何使用 Spring Boot 实现分页和排序?
使用 Spring Boot 实现分页非常简单。使用 Spring Data-JPA 可以实现将可分页的传递给存储库方法。

3.聊聊springcloud

定义:Spring Cloud是一系列框架的有序集合。利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发

springcloud包含的组件:
1.注册中心
2.熔断器
3.网关
4.负载中心
5.配置中心

4.聊聊springmvc

MVC是Model(模型),View(视图),Controller(控制器)的简写,是一种软件设计规范。

MVC主要作用是降低了视图与业务逻辑间的双向耦合。

MVC是一种架构模式。

Controller:控制器

取得表单数据

调用业务逻辑

转向指定的页面

Model:模型

业务逻辑

保存数据的状态

View:视图

显示页面

Spring MVC的特点:

轻量级,简单易学

高效 , 基于请求响应的MVC框架

与Spring兼容性好,无缝结合

约定优于配置

功能强大:RESTful、数据验证、格式化、本地化、主题等

简洁灵活

springmvc常用的注解:
1.@Controller

2.@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径

3.@Resource和@Autowired
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

1、共同点

两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

2、不同点

(1)@Autowired

@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
    
4.@PathVariable
将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数

5.@CookieValue
  作用:用来获取Cookie中的值;

参数: value:参数名称 required:是否必须 defaultValue:默认值
6.@RequestParam

@RequestParam用于将请求参数区数据映射到功能处理方法的参数上

7.@ResponseBody
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

8.@ModelAttribute
  代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。

9.@SessionAttributes
  @SessionAttributes即将值放到session作用域中,写在class上面。

@SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外(value 属性值),

还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(types 属性值)

springmvc的执行流程
1.用户从客户端发出请求到DispatcherServlet
2.DispatcherServlet查询一个或多个HandlerMapping(处理器映射器)
3.找到接收请求的controller
4.DispatcherServlet把请求发送给controller
5.controller调用业务逻辑层处理后 ,返回给ModelAndView
6.DispatcherServlet查询一个或多个ViewResoler(视频解析器),找到ModelAndView指定的视图
7.视图负责将结果返回给客户端

转发和重定向的区别
转发:

1.转发不会改变浏览器的地址栏

2.转发共享同一个request

3.转发只能在同一个web应用中使用

重定向:

   1.重定向会改变浏览器的地址栏

   2.重定向不共享request

   3.可以重定向到任意URL

5.什么是正向代理和反向代理

正向代理:
用户想访问一个国外网站,可是不能直接访问,于是,用户创建一个代理服务器,通过代理服务器访问网站

正向代理的结果是:保护了用户
正向代理隐藏了用户,用户的请求被代理服务器接收代替,到了服务器,服务器并不知道用户是谁

反向代理:
用户发送请求到服务器(其实是发送到代理服务器,单用户不知道)
代理服务器把请求发送给真正的服务器
真正的服务器返回响应给代理服务器
代理服务器把响应数据返回给用户

反向代理的结果:保护了服务器
反向代理作用:用户请求过多,服务器会有一个处理的极限。所以使用反向代理服务器接受请求,再用均衡负载将请求分布给多个真实的服务器。既能提高效率还有一定的安全性。
用途:如果不采用代理,用户的IP、端口号直接暴露在Internet(尽管地址转换NAT),外部主机依然可以根据IP、端口号来开采主机安全漏洞,所以在企业网,一般都是采用代理服务器访问互联网。

6.创建线程的三个方式

1.继承Thread类

2.实现runnable接口

JDK1.5之前是上面两种方法,JDK1.5之后加上下面两种方法

3.实现callable和Future接口

4.线程池

7.Mybatis是什么

定义:
Mybatis是一款持久层框架,半自动化的ORM框架
作用:
避免了所有JDBC代码和手动设置参数获取结果集

为什么需要持久层框架?

内存断电后数据会消失,但有一些对象是无论如何都不能丢失的,比如银行账号等

Mybatis的优点:
1.简单易学
2.灵活,sql写在XML里,便于统一优化和管理
3.解除sql与程序的耦合,提高可维护性

今天收集就这些,面试完继续补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值