腾讯面试题及答案

2、InnoDB支持的四种事务隔离级别名称是什么? 之间的区别是什么?

    1、读未提交:可以读取到其它会话未提交的数据
    2、读已提交:允许不可重复读,但不允许脏读。提交后其它会话可以看到提交的数据。
    3、可重复读:禁止不可重复读和脏读,以及幻读(innodb独有)
    4、可串行化:事务只能一个接一个执行,但不能并发执行,事务隔离级别最高。
区别:

3、聊一聊事务的特性

事务的特性:原子性:事务中的各项操作,要么全做要么全不做
           一致性:事务结束后系统状态是一致的
           隔离性:并发执行的事务彼此无法看到对方的中间状态
           持久性:事务完成后所作的改动都会被持久化,即使发生灾难性的失败。通过日志h和同步备份可以在故障发生后重建数据。

6、谈一谈对慢查询的分析?MySQL常用的优化方法有哪些?

分析:1、是否遇到行锁,表锁
     2、没有建索引或者创建了索引没有用到
     3、数据库在刷新脏页
优化:1、使用正确的字段类型
     2、使用连接查询来代替子查询,但是不能大量使用join,(可以使用单表查询,然后将查询结果在应用程序中进行关联)
     3、使用事务
     4、使用limit进行分页操作
     5、使用索引,(前导模糊查询不能使用索引,b避免使用!=、或not in或<>等否定操作符,字段的默认值不要未null,
     在字段上进行计算不能命中索引,避免使用or)

7、谈一谈悲观锁和乐观锁以及SQL的实现

悲观锁:悲观锁就是认为别人在获取数据时会认为别人都会修改该数据,因此在别人获取数据时进行上锁,这样其它人再
获取数据时会阻塞,知道上面一个人用完数据,重新释放了锁后面的人才能继续使用数据。
在数据库中通过for update进行操作,sql语句实现:update user set id=2 where id=1 for update,此时A用户开
启了事务并执行了该sql语句但未提交事务,此时用户B会阻塞在加了锁的查询语句上,知道用户A提交或回滚了事务,用户
B才会继续执行,保证了访问的隔离性。

8、简述三次握手和四次握手的过程?

三次握手:第一次握手:首先客户端发送SYN报文到服务端,并指明客户端的初始化序列号为ISN,首部的同步SYN=1,SYN=1
报文段不能携带数据,但会消耗一个序号。
         第二次握手:服务器接收到客户端的SYNb报文之后,会以自己的SYN报文做为回应,并且指定自己的初始化序列号,
         同时会把客户端的ISN+1作为ACK的值,表示自己已经接收到了客户端的SYN,在确认报文段中SYN=1,ACK=1,ISN
         发送给客户端
         第三次握手:客户端接收到服务端发送的报文之后,会把报文中的ISN+1作为ACK的值,表示已经接收到了服务端
         的SYN报文,此时客户端处于ESTABLISHED状态,服务端收到ACK报文之后,也处于ESTABLISHED状态,此时双方
         建立连接。
    
                
三次握手中,第一次和第二次不能携带数据,这是因为第一次可以携带数据会让服务器更加容易收到攻击,而第三次的话,
客户端已经处于ESTABLISHED状态。
            四次挥手:第一次挥手:客户端发送一个FIN报文,报文中回指定序列号,,并且停止再发送数据,主动关闭
            TCP连接,进入FIN_WAIT终止等待状态,等待服务端确认。
                     第二次挥手:服务端接收到FIN之后,会发送ACK报文,并且把客户端的序列号+1作为ACK的值,表
                     明服务端接收到服务端的报文,此时服务端处于CLOSE_WAIT状态。
                     第三次挥手:如果服务端也想断开连接,和客户端的第一次挥手一样,发送一个FIN报文给客户端,
                     并且指定一个序列号,。此时服务端处于LAST_ACK状态,等待客户端确认
                     第四次挥手:客户端收到FIN之后,也是发送一个ACK报文给服务端,ACK的值是服务端的序列号+1,
                     此时客户端处于TIME_WAIT状态,当服务端收到ACK报文之后就关闭连接,处于CLOSE状态。

9、B+树索引和Hash索引的区别?

B+树是一个平衡的二叉树,B+树从根节点到子节点的搜索效率基本相当。
Hash索引采用一定的hash算法,把键值换成新的哈希值,检索式不需要类似B+树那样从根节点逐级查找,只需要一次hash
算法就能定位到相应位置。
区别:对于等值查询哈希索引更有优势,但是前提是没有大量的重复键值,如果有大量的重复键值,哈希所以的效率很低,
因为存在哈希碰撞。
        对于范围查询、索引排序、联合索引的最左前缀匹配规则,哈希索引是不适用的。InnoDB默认使用的是B+树索引,
        它会实时监控表的索引情况,如果认为j简历哈希所以可以提高查询效率,则自动在内存中的“ 自适应哈希索引缓冲区” 建立哈希索引。

问题的答案都是网上找的,有错误请指正。

发布了55 篇原创文章 · 获赞 6 · 访问量 3987

猜你喜欢

转载自blog.csdn.net/qq_40126996/article/details/103898202
今日推荐