文章目录
- 后端答辩可能会问到的问题
- 1.面向对象四大特性
- 2.你们的Sql语句是否用到了链表查询,用到了哪些关键字
- 3.你们项目用到了哪些JAVA框架,介绍一下他们。
- 4.说一下你对Ioc和Aop的理解
- 6.get请求和post请求的区别
- 7.@SpringBootApplication注解的含义
- 8.spring-boot-starter-parent的作用
- 9.spring-boot-starter-web的作用
- 10.== 和 equals 的区别是什么
- 11.final 和 finally 和 finalize 的区别
- 12.方法覆盖和重载的区别
- 13.完整的多表JOIN查询,SQL中关键字的执行顺序
- 14.讲一下Session的工作原理
- 15.Session和cookie有什么区别
- 16.说说preparedStatement和Statement的区别
- 17.请求转发和重定向的区别
- 18.RequestMapping 和 GetMapping有什么区别
- 19.数据库执行引擎innodb和myisam区别
- 20.MyBatis对象关联查询和集合关联查询怎么做
- 前端会被问到的问题
后端答辩可能会问到的问题
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)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有什么区别
- 存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。
- 安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修 改。
- 容量和个数限制:cookie 有容量限制,每个站点下的 cookie 也有 个数限制。
- 存储的多样性: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会根据实体类去封装数据,最后到达数据库