Java框架面试题

 

面试题大全免费下载地址

Java面试题大全.pdf-其它文档类资源-CSDN下载

  1.  什么是VSC

版本控制系统,是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

  1. 常用vsc

Cvs、svn、git

  1. 集中式和分布式的区别

集中式必须有一台电脑作为服务器,每台电脑都把代码提交到服务器上,再从服务器下载代码。如果网络出现问题或服务器宕机,系统就不能使用了。

分布式:分布式VCS没有中央服务器,每台电脑都可以保存代码版本,没有网络的时候可以先提交到本地,每台电脑也都可以作为服务器,其他电脑可以从作为服务器的电脑上克隆代码,可见分布式系统比集中式系统的安全性高很多。

  1. git工作原理

克隆git clone远程资源到本地仓库,作为工作目录;

远程修改后git pull更新本地文件;

本地修改后git status查看修改的文件,然后add添加修改的文件到詹存渠;、

添加后,commit添加到工作区;

修改完成后,若发现错误,也可以撤回提交并再次修改并提交;

git push将本地的修改推送到远程git服务器。

  1. maven仓库工作流程

当项目需要某个jar包时,先从本地仓库查找,如果有就返回,如果没有就到远程仓库查询,如果找到就返回jar包并保存到本地仓库,如果还没找到就到中央仓库查找,如果找到了就保存到远程仓库和本地仓库中,如果没有就查找失败了。

  1. 仓库的继承和聚合

继承,项目之间可以继承,子项目可以继承父项目的依赖和插件;

聚合,一个项目可以把多个项目整合到一起打包,部署到一起,聚合项目用modules配置被聚合的项目。

  1. Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架
  2. DI依赖注入,是IOC另一种说法,也就是对象由容器来管理,注入到我们需要依赖中。
  3. Spring是一种容器,能创建对象并管理对象的配置和生命周期。
  4. Spring主要组件 

Core(提供IOC功能)、Context(提供包的扫描)、Beans(bean管理)、SpEL(spring表达式)、AOP(面向切面)、Test(单元测试)

、MVC、JDBC、ORM(数据库开发)、Cloud(微服务开发框架)、Securty(权限控制框架)

  1. IOC控制反转:把对象的创建和管理交给容器来完成,作用:解耦,使用硬编码完成对象的创建和管理,代码不灵活,不利于扩展和维护,使用IOC后,开发者只需要关注自己的业务逻辑,代码更利于扩展和维护。
  2. IOC的原理:利用反射机制,解析XML文件后,通过反射机制动态创建对象,调用set方法,将对象注入到对应的属性中,然后通过容器返回对象。
  3. 依赖的注入方式

XML set方法、构造器、byNAME、byTYPE

  1. Spring重要注解

Component标记类,会被Spring扫描到

ComponentScan 组件扫描,标记在配置类上,用于扫描Component标记的类

Configuration 配置类,标记的类作为配置类代替XML

Value 注入值类型数据,配置属性或set方法上

Autowrie 自动装配,默认属性进行注入

Qualifier 标记名称,配置在类和注入属性上,用于区分类型相同的对象

Resource 自动装配,默认按名称注入,名称没有再按类型注入

Repository 标记DAO实现类

Service 标记Service实现类

Controller 标记Controller实现类

  1. 容器的分类

BeanFactory:最简单的容器,给DI提供了基本的支持;

ApplicationContext:继承BeanFactory,包含了其所有功能之外,在国际化支持、资源访问、事件传播等方面进行了良好的支持。

  1. 代理模式

调用者不能直接调用目标对象时,通过代理对象进行调用目标对象。

  1. 静态代理和动态代理的区别

静态代理:只能代理一种业务,如果有多种业务需要编写多个代理类

动态代理:通过反射机制动态生成代理类,不需要手动编写,能够代理多种业务,更加灵活。

  1. JDK动态代理如何实现

实现invocationHandler接口

实现invoke方法

