Bootstrap

拼多多服务器端研发 Java面试经验大全

之前准备面试时整合的拼多多面试经验,供大家参考。


反爬虫

校验码、封ip、动态渲染、

spring怎么管理事务?

io、nio、aio

mysql

怎么做到缓存和数据库的一致性?

类加载器

打破双亲委派

双亲委派的工作流程

java怎么打印调用栈

exception种类

http中的content-length

-防止内容篡改

tcp协议、udp区别

服务怎样适应高并发?

高并发解决方案

    • 静态资源分离

    • 页面缓存

    • 反向代理

    • cdn

    • 数据库集群,读写分离,分库分表

    • mq削峰

    • 集群

编程题:

非递归方法实现树的后序遍历

java的特性 -面向对象、封装对象

反射机制 优缺点

gc原理、方法

java内存泄漏会在什么情况出现

进程和线程 区别

进程的通信机制 区别

进程的调度方法 常见的三种 优缺点

tcp可靠性传输 方法

tcp建立连接 断开连接(三次、四次握手)

spring框架 介绍

java其他框架

实际文件、内存4g,英文单词 统计出现最高的单词,怎么搜索 复杂度更低的 -切片

mySQL 特性、索引

b树、b+树 -链表形式

红黑树区别 -平衡树

java算法 排序算法 -(8种)

编程题:从数组中找众数(众数数量大于Math.floor(n/2))

然后一道算法题:切分一个数字字符串,使之成为一个严格递增的序列。

 

一面:

线程和进程的区别

线程有哪些私有变量(java)

浏览器输入一个url发生了什么

家里的路由器有什么作用

Linux命令 top

僵尸进程

讲一下红黑树

java io讲一下(有用过netty么)

tcp连接的time_wait状态

tcp除了syn包还有什么包,数据传输时标志位是什么状态

线程的5种状态

java线程池的作用

讲一下websocket

为什么要有索引

讲一下数据库的事物

讲一下排序算法,说一下快排

算法

实现LRU

二面:

hashMap hashSet

java的垃圾回收方法

tcp怎么保证可靠传输

线程池作用

volatile怎么保证内存可见性

多进程和多线程的优缺点

算法  多条有序单链表求交集

 

  1. 自我介绍

  2. 项目里负责什么

  3. 项目中最大的困难

  4. 技术选型怎么考虑的

  5. 项目部署、测试怎么做的

  6. 两个模块jar包版本不一样怎么办?

  7. 版本号怎么设计?

  8. Dubbo简介

  9. 为什么用Redis?

  10. Redis缓存数据一致性

  11. 用MQ时考虑了什么?

  12. 线程池提高响应效率怎么做?

  13. 项目QPS要求?

  14. java和jvm区别

  15. jvm特点:

  16. jar的启动过程

  17. java平台无关性的好处

  18. GC有哪些

  19. 讲一下CMS

  20. jdk9之后默认G1了,讲讲G1的优缺点

  21. 操作系统了解吗?

  22. 脚本写过吗?

  23. 批处理写过吗?

  24. 大数据了解吗?

  25. 手撕代码:

一个是leetcode周赛刚做过的题 1544 整理字符串,不过一时兴奋,写漏了一层循环……

一个是数组交叉输出

 

一面 

自我介绍环节

主要问了问实习的内容

基础知识问答主要是java集合,tcp,http啥的

时间隔得有点久了记不太清楚了,不过都是一些常见的问题

算法题写了一个

最大连续子列和

二面 

二叉树后序遍历的非递归实现

问答环节是从实习项目出发的,问了一些mysql相关的内容

如何判定索引命中,复杂情况如何判定

组合索引(联合索引)。一开始我以为组合索引和联合索引不是一个东西,就说了说一句sql命中两个不同索引的情况,后来跟我说是联合索引,又简单说了一下最左匹配

联合索引建索引的时候,选什么列放前面

 

1. 算法题:10亿个数查找大小排序第10到第100个,不调用库函数实现优先队列的poll

2. http原理

3. tcp和udp对于网络稳定性的要求

4. 操作系统的地址有几种,具体说明

5. 多进程和多线程

6. redis和mysql的数据一致性实现

7. 为什么redis单线程就更快

8. 什么是上下文切换

9. 堆排序复杂度的证明

