本网站可以通过分类标签帮助你快速筛选出你想看的文章,记住地址:www.Facec.cc

记录一次golang 云原生面试题

一、算法题:

反转链表——leetcode简单题

func reverseList(head *ListNode) *ListNode {
    var prev *ListNode
    curr := head
    for curr != nil {
        next := curr.Next
        curr.Next = prev
        prev = curr
        curr = next
    }
    return prev
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/reverse-linked-list/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

二、mysql有哪些日志文件,作用是什么

查看详情:MySQL三大日志(binlog,redolog,undolog)详解

MySQL日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中比较重要的就是

  • binlog(二进制、归档日志)
  • redo log(事务日志、重做日志)
  • undo log(回滚日志)

1. redo log

是InnoDB存储引擎独有的,它让MySQL有了崩溃恢复的能力。

redo log的作用和它的刷盘时机、存储形式。
可以思考一个问题:只要每次把修改后的数据页直接刷盘不就好了,为什么还要用redo log刷盘?不都是刷盘吗?有什么区别?
实际上,数据页大小是16KB,刷盘比较耗时,可能就修改了数据页的几byte数据,没有必要把整页的数据刷盘。而且数据页刷盘都是随机写,因为一个数据页对应的位置可能是在硬盘文件的随机位置,所以性能很差。
如果是写redo log,一行记录就占了几十byte,只要包含了表空间号、数据页号、磁盘文件偏移量、修改值,再加上是顺序写,所以刷盘效率很高。
所以用 redo log 形式记录修改内容,性能会远远超过刷数据页的方式,这也让数据库的并发能力更强。

2.binlog

binlog会记录所有涉及更新数据的逻辑规则,并且按顺序写。

3.redo log

想要保证事务的原子性,就需要在发生异常时,对已经执行的操作进行回滚,在MySQL中恢复机制是通过undo log(回滚日志)实现的,所有事务进行的修改都会先被记录到这个回滚日志,然后再执行其他相关的操作。如果执行过程中遇到异常的话,我们直接利用回滚日志中的信息将数据回滚到修改之前的样子。并且,回滚日志会先于数据持久化到磁盘上。这样就保证了即使遇到数据库突然宕机等情况,当用户再次启动数据库的时候,数据库还能够通过查询回滚日志来回滚将之前未完成的事务。

三、docker问的比较多,我总结了下

文档地址:Docker容器的本质,如何实现的 资源隔离、资源限制

1.docker 容器本质

  • 容器其实就是Linux下一个特殊的进程;

  • Docker容器通过namespace实现进程隔离,通过cgroups实现资源限制;

  • Docker镜像(rootfs)是一个操作系统的所有文件和目录而不包括内核,Docker镜像是共享宿主机的内核的;

  • Docker镜像是以只读方式挂载,所有的增删改都只会作用在容器层, 但是相同的文件会覆盖掉下一层,这种方式也被称为"Copy-on-write";

2. 如何实现的 资源隔离、资源限制

3. Docker网络相关

四、TCP/IP五层模型,每一层详细说说

五、mysql的隔离级别,怎么实现的隔离

# golang   mysql   docker  

评论