2019年8月29号成长题目

1、讲下redis

答:非关系型数据库;本质上是一个key-value类型的内存数据库

支持String、Hash、List、Set、zset(sorted set:有序集合)这五种数据类型,redis持久化;RDB和AOF

 RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发

  AOF(append only file)持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。

redis架构模式:

单机版、主从复制、哨兵、集群

redis相关的还有缓存雪崩和缓存穿透

 缓存穿透:是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透

解决方法:

一、布隆过滤

二、缓存空对象. 将 null 变成一个值

缓存雪崩:如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造成了缓存雪崩。

解决方法:

一、数据预热,设置不同的过期时间,让缓存失效的时间点尽量均匀

二、做二级缓存,或者双缓存策略

三、加锁排队

 

 

 

2、 讲下mysql,除了增删改查,mysql讲一下

答:

数据库优化

首先要根据需求写出结构良好的SQL,然后根据SQL在表中建立有效的索引。但是如果索引太多,不但会影响写入的效率,对查询也有一定的影响

根据数据库三范式来进行表结构的设计。设计表结构时,就需要考虑如何设计才能更有效的查询。

mysql索引数据结构是B+树;

 

索引优化方式

避免过度索引

避免重复和冗余索引

删除不需要使用的索引

复合索需要引遵循最左原则

合理使用短索引

避免索引失效

 

 

 

sql语句优化

在表中建立索引,优先考虑where、group by使用到的字段

尽量避免使用select *,返回无用的字段会降低查询效率;优化方式:使用具体的字段代替*,只返回使用到的字段。

尽量避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描;优化方式:如果是连续数值,可以用between代替;如果是子查询,可以用exists代替;

尽量避免在where条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索引进行全表扫描。

尽量避免进行null值的判断,会导致数据库引擎放弃索引进行全表扫描,需求调节允许的话,可以给字段添加默认值0,对0值进行判断

 

 

 

 

 

 

3、讲下索引数据结构

答:mysql索引的数据结构是树,常用的存储引擎innodb采用的是B+Tree

 

4、你登录了,但操作的时候有时候重定向,怎么确定是哪个用户登录的,登录的数据是从哪里取的?

session中

 

 

 

5、Session 怎么实现信息共享?

 

 

 

 

 

 

 

 

 

 

 

6、讲下cookie和session

答:cookie:

在客户端保存数据,不安全,别人可以分析保存在本地的cookie进行cookie欺骗。

只能保存字符串,且是少量数据

session:

在服务端保存数据,安全

可以保存对象数据,数据无限制(但,当访问过多,会比较占服务器的性能)

一般情况下,session生成的sessionid都是保存在cookie中

 

 

7、你的搜索模块,你搜索的时候,执行流程是怎样的?就是从前端到后端再到前端的实现流程?

 

8、联合索引

答:如果你经常要用到多个字段的多条件查询,可以考虑建立联合索引,一般是除第一个字段外的其它字段不经常用于条件筛选情况,比如说a,b 两个字段,如果你经常用a条件或者a+b条件去查询,而很少单独用b条件查询,那么可以建立a,b的联合索引。如果a和b都要分别经常独立的被用作查询条件,那还是建立多个单列索引

 

9、你们实例有多少个?

该点属于部署问题

10、如果你写登录这模块的话,你的思路是怎样的?

11、说下你知道的数据结构

答:数组,栈,链表,队列,树,图,堆,散列表等

12、红黑树特点

13、平时有看专业相关书籍吗?说几个书名。

14、简历上的项目相关的问题,问写你的模块等等

posted @ 2019-08-29 17:18  上下平中  阅读(133)  评论(0编辑  收藏  举报