• 面试经历一


    mysql 用户信息 用户表怎么设计的?

    首先就有哪些字段,用整型还是字符型啥的,需要设置索引就设置一下,默认就是主键索引嘛

    如何添加索引?

    1.添加primary key(主键索引)
    alter table 表名 add primary key(列名);

    2.添加unique(唯一索引)
    alter table 表名 add unique(列名);

    3.添加index(普通索引)
    alter table 表名 add index 索引名(index_name) (列名);

    4.添加fulltext(全文索引)
    alter table 表名 add fulltext (列名);

    5.添加多列索引
    alter table 表名 add index 索引名(index_name) (列名1,列名2…);

    当不再需要索引时,可以使用 DROP INDEX 语句 或 ALTER TABLE 语句来对索引进行删除。
    1.使用 DROP INDEX 语句
    语法格式:
    DROP INDEX <索引名> ON <表名>

    有哪些索引?

    主键索引:数据列不允许重复,不允许为NULL,一个表只有一个主键。
    唯一索引:数据列不允许重复,允许为NULL,一个表允许多个列创建唯一索引。
    普通索引:基本的索引类型,没有唯一性的限制,允许为NULL值。
    全文索引:是目前搜索引擎使用的一种关键技术,对文本的内容进行分词、搜索。
    覆盖索引:查询列要被创建的索引覆盖,不必读取数据行。
    组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并。

    索引失效的场景?

    不满足最左匹配原则

    使用了select *

    索引列上有函数 、有计算

    字段类型不同 比如说一个varchar的e列,可以用select * from t where e = 0;会把全部数据查出来

    使用or关键字

    not in 、not exists

    左边包括%

    列对比

    怎么知道到底有没有失效呢?

    explain select surname,first_name form a,b where a.id=b.id ;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vbwVwXw3-1660908217864)(…/…/typora_images/image-20220817090831501.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-13P0ynut-1660908217866)(…/…/typora_images/image-20220817091133402.png)]

    bigint对应在java里面是什么类型?

    如果不是无符号类型,BIGINT(20)的取值范围为-9223372036854775808~9223372036854775807。与Java.lang.Long的取值范围完全一致,mybatis会将其映射为Long
    而BIGINT(20) UNSIGNED的取值范围是0 ~ 18446744073709551615,其中一半的数据超出了Long的取值范围,Mybatis将其映射为BigInteger

    事务隔离级别?

    读未提交(read uncommitted):《没提交的都可以读

    事务A可以读取到事务B未提交的数据

    会出现脏读(dirty read)的问题。

    读已提交(read committed):《提交的才可以读

    事务A只能读取到事务B提交的事务 ,解决了脏读的问题 ,出现了不可重复读取数据。

    不可重复读取数据:在事务开启后,第一次读到的数据是3条,当前事务还没有结束,可能第二次再读取的时候,读到的数据是4条,3不等于4,称为不可重复读取。

    读取的数据都是真实的!

    可重复读(repeatable read):《提交了也读不到,永远读取的都是刚开启事务时的数据

    事务A开启之后,不管是多久,每一次在事务A中读取到的数据都是一致的。

    即使事务B将数据已经修改,并且提交了,事务A读取到的数据还是没有发生改变,这就是可重复读。

    可重复读解决了不可重复读取, 可以会出现幻读,每一次读取的数据都是幻象,不够真实!

    早晨9点开启了事务,只要事务不结束,到晚上9点,读到的数据还是那样!

    这是mysql中默认的事务隔离级别!!!

    序列化:《排队,不并发!

    最高隔离级别,效率最低,解决了所有的问题

    表示事务排队,不能并发!

    每一次读取到的数据都是最真实的!并且效率是最低的。

    项目里redis用来做什么的?

    做缓存,还有存放token这些

    redis有哪些类型?

    各种数据类型的使用场景?

    为什么选择String类型,如何考虑的?

    List、Set、String、Hash、Zset

    • String可以用作计数器、粉丝数、对象缓存储存

    SETGETINCRDECR

    • List 可以用作栈、队列、阻塞队列

    LPUSHLRANGE

    • Set可以用作共同关注 、共同爱好 、二度好友 、推荐好友(六度分割理论) 抽奖系统、随机。

    SINTER(交集) SUNION (并集) SPOP(随机获取集合中的元素并移除,适合不允许重复中奖的场景)、SRANDMEMBER(随机获取集合中的元素,适合允许重复中奖的场景)

    • hash 适合用于存储对象 用户信息、商品信息、文章信息、购物车信息。

    HSET (设置单个字段的值)、HMSET(设置多个字段的值)、HGET(获取单个字段的值)、HMGET(获取多个字段的值)

    • Zset(有序集合):排行榜,工资表排序。

    ZRANGE (从小到大排序) 、 ZREVRANGE (从大到小排序)、ZREVRANK (指定元素排名)。

    ArrayList和LinkedList的区别?

    hashmap底层数据结构?添加一个元素的过程是什么?

    JDK的新特性有什么使用过的吗?怎么学习Lambda的?

    怎么创建线程池?

    创建过程的涉及到的一些核心的参数?

    怎么去设计核心参数?

    一类是通过 ThreadPoolExecutor 创建的线程池;. 另一个类是通过 Executors 创建的线程池

    七大核心参数:

    • corePoolSize 线程池核心线程大小
    • maximumPoolSize 线程池最大线程数量 有几个办理业务的柜台!
    • keepAliveTime 空闲线程存活时间
    • unit 空闲线程存活时间单位
    • workQueue 阻塞队列 候客区!
    • threadFactory 线程工厂
    • handler 拒绝策略 当柜台满了,候客区满了,客人还要进来,这时候就有拒绝策略,不让人进!

    最大承载:队列+线程池最大线程数量 ,一旦超出会出现异常

    根据电脑配置设计核心参数。

    Java如何控制事务?

    事务注解?参数?放在哪?区别?

    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE, rollbackFor = Exception.class)

    隔离级别 isolation

    传播属性 propagation

    重要传播属性:read only rollbackfor norollbackfor timeout value

    可以加在类上,可以加在方法上

    加在类上,所有方法都会进行事务,加在方法上,只有执行这个方法才会执行事务。

    区别:加在方法上 粒度较细 容易控制 类下有很多方法 不是每个方法都要事务

    加在类上,省事。

  • 相关阅读:
    HarmonyOS资源分类与访问
    grpc使用consul做服务注册与发现
    38 | Linux 磁盘空间异常爆满
    个性化实时音乐推荐系统-毕业设计
    什么是顶级域名?如何获得顶级域名解析方案
    循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(9) -- 实现系统动态菜单的配置和权限分配
    代码随想录 动态规划Ⅴ
    入门力扣自学笔记151 C++ (题目编号850)
    二、GoLang输出HelloWorld、基本数据类型、变量常量定义、基本类型转换
    【后端】初识HTTP_2
  • 原文地址:https://blog.csdn.net/qq_45830289/article/details/126430782