菜鸟补录面经(已正式offer)

一面&二面

一面二面比较类似,我就放在一起讲了。上来先是自我介绍。自我介绍结束的时候,面试官让我谈谈自己最拿手的一个项目。

我展开说了一下,用了哪些技术栈、怎么用的,做项目的时候遇到了哪些问题,后面的解决方案是怎么样的。 这之后,面试官根据我之前的描述,开始进行提问:

Q:你这边项目用到了Netty,你能说一说为什么要用Netty么?

需要保持长连接的规模比较大,自己写连接、连接池之类的做管理可能会比较麻烦。Netty提供了非常多好的特性,也是现在大家使用最广泛的框架,社区也比较活跃,相对而言可靠性、Bug修复速度等都会更优

Q:你刚才说到Netty提供了非常多好的特性,你可以说说有哪些么

首先是Netty封装了Java原生的NIO类,相比较Java原生的NIO类,使用起来更方便;其次是它支持很多编码协议,也支持自定义的编码,和我这个项目的需求也很贴合;然后Netty通过非阻塞的IO模型以及它的Reactor线程模型、内存池设计以及零拷贝的一些特性都能够提升它的并发量。官方宣称的并发量有100W,对于我这个项目而言还达不到那么高的并发数量级,所以完全够用。

Q:你能说说Netty的Reactor线程模型是怎么做的么?

讲了一下单Reactor单线程模型、单Reactor多线程模型、主从Reactor模型,以及简单分析他们的优缺点和适应场景

Q:说一说Socket和WebSocket有什么区别

我根据自己的理解,认为Socket是一组API,是从TCP层抽象出来的,而WebSocket是一种类似于Http协议之类的应用层协议(不知道对不对)

Q:你是怎么解决粘包和拆包的问题的?

Netty本身提供了线程的解决方案,并且做了封装。Netty可以根据换行符切割报文,根据固定长度切割报文,根据数据包长度切割报文,也可以通过自定义分隔符符号来切割报文。对于我这个项目而言,是使用自定义分隔符符号来做切割的。使用的时候因为Netty是使用责任链模式做的,只需要直接使用.addLast导入即可。

Q:你这边使用WebSocket来保持长连接,为什么不用其他协议,比如TCP、UDP、MQTT?

首先UDP直接就被排除了,它只保证尽最大可能交付,像视频场景用UDP可以适用,在项目中我要保证每一条数据都能够被正常接收。然后服务器在收到报文之后还要能够给设备有一个确认,因此需要一个全双工通信的机制,因此排除了TCP。至于为什么不用MQTT,一个是因为之前没了解过这个协议,另一个原因就是一开始接到这个项目的时候我就觉得用Socket来做很合适,然后和之前做过类似项目的师兄讨论了一下之后,决定用WebSocket。

Q:你之前说如果自己来写Socket控制连接的话会用到线程池,你有用过么?

没有,了解一些

Q:有哪些创建线程的方法?

继承Thread类创建线程、实现Runnable接口来创建线程、通过Callable和FutureTask创建线程、通过线程池创建线程。

Q:那你可以说一说,要使用线程池的话需要用到哪些参数么?

首先要用线程池需要知道上下文(ACC),然后需要知道核心线程数量(corePoolSize)和最大的线程数量(maximumPoolSize),然后是等待队列(workQueue)、非核心线程空闲时间(keepAliveTime),最后是一个线程的创建工厂(threadFactory)和拒绝策略(handler)

Q:线程的数量怎么确定比较合适?比如现在有一个IO密集型的应用和一个CPU密集型的应用,你会怎么确定线程的数量?

IO密集型的线程数量我觉得可以设置得大一些,比如设置为两倍或者更多的cpu核心数,CPU密集型的话选择的线程数会和CPU核心数接近。

Q:你这样设计的理由是什么

IO密集型的任务,在数据准备的过程中CPU是处于空转状态,这个时候可以把CPU时间片分出去给其他线程使用;而CPU密集型任务CPU一直在工作,即使设置更大的线程数,也没有多余的核心来分配给其他线程使用。

Q:在数据库中应该都用到过索引,你可以说一下MySql为什么要用B+树实现索引,而不是别的数据结构,比如哈希、B树、AVL树

首先B+树是一颗平衡树,每个叶节点到根节点的长度相同,这样可以提升查找效率;其次B+树所有关键字节点都在叶子结点上有序存放,且通过双向链表连接,方便了范围查询;B+树的非叶节点不存储数据,因此可以存放更多的索引数据。B+树的节点大小固定,有利于磁盘预读。

为什么不用Hash、B-Tree、AVL理由也是从为什么用B+树的角度简单回答了一下。

Q:聚簇索引和非聚簇索引有什么区别?

聚簇索引中叶节点存放的数据是一行数据,如果是通过非聚簇索引进行查找,查找的结果是想要查询的那一条数据的主键,需要一次回表之后根据主键再一次查找。

Q:有没有遇到过慢查询的情况,你是怎么解决的?

没遇到过。。

Q:那你认为可能是什么原因引起的?

索引失效、查询语句没遵循最左匹配原则、索引的区分度不高、网络故障。。

简单小结

一面时间在35分钟左右,和笔试是一起做的,手写LRU(写完之后介绍一下实现的逻辑)。面试结束收到测评。测评结束后第二天收到二面邀约

二面时间在45分钟左右,面完第二天约的HR面。

hr面

自我介绍,问了项目情况,因为项目我全程跟,从前期需求对接到中期审查、试运行、结项都是我再负责。hr问的问题比较普遍吧,一个是项目中遇到了什么难点,怎么解决的。然后怎么和他们沟通的,沟通的时候遇到什么问题,怎么解决的。这一块聊得蛮久的。

Offer

