中科软面试题

时间:2024-04-12 20:12:57

1、用户注册登录这一块用了哪些技术?数据库主要涉及那些表?

用了BCrypt加密算法,jwt生成token,网关实现全局过滤器校验token,还用了拦截器,获取在网关是指到请求头的userid存到threadlocal里面,涉及到的表有用户信息表。

2、token过期时间?token过期了怎么办?

token过期时间设置的是30分钟,过期了的话,会返回401错误信息,让当前浏览页强行跳转到登录页面,让用户手动更新token

3、数据库的三大范式

1.属性不可再分,及每一个列不可再分
2.表中不存在部分依赖,非主键列要完全依赖主键
3.不存在传递依赖

4、索引的类型有哪些?常用的是哪些?

主键索引、唯一索引、普通索引、联合索引、聚集索引、非聚集索引、hash索引、树索引

5、如何创建索引?

1.自动创建,通过约束,系统创建
2.手动创建,create index
3.使用alter语句修改索引

6、索引失效场景

1.违反最左前缀法则
2.范围查询右边的列不能使用索引
3.不要在索引列上进行运算操作,索引将失效
4.字符串不加单引号,造成索引失效(类型转换)
5.以%开头的模糊查询

7、说一下对Spring的了解

Spring是一个开源框架,为简化企业级应用开发而生。Spring可以简化开发,进行框架整合,可以进行模块化开发,实现各层之间的解耦合关系。Spring的核心是IOC、DI、AOP

8、IOC、DI和AOP是什么?

IOC是控制反转,将主动new对象,转换成了IOC来创建对象,bean与bean在IOC容器中的依赖关系通过DI来实现,有setter注入和构造器注入,AOP面向切面编程,就是在不改变源代码的情况下,对方法进行增强。主要用于权限控制、事务管理、记录日志等,底层是基于动态代理的,如果是接口,就用JDK动态代理,如果是类,就用CGLIB实现动态代理。

9、Spring的设计模式?含义?

1.工厂模式:Spring使用工厂模式,通过BeanFactory和ApplicationContext来创建对象
2.单例模式:Spring的bean默认为单例模式
3.策略模式:例如Resource的实现类,针对不同的资源文件,实现了不同方式的资源获取策略
4.代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术
5.模板方法
6.适配器模式
7.观察者模式
8.桥接模式

10、集合有哪些?

List、Set、Map

11、List集合下面有哪些?

ArrayList、LinkedList、Vector

12、ArrayList和LinkedList的区别?

ArrayList是由数组实现的,所以查询效率高,增删慢
LinkedList是由双向链表实现的,所以增删效率高

13、java的基本数据类型

byte、short、int、long
char、float、double、boolean

14、String转char怎么转

String——》char:charAt(index),toCharArray()返回char类型的数组
char——》String:String.valueOf(‘c’)效率最高

15、项目中为什么用SpringCloud,SpringBoot,底层原理了解多少?

首先微服务架构是现在的主流架构,springboot是构建在spring框架基础上的嘛,可以简化常用的工程配置,比如:端口,访问路径啥的,它还有一些辅助功能,比如内置服务器,能快速部署,学习成本低,springboot的起步依赖也可以简化依赖的配置,把依赖的管理交给了springboot,不用去关注不统一来的不同版本是否存在冲突,然后springCloud继承了各种微服务功能组件,并且基于springboot实现了自动装配,开箱即用,springcloud是为服务架构的一站式解决方案。

16、为什么用springcloud不用dubbo

springcloud的定位是微服务架构下的一站式解决方案,dubbo主要是在于服务的调用和治理。
springcloud依托的是spring平台,具备更完整的生态系统,dubbo一开始只是用来做RPC远程调用

17、看你写了MinIO,解释下是用到了啥

将资讯的详情页和一些素材存储到了Minio

18、kafka都能干什么

kafka是一个消息中间件,吞吐量很高,不仅可以发布、订阅消息,还可以做流式计算

19、SpringBoot配置文件有哪些

minio、网关、端口号、spring、nacos、mongodb、数据库的配置

20、介绍下ES,哪些项目中用到es,干了什么?

es是一款开源的搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能,项目中使用es做了资讯搜索功能,并且对搜索的结果进行高亮显示

21、redis热点数据怎么实现,怎么完成排序

