2020暑期实习面试题目记录(1)

记录一些在暑期实习面试中遇到的问题,答案不完整(2020.4.25)


关系型数据库相关

MySQL的两个引擎

MySQL的两个引擎为MYISAMINNODB, 当前MySQL的默认引擎为INNODB

MYISAMINNODB的区别有哪些
  1. InnoDB支持事务,MyISAM原生不支持事务。
  2. InnoDB支持外键,MyISAM不支持外键
  3. InnoDB不保存表的行数,MyISAM保存表的行数。
  4. InnoDB最小的锁粒度是行锁,而MyISAM最小的锁粒度是表锁。在特定的并发场景下,MyISAM的性能表现更差。
  5. InnoDB支持聚集索引和非聚集索引,MyISAM不支持聚集索引。

  6. 一般说道聚集索引和非聚集索引时,一些面试官会选择深入询问聚集索引非聚集索引的区别或事务的特性或事务的隔离级别。
事务的特性
  • Atomicity
  • Consistency
  • Isolation
  • Durability
事务的隔离级别
  • read uncommitted
  • read committed/unrepeatable read
  • repeatable read
  • serializable
聚集索引clustered index)和非聚集索引secondary index)的区别
  1. 聚集索引也叫聚簇索引,数据行的物理顺序与列值的逻辑顺序相同,因此一个表中也只能有一个聚集索引,默认是主键,也可以根据需求设置在其他字段(如,年龄。再插入数据的时候会比较慢,因为要维护数据排序)。
  2. 非聚集索引记录的物理顺序和索引的逻辑顺序不一定保持相同。聚集索引的叶子节点存放数据,但非聚集索引的叶子节点存放指向真实数据页和行id的指针,所以非聚集索引查询时可能需要二次查询。
  3. 聚集索引由于物理地址和索引逻辑顺序是相同的,所以数值范围查询速度是非常快的。

  4. 说到这里,面试官可能会追问索引实现使用的数据结构是什么或如何避免非聚集索引的二次查询
索引实现使用的数据结构是什么

B+Tree

B+TreeB Tree有什么区别

btree的非叶子节点既保存数据由保存下一级关键字信息,可能会导致树的高度较高。
b+tree的非叶子节点只保存关键字信息,叶子节点保存数据。保存数据的磁盘块形成一个环形链表结构。
2020暑期实习面试题目记录(1)_第1张图片
btree与b+tree可参考https://blog.csdn.net/hao65103940/article/details/89032538

如何避免非聚集索引的二次查询

在特定情景下可使用覆盖索引,在多个字段上建立索引,会保存被索引列的信息。(如在年龄和姓名上建立索引,若查询只需要获取年龄和姓名就无需二次查询。)

非关系型数据库

Redis的基本数据类型

Redis支持5种数据类型,分别是:

  • String
  • hash
  • list
  • set
  • zset
Redis使用的协议

redis使用的通信协议是RESP (Redis 序列化协议的缩写),有实现简单,解析性能好,通信冗余数据少。

RESP5种最小单元类型表示传输的数据结构。

  1. 单行字符串以+开头
  2. 多行字符串,以$开头,后面接字符长度,解析时根据长度决定解析范围,而不以特定符号作为结束符,实现传输解析的二进制安全。
  3. 整数值以:开头,后面跟整数的字符串。
  4. -开头的表示错误消息。
  5. *开头表示数组,后面跟数组长度,*5则表示下面将有5行非多行字符串的数据,下面多行也以关键字开头以声明对应行的类型。
    报文中每行以\r\n分隔
    空字符串用多行字符串表示

了解更多Redis的应用场景及原理推荐老钱的《Redis 深度历险:核心原理与实践应用》

计算机网络

HTTP中的GETPOST的区别

HTTP协议是应用层的协议,描述了一系列通信双方的约定及HTTP报文的组织形式。
HTTP报文有三个有效部分

  1. 请求行(包括方法名,path,协议)
  2. 请求头部(请求的headers
  3. 请求数据
所以GETPOST的区别有
  1. 请求行方法名不同
  2. GET请求报文的请求数据段不传输数据,服务端也不会进行解析。
  3. GET请求在特定浏览器上有url长度限制。
HTTP协议是OSI七层模型哪一层的协议
OSI七层模型、TCP/IP模型
哪些协议可以用于负载均衡

算法问题

如何判断链表有环

快慢指针

如何取数组中top10的元素

维护长度为10的排序数组

如何反转链表

这个我面试的时候竟然说需要O(n)的额外空间,直接一次遍历翻转就可以了。

快速排序及遍历次数递归次数

递归次数log2(n)

有100种试剂,其中一种有毒,有10只用于实验的小白鼠,每只小白鼠可同时注射多种试剂,如果注射了有毒试剂的小白鼠一定会死,未注射有毒试剂的小白鼠一定不会死。试剂生效时间为3个月,如何尽快确定有毒的试剂?

100种试剂编号,10只小白鼠分别对应编号的二进制的1位即可。

以上为口述伪代码,需要实际写的一般是leetcode简单题

你可能感兴趣的:(日常笔记)