HR面结束当天OC,第二天收到正式意向,一周后收到正式offer alt

JuikUUDOrIPYdUnmsjiRYCEk69vwbcRS.jpg

 暂时回忆起这些,如有补充后续会继续在本贴更新

#晒一晒我的offer##阿里##菜鸟##菜鸟秋招##秋招#
全部评论
阿里啊,我要什么程度才能进
3 回复 分享
发布于 2023-12-26 21:07 四川
大佬面的是哪个部门呢
2 回复 分享
发布于 2023-12-26 18:30 广东
大佬,你的项目是帮外面的公司做的吗?
点赞 回复 分享
发布于 2023-12-26 15:00 广东
佬,菜鸟的16薪能拿满吗?
点赞 回复 分享
发布于 2023-12-27 10:12 陕西
阿里lazada春招,androidios客户端(广深)1个hc,接受后端前端转移动端。要求985 211,毕业时间23年10月到24年九月,要求过6级。 https://aidc-jobs.alibaba.com/campus/qrcode/home?code=8ynRO17ya0V_SBjQJv61PX2JVQMR6tVirrTV28521y4%3D 用alibaba替代*号即可投递 https://www.nowcoder.com/feed/main/detail/e60f7f6452814e378376ba0f1afec1bf?sourceSSR=users
点赞 回复 分享
发布于 2023-12-28 10:17 广东
佬,恭喜去菜鸟,我的三方一直持续到明年年底
点赞 回复 分享
发布于 2023-12-29 10:33 江苏
以后就是同事了兄弟
点赞 回复 分享
发布于 2023-12-30 10:00 山东
我也准备签菜鸟,目前只拿到了意向,没发正式offer正常吗,不会毁意向吧,慌
点赞 回复 分享
发布于 2023-12-30 20:53 广东
佬是多久面的呀
点赞 回复 分享
发布于 2023-12-31 12:03 重庆
大佬是本科吗
点赞 回复 分享
发布于 01-17 09:58 安徽

相关推荐

时间:10.08-11.02投简历之前:我只投中大厂,小厂也值得我投?😤想象中的自己:被大厂一个接着一个约面,今天面美团,明天面快手,甚至担心面试时间会冲突,还担心投过之后立马约面准备的不充分浪费了机会咋办全投了一遍后,收到了感谢投递的邮件兴奋至极,心想过一两天就能约面,每天查看官网进度一直在初筛,boss也一直是已送达,实习僧更是未查看,几天都是如此,发现情况不对,到处询问牛友什么时候投的过了多久约面的,为啥我的一直在初筛中😂几天后再看天塌了,流程直接显示已结束😅,要不就一直在筛选到岗位都下线了偶尔有几个中大厂约面,还是kpi,要么不按套路出牌,出个算法题还是现场想的权重不同的abcde五个节点写个函数输出其中一个还是这个权重的节点,这什么玩意,可能是我太菜了吧面过之后怀疑人生怎么和我在牛客上看到的面经不一样以前的我,非美团,快手不去,滴滴也还凑合吧,大不了就去小红书了现在的我迷茫,弱小,可怜,无助,哪个小厂行行好收了我吧,做牛做马干什么都行😭这几天一直心烦意乱,甚至有些心灰意冷,完全学不下去,有时候觉得运气总是不在自己这边,明明我都复习了那么多,可他偏偏不问,面过之后又将失败归结于运气,可经过多次面试后,仔细想了想其实并不是这样。我们无法改变客观因素,比如面试官会问什么,但我们应该最大化主观因素,就是在面试前尽可能全面深入的学习,总是觉得失败是运气的话,反而会限制自己的成长,机会是留给有准备的人的,当一个人觉得面试官问的他都会时,其实他已经全面深入了解了所有知识,并不是因为他运气好。扯的有点多,也算是对自己快找了一个月实习的反省总结。今天去市中心转了转,只有置身于高楼大厦中才意识到自己多渺小。
查看4道真题和解析
点赞 评论 收藏
分享
面经:1. 多线程打印整数2.链表合并3.写一个生产者消费者模型:思路 wait() 和 notify() 方法来实现4.sql题:求和 排序 分页2024.6.20一面项目拷打。之前做的没什么难度,问项目难点,说了我觉得是难点的东西,但是其实解决了也没有多难,但是还是要说八股文:Java的异常体系为什么要有异常finally(这个面试官追问,你确定他会不管怎么样都会执行吗?为什么)深拷贝浅拷贝深拷贝的应用场景数据库索引索引的数据结构什么数据库用了哈希索引mysql数据库的索引结构B树的特点索引失效的场景git的常用指令git mergelinux:查询cpu利用率最高的进程linux:查询日志中的关键字代码讲解第一个没看懂第二个:流式编程菜鸟集团丨2025届校招官方内推启动【公司介绍】菜鸟孵化于阿里巴巴全球最大的行业电子商务生态系统中,现已成为电商物流的全球领导者,全球第一的跨境电商物流公司【岗位方向】研发类、算法类、产品类、数据类、物流类、运营类、市场拓展类、职能类【工作地点】杭州为主,深圳、香港、北京也开放需求;区域物流岗(物流园区办公):东莞、珠海、厦门、漳州、杭州、威海【内推渠道】https://jsj.top/f/fjZDnI【内推码】CN003【备注】内推码在「校园大使内推人」栏填写,欢迎私戳跟简历进度哦~填写此链米哈游接后,同学会在近期收到一封内推确认邮件,通过邮件确认后才算内推成功、才能进入菜鸟校招流程❗️投递的UU留下姓名缩写和岗位~我会跟进~
菜鸟集团
|
校招
|
超多精选岗位
点赞 评论 收藏
分享
30 140 评论
分享
牛客网
牛客企业服务