南京小米-java日常实习 oc
一面
2024.07.25 19:00-19:47
- 八股
- ArrayList 和 LinkedList 区别
- HashMap 原理,底层
- SQL 索引失效场景
- 有哪些垃圾回收器,有什么区别(CMS、G1 ?)
- AOP 原理、使用场景
- 产生死锁的必要条件
- BIO、NIO、AIO 概念和区别(AIO ?)
- Redis 常见数据结构及区别
- 缓存穿透、缓存雪崩概念,如何解决
- 手撕算法:二叉树中序遍历(自定义数据结构、构造树)
- 项目:介绍项目、项目是否上线、后面如何部署(本地服务器还是云平台、部署实例个数)、系统大概的 QPS
- 研究方向介绍
- 反问:部门业务、分布式技术栈、建议
二面 + 三面
2024.08.01 19:00-21:00 2024.08.02 下午oc
很奇幻的一次面试经历,从没想过能面试长达2小时。实际是二面(技术面) + 三面(组长面),但组长好像暂时有事,最后还是二面的技术官问的三面的内容。
二面的面试官人很好,上来就喊我名,很耐心,我达的不全或没答到点子上的问题会积极引导,并且对于知识和技术的考察会深挖细节以考察候选人的理解程度和有没有自己的思考过程。面试内容整体偏重基础和底层,考察了很多计算机基础(计网、操作系统)的内容。
- 二面
- 介绍完后,问我简历中的竞赛经历和收获,正好前天晚上,好好回顾并整理了竞赛涉及的知识点和细节,因此巴拉巴拉答了将近7、8分钟。
- 然后,手撕算法题,很不常规,是关于线程操作的,给了一个Foobar类,然后自定义线程要求控制两个线程交替打印“foo”和“bar”。其实算法很简单,就是看你熟不熟悉java中线程创建和操作的,涉及到线程的主动切换。由于好久没接触Thread类,因此直接懵了,连自定义一个线程并运行线程都忘得差不多。还好,面试官可能看出来我不熟悉线程的操作,就给了第二题,二分查找,😓...,写的时候我都不好意思,毕竟太简单了😂,秒了然后,面试官让我解释下,并问到了时间/空间复杂度,我没有犹豫说O(logn)和O(1),然后面试官问空间复杂度确定是O(1)吗?这一问又把我干懵了,这不显然吗?然后面试官指出我的一个变量定义在循环体内,空间复杂度还是O(1)吗?...我直接爆炸,这也太细了😫(不过我觉得空间复杂度应该还是算O(1),有些不服,我看力扣官解也是这样)。之后又回到第一道算法题,我说了下我的思路,定义一个信号量,根据信号量的值轮流切换线程打印。
- 算法题结束后,就接着问有关java中线程的问题:java中创建线程有哪些方法、它们的差别、thread.run()和thread.start()的区别是什么。我其实这块都不熟,好久没用过了(项目里一般也不会手写thread,都是调用封装好的线程池...),然后就答的很痛苦,承认我java线程操作好就没碰了,不熟...
- 线程池有哪些参数,原理,运行的流程,拒绝策略
- hashmap何时扩容、底层扩容原理、扩容的整个过程、扩容是否有上限、是否线程安全(举具体的例子说明),不安全提到线程安全的map:concurrentHashmap,说了底层如何实现(jdk1.8前和后实现方式),两种实现方式有何不同、为什么要进行改进,二者支持的并发量都是多少
- tcp三次握手,连接建立后,操作系统会给进程分配哪些资源
- 网络7层模型
- 数据库设计的规范(范式)
- 数据库索引底层结构(b+树),为什么采用该结构
- 数据库隔离级别,如何实现
- jvm内存模型,堆空间划分哪些区,年轻代划分,分配一个对象的流程,年轻代空间会占满吗
- 类加载机制,双亲委派模型如何保证核心类库的安全性,举具体的例子
- 本科阶段学习的课,觉得哪些重要些(数据结构、操作系统、计网、算法设计、编译原理),分别说说对于做本行,这些课为什么重要,为什么提到编译原理
- springmvc涉及的组件、执行的流程(dispatcherservlet等)
- 还有好多问题,暂时回忆不起来了,问的都挺细的,跨度又很长😖
- 三面
- 之前碰到过的难题,如何解决的,有哪些解决问题的方式和思路
- 如何将一个复杂的事情解释给其他人
- 对小米的印象、认可度
- 实习时间
- 未来求职规划,工作地点