1.连接查询
分为内连接和外连接查询
内连接:隐式链接和显式连接
外连接:左连接和右连接
左连接:select 字段列表 from 表1 left [OUTER] JOIN 表2 ON 条件;
2.聚合函数
表达式:select 聚合函数(字段) from 表名;
count: 统计一列的数量
max: 统计一列的最大值
min: 统计一列的最小值
avg: 统计一列的平均值
sum:统计一列的总和
3.SQL关键字
分组查询关键字:
Group by
select sex, count(*) from student3 GROUP BY sex;
分页查询关键字:
Limit offset,length
Offset:跳过几个
Length:取几个
select *from student3 LIMIT 2,6; (跳过前两个取六个)
去重关键字 :
distinct
select DISTINCT name from student3;
4.SQL Select 语句完整的执行顺序
select
from
where
group by
having
order by
limit
11.SQL 语言包括哪几部分?每部分都有哪些操作关键
数据定义(DDL)、数据查询(DQL)、数据操纵(DML)、数据控制(DCL)
数据定义: create alter drop
数据查询:select
数据操纵:insert update delete
数据控制:grant(授权) revoke(取消授权) rollback commit
面试06(4.11)
数据库【JDBC】
1.JDBC操作的步骤:
1.加载数据库驱动类
2.通过DriverManager创建连接对象Connection( url:地址 username:用户名
password:密码)
3.通过Connection创建Statement语句对象
4.使用executeUpdate执行SQL语句,返回影响的行数(增删改)/使用executeQuery执行SQL语句,返回的结果集(查)
5.关闭资源:先开后关,后开先关
2.在使用JDBC的时候,如何防止出现sql注入的问题:
使用PreparedStatement类,防止SQL注入攻击。
preparedStatement具有预编译语句功能。是Statement的子类。
3.使用连接池有什么好处:
在启动的时候就创建好了,可以重复使用连接对象。提高利用效率。
创建连接池的步骤:
1.加载mysql驱动和连接池jar包
2.通过类对象获取类路径下的属性文件
2.通过Properties类读取druid.properties属性值
3.通过DruidDataSourceFactory 静态方法:createDataSource(属性文件),创建数据源
4.从数据源中获取连接对象
4.你所了解的数据源技术有那些?使用数据源有什么好处?
Dbcp,c3p0等,用的最多还是c3p0,因为c3p0比dbcp更加稳定,安全;通过配置文件的形式来维护数据库信息,而不是通过硬编码。当连接的数据库信息发生改变时,不需要再更改程序代码就实现了数据库信息的更新。
面试题07(4.12)
1.CHAR 和 VARCHAR 的区别?
char :长度固定的字符串
varchar :长度不固定的字符串
Char是根据实际输入的字符长度储存,varchar是根据定义字符的长度储存
(如果知道要输入多少位字符串,char写入效率更高
如果不知道要输入多少位字符串,varchar写入效率更高)
2.LIKE 声明中的%和_是什么意思?
%:表示任意多个字符
_ : 表示一个字符
3.如何显示前 50 行?
selectfrom 表名 limit offset,length;
offset:跳过的数量
length: 取的数量
*4.数据库中的事务是什么?
1.事务(transaction)是作为一个单元的一组有序的数据库操作。
2.事务把所有的命令作为一个整体向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败。成功就提交。失败就回滚。
5.事务的四大特性(ACID):
原子性(Atomicity):要么同时成功,要么同时失败。
一致性(Consistency):事务前后数据的完整性必须保持一致。
隔离性(Isolation):多个并发事务之间数据要相互隔离,不能相互影响。
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
面试题08(4.13)
1.谈一谈你对Mybatis框架的理解(了解):
MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发.框架就是一个半成品软件,在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。
2.MyBatis编程步骤(了解)
- 创建SqlSessionFactory 工厂建造类
- 通过SqlSessionFactory创建SqlSession
- 通过SqlSession 创建代理对象
- 通过sqlsession执行数据库操作
- 调用session.commit()提交事务
- 调用session.close()关闭会话
3.maven的主要作用:
1.提供了一套标准化的项目结构和构建流程。
2.提供了一套依赖管理机制
4.maven的坐标有什么用?分别代表什么含义?
作用:使用坐标来定义项目或引入项目中需要的依赖
含义:groupId:组织名称 (可以对应多级)
artifactId:模块名称 (对应一级)
version:当前项目版本号 (对应一级)
5.maven的依赖范围有哪些?表示什么意思?
依赖范围默认:compile
面试题09(4.15)
1.在mybatis中,${} 和 #{} 的区别是什么?(必会)
{}:底层使用的preparedStatement,可以有效的防止SQL注入,设置预编译,提高效率
${}: 底层是使用Statement,有SQL注入的风险,如果是字符串,还需要自己加单引号
2.如何获取自动生成的(主)键值?
在inster 语句中添加
useGeneratedKeys : 自动生成主键 设置为true
keyProperty: 键的属性名
keyColum: 键的字段名
3.在mybatis中,resultType和ResultMap的区别是什么?(必会)
resultType:如果sql语句查询到字段名和实体类中的属性名相同就使用 resultType 属性指定封装类型
ResultMap: 如果sql语句查询到的字段名和实体类中的属性名不相同就需要 resultMap 来定义字段名和实体类属性名的映射关系
4.在Mybatis中你知道的动态SQL的标签有哪些?作用分别是什么?(必会)
标签: 进行判断 标签: 条件查询 去掉多余的where、and、or 标签:进行遍历 (批量删除的时候用) 标签:减少重复的代码 标签:修改数据,去掉多余的逗号。 标签:单条件查询 多条件当中选择一个。
面试题10(4.16)
1.谈一下你对mybatis缓存机制的理解?(了解) :
Mybatis有两级缓存,一级缓存是SqlSession级别的,默认开启,无法关闭;二级缓存是Mapper级别的,二级缓存默认是没有开启的,但是手动开启
- 一级缓存:基础PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session flush或close之后,Session中的所有Cache就将清空
- 二级缓存其存储作用域为Mapper(Namespace),使用二级缓存属性类需要实现Serializable序列化接口
- 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了C(增加)/U(更新)/D(删除)操作后,默认该作用域下所有select中的缓存将被clear.
需要在setting全局参数中配置开启二级缓存,如下conf.xml配置:
当我们的配置文件配置了cacheEnabled=true时,就会开启二级缓存,二级缓存是mapper级别的,如果你配置了二级缓存,那么查询数据的顺序应该为:二级缓存→一级缓存→数据库。
2.在 mapper 中如何传递多个参数?
1.用注解写出全部的参数用@Param起名字
2.封装实体类对象
3.使用Map集合
3.MyBatis 实现一对一有几种方式,怎么操作的?
表连接查询: association property resultMap
级联查询 : association property select column
4.MyBatis 实现一对多有几种方式,怎么操作的?
表连接查询: collection property resultMap
级联查询 : collection property select column
5.Mybatis 的一级、二级缓存
一级缓存:在同一个会话框中,默认开启,无法关闭,再一次调用是从本地缓存中读取不需要去本地仓库下载。
二级缓存:可以在不同的会话框中,默认是没有开启的,要手动开启。
二级缓存的步骤:
1.实体类要实现序列化(Serializable接口)
2.在核心配置文件中要开启二级缓存
3.在映射文件中开启二级缓存使用
面试题11(4.18)
1.html的作用:
编写网页
2.html有那些常用标签:
文本标签:
3.div和span的区别:
都是可以做容器
div: 块标签( 范围大)自带换行功能 (例如:网页布局)
span:内联标签 不换行 (小范围)
4.表格标签都有哪些,作用是什么?
5.表单的作用和常用表单元素?
作用:接收用户输入数据,并提交数据给服务器
面试题12(4.19)
1.javaScript的作用:
1.表单数据校验
2.页面元素标签动态的增删改查操作
2.javaScript的BOM对象有哪些?
3.javaScript的DOM对象如何获取?
4.javaScript有哪些常用的事件?
5..javaScript内置对象有哪些?
面试题13(4.21)
1.什么是HTTP协议?
客户端和服务器端之间数据传输的格式规范,称为超文本传输协议Hyper Text Transfer Protocol
是一个基于请求与响应模式、无状态的、应用层的协议,基于 TCP协议
HTML :超文本标记语言
2.Servlet的生命周期:
1.init(): 初始化的时候执行一次 (用户第一次访问)
2.service():每次请求都会执行
3.destroy():服务器关闭或重启的时候执行一次
loadOnStartup:在tomcat启动的时候就实例化这个Servlet对象
3.Servlet的访问地址有几种匹配方式:
1.精确匹配:访问地址与Servlet地址完全一样 @WebServlet(“/Demo4Servlet”)
2.目录匹配: @WebServlet(“/user/“)
3.扩展名匹配: @WebServlet(“.do”)
4.任意匹配: @WebServlet(“/*”)
4.Tomcat有哪几种部署的方式?分别如何部署?
2种方式
1.直接复制到webapp目录下或者采用压缩文件.war的方式
2.使用单独的xml配置文件(idea默认的方式) 文件名就是访问的地址
面试题14(4.22)
1.Get和Post的区别:
get:
- 没有请求体, 请求参数在请求行中,不安全。
- 数据传输大小有限制。
- 限制Form表单的数据集的值必须为ASCII字符。
post :
- 请求参数在请求体中 ,安全。
- 数据传输大小没有限制。
- 支持整个ISO10646字符集。
Get执行效率却比Post方法好,Get是form提交的默认方法。
2 HTTP中重定向和请求转发的区别?
重定向:
- 2次请求
- 资源不可以共享。
- 地址发生改变 。
浏览器跳转, 跳转到任意网址。
- 方法: response.sendRedirect(“other.jsp”);
转发:
- 方法: response.sendRedirect(“other.jsp”);
1次请求。
- 资源可以共享。
- 地址没有发生改变。
- 服务器跳转,只能跳转当前项目。
- 方法:request.getRequestDispatcher(“other.jsp”).forward(request, response);
3.请求中获取参数的三个方法是那些?
Map
String getParameter(String name):根据名称获取参数值(单个值)
String[] getParameterValues(String name):根据名称获取参数值(数组)
4.作用域是什么? 操作作用域的方法有哪些
作用域:
用于 Servlet 之间数据共享的服务器内存区域,作用域结构是一个 Map
方法:
Object getAttribute(“键”)
void setAttribute(“键”,Object数据)
removeAttribute(“键”)
面试题15(4.24)
1.Jsp和Servlet的区别?
相同点:
jsp经编译后就变成了servlet,jsp本质就是servlet,web容器将jsp的代码编译成jvm能够识别的java类。
不同点:
JSP侧重视图展现数据,Sevlet主要用于控制逻辑获取数据。
Servlet中没有内置对象 。
JSP中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到
2.Jsp中的forEach标签有什么作用?常用的属性有哪些?
遍历集合或者数组
items: 要遍历的集合或数组 注:参数值要指定为EL ${作用域变量名}
var: 保存每次循环读取的变量名
start:初始值
end:结束值
step:跳过几个元素
3.有哪四个作用域?作用范围分别是什么?
page: 页面域
request: 请求域 (一个用户的一次请求)
session: 会话域 (一个用户多次请求)
application: 上下文域(多个用户多个请求)
4.什么是MVC?分别表示什么意思?
MVC是一种分层开发的模式
M: model (模型) JavaBean
V: view (视图) Jsp、html
C: controller (控制器) Servlet
5.什么是三层架构,表示什么意思?
SSM 、SSH
表面层
业务层
数据访问层(持久层)
面试题16(4.26)
Cookie和Session的区别:
存储位置:
Cookie 存放在浏览器
Session 存放在服务器
安全性:
Cookie 不安全
Session 安全
数据大小:
Cookie 最大是4KB
Session 没有大小限制
存储时间:
Cookie 默认是浏览器关闭
设置时间:setMaxAge(int seconds)
Session 默认是30分钟
设置时间:
- session.setMaxInactiveInterval( )
- 通过web.xml配置
- session.invalidate() 创建会话立马失效
服务器性能:
Cookie不占服务器资源
Session站服务器资源
面试题17(4.26)
1. javaweb的三大组件及作用:
- Servlet: 处理用户的请求和响应
- Filter : 过滤用户请求和响应
- Listener: 监听域对象的创建与销毁
2. 过滤器的执行流程:
- 定义一个类实现Filter接口 ,并重写方法
- 把过滤任务代码编写在doFilter方法里面,并放行 [chain.doFilter(request,response)]
- 在类上定义@WebFilter注解 (配置Filter拦截路径)
3. 过滤器对象什么时候创建和什么时候销毁:
服务器启动的时候就创建
服务器关闭的时候就销毁
4.过滤器的应用场景:
全局乱码问题:
强制类型转换
2.获取浏览器的请求方式
3.判断是否为post请求,如果是解决乱码
4.设置响应的乱码
5.放行
权限过滤
1.强制类型转换
2.得到session对象
3.从session中获取user登陆成功标记
4.判断user是否为空,如果为空跳转到登陆页面
5.放行
5. 监听器的开发步骤:
- 定义一个类实现对应监听器的接口
- 在类上添加@WebListener注解
面试题18(4.27)
Ajax的介绍(必会):
概念介绍:异步交互 局部刷新
第一种实现方式:JavaScript原生Ajax实现
axios组件封装AJAX简化开发实现:
Ajax应用程序的优势
1. 通过异步模式,提升了用户体验
2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用
3. Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。
面试题19(4.29):
1. vue的是什么?
Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写。
基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上
2.什么是MVVM编程模式?
Model:普通的JS数据对象
View:前端展示页面
ViewModel:用于双向绑定数据与页面,也是Vue的实例
MVVM强调的是双向数据绑定,页面数据展示与模型数据改变是双向影响。
其核心就是ViewModel通过DOM监听实现。
3.3 vue的常用指令有哪些?
display 隐藏是:none 显示:block
3.4 elementUI是什么?
Element:是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库,用于快速构建网页。
3.5 elementUI 都提供了哪些页面组件?