通过Proxy.newProxyInstance方法返回代理对象

  1. JDK和CGLib动态代理的区别

JDK动态代理的被代理类必须实现过接口

CGLib动态代理通过继承实现,代理类是被代理类的子类

  1. AOP的原理

当从容器中获得对象时,判断该类的方法是否被某个切面切中,若有则判断该类有没有实现接口,若有则使用JDK动态代理,若没有就通过CGLib动态代理返回代理对象,并对原对象的方法进行增强

  1. SpringAOP 

面向切面编程,能实现代码的解耦,将核心业务和其他业务分离开来。

  1. AOP类型

前置,后置,环绕around返回后置afterReturning异常后置afterThrowing

  1. AOP作用

程序运行期间,不修改代码的同时为程序增强功能,将必不可少的公共功能做成切面,切入到代码运行中。只关注核心功能,不需考虑事务、日志,减轻负担。

  1. AOP应用

项目开发时,如果发现很多方法都会有些相同的代码,和核心业务又没有关系时,就可以考虑使用AOP:事务管理、缓存管理、日志管理、权限管理、性能监控。

  1. AOP注解

Aspect 切面,配置到切面类上

PointCut 配置切面点,加在方法上

  1. SpringMVC

M(Model模型)负责数据访问、业务逻辑(dao、service、entity);

V(View视图)负责和用户交互,展示数据(页面);

C(Controller)负责调用模型,更新视图(servlet->Controller)。

作用:解耦,便于开发和维护

执行过程:

  1. 用户访问视图
  2. 控制器调用模型对数据库操作
  3. 控制器进行页面跳转
  4. 将模型上的数据绑定到视图
  1. springMVC执行过程
  1. 用户发送请求
  2. 前端控制器将用户请求的URL发送给处理器映射
  3. 处理器映射讲handler(包装的方法信息)返回给前端控制器
  4. 前端控制器发送handler给适配器,适配器执行handler方法
  5. 执行handler方法后,返回ModelAndView(逻辑试图)给前端控制器
  6. 前端控制器再讲ModelAndView发送给视图解析器,解析出物理视图返回给前端控制器
  7. 前端控制器渲染视图,发送视图给用户
  1. SpringMVC和Struts2的区别
  1. SpringMVC基于Servlet机制,而Struts基于Filter机制
  2. SpringMVC是方法级别拦截,每个请求对应一个方法,执行速度更快;

   Struts2是类级别的拦截,每个请求对应一个Action类;

  1. 集成:SpringMVC属于Spring体系,配置容易,Struts2需要更多配置。
  1. SpringMVC需要的配置
  1. 导入SpringMVC依赖
  2. Spring.xml配置文件
  3. Web.xml配置
  1. SpringMVC常用注解

Controller        配置控制器类

RequestMapping    配置请求URL映射,配置方法或类上

GetMapping(URL)   GET请求

PostMapping(URL)POST请求

DeleteMapping(URL)Delete请求

PutMapping(URL) PUT请求

RequestParam(名称)配置请求参数

PathVariable(URL)配置路径参数

ResponseBody       返回响应数据

RestController     @Controller+@RestController

RequestBody        接受JSON对象

  1. 拦截器和过滤器

用于过滤请求,适用范围过滤器更大,拦截器只能在SpringMVC使用,效率高于过滤器。

  1. SpringMVC实现文件上传

导入依赖commons-fileupload,commons-io

配置上传处理器CommonsMultipartResolver

方法参数使用CommonsMultipartFile

表单form标签要添加enctype=“multipart/form-data”

  1. 介绍一下MyBatis

优秀的持久层框架,支持自定义SQL,存储过程以及高级映射,免除了几乎所有JDBC代码,以及设置参数和获取集的工作。可以通过简单的XML配置或注解和映射原始类模型、接口和javaPOJO为数据库中的记录。

  1. ORM

对象关系映射,通过使用描述对象和数据库之间的映射的元数据,讲面向对象语言中的对象自动持久化到关系数据库中。本质:将数据转换另一种形式。

  1. MyBatis和Hibernate的区别

