本文档包含了针对杭州端点公司在招聘Java开发工程师时所使用的面试题集,内容涵盖了算法、设计模式及项目实践等多个方面。
### 杭州端点公司Java面试题解析
#### 一、选择题解析
**1. ArrayList有而LinkedList没有的方法**
- `ArrayList` 和 `LinkedList` 都实现了 `List` 接口,但它们的内部实现机制不同。
- `ArrayList` 是基于数组实现的列表,支持快速随机访问;而 `LinkedList` 是基于链表实现的列表,插入和删除操作更快。
- `ArrayList` 提供了更多关于数组的操作方法,例如 `ensureCapacity(int minCapacity)` 和 `trimToSize()` 等用于调整容量的方法。
**2. 抽象类和接口的特点**
- **抽象类**:
- 可以包含构造器、抽象方法、具体方法以及成员变量。
- 不能被实例化。
- 子类必须重写所有抽象方法才能被实例化,除非该子类也是抽象的。
- **接口**:
- 定义一组规范,只能包括常量和抽象方法。
- Java 8 引入了默认方法和静态方法,使得接口也能包含具体实现。
- 一个类可以实现多个接口。
**3. final关键字修饰的变量和方法的特点**
- **final变量**:
- 被声明为 `final` 的变量不能被重新赋值。
- 对于引用类型的 `final` 变量,其地址不可变,但对象属性仍可改变。
- **final 方法**:
- 不能在子类中覆盖。
- 提高程序的安全性和性能。
**4. 子类继承父类的方法执行顺序**
示例代码展示了 `Father` 类有一个 `shout` 方法,而 `Son` 类继承自 `Father` 并重写了该方法。当通过指向 `Son` 实例的 `Father` 引用调用此方法时,实际执行的是子类中的实现版本。
- 这个例子体现了多态的概念。
- 当子类覆盖父类的方法时,在运行时会使用子类的实现。
**5. 捕获执行时异常catch()中的异常类型**
- 在 Java 中,`catch` 块可以捕获 `Exception` 及其所有子类(包括 `RuntimeException`)。
- 通常不建议捕捉错误类 (`Error`)。
- 因此正确答案是 `A Exception` 或 `C RuntimeException`.
**6. String中的方法**
- `String` 类提供了许多实用的方法,例如:`length()`、`charAt(int index)`、`indexOf(String str)`、`substring(int beginIndex, int endIndex)`、`toLowerCase()` 和 `toUpperCase()`.
- 可以使用 `equals(Object anObject)` 来比较两个字符串的内容是否相等。
- 使用 `compareTo(String anotherString)` 检查一个字符串与另一个的大小关系。
**7. Object中的方法**
- `Object` 类是所有 Java 类的基础,提供了诸如:`toString()`、`equals(Object obj)` 和 `hashCode()`.
- 其中 `toString()` 返回对象的字符串表示形式。
- 而 `equals(Object obj)` 用于判断两个对象是否相等。
**8. 静态方法和静态变量何时可以互调**
- 静态方法可以直接访问其他静态方法及静态变量,反之亦然。
- 非静态方法也可以调用或使用这些元素。
- 然而,非静态方法不能直接调用或访问非静态内容。
**9. TCP中的TIME_WAIT状态是客户端还是服务端**
- 在 TCP 协议中,在一个连接关闭后可能会进入 TIME_WAIT 状态。
- 这一状态确保最后一个数据包被接收方确认收到,并通常出现在发起关闭的一方。
- 因此,无论是客户端还是服务端都可能处于这一状态。
**10. Linux的最大TCP连接数**
- 默认情况下,Linux 的 `net.core.somaxconn` 参数值可能是 1024,但这并不意味着系统最大连接数为固定数值。实际的限制取决于系统配置。
**11. a=Integet.parseInt(1024); b=Integer.valueOf(1024).intValue(); a和b的区别**
- `parseInt()` 方法返回一个`int`类型的值,因此变量 `a` 是一个整型变量。
- 而 `Integer.valueOf().intValue()` 返回的是一个对象,但最终结果是一个整数类型。所以两者都是整型变量。
**12. Thread.sleep()和Object.wait()方法的区别**
- `Thread.sleep(long millis)` 使当前线程暂停执行一段时间。
- `Object.wait()` 让当前线程等待其他线程的唤醒信号(如`notify()`或`notifyAll()`)。
- 不同之处在于,`sleep()`不需要同步锁,而`wait()`必须在同步上下文中调用,并且会释放