通往大牛之路,百度Java面试题前200页!

基本概念

  • 操作系统中 heap 和 stack 的区别

  • 什么是基于注解的切面实现

  • 什么是 对象/关系 映射集成模块

  • 什么是 Java 的反射机制

  • 什么是 ACID

  • BS与CS的联系与区别

  • Cookie 和 Session的区别

  • fail-fast 与 fail-safe 机制有什么区别

  • get 和 post请求的区别

  • Interface 与 abstract 类的区别

  • IOC的优点是什么

  • IO 和 NIO的区别,NIO优点

  • Java 8 / Java 7 为我们提供了什么新功能

  • 什么是竞态条件? 举个例子说明。

  • JRE、JDK、JVM 及 JIT 之间有什么不同

  • MVC的各个部分都有那些技术来实现?如何实现?

  • RPC 通信和 RMI 区别

  • 什么是 Web Service(Web服务)

  • JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。

  • WEB容器主要有哪些功能? 并请列出一些常见的WEB容器名字。

  • 一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制

  • 简单说说你了解的类加载器。是否实现过类加载器

  • 解释一下什么叫AOP(面向切面编程)

  • 请简述 Servlet 的生命周期及其相关的方法

  • 请简述一下 Ajax 的原理及实现步骤

  • 简单描述Struts的主要功能

  • 什么是 N 层架构

  • 什么是CORBA?用途是什么

  • 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”

  • 什么是正则表达式?用途是什么?哪个包使用正则表达式来实现模式匹配

  • 什么是懒加载(Lazy Loading)

  • 什么是尾递归,为什么需要尾递归

  • 什么是控制反转(Inversion of Control)与依赖注入(Dependency Injection)

关键字

  • finalize

  • 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变

  • 一个类被声明为final类型,表示了什么意思

  • throws, throw, try, catch, finally分别代表什么意义

  • final 与 static 关键字可以用于哪里?它们的作用是什么

  • final, finally, finalize的区别

  • final、finalize 和 finally 的不同之处?

  • finalize()方法什么时候被调用

  • 析构函数(finalization)的目的是什么

  • final 和 finalize 的区别

  • final

  • 什么是finalize()方法

  • final关键字有哪些用法

  • 能否在运行时向 static final 类型的赋值

  • Java 有几种修饰符?分别用来修饰什么

  • volatile

  • volatile 修饰符的有过什么实践

  • volatile 变量是什么?volatile 变量和 atomic 变量有什么不同

  • volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗

  • 能创建 volatile 数组吗?

  • transient变量有什么特点

  • super什么时候使用

  • public static void 写成 static public void会怎样

  • 说明一下public static void main(String args[])这段声明里每个关键字的作用

  • 请说出作用域public, private, protected, 以及不写时的区别

  • sizeof 是Java 的关键字吗

  • static

  • static class 与 non static class的区别

  • static 关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法

  • 静态类型有什么特点

  • main() 方法为什么必须是静态的?能不能声明 main() 方法为非静态

  • 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用

  • 静态变量在什么时候加载?编译期还是运行期?静态代码块加载的时机呢

  • 成员方法是否可以访问静态变量?为什么静态方法不能访问成员变量

  • switch

  • switch 语句中的表达式可以是什么类型数据

  • switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上

  • while 循环和 do 循环有什么不同

操作符

  • &操作符和&&操作符有什么区别?

  • a = a + b 与 a += b 的区别?

  • 逻辑操作符 (&,|,^)与条件操作符(&&,||)的区别

  • 3*0.1 == 0.3 将会返回什么?true 还是 false?

  • float f=3.4; 是否正确?

  • short s1 = 1; s1 = s1 + 1;有什么错?

