coder_nn level
获赞
0
粉丝
0
关注
1
看过 TA
42
门头沟学院
2026
Java
IP属地:河北
暂未填写个人简介
私信
关注
07-15 20:43
门头沟学院 Java
mysql mvccmvcc允许多个事务同时读取同一行数据。做到了读读并行,读写并行。它是通过read view实现的,可看做是数据库的一个快照版本。read view有几个重要参数:m_ids:创建read view 时当前数据库活跃事务的id列表。(启动了还未提交的事务)min_trx_id:创建read view时活跃事务的最小id值max_trx_id:创建readview时数据库要分配给下一个事务的id,即m_ids中最大值+1creator_trx_id:创建该read view的事务idinnodb聚集索引记录中会有两个隐藏列:trx_id:一个事务对某条聚集索引记录改动时,会把该事务的id记录在这里roll_pointer:每次改动时会把记录写到undo日志中,本列存的是指向旧版本记录的指针。如下图,当隐藏列trx_id的值小于read view的min_trx_id,说明这个版本的数据是在readview创建之前就提交了,因此该版本的记录对当时事务可见。当大于max_trx_id时说明这个版本的记录是在readview创建后事务才提交的,因此对当前事务不可见如果再min和max之间,需要判断trx_id在不在m_ids中,如果在且当trx_id等于readview的creator_id时可见,因为是当前事务创建的。如果在且不想等,说明生成该版本的事务还活跃着并且不是当前事务创建的,该版本记录对当前事务不可见。如果不在m_ids中说明生成该版本的事务已经提交,该版本记录对当前事务可见。
0 点赞 评论 收藏
分享
06-30 21:10
门头沟学院 Java
1.自我介绍和技术背景2.问项目,问聚合支付项目是否做过压力测试,能支持多少QPS。问了项目中的熔断做了什么,怎么实现的熔断那里用Hystrix实现,返回保底数据。压力测试我不清楚说多少合适,就说没做过压力测试3.系统困难点和收获困难点我就回答的在一些逻辑设计方面不太完善,有一些设计缺陷导致给后面的开发挖坑需要花时间弥补。4.是否考虑到高并发的场景,怎么优化后续可通过加锁和多级缓存来优化5.如果系统突然变慢了,应该怎么去排查问题出在哪里  (这里答的不太好因为没考虑过这个问题)我回答去分层排查,先看dao层是不是因为某些sql查询时间过长,然后如果是就看情况加索引、优化sql语句。如果是因  为受到攻击导致系统不稳定可进行请求的监控。6.如果程序运行时,进程突然挂掉,应该怎么排查( 这里也没答上来)7.说下AOP原理通过动态代理,jdk或cglib,我讲了讲我看过源码,讲了讲动态代理实现以及AOP的应用(日志、方法运行时间记录)8.线程池的参数和工作原理,应用场景9.做过哪些mysql优化  (我答完后他问我还有吗?可能他想听的我没说出来)慢查询、explain分析、选合适的字段加索引(非空、使用频繁且更新不频繁)、避免索引失效(违反最左前缀、使用模糊查询、隐式类型转换、使用函数等)、批量插入代替单个插入,顺序代替乱序,手动控制事务+批处理,更新时where的条件应匹配索引防止行锁升级为表锁等。10.如何解决redis和数据库数据不一致(答得不够好)我答的更新时先更新数据库再删redis,如果先删除redis的话需要在更新数据库后再删一次。11.缓存雪崩或穿透等解决方案防止大量数据集中过期(增加随机过期时间),使用布隆过滤器防止大量请求访问数据库,防止缓存穿透可缓存空值,对访问数据库加锁(使用信号量进行配额),使用多级缓存,进行数据预热并监控。12.未来学习方向,学习新技术是怎么学的
查看12道真题和解析
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务