牛客网AI面试第三轮

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


猜你喜欢

转载自blog.csdn.net/AzirBoDa/article/details/126212779