最全BAT数据库面试89题

数据库 mysql面试题目:

MySQL InnoDB、Mysaim的特点?
乐观锁和悲观锁的区别??
行锁和表锁的区别?
数据库隔离级别是什么?有什么作用?
MySQL主备同步的基本原理。
如何优化数据库性能(索引、分库分表、批量操作、分页算法、升级硬盘SSD、业务优化、主从部署)
SQL什么情况下不会使用索引(不包含,不等于,函数)
一般在什么字段上建索引(过滤数据最多的字段)
MySQL,B+索引实现,行锁实现,SQL优化
如何解决高并发减库存问题
数据库事务的几种粒度

数据库 题目:

事务四大特性(ACID)
数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别
MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景
数据库的优化(从sql语句优化和索引两个部分回答)
索引有B+索引和hash索引,各自的区别
B+索引数据结构,和B树的区别
索引的分类(主键索引、唯一索引),最左前缀原则,哪些情况索引会失效
聚集索引和非聚集索引区别。
有哪些锁(乐观锁悲观锁),select时怎么加排它锁
关系型数据库和非关系型数据库区别
MVCC机制

数据库实战

数据库三范式,根据秒杀场景设计数据表
数据库的主从复制
死锁怎么解决
mysql并发情况下怎么解决(通过事务、隔离级别、锁)

Redis

redis数据结构有哪些
redis队列应用场景
redis和Memcached(支持数据持久化)
Redis,RDB和AOF,如何做高可用、集群

常见数据库面试题目和答案:

1、触发器的作用?

查看更多

redis数据结构

跳跃表

什么是跳跃表
跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他的几点指针,从而达到快速访问队尾目的。跳跃表的效率可以和平衡树想媲美了,最关键是它的实现相对于平衡树来说,代码的实现上简单很多。

跳跃表用在哪
说真的,跳跃表在 Redis 中使用不是特别广泛,只用在了两个地方。一是实现有序集合键,二是集群节点中用作内部数据结构。

跳跃表的 level 是如何定义的?
跳跃表 level 层级完全是随机的。一般来说,层级越多,访问节点的速度越快。

Object Monitor机制

所谓Object Monitor机制,它就是以Java对象为基础的,在多线程环境下对特定对象的操作权限的一种控制方式。三个区域

  • 一,待进入监控区(Entry Set) ,没有获得对象操作权限,停在synchronized标志前,线程状态标识为Block
  • 二,对象操作权限持有区(Owner),一个时间点只可能有一个线程能拥有这个对象的操作权限。而当前持有对象操作权限的线程互斥量将被记录在这个对象的对象头中。
  • 三,待授权区(Wait Set),wait等方法释放操作权,但还没有离开同步块(只有通过notify()或者相似方法被通知转移的线程能够重新参与对象操作权抢占)
查看更多

es 写数据过程

es 写数据过程

  • 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node (协调节点)。
  • coordinating node 对 document 进行路由,将请求转发给对应的 node(有 primary shard)。
  • 实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node 。
查看更多

数据库最佳实践

外键和级联

【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
说明:以学生和成绩的关系为例,学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。

缺点外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风 险;外键影响数据库的插入速度
优势:保证了数据库数据的一致性和完整性;级联操作方便,减轻了程序代码量;

模糊查询

【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。

查看更多

rocketMQ最佳实践

设置 Broker 的参数 FlushDiskType 来调整你的刷盘策略(ASYNC_FLUSH 或者 SYNC_FLUSH)

  • 同步刷盘中需要等待一个刷盘成功的 ACK ,同步刷盘对 MQ 消息可靠性来说是一种不错的保障,但是 性能上会有较大影响 ,一般地适用于金融等特定业务场景
  • 异步刷盘往往是开启一个线程去异步地执行刷盘操作。消息刷盘采用后台异步线程提交的方式进行, 降低了读写延迟 ,提高了 MQ 的性能和吞吐量,一般适用于如发验证码等对于消息保证要求不太高的业务场景

查看更多

TCP协议的三次握手四次挥手

三次握手:

第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack (number )=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

四次挥手:

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手

情话

一行在梦里
一行在心里
一行你你你

醒来万物皆是沉寂
唯有你是世间的一抹旖旎
他人困于山中晨雾
我困于你。

也说不出对你有多喜欢,只知道目前喜欢你的程度,是其余所有喜爱的事物加起来都无法企及的。你是第一,且遥遥领先

风行过万里 月沉没海底 我遇见了世上的一切 却只喜欢你

想和你一起去看春夏秋冬,驻足在长满青苔的石阶,和刚刚下过雨的小路,看尽了世间有无,就养一只猫,猫是你的,我也是你的

查看更多

eureka

Eureka Server采用的是Peer to Peer对等通信。这是一种去中心化的架构,无master/slave区分,每一个Peer都是对等的。
在这种架构中,节点通过彼此互相注册来提高可用性,每个节点需要添加一个或多个有效的serviceUrl指向其他节点。每个节点都可被视为其他节点的副本。

Eureka注册中心的作用很大的程度是作用于服务发现服务心跳,在多个注册中心的时候,依赖于zuul的负载均衡,保证异常的服务停止,正常的服务加载,保证服务的稳定性。

Eureka能够通过心跳检查、客户端缓存等机制,确保了系统的高可用性。

默认配置,Eureka Server在90s没有得到客户端的心跳,则注销该实例,同时Eureka 有自我保护机制(防止本身不可用,而干掉可用服务),通过在Eureka Server配置参数,
可启动保护机制它的工作原理是:当Eureka Server节点在短时间内丢失过多的客户端时(可能发送了网络故障),那么这个节点将进入自我保护模式,
不再注销任何微服务,当网络故障回复后,该节点会自动退出自我保护模式。

Eureka VS Zookeeper

查看更多