伴鱼
1.算法题,二维矩阵,1表示陆地,0表示海洋,问最大岛屿面积,广搜即可,注意方向使用
2.问lru用什么数据结构实现
说了一个优先队列,和堆,发现堆不行,小顶堆的定义是根小于孩子,get方法无法实现啊,平衡二叉树可以实现,讲了一下小顶堆的实现。
3.数据库知识
索引,没说什么,B+树实现
B+树:

  • “而B+树中间节点没有Data数据,所以同样大小的磁盘页可以容纳更多的节点元素。所以数据量相同的情况下,B+树比B树更加“矮胖“,因此使用的IO查询次数更少”
  • yuan:意思就是B+树为了实现读取磁盘更快,对于范围查找,范围内的内容挨得近,读磁盘快。
  • “B+ 树通常用于数据库和操作系统的文件系统中”
  • “他们认为数据库索引采用B+树的主要原因是:B树在提高了IO性能的同时并没有解决元素遍历的我效率低下的问题,正是为了解决这个问题,B+树应用而生。B+树只需要去遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作或者说效率太低。”

4.磁盘页的大小

  • yuan:磁盘页大小为4K,块太大,容易产生文件碎片,造成空间浪费,块太小,不容易管理(查一下磁盘的介绍)

5.乐观锁悲观锁

  • 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。
  • 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁

6.网络
问了一下协议之间怎么组装的,层层套。
问了一下协议的作用,ip协议是网络层,答错了,

  • 数据链路层:ARP,RARP
  • 网络层: IP,ICMP,IGMP
  • 传输层:TCP ,UDP,UGP
  • 应用层:Telnet,FTP,SMTP,SNMP

7.docker资源隔了&进程之间资源怎么隔离的
docker 隔离进程是使用Linux 内核技术 Namespace做到隔离的
https://www.cnblogs.com/--smile/p/11810027.html
namespace(命名空间)可以隔离哪些:

  • 文件系统需要是被隔离的
  • 网络也是需要被隔离的
  • 进程间的通信也要被隔离
  • 针对权限,用户和用户组也需要隔离
  • 进程内的PID也需要与宿主机中的PID进行隔离
  • 容器也要有自己的主机名
  • 有了以上的隔离,我们认为一个容器可以与宿主机和其他容器是隔离开的
    恰巧Linux 的namespace可以做到这些

8.golang 的map遍历具有随机性
golang map底层是hash表, 然后扩容缩容会发生rehash, 顺序会发生变化, 但是没有扩缩容的时候,顺序是有保证的, 但是golang为了让程序员不依赖这种不可靠的保证,就干脆遍历的时候加入随机数,然后不管什么时候遍历,顺序都是不保证的
9.用户访问多实例服务器问题,hash
某个用户的请求始终达到某个实例,采用hash,将用户名进行hash映射到对应实例

面试官很会开导你去哪个方向思考,很喜欢这样的面试官。