多多pdd面试

一面(45min)8:17 18:00

1. 面试官自我介绍。(说我电脑有杂音,听不清楚。一定要调好自己的电脑)
2. 代码题:十个子进程并发执行,父进程等待所有子进程结束状态之后,在返回结果。(30min)
3. 基础知识:
  a. 你在编写Java代码的过程中遇到的死锁问题是什么样的
  b. 线程池的执行流程,你能描述一下吗
  c. string,stringbuilder, stringbuffer的区别,你能说一下吗
  d. finally语句什么时候一定执行,什么时候不执行
  e. Java创建对象的四种方式
  f. 说一说你了解的排序算法的原理,以及它们的复杂度
    ⅰ. 有没有使用额外内存的排序算法
  g. 说一说数据库MyISAM和Innodb的区别
  h. 索引失效的几种情况
  i. 模糊匹配中like的通配符,你知道几个
  j. 你在使用Java连接数据库的时候,遇到过什么问题
  k. jvm调优策略你知道吗(回答不知道,就没继续问了)
4. 反问

------------------------
二面(1h)8.24 13:00

一、项目
介绍一下自己最近的项目,谈一下项目的流程:
用户是怎么登录的,主键是什么,用户名这一字段建索引了吗,为什么没有建立索引?(难道不应该建立索引吗,答因为用户量比较小,用不着建索引,浪费空间)
用户密码是怎么保存的,用户的状态如何保存呢?
你说你实现了图片的上传,HTTP是超文本传输协议,只能传输二进制文本,你是怎么传输图片的(base64将图片转换成二进制)。base64是自己写的转换处理吗(不是)那你调用了什么工具进行的转换?
二、八股
ArrayList和LinkedList都是读取100000000个对象,那个比较快?哪个占用内存比较多。(面试官想的是从体系结构角度来回答,考的是局部性原理)。
三、代码
将一个ip转换成一个int32位整数;写了一段代码,面试官好像没用过String的工具类,不是很熟悉,然后搜了一下才知道确实有这个用法,第一次写有思路,但是代码写的有点复杂,面试官要求能不能改一下。然后写了一个位运算的代码,死活调不通;然后就是面试官和我一起debug(笑)。最后找到问题了,原因是移位运算的优先级问题。真的是蠢死我了;
四、反问
我:面试官,咱们周六还上班吗(因为是周六进行的面试,我脑子一抽,就问了,笑鼠了)
面试官:(笑)当然是加班了,加班面试,你想来吗?
我:嘿嘿

