莫度编程网

技术文章干货、编程学习教程与开发工具分享

Java核心基础及SpringMVC高频考点(附答案)

1. Java语言有哪些特点?

  • 跨平台性(JVM实现"一次编译,到处运行")
  • 面向对象(封装、继承、多态)
  • 自动内存管理(GC垃圾回收机制)
  • 健壮性(强类型、异常处理、指针安全)
  • 多线程支持(内置线程API)
  • 丰富的类库(Java标准库+第三方生态)

2. 面向对象和面向过程的区别

维度

面向过程

面向对象

核心思想

以过程(函数)为中心

以对象(数据+方法)为中心

代码组织

线性流程控制

类与对象的关系

数据与操作

数据与函数分离

数据与行为封装在对象中

典型应用

C语言

Java/C++

扩展性

修改复杂,易产生冗余

继承/多态提高扩展性


3. 基本数据类型

基本类型

大小(位)

封装类

默认值

byte

8

Byte

0

short

16

Short

0

int

32

Integer

0

long

64

Long

0L

float

32

Float

0.0f

double

64

Double

0.0d

char

16

Character

'\u0000'

boolean

-

Boolean

false


4. 标识符命名规则

  • 允许:字母、数字、_$(数字不能开头)
  • 大小写敏感
  • 不能是关键字(如 class, public
  • 规范建议:驼峰命名法(myVariableName),类名首字母大写

5.instanceof关键字的作用

  • 类型检查:判断对象是否属于特定类/接口或其子类
Object obj = "Hello";
if (obj instanceof String) { // 返回true
    System.out.println("It's a String");
}

6. Java自动装箱与拆箱

  • 装箱:基本类型 → 包装类(intInteger
Integer i = 10; // 自动装箱
  • 拆箱:包装类 → 基本类型(Integer → int)
int num = i; // 自动拆箱
  • 注意事项:null拆箱会抛出NullPointerException

7. ArrayList和LinkedList的区别

特性

ArrayList

LinkedList

底层结构

动态数组

双向链表

随机访问

O(1)(高效)

O(n)(需遍历)

头部插入/删除

O(n)(需移动元素)

O(1)(直接修改指针)

内存占用

较少(仅存数据)

较高(额外存储前后节点指针)

适用场景

频繁查询

频繁增删


8. HashMap和HashTable的区别

特性

HashMap (JDK1.2+)

HashTable (旧版)

线程安全

不安全(需用ConcurrentHashMap

安全(方法同步)

null键值

允许

不允许

性能

高(无锁竞争)

低(同步开销)

迭代器

Iterator(快速失败)

Enumeration(较慢)


9. Collection包结构 vs Collections

  • java.util.Collection:容器接口
    └──
    List (有序可重复)
    └──
    Set (无序唯一)
    └──
    Queue (队列)
  • java.util.Collections:工具类
    • 提供静态方法:排序、同步控制、不可变集合等
Collections.sort(list); // 排序
List Collections.synchronizedList(list); // 线程安全包装

10. Java的四种引用

引用类型

GC行为

使用场景

强引用

永不回收(Object obj=new Object()

普遍使用

软引用

内存不足时回收(SoftReference

缓存(如图片缓存)

弱引用

下次GC必定回收(WeakReference

弱缓存(如WeakHashMap)

虚引用

无法获取对象,GC时收到通知(PhantomReference

堆外内存管理(如NIO)


11. Java创建对象的方式

  1. new关键字User user = new User();
  2. 反射Class.forName("User").newInstance()
  3. 克隆User copy = (User) original.clone();
  4. 反序列化ObjectInputStream.readObject()
  5. 工厂模式UserFactory.createUser()

12. 深拷贝和浅拷贝的区别

class A { B b; } 
  • 浅拷贝:复制对象引用(默认Object.clone()
A浅拷贝后:A1.b 与 A2.b 指向同一个B对象
  • 深拷贝:递归复制所有引用对象
A深拷贝后:A1.b 与 A2.b 指向不同的B对象

13.a=a+b与a+=b的区别

  • 类型转换
byte a = 1;
int b = 2;
a = a + b;   // 编译错误(int不能直接赋给byte)
a += b;      // 等价于 a = (byte)(a + b); 自动强转

14. OOM 与 SOF 常见场景

  • OOM (OutOfMemoryError)
    • 堆溢出:对象过多(如大列表未释放)
    • 方法区溢出:动态生成类(如CGLib)
    • 直接内存溢出:NIO的ByteBuffer.allocateDirect()
  • SOF (StackOverflowError)
    • 无限递归调用
    • 栈帧过大(如局部变量巨量)

15. 线程,程序,进程

  • 程序:静态代码(如.exe文件)
  • 进程:程序的一次执行(独立内存空间)
  • 线程:进程内的执行单元(共享进程资源)

16. 线程的基本状态

  1. NEW:新建未启动
  2. RUNNABLE:可运行(含就绪和运行中)
  3. BLOCKED:等待监视器锁(同步阻塞)
  4. WAITING:无限等待(Object.wait()
  5. TIMED_WAITING:限时等待(Thread.sleep(1000)
  6. TERMINATED:执行结束

17 SpringMVC常用注解

注解

作用

@Controller

定义控制器类

@RequestMapping

映射URL到方法

@GetMapping

GET请求映射(简化版)

@PostMapping

POST请求映射

@RequestParam

获取请求参数

@PathVariable

获取URL路径变量(如/user/{id}

@ResponseBody

返回JSON/XML数据

@RequestBody

接收JSON/XML请求体

@ModelAttribute

绑定参数到Model对象

@Valid

参数校验(配合JSR-303)


以上总结覆盖了Java核心基础及SpringMVC高频考点,适合面试快速复习。如需深入某个知识点,可进一步探讨!

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言

    Powered By Z-BlogPHP 1.7.4

    蜀ICP备2024111239号-43