10. 虚拟机栈的功能

 

拼多多二面

对Java了解是吧,说一下Java的语言啥啥,第一次听到这个名词,没搞明白,发现我白板,跳过

java的集合,list set map,那说一说list和set吧,list和set的区别,arraylist和linkedlist的应用场景,一个long类型的数值可以加入到list中吗,说了不能,list集合接受的只有Object类型的,但是long可以和Long拆箱装箱,自己把自己说迷了,讲一讲set吧,讲了HashSet和TreeSet,还有吗?没有了=_=

ArrayList线程安全吗,怎么把他变成线程安全的呢?Collections下面有个方法Collections.synchronizedList可以实现转换,那怎么把它变成线程安全的呢?=_=盲猜加synchronized锁,那么这是一种什么样的设计模式呢(???)你知道的设计模式,不要说单例模式 😂,单例模型和原型模式的区别,一句话概括适配器模式,享元模式怎么实现的,解释下什么叫享,什么叫元(???),举一个现实生活中适配器的例子,不要说代码???

说说数据库的事务吧,刚说了原子性,说好了好了,说一下你咋理解一致性的,隔离性咋实现,数据库的隔离级别,数据库的MVCC,说具体一点

说说分布式,讲了讲2pc\3pc\tcc(简直倾尽所能了)

cap,好,不要讲cap理论,就说说zookeeper实现了那两个(猜个cp)为啥 我:。。。。

然后又开始问基本情况,大学参加过啥社团,研究生有奖学金吗,大学都有啥奖啊,你的优点和不足,说到自己学习能力强(这不是都是套话吗),打断,问你举个例子证明自己学习能力强

反问,然后还给我提了几个建议,说最开始问我对拼多多的了解的时候就发现我说的都是一些空话大家都会说😂介绍介绍他们部门,然后说剩下点时间有个代码题你做做

回到编程界面给了一道题,一个数组有正数负数和0,求三个数的乘积的最大值,提醒注释、变量命名、函数命名、书写规范、边界情况考虑

刚写上Arrays.sort,说不能用API,于是手撸一个归并

 

二面很迷,通知写着大约1h,结果就面了40min,和一面一样问了很多项目的事情,java几乎没问,不按常规套路出牌。

还想着后面会不会问其他,结果就告诉我说面试结束了,也没让反问。也不知道还能不能进下一轮唉。。。

 

自我介绍

研究生阶段的研究方向

两个项目都介绍了一遍,主要负责工作

项目组人数,各负责什么工作,说这是很大周期很长的项目,多方合作,就叫我介绍项目的总体结构

算法模型输入数据集怎么处理得到的

用了哪些算法,为什么选择这个,有和其他算法进行对比吗

 

给了一个题:图书馆管理系统

明确需求,字段,建表,写sql

代码结构设计

-------------------------------------------------------------------------------------

 

自我介绍(介绍完了才发现面试官的视频卡了,估计就听我介绍了一半,也没叫我重新介绍,直接开始问了)

聊项目(介绍、主要工作)

使用的是http接口嘛,具体说说前后端怎么通过这个接口进行交互的

前端传入参数和后端的数量或类型会怎么处理

用了哪些注解,讲了讲作用

后端和数据库的交互,建了哪些索引

事务隔离级别

知道哪些排序算法,时间复杂度也说一下

手撕:树的层次遍历,每一层结点得值打印在一行上

如果是从最下层往最上层打印呢

 

全程项目+场景,无基础问题

代码:k个有序数组找交集

项目无参考意义

场景:

1、适应多线程读写设计缓存

2、多机海量单词查找top1000词频的单词

 

1、首先上来简单做一下自我介绍。然后让介绍简历里的项目。说下项目里的难点,技术架构。平时开发过程中都遇到过哪些难题?平时都怎么和同事沟通的?

2、然后是老生常谈的hashmaphashmapsetget的时间复杂度是多少?为什么是O(1),  hashmap jdk1.8是线程安全的吗?

为什么是线程安全的?concureenthashmap了解吗?他是如何实现线程安全的?

3、说说java泛型,为什么称java泛型为伪泛型?泛型的好处有哪些?int可以作为泛型类型吗?

4、说一说静态代理和动态代理的区别?动态代理的底层是怎么实现的?

