校招实习面试实战,顺丰科技Java工程师面试复盘总结

备战春招,校招实习面经分享,拿Java开发工程师offer~~

本系列文章包括Java、算法、计算机网络、数据库、操作系统等等,本篇介绍面试顺丰科技【Java工程师】岗位的题目,复盘解析及心路历程。

传送门:

  1. 【亲身面经分享,校招实习面试系列】每日10题,快速学习(Java基础篇)
  2. 【校招实习面试系列,每日10题,快速学习】Java高级篇
  3. 【校招实习面试系列】你知道网络中4类IO模型是什么吗?我的朋友如此优秀回答
  4. 【校招实习面试实战,身临其境】华为软件开发工程师面试复盘总结

顺丰科技的校招实习面试,一般都是直接通过邮件通知具体的面试时间和具体操作的,邮件也是比较详细,因为没有提前约时间这一操作,所以收到邮件后就要安排自己的时间。

我当时是在赛码网上面试,系统还是比较简洁,提前登录上去等面试官呼叫就行。

自我介绍

老熟悉了,这个环节。基本上每次面试的开门红就是自我介绍了,讲的好就是开门红(0 - 0)哈哈哈

别小看开头的自我介绍,逻辑思路表达清晰很重要,都说“万事开头难”,如果开头做得好,后续回答过程会轻松许多。因为从自己的说出来的感受,加上面试官的反应,可以增强自己的信心。

1、讲一下Java里面常用的数据结构?

ArrayList、LinkedList的底层和区别,HashMap底层数据结构。

ArrayList:基于数组这种数据结构实现,而且这个数组是动态的,可以自动扩容,数组的结构是随机访问的,也就是可以通过下标获取,时间复杂度O(1)。

LinkedList:基于链表的结构实现的,都知道链表对于插入删除的操作效率高,直接修改结点指针指向即可,但是对于获取数据,需要通过遍历得到,时间复杂度O(n)。

HashMap:这个数据结构再熟悉不过了,在面试中都被讲过无数遍。网上资料无数,详细可见:https://blog.csdn.net/lkforce/article/details/89521318

遇到这个问题,算是比较友好的面试官了,可以让你讲出自己熟悉的内容,而我们这时也需要将功夫全部展现出来,回答当然要适可而止,避免给自己挖了个坑

2、讲讲B+树索引,为什么B+树的高度一般不高?

B+树索引是MySQL中最常见的,InnoDB存储引擎的一种索引,它按照顺序存储数据,在MySQL中可以用作order by和group by的操作实现。

B+ Tree中,非叶子结点的结构包括:

  • 本结点所含关键字的个数。
  • 指向父节点的指针。
  • 关键字。
  • 指向子结点的指针。

所有叶子节点(存放数据)之间是一种链式环结构。

  • 非叶子节点只存储键值信息。
  • 所有叶子节点之间都有一个链指针。
  • 数据记录都存放在叶子节点中。

B+树存储数据的结构如图:

到这里,回答了问题中的第一问。

那为什么B+树的高度一般不高?

答:因为…树高度3到4层存储的数据量就很大了,达到千万级别!

数据量具体计算方法看这篇,非常详细!https://zhuanlan.zhihu.com/p/86137284

另外,MySQL数据库还有其他几种索引:哈希索引、覆盖索引、聚簇索引,以前我写过一篇更详细全面的,欢迎查看:《今天我们来聊聊MySQL索引,详细!

3、多线程了解吗?假如一个场景:最小核心线程数10,最大线程数15,有界阻塞队列为100,现在请求110个,再请求一个怎么处理?

