后端实训总结

本文列举了后端开发在答辩中可能遇到的问题,涉及面向对象特性、SQL查询、Java框架如SpringBoot和MyBatis,以及IoC和AOP的概念。同时,文章也提到了前端的MVVM模式、Vue.js的使用和Vue组件,前端路由、Webpack和ElementUI组件。内容涵盖了请求方法、数据绑定、会话管理、数据库引擎选择和前后端交互技术。

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

文章目录

后端答辩可能会问到的问题

1.面向对象四大特性

抽象、封装、继承、多态

2.你们的Sql语句是否用到了链表查询,用到了哪些关键字

用到了,from–on–join–where- select

3.你们项目用到了哪些JAVA框架,介绍一下他们。

SpringBoot,
用来简化新Spring应用的初始搭建以及开发过程
两个非常重要的策略:开箱即用和约定优于配置

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。

4.说一下你对Ioc和Aop的理解

IOC ,控制反转是一种设计思想,而不是一种具体的技术实现,控制反转指的是将对象的控制权转移给 Spring 框架进行管理,由 Spring 帮我们创建对象,管理对象之间的依赖关系,以前创建对象的主动权和时机都是由自己把控的,现在由 IOC 容器来做,在很大程度上简化了应用的开发,IOC 的最常见以及最合理的实现方式叫做[依赖注入

AOP[面向切面编程]基于IoC,简单地说,就是将与业务无关,却为业务模块所共同调用的 逻辑或责任封装起来,比如日志记录,便于减少系统的重复代码,可以降低模块间的耦合度

6.get请求和post请求的区别

GET请求参数是通过URL进行传递的,POST请求的参数包含在请求体当中。

GET请求在url中传递的参数是有长度限制的(在HTTP协议中并没有对URL的长度进行限制,限制是特定的浏览器以及服务器对他的限制,不同浏览器限制的长度不同。),POST对长度没有限制。

get请求一般用来请求获取数据, post请求一般作为发送数据到后台,传递数据,创建数据

get请求可以被缓存,会保留在浏览器的历史记录中, post请求不会被缓存,也不好保留在浏览器的历史记录中

7.@SpringBootApplication注解的含义

SpringBootApplication是一个组合注解,包含@SpringBootConfiguration:用于定义一个配置类;@EnableAutoConfiguration:Spring Boot会自动根据你jar包的依赖来自动配置项目;@ComponentScan: 告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。

8.spring-boot-starter-parent的作用

统一定义配置:定义编码、java版本等;统一依赖及版本

9.spring-boot-starter-web的作用

spring-boot-starter-web 为我们提供了嵌入的 Servlet 容器以及 SpringMVC 的依赖,并为 Spring MVC 提供了大量自动配置,可以适用于大多数 Web 开发场景。

10.== 和 equals 的区别是什么

一、对象类型不同

1、equals():是超类Object中的方法。

2、==:是操作符。

二、比较的对象不同

1、equals():用来检测两个对象内容是否相等,

2、==:用于比较引用和比较基本数据类型时具有不同的功能,具体如下:

(1)、基础数据类型:比较的是他们的值是否相等,比如两个int类型的变量,比较的是变量的值是否一样。

(2)、引用数据类型:比较的是引用的地址是否相同

三、运行速度不同

1、equals():没有==运行速度快。

2、:运行速度比equals()快,因为只是比较引用。

11.final 和 finally 和 finalize 的区别

1.性质不同

(1)final为关键字;

(2)finalize()为方法;

(3)finally为为区块标志,用于try语句中;

  1. 作用

(1)final为用于标识常量的关键字,final标识的关键字存储在常量池中

(2)finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象 进行垃圾回收;用户自定义时,用于释放对象占用的资源(比如进行 I/0操作);

(3)finally{}用于标识代码块,与try{ }进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行

12.方法覆盖和重载的区别

在同一个类中方法成员的名称相同,但参数的类型和个数不同,这称为重载。
在存在继承关系的两个话,子类与父类的方法成员名称相同、参数的类型和个数相同的话, 子类的
方法覆盖父类的方法,这称为覆盖。

1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系
2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系
3、覆盖要求参数列表相同;重载要求参数列表不同
4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的

13.完整的多表JOIN查询,SQL中关键字的执行顺序

from–on–join–where–group by–having-- select–distinct–order by

14.讲一下Session的工作原理

session的工作原理是客户端登录完成之后,服务器会创建对应的session,session创建完之后,会把session的id发送给客户端,客户端再存储到浏览器 中。这样客户端每次访问服务器时,都会带着sessionid,服务器拿到sessionid之后,在内存找到与之对应的session这样就可以正常工作了。

15.Session和cookie有什么区别

  1. 存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。
  2. 安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修 改。
  3. 容量和个数限制:cookie 有容量限制,每个站点下的 cookie 也有 个数限制。
  4. 存储的多样性:session 可以存储在 Redis 中、数据库中、应用程 序中;而 cookie 只能存储在浏览器中。

16.说说preparedStatement和Statement的区别

1、PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高
2、使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3、statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement预编译得, preparedstatement支持批处理 。
4、执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象。通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。
5、 PreparedStatement 可以规避 Statement弊端:①拼串 ②sql注入问题
6、PreparedStatement 可以实现操作Blob类型、Clob类型的数据

17.请求转发和重定向的区别

springboot默认,forward(转发):

是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程实在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址.

redirect(重定向):

是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

转发是服务器行为,重定向是客户端行为。

1、请求转发是服务器行为、重定向是客户端浏览器行为
2、请求转发是request对象调用方法、重定向是response对象调用方法
3、请求转发只有一次请求所以可以实现request域对象中的数据共享,而重定向是多次请求、多次响应
4、请求转发的效率要高于重定向
5、请求转发url地址栏不变,而重定向会发生变化
6、既然请求转发是服务器内部的行为,所以只能访问服务器内部资源!而重定向既然是浏览器行为,地址栏会变,所以可以访问服务器外部资源!

18.RequestMapping 和 GetMapping有什么区别

1、目标范围不同

@RequestMapping 能注解在类(ElementType.Type)和方法(ElementType.Method)中
@GetMapping 只能注解方法(ElementType.Method)

2、

@RequestMapping可以指定GET、POST请求方式

@GetMapping等价于@RequestMapping的GET请求方式

19.数据库执行引擎innodb和myisam区别

1、InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。

2、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用

3、InnoDB支持外键,MyISAM不支持

4、MyISAM是默认引擎,InnoDB需要指定

5、InnoDB不支持FULLTEXT类型的索引

6、InnoDB中不保存表的行数,如select count() from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含where条件时MyISAM也需要扫描整个表

7、对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引

8、清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表

9、InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like ‘%lee%’

20.MyBatis对象关联查询和集合关联查询怎么做

对象关联查询:在A类中添加一个类属性

集合关联查询:在A类中添加一个B类的集合属性

resultMap:设置自定义映射
association:设置多对一的映射关系 javaType property
collection:设置一对多的映射关系 ofType property

前端会被问到的问题

1.什么是前端的MVVM模式

前端MVVM是一种软件架构设计模式,其本质上就是MVC的改进版,就是将其中的View的状态和行为抽象化,让开发者将视图UI和业务逻辑分开,该模式的优点有低耦合、可重用性、独立开发和可测试。
模型
模型是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心)。

