最近参加面试,在最后阶段,面试官要求写一个无入侵业务代码的分布式锁。我当时能想到的方案是基于自定义注解和AOP,不过这不是面试官想要的答案,他甚至已经给出了关键性的提示:用模板模式。怎奈CPU已经在之前一小时的拷问下变得有点儿发烫了,所以即使给出了提示,也没能想到如何用模板来处理这个问题,但基于一个程序员最后的本能,那个隐约的想法在沸腾的脑浆中忽隐忽现,可最终还是没能抓住它。。。
面试结束不到5分钟,已经冷却下来的CPU再次上线。啊!我去,有种被自己CPU坑了的感觉。这样不就可以了吗!
public abstract class BusinessSyncExecutor<P, R> {
public R execute(String key, P param) throws ExecuteException {
try {
if (RedisLock.lock(key)) {
return doExecute(param);
}
throw new ExecuteException();
} finally {
RedisLock.unlock(key);
}
}
protected abstract R doExecute(P param);
public static class ExecuteException extends Exception {
}
}
以上代码从严谨程度上来说还有很大欠缺,不过这对于面试的要求已经足够了。
想必参加过面试的各位同仁应该都有过我这样类似的面试经历,但当时就像被鬼打墙一样,无计可施。遇到这种情况,如果你很看重这个职位,而且还能联系上面试官的话,那就在面试结束后的最短时间内将你的想法再与面试官讨论一下,说不定转机就在眼前。