8家互联网公司大数据开发面经 | 面试笔记

目录

1.腾讯(offer)

一面(全程问基础)

二面(全程怼项目,压力面)

三面(接着怼项目)

面委会(全程聊天)

2.阿里菜鸟

一面

二面

三面

3.网易考拉(offer)

一面

二面(全程写写写)

4.美团新到店(offer)

一面(简单的聊了聊,10min)

二面

三面

5.小米(offer)

一面

二面

6.贝壳(offer)

一面

二面

7.快手(offer)

一面

二面

三面

8.华为(offer)

一轮玄学面


1.腾讯(offer)

一面(全程问基础)

1、介绍项目

2、String、StringBuffer、StringBuilder的区别,怎么理解String不变性

String、StringBuffer、StringBuilder的区别

(1)字符修改上的区别(主要)

String:不可变字符串;

StringBuffer:可变字符串、效率低、线程安全;

StringBuilder:可变字符序列、效率高、线程不安全;

(2)初始化上的区别,String可以空赋值,后者不行,报错

参考文章

String类不可变性的好处包括设计考虑效率优化问题,以及安全性这三大方面。

1.只有当字符串是不可变的,字符串池才有可能实现。字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字符串。但如果字符串是可变的,那么String interning将不能实现(译者注:String interning是指对不同的字符串仅仅只保存一个,即不会保存多个相同的字符串。),因为这样的话,如果变量改变了它的值,那么其它指向这个值的变量的值也会一起改变。
2.如果字符串是可变的,那么会引起很严重的安全问题。譬如,数据库的用户名、密码都是以字符串的形式传入来获得数据库的连接,或者在socket编程中,主机名和端口都是以字符串的形式传入。因为字符串是不可变的,所以它的值是不可改变的,否则黑客们可以钻到空子,改变字符串指向的对象的值,造成安全漏洞。
3.因为字符串是不可变的,所以是多线程安全的,同一个字符串实例可以被多个线程共享。这样便不用因为线程安全问题而使用同步。字符串自己便是线程安全的。
4.类加载器要用到字符串,不可变性提供了安全性,以便正确的类被加载。譬如你想加载java.sql.Connection类,而这个值被改成了myhacked.Connection,那么会对你的数据库造成不可知的破坏。
5.因为字符串是不可变的,所以在它创建的时候hashcode就被缓存了,不需要重新计算。这就使得字符串很适合作为Map中的键,字符串的处理速度要快过其它的键对象。这就是HashMap中的键往往都使用字符串。

参考文章

3、==和equals的区别,如果重写了equals()不重写hashCode()会发生什么

4、volatile怎么保证可见性,synchronized和lock的区别,synchronized的底层实现

5、sleep和wait的区别,sleep会不会释放锁,notify和notifyAll的区别

6、了不了解线程的局部变量,讲讲线程池参数

7、什么情况会发生死锁,死锁的处理方法

8、Cookie和Session的区别,怎么防止Cookie欺骗

9、从用户在浏览器输入域名,到浏览器显示出页面的过程

 

二面(全程怼项目,压力面)

1、看你写过UDF,谈谈对UDF的理解,写UDF的目的,代码怎么写的

2、改造hive表后怎么进行数据一致性校验的,有没有自动化流程

3、看你读过kafka源码,讲讲kafka broker的源码里面你最熟悉的类,以及这个类的主要方法,用的什么设计模式

4、项目里面从数据采集到最终的数据可视化,每个环节都有可能丢数据,怎么判断数据有没有丢,如果丢了如何定位到在哪一个环节丢的

5、项目里面为什么要用kafka stream做实时计算,而不是用spark或者flink,kafka sql和spark sql了解过吗

6、项目里面用到了时序数据库opentsdb,为什么要用这个,有没有跟其它的时序数据库对比过

7、平时逛不逛社区,有没有参与过开源项目

 

三面(接着怼项目)

1、看你写了实时计算的程序,你怎么保证计算的结果肯定是对的