Hibernate:全自动框架,不用写sql,自动生成,不利于sql优化,入门复杂;

Mybatis:半自动化框架,需要些sql,由框架映射,方便sql优化,入门容易。

  1. #{}和${}的区别

#{}占位符,用ParameterStatement的占位符方式在sql中插入参数值,可避免注入攻击;

${}字符串拼接,不能避免注入攻击。

  1. Mybatis的基本使用
  1. 导入依赖
  2. 添加配置文件mayvatis-config.xml
  3. 编写mapper接口
  4. 编写映射文件
  5. 编写测试,创建SqlSessionFactory,创建SqlSession,获得Mapper,调用方法
  1. MyBatis的动态SQL

If where set trim foreach

  1. 关联查询如何实现

MyBatis映射文件中,在ResultMap配置关联关系

Collection 配置集合类型的属性

Assoication 配置单独对象的属性

  1. 延迟加载

也叫懒加载,需要数据时才启动查询,是MyBatis对数据库的优化机制

  1. 物理分页和逻辑分页(内存)

物理分页:利用数据库特性分页,利用limit、PageHelper插件等,每次返回部分数据,用于数据量大,数据更新频繁

逻辑分页:每次返回所有数据,再根据程序员的代码逻辑分页显示或返回,内存消耗大,用于数据量小且数据稳定的场景,例如MyBatis使用RowBouds。。

  1. SSM分工
  1. Spring 作为基础框架,整合其他框架
  2. SpringMVC 作为Web开发框架,提供服务期开发支持
  3. MyBatis 作为ORM框架,提供数据库开发支持
  1. SSM整合流程
  1. 导入依赖
  2. 配置spring-MVC
  3. 配置mybatis-config
  4. 配置spring-maybatis
  5. 配置spring,导入SpringMVC和MyBatis配置
  6. 配置web.xml
  7. 测试
  1. 什么是事务

事务是数据库操作的最小工作单元,事务包含一个或多个业务操作,要么都执行要么都不执行。

  1. 事务的实现
  1. 编程式事务

编写java代码,实现启动事务,提交事务或回滚事务

特点:编写麻烦,代码入侵度高

  1. 声明式事务

通过配置+注解实现

代码简洁,侵入性低

45、事务的特性

  1. 原子性:不可分割,一次事务要么成功要么失败
  2. 隔离性:事务与事务之间会存在不可见的情况,什么情况不可见取决于隔离级别
  3. 持久性:事务一旦提交,结果是永久的,除非有其他事物更改
  4. 一致性:数据库必须保持一致的状态。
  1. 事务隔离级别

Read uncommitted 读未提交,可能出现脏读

Read committed 读已提交,解决脏读

Repeatable read 可重复读,解决不可重复读

Serializable 串行化,解决所有并发问题,排队执行性能低

  1. 可能发生的错误

1)脏读

一个事务读到另一个事务没有提交的数据

2)不可重复读

一个事务进行多次读取,读取到的结果不一样

3)幻读

一个事务第一次读取时没有某条数据,第二次读取时出现新的数据(幻影数据)

  1. Linux常用命令

cd /home

进入 ‘/home’ 目录

cd ..

返回上一级目录

cd ../..

返回上两级目录

cd -

返回上次所在目录

cp file1 file2

将file1复制为file2

cp -a dir1 dir2

复制一个目录

cp -a /tmp/dir1 .

复制一个目录到当前工作目录(.代表当前目录)

ls

查看目录中的文件

ls -a

显示隐藏文件

ls -l

显示详细信息

ls -lrt

按时间显示文件(l表示详细列表,r表示反向排序,t表示按时间排序)

pwd

显示工作路径

mkdir dir1

创建 ‘dir1’ 目录

mkdir dir1 dir2

同时创建两个目录

mkdir -p /tmp/dir1/dir2

创建一个目录树

