本文链接:https://blog.csdn.net/feather_wch/article/details/131948032
关键词:函数式接口、Supplier、类型擦除、HB、动态代理、StackOverFlow、OOM、注解、类加载机制、类加载器、JUC、Phaser、函数式编程、方法引用、equals、值传递、finally、异常、序列化、锁升级、Intent
什么是 Java 中的函数式接口?请列举几个常用的函数式接口。
Converter
,定义一个抽象方法 convert
,实现一个 Lambda 表达式来将一个字符串转换为大写。@FunctionalInterface
public interface Converter{
T convert(T in);
}
// 使用
Converter ctr = (in) -> in.toUpperCase();
String upResult = ctr.convert("feather");
Java 8 引入了函数式编程的概念,函数式接口有哪些?
Supplier supplier = () -> "Hello World";
String result = supplier.get();
System.out.println(result); // 输出:Hello World
Consumer consumer = (num) -> System.out.println("Number: " + num);
consumer.accept(10); // 输出:Number: 10
Function<Integer, String> function = (num) -> "Result: " + (num * 2);
String result = function.apply(5);
System.out.println(result); // 输出:Result: 10
Predicate predicate = (num) -> num > 0;
boolean result = predicate.test(10);
System.out.println(result); // 输出:true
Runnable runnable = () -> System.out.println("Hello World");
runnable.run(); // 输出:Hello World
Java 中的类型擦除是什么?它对泛型的使用有什么影响?
ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();
Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0];
getGenericSuperClass().getActualTypeArguments()[0] == 第一个泛型参数的类型
Java 中的内存模型中,什么是 happens-before 原则?它在多线程环境下的作用是什么?
Java 的动态代理是什么?如何使用动态代理实现 AOP(面向切面编程)?
class LogInvocationHandler implements InvocationHandler {
private Object target;
public LogInvocationHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("调用方法:" + method.getName());
Object result = method.invoke(target, args);
return result;
}
}
UserService userService = new UserServiceImpl();
UserService proxy = (UserService) Proxy.newProxyInstance(
userService.getClass().getClassLoader(),
userService.getClass().getInterfaces(),
new LogInvocationHandler(userService));
proxy.addUser("Alice");
什么是 Java 中的虚拟机栈溢出和堆溢出?分别说明它们发生的原因和如何避免。
Java 中的注解是什么?如何自定义一个注解,并在程序中使用它?
Java 中的类加载机制是什么?请解释类加载器的作用和不同的类加载器。
Android中的类加载器有哪些?
BootClassLoader负责加载核心库和 Android 运行时所需的类有哪些?
core-libart.jar
:如 Java 核心类、集合类、输入输出类等。ext.jar
:如 XML 解析、正则表达式、加密算法等。framework.jar
:如 Activity、Service、BroadcastReceiver 等。android.policy.jar
:包如窗口管理、输入法管理等。services.jar
:如电源管理、网络管理、传感器管理等。Dalvik/ART 运行时库
、Zygote
、SystemServer
、Binder
、Android 接口库
:如 ActivityManager、ContentProvider解释 Java 中的并发包(java.util.concurrent)中的锁和同步器的使用场景和区别。
JUC中常见的工具类,有哪些分类?
StampedLock是什么?有什么作用?
Phaser是什么?
class Worker implements Runnable {
private final Phaser phaser;
public Worker(Phaser phaser) {
this.phaser = phaser;
}
@Override
public void run() {
// 阶段1
phaser.arriveAndAwaitAdvance();
// 阶段2
phaser.arriveAndAwaitAdvance();
// 阶段3
phaser.arriveAndDeregister(); // 注销线程
}
}
什么是 Java 的函数式编程?列举一些支持函数式编程的新特性和相关的函数式编程库。
Java8方法引用是什么?
// 引用 Integer 类的静态方法 parseInt()
Function<String, Integer> parser = Integer::parseInt;
Integer result = parser.apply("10"); // 调用 parseInt("10") 返回整数 10
// 引用 String 的实例方法 length()
Function<String, Integer> lengthGetter = String::length;
Integer length = lengthGetter.apply("Hello"); // 调用 "Hello".length() 返回整数 5
// 引用对象的实例方法
List list = Arrays.asList("A", "B", "C");
list.forEach(System.out::println); // 输出 A B C
// 引用 ArrayList 的构造方法
Supplier<List> listSupplier = ArrayList::new;
List newList = listSupplier.get(); // 创建一个新的 ArrayList 实例
Java 中的序列化和反序列化的机制是什么?如何处理序列化版本不一致的问题?
serialVersionUID
字段,以确保序列化版本的兼容性。Java静态内部类是什么?和非静态内部类有什么区别?
区别:
Java参数传递是值传递还是引用传递?
equals和==进行比较的区别
String a = new String(“xxx”)会创建几个对象?
finally中的代码一定会执行吗?try中有return也是一定会执行吗?
异常中Exception和Error的区别
Parcelable和Serializable区别?
为什么Intent传递对象需要序列化?
锁的状态有哪些?
偏向锁标志 | 锁标志 | MarkWord | |
---|---|---|---|
无锁 | 0 | 01 | |
偏向锁 | 1 | 01 | 第一个访问锁的线程 |
轻量级锁 | x | 00 | 栈中RecordWord的指针 |
重量级锁 | x | 10 | 指向Mutex互斥量的指针 |
GC标记 | 11 |