视图
就像在MVC和MVP模式中一样,视图是用户在屏幕上看到的结构、布局和外观(UI)。

视图模型
视图模型是暴露公共属性和命令的视图的抽象。MVVM没有MVC模式的控制器,也没有MVP模式的presenter,有的是一个绑定器。在视图模型中,绑定器在视图和数据绑定器之间进行通信。

绑定器
声明性数据和命令绑定隐含在MVVM模式中。在Microsoft解决方案堆中,绑定器是一种名为XAML的标记语言。绑定器使开发人员免于被迫编写样板式逻辑来同步视图模型和视图。在微软的堆之外实现时,声明性数据绑定技术的出现是实现该模式的一个关键因素。

2.你们前端用了哪些技术来构建项目

vue+elementui,ajax请求

3.介绍一下VUE以及他的优点

1、vue两大特点:响应式编程、组件化。
2、vue的优势:轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快。

4.说几个Vue的常用指令以及他们的作用

1、v-model 多用于表单元素实现双向数据绑定
2、v-bind 动态绑定
3、v-for 动态渲染
4、v-show 显示内容
5、v-if 显示与隐藏
6、v-on:click 给标签绑定函数
7、v-text和v-html、{{}} 解析文本

5.Vue的组件是什么,他有什么作用,你们项目用到了Vue的组件了吗?

