面经June 20, 2019

具体的顺序已经记不太清楚了,只记得部分的问题和大概的回答过程了,总共是一个多小时这个样子,也没全都记得了。

记得的问题和回答

  1. 八大基本数据类型

    byte, short, int, long, char, boolean, float, double


  2. 什么是OOP

    经典面试题了,我说的是多态,封装和继承,并解释了一下分别都是什么概念。不过面试官好像更在意class方面的问题,问了一下在类方面,那么就是public, private, default, protected这样,并且分别说了一下每个关键词使得类/变量/函数允许的访问区间。


  3. IOC是什么

    前一天刚刚有看到ioc这个概念,大概就是说,这是spring框架里面的一个模块,后面说的一些就记不太清楚了,但是关键字就是解耦


  4. 数据库里面clustered知道吗

    蒙的……大概就是说clustered就是以一定的规律(pattern)将数据归类在了一起,non-clustered的就是没有归类,所有的东西都是散着的。对于clustered的数据,因为知道其规律性,所以在搜索数据的时候在依照规律来搜索就能快很多。


  5. 数据结构知道吗?说一下Collection吧

    刚开始只说了List和Map,表示了主要用的是ArrayList和HashMap。之后面试官明示了说,”Linked List知道吗?”后开始补救。

    具体说明ArrayList和Linked List的区别,ArrayList的底层是以Array来实现的,Linked List则是以Node来实现。虽然对于通常的搜索以及增删改查来说,时间法度都是O(n),但是一旦数据在很大的情况下,Linked List的增删改的平均时间是要优于ArrayList的。

    之后画图表示为什么Linked List优于ArrayList。

    对于Linked List来说,需要在AC之间加入B的话,只需要将A的next指向B,将B的next指向C,之后的操作就不需要进行了。但是对于ArrayList来说,需要在AC之间加入B的话,必须是要在C的位置上修改成B,随后将C之后所有的数值/对象向后移一个位置。


  6. left join和inner join的区别是什么

    这个说的有点笼统,就是说left join是以左边的表为主,在进行连表搜索的时候以左表为主。inner join的话就是两表相乘,获得所有的值。

    面试官大概没有听懂什么意思,随后举例问我,如果左表有1234四个,有表有123456,那么在做left join的时候显示的数据是什么?

    1234.


  7. equals和==的区别

    ==是直接判断,如果是基本数据类型的话,数据类型的数,如果不是基本数据类型的话,则是判断对象的地址;对于equals来说,则是根据它已经写好的的equals的函数去对两个对象进行比较。

    或许表述的时候面试官有些不太清楚,面试官直接写了代码提问:

    1
    2
    String a = "a";
    String b = new String("a");

    那么这两个用equals和==会一样吗?

    答:用==不一样,因为a的话是在一个常量池中新建了一个“a“,但是对于b来说,它强迫性的建了一个新的对象,所以ab地址不同,用==的话就会不一样。但是用equals,因为双方都是a,所以是一样的。

    面试官追问:知道常量池嘛……那再问你……下面这个ac一样吗:

    1
    2
    3
    String a = "a";
    String b = new String("a");
    String c = "a";

    答:一样,因为对于c来说直接在从常量池中拉下来的a,所以ac之间的地址相等。


  8. StringBuffer和StringBuilder的区别

    这道题好像记反了……反正就是说线程安全的有用synchronized锁住,线程不安全的就没有用synchronized锁住。


  9. 哦,还知道synchronized啊,那说下对线程的理解吧

    ……多说多错……反正记不太清了,就说了下生命周期之类的……


  10. 说下JVM

    这个好像有点做死了……反正就是说有jdk,jre,jvm,jdk的话就是java development kits, jre是java runtime environment, jvm是java virtual machine。jdk是最大的包含所有,但是对于大多数的软件来说,只需要有jre能够让程序运行起来就可以了。jvm就是java虚拟机,也是包含在jre里面,里面有常量池和静态域,java中静态的是在程序一启动就在静态域之中加载好了,但是其他的类和函数是在使用到的时候加载到了stack上的。


  11. 那说说stack和queue吧(多说多错……)

    就说stack是先进后出,queue是先进先出(期间面试官有在反复提问是否如此,可能是在搞我,这个时候就要自信自己的答案,我自己就是不自信所以就有点含含糊糊……和两个sb一样),一直到说函数实在stacks上的,之后才又流利起来。


  12. 斐波那契数列知道吧,写一下伪代码吧

    1
    2
    3
    4
    public int fib(int n) {
    if (n == 0 || n == 1) return 1;
    return fib(n-2) + fib(n-1);
    }

    很经典的面试题了,就是讲一下用recursion(递归)做,将问题一步步化简到最之前的,也就是当n=1的时候,随后再一步一步加回来。


  13. 八皇后听说过吗?说一下自己的想法吧。

    ……凉凉……问的时候都懵了怎么会被问到八皇后……

    最后说了个暴力解……


  14. delete, truncate的区别

    其实是笔试的一道选择题,但是把delete和truncate的语法拉了出来,刚开始面试官还问两个哪个是对的哪个是错的,坚持了自己的答案后面试官笑着点了点头。

    不过后面的追问凉了,问delete和truncate的区别在哪里。说了个delete能删除单行,truncate删除整个表,和drop一样。

    追问truncate和drop的区别在哪。

    ……多说多错,血的教训……


  15. final的作用

    可以加载在变量上,那么变量就成为了常量;可以加在类上,那么类不可以被继承改写。

    考官提示:只能加在常量和类上吗?

    还可以加在函数上,那么函数也不可以被重写。

    考官追问:为什么要加在函数上。

    为了安全性,有的时候会想要class被继承,但是其中有一些的函数不希望对方能够重写。


  16. interface和abstract的区别

    在1.8以前interface是一个total abstract的,但是在1.8的时候可以加入了default,在1.9之后甚至可以加入private。

    考官:哦……还对1.8之后有点了解啊(√)

    对于abstract来说,里面是可以定义和写完函数的,也不需要像interface一样,所有的变量都是抽象的。因为java是单继承的,一个class只能继承一个父类,但是却可以implement多个接口,所以利用interface和abstract也可以完成多继承的一个思想。

    考官:这样……那么interface和abstract的其他区别呢……就是说可不可以被实例化。

    interface是绝对不可以被实例化的,但是对于abstract class来说……因为你写了abstract class就会有子类去继承它,那么到了最底层的时候,所有的抽象方法都被重写的时候,那个点就是可以实例化了。


总结

知道的可以随便口嗨一点,嗨多点也无所谓,让面试官知道你的知识面,但是对于不是很熟悉的部分……

多说多错!血的教训……

-------The end of this article  Thank you for your reading-------
0%