郑州面试得问题
linux的常用命令
rabbit的使用场景
1.云菜场用户注册成功之后 会发送对应的注册成功消息 同时提醒他绑定推荐人,这时候是直接通过MQ实现
2.用户下单支付成功之后,完成持久化操作后,我这边会需要将订单得特定数据整理出来发送第三方平台 这个是通过mq实现得
3.我的日志服务和邮件发送服务和其他服务通信都是通过MQ来实现
4.云菜场里面的积分兑换,加减积分和修改订单状态都是通过MQ去实现
5.还有ES数据和mysql数据同步的点也是mq实现的
mysql的行级锁和表级锁的有啥区别
1.表锁:加锁粒度大导致开销比较小,加锁块,不会出现死锁得问题,正因为加锁得粒度比较大 导致她得锁得冲突性比较高,并发性比较低
2.行锁:加锁粒度比较小,开销比较大,加锁比较慢,会出现死锁得问题,冲突率比较小 并发性比较高
hashmap在多线程下有哪些问题
1.线程安全问题
本身就是线程不安全,会出现数据不一致或者丢失得问题
2.死锁问题
当多个线程同时访问hasmap得时候 如果都在等对方释放锁
3.数据丢失问题
当多个线程对其做读写操作的时候,
4.并发异常问题
当一个线程对其遍历时候,另外一个线程已经对其做了修改 会发生ConcurrentModifacationExeception异常
ES的使用场景和工作原理,以及分片,项目使用的是什么分片
springsecrity的工作原理
-------------认证
1.用户提交用户名、密码被SecurityFilterChain中的UsernamePasswordAuthenticationFilter过滤器获取到,封装为请求Authentication,通常情况下是UsernamePasswordAuthenticationToken这个实现类。
然后过滤器将Authentication提交至认证管理器(AuthenticationManager)进行认证,其子类providermanager里面存了很多的认证方式,最终执行者是由AuthenticationProvider完成的,我们通常会实现UserDetailsService接口,最终AuthenticationProvider将UserDetails填充至Authentication
2.认证成功后,AuthenticationManager身份管理器返回一个被填充满了信息的(包括上面提到的权限信息,身份信息,细节信息,但密码通常会被移除)Authentication实例。
3.SecurityContextHolder安全上下文容器将第3步填充了信息的Authentication,通过SecurityContextHolder.getContext().setAuthentication(…)方法,设置到其中。
-------------授权
拦截请求:已认证用户访问受保护的 web 资源将被 SecurityFilterChain 中的 FilterSecurityInterceptor 的子类拦截。
获取资源访问策略:FilterSecurityInterceptor 会调用 SecurityMetadataSource 的实现类 DefaultFilterInvocationSecurityMetadataSource 来获取当前资源所需的权限集合 Collection。 SecurityMetadataSource 是一个抽象接口,它负责读取我们配置的访问策略
websocket的工作原理
mysql的B+树
mysql的优化,哪些会造成索引失效
1. 使用不等于(<>)操作符
当查询条件中使用不等于操作符时,索引可能会失效。因为不等于操作需要扫描表中的大部分数据,导致索引的优势无法发挥。
2. 对索引列进行计算或函数操作
如果在查询条件中对索引列进行了计算或应用了函数,MySQL可能无法使用该索引,因为它需要计算每一行的值来确定是否满足条件。
3. 隐式类型转换
当查询条件中的数据类型与索引列的数据类型不匹配时,MySQL可能会进行隐式类型转换,并导致索引失效。
4. 使用LIKE操作符进行前缀模糊匹配
如果使用LIKE操作符进行模糊匹配,并且匹配模式以通配符开始(如LIKE '%xyz'),则索引会失效。因为MySQL需要扫描整个索引来查找匹配的行。
5. 使用OR连接多个条件
当使用OR操作符连接多个条件时,如果条件涉及的列不是全部被索引覆盖,那么索引可能会失效。
6. 选择性低的列
如果索引列的选择性很低(即列中不同值的比例很低),MySQL可能会认为全表扫描比使用索引更有效,从而不使用索引。
7. 索引碎片过多
当索引碎片过多时,MySQL可能会选择不使用索引,因为碎片化的索引可能导致查询效率降低。
8. 数据分布不均
如果数据在索引列上的分布非常不均匀,MySQL可能会认为全表扫描更有效,从而不使用索引。
9. 复合索引未遵循最左前缀原则
对于复合索引,如果查询条件没有使用索引的最左列,那么索引可能会失效。这是因为复合索引是按照从左到右的顺序构建的。
10. 使用了NULL判断
如果索引列包含NULL值,并且在查询中使用了NULL判断(如IS NULL或IS NOT NULL),那么索引可能会失效。
11. 索引未被统计或统计信息不准确
MySQL优化器会根据索引的统计信息来决定是否使用索引。如果统计信息不准确或过时,优化器可能会做出错误的决策。
12. 强制使用索引或忽略索引的提示被误用
MySQL允许使用FORCE INDEX或IGNORE INDEX来强制或忽略特定的索引。如果这些提示被误用,可能会导致性能下降。
13. 数据库版本或配置问题
某些MySQL版本或配置可能存在bug或性能问题,导致索引失效。因此,保持数据库版本更新和合理配置非常重要。
14. 硬件或网络限制
硬件资源不足(如内存、CPU或磁盘I/O性能)或网络延迟等问题也可能导致索引失效,因为这些因素会影响MySQL优化器的决策过程。
redis的使用场景 项目中使用了哪些功能
缓存:Redis 可以作为应用程序的缓存层,减少数据库的读取压力,提高数据访问速度。
会话存储:在 Web 应用中,Redis 可以用来存储用户的会话信息,如登录状态、购物车内容等。
排行榜和计数器:Redis 支持原子操作,非常适合实现实时排行榜、点赞数、访问计数等功能。
消息队列:Redis 可以作为消息队列系统,用于处理异步任务,例如邮件发送、后台任务处理等。
实时分析:Redis 可以用于实时分析,如用户行为分析、实时统计信息等。
分布式锁:在分布式系统中,Redis 可以用于实现分布式锁,确保在多个节点之间共享资源的一致性。
发布/订阅:Redis 提供了发布/订阅模式,可以用于实现消息广播,例如实时通知系统。
限流:Redis 可以用于实现限流功能,防止系统过载,如 API 调用频率限制。
数据过期:Redis 支持设置数据的过期时间,自动清理过期数据,适用于临时数据存储。
全页缓存:Redis 可以缓存整个页面的输出,减少数据库查询和页面渲染时间。
社交功能:在社交网络应用中,Redis 可以用于存储好友关系、用户状态更新等。
实时推荐系统:Redis 可以用于存储用户的行为数据和偏好,实现实时推荐。
地理位置信息:Redis 支持 Geospatial 索引,可以用于实现地理位置相关的查询和推荐。
时间序列数据:Redis 可以存储时间序列数据,用于监控和分析。
任务调度:Redis 可以用于任务调度,例如定时任务的执行。
数据共享:在微服务架构中,Redis 可以作为服务间共享数据的媒介。
持久化:虽然 Redis 是内存数据库,但它也支持数据持久化,可以在系统故障后恢复数据。
java中原生的锁
redis分布式锁
spring是否是线程安全的
ES是怎么抽数据的
linkedlist和arrayList的区别
es和mq怎么数据一致性
怎么实现异步(comtable)
线程池
jwt