1.百度秋招面试题

发布时间 2023-12-09 21:36:07作者: 求知律己

1.2024 百度提前批Java面试

一面

1.1 算法题:一个长度为n的数组中找出m个最大的数。

 思路:将数组排序,然后创建一个长度为m的数组,将原数组下标n-m-1到n-1的数组复制到长度到m的新数组中。

public class FindMaxM {

    public static int[] findMaxM(int[] nums, int m){
        if (nums == null || nums.length == 1 || m <= 0 || m > nums.length){
            return new int[0];
        }
        Arrays.sort(nums);
        int[] arr = new int[m];
        //复制原数组后m个数给新数组
        System.arraycopy(nums, nums.length-m, arr, 0, m);
        return arr;
    }

    public static void main(String[] args) {
        int[] nums = {1, 3, 2, 5, 4};
        int[] maxM = findMaxM(nums, 3);
        for (int val: maxM) {
            System.out.print(val + " ");
        }
    }
}
长度为n的数组中最大m个数

测试结果

3 4 5

1.2 说出给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url的思路

  该问题设计大数据处理和算法优化知识点。由于内存限制是4G,文件a和b共占用空间超过该限制,因此无法将所有URL加载到内存中比较。为解决该问题,可以使用哈希算法将文件a和b的URL分成多个小文件,再将每个小文件加载到内存中比较。具体流程为:

  1. 对文件a和b的每个URL计算hashcode,并根据hashcode将URL分配到不同的小文件中;
  2. 接着将每个小文件加载到内存中,使用hashset或布隆过滤器存储URL,加快查询
  3. 一旦所有的URL都处理完毕,并存储在数据结构中,可以将文件b逐个加载到内存中,同时对每个URL进行哈希计算,并在数据结构中查询是否存在相同的URL。
  4. 如果存在相同的URL,即找到共同的URL之一,可以记录下来或进行其他处理。
  5. 重复执行步骤4,直到文件b中的所有URL都处理完毕,返回最后结果。

1.2.1 布隆过滤器

  布隆过滤器(Bloom Filter)是一种空间效率非常高的概率型数据结构,用于判断某个元素是否存在于一个集合中。它通过使用位数组和多个哈希函数来判断元素的存在性具有高效的插入和查询操作,并且相对于传统的数据结构可以节省大量的内存空间

原理

  1. 初始化时,创建一个位数组,长度为m,并设置所有位的值为0
  2. 选择k个独立的哈希函数,每个哈希函数可以将元素映射到位数组中的一个位置
  3. 针对要插入的元素,依次使用k个哈希函数计算哈希值,并将对应的位数组位置设置为1
  4. 对于查询操作,同样使用k个哈希函数计算待查询元素的哈希值,并检查对应的位数组位置是否全为1。如果有任何一个位数组位置为0,则判定该元素一定不存在;如果所有位数组位置都为1,则判定该元素可能存在。 

布隆过滤器的使用场景如下:

唯一性判断:在数据库或缓存中,可以使用布隆过滤器判断某个元素是否已经存在,避免重复插入或查询

URL去重:对于大规模的URL集合,可以将URL放入布隆过滤器中以过滤重复的URL减少存储和计算资源的消耗

黑名单过滤:可以将黑名单中的元素放入布隆过滤器,从而高效地判断某个元素是否在黑名单中

防止缓存穿透:通过布隆过滤器判断请求的数据是否在缓存中不存在,从而减轻数据库或后端存储的压力

1.3 布隆过滤器处理缓存穿透问题

缓存穿透当用户访问数据是,数据既不在缓存中,也不在数据库中。当有大量的用户请求数据时,数据库压力剧增

发生原因:1)业务误操作导致缓存和数据库中数据全部被删除;2)恶意黑客攻击,大量访问某些读取不到的数据的业务。

解决方案

  • 非法请求限制,在API接口处判断参数合理性,避免访问缓存和数据库;
  • 缓存null值或默认值,避免查询数据库;
  • 使用布隆过滤器快速判断数据是否存在,避免查询数据库数据是否存在,来应对缓存穿透。

缓存穿透中布隆过滤器的工作原理

  布隆过滤器由「初始值都为 0 的位图数组」和「 N 个哈希函数两部分组成。当我们在写入数据库数据时,在布隆过滤器里做个标记,这样下次查询数据是否在数据库时,只需要查询布隆过滤器,如果查询到数据没有被标记,说明不在数据库中

 

服务器处理并发请求有哪几种方式?(如tomcat,nginx)

了解select,poll,epoll吗

java有一种现代的处理方式,属于异步I/O,是什么

redis,nginx,netty这些超高性能的中间件,是依赖什么做的这么高性能

https是如何防范中间人的攻击

描述一下打开百度首页后发生的网络过程

什么是ddos攻击,怎么防范

进程中通信的方式有哪些

linux中有一个日志文件,日志文件中记录了访问请求的信息,第一列是访问的日期,第二列是请求的ip,第三列是请求的耗时,写一条shell命令来查到请求耗时最高的10条记录

怎么查看哪个端口被哪个进程占用

用shell命令替换一个文件中的字符串

有代码review吗,过程是什么

使用过git吗,在一次commit后,如果想再进行一次commit并且和并之前的commit,一共只产生一条commit,该如何操作

mysql有哪几种存储引擎,它们的区别是什么

mysql的隔离级别分为哪几种类型

慢查询是如何调试解决的

mysql的explain有什么作用

java中有哪些常用的锁,在什么场景下使用

什么是反射,反射在java中有哪些使用场景

开放接口到外网有哪些风险

怎样防止未授权的访问

假如cpu跑到100%,你的解决思路是什么

二面


 

2.参考面试题目链接

1.2024百度提前批Java面经_牛客网 (nowcoder.com)

什么是缓存雪崩、击穿、穿透? | 小林coding (xiaolincoding.com)