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可以用作计数器、粉丝数、对象缓存储存
SET
、GET
、 INCR
、DECR
- List 可以用作栈、队列、阻塞队列
LPUSH
、LRANGE
。
- 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
可以加在类上,可以加在方法上
加在类上,所有方法都会进行事务,加在方法上,只有执行这个方法才会执行事务。
区别:加在方法上 粒度较细 容易控制 类下有很多方法 不是每个方法都要事务
加在类上,省事。