组件是Vue中的一个重要概念,是一个可以重复使用的Vue实例,它拥有独一无二的组件名称,它可以扩展HTML元素,以组件名称的方式作为自定义的HTML标签。

6.组件有哪些分类他们的区别是什

一、分类:
1.按组件注册方式分类:可以分为全局组件和局部组件
2.按组件有无自己的状态分类:可以分为函数式(无状态)组件和普通(有状态)组件
3.按组件是否动态分类:可以分为动态组件和普通(非动态)组件
4.按组件是否异步分类:可以分为异步组件和普通(非异步)组件
5.按组件是否循环引用分类:可以分为递归组件和普通(非递归)组件

7.什么是路由,路由的作用是什么

所谓“路由”,是指把数据从一个地方传送到另一个地方的行为和动作,而路由器,正是执行这种行为动作的机器,它的英文名称为Router,是一种连接多个网络或网段的网络设备,它能将不同网络或网段之间的数据信息进行“翻译”,以使它们能够相互“读懂”对方的数据,从而构成一个更大的网络。 第三,网络管理,路由器提供包括配置管理、性能管理、容错管理和流量控制等功能。

8.webpack的作用

Webpack是一个前端构建工具,可以将所有资源(包括Javascript,图像,字体和CSS等)打包后置于依赖关系中,使你可以按照需求引用依赖来使用资源。

可以扩展为支持许多不同的资产,例如:images, fonts 和 stylesheets。. webpack 关心性能和加载时间;它始终在改进或添加新功能,例如:异步地加载 chunk 和预取,以便为你的项目和用户提供最佳体验。

9.讲一下你用过ElementUI的哪些组件

Container 布局容
Dropdown 下拉菜单
NavMenu 导航菜单
Table 表格
Form 表单

Select 选择器

<template>
  <el-select v-model="value" placeholder="请选择">
    <el-option
      v-for="item in cities"
      :key="item.value"
      :label="item.label"
      :value="item.value">
      <span style="float: left">{{ item.label }}</span>
      <span style="float: right; color: #8492a6; font-size: 13px">{{ item.value }}</span>
    </el-option>
  </el-select>
</template>

Cascader 级联选择器

<div class="block">
  <span class="demonstration">hover 触发子菜单</span>
  <el-cascader
    v-model="value"
    :options="options"
    :props="{ expandTrigger: 'hover' }"
    @change="handleChange"></el-cascader>
</div>

Rate 评分

10.你们这个前后端分离项目是怎么部署的

1、先将前端打包成静态文件:npm run dev,将前端运行到端口8080,并设置后端端口8081
2、在后端框架拦截器中将之前拷贝的所有文件都放行,设置跨域,运行后端端口在8081

11.let和var的区别

1、作用域不同:
var是函数作用域,let是块作用域。
在函数中声明了var,整个函数内都是有效的,比如说在for循环内定义的一个var变量,实际上其在for循环以外也是可以访问的
而let由于是块作用域,所以如果在块作用域内定义的变量,比如说在for循环内,在其外面是不可被访问的,所以for循环推荐用let
2、let不能在定义之前访问该变量,但是var可以。
let必须先声明,再使用。而var先使用后声明也行,只不过直接使用但没有定义的时候,其值是undefined。var有一个变量提升的过程,当整个函数作用域被创建的时候,实际上var定义的变量都会被创建,并且如果此时没有初始化的话,则默认为初始化一个undefined
3、let不能被重新定义,但是var是可以的

12.为什么说Vue是一个渐进式的javascript框架,渐进式是什么意思

原因:VUE允许你将一个网页分割成可复用的组件,每个组件都包含属于自己的HTML、CSS、JAVASCRIPT以用来渲染网页中相应的地方。对于VUE的使用可大可小,它都会有相应的方式来整合到你的项目中。所以说它是一个渐进式的框架。

“vue“渐进式”:是指先使用vue核心库,在vue核心库的基础上,根据自己需要再去逐渐增加功能。

13.你们使用了什么技术去和后端接口进行交互的,具体使用思路是怎样

前端利用ajax去封装请求,以 json 的格式传递数据,后端利用Requestbody ,restController等注解,springboot会根据实体类去封装数据,最后到达数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值