目录
12、SpringBoot和SpringCloud之间的关系
19、如何保护当前线程变量不被其他线程修改而且每个线程变量都是独立的
22、sql语句查询条件是in in后的条件建了索引 真正执行的时候 会去执行索引吗
35、mybatis中XML文件中的SQL语句是通过什么代理过去的?
36、mybatis中XML文件中有一个命名空间和id, id和命名空间可以重复么?
40、假如ArrayList封装了一个学生类对象, 那么我要对这个学生类去重, 你要怎么做?
42、java中的finally和return的执行顺序是怎么样的?
46、实际开发中Redis用在哪个项目中? 使用的场景是什么样的?
54、springboot使用什么注入 注解还是配置类 具体代码大概说下
1、什么是Redis,Redis持久化机制
是一个key-value存储系统,非关系型分布式缓存数据库。
持久化机制:为了能重用Redis数据,防止系统故障,需要将Redis中数据写入到磁盘空间,及持久化。
Redis提供了两种持久化机制:
RDB(快照):在不同时间点,将redis存储的数据生成快照并存储到磁盘上。
AOF(之追加文件):通过日志将redis执行过的所有指令记录下来。Redis重启根据日志文件的内容将写指令从前到后执行一次完成数据恢复。
AOF与RDB优缺点比较:
AOF占用的文件体积比RDB大,一般来说利用AOF备份对系统的消耗比RDB低。对于备份时出现的系统故障,RDB可能会全部丢失,但AOF只会损失一部分。
2、Redis的使用场景
String:某一IP地址在一个时间段访问很频繁,对此进行封锁。
Hash:存储用户信息。
List:实行最新消息的排行。
set:微博中两个人的共同好友。
Zset:电商上面的综合排名,按自己需求进行价格排名。
3、Redis有哪些数据类型
String、Hash、List、Set、Zset
4、mysql函数
Round:四舍五入
Concat:拼接
Length:返回字符串的长度
Replace:把字符串某个字符换成某个字符
5、数据库的执行计划
执行计划是SQL语句经过查询分析器后得到的抽象语法树和相关表的统计信息做出一个查询方案,这个方案是有查询优化期自动分析产生的。通过explain知道MySQL是如何执行SQL查询语句的,分析seslect语句的性能瓶颈,从而改进查询。
6、如何优化mysql
(1)尽量避免子查询
(2)用IN来替换OR
(3)避免使用SELECT*,尽量补全字段名
(4)从SQL优化、索引优化、优化慢SQL
(5)数据表结构设计;横纵分表分库
(6)通过修改数据库系统配置
7、list和map的区别
list:有序,可以重复
map:以key-value的形式存取数据
8、IOC和DI的区别
IOC:控制反转,将对象的依赖,对象的创建交给Spring容器来管理
DI: 依赖注入,容器通过调用构造区或者set方法来建立对象之间的依赖关系
9、SpringBoot自动配置的原理
springBoot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾类命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以.Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而properties类时通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。
10、SpringBoot核心配置文件有哪几个
application和bootstrap配置文件
application:SpringBoot自动化配置
bootstrap:使用Spring Cloud Config注册中心时,需要早bootstrap配置文件中添加链接到配置中心的配置属性来加载外部配置中心的配置信息。
格式:.properties和.yml
11、SpringBoot有哪些应用方法
打包用命令或者放到容器中运行
用Maven/Gradle插件运行
直接执行main方法运行
12、SpringBoot和SpringCloud之间的关系
SpringCloud是关注于全局的微服务协治理框架,他将SpringBoot开发的一个个单体微服务整合并管理起来。为各个微服务之间提供配置管理,服务发现,断路器,路由,微代理,事件总线,决策竞选,分布式会话等集成服务。SpringBoot使用了默认大于配置的理念,很多集成方案已经选择好了,能不配置就不配置,SpringCloud很大一部分是基于SpringBoot来实现的。
13、什么是Spring 的AOP,AOP的工作原理是什么
AOP:面向切面编程
工作原理:Spring AOP是使用动态代理在运行期间植入增强的功能代码。Spring的一个关键组件就是AOP,其中最重要的是声明性事务管理,这个服务建立在Spring的抽象事物管理上。允许用户自定义切面,用AOP来完善OOP的使用,可以把Spring AOP看作是对Spring的一种增强。
14、#跟$的区别
#:封装了preStatement,对数据自动加上双引号,很大程度上能防止SQL注入
$:封装的是Statement,不能防止SQL注入
15、AIO BIO NIO的区别
BIO接口设计会直接导致当前线程阻塞,NIO的设计不会触发当前线程的阻塞。AIO为I/O接口提供了异步能力,也就是将I/O的响应程序放到一个独立的时间线上去执行。但是通常AIO的提供者还会提供异步编程模型,就是实现一种异步计算封装的数据结构,并且提供将以不计算同步主线的能力。
16、RabbitMQ工作模式
简单模式、工作模式、发布订阅模式、路由模式、主题模式、RPC模式
17、RabbitMQ如何保证消息稳定性
(1)消息持久化
EXchange设置持久化
Queue 设置持久化
Message持久化发送
(2)ACK确认机制
(3)设置集群镜像模式
(4)消息补偿机制
18、hashmap底层原理
HashMap在底层将key-value当成一个整体进行处理,这个整体就是一个Entry对象。HashMap底层采用一个Entry[]数组来保存所有的key-value对,当需要存储一个Entry对象时,会根据hash算法来决定其在数组中的存储位置,再根据equals方法决定其在该数据位置上的链表中的存储位置,当需要取出一个Entry时,也会根据hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Entry。底层结构:数组+链表、数组+红黑树,当链表的长度大于8时会转成红黑树,小于6时会恢复成链表。
19、如何保护当前线程变量不被其他线程修改而且每个线程变量都是独立的
加同步锁
20、遇到印象很深的问题怎么解决的
21、数据模型设计
(1)确保所有表都有主键
(2)避免存储冗余数据
(3)消除重复数据组
(4)每列只存储一个属性
(5)理解为什么存储计算列通常有害无益
(6)定义外键以确保引用完整性
(7)确保表间关系的合理性
(8)当第三范式不够时,采用更多范式
(9)非规范化数据仓库
22、sql语句查询条件是in in后的条件建了索引 真正执行的时候 会去执行索引吗
会。
但是查询值的类型是int,列的类型是vachar,会导致索引失效
23、对ioc的理解
ioc控制反转,将对象的创建、对象的依赖交给spring容器管理
24、TCP/IP位于网络传输哪一层
TCP在网络层
IP在传输层
25、TCP/IP网络通信的原理
在 网络通信过程中,将发出数据的主机称为源主机,接收数据的主机称为目的主机。当源主机发出数据时,数据在源主机中从上层向下层传送。源主机中的应用进程先将数据交给应用层,应用层上加上必要的控制信息就成了报文流,向下传给传输层。传输层将收到的数据单元加上本层的控制信息,形成报文段、数据报,再交给网际层。网际层加上本层的控制信息,形成IP数据报,传给网络接口层。网络接口层将网际层交下来的IP数据报组装成帧,并以比特流的形式传给网络硬件(即物理层),数据就离开源主机。
26、单点登录使用的协议
CAS、OAuth2、Openid Connect、SAML2
27、前端请求到后端调用实现链路
28、数据双向绑定实现模型、原理
模型:MVVM
原理:Vue数据双向绑定原理是通过数据劫持结合发布者-订阅者模式的方式来实现的,首先是对数据进行监听,然后党建听的属性发生变化是则告诉订阅者是否要更新视图MVVM模式就是Model-View-View-Model模式。它实现了View的变动,自动反映在ViewModel,反之亦然。对于双向绑定的理解,就是用户更新了view,Model的数据也自动被更新了。