-----------
流程已终止(不嘻嘻
全部评论
哎 为什么挂了
点赞 回复 分享
发布于 2024-08-26 15:10 江苏
pdd 一共几面
点赞 回复 分享
发布于 2024-08-26 16:19 北京
代码题是子进程不是子线程么,这linux编程谁会啊
点赞 回复 分享
发布于 2024-08-26 18:26 上海
佬是服务端吗,请问下二面多久后流程终止的?
点赞 回复 分享
发布于 2024-08-27 03:01 福建

相关推荐

- 大数据平台研发岗位- 如流软件面试,开摄像头,在如流上手撕代码- 面试官人很好,经常鼓励人,也会及时给出正确的思路- 可惜职责还是有点不匹配,这个部门主要用java和go做平台的开发,类似DolphinScheduler的平台开发## 八股- 对DolphinScheduler的底层代码和架构有没有了解- 你在Spark你在用的过程中,有时候会碰像那种性能不好或者数据倾斜的场景。这种情况下你一般会怎么去做优化?可以就结合你具体遇到的问题,可以来来详细讲一下,就是或者hive遇到的都可以。- 你在这过程中,就你项目中接触了这么多个组件,有没有自己去搭过一些集群和组件相关的呢?  - 搭建过程中有没有碰到过,比如什么问题,比如HDFS不可以用,或者是Yarn出问题,这种问题有没有碰到过?- 你对于Hadoop他这边是如何实现这种高可用有了解吗?  - Zookeeper是作为分布式锁存在的- HA高可用中多个NN数据是一样的,他们是怎么保证数据相同的  - HA高可用中还有什么Node,通过日志的形式保证多个NN的数据一致- 主要开发环境是linux还是windows- 对linux这边有一些基本的了解吗?- 比如我linux有一台有一个linux它有一就是linux他你通过你那个发现他的内存或者CPU占用特别高,它中间可能是某一个进程或者某一个服务占用了大量资源。你这种情况下,你如果是你的话,你怎么去排查?- 比如我有一个任务,他你比如说他发现他的日志一直在写,就是一直在打那个没有空间了,就没有磁盘空间了。这种情况下你怎么去查一下是哪些地方磁盘不足了,应该怎么处理?- java中equal和==的区别  - 自己写过自定义类重写equals方法吗- java类加载的这块你了解过吗?  - 讲了双亲委派机制  - 为什么要实现双亲委派机制这个操作?- java反射了解吗- java多线程代码写得多吗  - java线程有几种状态  - java中如何写代码多线程访问共享资源## 手撕- 手撕LRU类,要求实现get和put方法,并且规定一个最大容量,如果put时达到最大容量则替换掉存在最久的元素  - 讲思路,用的事务id,很快实现了- 手撕java多线程代码,被我婉拒,实在不怎么记得了
查看20道真题和解析
点赞 评论 收藏
分享
今天 10:33
已编辑
门头沟学院 Java
前提:面试官人很好,一半八股一半项目无手撕,总结不会的问题1.RocketMQ怎么确保消息仅消费一次(面试官的意思这几个常用的MQ仅仅RocketMQ通过拓展功能可以保证唯一消费一次):一开始回答了消息的幂等性用唯一id保证,还可以把对应消费的状态存在redis里面还有mysql里面分多级缓存,如果对应id还是消费中的状态就可以进行重新消费,然后面试官的意思是RocketMQ通过拓展功能可以保证唯一消费一次(这个确实不太懂)RocketMQ 的 Exactly-Once 投递语义,就是用于解决幂等问题。Exactly-Once 是指发送到消息系统的消息只能被消费端处理且仅处理一次,即使生产端重试消息发送导致某消息重复投递,该消息在消费端也只被消费一次。最佳的幂等处理方式还是需要有一个唯一的业务标识,虽然每条消息都有 MessageId,但是不建议用 MessageId 来做幂等判断,在发送消息的时候,可以为每条消息设置一个 MessageKey,这个 MessageKey 就可以用来做业务的唯一标识。参考:https://www.nowcoder.com/discuss/353148811591753728?sourceSSR=searchhttps://mp.weixin.qq.com/s/9fhqnbeXPz7-7x0Eadd8DA使用文档可以参考https://github.com/Jaskey/RocketMQDedupListener ,2.CMS垃圾回收过程,重新标记阶段是怎么实现的,怎么确保效率(之前没了解过增量并发标记、satb)CMS采用的是增量并发标记,G1中使用的是SATB(Snapshot-At-The-Beginning)算法漏标问题:三色标记(1)已被遍历标记过的黑色对象重新引用了该白色对象;(2)删除了全部从灰色对象到该白色对象的直接或间接引用。处理漏标(1)CMS 是基于增量更新来做并发标记的。增量更新要破坏的是第一个条件,当黑色对象插入新的指向白色对象的引用关系时,就将这个新插入的引用记录下来,等并发扫描结束之后,再将这些记录过的引用关系中的黑色对象为根,重新扫描一次。这可以简化理解为,黑色对象一旦新插入了指向白色对象的引用之后,它就变回灰色对象了。(2)G1 是基于原始快照来做并发标记的。原始快照要破坏的是第二个条件,当灰色对象要删除指向白色对象的引用关系时,就将这个要删除的引用记录下来(使用一个快照记录标记过程中新分配的对象),在并发扫描结束之后,再将这些记录过的引用关系中的灰色对象为根,重新扫描一次。这也可以简化理解为,无论引用关系删除与否,都会按照刚刚开始扫描那一刻的对象图快照来进行搜索。其他:CMS和G1的区别(1)在 G1 收集器出现之前的所有其他收集器,包括 CMS 在内,垃圾收集的目标范围要么是整个新生代(Minor GC),要么就是整个老年代(Major GC),再要么就是整个 Java 堆(Full GC)。(2)G1 把堆内存分割为很多不相关的区域(Region,物理上不连续区分,逻辑上是连续区分 Eden 区、Survivor区,old区),Region 作为单次回收的最小单元,它可以面向堆内存任何部分来组成回收集(Collection Set,一般简称 CSet)进行回收,衡量标准不再是它属于哪个分代,而是哪块内存中存放的垃圾数量最多,回收收益最大,这就是 G1 收集器的 Mixed GC模式。参考:https://blog.csdn.net/longool/article/details/1407367403.JDK21引入的虚拟线程的概念:有点模糊,协程我以为不会问没背传统线程(1)绿色线程-定义:早期 Java 使用的一种线程模型,由 JVM 完成调度和管理,属于 M:1 线程映射模型。缺点:由于无法充分利用硬件性能,且实现复杂,最终被淘汰。(2)平台线程-定义:Java 1.2 之后采用的线程模型,依赖于操作系统的支持,属于 1:1 线程映射模型。优点:执行效率高,但开启和关闭线程的资源消耗较大。存在问题在内存有限的情况下,使用传统平台线程处理大量 IO 密集型请求,线程数量有限,会导致 CPU 利用率低。虚拟线程是轻量级线程(类似于 Go 中的 “协程(Goroutine)”),是由Java虚拟机调度,而不是操作系统。虚拟线程占用空间小,任务切换开销几乎可以忽略不计,因此可以极大量地创建和使用。JVM 使用 M:N 来完成虚拟线程与本地线程的映射。虚拟线程和线程池的异同看上去虚拟线程和线程池有类似之处,都是利用M个内核线程,完成N个任务,而避免平台线程频繁的创建和销毁。但他们是有本质区别的:(1)线程池中的正在执行的任务只有到任务执行完成后,才会释放平台线程,如果某个任务在执行过程中发生IO阻塞也不会被挂起执行其他任务。(2)虚拟线程中运行的代码调用阻塞I/O操作时,Java运行时会挂起虚拟线程,然后切换到另一个可执行的虚拟线程,直到它可以恢复为止。参考:https://blog.csdn.net/tianjindong0804/article/details/1350462714.分布式不同机器,写数据库了,怎么确保task消息的幂等性和同步更新(这里我回答了mysql的隔离级别,读已提交,还有主从)分布式事务:使用分布式事务管理器(如XA协议)来确保在多个数据库之间的一致性。5. 谈谈CompletableFuture(之前没了解过)https://www.nowcoder.com/discuss/686266738308055040?sourceSSR=search其他题目(1)CompletableFuture 和 Future 的区别,返回的是什么,怎么捕获异常(2)CompletableFuture 里的 all of 方法可以怎么实现(讲了 AtomicInteger 计数,他问还有没有,讲了信号量,他说其实还有 CountDownLatch)参考链接:https://www.nowcoder.com/feed/main/detail/b9d0579f8bfa46d8b44af7619a6f1b72?sourceSSR=search6. 业务的动态部署总结:第一次面试,八股背的深度不够,好多细节遗漏接着面,接着背
查看8道真题和解析
点赞 评论 收藏
分享
评论
21
72
分享

创作者周榜

更多
牛客网
牛客企业服务