今天电面,很惨淡。让我觉得自己是不是真的已经锈掉了。
final、finally、finalize的区别。恩,finalize是不记得了,根本没用过啦,但是应该记得是跟GC有关系就好了。
final呢,大家都知道了,变量级别的,方法级别的跟class级别的。finally的问题倒是把我难住了,她问我说finally一般你都怎么用,我说释放资源的时候用,比如文件啊,数据库的connection啊。。。然后她说,file.close也会报错啊,你要怎么办。。。当时我就蒙了,啊,没想过。。。其实很简单,抛给上一级就可以了。。。
其次是问了我synchronized的用法,我实话说吧,很久没用了,也很久没看了,真的记不大住了。
简单的说就是synchronized方法,就是征对每个实例一个锁,synchronized变量就是对这个变量实例都是一个锁。这里特别要指出的是,synchronized变量的时候不要用一些静态的或者常量,这样会出现各种各样的诡异情况。之前我在CSDN上也见过这样的情况。
额外的还问了我sleep跟wait的区别,我就说sleep么就是睡过去了,线程还在握着CPU,但是wait就放出去。
听她的语气好像我说的不对,我就专门把source里的注释给拿了出来,大家都帮忙看下
这段是sleep下面的
* Causes the currently executing thread to sleep (cease execution)
* for the specified number of milliseconds plus the specified number
* of nanoseconds, subject to the precision and accuracy of system
* timers and schedulers. The thread does not lose ownership of any
* monitors.
这段是wait下面的
* Causes the current thread to wait until another thread invokes the
* {@link java.lang.Object#notify()} method or the
* {@link java.lang.Object#notifyAll()} method for this object.
* In other words, this method behaves exactly as if it simply
* performs the call <tt>wait(0)</tt>.
* <p>
* The current thread must own this object’s monitor. The thread
* releases ownership of this monitor and waits until another thread
* notifies threads waiting on this object’s monitor to wake up
* either through a call to the <code>notify</code> method or the
* <code>notifyAll</code> method. The thread then waits until it can
* re-obtain ownership of the monitor and resumes execution.
这里都提出了monitor的概念,但是我确实不是很清楚monitor是什么意思,在我的操作系统学习中,也确实没有学习到线程会有自己的monitor的概念。
===============================
关于这个职位,在之前,其实还有一个公司,劳务派遣提前问我问题。。问我字符串链接。
字符串嘛,java嘛,静态变量池嘛,大家都知道。所以大家推荐StringBuilder嘛。
我了个去,这家伙一口标准的外地话,跟我说哦,用StringBuffer啊。。。我就没用过这东西,我在1.5以后上来就用StringBuilder的,怎么可能用过StringBuffer。
然后问我说一段代码,多处使用StringBuffer会不会不同步,你在说什么啊,根本没提到线程,一段代码,从头到尾怎么会出现不同步,你胡说什么呢!我就说我不理解你在说什么,再说一遍。。。之后也没有出现任何新的解释,我就说,咱们之间是不是有misunderstanding,我说StringBuilder,你说StringBuffer,而且我也无法理解你的所谓的不同步现象。他就说,哦,你没用过是吧,哦,还有misunderstanding,然后很怪异的嘿嘿笑。
我知道你在嘲笑我,鄙视我,好像我就不知道还要装懂,特别的无知跟傻帽。
后来我就去查了下东西,发现说哦,原来他是想先问StringBuffer,然后说多线程操作时候,StringBuffer跟StringBuilder之间的区别就跟HashMap跟HashTable一样,存在是否能够保持线程同步。。没想到我第一步就说StringBuilder了,于是闹了笑话。
想到这里,我就不介意对方的鄙夷跟嘲笑了,我查漏补缺,发现原来还有一个不完善的实现在前面。而且真正装懂的人也不是我。
我倒是听欢迎这样的面试官的,我能够一次一次的看到自己的空缺,然后填补起来。
当然了,心情是影响的。。是很不开心的,但是这种人不会影响自己的自信心的。
就怕对面什么都问了,结果最后却什么response给你,就很泄气,感觉你全力出击,但是打到了棉花上一样让人觉得憋屈。
希望自己能找到好工作。
bless下自己
============================================
你看一开始写东西,就开始要说个没完了。
我一直觉得催我进步的只有2个东西,一个是受挫,一个是助人。
以前在CSDN上帮人看问题,找解决的方案,之后做性能测试,最终得到方案就让我很享受
之后找工作的时候,很多面试一家一家,从最早的支付宝笔的一塌糊涂,到之后能够应付除了SSH以外的所有java试题。进步之大,是自己没有想到的
也许我要重新把thinking in java,core java 1&2 都翻出来,重新看一遍。
SSH我始终不喜欢,倒是Lucene让我很有感觉,喜欢。准备把search那段开完,不过也要等手头的事情忙完,这个release 8月8号说要code freeze。
干吧。。加油加油加油。。。
又回到了自我否定与自我鼓励的精神状态