Oracle面试之行

    之前也是和同学做了一下Oracle的PAC测试,也没有怎么去想结果,但是在周六的晚上九点半接到电话,说今天要去面试- -,然后就翘了计算机组成去面试了,其实呢,面试官挺好的,主要我去的比较早,然后一个人挺无聊的,就看了一会kindle.

    接下来说面试的内容了,总体来说,难度不是很难,但是很基础,有些内容以前是看到的,但是在这种情况下,一时间也没有想起来。。。不得不说是一个败笔。

    第一个是英文的自我介绍,这是被人坑的,我之前问了一下进甲骨文的学长,他说,不需要进行英文面试,于是我就没有准备,然后,就悲剧了,。还好我的英文还没有想像中的那么烂,不过有一个很有趣的小插曲,就是中途我有一个单词不会拼,就是红外传感器,传感器是sensor但是红外我就不知到了,我就直接问面试官,红外怎么拼。。他说我也不知道-= =,于是就在这样的气氛中,过了,不过他会打断你,然后问几个问题,我很神奇的发现,我居然临时使用英文把我做离线地图的方法,和过程描述给他了。。它还真听懂了-= -。。。还知道,我是假装浏览器的行为爬下来的。。

    接下来是技术面试了,就是一些基本的问题:

        1.抽象类和接口的不同,什么时候使用继承,什么时候使用实现接口。新建一个ArrayList对象,这边考察了装箱和拆箱,还有范型编程,还有ArrayList和LinkedList的区别等等,这些都是小儿科,常规的题目。

        2.描述一下配置环境变量的时候需要设置PATH,和CLASSPATH,这些都是干什么的。这个很简单,第一个是执行路径,第二个就是运行时寻找库的路径,这也没什么。

        3.然后就是考察对JDK源码的理解,比如说Object的源码,我当时只说了toString(),hashCode(),本来还能说equals()的,结果最终还是没能想起来。然后回来看了一下源码,发现自己还是弱了。。。这是源码中的方法,这一点还是比较失败的。

        

        4.接下来是多线程的问题,不过可能是我和他的理解不是很一样,就是两个线程访问一个对象的时候,会不会读脏数据。我的理解转换成代码就是这样的:

        

        这样的输出很明显都是Mike,但是如果在线程之间加上Thread.sleep(1000);这样的话,结果就是Mike,Simon了,所以,对于这一点,我是这么理解的,但是好像对方不是很赞同。。因为我的理解是,线程中有缓冲,所有线程修改的值都会写入这个缓冲之中,然后会刷新回主存,有关这个问题,我在一篇文章里也提到过,就是《volatile不能保证线程同步》,所以不知道这个问题怎么样。

        5.然后要求手写一个简单的算法,就是快速排序,我的代码中出现了一个溢出的bug,但是在描述过程中还是能把过程描述清楚的。

        6.接着就是问,在hashcode()方法的返回值,我把这个和序列化搞混了,然后回答了long型= =,对方接着问这个函数的作用和功能。这个我只知道在hashmap和hashtable中作为一个索引。但是如果两个类的hashcode相同会发生什么。。这个我就不知道了- -,只能胡乱说了- -。于是我现在查了下资料,也写了代码验证了一下。

        这是引用的结果:

            在Object类中定义的几个hashCode约定如下:
                1. 在同一应用中,一个对象的hashCode函数在equals函数没有更改的情况下,无论调用多少次,它都必须返回同一个整数。
                2. 两个对象如果调用equals函数是相等的话,那么调用hashCode函数一定会返回相同的整数。
                3. 两个对象如果调用equals函数是不相等的话,那么调用hashCode函数不要求一定返回不同的整数。
            我们在改写equals 和 hashCode 函数的时候,一定要遵守如上3条约定,在改写equals的同时也改写hashCode的实现,这样才能保证得到正确的结果。

        然后期间穿插了几个hashcode的问题,这几个问题都没有回答的很好。

        7.然后是简单的描述一下Java代码到执行的一个过程,我扯了下javac,和字节码,说了下字节码中间的内容,比如前几个字节是魔数cafebabe,然后是版本号,然后是常量池,然后再说道运行时的加载,和Java的内存模型,比如,方法区,堆区等,然后把HotSpot虚拟机的分代垃圾回收机制说了下,看起来还是很满意的,然后又提到了JIT,及时编译技术,我的回答也还可以。多亏了《深入理解JVM-周志明》的这本书,让我学到很多。

        8.然后又是描述一下Spring的作用,这个我只回答了Spring MVC的功能 – -,这个真的是我不擅长的地方。。但是在他给的选择里,Maven,Tomcat中,Maven是个工具,没什么好说的,Tomcat现在正在看他的源代码,没有太深入。。也就之后Spring了= =,有点坑自己的意思。。

        9.还有一个问题是关于HTTP协议的,我本来想从TCP/IP开始说起,但是他让我直接描述HTTP包,于是。。我就凭着印象说了几个,但是感觉还是不是很好,因为,我没有能够结合REST进行讲解,这一点,现在我也查了资料,同时也用自己的浏览器实验了一把,就是这样的HTTP:

        

        可能,他就是希望我能把POST,DELETE,PUT等方法都描述出来吧,HTTP协议,现在也准备好好看一下了。

        10.还有问题就是简单的描述下Ajax的工作原理,这个比较简单。

        11.还有Session和Cookie的区别,这个有一点我没有想到。。。就是Session是内存中的Cookie我的理解错了= =,其实这个内存是指服务器的内存= =。

        12.还有几个问题= =,我想不起来了。。。但总的来说,难度不高,都是很基础的内容。

    说一下,我被面了近50分钟- -。这一点比较出乎我的意料。。。说到底,我还是在一些基础上欠缺了很多,毕竟是人生的第一场面试,而且还是甲骨文这种级别的公司。。。感觉就是不一样- -。紧张还是有的。。不过收获还是很多的,毕竟现在还有机会,还年轻。

    再下楼梯的时候,居然是和我的面试官一起坐的电梯。。当然没问我的表现怎么样这种问题。我就问了下贵公司需要选拔怎样的人,得到的答案和阿里的是一样的,就是基础稳,其实项目怎么样真的不重要,关键是基础,勿在浅滩建高楼。现在毕竟不是做项目的时候,准备整理下好好看算法了。

    明年加油!

4 Replies to “Oracle面试之行”

Leave a Reply to Mike Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.