面试经历一

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

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

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

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

加在类上,省事。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值