5、线程runstart的区别?两次start同一个线程会怎么样?

6、说一下java的线程模型?说一下violate关键字?他的原理是什么?violate是线程安全的吗?说一下violatesynchronized这两个关键字的区别?

7、说下线程池的原理?有没有在项目中用过线程池?怎么用的?核心线程和非核心线程有什么区别?你在项目里怎么确定核心线程数的。

8、对concureent包了解吗?什么是cascas怎么解决ABA问题?讲一下CountDownLatchcyclicBarrier的区别?

9、说一下java类加载器的工作机制?讲一下JVM相关。有没有做货GC调优,讲一下这么做的?

10、说一下springboot的启动过程?平时开发中都用哪些注解?

11redis常用的数据结构有哪几种,在你的项目中用过哪几种,以及在业务中使用的场景,?redis cluster有没有了解过,怎么做到高可用的?redis集群和哨兵机制有什么区别?redis的持久化机制了解吗?你们在项目中是怎么做持久化的?遇到过redishotkey吗?怎么处理的?redis是单线程的吗?单线程为什么还这么快?redis实现分布式锁以及和zk实现的性能和稳定性的对比?

 

12kafka的原理?怎么保证消息不丢失?

13、索引的常见实现方式有哪些,有哪些区别?MySQL的存储引擎有哪些,有哪些区别?InnoDB使用的是什么方式实现索引,怎么实现的?说下聚簇索引和非聚簇索引的区别?

14、手写算法:从中序与后序遍历序列构造二叉树

根据一棵树的中序遍历与后序遍历构造二叉树。

注意:

你可以假设树中没有重复的元素。

例如,给出

中序遍历 inorder = [9,3,15,20,7]

后序遍历 postorder = [9,15,7,20,3]

返回如下的二叉树:

 

3

/ \

9  20

/  \

15   7

 

15、手写算法:分隔链表;

给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。

你应当保留两个分区中每个节点的初始相对位置。

示例:

输入: head = 1->4->3->2->5->2, x = 3

输出: 1->2->2->4->3->5

 

  1. 上来不用自我介绍,面试官直接出题:用给定的数组实现队列,包含push和put方法,要求考虑多线程情况。

  2. 项目提问,碰到过什么问题印象比较深刻

  3. Java里面乐观锁悲观锁了解么

  4. CAS的原子性

  5. Java动态代理了解么

  6. 加密算法?

  7. Linux进程间通信的方式?

看了那么多JVM一点没问。。。数据库也没问,偏偏问了我没看的动态代理和加密算法,说到底菜是原罪啊,不说了刷题去了。。。

 

项目问了 15分钟,用过 linux什么指令,文件中的内容显示用过哪些,如何查找文件中的关键字。

网络这块: arp如何工作,我的电脑到你的电脑的通信过程 arp是如何工作的,我的电脑需要知道对方 ip的 mac吗? tcp如何保证可靠性,如果上面通信的问题中通信中间的一个路由器断了, tcp会是什么状态,多长时间会断开连接, tcp的定时器了解吗?

操作系统:linux下进程间通信有什么方法,一个锁被锁了两次会有什么问题,一个文件被锁了两次会有什么问题,听说过文件锁吗?

编程比较简单:返回链表中倒数第10个节点的值,5分钟搞定,第二个题不用写代码说一下思路就行。

一个数组里面有一个元素占总元素个数的一半,如何找到他

,说了三种思路:

1.哨兵方法 -----不对,只能适用于超过一半的情况。 2 排序再找 -----时间复杂度就高了。 3哈希的方法 ------空间复杂度就高了。面试官说下去再想想。整体感觉答得不太好,有一些问题都没听说过,比如说文件锁,但是还是给我过了。

二面:

Tcp实现可靠性和有序性的原理,数据库的索引底层原理,叶子结点为什么会设计成有序链表,如何实现的范围索引,epoll和poll原理。网卡接收到网络数据到用户使用需要几次内核和用户的转换,0拷贝?

和谐数组力扣594。二面相对于一面来说反而更加基础。

 

 

1、自我介绍

2、介绍一下你的实习部门

3、你具体做了什么

4、你查找的时候有用过索引吗

5、算法:一个数组,分成大小最接近的两个数组

6、设计一个秒杀系统

7、spring中两个类循环依赖可以 注入吗