数据结构

  • 基础类型(Primitives)

  • 基础类型(Primitives)与封装类型(Wrappers)的区别在哪里

  • 简述九种基本数据类型的大小,以及他们的封装类

  • int 和 Integer 哪个会占用更多的内存? int 和 Integer 有什么区别?parseInt()函数在什么时候使用到

  • float和double的默认值是多少

  • 如何去小数四舍五入保留小数点后两位

  • char 型变量中能不能存贮一个中文汉字,为什么

  • 类型转换

  • 怎样将 bytes 转换为 long 类型

  • 怎么将 byte 转换为 String

  • 如何将数值型字符转换为数字

  • 我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象

  • 能在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量吗

  • 类型向下转换是什么

  • 数组

  • 如何权衡是使用无序的数组还是有序的数组

  • 怎么判断数组是 null 还是为空

  • 怎么打印数组? 怎样打印数组中的重复元素

  • Array 和 ArrayList有什么区别?什么时候应该使用Array而不是ArrayList

  • 数组和链表数据结构描述,各自的时间复杂度

  • 数组有没有length()这个方法? String有没有length()这个方法

  • 队列

  • 队列和栈是什么,列出它们的区别

  • BlockingQueue是什么

  • 简述 ConcurrentLinkedQueue LinkedBlockingQueue 的用处和不同之处。

  • ArrayList、Vector、LinkedList的存储性能和特性

  • String

  • StringBuffer

  • ByteBuffer 与 StringBuffer有什么区别

  • HashMap

  • HashMap的工作原理是什么

  • 内部的数据结构是什么

  • HashMap 的 table的容量如何确定?loadFactor 是什么? 该容量如何变化?这种变化会带来什么问题?

  • HashMap 实现的数据结构是什么?如何实现

  • HashMap 和 HashTable、ConcurrentHashMap 的区别

  • HashMap的遍历方式及效率

  • HashMap、LinkedMap、TreeMap的区别

  • 如何决定选用HashMap还是TreeMap

  • 如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办

  • HashMap 是线程安全的吗?并发下使用的 Map 是什么,它们内部原理分别是什么,比如存储方式、 hashcode、扩容、 默认容量等

  • HashSet

  • HashSet和TreeSet有什么区别

  • HashSet 内部是如何工作的

  • WeakHashMap 是怎么工作的?

  • Set

  • Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用 == 还是 equals()? 它们有何区别?

  • TreeMap:TreeMap 是采用什么树实现的?TreeMap、HashMap、LindedHashMap的区别。TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

  • TreeSet:一个已经构建好的 TreeSet,怎么完成倒排序。

  • EnumSet 是什么

  • Hash算法

  • Hashcode 的作用

  • 简述一致性 Hash 算法

  • 有没有可能 两个不相等的对象有相同的 hashcode?当两个对象 hashcode 相同怎么办?如何获取值对象

  • 为什么在重写 equals 方法的时候需要重写 hashCode 方法?equals与 hashCode 的异同点在哪里

  • a.hashCode() 有什么用?与 a.equals(b) 有什么关系

  • hashCode() 和 equals() 方法的重要性体现在什么地方

  • Object:Object有哪些公用方法?Object类hashcode,equals 设计原则? sun为什么这么设计?Object类的概述

  • 如何在父类中为子类自动完成所有的 hashcode 和 equals 实现?这么做有何优劣。

  • 可以在 hashcode() 中使用随机数字吗?

  • LinkedHashMap

  • LinkedHashMap 和 PriorityQueue 的区别是什么

  • List

  • ArrayList 和 HashMap 的默认大小是多数

  • ArrayList 和 LinkedList 的区别,什么时候用 ArrayList?

  • ArrayList 和 Set 的区别?

  • ArrayList, LinkedList, Vector的区别

  • ArrayList是如何实现的,ArrayList 和 LinkedList 的区别

  • ArrayList如何实现扩容

  • Array 和 ArrayList 有何区别?什么时候更适合用Array

  • 说出ArraList,Vector, LinkedList的存储性能和特性

  • LinkedList 是单向链表还是双向链表

  • LinkedList 与 ArrayList 有什么区别

  • 描述下 Java 中集合(Collections),接口(Interfaces),实现(Implementations)的概念。LinkedList 与 ArrayList 的区别是什么?

  • 插入数据时,ArrayList, LinkedList, Vector谁速度较快?

  • List, Set, Map三个接口,存取元素时各有什么特点

  • List, Set, Map 是否继承自 Collection 接口

  • 遍历一个 List 有哪些不同的方式

  • LinkedList

  • ArrayList

  • Map

  • Map, Set, List, Queue, Stack

  • Map 接口提供了哪些不同的集合视图

  • 为什么 Map 接口不继承 Collection 接口

  • Collections

  • 介绍Java中的Collection FrameWork。集合类框架的基本接口有哪些

  • Collections类是什么?Collection 和 Collections的区别?Collection、Map的实现

  • 集合类框架的最佳实践有哪些

  • 为什么 Collection 不从 Cloneable 和 Serializable 接口继承

  • 说出几点 Java 中使用 Collections 的最佳实践?

  • Collections 中 遗留类 (HashTable、Vector) 和 现有类的区别

  • 什么是 B+树,B-树,列出实际的使用场景。

接口

  • Comparator 与 Comparable 接口是干什么的?列出它们的区别

