- DNS(域名系统)是什么?
dns 是域名系统的缩写,由解析器和域名服务器组成,域名服务器是指保存有该网络中所有主机的域名和对应的ip地址,并具有将域名转换为ip地址的服务器。
- 说一说ConcurrentHashMap的实现原理
JDK1.5中的实现
ConcurrentHashMap使用的是分段锁技术,将ConcurrentHashMap锁一段一段的存储,然后给每一段数据配一把锁(segment),当一个线程占用一把锁(segment)访问其中一段数据的时候,其他段的数据也能被其它的线程访问,默认分配16个segment。默认比Hashtable效率提高16倍。
JDK1.8中的实现
ConcurrentHashMap取消了segment分段锁,而采用CAS和synchronized来保证并发安全。数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。
synchronized只锁定当前链表或红黑二叉树的首节点,这样只要hash不冲突,就不会产生并发,效率又提升N倍。
- 介绍一下Java中的IO流
输入流与输出流、字节流与字符流、节点流与处理流
流是Java对不同输入源输出源的抽象,代表了从起源到接收的有序数据,有了它程序就可以采用统一的方式来访问不同的输入源和输出源了。
按照数据的流向,可以将流分为输入流和输出流。其中,输入流只能读取数据、不能写入数据,而输出流只能写入数据、不能读取数据。
按照数据的类型,可以将流分为字节流和字符流。其中,字节流操作的数据单元是byte(8位的字节),而字符流操作的数据单元是char(16位的字符)。
按照使用的场景,可以将流分为节点流和处理流。其中,节点流可以直接从/向一个特定的IO设备读/写数据,也称为低级流。而处理流则是对节点流的连接或封装,用于简化数据读/写功能或提高效率,也成为高级流。
- 说一说你对Spring AOP的理解
AOP面向切面编程,将代码中重复的部分抽取出来,使用动态代理技术,在不修改源码的基础上对方法进行增强。如果目标对象实现了接口,默认采用JDK动态代理,也可以强制使用CGLib,如果目标对象没有实现接口,采用CGLib的方式。常用的场景包括权限认证、自动缓存、错误处理、日志、调试和事务等
- 最小的k个数
import java.util.ArrayList;
import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> res=new ArrayList<Integer>();
if(k==0 || input.length==0)
return res;
PriorityQueue<Integer> q = new PriorityQueue<>((o1,o2)->o2.compareTo(o1));
for(int i=0;i < k; i++)
q.offer(input[i]);
for(int i=k;i< input.length;i++){
if(q.peek()>input[i]){
q.poll();
q.offer(input[i]);
}
}
for(int i =0;i<k;i++)
res.add(q.poll());
return res;
}
}