秋招面经总结(数据研发/Java研发)

    作者:Tako
    链接:https://www.nowcoder.com/discuss/272576?source_id=discuss_experience_nctrack&channel=-1
    来源:牛客网

    截至现在,还是面完了不少公司,走完流程的大致有腾讯、阿里、星环科技、招银网络科技、爱奇艺。趁着现在压力不是很大,打算抽出时间也整理一下今年春招+秋招的面经,回报一下牛客网和一起找工作的大家。
    腾讯(春招实习)
    一面
    1、JVM结构,堆分代,各代GC算法及GC收集器。
    2、多线程的好处(1、并发提升程序执行效率 2、提升CPU利用率)
    3、hashmap的底层结构。hashtable和concurrenthashmap都是线程安全的,有什么不同?
    4、volatile关键字作用,延展到了JMM定义及作用
    5、海量数据topK问题
    二面
    1、spark常见算子使用情况,spark相比hadoop mapreduce的优势
    2、spark streaming对接kafka,rdd partition与topic partition对应关系
    3、redis实现分布式锁
    4、redis事务相关,能否回滚(当时应该是想问watch关键字,但自己没答上)
    三面
    1、Java中的锁,synchronize和lock的区别,底层实现的区别
    2、Java中线程同步的实现方式(Thread.join()本质上仍是靠wait和notify,CountdownLatch和CyclicBarrier)
    3、构造线程池的参数,线程池运行过程,常见线程池及其可能的OOM原因
    4、单例模式(1、初始化的线程安全问题2、反序列化破坏单例),饿汉式、懒汉式,枚举实现单例的好处(1、JVM底层实现保证线程安全2、防止反序列化使用反射破坏单例唯一性)
    5、Spark中应对数据倾斜的解决方案

    腾讯是我自己暑期实习的公司,所以列出来的是春招面经,每一面都是20-30分钟结束,效率比较高。其实最后面还有一面技术问题问的不多的总监面,就不列出来了。

    阿里
    春招面试问题合集
    1、Java类加载机制,双亲加载机制。
    2、volatile关键字和Synchronize关键字,volatile关键字能保证原子性吗?
    3、Spring中如何实现一个类的类,静态和动态的区别。JDK动态源码,具体实现
    4、数据库隔离级别,可重复读相比读已提交做了什么改进,为什么能避免可重复读,为什么还是不能避免幻读
    5、讲一讲MVCC多版本并发控制
    6、NoSQL数据库与关系型数据库的区别
    直通终面
    1、hashmap链表转红黑树的上限值(8),红黑树转链表的下限值(6),为什么不一样?红黑树了解吗?(不了解不了解。。。 🤣)
    2、讲一讲数据库中的索引,聚簇索引和非聚簇索引,覆盖索引
    3、谈谈Spring中的aop思想,底层实现,有几种织入形式(编译期织入,装载期织入,运行时织入)
    4、Java类加载步骤,其中涉及变量初始化的步骤的有哪几个
    5、智力题:天平秤8个球找一个重量稍重的坏球,最少秤几次能找到?如果不知道这个坏球稍重还是稍轻呢?

    阿里当时春招的题可能记不到全部了,所以尽可能回想了自己还有印象的一些问题。

    星环科技
    一面电话面试
    1、对比一下链表和数组
    2、volatile关键字,出题两线程同时对volatile变量执行自增操作,分析可能出现的情况
    3、讲一讲Flink相比其他流式处理框架的优点(当时答了eventTime+watermark机制和窗口),讲一讲你对Flink窗口机制及其触发的了解
    4、Flink backPressure反压机制,指标监控你是怎么做的
    5、Kafka ISR机制,如何尽可能保证数据可靠性(producer端的ack机制,consumer端的enable.auto.commit属性)
    6、mapreduce原理,spark工作机制,切割stage的依据(宽窄依赖)
    视频面试(连着三个面试官,一共3个小时,每一面都有现场写代码)
    一面:
    1、hashmap底层结构,怎样决定元素的数组index(key的hashcode()方法),在插入元素操作时会使用key对象的equalsTo()方法吗?大致介绍一下hash碰撞的具体过程。
    2、Spring ioc、aop介绍,底层原理讲一讲
    3、数据库索引,mysql引擎(MyISAM和Innodb)的区别,为什么索引底层结构采用B+树,其相比B树的优势点在哪里?
    4、MVCC多版本并发控制知道吗,介绍下
    5、事务四大特性,隔离级别
    6、写代码部分:1、懒汉式单例(volatile+双重锁校验)2、两个有序数组找出其合并排序后的中位数
    二面:
    1、简历里面提到过shell脚本,问了一些常见的linux命令行
    2、TCP三次握手,四次挥手。为什么需要三次握手,四次挥手,OSI七层模型
    3、Java中的锁膨胀机制,wait/notify机制
    4、Java JUC包中Atomic实现,CAS介绍,底层的AQS实现原理了解吗
    5、写代码部分:将矩阵中为0的元素对应的行、列中的元素都置0
    三面:
    1、JVM底层结构
    2、JVM堆中新生代,老年代,新生代中的结构,Survivor区使用的GC复制算法
    3、分配担保机制
    4、手写算法,实现一个缓存机制,限定缓存数据量,尽量降低时间复杂度,使用LRU算法淘汰长时间未使用的缓存。

    星环科技是我觉得面试体验很棒的一家公司,面试官都会有引导性的问问题,同时能感觉得到面试官都比较注重对算法的考察,即使撕出了结果也会让你从时间复杂度和空间复杂度去优化你的解答。第三面的技术问题自己回想起来的优点少了,但也有可能是大部分时间都用在了撕算法上 😂如果后面回想起了,我会编辑补充。

    招银网络
    一面电话面
    1、HBase相比关系型数据库的优点
    2、Redis应用场景,其优势点
    3、JVM中的堆和栈
    4、平均时间复杂度为o(nlogn)的排序算法,冒泡排序算法是稳定的吗
    5、数据库中如果一条SQL查询很慢,怎么解决(查看是否应用到了索引,自己往limit优化方向上发散了一下)
    现场一面
    1、手撕算法:前序中序遍历结果复现树
    2、Java中加载类除了使用类加 载器还有什么方式?(当时没太懂面试官的意思,下来查了下可能在问Class.forName这种形式)
    3、Java中的序列化作用,serialVersionUID作用
    4、jdk1.8对hashmap做了哪些改良,使用hashmap有什么地方可以优化(估算元素数量,初始化size进行设置避免频繁扩容)?concurrenthashmap呢
    5、spark mapPartitions与map相比的好处(涉及到连接时,一个分区复用一个连接)
    6、mapreduce原理,namenode,datanode的不同,secondaryNamenode作用。hdfs写过程讲一下
    7、Kafka消费中,怎样尽可能保证数据不丢失
    现场二面
    1、对比一下Flink与Spark Streaming,优势点在哪?
    2、对你提升最大的项目是哪一个,为什么?介绍一下你在哪方面提升的最大

    爱奇艺
    一面:
    1、hashmap解决hash冲突的方法,indexFor()方法使用的是除留取余吗?(不是,是按位与,因此hashmap size必须是2的幂)。hashmap扩容机制
    2、Spring ioc、aop概念及底层实现。不使用ioc的最大不便是?(如果有接口的属性对象,使用者必须知道该对象的具体实现类,不符合解耦思想),JDK动态源码
    3、Java双亲加载机制,为什么要使用双亲加载机制(1、避免重复加载2、防止核心库API被篡改)
    4、Java GC收集器,G1与CMS。
    5、数据库事务特性,隔离级别,详细讲一下每个隔离级别针对上一层解决了什么并发异常
    6、手撕算法:两个有序数组得出第K大的数
    二面:
    1、介绍一下实习经历和项目经验,熟练掌握哪些技术栈,做了哪些方面的工作。
    2、设计题:针对自动贩卖室,设计一下进入上锁,离开物品扫描匹配生成账单的设计方案。
    2、高并发情况下,如何设计系统(削峰,限流,反向

    面经分享大致就到这里,自己非常感谢牛客网这个平台,从春招时的一无所知到现在能通过一些大厂的面试,真的给了我很大的帮助!最后也祝大家秋招顺利,拿到自己想要的满意的offer!