书城青春亲爱的傲娇先森
49808700000069

第69章 其实你内心是期待,不是吗?

看他死皮赖脸跟在后面没有要走的意思,也索性由他去了。

打开门,W先森跟自己家一样,关了门,而且还检查了一下门关的严实不严实,检查完之后,打量着房间,踱步到沙发前,坐了下来,扫了一下桌子,懒洋洋地说:“不给我倒杯水吗?你就是这样招待客人的吗?”

我看了看桌子瞥了眼他,笑道:“我大包小包风尘仆仆过来住的酒店,哥哥,还能带着吃的喝的吗?”

“那水总有吧?妹妹?”

“没有,他这壶不知道多少人用过了,我不想用。”

“那你给我找个啥喝行吗?刚喝完酒,嗓子疼。”他往后一仰,寻了个舒适的位置,扶着额头,食指轻点太阳穴。

“啊?那我下去给你买点儿吧,你想喝什么?”我站到他面前。

“算了,别下去了,你出去万一找不回来咋办?”

“没事,我自己想喝,顺便给你带,别想太多,你喝什么?”

“那你看着买吧。”他嗤笑,好似看穿了我的掩饰和局促。

我按电梯下楼,脚步软绵绵的,像踩在棉花上,一切都像一场梦,我在脑海里设想过很多再次见面的场景,没想到在我毫无准备的时候就匆匆见了,晃了晃脑袋,走进商店,看到五颜六色琳琅满目的饮料,我不知道该选什么,谁让我是个天秤座呢,选择恐惧症,如果选不了要不都不买,要不全买了,这种情况下,明显只能选择后者咯,想了想先拿了一瓶农夫山泉,想了想他好像喜欢喝茉莉蜜茶,我喜欢茉莉清茶,一样一瓶,对了,他好像喝了酒,买个酸奶吧,喝了酒是不是得头疼,还是再那个维生素饮料吧,不知不觉,怀里已经搂了一大堆了,付了账回去,我也是一天没喝水了,打开茉莉清茶,边走边喝,进屋把东西往他面前一放。

“你咋买了这么多,有钱人就是不一样啊。”

“喝吧,喝完早点儿走吧,我困了,想早点儿睡觉了。”

他刚拧开瓶盖,喝了一口,听见我说的话,放下饮料,不满道:“你这是撵我呢?这么不欢迎我。本来还想着说我现在在做面试官,也面试了不少人,想看看帮你看看简历,再给你说说重点知识呢,哎呀,主人既然赶人了,那我也不得不走啊。”

话虽这样说,但是他连一点儿要走的意思都没有。

“怎么会呢?我这刚刚喝了口茶,忽然就精神了好多,一点儿睡意也没有。我们快开始吧。”我眨巴着眼睛,装作无辜的样子。

他也不搭理我,我赶忙上前又拿了一瓶饮料献殷勤。

可他根本不理我这茬,“我这瓶还有呢。”

“那...我们从哪儿开始呢?”

“你站这儿?”我赶紧继续坐到我的落地窗上。

“那先给你圈一下重点吧,你好好听啊。”

“好的呢,郑老师。”

“其实也没啥重点知识,首先你要知道集合框架都有哪些?”半天没动静,问:“问你呢?”

“啊,问我啊,有List、Map、Set,list有ArrayList和linkedlist,map有hashmap、treemap、hashtable,set有hashset、treeset、sortedset。”

“嗯,可以。那你知道ArrayList和linkedlist的区别吗?”

“对于随机访问get和set(查询方法),ArrayList优于LinkedList,因为LinkedList要移动指针。对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。ArrayList底层是数组实现的,linkedlist底层是双链表。ArrayList线程不安全,效率高;linkedlist线程安全,效率低。”这个很基础,我还是知道的。

“答得挺好的嘛。”他微微一笑,“下一个,hashmap和hashtable的区别呢?”

