恒生聚源面经记录
八股题 Java 基础 + 集合 面向对象和面向过程的区别? 面向对象:将数据和方法封装成对象,作为程序的基本单元来组织代码,包含封装、继承、多态三大特性,方便代码复用和灵活性。 面向过程:以过程做为基本单元来组织代码,过程对应到代码中就是函数,将函数和数据分离,比较关注步骤和流程。其实就是一条路走到底的思想,关注如何设计一系列顺序执行的过程实现。 封装、继承、多态? 封装(Encapsulation):通过将对象的属性和方法结合为独立单元,并利用访问修饰符(如private)隐藏内部细节,仅通过公共接口(如getter/setter)控制访问,从而提升安全性和可维护性 继承(Inheritance):允许子类基于父类的属性和方法进行扩展,实现代码复用,Java采用单继承机制(仅支持一个直接父类),但可通过接口实现多重继承的效果 多态(Polymorphism):同一方法调用因对象实际类型不同而产生不同行为,通常通过父类引用指向子类对象及方法重写实现,依赖运行时动态绑定机制决定具体执行逻辑。(重写和重载) 常见排序算法?时间复杂度? 直接插入排序:o(n^2) 冒泡排序:o(n^2) 快速排序: o(nlogn) 堆排序:o(nlogn) 归并排序:o(nlogn) 算法 平均时间复杂度 最坏时间复杂度 空间复杂度 稳定性 适用场景 插入排序 O(n²) O(n²) O(1) 稳定 部分有序数据 冒泡排序 O(n²) O(n²) O(1) 稳定 教学示例、小数据 快速排序 O(n log n) O(n²) O(log n) 不稳定 大规模随机数据 归并排序 O(n log n) O(n log n) O(n) 稳定 大数据、外部排序 堆排序 O(n log n) O(n log n) O(1) 不稳定 实时系统、内存受限场景 ArrayList 和 LinkedList 的区别? ArrayList:底层是动态数组,有扩容机制,内存连续,查询快,增删慢。 LinkedList:底层是双向链表,内存不连续,查询慢,增删快。 【注意】 实际过程中,ArrayList 的增删操作比 LinkedList 快了进百倍。 ...