mv dir1 dir2

移动/重命名一个目录

rm -f file1

删除 ‘file1’

rm -rf dir1

删除 ‘dir1’ 目录及其子目录内容

  1. SpringBoot约定大于配置的含义

约定优于配置(Convention over Configuration),又称按约定编程,是一种软件设计范式。

本质上是说,系统、类库或框架应该假定合理的默认值,而非要求提供不必要的配置。

约定优于配置简单来理解,就是遵循约定。

  1. 为什么在SpringBoot上导入dependency时不需要指定版本?

在Spring Boot入门程序中,项目pom.xml文件有两个核心依赖,分别是spring-boot-starter-parent和spring-boot-starter-web

  1. SpringBoot如何自动配置?
  1. Spring Boot应用的启动入口是@SpringBootApplication注解标注类中的main()方法
  2. 进入到@SpringBootApplication内,观察其做了哪些工作:

@Target({ElementType.TYPE}) //注解的适用范围,Type表示注解可以描述在类、接口、注解或枚举中

@Retention(RetentionPolicy.RUNTIME) //表示注解的生命周期,Runtime运行时

@Documented //表示注解可以记录在javadoc中

@Inherited  //表示可以被子类继承该注解

@SpringBootConfiguration     // 标明该类为配置类

@EnableAutoConfiguration     // 启动自动配置功能

@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),

@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

public @interface SpringBootApplication {

// 根据class来排除特定的类,使其不能加入spring容器,传入参数value类型是class类型。

@AliasFor(annotation = EnableAutoConfiguration.class)

Class<?>[] exclude() default {};

// 根据classname 来排除特定的类,使其不能加入spring容器,传入参数value类型是class的全类名字符串数组。

@AliasFor(annotation = EnableAutoConfiguration.class)

String[] excludeName() default {};

// 指定扫描包,参数是包名的字符串数组。

@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")

String[] scanBasePackages() default {};

// 扫描特定的包,参数类似是Class类型数组。

@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")

Class<?>[] scanBasePackageClasses() default {};

  1. }

从上述源码可以看出,@SpringBootApplication注解是一个组合注解,前面 4 个是注解的元数据信息, 我们主要看后面 3 个注解:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个核心注解,关于这三个核心注解作具体说明即可。

  1. Security

一个能够为基于spring的企业应用系统,提供声明式的安全访问控制解决方案的安全框架,

它提供了一组应用上下文配置的Bean,充分利用了springIOC,Dl和AOP功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

  1. SprinBoot整合Security的流程
  1. 用户登录时,前端将用户输入的用户名、密码信息传输到后台,后台用UsernamePasswordAuthenticationToken将其封装。
  2. 到程序负责验证这个类对象,调用Service根据username从数据库中取用户信息到实体类的实例中,比较密码,正确就登陆,同时吧包含着账号信息的对象放到SecurityContextHolder中去。
  3. 在用户访问一个资源时,先判断是否是受限资源,如果是的话还要判断当前是否未登录,没有的话就跳到登录界面。
  4. 如果用户已登录,并访问一个受限资源时,程序要根据URL去数据库中取出该资源所对应的所有可以访问的角色,然后拿着当前用户的所有角色经行对比,判断用户是否可以访问。
  1. NoSQL:非关系型数据库

特征:(1)不需要预定义模式

      (2)无共享架构

      (3)弹性可扩展

      (4)分区

      (5)异步复制

      (6)BASE

      (7)没有统一架构

55、Redis:key-value存储系统,高性能的key-value数据库。可以存储的value类型更多。

56、Docker:开源的应用容器引擎,基于GO语言。

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

优点:(1)快速,一致的交付应用程序。

      (2)响应式部署和扩展

      (3)在同一硬件上运行更多工作负载

57、springboot如何实现热部署

1.添加spring-boot-devtools热部署依赖启动器

2. IDEA工具热部署设置

58、项目中如何体现springIOC、AOP

59、OA工作流

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柚几哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值