2019java面试基础问题总结(1~20题)
1. 作用域 public,protected,private,以及不写时的区别?
Public:不同包、同一包、类内都可用
Private:类内
Protected: 不同包的子类、同一包、类内都可用
不写时:同一包内、类内
2. 不可变对象?
指对象一旦被创建状态不能再改变。任何修改都会创建一个新的对象,如 String、Integer及其它包装类。
3. 能否创建一个包含可变对象的不可变对象?
可以。不要共享可变对象的引用就可以了,如果需要变化就返回原对象的一个拷贝。最常见的例子是对象中包含一个日期对象的引用.
4 . java 创建对象的方式
采用new 通过反射 采用clone 通过序列化机制
前2者都需要显式地调用构造方法. 造成耦合性最高的恰好是第一种,因此你发现无论什么框架,只要涉及到解耦必先减少new的使用.
5. switch中能否使用string做参数
在idk 1.7之前,switch只能支持byte,short,char,int或者其对应的封装类以及Enum类型。从idk 1.7之后switch开始支持String.
6. Object中有哪些公共方法?
equals() clone() getClass() notify(), notifyAll(), wait()
7. object中定义了哪些方法?
clone(), equals(), hashCode(), toString(), notify(), notifyAll(), wait(), finalize(), getClass()
8. HashMap和HashTable的区别
HashTable是线程安全的HashMap不是
HashMap中允许存在null键和null值,HashTable中不允许
9. String 是最基本的数据类型吗?
不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
10. float f=3.4;是否正确?
不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。
11. Java有没有goto?
goto 是Java中的保留字,在目前版本的Java中没有使用。《The Java Programming Language》附录中有goto和const,但这两个是目前无法使用的关键字,因此有些地方将其称之为保留字,其实保留字这个词应该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库中使用过的有特殊意义的单词或单词的组合都被视为保留字。
12. http1.0,http1.1,http2.0区别
1.0相比1.1可以一次传输多个文件,各类浏览器大概都支持3~5个请求同时发送。
http2.0主要是二进制的格式替代了原来的文本,增加了多路复用和首部压缩解决了head of line blocking,另外还有server pushing等新特性。
协议的东西还是建议看一看官网的说明。
13. Get/Post对缓存的影响
此题其实是问浏览器缓存对于HTTP Method中Get和Post的请求是否支持,答案是不支持Post Method。Get可以被浏览器缓存。
14. 多态的好处
允许不同类对象对同一消息做出响应,主要优点:
可替换性:多态对已存在代码具有可替换性;可扩充性:增加新的子类不影响已经存在的类结构;接口性:多态是超累通过方法签名,想子类提供一个公共接口,由子类来完善或者重写它来实现的;灵活性;简化性。
15. 代码中如何实现多态
接口实现继承父类重写方法同一类中进行方法重载
16. 虚拟机是如何实现多态的
动态绑定技术(dynamic binding),执行期间判断所引用对象的实际类型,根据实际类型调用对应的方法.
17. 接口的意义
接口的意义用三个词就可以概括:规范,扩展,回调.
18. 抽象类的意义
为其他子类提供一个公共的类型
封装子类中重复定义的内容
定义抽象方法,子类虽然有不同的实现,但是定义时一致的
19. 父类的静态方法能否被子类重写
不能。子类继承父类后,有相同的静态方法和非静态,这是非静态方法覆盖父类中的方法,父类的该静态方法被隐藏,另外子类可集成父类的静态与非静态方法,至于方法重载我觉得它其中一要素就是在同一类中,不能说父类中的什么方法与子类里的什么方法是方法重载的体现。
20. JAVA多态的实现原理
a.抽象的来讲,多态的意思就是同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
b.实现的原理是动态绑定,程序调用的方法在运行期才动态绑定,追溯源码可以发现,JVM 通过参数的自动转型来找到合适的办法。