“HashMap和Hashtable都实现了Map接口主要的区别有:线程安全性,同步synchronization,以及速度。HashMap可以接受为null的键值key和值value,而Hashtable则不行。HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable,Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。HashMap不能保证随着时间的推移Map中的元素次序是不变的。

hashMap和Hashtable的区别都实现了Serializable接口,都支持序列化,实现了Cloneable接口,能被克隆。 HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75。 HashMap扩容时是当前容量翻倍,Hashtable扩容时是容量翻倍+1 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。HashTable是线程安全的。 HashMap中key和value都允许为null。在HashMap 中,null 可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。 Hashtable 的键值都不能为null。”

“可以啊,小脑瓜可以记这么多东西,有点儿东西啊。”他一眼不眨看着我,继续问:“hashmap底层的实现原理呢?”

“HashMap是Map接口的实现类,键值对存储,并允许null作为键的值,线程不安全,即方法为非同步方法。jdk7.0中的HashMap采用数组+链表形式进行存储,但是如果一个数组对应的链表长度过大时,通过key进行查询时效率较低;为了提高效率,jdk8.0中HashMap最大的优化亮点就在于采用了数组+链表+红黑树的存储方式。jdk8.0的HashMap 底层结构依然是一个数组(默认长度为16)也称为哈希表,同样的数组元素是一个单向的链表,每一个数组存储的元素代表的是每一个链表的头结点;一个链表长度>=8,数组的长度不小于 64 时,会将此链表转换为红黑树的存储方式。”我内心还是有点儿开心的,劳资背了那么久,还算是有点儿用呢。

“可以,mysql隔离级别呢?有几种?”

“四种,读提交,读未提交,重复度,可串行化。”

“这个很简单吧,其实面试也就很简单的。乐观锁悲观锁知道吗?”

“乐观锁CAS,悲观锁synchronized、ReentrantLock。”

“那synchronized和lock你知道有什么区别吗?”

“Lock 能完成 synchronized 所能实现 Lock 相对 synchronized 线程有更直观的语义和更好的性能。 Lock 是重入锁,即一个线程可以多次获取同一个锁,重入锁的性能相对 synchronized 较高;不过从 JDK6.0开始,JDK 在 synchronized 做了大量的优化,使得两者性能差距缩减。Lock 需要利用 unlock()方法在 finally 中手动释放锁标记;而 synchronized 可以自动释放锁标记。”

“死锁要怎么处理?”

“改变加锁的顺序,利用 Lock 中的 tryLock()方法试图获取锁标记,尽可能避免锁的嵌套使用。”

“内存模型知道吗?”

“嗯......”我冥思苦想半天,忘记了,这个太难背了,“我记不起来了。”

他嘴角微扬,反而比刚才更高兴,“虚拟机栈:描述的是 java 方法执行的内存模型,每个方法被执行的时候,都会创建一个“栈帧”用于存储局部变量,操作栈,方法出口等信息。每个方法被调用到执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。声明周期与线程相同,是线程私有的。堆内存:也叫 java 堆,CG 堆。是 JVM 中所管理的内存中最大的一块内存区域,是线程共享的,在 JVM 启动时创建。存放了对象的实例及数组。方法区:用于储存虚拟机加载的类信息,常量,静态变量,是各个线程共享的内存区域运行时常量池:方法区的一部分,Class 文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息就是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中。”他顿了顿,“我能抽根烟吗?”

“不能。一会儿就睡觉了,一股烟味没法睡。”

他还是自顾自地拿了根烟点着了,“我就抽一根。”他抽了两口,继续说:“程序计数器是最小的一块内存,它的作用是当前线程所执行的字节码的行号指示器,在虚拟机的模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,异常处理,线程恢复等基础功能都需要依赖计数器完成。直接内存:直接内存并不是虚拟机内存中的一部分,也不是 JVM 规范中定义的内存区域。jdk1.4中新加入的 NIO,引入了通道与缓冲区的 IO 方式,它可以调用 Native 方法直接分配堆外内存,即本机内存,不会影响到对内存的大小。设计模式你都知道哪些?”

