首页 > 其他分享 >1.百度秋招面试题

1.百度秋招面试题

时间:2023-12-09 21:45:57浏览次数:32  
标签:面试题 缓存 哈希 URL 布隆 过滤器 数组 秋招 百度

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)

标签:面试题,缓存,哈希,URL,布隆,过滤器,数组,秋招,百度
From: https://www.cnblogs.com/kzf-99/p/17891440.html

相关文章

  • 测试基础面试题
    一、测试相关问题1、说一下测试流程2、介绍下你最近做的或者最熟悉的测试项目、架构组成3、需求评审关注点4、技术评审过程是否有提出过问题/技术评审关注点5、测试方案如何设计6、如何制定测试计划7、如何设计测试用例(介绍下你负责的项目,选个模块说下测试用例)7、如何保障......
  • 2023最新中级难度Go语言面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度Go语言面试题合集问:请描述一下Go语言的并发模型,并解释一下为什么它适合现代Web应用?Go语言的并发模型是基于CSP(CommunicatingSequentialProcesses,通信顺序进程)理论,主要是通过goroutine和channel来实现并发的。goroutine可以看......
  • 2023最新高级难度Go语言面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度Go语言面试题合集问:请深入解释Go语言的内存分配和GC(垃圾回收)机制,以及它们如何影响程序的性能。Go语言的内存管理由内置的垃圾回收器自动进行,它将内存分为三个区域:堆、栈和全局区。栈存放局部变量、参数、返回地址等小对象,堆存......
  • 秋招失利,我的春招该怎么办?这里有一条春招救急指南
    在2023秋招中没有取得理想的offer,可以提前为春招做哪些准备?每个人都有一个进入名气的梦想,每个人都希望找到一个自己喜欢,工资高的好工作。然而,赤裸裸的现实告诉你,你还没有真正进入社会,就得感受到来自中国庞大人群的竞争压力了。2023年的秋招正在结束,在这次秋招中,没有拿到理想的offer......
  • #yyds干货盘点#Java面试题
    1.如何理解面向对象和面向过程【面向过程】:完成某件事的过程,性能高于【面向对象】优点:但是因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展【面向对象】:把要完......
  • 2023最新中级难度JavaScript面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度JavaScript面试题合集问:如何实现在JavaScript中的操作settimeout/setinterval?在JavaScript中,setTimeout()和setInterval()是两个非常重要的函数,它们分别用于设置一次性延时执行的函数和周期性重复执行的函数。setTi......
  • 2023最新高级难度JavaScript面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度JavaScript面试题合集问:请问你如何使用装饰器模式?装饰器模式是一种设计模式,它允许我们在不修改原有类的基础上,动态地添加新的功能或者行为。装饰器模式通过创建一个新的对象来包装原始对象,并提供与原始对象相同的方法接口,但是......
  • 2023最新初级难度前端面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-初级难度前端面试题合集问:请详细描述HTML、CSS、JavaScript的基本结构?HTML、CSS、JavaScript是web前端开发中最常用的三种技术,它们分别负责页面结构、表现形式和交互行为。HTML(HyperTextMarkupLanguage)是一种用于构建网页的标......
  • 使用百度完成gui的图像处理(需要下载百度的javasdk文档,主要工具带代码在sdk之中,以下代
    packageGui;importcom.baidu.aip.imageprocess.AipImageProcess;importorg.json.JSONObject;importjavax.imageio.ImageIO;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.i......
  • 2023最新高级难度react面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度react面试题合集问:如何实现React中的组件缓存策略?在React中,我们可以使用多种策略来实现组件的缓存,包括但不限于以下几种方法:使用React.memo()React.memo()是一个高阶函数,它可以接收一个组件作为参数,并返回一个新的组件。......