对象

  • 拷贝(clone)

  • 如何实现对象克隆

  • 深拷贝和浅拷贝区别

  • 深拷贝和浅拷贝如何实现激活机制

  • 写clone()方法时,通常都有一行代码,是什么

  • 比较

  • 在比较对象时,"==" 运算符和 equals 运算有何区别

  • 如果要重写一个对象的equals方法,还要考虑什么

  • 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对

  • 构造器

  • 构造器链是什么

  • 创建对象时构造器的调用顺序

  • 不可变对象

  • 什么是不可变象(immutable object)

  • 为什么 Java 中的 String 是不可变的(Immutable)

  • 如何构建不可变的类结构?关键点在哪里

  • 能创建一个包含可变对象的不可变对象吗

  • 如何对一组对象进行排序

方法

  • 构造器(constructor)是否可被重写(override)

  • 方法可以同时即是 static 又是 synchronized 的吗

  • abstract 的 method是否可同时是 static,是否可同时是 native,是否可同时是synchronized

  • Java支持哪种参数传递类型

  • 一个对象被当作参数传递到一个方法,是值传递还是引用传递

  • 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递

  • 我们能否重载main()方法

  • 如果main方法被声明为private会怎样

GC

  • 概念

  • GC是什么?为什么要有GC

  • 什么时候会导致垃圾回收

  • GC是怎么样运行的

  • 新老以及永久区是什么

  • GC 有几种方式?怎么配置

  • 什么时候一个对象会被GC? 如何判断一个对象是否存活

  • System.gc() Runtime.gc()会做什么事情? 能保证 GC 执行吗

  • 垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

  • Minor GC 、Major GC、Young GC 与 Full GC分别在什么时候发生

  • 垃圾回收算法的实现原理

  • 如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?

  • 垃圾回收的最佳做法是什么

  • GC收集器有哪些

  • 垃圾回收器的基本原理是什么?

  • 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么

  • Serial 与 Parallel GC之间的不同之处

  • CMS 收集器 与 G1 收集器的特点与区别

  • CMS垃圾回收器的工作过程

  • JVM 中一次完整的 GC 流程是怎样的? 对象如何晋升到老年代

  • 吞吐量优先和响应优先的垃圾收集器选择

  • GC策略

  • 举个实际的场景,选择一个GC策略

  • JVM的永久代中会发生垃圾回收吗

  • 收集方法

  • 标记清除、标记整理、复制算法的原理与特点?分别用在什么地方

  • 如果让你优化收集方法,有什么思路

JVM

  • 参数

  • 说说你知道的几种主要的jvm 参数

  • -XX:+UseCompressedOops 有什么作用

  • 类加载器(ClassLoader)

  • Java 类加载器都有哪些

  • JVM如何加载字节码文件

  • 内存管理

  • JVM内存分哪几个区,每个区的作用是什么

  • 一个对象从创建到销毁都是怎么在这些部分里存活和转移的

  • 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法

  • JVM中哪个参数是用来控制线程的栈堆栈小

  • 简述内存分配与回收策略

  • 简述重排序,内存屏障,happen-before,主内存,工作内存

  • Java中存在内存泄漏问题吗?请举例说明

  • 简述 Java 中软引用(SoftReferenc)、弱引用(WeakReference)和虚引用

  • 内存映射缓存区是什么

  • jstack,jstat,jmap,jconsole怎么用

  • 32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?32 位和 64 位的 JVM,int 类型变量的长度是多数?

  • 怎样通过 Java 程序来判断 JVM 是 32 位 还是 64 位

  • JVM自身会维护缓存吗?是不是在堆中进行对象分配,操作系统的堆还是JVM自己管理堆

  • 什么情况下会发生栈内存溢出

  • 双亲委派模型是什么

