Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 98 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

## Contents
* [数据结构和算法](#数据结构与算法)
* [Java 核心](#core-java)
* [Java 核心](#Java核心)
* [Android 核心](#core-android)
* [架构](#architecture)
* [设计问题](#design-problem)
Expand Down Expand Up @@ -94,6 +94,103 @@
* 深度优先搜索
* 贪心算法

### Java 核心

* OOP概念
- OOP,Object-Oriented Programming,即面向对象编程,是使用类,对象,继承,多态,抽象和封装设计程序的方法论。

* 抽象对象和接口的不同之处
- 抽象类是包含具体方法和抽象方法的类,抽象方法必须被子类继承,抽象类是可继承的。
接口就像一个类的蓝图/合约。它只包含子类必须继承的空方法,子类提供了每个方法的具体实现。接口是可实现的。

* 什么是序列化?你是怎么实现它的?
- 序列化是将对象转为字节流的过程,为了保存一个对象到内存,在被重新创建的时候能够仍然使用原始的状态和数据。在 Java 中有两种方式可以实现序列化:就是通过实现 Serializable 或者 Parcelable,但是在 Android 中尽量不要使用 Serializable,使用 Parcelable 比 Serializable 效率高大概十倍,因为 Serializable 使用的反射是一个很慢的进程,并且会产生大量的临时对象经常会导致垃圾回收。

* 什么是单例类?
- 单例是一个类只能被实例化一次。单例模式限制了一个类只能实例化成一个对象,当一个对象需要在整个系统中协调行为的时候是很有用的。这个概念有时普遍用于当只有一个对象存在操作更有效,或者对于一个严格实例化确定数量对象的系统。

* 什么是匿名类?

* 对于 String 来说,== 和 .equals 的区别是什么?

* hashCode() 和 equals() 是用来做什么的?

* final, finally, finalize 是什么?

* 什么是内存泄漏,Java 是怎么处理它的?

* 什么是垃圾回收?它是怎么工作的?
- 所有位于堆上的对象都被JVM管理,只要对象被引用,JVM就认为它是存活的,一旦对象不再被引用,也就是不会被代码所使用,垃圾收集器就会回收它并收回不再使用的内存。

* Array 和 ArrayList

* HashSet 和 TreeSet

* Java 中的类型转换

* 重载和重写的区别
- 重载是发生在编译时,而重写发生在运行时。重载方法声明的绑定在编译时调用,而重写方法声明的绑定在运行时。
静态方法可以被重载,也就是说相同方法名的静态方法可以不只有一个。静态方法不可以被重写,即使你在子类里声明了一个静态方法,它与父类中相同方法名的那个方法也无关。
它们最基本的区别就是:重载在同一个类里,而重写是父类和子类中发生的。重写是子类对父类中方法的具体实现。
静态绑定是用于重载方法,动态绑定用于重写方法。相比于重写,重载给出了更好的体验,原因就是重写是动态绑定的。
私有方法和最终方法可以被重载但不能被重写,一个类可以有多个相同方法名的私有/最终方法,但是子类不可以重写父类的私有/最终方法。
返回值类型不能区分方法重载,方法重载中返回值类型什么不重要,它可以是相同的,也可以是不同的。但是在方法重写中,重载方法必须和原方法具有相同的返回值类型。
方法重载中,参数列表需要时不相同的。方法重写中,参数列表必须是相同的。

* 你知道有哪些访问修饰符?每个的作用范围都是什么?

* 一个接口可以继承另一个接口吗?

* Java 中 static 是什么意思?

* Java 中 static 方法是否可以被重写?

* 什么是多态?继承呢?

* Integer 和 int 的区别什么?

* Java 中是否可以传递值或引用,请详细说明。

* 什么是线程池?

* 局部变量,实例变量和全局变量的区别是什么?

* 什么是反射?

* Java 中强引用,软引用,弱引用都是什么?

* 什么是依赖注入?你能举出几个库吗?你用过哪些吗?

* synchronized 关键字的含义。

* 为什么说 String 是不可变的?

* 修饰符 transient 和 valatile 是用来干什么的?

* finalize() 方法是干什么的?

* try{}finally{} 实现流程是什么?

* 对象的实例化和初始化的区别。

* 静态块什么时候执行?

* 解释 Java 中的泛型。

* StringButter 和 StringBuilder 的区别。

* StringBuilder 怎么去避免不可变 String 的分配问题?

* 什么是自动装箱和自动拆箱?

* Enumeration 和 Iterator 的区别。

* Java 中 fail-fast 和 fail-safe 的区别是什么?

* 什么是 Java 优先队列?

* 什么是设计模式?

### 贡献者

感谢这些无私的贡献者,排名不分先后。
Expand Down