2024百度提前批Java面经
一面
- 自我介绍
- 算法题:一个长度为n的数组找出最大的m个数
- 讲思路:给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url
- 服务器处理并发请求有哪几种方式?(如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%,你的解决思路是什么
二面
- 在项目中承担的工作
- 现场的传感器是通过一个不可靠的连接将传感器的数据发送到云端,如何可靠地将数据传输到服务器上,保证这个过程不丢失、不重复(保证数据的完整性)
- redis作为数据库的前端缓存的时候需要考虑数据的一致性,当需要写入的时候,是先操作数据库还是先操作缓存?
- 为什么要延迟删除redis中的数据
- 在java中通过system.currenttimemillis获取时间戳,获取的时间是一个毫秒级的时间,如果我们写的一个程序有一个for循环,循环里面调用system.currenttimemillis和Thread.sleep(1),可以获取到一秒钟内的所有毫秒吗
- 程序运行在linux的服务器上,调用Thread.sleep(1),会发生什么?
- 程序发送一个网络连接,发送出去会占用一个网络端口,网络端口总数只有65535个,为什么服务端可以同时接受十万到百万个网络连接呢?
- A客户端向B服务器的80端口发送连接,最多可以发送多少个网络连接?
- 为什么服务器端可以同时处理多个并发连接,而发起方没有端口限制呢?
- 算法题:在一个无重复元素的先递减后递增的数组中找到最小值
- 讲思路:一个目录里有10亿文件分片,另一个目录里有几万个索引的文件,索引里记录了小分片的路径,一个索引文件里记录了几千到几万的引用,如果一个文件分片被一个索引引用了,就不能删除。考虑路径长度为100字节,那至少需要100G内存才能存下,现在没有那么大内存。现在需要一个方案,筛选出一些可以被安全删除的文件?(如何进行数据清理)