多线程

  • 基本概念

  • Vector, SimpleDateFormat 是线程安全类吗

  • 什么 Java 原型不是线程安全的

  • 哪些集合类是线程安全的

  • 用 Runnable 还是 Thread

  • 什么是线程

  • 多线程的优点

  • 多线程的几种实现方式

  • 什么是线程安全

  • 多线程中的忙循环是什么

  • 如何创建一个线程

  • 编写多线程程序有几种实现方式

  • 什么是线程局部变量

  • 线程和进程有什么区别?进程间如何通讯,线程间如何通讯

  • 什么是多线程环境下的伪共享(false sharing)

  • 同步和异步有何异同,在什么情况下分别使用他们?举例说明

  • Current

  • ConcurrentHashMap 和 Hashtable的区别

  • ArrayBlockingQueue, CountDownLatch的用法

  • ConcurrentHashMap的并发度是什么

  • CyclicBarrier 和 CountDownLatch有什么不同?各自的内部原理和用法是什么

  • Semaphore的用法

  • Thread

  • 启动一个线程是调用 run() 还是 start() 方法?start() 和 run() 方法有什么区别

  • 调用start()方法时会执行run()方法,为什么不能直接调用run()方法

  • sleep() 方法和对象的 wait() 方法都可以让线程暂停执行,它们有什么区别

  • yield方法有什么作用?sleep() 方法和 yield() 方法有什么区别

  • Java 中如何停止一个线程

  • stop() 和 suspend() 方法为何不推荐使用

  • 如何在两个线程间共享数据

  • 如何强制启动一个线程

  • 如何让正在运行的线程暂停一段时间

  • 什么是线程组,为什么在Java中不推荐使用

  • 你是如何调用 wait(方法的)?使用 if 块还是循环?为什么

  • 生命周期

  • 有哪些不同的线程生命周期

  • 线程状态,BLOCKED 和 WAITING 有什么区别

  • 画一个线程的生命周期状态图

  • ThreadLocal 用途是什么,原理是什么,用的时候要注意什么

  • ThreadPool

  • 线程池是什么?为什么要使用它

  • 如何创建一个Java线程池

  • ThreadPool用法与优势

  • 提交任务时,线程池队列已满时会发会生什么

  • newCache 和 newFixed 有什么区别?简述原理。构造函数的各个参数的含义是什么,比如 coreSize, maxsize 等

  • 线程池的实现策略

  • 线程池的关闭方式有几种,各自的区别是什么

  • 线程池中submit() 和 execute()方法有什么区别?

  • 线程调度

  • Java中用到的线程调度算法是什么

  • 什么是多线程中的上下文切换

  • 你对线程优先级的理解是什么

  • 什么是线程调度器 (Thread Scheduler) 和时间分片 (Time Slicing)

  • 线程同步

  • 请说出你所知的线程同步的方法

  • synchronized 的原理是什么

  • synchronized 和 ReentrantLock 有什么不同

  • 什么场景下可以使用 volatile 替换 synchronized

  • 有T1,T2,T3三个线程,怎么确保它们按顺序执行?怎样保证T2在T1执行完后执行,T3在T2执行完后执行

  • 同步块内的线程抛出异常会发生什么

  • 当一个线程进入一个对象的 synchronized 方法A 之后,其它线程是否可进入此对象的 synchronized 方法B

  • 使用 synchronized 修饰静态方法和非静态方法有什么区别

  • 如何从给定集合那里创建一个 synchronized 的集合

  • Java Concurrency API 中 的 Lock 接口是什么?对比同步它有什么优势

  • Lock 与 Synchronized 的区别?Lock 接口比 synchronized 块的优势是什么

  • ReadWriteLock是什么?

  • 锁机制有什么用

  • 什么是乐观锁(Optimistic Locking)?如何实现乐观锁?如何避免ABA问题

  • 解释以下名词:重排序,自旋锁,偏向锁,轻量级锁,可重入锁,公平锁,非公平锁,乐观锁,悲观锁

  • 什么时候应该使用可重入锁

  • 简述锁的等级方法锁、对象锁、类锁

  • Java中活锁和死锁有什么区别?

  • 什么是死锁(Deadlock)?导致线程死锁的原因?如何确保 N 个线程可以访问 N 个资源同时又不导致死锁

  • 死锁与活锁的区别,死锁与饥饿的区别

  • 怎么检测一个线程是否拥有锁

  • 如何实现分布式锁

  • 有哪些无锁数据结构,他们实现的原理是什么

  • 读写锁可以用于什么应用场景

  • Executors类是什么? Executor和Executors的区别

  • 什么是Java线程转储(Thread Dump),如何得到它

  • 如何在Java中获取线程堆栈

  • 说出 3 条在 Java 中使用线程的最佳实践

  • 在线程中你怎么处理不可捕捉异常

  • 实际项目中使用多线程举例。你在多线程环境中遇到的常见的问题是什么?你是怎么解决它的

  • 请说出与线程同步以及线程调度相关的方法

  • 程序中有3个 socket,需要多少个线程来处理

  • 假如有一个第三方接口,有很多个线程去调用获取数据,现在规定每秒钟最多有 10 个线程同时调用它,如何做到

  • 如何在 Windows 和 Linux 上查找哪个线程使用的 CPU 时间最长

  • 如何确保 main() 方法所在的线程是 Java 程序最后结束的线程

  • 非常多个线程(可能是不同机器),相互之间需要等待协调才能完成某种工作,问怎么设计这种协调方案

  • 你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它

