1、什么是Redis,Redis持久化机制
是一个key-value存储系统,非关系型分布式缓存数据库。
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的数据也自动被更新了。
29、积分模块用redis怎么实现
30、cap、aqs、cas安全思想
cap:
一致性:所有节点同意时间看到的是相同的数据
可用性:不管成功是否,确保每一个请求都能接受到响应
分区容错性:系统任意分区后,在网络故障时,仍能操作
aqs:
31、乐观锁实现原理
乐观锁可以由CAS机制+版本机制来实现。乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如何去做。
32、Threadlocal实现原理
在ThreadLocal类中定义了一个ThreadLocalMap,每一个Thread都有一个ThreadLocalMap类型的变量ThreadLocals,就使用threadLocas来存储每一个线程的变量副本,threadLocals内部有一个Entry数据,我们根据键值线程对象,来找到对应现成的变量副本。
33、怎么快速定位异常以及解决
34、redis雪崩、击穿、穿透的解决方案
(1) 雪崩:缓存中一大批数据到过期时间,从缓存中删除。但该批数据查询数据量巨大,查询全部走数据库,造成数据库压力过大。
解决方案:设置热点数据永远不过期,集群部署:热点数据均匀分布在不同缓存中。
(2)击穿:缓存中没有数据,但数据库中有该数据。一般这种情况指特定数据的缓存时间到期,但由于并发用户访问该数据特别多,因此去数据库去取数据,引起数据库访问压力过大。
解决方案:设置热点永远不过期,定时更新;对并发数据设置并法索,降低并发性。
(3)穿透:缓存和数据库都没有需要查询的数据,攻击者不断发送请求,是数据库压力过大。
解决方法:在数据库操作之前进行校验,对不合法请求直接返回。
对于经常被访问的,并且数据库没有的数据,酒吧这个key保存到redis中,设置value="null",设置过期时间极短,再出现查询这个key的请求时,直接返回null,就不需要查询数据库了。
35、mybatis中XML文件中的SQL语句是通过什么代理过去的?
36、mybatis中XML文件中有一个命名空间和id, id和命名空间可以重复么?
不同的XML映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复。
37、java能支持多继承么?
不能
38、为什么java是单继承?
单继承关系简单,易于管理程序,为了安全性
39、java的值传递和引用传递有什么区别?
值传递:再调用函数时,将实际参数复制一份传递到函数中,这样在函数中对参数进行修改,就不会影响到原来的实际参数。
引用传递:在调用函数时,将实际参数的地址直接传递到函数中,这样在函数中对参数进行修改,就会影响到实际参数。
40、假如ArrayList封装了一个学生类对象, 那么我要对这个学生类去重, 你要怎么做?
把ArrayList转化为一个临时的HashSet,再把这个临时的HashSet转化回ArrayList
9、写CRUD会有类似的判断数据重复的场景, 处理数据肯定会考虑到数据的重复, 怎么校验是否重复, 或者怎么去给他去重? 42、java中的finally和return的执行顺序是怎么样的?
return在finally前:在执行return前,先执行了finally
finally前面有return,在其内部也有return:内部被reutrn后就不在执行前面那个return
return在finally之后:先执行finally后,再执行该return;finally内含有return时,直接执行其return后结束;finally在return前,执行完finally后再执行return
43、线程池有了解过么?
线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后再需要执行新的任务时重用这些线程而不是新建一个线程。
44、线程池分为哪几种?
NewCachedThreadPool:可缓存线程池
NewFixedThreadPool:指定工作线程数量的线程池
NewSingleThreadExecutor:单线程化的执行程序
NewScheduleThreadPool:定长的线程池
NewSingleThreadSchedleExecutor:单线程执行程序
45、Redis是用来做什么样的场景?
热点数据缓存、计数器相关问题、排行榜相关问题、分布式锁、延时操作、分页模糊搜索、点赞好油等相互关系的存储、对列
46、实际开发中Redis用在哪个项目中? 使用的场景是什么样的?
热点数据缓存、计数器相关问题、排行榜相关问题、分布式锁、延时操作、分页模糊搜索、点赞好油等相互关系的存储、对列
47、MySQL中索引在什么情况下会失效?
如果条件中有or,即使其中有条件带索引也不会使用
对于多列索引,不时适用的第一部分,则不会使用索引
like查询以%开头
如果列类型是字符串一定要在条件中间数据使用引号引用起来,否则不使用索引
19、MySQL的索引有自己配过么? 48、为什么加索引?
在大量字段时添加索引,查询效率快
49、索引有的时候你加了, 但是执行的是并没有走索引, 那些情况下会失效?
50、SQL的优化方面做过么?
(1)查询时能不用就不用,尽量补全字段名
(2)表连接时,采用小表连接大表
(3)尽量不用order by
(4)因为where条件后的是按照从右到左执行的,所以把能过滤掉大部分字段的条件放在最后
(5)索引不是越多越好,尽量控制在5个以内
(6)查看慢查询日志,找出执行时间长的SQL进行优化
(7)多用explain和profile分析查询语句
(8)大部分情况连接效率大于子查询
51、crud怎么表现具体实现从java方面讲一下
52、SpringBoot的特点
自动配置、简化配置、应用监控、无代码初始化和XML文件、开箱即用
53、springboot启动时需要依赖哪些包
spring-boot-starter
sprng-boot-starter-web
54、springboot使用什么注入 注解还是配置类 具体代码大概说下
@configuration、@Bean
55、springboot配置文件几种
properties、yml、xml
56、springMVC的具体表现
MVC把用户界面独立的到一些文件中,把一些用户交互的程序逻辑独立到一些文件中。在view和controller中传递数据使用一些专门封装数据的实体对象。
57、ssm的工作流程
服务器启动,创建springmvc的前端控制器DispatcherServlet,创建Spring容器对象,加载Spring-servlet.xml、applicationContext-mybatis.xml配置文件,如果mybatis的配置卸载了applicationContext.xml中,mybatis的配置信心也会同时加载。客户端浏览器发送请求,提交给DispatcherServlet,他会委托应用系统的其他模块负责对请求进行真正的处理工作。
58、你使用过vue吗 59、mvvm思想具体表现 在什么场景下使用
本质上就是MVC的改进版。MVVM就是将其中的view的状态和行为抽象化3,让我们将视图UI和业务逻辑分开。当然这些事viewModel已经帮我们做了,他可以取出Model的数据同时帮忙处理View中由于需要展示内容而设计的业务逻辑。
使用场景:处理数据交互的时候,当输入数据,页面实时的处理。
60、A表目前有100万数据, B表10条数据,根据关联键匹配,A表中的数据与B表中的数据管关联关系一一对应,A表中能关联上48万数据,B表中能关联上的数据为5条。那么问: A inner join B、 A left join B、 A right join B、 A full join B 的连接方式,最终查询出的数据量分别是多少
61、数据库多表联查代码怎么写
笛卡尔积:SELECT 字段名 FROM 表名,表名
内连接 inner join:SELECt 别名.字段名FROM 表名,别名 INNER JOIN 表名,别名ON 别名.字段名=别名.字段名WHERe 别名.字段名='条件'
左(外)连接 left join:SELECt 别名.字段名FROM 表名,别名 LEFT JOIN 表名,别名ON 别名.字段名=别名.字段名 WHERe 别名.字段名='条件'
右(外)连接 right join:SELECt 别名.字段名FROM 表名,别名 RIGHT JOIN 表名,别名 ON 别名.字段名=别名.字段名 WHERe 别名.字段名='条件'
62、数据库查询前五条怎么写
select *From 表名 Limit 0,5
63、group by是干啥的
分组
64、事务具体用在哪一层
Controller : 控制层
Service : 服务层、控制事务 DAO层 :数据访问层
65、spring中创建bean有哪些方法
方式一:XML 方式二:@Component 方式三:@Bean
@Configuration用来表示这是一个SpringBoot配置类,会扫描其中的@Bean注解 @Bean是加在方法上的,作用是将这个方法返回的对象添加到IOC容器中 @Bean(name="")可以自定义beanName 同一种类型可以有多个,但必须指定不同的beanName 方式四:@import @import(TestBean.class) 方式五:importSelector 1.实现importSelector 2.实现importBeanDefintionRegistrar 1)可以自定义beanDefinition 3.自定义@EnableXXX 方式六:BeanFactoryAware 可以创建自己多个需要的bean 例如维护多个不同的redisTemplate对象



