Java面试常见的题目
2017-11-09 11:11
288 查看
Static
语法不同 静态成员需要在前面加static关键字
生命周期不同 非静态的依赖对象的生命周期 静态的依赖类的不依赖对象
作用域不同 非静态的作用在构造方法和普通成员方法 static静态的多了一个静态方法。
静态方法:静态方法内不能使用this 静态方法内只能访问静态成员或者方法不能访问非静态成员 类加载的时候定义
非静态方法:对象被实例化的时候被定义 非静态方法既能调用静态的方法 也可以调用其他的非静态成员或者方法
重载(overloading)和重写(override)
重载:方法名相同 参数列表不同 返回值类型不同 不可以根据返回值类型来判断是否构成重载。
重写:通常发生在子类和父类之间 通常是子类来重写父类的方法 方法名相同 参数列表相同 返回值类型相同
List 有序 不唯一的
ArrayList 扩容为当前的50% 尾部添加效率高 遍历效率高
LinkedList 底层有链表实现 插入,删除元素效率高 遍历效率低
Set 无序 唯一
HashSet 底层哈希表
TreeSet 底层二叉树
LinkedHashSet 用一个链表维护一个添加的顺序 效率没有HashSet高 但是是一个有顺序的
Map
HashMap key-value 键值对 继承AbstarctMap类 都实现了Map接口 线程非安全的 null可以作为键但只能有一个 扩容为2倍加1 使用了Enumeration的遍历方式
HashTable 继承Dictionary类 线程安全的 key和value都不允许出现null 扩容为2的整数次幂
LinkedHashMap
TreeMap
Integer int 包装类
int的初始值为0 Integer的初始值为1
Integer i=20和int i2=20 相比较为true;
垃圾回收:内存不足的时候进行 或者主动调用system.gc()去通知Jvm进行垃圾回收,不会立即执行,优先级很低
final 修饰符 修饰变量变常量 必须给初始值后面只能读取不可改变
finally 使用在try catch中 始终执行的
finalize 方法名 在确定一个对象没有被引用时对这个对象调用。
常用类:
String:不能被继承 也就是不能有子类 底层使用的final char[]数组实现的 一旦一个字符串创建之后 自身长度不可以改变。避免使用+ 速度慢 开辟新的内存空间 效率低
StringBuilder 线程非安全的 执行速度快 效率比较高 带缓冲区的字符串
StringBuffer 线程安全的 执行速度比StringBuffer慢
异常:
throw:用在方法内部 用于抛出对象后面跟一个对象 只能抛出一个异常对象
throws 用于方法声明处 后面跟异常的类型 可以抛出多个异常类型 用逗号分隔
线程和进程的区别:进程是包含线程的 一个进程包含多个线程或者说一个进程至少要有一个线程 运行的程序叫进程。
线程:实现Runable接口 重写Run方法 继承Thread类
线程的几种状态:
新生new的时候 就是新生 就绪调用start方法就是就绪 运行 当一个就绪状态的线程的cpu时间片来临的时候就是运行 阻塞sleep 死亡stop
优缺点
采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,
所以非常适合多个相同线程来处理同一份资源的情况,
从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。
语法不同 静态成员需要在前面加static关键字
生命周期不同 非静态的依赖对象的生命周期 静态的依赖类的不依赖对象
作用域不同 非静态的作用在构造方法和普通成员方法 static静态的多了一个静态方法。
静态方法:静态方法内不能使用this 静态方法内只能访问静态成员或者方法不能访问非静态成员 类加载的时候定义
非静态方法:对象被实例化的时候被定义 非静态方法既能调用静态的方法 也可以调用其他的非静态成员或者方法
重载(overloading)和重写(override)
重载:方法名相同 参数列表不同 返回值类型不同 不可以根据返回值类型来判断是否构成重载。
重写:通常发生在子类和父类之间 通常是子类来重写父类的方法 方法名相同 参数列表相同 返回值类型相同
List 有序 不唯一的
ArrayList 扩容为当前的50% 尾部添加效率高 遍历效率高
LinkedList 底层有链表实现 插入,删除元素效率高 遍历效率低
Set 无序 唯一
HashSet 底层哈希表
TreeSet 底层二叉树
LinkedHashSet 用一个链表维护一个添加的顺序 效率没有HashSet高 但是是一个有顺序的
Map
HashMap key-value 键值对 继承AbstarctMap类 都实现了Map接口 线程非安全的 null可以作为键但只能有一个 扩容为2倍加1 使用了Enumeration的遍历方式
HashTable 继承Dictionary类 线程安全的 key和value都不允许出现null 扩容为2的整数次幂
LinkedHashMap
TreeMap
Integer int 包装类
int的初始值为0 Integer的初始值为1
Integer i=20和int i2=20 相比较为true;
垃圾回收:内存不足的时候进行 或者主动调用system.gc()去通知Jvm进行垃圾回收,不会立即执行,优先级很低
final 修饰符 修饰变量变常量 必须给初始值后面只能读取不可改变
finally 使用在try catch中 始终执行的
finalize 方法名 在确定一个对象没有被引用时对这个对象调用。
常用类:
String:不能被继承 也就是不能有子类 底层使用的final char[]数组实现的 一旦一个字符串创建之后 自身长度不可以改变。避免使用+ 速度慢 开辟新的内存空间 效率低
StringBuilder 线程非安全的 执行速度快 效率比较高 带缓冲区的字符串
StringBuffer 线程安全的 执行速度比StringBuffer慢
异常:
throw:用在方法内部 用于抛出对象后面跟一个对象 只能抛出一个异常对象
throws 用于方法声明处 后面跟异常的类型 可以抛出多个异常类型 用逗号分隔
线程和进程的区别:进程是包含线程的 一个进程包含多个线程或者说一个进程至少要有一个线程 运行的程序叫进程。
线程:实现Runable接口 重写Run方法 继承Thread类
线程的几种状态:
新生new的时候 就是新生 就绪调用start方法就是就绪 运行 当一个就绪状态的线程的cpu时间片来临的时候就是运行 阻塞sleep 死亡stop
优缺点
采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,
所以非常适合多个相同线程来处理同一份资源的情况,
从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。
相关文章推荐
- Java常见笔试面试题目解析(一):final与static final变量(原生类型)的初始化方式
- Java面试常见题目汇总(主要是概念)
- 视频教程:Java常见面试题目深度解析!
- 面试常见题目:大数相加的Java实现(考虑负数情况)
- java 框架 面试常见题目
- 面试10大算法汇总+常见题目解答(Java)
- 收藏版:java常见面试题目精讲视频教程!
- [笔面] Java开发常见面试题目
- java数据库常见面试题目
- java常见的经典面试题目--on going updated
- Java常见笔试面试题目深度剖析系列之:Java方法参数传递详解
- Java常见笔试面试题目解析(十):Java中检查的异常与未检查的异常
- 收藏版:java常见面试题目精讲视频教程
- Java常见笔试面试题目深度剖析系列之:Java方法参数传递详解
- Java常见笔试面试题目解析(二):final与static final变量(引用类型)的引用不变
- 面试中常见递归题目 Java版
- Java常见笔试、面试题目深度剖析
- 收藏版:java常见面试题目精讲视频教程!
- java异常面试常见题目
- java面试常见题目