面试:自我介绍

面试官您好,很感谢您抽出时间来进行这场面试。

我叫XXX,2019年本科毕业于西南石油大学计算机专业,毕业后进入了一家制造业的公司从事需求分析与开发运维的工作,主要的工作内容为:收集用户需求、组织需求评审会议、协助制定测试计划等,还包括公司现有系统的功能优化和运维,所使用的语言主要是Java。

2022年,我选择了读研,因为本科期间主要是对知识广度的学习,每个方面都学得不深,所以研究生期间,我对计算机底层的知识进行了比较深入的学习,无论是数据结构与算法,还是网络的相关协议,还是redis的底层实现。

因为Go语言天然支持高并发的特性,我把它语言作为了我研究生期间主要学习的语言,并使用Go语言做了几个项目。 由于工作期间我已经写了较多的业务代码,为了达到练习的目的,我就选择了一个偏底层原理的k-v数据库的项目。 因为工作中经常用到Redis作为缓存数据库,所以参考了部分Redis的设计,我自己实现了实现一个简单的k-v内存数据库。

主要功能:

五种核心数据类型的PUT、GET 和 DELETE 操作;

支持B-Tree、B+ Tree 和 自适应奇数树 三种内存索引结构;

实现了AOF持久化,包括 Always、EverySec、BytesPerSync(基于写入数据量触发)三种持久化策略。

使用了mmap技术,加快数据库启动过程。(通过直接访问磁盘文件映射到的内存空间,减少 I/O 操作和内存复制,提高启动效率)

还支持批量写入和删除,并保证批处理的原子性(每个事务分配序列号)。

引入 merge 操作,可以根据配置的无效数据占比阈值是否执行数据合并。


但上面的数据库只能单机部署,不能进行分布式多机部署,于是我又学习了Raft共识算法,保证了分布式部署的数据一致性,支持多用户并发访问。

主要内容包括:

Raft算法的领导选举、日志同步、状态持久化以及日志压缩等。 基于 gRPC 的节点间通信服务。 利用 Go 语言的 goroutine 和 channe机制,进行并发处理。

我还做了一个 API网关的项目。

因为在微服务系统中,像服务注册与发现、负载均衡、权限认证、流量统计、熔断限流等都是必须的组件,我就自己实现了一遍,来加深自己对微服务系统的理解。

0%