Java笔试面试

电话面试后的总结

2019-05-25  本文已影响3人  敲代码的小嵩鼠

第一次进行电话面试,大概面了半个小时,完了之后的心情,只有两个字:凉凉

用这篇文章记录一下面试过程中的问题。学会总结才会有进步!

1.对java的理解

java本身是一种面向对象的语言,具有很好的跨平台的能力。他还支持多线程。面试官告诉我,java不是完全面向对象的语言。

2.java为什么可以实现跨平台性

因为它有一个自己独立能解析Java软件的解析器,我们称之为虚拟机(JVM),你把这个软件装在你的操作系统上,它就能帮你执行写好的Java程序,它可以自适应Windows系统和Linux系统。不同的平台对应着不同的JVM,在执行字节码(class文件)时,JVM负责将每一条要执行的字节码送给解释器,解释器再将其翻译成特定平台换将的机器指令并执行,这样就实现了跨平台运行。

3.说一下对多态的理解(里面有包括重写和重载)

多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义

4.什么时候用接口,什么时候用抽象类

    出自:何时使用抽象类?何时使用接口? - 简书

     在java中,抽象类的关键字是abstract,抽象类的被创造出来就是为了被继承。接口的关键字是interface,它可以说是一种更加抽象的抽象类,是对行为进行抽象,只提供一种形式,不提供实施的细节。

从生活的角度看:有一个东西,抽象类表示他是什么,接口表示他可以做哪些事情。例如:一个Person,他有眼睛、肤色,这些描述一个人的特征可以定义在抽象类中,而一个人的行为如打篮球,所以这些可以定义在接口中。

从编程的角度看:1、抽象类适合用来定义某个领域的固有属性,也就是本质,接口适合用来定义某个领域的扩展功能。2、当需要为一些类提供公共的实现代码时,应优先考虑抽象类。因为抽象类中的非抽象方法可以被子类继承下来,使实现功能的代码更简单。3、当注重代码的扩展性跟可维护性时,应当优先采用接口。①接口与实现它的类之间可以不存在任何层次关系,接口可以实现毫不相关类的相同行为,比抽象类的使用更加方便灵活;②接口只关心对象之间的交互的方法,而不关心对象所对应的具体类。接口是程序之间的一个协议,比抽象类的使用更安全、清晰。一般使用接口的情况更多。

5.你对jvm了解多少,说一下jvm的区

JVM就是java虚拟机,它是一个虚构出来的计算机,可在实际的计算机上模拟各种计算机的功能它包含的区有:程序计数器,Java 虚拟机栈,本地方法栈,java堆,方法区,运行时的常量池,直接内存。JVM的作用:它是java字节码执行的引擎,还能优化java字节码,使之转化成效率更高的机器指令。JVM中类的装载是由类加载器和它的子类来实现的,类加载是java运行时一个重要的系统组件,负责在运行时查找和装入类文件的类。

6.定义一个对象后,如果不去new它的默认值是什么,它的默认方法有哪些,构造方法能不能继承

默认值为null,因为每个类都继承了objectl类,所以默认方法有13种

具体每个方法的作用:https://blog.csdn.net/qq_30264689/article/details/81903031

7.能直接使用javaAPI进行反射吗

这个问题我不明白什么意思

8.集合的知识

  (1)set集合怎样确保元素不重复的

      Set是一个接口,常用的Set实现类那就是HashSet了。 

      public HashSet() {  map = new HashMap(); } 

            因为HashSet的底层是由HashMap实现的,而HashSet的add方法,是将元素作为map的         key进行存储的,map的key是不会重复的,所以HashSet中的元素也不会重复。

  (2)讲一下hashmap插入的经过

         https://blog.csdn.net/moakun/article/details/82943366

  (3)linkedList和arrayList的区别

          ArrayList底层使用时数组。LinkedList使用的是链表。

           数组查询具有所有查询特定元素比较快。而插入和删除和修改比较慢(数组在内存中是一块   连续的内存,如果插入或删除是需要移动内存)。

          链表不要求内存是连续的,在当前元素中存放下一个或上一个元素的地址。查询时需要从   头部开始,一个一个的找。所以查询效率低。插入时不需要移动内存,只需改变引用指向即可。所以插入或者删除的效率高。

        ArrayList使用在查询比较多,但是插入和删除比较少的情况,而LinkedList使用在查询比较   少而插入和删除比较多的情况。

  (4)为什么linkedList增删快,arrayList查找快

9.实现线程的几种方式,对线程池的理解

线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用 new 线程而是直接去池中拿线程即可,节省了开辟子线程的时间,提高的代码执行效率。

常用的线程池有哪些?

newSingleThreadExecutor:创建一个单线程的线程池,此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

newFixedThreadPool:创建固定大小的线程池,每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。

newCachedThreadPool:创建一个可缓存的线程池,此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说 JVM)能够创建的最大线程大小。

newScheduledThreadPool:创建一个大小无限的线程池,此线程池支持定时以及周期性执行任务的需求。

newSingleThreadExecutor:创建一个单线程的线程池。此线程池支持定时以及周期性执行任务的需求。

10.你了解的线程锁有哪几种,分别描述一下

     java中的锁有哪几种 - 简书

11.数据库有哪几种存储引擎,mysql数据库的锁有多少种

  存储引擎:CSV存储引擎,Archive存储引擎,Memory(heap)存储引擎,myisam存储引擎(MySQL8.0被废弃掉了)https://blog.csdn.net/lx_Frolf/article/details/85339941

12.使用dubbo的好处,zookeeper至少有几个节点3个

上一篇下一篇

猜你喜欢

热点阅读