1.匿名内部类
通常用于实现接口或继承类的实例,常用于事件监听器、线程创建等场景。
可以访问外部类的final或有效的final成员变量和方法,不能直接访问外部类的非final成员。
interface Greeting {
void greet();
}
public class Main {
public static void main(String[] args) {
// 使用匿名内部类实现 Greeting 接口
Greeting greeting = new Greeting() {
@Override
public void greet() {
System.out.println("Hello, World!");
}
};
greeting.greet(); // 输出: Hello, World!
}
}
2.mysql的索引,在age >20 and age < 30是只能用一个范围吗?
范围查询可能导致全表扫描,而不走索引,范围查询后面的字段不会走索引
MySQL(五)MySQL索引调优【范围、排序、表关联、索引设计原则】 - 有梦想的肥宅 - 博客园 (cnblogs.com)33
3.hashmap怎么保证元素顺序
在java中,hashmap不保证元素的顺序,会根据哈希算法和负载因子而变化。
可以使用集合:
LinkedHashMap,是hashmap的子类,维护了一个双向链表
TreeMap,基于红黑树,按键的自然顺序或者指定的比较器进行排序,但不是插入排序。
ArrayList和HashMap结合,可以用ArrayList存储插入顺序,同时用HashMapC存储键值对
4.什么是密封类
密封类(Sealed Class)是java 15引入的一种新特性,旨在控制类的继承。允许开发者限制哪些类可以拓展特定的类或接口,从而提供更好的类型安全性和代码维护性。
特点:限制子类:指定哪些可以作为子类
语法:使用sealed关键字,同时通过permits关键字列出允许的子类
sealed class Shape permits Circle, Rectangle {
// Shape 类的内容
}
final class Circle extends Shape {
// Circle 类的内容
}
final class Rectangle extends Shape {
// Rectangle 类的内容
}
5.枚举类可以用于switch吗
枚举类可以用于 switch
语句
6.可达性分析算法,CMS,GT
可达性分析算法是垃圾回收中用于确定哪些对象仍然被应用程序使用的技术。
CMS(concurrent Marl-sweep):首先GC会暂停应用程序,遍历所有对象并标记可达的对象,标记完成后开始并发执行,应用程序继续运行,进行清理,最后,清楚为标记的对象,可能会产生内存碎片,最终的清理阶段可能需要暂停应用程序。
GT(Garbage-First):GT采用了一种分代垃圾回收策略,主要关注“最垃圾的区域”,分为多个区域,每个区域可以独立进行垃圾回收,每次回收会优先回收包含垃圾最多的区域,已最大内存回收效果、减少了停顿时间。实现较为复杂。
7.反射可以访问public,private?
可以,访问private字段要设置权限,privateField.setAccessible(true); // 设置可访问性
8.Myaisam支持聚簇索引吗
MyISAM存储引擎不支持聚簇索引,只支持非聚簇索引
9.给定一个字符串,找到最大不重复子串
public String longestSubstring(String s) {
Map<Character, Integer> map = new HashMap<>();
int left = 0;
String longest = "";
for (int right = 0; right < s.length(); right++) {
if (map.containsKey(s.charAt(right))) {
left = Math.max(map.get(s.charAt(right)) + 1, left);
}
map.put(s.charAt(right), right);
if (right - left + 1 > longest.length()) {
longest = s.substring(left, right + 1);
}
}
return longest;
}
10.给定一个数组,求第k大
public int findKthLargest(int[] nums, int k) {
// 创建一个最小堆
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
// 遍历数组中的每个元素
for (int num : nums) {
minHeap.offer(num); // 将当前元素添加到堆中
// 如果堆的大小超过 k,则移除堆中最小的元素
if (minHeap.size() > k) {
minHeap.poll();
}
}
// 返回堆顶元素,即为第 k 大元素
return minHeap.peek();
}