Java软件开发常见面试问题

基础

    什么是面向对象(OOP)?

    什么是多态?实现多态的机制是什么?

    接口(Interface)与抽象类(Abstract Class)的区别?

    重写(Override)与重载(Overload)的区别?

    父类的静态方法能否被子类重写?

    静态属性和静态方法是否可以被继承?是否可以被重写?为什么?

    什么是内部类?内部类、静态内部类、局部内部类和匿名内部类的区别及作用?

    == 和 equals() 和 hashCode() 的区别?

    Integer 和 int 之间的区别?

    String 转换成 Integer 的方式及原理?

    自动装箱实现原理?类型转换实现原理?

    对 String 的了解?

    String 为什么要设计成不可变的?

    final、finally 和 finalize 的区别?

    static 关键字有什么作用?

    列举 Java 的集合以及集合之间的继承关系?

    List、Set、Map 的区别?

    ArrayList、LinkedList 的区别?

    HashMap,HashTable,ConcurrentHashMap 实现原理以及区别?

    HashSet 与 HashMap 怎么判断集合元素重复?

    String、StringBuffer、StringBuilder 之间的区别?

    什么是序列化?怎么实现?有哪些方式?

    对反射的了解?

    对注解的了解?

    对依赖注入的了解?

    对泛型的了解?

    泛型中 extends 和 super 的区别?

    对 Java 的异常体系的了解?

    对解析与分派的了解?

    静态代理和动态代理的区别?有什么场景使用?

    谈谈对 Java 状态机理解?

 

 线程与并发

 

    线程和进程的区别?

    开启线程的三种方式

    如何正确的结束一个Thread?

    Thread 与 Runnable 的区别?

    run() 与 start() 方法的区别?

    sleep() 与 wait() 方法的区别?

    wait 与 notify 关键字的区别?

    synchronized 关键字的用法、作用及实现原理?

    volatile 关键字的用法、作用及实现原理?

    transient 关键字的用法、作用及实现原理?

    ReentrantLock、synchronized、volatile 之间的区别?

    什么是线程池,如何使用?

    多线程断点续传的实现原理?

    什么是深拷贝和浅拷贝?

    Java 中对象的生命周期?

    对并发编程的了解?

 JVM

 

    简述 JVM 内存模型和内存区域?

    简述垃圾回收器的工作原理?

    如何判断对象的生死?垃圾回收算法?新生代,老生代?

    哪些情况下的对象会被垃圾回收机制处理掉?

    垃圾回收机制与调用 System.gc() 的区别?

    强引用、软引用、弱引用、虚引用之间的区别?

    强引用设置为 null,会不会被回收?

    简述 ClassLoader 类加载机制?

    对双亲委派模型的了解?

    String a = “a”+“b”+“c” 在内存中创建几个对象?

    对 Dalvik、ART 虚拟机的了解?

    对动态加载(OSGI)的了解?

    常见编码方式有哪些?

    utf-8 编码中的中文占几个字节?int 型占几个字节?

 数据结构与算法
数据结构

    简述常见的数据结构?
    堆的结构?
    树、B+ 树、二叉树、红黑树的了解?
    二叉树的深度优先遍历和广度优先遍历?
    堆和树的区别?
    图的了解?

算法

 

    排序算法有哪些?

    最快的排序算法是哪个?

    手写冒泡排序

    手写快速排序

    快速排序的过程、时间复杂度、空间复杂度

    手写堆排序

 

常见算法问题

 

    给阿里2万多名员工按年龄排序应该选择哪个算法?

    GC算法(各种算法的优缺点以及应用场景)

    蚁群算法与蒙特卡洛算法

    子串包含问题(KMP 算法)写代码实现

    一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法

    万亿级别的两个URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)

    两个不重复的数组集合中,求共同的元素。

    两个不重复的数组集合中,这两个集合都是海量数据,内存中放不下,怎么求共同的元素?

    一个文件中有100万个整数,由空格分开,在程序中判断用户输入的整数是否在此文件中。说出最优的方法

    一张Bitmap所占内存以及内存占用的计算

    2000万个整数,找出第五十大的数字?

    求1000以内的水仙花数以及40亿以内的水仙花数

    烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?

    5枚硬币,2正3反如何划分为两堆然后通过翻转让两堆中正面向上的硬8币和反面向上的硬币个数相同

    时针走一圈,时针分针重合几次

 

设计模式与架构

 设计模式

 

    项目中常用的设计模式有哪些?

    手写生产者-消费者模式?

    手写观察者模式?

    适配器模式、装饰者模式、外观模式的异同?

 

架构

 

    MVC、MVP、MVVM 原理和区别?

    请画出 MVC、MVP 的差异?【猎豹移动】

    对 RxJava 的理解,功能与原理,优缺点?

    从 0 设计一款 App 整体架构,如何去做?

    Fragment 如果在 Adapter 中使用应该如何解耦?

    对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)?

    实现一个 Json 解析器(可以通过正则提高速度)?

 

你可能感兴趣的:(面试)