hey,我是白露。
又到了一年一度的秋招季,有人为了大厂加班跋山涉水,有人为了内推使出浑身解数。
今天我们来看一则招聘信息,”部门200个HC(招聘名额)敞开怀抱,业务扩张太快,面试一周搞定“,这简直是秋招中的一股清流啊!
你有没有想过,也许拼多多才是互联网界的“铁饭碗”。
拼多多的后台开发部门不仅提供了丰厚的薪资待遇,还打出了“安心赚钱,不担心裁员,HC巨多!!”的口号。
是什么让pxx如此自信?
丰厚薪资,一目了然
贴一个拼多多2024年的校招薪资,
pdd的薪资主要是18薪(也就是18个月的工资)
除了12个月的工资,还包括2个月的绩效+2个月的年终+2个月的加班费😂
拼多多校招2024薪资大曝光
具体来说,开发岗位的白菜员工薪资在27-30k之间,而ssp员工更是能拿到37-40k。
算法岗位同样诱人,白菜员工27-32k,ssp员工则是38-43k。
而对于产品、运营、设计等岗位,薪资结构也是同样诱人!
看到这里,大家是不是已经跃跃欲试了?
别急,接下来我们就来聊聊拼多多后端技术岗位的面试经验,看看如何顺利拿下这个“铁饭碗”!
面试开始
今天的面经来源于白露自己的一位陪跑学员(java后端)的真实面试内容!顺便恭喜这位学员已拿下offer!
本次面试经历了三轮专业面,今天在这篇文章里面给大家分享前两轮面试的内容,如有需求的朋友,可以后台滴滴白露,查看整个面试的完整内容!!
同时,白露自己的博客网站OfferNow也已上线,当前网站上已有400+份学习资料,不仅涵盖现下热门编程语言的学习,同时也有超多面试真题。
- 超多实践面试真题汇总(持续更新中!!)
01 拼多java后端一面面经
基础问题
自我介绍:
- 请简要介绍一下自己,包括你的教育背景和工作经验。
项目介绍:
- 介绍一下你参与过的项目,包括各个服务的功能是什么。
- 你的各个服务是如何通信的?是否了解RPC?介绍一下RPC。
- 在高并发场景下,你是如何应对的?
八股问题
微服务架构:
- 谈谈你对微服务架构的理解。
- 你是否了解设计模式?使用过哪些设计模式?
- 介绍一下你使用过的消息队列,例如RocketMQ的架构。
数据结构和算法:
- 介绍一下HashMap的底层数据结构。
- 面向对象编程的理解,介绍一下继承、封装、多态。
- 介绍一下你使用过的Redis的数据结构及其作用,为什么使用内存做缓存?
- 解释Bigkey问题和Hotkey问题及其解决方案。
- 你是否了解MySQL?为什么不使用MySQL做缓存?
系统和性能优化:
- 介绍一下JVM的内存结构。
- 垃圾回收算法介绍一下。
- 介绍一下分代回收。
实践操作题
编码题目
- 请用代码实现一个简单的缓存系统,并说明你设计的理由。
- 实现一个简单的消息队列,解释其核心逻辑。
值得注意的是,拼多多的算法题没有代码提示,得手敲!!
02 二面被问麻了!!
基础问题如自我介绍等问题在一面面经中已写,在此不再赘述。在此,我们仅阐述二面的面经核心问题。
项目相关问题
有接触过哪些消息队列中间件?如何来选型?
- 答:接触过RabbitMQ、ActiveMQ、Apache Pulsar。选型依据包括吞吐量、延迟、消息持久化能力、拓展性、社区支持、运维难度和企业的具体需求。例如:
- RabbitMQ:适合需要复杂路由规则、易用性高、需要持久化的场景。
- Apache Pulsar:适合高吞吐量、低延迟、需要多租户支持的场景。
- ActiveMQ:适合需要兼容JMS规范,且需要持久化支持的场景。
为什么用消息队列?
- 答:使用消息队列的主要原因包括:
- 解耦:使得生产者和消费者可以独立发展、独立部署。
- 异步处理:允许任务异步处理,提高系统吞吐量和响应时间。
- 流量削峰:在流量高峰期可以平滑处理流量,避免系统过载。
- 数据持久化:保障消息的持久化存储,提升系统可靠性。
- 容错处理:支持消息重试和处理失败后的恢复机制。
对于消息的重复消费你有什么设计方案吗?
- 答:以下是一些常见的设计方案:
- 幂等性设计:在消费者端实现幂等性,即重复执行相同的操作不会改变最终结果。
- 唯一ID检测:给每条消息分配唯一ID,在消费时检查该ID是否已经处理过。
- 事务机制:使用事务消息,确保每条消息只处理一次,例如使用数据库事务或消息队列的事务特性。
- 消息确认机制:确保消费者在成功处理消息后才确认消息,未确认的消息可以重新消费。
计算机网络
HTTP和HTTPS的区别是什么?
- 答:HTTP是明文传输,HTTPS使用SSL/TLS加密传输,HTTPS更安全,防止数据窃取和篡改。
DNS解析的过程?
- 答:客户端查询本地DNS缓存 -> 本地DNS服务器 -> 根DNS服务器 -> 顶级域DNS服务器 -> 权威DNS服务器 -> 返回IP地址。
TCP和UDP的区别?
- 答:TCP是面向连接的,提供可靠传输,适用于数据完整性要求高的场景;UDP是无连接的,传输效率高,适用于实时性要求高的场景。
TCP三次握手的过程,如果没有第三次握手会有什么问题?
- 答:第一次:客户端发送SYN,第二次:服务器回复SYN-ACK,第三次:客户端回复ACK。没有第三次握手,服务器无法确认客户端接收到ACK,可能导致资源浪费和连接不可靠。
Java并发
Java中如何实现线程安全的队列?
- 答:可以使用ConcurrentLinkedQueue或BlockingQueue(如ArrayBlockingQueue和LinkedBlockingQueue)。
什么是CAS?它是如何工作的?
- 答:CAS(Compare-And-Swap)是一种原子操作,通过比较期望值和当前值,如果相同则更新为新值,常用于无锁并发编程。
什么是线程池?为什么使用线程池?
- 答:线程池是一种管理线程的机制,通过重用线程减少线程创建和销毁的开销,提高系统性能和稳定性。
Java并发包组件了解多少?
- 答:了解ConcurrentHashMap、CopyOnWriteArrayList、CountDownLatch、Semaphore、CyclicBarrier等,用于线程安全操作和并发控制。
HashMap、HashTable和ConcurrentHashMap的区别?
- 答:
- HashMap:非线程安全,适用于单线程环境。
- HashTable:线程安全,但性能较低。
- ConcurrentHashMap:线程安全,采用分段锁提高并发性能。
什么时候多线程会发生死锁?怎么预防?
- 答:多线程在持有资源等待其他线程释放资源时可能死锁。预防措施包括避免嵌套锁、使用超时锁、按序请求资源、使用死锁检测机制。
什么是线程局部变量?
- 答:线程局部变量(ThreadLocal)是每个线程独享的变量,确保线程之间的变量互不干扰。
如何实现线程的安全终止?
- 答:使用volatile标志位、interrupt方法或使用并发包中的Future.cancel方法。
Java中如何实现不可变对象?
- 答:将类声明为final,所有字段为私有并使用final修饰,不提供修改字段的方法,仅通过构造器初始化所有字段。
单例模式怎么保证线程安全?
- 答:使用双重检查锁定、静态内部类或枚举方式实现线程安全的单例模式。
什么是读写锁?有什么用处?
- 答:读写锁(ReadWriteLock)允许多个读线程并发访问,但写线程独占锁。适用于读多写少的场景,提升并发性能。
Fork/Join框架的原理是什么?
- 答:Fork/Join框架将大任务拆分为小任务并行执行,通过ForkJoinPool管理任务的分解和合并,提高任务执行效率。
最后,祝你拿到心动的Offer!
当然,除了这些之外,pdd的每次面试都会问到面试者关于11116工作的看法,能否接受…
如果你在准备秋招的过程中遇到任何疑问或需要更多的面试辅导,我的秋招陪跑项目可以为你提供全方位的支持和帮助。无论是模拟面试、简历优化,还是专项技能培训,我们都能为你量身定制解决方案,拿到理想的offer。
想要了解陪跑项目的同学,也可以后台私信白露!