在使用redis之前,统计上报,修改业务代码,在操作redis之前,加入key使用次数的统计,定时把收集到的数据上报到统一的服务进行聚合运算
1.Redis集群扩容,增加分片副本,分摊客户端发过来的读请求
2.使用二级缓存,即本地jvm缓存,减少redis的读请求

22、redis的数据结构有哪些

String、List、Hash、set、zset

23、分布式锁是怎么实现的,锁哪些东西

基于数据库实现,版本号控制(mp:@Version标记、向容器中配置乐观锁的拦截器)、redis的setnx命令实现,setnx和设置过期时间不能实现原子性操作,可以使用set的拓展命令,set key value ex nx;
在延迟任务服务的任务信息表中,加了version字段,控制版本,在延迟任务刷新的方法中,用setnx加了分布式锁,防止任务重复刷新

24、springcloud的注册中心用的什么?配置中心?

注册中心和配置中心用的都是nacos

25、网关用的什么?

gateway

26、feign调用怎么使用,服务方没有feignclient能被调用吗?

1.引入feign依赖
2.编写feign客户端接口,用@FeignClient注解标注
3.在服务提供者中实现feign客户端接口
4.在服务消费者的启动类上用@EnableFeignClient开启feign调用,使用feignclient中定义的方法。
feignclient也可以写在服务消费端上

27、讲一讲什么是熔断

雪崩问题:微服依靠服务器来创建线程,而服务器的性能有瓶颈,当请求一致阻塞时,会导致服务器资源耗尽,也就会导致服务不可用,依赖于当前服务的其他服务也会不可用,形成了级联失败,就是雪崩。
熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求

28、mybatis,$和#的区别

#,表示占位符,相当于jdbc的?,底层是PreparedStatement,sql只编译一次,没有sql注入的问题,#中传入的是基本类型+String,可以随便写,建议写成接口方法的参数名。
$,相当于字符串拼接,底层是Statement,会重新编译sql,有sql注入的问题。当传入的是简单类型的时候,只能写value

29、数据的四大特性

原子性、一致性、隔离性、持久性

30、事务的隔离级别

读未提交、读已提交、可重复读(mysql默认)、串行化

31、多线程的实现方式,线程池实现原理,线程池回收

1.继承Thread类
2.实现Runnable接口
3.实现Callable接口
4.利用线程池创建
工作线程启动后,就进入了runworker方法,里面是一个while循环,循环判断任务是否为空,若不为空,执行任务,若取不到任务,或发生异常,退出循环,执行,processworkerExit,在这个方法里把工作线程移除掉。
线程池创建线程,工作线程从任务队列中,获取任务,执行完任务,将线程归于线程池管理
线程池7大参数:核心线程数、最大线程数、线程存活时间、时间的单位、任务队列、创建线程的工厂、拒绝策略

32、mysql搜索引擎

MyISAM类型不支持事务处理,而InnoDB类型支持。MyISAM类型强调的是性能,其执行速度比InnoDB类型更快,而InnoDB提供事务支持以及外键等高级数据库功能。

33、B+树的底层

1.有两种节点,一种是索引节点,一种是叶子节点
2.索引节点不会保存记录,只用于索引,所有数据都保存在B+树的叶子节点
3.B+树的所有叶子节点会形成一条链表,叶子本身也是按照索引值从小到大排序的,更方便范围查找
3.B+树的索引值一定会全部出现在叶子节点

34、线程池的好处

1.降低资源的消耗
2.提高响应的速度
3.提高线程的可管理性

35、线程的数据如何保持独立

可以使用ThreadLocal,Threadlocal为变量在每个线程中都创建了一个副本,每个线程可以访问自己内部的副本变量

36、使用包装类的好处

封装了基本类型的操作,创建集合对象,可以对元素的数据类型用泛型进行限定,而泛型类型只能是引用类型,那么基本类型就用不了了,就要使用对应的包装类

37、sql优化

1.不要用select *
2.用in代替or
3.禁止不必要的order by排序
4.尽量避免使用子查询
5.使用批量插入
6.使用limit
7.优化group by语句

38、缓存什么时候设置淘汰策略

在Redis Memory占用超过我们配置的阈值的时候触发策略执行

39、消息队列丢失情况

生产者消息确认机制、消息持久化、消费者消息确认机制、消费消息失败重试机制