c*********l 发帖数: 3438 | 1 【 以下文字转载自 JobHunting 讨论区 】
发信人: advancedhei (高级嘿), 信区: JobHunting
标 题: 刚刚和L的同胞电面完, 觉得是个很好的故事
发信站: BBS 未名空间站 (Thu May 14 14:25:31 2015, 美东)
国人哥们主面, 小印跟班. 面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家就是牛呢 |
|