异常

  • 基本概念

  • UnsupportedOperationException是什么

  • NullPointerException 和 ArrayIndexOutOfBoundException 之间有什么相同之处

  • Error 和 Exception有什么区别

  • 什么是受检查的异常,什么是运行时异常

  • 运行时异常与一般异常有何异同

  • 简述一个你最常见到的runtime exception(运行时异常)

  • finally

  • 如果执行finally代码块之前方法返回了结果,或者JVM退出了,finally块中的代码还会执行吗

  • try里有return,finally还执行么?那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后

  • 在什么情况下,finally语句不会执行

  • finally关键词在异常处理中如何使用

  • throw 和 throws 有什么区别?

  • OOM你遇到过哪些情况?你是怎么搞定的?

  • SOF你遇到过哪些情况?

  • 既然我们可以用RuntimeException来处理错误,那么你认为为什么Java中还存在检查型异常

  • 当自己创建异常类的时候应该注意什么

  • 导致空指针异常的原因

  • 异常处理 handle or declare 原则应该如何理解

  • 怎么利用 JUnit 来测试一个方法的异常

  • catch块里别不写代码有什么问题

  • 你曾经自定义实现过异常吗?怎么写的

  • 什么是 异常链

  • 在try块中可以抛出异常吗

JDBC

  • 通过 JDBC 连接数据库有哪几种方式

  • 阐述 JDBC 操作数据库的基本步骤

  • JDBC 中如何进行事务处理

  • 什么是 JdbcTemplate

  • 什么是 DAO 模块

  • 使用 JDBC 操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能

  • 列出 5 个应该遵循的 JDBC 最佳实践

IO

  • File

  • File类型中定义了什么方法来判断一个文件是否存在

  • File类型中定义了什么方法来创建一级目录

  • 为了提高读写性能,可以采用什么流

  • Java中有几种类型的流

  • JDK 为每种类型的流提供了一些抽象类以供继承,分别是哪些类

  • 对文本文件操作用什么I/O流

  • 对各种基本数据类型和String类型的读写,采用什么流

  • 能指定字符编码的 I/O 流类型是什么

  • 序列化

  • 什么是序列化?如何实现 Java 序列化及注意事项

  • Serializable 与 Externalizable 的区别

  • Socket

  • socket 选项 TCP NO DELAY 是指什么

  • Socket 工作在 TCP/IP 协议栈是哪一层

  • TCP、UDP 区别及 Java 实现方式

  • 说几点 IO 的最佳实践

  • 直接缓冲区与非直接缓冲器有什么区别?

  • 怎么读写 ByteBuffer?ByteBuffer 中的字节序是什么

  • 当用System.in.read(buffer)从键盘输入一行n个字符后,存储在缓冲区buffer中的字节数是多少

  • 如何使用扫描器类(Scanner Class)令牌化

面向对象编程(OOP)

  • 解释下多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling)

  • 多态的实现原理

  • 封装、继承和多态是什么

  • 对象封装的原则是什么?

  • 获得一个类的类对象有哪些方式

  • 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

  • 说出几条 Java 中方法重载的最佳实践

  • 抽象类

  • 抽象类和接口的区别

  • 抽象类中是否可以有静态的main方法

  • 抽象类是否可实现(implements)接口

  • 抽象类是否可继承具体类(concrete class)

  • 匿名类(Anonymous Inner Class)

  • 匿名内部类是否可以继承其它类?是否可以实现接口

  • 内部类

  • 内部类分为几种

  • 内部类可以引用它的包含类(外部类)的成员吗

  • 请说一下 Java 中为什么要引入内部类?还有匿名内部类

  • 继承

  • 继承(Inheritance)与聚合(Aggregation)的区别在哪里

  • 继承和组合之间有什么不同

  • 为什么类只能单继承,接口可以多继承

  • 存在两个类,B 继承 A,C 继承 B,能将 B 转换为 C 么?如 C = (C) B

  • 如果类 a 继承类 b,实现接口c,而类 b 和接口 c 中定义了同名变量,请问会出现什么问题

  • 接口

  • 接口是什么

  • 接口是否可继承接口

  • 为什么要使用接口而不是直接使用具体类?接口有什么优点

泛型

  • 泛型的存在是用来解决什么问题

  • 泛型的常用特点

  • List能否转为List

posted @   Java技术栈  阅读(307)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
历史上的今天:
2018-04-28 5.1重磅活动:区块链免费送书!
点击右上角即可分享
微信分享提示