“单例模式,多例模式,工厂模式,适配器模式,代理模式。”

“嗯,你知道单例模式有哪几种吗?”

“懒汉模式,饿汉模式。”

“他俩有什么区别呢?”他说着又点了一根烟。

“诶?你不是说好了就抽一根吗?”

他撒娇似的眼神看了我一眼,说:“说区别呢?”

“懒汉模式的话是刚开始只声明不创建,使用的时候才创建,饿汉模式是刚开始在声明的时候直接创建对象。”

“其实也就这么多东西,细节你在看看,spring那些注解你看看,AOP、IOC。”他看了眼手机,好像有什么急事,也不提问了,“你简历呢?我给你看看。”

“电脑上。”

“电脑呢?”

“包里。”

“赶紧拿啊,不然让我咋看?”

我赶紧打开电脑包,启动电脑。

“还可以,没啥大问题,但是你这项目写的太详细了,你可以稍微简略一点儿,不然你都写了人家到时候看简历就行了,还问你啥啊,而且你这写的这么详细,倒时候面试你一紧张答不上来,人家也知道你哪些没答上来,你不写他们很多不知道细节,并不会问太多的。”我把电脑放在落地窗上,我俩凑在电脑屏幕前,可以闻到他身上淡淡的酒味,我正跑了神,他忽然道:“你又漂亮了。”

“一直很好看。”

“追你的人不少吧。”他扭头看着我。

感受到他灼热的目光,我随口答:“还行还行。”

他忽然打我胳膊一下,吓了我一跳,“你还可以可以,你还嘚瑟上了。”

“你打我。”我指着他,一脸不可置信。

“我就打你,怎么?”

我也打了他一下,说:“让你打我。”

打装作不经意对我说:“你刚才出去我看了一下,你上面两张床,我就睡你这儿了。”

“啥?不行。”

“就睡一觉我就走了,我爸妈和我姐在我那儿呢,明天一早租了车去舟山,我五点就走。你看看几点了?”

“十二点十分。”

“太晚了,我在你这儿睡一晚上,明天就走,就这样说定了。”说完径直穿过客厅走上了楼梯,在上面喊:“我睡哪边?”

“有一张床我上面放有衣服,你睡另一张吧。”看他这样子也不准备走了,也赶不走,我洗了个脸也就上了楼。

拉上隔帘和窗帘,空调温度设置到二十四°,就换了睡衣,盖上被子,准备睡觉。

那边传来声音,“我们聊聊天吧,好久不见了。”

“困了,不聊,睡觉。”我翻个身,打开手机。

“我这边好冷啊,你空调没开吗?”

“开了啊,空调在我这边,要不我们换换,你睡这张床?”

“不用了。”忽然帘子一拉,他走过啦,坐到我床边的吊椅上,“我们聊聊天吧。”

“你咋过来了?”

“那边太冷了。”他语气里好像有点儿撒娇的感觉。

“那我睡那边吧。”我说完起身就要走。

他淡淡来了句,“别走,以后可能就没这机会了。”

我顿住,继续躺了下来。

“你最近还好吗?”他幽幽来这么一句。

“还好。”我拿被子捂住大半脸,使劲儿往被子里钻。

“我这段时间每天就学学英语,下班回家偶尔周末打打游戏,有空了周末偶尔和朋友出去吃个饭。其实这段时间也有几个女生追我,朋友知道我单身也给我介绍了女生让我认识,可是我没有什么兴趣,也不想耽误了别人,要是以前,我可能就收了他们,随便玩玩,但是现在年纪大了吧,没啥意思感觉。”

“给我讲这些干什么?”

“咱们不是聊天呢吗?”

“我不想知道你私生活,跟我有啥关系。”我又往被窝钻了钻。

“好冷啊。”他忽然钻进我被窝。

“你干啥?孤男寡女的。”我往另一边靠了靠。

“别骗自己了。”他凑近我耳边,“其实你内心是期待的,不是吗?不然你也不会让我睡你这儿吧。”