• Java基础知识记录20220315


    Java基础知识记录-20220315

    MySQL三大日志及各自的作用

    binlog 、redolog、undolog
    binlog: 用于记录数据库操作的日志,select和show查询语句除外,开启后可用于主从复制
    redolog: 重做日志,用于记录数据库提交事务的日志,保证事务持久性
    undolog: 记录事务未提交时前一个版本的日志,是前一个版本的快照,用于保证事务原子性

    MySQL事务

    数据库中的事务是指对数据库执行一批操作,在同一个事务当中,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。

    并发情况下MySQL如何保证事务(什么是MVCC)

    MySQL事务隔离级别,解决了什么问题

    MySQL有4种事务隔离级别: 读未提交、读已提交、可重复读、串行化

    解决的问题
    读未提交: 不能解决脏读、不可重复读、幻读
    读已提交:解决脏读、不能解决 不可重复读、幻读
    可重复读:解决脏读、不可重复读、不能解决幻读
    串行化:解决脏读、不可重复读、幻读

    MySQL默认的事务隔离级别:可重复读

    Redis数据结构

    string 、list、set 、hash、zset

    什么是跳表

    zset底层数据结构是跳表
    https://zhuanlan.zhihu.com/p/53975333

    Redis分布式锁

    https://blog.csdn.net/asd051377305/article/details/108384490

    SpringBoot常用注解

    @EnableAutoConfiguration
    @EnableFeignClients
    @EnableHystrixDashboard
    @EnableCircuitBreaker
    @EnableDiscoveryClient
    @MapperScan
    @SpringBootApplication

    Java8 新特性

    lambda表达式
    Stream API
    Optional
    时间和日期API

    如何排查慢SQL

    1.通过show full processlist; 抓取慢sql
    2.打开慢SQL日志
    3.通过explain 查看sql执行计划

    SQL 索引失效的情况

    1.有or必全有索引;
    2.复合索引未用左列字段;
    3.like以%开头;
    4.需要类型转换;
    5.where中索引列有运算;
    6.where中索引列使用了函数;
    7.如果mysql觉得全表扫描更快时(数据少);

    如何查看SQL是否走索引

    1.使用explain查看SQL语句,看一下 select type、key length、Extra
    2.查看Extra中是否有file sort ,有的话需要给排序字段增加索引

    如果一条SQL有两个索引,走了慢的那个索引如何解决

    1.强制走某一个索引
    select order_key ,createtime FROM aaa force index(createtime) group by order_key
    2.删除慢的那个索引,引导SQL优化期

    kafka如何解决消息丢失问题

    https://zhuanlan.zhihu.com/p/354772550

    深拷贝和浅拷贝的区别

    浅拷贝:复制一个对象,对象中的属性都复制一份,如果含有内部对象,则将引用指向它
    深拷贝:完整复制一个对象,含有内部对象也复制一遍

    如何实现深拷贝

    1.实现Cloneable接口,重写clone方法,手动赋值
    2.实现Serializable接口序列化,通过序列化和反序列
    3.通过fastjson,从Object转成json,然后转回object,本质上是反射

    MySQL 聚簇索引和非聚簇索引的区别

    聚集索引
    表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。 在一张表上最多只能创建一个聚集索引,因为真实数据的物理顺序只能有一种。

    非聚集索引
    表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,其行数量与数据表行数据量一致。

    总结一下:聚集索引是一种稀疏索引,数据页上一级的索引页存储的是页指针,而不是行指针。而对于非聚集索引,则是密集索引,在数据页的上一级索引页它为每一个数据行存储一条索引记录。

    MySQL 为什么使用B+树而不使用B树,什么是B+树

    https://www.cnblogs.com/tiancai/p/9024351.html

    MySQL都有哪些索引

    唯一索引、主键索引、普通索引、全文索引、外键索引、复合索引

    唯一索引和普通索引的区别

    唯一索引可以保证数据记录的唯一性

    HashMap底层原理

    数组+链表+红黑树

    ConcurrentHashMap怎么保证线程安全的

    https://jishuin.proginn.com/p/763bfbd7485c

    synchronized和ReentrantLock区别

    1.synchronized是JVM层面的锁,ReentrantLock是Java API层面的
    2.synchronized没有显式的加锁解锁,通过字节码可以看出来,ReentrantLock可以显式的加解锁
    3.synchronized不支持可重入、ReentrantLock支持
    4.synchronized不支持中断、ReentrantLock支持中断
    5.synchronzied是非公平锁、ReentrantLock根据参数设置是否公平,默认非公平锁
    6.synchronzied锁的是对象,锁是保存在对象头里面的,根据对象头数据来标识是否有线程获得锁/争抢锁;ReentrantLock锁的是线程,根据进入的线程和int类型的state标识锁的获得/争抢。

    volatile 在多核CPU下怎么保证多线程可见性

    https://blog.csdn.net/mashaokang1314/article/details/96571818

    Redis的使用场景

    https://zhuanlan.zhihu.com/p/161311820

    springcloud用过哪些组件

    eureka、zuul、hystrix、openfeign、

    你对Hystrix熔断机制的理解

    什么情况下会触发熔断机制

    1.请求超时
    2.在时间窗口期内,超过一定次数失败就熔断

    分布式事务你们是怎么实现的

    RocketMq、本地事务表

    多个服务调用,怎么保证事务的强一致性

    用户下单,30分钟内未支付,清除占用如何实现

    https://cloud.tencent.com/developer/article/1866307

    数据库有100条记录,随机抽取20条记录,如何实现

    1.MySQL写法
    select * from goods order by rand() limit 20;
    2.Java代码层面实现
    将数据全部取出来,使用Collections.shuffle()洗牌算法,然后抽取20个
    3.使用Redis
    将数据id存储至Redis中,使用set结构,然后使用spop命令随机返回元素

    DelayQueue的使用场景

    https://juejin.cn/post/6844903822867824653

  • 相关阅读:
    B站开源播放框架ijkplayer(iOS版)使用教程
    GitHub前50名的Objective-C动画相关库
    iOS系统自带的 UIAlertView 自动旋转的实现
    iOSAPP启动时实现加载广告
    每周分享第5期(2019.5.4)
    如何为Redis中list中的项设置过期时间
    对scrapy进行单元测试 -- 使用betamax
    【AMAD】betamax -- 一个ruby-VCR的模仿品,只支持requests
    【AMAD】stackprint -- 为Python加入利于调试的traceback信息
    【AMAD】Pysnooper -- 别再用print进行debug了
  • 原文地址:https://www.cnblogs.com/ixan/p/16011139.html
Copyright © 2020-2023  润新知