JavaSE
Java 的 Socket
Socket的是套接字。是计算机之间通信的一种约定、一种方式。
然后常见的协议有:TCP 和 UDP
TCP
是什么?TCP是一种面向连接的可靠协议
特征:三次握手建立连接,四次挥手断开连接,可进行大数据量传输,通信效率较低
应用场景:对信息安全要求较高的场景,比如文件下载,金融数据通信
三次握手
- 客户端向服务端发起请求--等待确认
- 服务端向客户端返回响应
- 客户端向服务端确认建立连接
四次挥手
- 客户端向服务端发起取消连接请求
- 服务端向客户端返回响应表示收到请求
- 服务端向客户端发起确认请求
- 客户端发送确认信息连接取消
UDP
是什么:是一种无连接不可靠的传输协议
特征:之所以不可靠,是因为不需要建立连接,将IP端口信息封装为数据包并限制在64KB内
速度快,开销小无需释放资源。
应用场景:语音通话,视频通话
Java实现多线程的方式?
实现多线程的方式,有三种
- 一种是:继承Thread类
- 优点:编码简单
- 缺点:不利于扩展
- 另一种是:实现 Runnable 接口
- 优点:扩展性强
- 缺点:多一层包装,线程有返回结果,无法返回
- 最后一种方式:实现Callable接口
- 优点:扩展性强,可以拿到线程返回的结果
- 还可以使用线程池的方式实现,ThreadPoolExecutor
程序优化?
对集合了解多少?
- 是什么?
集合是存放对象数据的容器- 特征?
集合只能存放对象类型,是可变长度。提供了高性能的结构和算法,提高程序速度和质量- 集合类型?
集合有两个接口:Collection(单列集合接口) 和 Map(双列集合接口)
Collection接口分为 List 集合和 Set 集合
List 集合
- 分为:ArrayList 和 LinkedList(有序,有索引,可重复)
ArrayList:底层数组,查询修改快,增加删除慢
LinkedList: 底层双链表,查询修改慢,增加删除快
Set 集合
- 分为 HashSet、LinkedHashSet 和 TreeSet
HashSet:底层是一个HashMap,其实操作就是HashMap的key,特点(无序,不重复,无索引)
LinkedHashSet:底层是一个HashMap,特点(有序,不重复,无索引),多了一个双链表机制来记录存储顺序
TreeSet:底层是红黑树,特点(可排序,不重复,无索引)
Map 集合
- 分为HashMap、LinkedHashMap 和 TreeMap
HashMap:底层数组+链表+红黑树,特点(无序,不重复,无索引)
LinkedHashMap:底层数组+链表+红黑树,特点(有序,不重复,无索引),每个键值对多了双链表机制记录存储顺序
TreeMap:底层红黑树,特点(可排序,不重复,无索引)
哪些集合是线程安全的?
Vector、HashTable、Properties是线程安全的。
- Vector:底层数组,不同系统扩容机制不同,几乎1.5倍,linux扩容两倍
- HashTable: 跟HashMap一样,底层数组链表红黑树,单线程下效率极低。
- Properties:底层就是Map,继承HashTable
红黑树怎么平衡?
红黑树是一个特殊的二叉查找树
- 每一个节点可以是红色或者黑色
- 红黑树不是高度平衡的,它的平衡是通过红黑规则实现的
红黑规则:
- 判断是否根节点,如果是根节点直接设置黑色。如果非根。
- 判断是父节点是黑色还是红色,如果是黑色不需要任何操作
- 如果是红色,判断叔叔节点是什么颜色
- 如果叔叔是红色
- 将父节点和叔叔节点设置为黑色,将祖父设置为红色
- 如果祖父为根节再设置为黑色,如果祖父非根设置为当前节点再次进行判断
- 叔叔是黑色节点,并且当前节点为父节点的右孩子
- 把父节点作为当前节点并左旋,再进行判断
- 叔叔黑色,当前节点是父的左孩子
- 将父节点设置为黑色,将祖父设置红色,以祖父作为支点进行右旋
遍历map集合的几种方式?
- entrySet
- keySet
- 迭代器
- lambda表达式
了解HashMap的扩容机制吗?
默认加载因子是0.75,初始化第一个数组为16,第一次扩容也就是添加12个。等于数组*0.75
如何实现复制一个文件
使用 apache 的工具类,IOUtils下的copy方法,参数一是复制那个文件,参数二是复制到哪里。 运行完,直接关闭流即可
还可以用原生方式,先定义一个try-catch块,try后面括号里面进行定义流,然后在花括号里面进行定义复制内容,read读,write写。无需关闭流
线程分为IO密集和CPU密集,线程使用多少合适?
最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目
- CPU密集:
- 指的是系统的硬盘、内存性能相对CPU要好很多,简单来说IO等CPU
- IO密集
- 指的是系统的CPU性能相对硬盘、内存要好很多,简单来说CPU等IO
static 静态变量和静态方法和静态代码块执行顺序
根据编写顺序,先执行,静态方法在最后
String equals 底层是怎么判断的?
首先调用 equals
- 进入equals,参数是Object,也就是传入的字符串
- 首先进行地址比较,那this,这时候this就是调用者。
- 如果地址相同,返回true
- 如果不相同,用instanceof进行判断是否是string类型
- 如果是转为String,然后调用value属性,也就是将字符串转为了字符数组,调用者为value,这个是在初始化就有数据了。就是调用者。
- 传递给StringLatin1的equals方法,进行循环遍历,如果比较失败返回false,全部为true,返回true
什么是死锁?
死锁就是两个线程在竞争资源,你等我,我等你的情况下,产生了阻塞,称之为死锁。
一般死锁分为三个情况
- 占用且等待:就是说线程1等待y的时候,不释放X资源
- 解决方案:一次性申请所有的资源,就不会存在等待
- 其他线程不能去抢占t1线程占有的资源
- 解决方案:占用部分资源的线程,可以进一步申请其他的资源,如果申请不到,可以释放它占有的资源。
- 循环等待:线程t1等待t2占用的资源,线程t2等待t1占用的资源
- 按照顺序申请资源,资源是有线性顺序的。先申请资源序号小的,再申请序号大的。这样线性循环就不存在
单例模式的优点?
单例模式是指一个类只有一个实例。
- 饿汉模式:类加载的时候就初始化,线程安全。缺点:大量单例存在,浪费资源
- 懒汉模式:解决了内存浪费问题。 缺点:多线程场景会有线程安全问题。可能创建多次对象。
- 解决方案:增加synchronize同步锁,或者双重检查锁,缺点:对性能有影响
Spring
介绍一下SpringCloud有哪些组件?
- Nacos、Eureka 注册中心
- Ribbon 负载均衡
- Feign 声明式服务调用
- Hystrix 熔断器
- GateWay 网关
- Sentinel 熔断降级
- Seata 分布式事务
redis 有哪些类型?
- String 类型,底层是字节数组,根据编码方式不同,最大空间不能超过512MB
- Hash 类型,底层是Hash表,结构就跟对象一样,都是key-value结构
- List 类型 底层可以看作是双向链表,支持正向检索也可以反向检索
- 特点有序,插入删除快,查询速度一般,元素可以重复。
- 特点有序,插入删除快,查询速度一般,元素可以重复。
- Set 类型 无序,元素不可重复,查询快,支持交集并集差集等功能,底层Hash表
- SortedSet 底层跳表 + Hash表,是个可排序的集合
- 为每个元素加个score属性,基于score属性进行排序。可排序、不重复、查询快
SQL优化的几个方面?
- 数据量特别大的话,优先考虑分库分区分表
- 使用explain查看执行计划
- 减少索引数量,减少全名中
- 尽量不要使用in not in这些进行判断,因为会全盘扫描,like的百分号尽量写后面的,用exists
左连接和右连接有什么区别?
左连接是把左表全部保留下来,on之后的表是判断是否满足条件,满足保留,否则为空
右连接是相反,把on之后的全部保留,把左表判断是否满足条件,满足保留,否则为空
数据库分页查询在数据量大的情况下,该怎么优化?
- count不必要每次都查询
- 如果数据不需要那么精准,可以修改Mysql引擎
SpringMvc 了解多少?
先说下,MVC是Model,View,Control的缩写,它是一种软件设计规范,它将业务逻辑,数据,显示分离的方法来组织代码,降低视图与业务逻辑之间双向耦合。
- Model(模型):业务逻辑操作,包含Dao层和Service层,包含数据和行为
- View(视图):负责进行模型展示,一般是客户想看到的东西,用户界面等。
- Controller(控制层):接收用户请求,委托给模型进行处理,处理完毕后返回模型数据给视图,由视图进行展示。
SpringMvc 的执行流程?
- 当用户通过浏览器发起一个Http请求,请求直接到前端控制器DispatcherServlet
- 前端控制器调用HandlerMapping处理器映射器
- 处理器映射器根据请求的URL找到具体的Handler,并将他返回给前端控制器
- 前端控制器调用HandlerAdapter处理器适配器
- HandlerAdapter经过适配调用具体的处理器(Handler,也叫后端控制器)
- Handler执行完毕返回ModelAndView
- HandlerAdapter将ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给viewResolver视图解析器进行解析
- ViewResolver解析后返回具体View
- DispatcherServlet对view进行渲染视图,即将模型数据填充至视图中,最后响应用户
怎么集成Mybatis
直接引入依赖,SpringBoot,就可以使用
介绍下SpringCloud
我觉得SpringCloud是一个分布式微服务架构的一站式解决方案,他提供了很多组件用来解决分布式架构所带来的问题。比如:
- Nacos:支持服务的发现,配置和管理。
- Ribbon:实现客户端的负载均衡,它提供了轮询,轮询权重,随机等负载均衡策略。
- Feign:实现声明式服务调用。
- gateway:实现拦截所有请求,分发到服务上去。
- sentinel:实现流量控制,实时监控,熔断降级,资源隔离。保护我们的服务避免雪崩。
- seata:分布式事务,解决当前服务出现问题其他服务不会回滚问题。
接受传统开发的模式吗?
也就是前后端不分离的模式?能接受吗?
- 可以接收
mysql?
- 删除数据表:drop table 表名;
- 删除数据库所有信息:truncate table 表名;
- 删除数据库信息:delete from 表名 where 条件
- 去重方式
- distinct 去重
- union:合两表的数据,根据检索字段合并,去重
- union all:合并两表的数据,不去重
简单介绍一下项目
我这个项目是OA办公系统,里面有学习会系统,学习会系统包含了活动管理,任务组管理,任务管理。根据每个人分配一些任务,然后就是预警,如果判断任务已经快到了开始时间,就回去发送一条消息给这个任务负责人。还有就是模板管理,模板管理为了快速复用以前的活动。这个用到了SpringCloud,Nacos,redis,mybatis
这项目有什么亮点?
应该就是定时器和模板了,模板采用分表操作,跟学习会没有关系,存入的数据也不会被学习会的信息影响。 定时器会定时判断,判断成功修改状态。
SQL 判断时间
判断sql时间
select * from user where birthday >= '2014'
若依组成部分
ruoyi-ui // 前端框架 [80]
ruoyi-gateway // 网关模块 [8080]
ruoyi-auth // 认证中心--里面有登录注册退出登录等 [9200]
ruoyi-api // 接口模块--存放一些公共的东西,客户端啊实体类啊,也包含系统接口
├── ruoyi-common // 通用模块
│ └── ruoyi-common-core // 核心模块
│ └── ruoyi-common-datascope // 权限范围
│ └── ruoyi-common-datasource // 多数据源
│ └── ruoyi-common-log // 日志记录
│ └── ruoyi-common-redis // 缓存服务
│ └── ruoyi-common-seata // 分布式事务
│ └── ruoyi-common-security // 安全模块
│ └── ruoyi-common-swagger // 系统接口
├── ruoyi-modules // 业务模块
│ └── ruoyi-system // 系统模块 [9201]
│ └── ruoyi-gen // 代码生成 [9202]
│ └── ruoyi-job // 定时任务 [9203]
│ └── ruoyi-file // 文件服务 [9300]
├── ruoyi-visual // 图形化管理模块
│ └── ruoyi-visual-monitor // 监控中心 [9100]
linux 常用命令
- tail 查看文件尾部
- ls 列出当前目录
- cd 切换工作目录
- pwd 打印当前工作目录
- mkdir 创建文件夹
- touch 创建文件
- cp 拷贝文件
- mv 移动命令
- rm 删除命令
- find 查找文件
linux 复制一个文件夹
cp -r 要复制的文件夹 复制到哪里
mybatis中#号和$有什么区别?一对多怎么写?
$是占位符,容易sql注入,#号是预编译的,不会发生sql注入
一对多是在resultMap中写collection
图片上传怎么上传?
前端有个组件upload,可以规定上传的格式,大小会到一个路径,到指定文件夹里,向后端发送,后端new 一个upload进行接收,会直接拿到地址,存放到数据库里。
mysql事务
mysql 四大特性ACID:
- 原子性:指事务是一组操作,要么全部成功,要么全部失败!
- 一致性:指事务执行完毕后,结果符合预期,保持一致。
- 隔离性:指A事务和B事务同时操作一个数据库,互不影响。
- 持久性:一旦提交或者回滚,就是永久性操作。
四个隔离机制
- 读未提交:都没解决
- 读已提交:解决脏读
- 可重复读:解决脏读和不可重复读
- 串行:解决了脏读、不可重复读、幻读
脏读:指一个事务读到另一个事务没有提交的数据
不可重复读:指一个事务先后两次读取到的数据不一致
幻读:就是当一个事务插入数据时,没有发现这个数据,但是执行插入时却报数据已存在。
redis 为什么适合做缓存?
首先redis基于内存提供了高性能的数据存取功能。
- redis拥有淘汰规则,当数据超过缓存容量之后,根据规则淘汰一定的数据。
- 业务在访问数据时,会先去redis中查看是否有响应数据,如果有直接读取缓存。没有则去数据库查询,再缓存到redis缓存中,叫缓存更新。
- 只读缓存和读写缓存?
- 只读缓存:应用要读取数据会先查询数据是否存在,存在则读取,而写请求是直接操作数据库,然后清空掉redis缓存的数据,下次读取数据一定是缺失。这样就是只读缓存。
- 读写缓存:读请求和只读缓存一样,写请求也会被缓存到redis中,在缓存中对数据进行增删改操作。但是,因为读写缓存是在内存中,一旦出现宕机或掉电,内存的数据就会丢失。
根据业务对数据可靠性的不同要求,会有同步直写和异步写回策略
- 同步直写:优先保证数据可靠性,就是发给缓存的同时也会写给后端进行处理,都完成才返给客户端
- 异步写回:先提供快速响应,所有的请求都在缓存中处理,等到这些增改的数据被淘汰时才会写给数据库,注意:宕机会导致数据丢失
reids读写缓存只能采用同步直写策略。修改缓存也要写入后端数据库,可能会导致数据库和缓存的不一致,需要配合分布式锁使用
Spring常用注解?
- @component:被sprign管理
- @Controller:被spring管理,并可以返回页面
- @Service:表示业务层
- @Repository:表示数据层
- @Configuration:表示这是配置类
- @Scope:可以标注单例还是非单例
- @Autowired:依赖注入(singleton 单例,prototype 非单例)
IOC 和 AOP 的理解?
- IOC:控制反转:强调原来在程序中创建Bean的权利交给第三方
- DI:依赖注入:强调Bean与Bean之间的关系,由第三方负责
- AOP:面向切面:功能是横向抽取,主要实现是Proxy(代理)
- 可以在不修改源码的情况下,对程序进行增强
简单举个 AOP 的例子?
这个我举个例子吧。
- 先给每一个方法加自定义注解,并有个value值,作为权限码
- 在访问一些模块的时候,可以使用AOP切面进行权限判断。
- 当访问模块的时候,先拦截,拦截条件呢就是刚刚的自定义注解。
- 通过AOP获取方法上的权限值,判断这个用户是否具有这个权限,有则通过,没有就抛出异常。
Eureka 和 Naocs 的区别?
- Nacos 会把服务的提供者,划分为临时实例和非临时实例,默认都是临时实例。
- 临时实例:用心跳检测,每隔一段时间发一次心跳,宕机直接踢掉,和Eureka一样
- 非临时实例:由Naocs主动发信息询问是否宕机,如果宕机了,会等它恢复健康。
拉取不一样,会每隔一段时间pull和push,Eureka只有pull,如果有服务挂掉了,会主动push服务。
Naocs与Eureka的区别
共同点:
- 都支持服务注册和服务拉取
- 都支持心跳方式做健康检测
不同点:
- Naocs支持服务端主动检测提供者的状态
- 临时实例采用心跳模式
- 非临时实例采用主动检测模式
- 临时实例心跳不正常会剔除,非临时实例不会剔除
- Naocs支持服务列表变更的消息推送模式,服务列表更新更及时
- Naocs集群默认采用AP方式,当集群中存在非临时实例,采用CP模式,Eureka采用AP模式
说到AP模式:AP就是最终一致,也就是事务分别提交,允许出现不一致,出现会采取弥补措施恢复数据。
CP模式:CP模式就是事务执行完毕后会互相等待,同时提交,同时回滚,弱可用,强一致
做项目中遇到了哪些问题?
- feign 远程调用的时候,参数需要加@requestParm或者PathVariable,如果传入对象或者集合需要加requestBody在对应的控制层也要添加
Sentinel 解决了什么问题?
解决了雪崩问题:某个服务故障导致整个微服务都出现故障。
- 超时处理:设置一定的时间,超过这个时间就返回错误异常!
- 舱壁模式:限定某个业务能使用的线程数,避免消耗整个tomcat,线程隔离
- 熔断降级:由断路器统计业务的异常比例,超过阈值直接拦截该业务的所有请求。
- 流量控制:限制每秒钟处理请求的数量,限制访问OPS(访问量),避免因为流量徒增而故障。
Feign使用的是什么协议?
Feign使用的是Http协议。
如何设计高并发系统?
- 页面静态化
比如活动页面大多数内容都是固定的,减少不必要服务端请求。对指定内容进行访问服务端。
- 使用CDN
因为用户分布到全国各地,地域相差很远,网速各不相同,使用CDN,内容分发网路
- 如何控制页面按钮准时亮起呢?
因为有时候高并发的请求并不多,比如秒杀,有个按钮准时亮起。
前面说过静态资源缓存到了CDN上,用户无论怎么刷新,都是静态的,减少请求。
按钮的改变也是由JS控制的,秒杀之前JS标志为false。
秒杀开始系统生成一个新的JS,标志为True,并生成一个新值。同步给CDN,根据新值,CDN不会缓存数据,每次获取最新的JS代码。这样就可以去请求。 - 缓存
- mq异步处理
- 限流
- 分布式锁
跨域问题产生的原因以及解决方案?
跨域就是指:域名不一致就是跨域,主要包括
- 域名后缀不同
- 端口不同(协议不同)
- 浏览器禁止发生跨域的Ajax请求。
解决方式:gateway网关配置允许发生跨域
- 解决请求被拦截,设置为true
- 设置允许哪些网站可以跨域,配置网址
- 设置允许跨域的请求方式
- 设置是否允许带头信息
- 设置是否允许携带COOKIE
- 设置跨域有效期
在教育研究院项目主要负责哪些内容呢?
咱这个项目主要是给教育研究院做的,是自动化办公的,里面分为学习会模块和餐饮模块,我是主要做学习会的,学习会模块,是活动管理,任务管理,模块管理。像任务管理,管理员把任务下发给负责人,负责人要在指定的时间内完成。也可以设置闹钟,提醒自己任务要完成的时间。
教育研究院这个有什么亮点吗?
教育研究院遇到问题怎么解决呢?
遇到问题,一般的网上都有解决方案,先去尝试网络搜索,如果搜很长时间都没有解决应该去向同事请教,避免浪费太多的时间。
教育研究院能说下工作流程?
传统的办公方式无法满足于教育研究院对于快速,高效,方便,及时的处理事务需求,为了提高这些需求,所开发的系统。 首先,当要开办一个活动的时候,管理员会先去在系统中创建一个活动,如果是每年都创建的活动,可以保存为模板,方便以后快速创建,然后设置任务给负责人,负责人收到通知,可以选择设置闹钟方便即时完成。管理员可以去待办任务中及时看到所有任务的完成情况。
Naocs 的配置怎么注入进来?
Nacos 先启动,然后服务里面填写配置信息,可以在Naocs配置中查看服务
配置管理,需要先创建一个bootstrap.yaml文件,先读取yaml文件知道Naocs的地址,再去读取application.yaml文件。在bootstrap文件中配置文件后缀名,服务名,naocs地址,等信息。在nacos中也要定义文件。实现热更新。
什么是CAP理论?
就是在单体架构,事务都必须满足ACID,但是到了微服务上面,因为服务都是独立的,所以事务抛出了异常,其他事务并不会知道,所以也就不会产生回滚。就无法满足ACID了。
为了解决这个事情,产生了CAP(一致性,可用性,分区容错性)理论。
- 一致性:用户访问分布式的任意节点,得到的数据必须一致,用户修改任意节点的数据,就必须实现数据同步。
- 可用性:用户访问任意健康的节点,必须得到回应,不能超时不能拒绝。
- 分区:因为网络故障或者其他原因,导致分布式系统部分节点与其他节点失去联系,形成独立分区。
- 容错:在集群出现分区时,整个系统也要持续对外提供服务。
Eric Brewer 提出分布式系统无法同时满足这三个指标。这个结论就叫做CAP理论。
介绍一下定时器?
- Spring 定时器
主类加 @EnableScheduling 开启Spring定时器
在一个被spring管理的类中方法上标注Scheduled参数是cron 每多长时间运行
如何解决依赖冲突?
可以安装maven helper插件查看有哪些依赖冲突。
也可以选中项目,查看依赖图,有红色提示的是冲突的
最好的方式,就是在父项目中,使用dependencyManagement声明依赖,父项目引入解决依赖冲突。
geteway 主要是用来做什么的?
因为外部访问是不安全的,需要网关来做保护。
为什么不安全?
- 如果这个系统是公司的,不是公司的员工不能进入。以防止公司内容泄密。
- 再比如,只能接收500请求量,不能一下子进入两千请求,拦截这些多余请求,对微服务保护。
- 可以实现身份认证和权限校验。
- 服务路由,负载均衡
- 请求限流。
还可以实现路由断言工程,判断是否满足条件,还可以过滤请求,和实现跨域问题。
IO 字节流怎么转换字符流
- InputStreamReader 字节转换流
- OutputStreamWriter 字符转换流
- 先创建一个字节流和一个字符转换流
- 将字节流放进转换流中,并返回就转换成功了
谈一谈多线程?应该注意什么?
多线程就是指新开了一条执行路径,比如main方法它就是一条路径,如果只有一个路径,是单线程,多个路径就是多线程。
- java中一共有三个,继承thread,runnable,callable。
应该注意线程安全。避免同时对资源进行修改。实现加锁防护。
谈谈mybatis的一级缓存和二级缓存?
一级缓存是默认的,操作数据库时需要构造sqlsession对象,对象里面有个map集合记录缓存数据,多个sqlsession互不影响。
当执行增删改并提交的时候会删除缓存,避免脏读。
二级缓存需要手动开启,每个mapper文件都有一个二级缓存区域,是按照namespace命名空间分划的。如果相同则是在一个缓存区域,有一个执行了提交操作则清空二级缓存。
每一个列表有一个useCache,设置为false,禁止这个操作使用二级缓存。
redis 常用命令
- expire key 20 ,给key设置有效期 20秒
redis 淘汰机制
- noeviction:当内存使用达到阈值时,所有引起申请内存的命令会报错
- allkeys-lru:在键空间中,优先移除最近未使用的
- keyvolatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的
- keyallkeys-random:在键空间中,随机移除某个
- keyvolatile-random:在设置了过期时间的键中,随机移除某个
- keyvolatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除
单体架构和微服务架构的区别?
- 单体架构代码复杂,耦合性高,不易维护,微服务架构每个服务相当于一个单体架构,代码简单。
- 单体架构都用一个数据库,而微服务架构每个服务可以用不同的数据库,比如可以用redis,每个服务都对应自己的数据库。
- 单体架构的技术都是一样的,微服务架构都可以使用不同的技术,开发更加灵活。
怎么实现服务与服务之间负载均衡的呢?
- 启动nacos,给User服务设置不同的集群,给order服务设置一个集群和User其中一个一样。
- 给调用者order添加负载均衡策略。实现负载均衡。
乐观锁和悲观锁?
乐观锁:就是比较乐观,只有当修改的时候才会判断是否已经被修改。
悲观锁:是比较悲观,总是假设最坏的情况下,所以每次拿数据都会上锁。
应用场景:乐观锁用在并发量不会超过2000的情况下并且写比较少的情况下,而悲观锁用在写比较多的情况下,保证数据安全。
linux权限系统是?
对数据库连接池怎么理解?
为了节约资源,当用户访问时会从容器中申请连接对象,访问后会将连接对象归还容器。 目的,节约资源,用户访问高效。
SpringBoot配置文件优先级怎么理解的?
- 如果properties 和 yam 和 yaml同时存在,优先级是propertiers其次是yam最后yaml
- 在打包下面放的配置文件优先级是比之前高的
- 再然后打包下面的config目录是最高的
mysql引擎都有哪些?
mysql 什么场景下应该使用索引,什么场景不应该使用?
雪花ID的特点?
- 优点:有序,唯一
- 缺点:如果机器上时钟回拨,可能导致ID重复
MQ用过吗?
MQ能实现异步消息处理,有所了解,我相信我可以在1-2周完全胜任这方面的技术的。
static了解多少?
static,可以修饰变量,修饰方法,修饰内部类,修饰内部代码块。
特点:不用实例化对象,就可以使用静态的变量或者方法,用来提高程序性能。
静态只能访问静态的(如果想访问非静态需要实例化对象),非静态可以访问静态也可以访问非静态。
为什么list集合遍历的时候添加删除元素会报错啊?
list在for循环中,因为for底层是迭代器,这个时候不能修改集合长度。修改会报错。
对future的理解?
他是结果的接口,多线程执行完毕后,把结果封装到这个里面,进行返回。
- get:可以得到结果,是阻塞的,没有拿到结果会一直等待。有个参数可以设置等待时长。
- isCancelled: 判断这个任务有没有取消
- isDone: 判断这个任务有没有执行结束
- cancel: 有个方法可以取消异步任务的执行。
什么是可重入锁?
某个线程已经获取某个锁,可以再次获得锁,并且不会产生死锁。
- synchronized
- ReentrantLock
threadlocal锁
可以提供线程内的局部变量
了解ApplicationContext了解多少?
BeanFactory相当于Spring的心脏,ApplicationContext相当于身躯了,ApplicationContext由Factory派生而来,提供了面向实际应用的功能。
Spring事务默认对哪些异常进行回滚?
是Error虚拟机异常,和RuntimeException及其子类进行回滚。
tryCatch进入Catch会回滚吗?
这种情况看是否抛出异常,抛出异常会回滚。
http协议是udp还是tcp?
http1.1,http2版本是tcp协议,http3是udp协议
http的请求类型有哪些?
- get:用来查询
- post:用来新增
- put:用来修改
- delete:用来删除
通过Spring管理的实例,作用域是什么?
需要在类上面加注解,表示注入这个类不再是单例
- 默认是单例,也就是只会创建一个实例对象,每次得到的都是相同的实例对象
- 修改为prototype原型,就不会创建单例的了
如果一个接口两个实例,如何注入?
在注入的时候,可以用Qualifier进行指定,如果是resource,可以使用name属性进行指定
面试技巧
和领导存在争议怎么办?
首先尽量避免和领导存在争议,如果这个真的很重要,首先进行自我反思,要先自己考虑周全,从立场不同进行考虑,再根据岗位经验方面考虑是不是存在信息认知,领导是以全局进行看的。再者就是沟通能力,最重要的是争议不可怕,可怕的是被情绪带偏了,忘记了解决问题本身这个事情。