2、数据接入的时候,怎么往kafka topic里面发的,用的什么方式,起了几个线程,producer是线程安全的吗

3、kafka集群有几台机器,怎么确定你们项目需要用几台机器,有评估过吗,吞吐量测过吗

4、spark streaming是怎么跟kafka交互的,具体代码怎么写的,程序执行流程是怎样的,这个过程中怎么确保数据不丢  

5、kafka监控是怎么做的,kafka中能彻底删除数据吗,怎么做的

 

面委会(全程聊天)

平时是怎么学习的,爱看哪些博客,怎么看待加班,有没有成为leader的潜力

 

 

2.阿里菜鸟

阿里的面试还是比较重视基础的,应该是bat里面问基础问的最多的

一面

1、HashMap和HashTable的区别,HashMap怎么解决hash冲突,jdk1.8后对HashMap的改进

2、讲讲ConcurrentHashMap,ConcurrentHashMap怎么保证线程安全,HashTable怎么保证线程安全  

3、HashSet的底层实现,是不是线程安全的  

4、ArrayList和LinkedList的区别,是不是线程安全的  

5、讲讲设计模式,最常用哪种设计模式,单例模式的实现方式  

6、进程和线程,Java实现多线程的方式,什么是线程安全,怎么保证多线程线程安全  

7、可重入锁的可重入性是什么意思,哪些是可重入锁  

8、为什么要用线程池,线程池的好处  

9、JVM垃圾处理方法,对象什么时候进入老年代,什么时候进行FullGC  

10、Java堆溢出问题怎么处理,内存泄漏和内存溢出的区别  

11、智力题:50个红球和50个黑球往两个桶里放,然后自己去抽,怎么样才能使抽到红球的概率最高  

 

二面

1、讲讲数据库存储引擎

2、介绍一下索引,索引设置的规则,聚簇索引和非聚簇索引的区别,索引的最左前缀原则

3、用过redis吗,redis支持哪些数据类型,redis与mysql的区别

4、了解垃圾收集器吗,分别介绍介绍

5、jvm调优做过没,-Xms和-Xmx分别指什么

6、算法题:输入两个字符串,输出它们合并排序后的结果

 

三面

1、讲讲数据库的范式

2、Linux进程通信和线程通信

3、线程池的参数

4、什么是内部类,什么是匿名内部类

5、设计题:一个市有9个消防站,现在要新增3个消防站,这3个消防站应该放在哪里

 

3.网易考拉(offer)

一面

1、sql题:学生成绩表,把每科最高分前三名统计出来

2、算法题:二维数组中的查找

3、kafka如何保证高吞吐的,了不了解kafka零拷贝,具体怎么做的

4、sql有几种join,map join了解过没

5、hbase中row key该怎么设计

6、hdfs文件上传流程,hdfs的容错机制

7、怎么解决hive数据倾斜问题

 

二面(全程写写写)

1、算法题:二维矩阵相乘

2、算法题:链表中环的入口

3、写一下mysql binlog的数据格式,怎么进行数据清洗的

4、写一个正则表达式进行手机号匹配

5、讲一下数据仓库层级的划分,每层的作用

 

4.美团新到店(offer)

去了北京美团公司里面试,一上午面完,第二天通知高分通过

一面(简单的聊了聊,10min)

1、介绍项目,以及滴滴的实习经历

2、JVM内存的划分

3、垃圾收集算法

4、数据建模,星型模型和雪花模型

5、数仓层级的划分,怎么对接到mysql拿数据

 

二面

1、sql题:写一条sql删除订单表中重复的记录

2、sql题:一张网页浏览信息表,有两列,一列是网页ip,一列是浏览网页的用户(比如a或者b、c、d直到z),求这些网页被a和b或者a和c或者b和c两两组合访问的次数

3、hive数据倾斜产生的原因,怎么解决

4、设计学生成绩管理系统,符合第三范式要求,并绘出UML图