Java线程池的7个主要参数

  1. corePoolSize:池核心线程大小

  2. maximunPoolSize: 线程池最大线程数量

  3. keepAliveTime: 空闲线程存活时间

  4. unit:空闲线程存活时间的单位

  5. workQueue: 工作队列(4种)

    (1)ArrayBlockingQueue:基于数组有界阻塞队列,FIFO
    (2)LinkedBlockingQueue:基于链表无界阻塞队列(最大容量Integer.MAX_VALUE)FIFO
    (3)SynchronousQueue:不缓存任务的阻塞队列
    (4)PriorityBlockingQueue:基于优先级无界阻塞队列

  6. threadFactory: 线程工厂

  7. handler: 拒绝策略

    策略1:ThreadPoolExecutor.AbortPolicy(默认,拒绝执行任务)

    策略2:ThreadPoolExecutor.CallerRunsPolicy(运行被拒绝的任务,若执行程序已关闭,则会丢弃该任务)

    策略3:ThreadPoolExecutor.DiscardOldestPolicy(丢弃等待队列中的队头任务)

    策略4:ThreadPoolExecutor.DiscardPolicy(通过源码可以看出,该策略不会执行任务操作)

然后Java通过Executors提供以下4种线程池。

  1. newSingleThreadExecutor
  2. newFixedThreadPool
  3. newScheduledThreadPool
  4. newCachedThreadPool

之前我也写过专门讲Java线程池的,这里不在赘述,有兴趣继续探索的伙伴可以看看:《Java面试:Java线程池七大参数详解》、《每日10题,快速学习(Java基础篇)

或许到这里,你已经知道这个问题的答案了:假如一个场景:最小核心线程数10,最大线程数15,有界阻塞队列为100,现在请求110个,再请求一个怎么处理?

首先,10(corePoolSize)+100(workQueue)=110,意思就是这100个请求任务可以有10个任务给10个线程处理,另外100个任务暂时存在工作队列中等待。

那么,这时再请求一个任务,且其他任务还没有处理完成的,达到111个。因此,再看maximunPoolSize=15,还有空间可以再创建一个线程,因为111<115。

这里需要知道的是,核心线程数是指Java线程池中会长期保持corePoolSize个线程,最大线程数是指任务数量超过核心数+队列大小,同时不超过最大线程数+队列大小,就可以再场景1个线程处理该任务

如果请求的任务远远超过最大线程数和工作队列的总和,上面的4中拒绝策略就派上用场了,默认是ThreadPoolExecutor.AbortPolicy,拒绝执行该任务。

有两篇文章写的不错,可以进一步感受:https://zhuanlan.zhihu.com/p/112527671、https://jishuin.proginn.com/p/763bfbd675a8

4、TCP是如何实现可靠传输的?

TCP可以说是计算机网络中最常考的协议,是五层协议模型中运输层的关键。

要知道TCP是如何实现可靠传输的,就需要深入理解它的工作原理。

滑动窗口、报文确认机制、超时重传、快速重传、流量控制、拥塞控制,这一系列TCP协议中的功能机制,都是保证TCP可靠传输的后盾。

耳熟能详的三次握手、四次挥手,也是TCP协议在服务器和客户端之间实现数据安全传输的工作机制。

因为之前我写过计算机网络系列的博文,从五层协议体系结构底层往上,详细记录了各层协议的工作原理和特点,这个问题可以分析出一篇长文:《必须掌握的TCP全家桶系列详细解读:流量控制、三次握手、四次挥手及拥塞控制算法

5、有什么想问我的吗,随便问什么都可以?

面试官问到这里,表示着这场面试即将结束,如何展现自己的能力和兴趣,就看自己了。

通常面试到达反问环节,问题主动权就在面试者手中,我个人觉得,对于技术栈的询问可以简单提出,主要从获取面试官那里获得一些有价值的东西,同时也表现出你的感兴趣和勤学好问

比如,问一下做的业务是什么呀、涉及什么技术栈…

今天面试就到这里,静候通知~~



欢迎“一键三连”哦,点赞加关注,收藏不迷路!

每天进步亿点点,距离Java工程师更近一步啦,我们下篇见!(⊙ᗜ⊙)

公众号同步更新哦,习惯阅读公众号的伙伴们可以关注下面我的公众号呀!


本篇内容首发我的CSDN博客:https://csdn-czh.blog.csdn.net/article/details/123523982

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆海潘江小C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值