8、dubbo

 

一面 全程45min

1. 自我介绍

2. 问会玩什么棋牌游戏。

3. 选中斗地主。

4. 两分钟介绍斗地主的规则。

5. 如果让我写斗地主的程序。觉得最重要的三个数据结构和算法是什么。

6. 手写函数,判断下家能否有牌要得过上家,如果有就返回牌;如果没有,就返回空。依据单张、对子、飞机、连牌写出函数。

程序没写完,就被暂停了。

7. 游戏升级版。如果有一家是人机,存在什么技术难点,需要解决什么问题。

8. 如果可以选择人机的难度等级。如何编写人机的出牌函数。

我想到的是只编写一个难度最高的出牌函数,如果难度等级初级,那么出牌就跟难度最高的出牌不一致。

二是服务器是知道三个玩家手中的牌的,人机在出牌时考虑三个玩家手中的牌,根据三个玩家手中的牌计算出出牌。

三是向后进行计算和评估。服务器计算如果这样出牌对后面结果的影响是什么。

9. 问在学习和生活过程中,遇到的最大的困难和委屈是什么。

 

本人情况:211硕士,编程语言C++,不会数据库,嵌入式和图像识别项目较多,笔试只做出来1.5道

8.11 一面 几乎全程聊项目

8.13 二面 主要问计网,我挑一些没答出来的题目,有大佬回答的咱们评论区见!!!

1.什么时候半连接队列里的套接字放到全连接队列?什么时候从全连接队列取出来?

2.UDP connect的作用是什么知道吗?

3.IO多路复用LT模式下,有数据会一直提醒,那什么时候不会再提醒了?

4.TCP为什么要第三次握手,第三次不要行不行?(我答怕下次连接时,收到了重传的连接报文段,面试官好像不太满意QAQ)

5.进程共享内存,锁应该存放在哪里呢,除了可以放在共享的内存里,还能放哪?(我答别的进程,然后映射一下,面试官也说不行)

 

1、自我介绍

2、实习的时候干了什么

3、挑一个你的项目介绍一下

4、springboot是用来干什么的?

5、@springbootapplication注解由哪些注解组成

6、注解是怎么实现的

7、反射是用来干什么的?

8、hashset的底层是什么

9、hashset怎么检查元素是否重复

10、==、equals相关问题

11、jvm讲一下

12、GC讲一下

13、新生代是怎么具体使用复制算法的

14、synchronized讲一下

15、还有其他方式实现线程安全吗(lock、cas、volatile、队列)

16、volatile可以修饰数组吗?

17、算法

给定一个包含大小写字母的字符串,找到这些字母构造成的最长的回文串

这题题目我理解错了两次,第一次我以为是找这字符串的连续最长回文串,想了几分钟,跟面试官沟通了一下,说是不用连续的,我就往着删除一些元素后能够成的最大的回文串这个思路想了,结果想了几分钟做不出来,又跟面试官沟通了一下,说是不用考虑相对顺序,就是用这个字符串中的元素能构成多长的回文串,所以这题只需要简单的统计一下各个字母的出现次数,偶数直接加,奇数减一加,最后如果有奇数再长度加一就可以了。

所以题目出来后还是要跟面试官多沟通,确定你对题目的理解是正确的,不然不仅白耗时间,心态还容易崩。

总共大概1小时

 

 

2. 骰子6个面写着1-6的数字,从不同角度观察有不一样的序列。 例如 123456  12 4365 上下左右前后的顺序,求给出的所有序列中,有几种不一样的骰子,每种骰子出现的次数。卒

3.给出早餐的每一种的美味值和热量,给出晚餐的每一种的美味值和热量,可以吃一顿,可以不吃,可以吃午餐一种和晚餐一种,请问在满足美味值t的前提下,摄入最少热量为什么。 我是按照美味值排序,美味值想等,热量少的在前。

if 热量之和小于 t break内层循环, 大于等于t,更新ans。在输入每一顿时,if 该美味值大于= t,更新ans。 if t=0 ans = 0;if 排序后第一个晚餐和午餐美味值之和小于t,无解, 返回-1;

4. 6*6地方,*为障碍物,# 为可种植的地方,现在又6种种子,一个点的种子必须要和上下左右不一样。求方案数 卒

 

;