超时空大决战
1.spring springboot springcloud的区别
spring框架为开发java应用程序提供基础架构支持,如:springJDBC,springMVC,springAOP
springboot:消除了设置spring应用程序所需的xml配置,快速开发框架,通过maven依赖的继承方式,内置http服务器
springcloud:是微服务框架的有序集合,springcloud依赖springboot框架实现微服务开发,rpc远程调用技术,springboot的web组件默认集成了springmvc,可以实现http+json的轻量级传输
2.springboot实现了什么减少配置
3.springboot中有几种事务
4.索引的类型,非主键索引细分
主键索引:数据库主键列使用的就是主键索引,一张表只有一个主键,且主键不能为null,部重复,在innodb表中,当没有显示指定表的主键时,innodb会自动检测表中是否有唯一索引的字段,有则设置默认主键,否则会自动创建自增主键
二级索引(辅助索引),二级索引有唯一索引,普通索引,前缀索引
唯一索引:允许数据为null,一张表允许多个唯一索引
普通索引:允许数据重复和null
前缀索引:适用于字符串的索引
全文索引:检索大文本数据中的关键字信息
聚集索引与非聚集索引
聚集索引即索引结构与数据存放一起的索引,主键索引属于聚集索引,优点:查询速度快,缺点:依赖有序数据,更新代价大
非聚集索引:索引结构和数据分开存放的索引,二级索引 优点:更新代价比聚集索引要小,缺点:依赖有序数据,可能会二次查询(回表)
覆盖索引,若需要查询的字段正好是索引的字段,就直接根据索引查到数据,无需回表查询
5.索引的数据结构
6.运行时数据区分为那几块
程序计数器,虚拟机栈,本地方法栈,堆,方法区
7.方法私有变量存在哪
8.年轻代垃圾回收算法
9.对java中数据流的理解,作用分类,适用场合
10.web开发基础,servlet,jsp
servlet的生命周期:web容器加载servlet,声明周期开始,调用servlet的init()方法进行servlet的初始化,通过调用service方法()实现根据请求的不同调用do方法,结束服务,web调用servlet的destory()方法
11.web发送请求后,请求和整个响应流程
域名解析-与服务器建立连接(3次握手)-发起http请求-服务器响应http请求,浏览器获得html代码-浏览器解析html代码,并请求html代码中的资源(js,css,图片)-浏览器对页面进行渲染
12.常用请求方式,get和post区别
get、post是http协议发送请求的两种方法,都是tcp连接,但由于http协议的规定和浏览器的限定,在应用中产生区别,
get产生一个数据包,post产生两个tcp数据包,
get请求只能进行url编码,而post支持多种编码
get请求参数会完整保留在浏览器历史记录里,而post中参数不会保留
get在url传输的参数是由长度限制,而post没有
get只接受ascii字符,post没有限制
get将参数暴露在url中,更不安全
get通过url传递,post放在request body中
get回退是浏览器会从之前缓存拿结果,post每次调用创建新的资源
13.请求那几部分组成,响应由那几部分组成
http请求报文由请求行,请求头,空行,请求数据组成
请求行:请求方法(get,post,head,put),url,http协议版本
请求头:产生请求的浏览器类型,客户端可识别的内容类型列表,主机地址
空行:发送回车符和换行符,通知服务器下不再有请求头
请求数据:用户提交的查询信息,在post方法中数据以keyvalue形式发送请求
http响应由响应消息行,响应消息头,响应正文
响应消息行:包含协议、版本,响应状态码,对响应状态码的描述
响应消息头:服务器与客户端通信的暗码,告诉客户端执行某些操作
响应消息正文
14.maven的理解
maven是java的自动化构建工具,1.约定的目录结构,2.pom,构建过程一切设置都在这个文件中进行配置,3,坐标(groupid,artfactid,version)确定一个maven工程4.仓库:本地仓库,远程仓库,5依赖,maven解析依赖信息从本地仓库查找被依赖的jar包,6.声明周期:清理,编译,测试,打包,安装,部署,生成项目报告,发布站点,7.继承,聚合
15.cookie和session
存储位置,cookie数据信息存放在客户端浏览器上,session存放在服务器上
存储容量,单个cookie保存<=4kb,站点最多保存20个cookie,session没有上限,但保证服务器端性能,设置session删除机制
存储方法:cookie只保存ascii字符串,通过编码方式存储unicode字符或二进制数据,session能存储任何类型数据
隐私:cookie对服务端可见,可以进行cookie欺骗,不安全,session在服务器上
有效期:cookie设置属性,达到长期有效,session不能长期有效
服务器压力,每个用户都会产生一个session,若并发访问十分多,会耗费大量内存
跨域支持,cookie支持跨域名访问,session不支持
16.转发和重定向
17.json数据格式和数据传递
json有两种格式:①对象格式:{"key1":obj,"key2":obj,"key3":obj...}、②数组/集合格式:[obj,obj,obj...]。
在服务器端对象的转换过程可以使用官方提供的API,JSONObject和JSONArray分别为对象和数组的转换类型
如果使用JS原生的方法进行转换的话,可以使用eval()方法,但需要在JSON的前后连接上左右圆括号
18.程序的同步和异步
同步:
主机A发送数据的时候,主机B必须等待接收,处于阻塞状态。
异步:
主机A发送数据的时候,主机B无须等待接收,主机B要获得数据就从缓存里取,就好比别人给你发邮件一样。
19.ajax
20.动态代理
21.红黑树为什么查找快
22.object有哪些方法
23.数据库处理字符串的方法
concat(str1,str2)连接字符串函数
convert(str,signed)将str转化为数字类型
convert(datatype,getdate(),1)将数据类型datetime转为字符串
substring_index(str,分隔符,n)n代表第几个分隔符,n为正截取左边,n为负,截取右
substring(str,起始下标,长度)截取字符串
24.linux常用的命令
25.mapper文件怎么对应到dao层
26.mybatis标签类型,怎么使用,结果集怎么用,$和#的用法
resulttype返回类型
1.返回一般数据类型,像string,hashmap
2.返回javabean类型
3.返回list类型 注意这里的 resultType 返回值类型是集合内存储数据的类型,不是 'list'
4.返回map类型,reslutype填map
Mybatis 的Mapper.xml语句中parameterType向SQL语句传参有两种方式:#{}和${}
我们经常使用的是#{},一般解说是因为这种方式可以防止SQL注入,简单的说#{}这种方式SQL语句是经过预编译的,
它是把#{}中间的参数转义成字符串,举个例子:
select * from student where student_name = #{name}
预编译后,会动态解析成一个参数标记符?:
select * from student where student_name = ?
而使用${}在动态解析时候,会传入参数字符串
select * from student where student_name = 'lyrics'
总结:
#{} 这种取值是编译好SQL语句再取值
${} 这种是取值以后再去编译SQL语句
#{}方式能够很大程度防止sql注入。
$方式无法防止Sql注入。
$方式一般用于传入数据库对象,例如传入表名.
一般能用#的就别用$.
27.select from where groupby orderby执行顺序
(7) SELECT
(8) DISTINCT <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) HAVING <having_condition>
(9) ORDER BY <order_by_condition>
(10) LIMIT <limit_number>
首先执行from,from对两个表进行笛卡尔积,得到虚拟表
执行on进行条件过滤
添加外部和,只有当outer join才会发生,left outer join把左表作为保留吧,左表数据全部查询,若右表无对应数据,用null填充
执行where执行条件过滤
执行groupby对where的字句进行分组操作
执行having
执行select
执行distinct
执行orderby
执行limit分页
https://blog.csdn.net/weixin_43907800/article/details/105374147
28.线程的interrupt方法
中断线程,会设置该线程中断状态位,即设置为true,线程会不时检查这个中断标志位,以判断线程是否应该被中断
判断线程释放被中断,使用thread.currentThread().isinterrupted()方法(不会立刻清除中断标示位,不会中断标设置为false),而不要使用thread.interrupt(会将中断标示位清除,重新设置false)
如何中断线程
若线程处于阻塞状态,则在线程组检查中断表示如果发现中断表示为true,则会在调用出抛出interruptedException异常,抛出异常后立即将线程中断位标识清除,重新设置为false,抛出异常是为了线程从阻塞状态醒过来,并在结束线程前让程序员有足够的时间来处理中断请求
29.mysql中分页怎么做
a.limit关键字
select * from table limit m,n
m代表记录开始的index,从0开始,n指从m+1条开始,取n条
b.主键索引或唯一索引加limit实现
假设每页10条,SELECT * FROM 表名称 WHERE id_pk > (pageNum*10) LIMIT M
c.基于索引再排序
SELECT * FROM 表名称 WHERE id_pk > (pageNum*10) ORDER BY id_pk ASC LIMIT M
30.aop和ioc
32.头插法和尾插法
33.脏读幻读
34.try和catch中有return时,finally里面的语句会被执行吗
如果程序是从try代码块或者catch代码块中返回时,finally中的代码总会执行。而且finally语句在return语句执行之后return返回之前执行的。当finally有返回值时,会直接返回。不会再去返回try或者catch中的返回值。