记某团面试

我特别喜欢这些没有笔试就能面试的这种,尤其是某条的笔试,感觉就是掐尖的,那笔试题牛的一比,做过一次我就不想再次接触了,从此愿与它阴阳两隔,我对自己的定位就是一般人。没啥,顺便吐个槽而已!我得做下回忆,总结总结:
约的是两面,一面的时候,上来就让我做一个自我介绍,我就把我现状以及这两年的经历介绍了一下,然后就讨论起来项目的事了,我的项目都是大水货,一个是实验室做的,一个是我自己在网上自己找的一个。我就把实验室的那个介绍开了,扯着扯着扯到了负载均衡,于是第一个问题就来了:让我说一下软件工程的负载均衡。问我知道Ngnix吗,我说只听说过,没用过。然后我以我自己的理解以及我项目里的负载均衡进行了描述,还有web方面的负载均衡,HTTP、CDN、网络层、链路层的负载均衡几乎都进行了一下描述,也不知道是不是答案,反正我尽可能的去答了。这个内容是架构里面的,之后要再复习一遍!然后又聊起网络,比如tcp和udp的不同、我所知道的除了常用协议之外的协议(我讲了一下航电系统里面的协议,还得扩展扩展呀)、网络拥塞(我忘了拥塞避免这个名词了,不过原理还是说了)、三次握手啥的,然后问了一个很基础很基础的:Thread和Runnable的区别,为什么经常使用Runnable呢?这个我竟然卡住了,呵呵哒!一会百度一下!然后又到多线程,使用什么措施来保证同步?我说锁和。。。来着;sychronized和ReetrantLock之间的区别,sychronized锁是公平锁吗?为什么呢?这个我也卡住了,我给他的答案是我感觉这个应该是由底层的算法决定的,如果它能保证等待的线程能按照FIFO的顺序来获取锁,那么它就是公平的,如果使用的别的带优先级 的算法之类的不能保证FIFO的顺序,那么就是不公平的锁,所以我给了这么一个判断的结果。我查了下答案:它是非公平锁,它无法保证等待的线程获取锁的顺序(这样可能会保证有些线程永远无法获取到锁)。又问RetrantLock的加锁过程是什么样的?我按着AQS的内容说了一说;然后写了两个代码,都很简单的,一个快排爽了一把,然后写了一个对数组的操作,就是把前面的几项给加起来然后存入数组的一题。然后又问到了数据库的知识,InnoDB和MyIsam的区别?MVCC的具体怎么实现的(还得回看一下)?四种隔离级别,每种隔离级别解决的问题,默认的是哪一种?什么是幻读、脏读?能不能举一个例子?幻读这一块我没能搞定,得查一下,脏读里面那个提不提交我忘了,故意把它给忽略了。差不多一面就这些!
歇了一会,二面就开始了,哎,一杯水都不给上,我早饭都没有吃,好不好。这位面试官效率高的惊人,不过口音有点听不清楚,搞的好几次都会错意了。上来就问我看过JDK源码吗?我说看过一部分,不多。让我讲一下HashMap集合类,我说了一下初始大小,最大,加载因子什么之类的,然后我说存储量达到加载因子量的时候会发生扩容,增加一倍,又问为什么会变为两倍呢?靠什么决定的呢?我说靠资源的利用率以及性能的测试吧,也不知道答案是什么?然后让我说了一下java内存模型,布拉布拉布拉,这次也搞起来了sychronized和ReetrantLock,问我那个性能好一点,我说现在sychronized优化起来和另一个已经差不多了。然后让我说一下sychronized的优化,我说了一下轻量级锁,当时偏向锁和自旋锁怎么也想不起来,应该是面试的缘故吧。把锁记录呀,对象头啦、指针啦啥的描述了一遍,然后又问,当一个线程访问的时候,目前是轻量级锁,当另一个线程再来访问的时候,会发生什么变化,我说应该直接升级为重量级锁吧?他质疑了一下,看来结果应该不是,我就说如果是我的话,我会设置这样的情况发生几次后,再让它升级。接着又扯到设计模式知道吗?我说知道一些,单例、观察者、适配器模式、代理模式,让我讲一下适配器模式。我就举了Future(还是FutureTask来着)中Runnable和Callable的例子,如何把Runnable适配成Callable接口;然后不知怎么滴就讲到了LRU算法,问我是如何实现LRU算法的?我说使用二叉查找树来构建这个数据结构,然后分析了一下时间复杂度,查找最好也就是O(n),后来我又提了hash,但是在hash中查找到最久未使用的仍然不是O(1),然后他让我对它进行优化,增删查找都编程O(1),可以使用组合的数据结构,最后还是没想起来,使用链表和Hash来做,可是我就是想不明白如何在保证大空间的情况下,还能让它有序,他给我提了下LinkedhashMap,一会查一下它的源码!接着聊到了数据库,聚集索引和非聚集索引的区别、堆如何进行垃圾回收、标记-整理和标记-复制的区别(这个没答出来,因为我可能理解错了),关于stop the world在什么时候发生之类的(标记期间使用吗?CMS中。。。。)。差不多就这些吧!

你可能感兴趣的:(笔试)