1

特殊的技术面试

 7 months ago
source link: https://blog.scubot.com/article/114e/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

特殊的技术面试 - CarOL的小站

特殊的技术面试_
贺翔/CarOL 2023年10月16日 下午

1.2k 字

10 分钟

3 次

本文最后更新于:3 分钟前

这并不是我实际经历的面试,是在这个视频中看见的。

这个视频博主的技术栈以C语言为主,这个视频中提到的面试的项目也是C语言的。

原博客链接:memcached interview

简单来说,是需要面试者实现memcached数据库中的mult方法,有三个小时的时间。

更详细的,原博客中是使用某个固定版本的memcached进行修改,我选择使用最新的memcached-master进行实现。

推荐使用Linux操作系统进行开发,我实际在Macos上进行编译时有libevent的依赖问题。

在Linux上:

  1. sudo apt install libevent-dev 安装libevent依赖
  2. git clone --depth=1 https://github.com/memcached/memcached 由于原始仓库提交记录太多,拉取太慢,所以只拉取一层
  3. cd memcached/ && sh autogen.sh 生成配置文件
  4. ./configure && make 配置并编译
  5. ./memcached 启动服务
  6. 在另一个session中使用telnet访问对应的服务端口

实现的基本思路

由于mult方法实现的是在已存储的元素上乘以某个非负整数,和incrdecr非常像,所以应该先找到incr相关实现。

由于仅实现mult方法,没有div方法,所以我想直接在incr的实现中新增一种乘法情况,而不是单独对mult实现一个逻辑方法。

在整个实现过程中有两点需要注意:

  1. 需要从命令的字符串处理,再到最底层的元素乘法,整个流程中涉及到区分incrdecr的标志建议都换成枚举类型(默认是bool),相关的函数签名也要换掉。
  2. 不光要实现乘法操作,memcached还提供了stats命令,可以查询某些指令的执行情况,比如incr执行成功的次数incr_hits和失败次数incr_misses。我们新实现的mult指令也要加入到对应的统计中。

我自己的实现在:>PR<

我在之前使用redis时就听说过memcached,这两者都是在内存中的key-value数据库,可以很方便对接小型项目的数据存储需求,在大型项目中充当缓冲层也是不错的选择。

而这两者也有一些不同的地方,redis支持很多特殊的数据类型,比如数组等,而memcached相对应的指令就很少,在其设计思想中,memcached存储的内容都是bytes stream,需要用户手动指定存储对象的字节大小,即memcached只提供存储服务,不提供类型管理服务,这也许是memcached在速度上比redis快的原因之一。

一些额外收获:

在开头的那个视频中,他拉下来memcached仓库之后第一件事不是编译内容,而是使用cloc去查看仓库的代码行数,先对整个项目有个总体的掌控,再去编译,实现细节。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK