刚刚和L的同胞电面完, 觉得是个很好的故事

原帖地址:mitbbs

国人哥们主面, 小印跟班. 面Backend infra

给了一道这样的题

/*
Question Description: You are to write an abstraction layer for a persistent
buffer. Provide an implementation of the following abstract class:
*/
public abstract class pBuffer {

protected final int BLOCK_SIZE = 1024;
protected final int BLOCK_COUNT = 1024;

protected byte[] buffer = new byte[BLOCK_COUNT * BLOCK_SIZE]; // A sample
1mb buffer, to be allocated in 1k chunks.

public pBuffer() {
fillBufferFromFile(); // Reads the buffer from file and dumps the
contents into the array, restoring the state to what it was when onShutdown(
) was called
}

// Returns a Location for a free block of the buffer, suitable for passing
to put, get, and free
public abstract Location allocate() throws NoAvailableSpaceException;

// Stores up to BLOCK_SIZE bytes of data in location l. Data beyond BLOCK_
SIZE bytes should be truncated
public abstract void put(Location l, byte[] data);

// Returns the BLOCK_SIZE bytes of data stored at location l, or null if l
is unallocated
public abstract byte[] get(Location l);

// Indicates that an area of the buffer is no longer needed, and can be
reused
public abstract void free(Location l);

// Called on shutdown
private void onShutdown() {
writeBufferToFile(); // writes the full contents of the buffer to disk,
for reading when later invoked by the constructor
}
}

要求实现allocate, put, get, free的内容. 已知条件, pBuffer这个类在初始化过程
中已经调用了fillBufferFromFile. 此外有个onShutdown()函数要把buffer的内容写到
disk.

给完这个题目, 我读了一下题目, 就开始讨论. 说实话我并不是特别理解这个问题, 因
为初始化中已经读入了文件. 所以这四个函数的目的并不是要操作文件以及对应的
buffer本身.

国人面试官的态度让人觉得特别居高临下, 问他问题, 他就说, comments上面不都写了
吗, 你仔细读一下comments; 我就问, 那fillBufferFromFile在写入的过程中, 有没有
写入什么metadata? 他说, fillBufferFromFile()只是个API, 不用你实现; 我又问,
有没有返回什么辅助数据结构让你能标志哪些buffer被用了, 哪些buffer是free的, 他
的回答是这就是要你想啊…

各种沟通无果, 最后还是小印出来给了些提示, 说你想想是不是可以在buffer里面找个
空间记录一些信息. 我于是觉得可能涉及到位运算. 但前面的讨论已经花太多时间了,
也就草草收场.

一些感受, 首先肯定是自己学艺不精了. 但是, 这位同胞, 你出这种题目有意思吗? 说
句实话, 我自己的工作经常用到byte[]数组的操作, 写个circular buffer, memcopy不
是什么问题. 但这样一道大题, 还吝啬给提示, 让我反复猜题意, 我只能苦笑了. 谁让
你们L家就是牛呢