@
lesismal 全的懒加载形式,在我看来(我能力有限),其实没有啥性能损失的,最多一点 if 比较,或者如果用枚举的形式实现,我觉得是没有什么性能损失的。
这个无非就是双重锁,或者枚举去实现。我写的时候,我也是忘了的,但是凭着理解,我写出来了。
至于你说进八股什么的,我觉得如果从追求结果来说,你说的一点都没错,本身就是一个很简单的东西,值得进八股么?但是我觉得不同的人,看法可能不一样。
我觉得面试官想知道的就是这几个东西:
1. 什么是单例?不说写出来吧,如果连这个都说不出来,我真不行能力很强,能胜任 100w+ 的工作。
2. 对并发的理解,普通单例,在高并发有什么问题?
3. 类在加载的时候,会初始化哪些东西?
4. 为什么你用双重锁?或者为什么用枚举?
5. 如果用双重所,锁对象和锁类的区别?
6. 你能用几种方式写出来,然后解释为什么这么写?至少我当时就一行行解释了。
7. 从你解释的过程中,来看你的思路,表达能力怎么样。能不能很很清晰,流畅的表达自己的想法。
所以,我觉得从这个简单的题目上还是能看到很多东西,至少我是好奇,为啥那些职级那么高,很多大公司的人连单例是什么都不知道。更牛逼的是,有个哥们的简历说自己带队,用 Java 重构了一个多么大的 C++。这个刚好撞我枪口上了,鄙人刚好重构了一个 10 几个模块的 C++ 项目了。然后问了几个问题,哥们直接拿出 PPT 跟我们分享。当场就被我老大制止了,面试也就结束了,然后哥们还挺生气的,尴尬。
最后,针对你说的问题,我再跟你分享一个故事:
我曾经有一个同事,他负责做对接支付接口的事情,大概对接有至少 15 家支付接口了。后面,他天天跟我抱怨说他的工作简单,没有意思,没有更难一点的事情做,觉得想换工作了。
然后,我听到后,问了他一个问题:你觉得你的工作,枯燥没有意义,既然你已经对接了这么多支付接口了,换个身份,假如你现在是支付平台方,能不能总结一下如何设计一个高性能的支付接口?常见的支付接口会有那些问题?能不能总结一下呢。
然后,过了一年过后,我同事实在受不了了,想离职,然后我问了他同样的问题,他的答案是:他不知道。