5、算法题:斐波那契数列

6、spark程序的运行流程

7、spark streaming从kafka中读数据的两种方式

8、讲讲数据库索引,B树和B+树

9、Elasticsearch的索引,单field索引和多field的联合索引

10、linux查看某文件的大小,vim中怎么替换内容

11、海量数据的Count问题(单机),如果把大文件hash成不同的小文件,此时小文件装不下某个key对应的数据,该怎么办

12、智力题:8升水,有一个5L的杯子和3L的杯子,怎么得到4升水

 

三面

1、osi七层模型,三次握手和四次挥手,为什么两次握手不行

2、kafka怎么保证高吞吐量,项目中有测过吞吐量吗,相比于其它MQ,为什么会选择kafka,kafka怎么保证exactly once语义

3、了解hbase吗,hbase为什么查询速度快

4、hive sql怎么转换成底层的MapReduce程序,以及shuffle的过程

5、算法题:被围绕的区域,leetcode第130题原题

6、智力题:一头母牛每年生一头小母牛,每头小母牛从第四年开始,每年也会生一头小母牛,写个公式求第n年会有多少头牛

 

5.小米(offer)

一面

1、java和python的区别,对面向对象的理解,和面向过程相比有什么区别

2、java为什么不能多继承

3、讲一下java抽象类和接口

4、java中为什么要写非static方法

5、volatile和synchronized的区别

6、算法题:跳台阶问题

7、算法题:树的非递归后序遍历

8、设计题:一个停车场有一些大车位和小车位,大车只能停大车位,小车既能停大车位又能停小车位,实现这种场景下的调度系统

 

二面

1、算法题:输入一个字符串,输出该字符串中字符的所有排列

 

6.贝壳(offer)

一面

1、synchronized的底层实现

2、线程等待时位于哪个区域,具体讲一下

3、谈谈对kafka的理解,能讲多少讲多少

4、算法题:二分查找

5、快排的时间复杂度和空间复杂度,最优情况和最差情况分别是多少,是稳定排序吗,快排为什么快

 

二面

1、介绍项目,项目中涉及到了一些算法,介绍一下

2、两道算法题:路径问题,leetcode上63题和64题原题

3、写正则表达式匹配电话号码

4、智力题:一张圆桌子,我和面试官轮流往桌子上放硬币(随便放),直到桌子放不下为止,最后一个放硬币的人赢,如果我先放,怎么保证我肯定赢

 

7.快手(offer)

一面

1、jvm类加载机制,类加载器,双亲委派模型

2、java实现多线程的方式

3、spark怎么划分stage,宽窄依赖,各包括哪些***作

4、zookeeper怎么保证原子性,怎么实现分布式锁

5、写个快排,为什么要用三数取中法,好处是什么

 

二面

1、sql题:找出单科成绩高于该科平均成绩的同学名单(无论该学生有多少科,只要有一科满足即可)

2、sql题:找出单科成绩高于该科平均成绩的同学名单(该学生所有科都必须满足)  

3、算法题:求数组中连续子数组的最大和

4、算法题:使用最小花费爬楼梯,leetcode746题原题

 

三面

1、讲一下java IO

2、算法题:输入n个整数,找出其中最大的k个数

3、算法题:给一个整数数组和一个目标值,找出数组中和为目标值的两个数

 

 

8.华为(offer)

 

一轮玄学面

面试官是做安卓的,瞧不起大数据,觉得大数据很虚,我跟他bb了一堆。然后问我有没有女朋友,我说以前有,现在分了;问我什么时候谈的,什么时候分的,我说本科谈的,毕业分了;问我为什么要分,此处省略一万字......问我现在想没想过再谈,我说毕竟转专业过来的,想趁在校期间利用好短暂的时光提升自己的技术水平(其实因为找不到);然后面试官说以后工作了就不好找咯,我说您说的有道理............

你可能感兴趣的:(面试笔记,Interview)