全网最全的的ebay大数据面试题

前言


学习群的几个小伙伴和我都有面试ebay 大数据岗位的经历,而且也都拿了offer,我特意抽出了一些时间把问题和部分答案就行了汇总,希望对大家有帮助。


全文篇幅1万字左右,从数据结构到Java再到大数据都有整理,可以先收藏起来,补缺补漏。ebay大数据组也持续招人,要投简历的可以把简历私发到我微信。



小提示:绿色的题代表是简单的,黄色的题代表中等,红色代表有点难度;绿色题回答的很全面,很深入,则有可能比红色的题还难;蓝色的是作为扩展,面试的时候问到的不是很多,能答出来挺好,答不出来也没关系

一、  java基础


1、 Queue Stack你平时有用过么,说说你常用的方法,他们的却别在哪呢?

2、 了解java的异常吗,有什么区别,常见的异常有哪些呢?

3、 两个字面值相同的Integer,它们两个用等于号去比较,结果是 true还是false ?(这个题要分两部分去回答,结果可能为true,也可能为 false。因为有缓存)

4、 可以讲一下你常用的集合类么?他们的实现类有哪些?

5、 ArrayList LinkedList的区别,底层的实现呢了解吗,有没有什么优缺点,分别适合于什么样的场景,多线程环境下,有没有安全的 list的实现类呢?

6、 其他数据结构的了解吗?LinkedHashMap ConcurrentSkipHashMap(作为一个扩展,面试的时候问到的不是很多,能答出来挺好,答不出来也没关系)

7、 说一说你对HashSet的理解,越详细越好 ( tip:底层是用hashMap 实现的) treeSet有了解吗?聊一聊?

8、 HashMap的疯狂试探:

a. HashMap 的底层数据结构是什么样子的

b. 了解hash冲突吗?它是如何解决 hash冲突的

c. 请你简单叙述一下hashMap putget 操作,当然,能说多细就说多细?

d. Jdk7 jdk8中对 hashMap做了什么改进嘛(红黑树)?

e. 有没有其他的解决冲突的办法呢

f. HashMap 中的hash函数了解吗?那他的扩容机制了解吗?

g. HashMap 为什么扩容是2倍呢,可以说说嘛?

h. 假如说我加入一个键值对,这个时候出现了冲突,它只怎么把这个节点加入进去?是加入到当前bucket所对应的链表的头结点还是尾节点?(答不上来可以问一个稍微简单的, equals == 的区别,以及其中hashCode的作用)

i. 可以说说什么条件下,可以把一个链表转成红黑树呢?它里面的大概流程是什么,了解吗?

j. 有没有想过为什么选用了红黑树,而不是其他的数据结构,譬如说二叉树,二叉查找树,或者其他的树?

k. 在高并发大流量的情况下,hashMap有什么问题吗,会不会造成 cpu达到100% ?如果会,那是在哪一步可能会出现这个问题呢(插入、删除、查找、扩容)?

9、 ConcurrentHashMap的疯狂试探:

a、 他和HashTable的区别呢?

b、 说说你对JUC包的了解?

c、 ConcurrentHashMap 中是怎么加锁的?

d、 1.7 1.8中, ConcurrentHashMap的区别是什么?

e、 ConcurrentHashMap 是怎么做到线程安全的呢?(CAS和锁)

f、 为什么会抛弃分段锁,它有什么毛病吗(上面一个题回答上才可以问这个)?

g、 知道红黑树的transfer过程么?简单的描述一下

10、 多线程下的疯狂试探:

a. 多线程了解吗?说说线程的生命周期?

b. 线程池有用到过吗?怎么用的,jdk有提供那些线程池(总共提供了四种)?

c. 线程的状态有哪些呢?

d. 线程池的核心参数有哪些?(核心线程数、最大线程数、时间、时间单位、队列、拒绝策略、默认的线程工厂)

e. Wait yeild stopsleep join startrun 的区别和如何使用?

f. 接着上题:这四种有什么区别吗,你用过哪一种,可能存在什么问题吗?

g. 接上题:拒绝策略有哪些呢?了解吗?聊聊?

h. 接上题:你刚才说了队列,线程池中的队列有哪些?有界队列、无界队列、同步队列都有了解吗?聊聊?

i. 如何实现一个消费者和生产者的循环消费和生产呢?(有两种方式,一种是通过锁,lock或者 Synchronize,还有一个是通过ArrayBlockingQueue 实现)

j. 你可以实现线程之间的相互通信吗?如何实现?要不写一个?

11、 线程安全的疯狂试探:

a. Synchronzie 了解吗?谈谈你的理解

b. 在一个普通方法上加synchronize和在一个静态方法上加 synchronize有什么区别(对象锁和类锁的的区别)?

c. Synchronize lock有什么区别呢?说说你对 lock的理解?

d. Lock 的公平和非公平锁?

e. 说一说volitaile为什么保证不了原子性,可以保证可见性嘛?如何保证的( jvm的多线程的内存模型有关系)

f. 了解CountDownLatch么, CyclicBarrier的区别呢?

g. Synchronize 的实现原理知道吗?moniter的实现机制呢,为什么加了 Synchronzie关键字,就可以在多线程下是安全的(这个回答要从java 对象的Object头来回答)

h. 类锁和对象锁的区别呢?字节码的体现呢?

i. Java 中的自旋锁、偏向锁、读写锁、重锁等了解吗?

j. 了解java重对象的对象头嘛?有哪些属性和字段呢?

k. Aqs(AbstractQueuedSynchronizer) 了解吗?它和lock的关系?说说 aqs中的核心思想?

l. Lock 中存在锁升级嘛,他是可重入得嘛,那Synchronize是可重入得嘛,有没有锁升级的概念?

m. Volitaile 了解吗?他的作用是什么呢,内存语义是什么呢?有没有了解过cpu的缓存一致性协议?

n. 还知道其他的juc类嘛,有哪些呢(譬如 lockSupport)?

12、 jvm的疯狂试探:

a. 了解jvm么? jvm的内存模型?

b. Java 如何判断一个对象是否还活着呢?

c. Java 的类加载了解吗?

d. Java 类加载器了解吗,有哪些呢?那它的双亲委派了解吗?

e. Jvm 指令你知道哪些(jps jstackjinfo jmap……),都有什么作用呢?

f. Java 的垃圾回收算呢,了解吗,G1回收算法了解吗?

g. Jvm 参数你了解吗,知道多少说多少?

h. 在实战中有进行过jvm调优嘛,怎么做的,

i. Java 的对象年龄知道吗,有什么作用吗?

j. Young GCfullGC 了解吗,如何触发,如果在你的项目中,频繁出现young GC 怎么办?

13、 设计模式的疯狂试探:

a. 你了解的设计模式有哪些?

b. 可以写一个单例模式嘛,工厂模式呢,抽象工程模式解决了什么问题?

c. 策略模式、责任链模式、适配器模式写一个,写不出来的话,java中在哪用到了这些模式

d. 代理模式了解吗,会写吗,jdk代理和 cglib代理的区别呢,说说你的理解?


二、  数据结构与算法


1、 排序算法了解什么?能不能手写一个快速排序、或者归并排序,堆排序有了解吗?

2、 给你一个一元二次方程公式,你写一个方法,用计算机语言实现它。

3、 图了解么,有向图呢?你可以实现一个有向图么?(假如他回答的是二维矩阵,可以反问他有没有更好的解决方案呢,因为这个图可能是个稀疏矩阵)

4、 接上题,在图中,如何判断两个节点的联通性,可以写代码写出来么?

5、 给你一个1T Int文件,然后你只有一台内存是8G 的机器,如何用最快的方法,求出里面出现频率最高的topN个数?

6、 算法的时间复杂度和空间复杂度了解吗?说说你了解的算法的时间复杂度和空间复杂度。

7、 二叉树了解吗,树的广度优先算法和宽度优先算法了解吗?写一个他的前序(中序、后序)遍历可以么(递归和非递归的方式都可以写出来么)?

8、 给你一个字符串,请检查中间出现的括号的正确性,譬如:({[]}),((()))这都是个合法的字符串,(()())((()这就不是一个合法的字符串;

9、 给你一个单向链表,检测它有没有形成环?

10、 给你一个单向链表,如何反转,可不可以把空间复杂度降低到O(1)级别?

11、 写一个字符串匹配算法,判断在一个字符串中是否包含另外一个字符串(一般都会说循环去比较,这样的时间复杂度很高,有一个算法是KMP,面试者要是能提到 KMP都就很不错了,因为很多面试官都不知道,也不会)?

12、 可以用两个栈模拟一个队列么?

13、 如何判断两棵树相不相等

14、 动态规划有了解吗?

a. 给你一个机器人,它每次只能向右或者向下走一步,其中,中间有一个障碍物,不可以经过,请问,在一个n*m的矩阵中,这个机器人总共有多少种走的方法?(答不出来就降低一下难度,把中间的那个障碍物去掉)

b. 青蛙跳知道吗?给你一个数组,里面的每一个数字代表青蛙可以前进的最大的步数,如何判断这个青蛙可不可以达到终点;譬如2 34 1就可以, 12 1 01 就不可以;

c. 爬楼梯,假设有一个n阶的楼梯,你每次都只能爬 1或者2 个台阶,请问有多少种不同的方法可以爬上去呢?

d. 给你一个整数数组,找到一个具有最大和的连续子数组(子数组至少包含一个元素),返回最大值

e. 给你一个容量为V的背包,现在有 N件商品(有重复,相同的商品可以随意取),每件商品的体积是v1 ,价值是w1,请问,这个背包所能容纳的最大价值是多少?

f. 一个100层高的楼,有两颗鸡蛋,你需要用最少的次数找到那个临界点,这个临界点以上的楼层上摔下去,鸡蛋都会碎掉,以下的楼层,鸡蛋是不会碎的,(扩展,加入现在是 N层高的楼房,你现在有m 个鸡蛋,m>=1,用最少的次数找到那个临界点)



三、  数据库大汇总


1、 用过mysql嘛?了解吗?

2、 Mysql 事务了解吗,隔离级别呢,每种隔离级别会出现什么问题?

3、 Mysql 的锁了解吗(表锁、行锁、间隙锁,读写锁)?

4、 Mysql 引擎知道吗,innodb myisam的区别知道吗,说说底层的实现?

5、 聚簇索引和非聚簇索引知道么,有什么区别?

6、 B+ 树知道吗?为什么使用B+树?

7、 分库分表做过吗,如果让你去实现分库分表,你有什么需要考虑或者注意的嘛?

8、 了解死锁嘛?知道他是怎么产生的嘛,如何避免呢?

9、 Sql 优化了解过吗?说说你的理解,给你一条sql,你会怎么优化?


四、  框架


1、 redis大家庭:

a. redis 是什么,能干嘛,怎么用?

b. Redis 的基础数据类型有哪些?

c. Reids 除了这些,还有哪些数据结构,能解决什么问题?

d. Redis 集群有搭建过么,说说你的实现

e. Redis 如何实现分布式锁

f. Redis 的支持事务么?

g. 位图了解吗?

h. 布隆过滤器了解吗,他的原理是什么呢?

i. Redis 的通信协议你知道嘛?

j. Redis 中的数据结构底层了解吗?string的编码、 list的编码、zset 的编码;

k. 在集群环境下,Redis的分布式锁一定可靠吗, redis社区有没有提供可靠地分布式锁的集群方案(有,红锁)?

l. Redis 的持久化你知道么,说说rdb aof的区别

m. Aof 瘦身知道么?如何瘦身

n. Redis 的拒绝策略你知道么?那它的淘汰策略你知道么

o. Redis 的哨兵模式呢,了解吗?

p. Zookeeper 了解吗,用zookeeper实现分布式锁,和 redis实现有什么不同呢,说说他们的原理?

2、 Spring大家庭:

a. Autowire Resource 的区别

b. 谈谈你对spring的理解,它干了什么?

c. Spring 的依赖注入和切面呢?

d. Spring 的事务了解吗,他的传播机制呢

e. Spring aop切面详细说说,你的应用场景呢?

f. Springmvc 用过吗?了解他的启动流程嘛?说说你的看法

g. Spring 中的bean的生命周期呢,了解吗?如何扩展一个 bean的生命周期?

h. Spring 源码读过吗?有没有想过他是如何解析在xml中定义的 bean的。

i. spring的配置文件中加入 component-scan标签,它就可以自动加载所有添加相应注解的java 类,这个是怎么做到的呢,你知道嘛?

j. Dubbo 了解吗?dubbo是怎么和 spring想结合的?

3、 消息中间件大家庭:

a. 你了解消息中间件有哪些?

b. 谈谈你对topic partition的理解?

c. Kafka中的 isrosr 有了解吗?

d. Kafka的高水位你知道嘛?

e. Kafka的分区器、拦截器、序列化器你了解吗?

f. 消息的可靠性怎么保证?

g. 消息丢失怎么办?kafka 有什么保证策略?(我了解kafka,你们也可以问问其他的,譬如 rocketMq

h. Kafka的事务你了解过吗(这个特别难,一般别问昂)?

4、 zookeeper大家庭:

a. 谈谈你对zookeeper的理解?

b. Zookeeper 的节点类型你知道么?

c. Zookeeper 的心跳机制呢?

d. Zookeeper 的优势在哪?

e. 知道zookeeper watch嘛?

f. Cap 理论知道吗?

g. Paxos 算法呢,了解吗?

5、 springBoot大家庭:

a. 什么是springboot

b. 为什么要用springboot呢?

c. Spring boot 的核心配置文件有哪几个?他们的区别是什么?

d. Spring boot 的配置文件有哪几种格式?区别?

e. Spring boot的核心注解是那个?它主要由哪几个注解组成的?

f. 如何理解springboot的配置加载顺序?



五、离线方向


1. 数据优化中,需要注意哪些关键词

2.     Uninon uninon all 的区别

3. 除了distinct外如何使用SQL 对数据去重

4. 项目中etl过程

5.     Spark的运行流程

6.     Sql开窗函数,开窗函数中row_numberrank 的区别

7.     Avgsumcount 函数,在某列有空值的情况下,结果会有哪些不同

8. 一个表两个字段,一个id,一个values;values 有连续相同;但是有缺失,找出缺失的地方补全(连续缺失的字段如何补全)

9. 数据仓库的基本原理

10. 数据表的各个模型,例如(雪花模型),简述

11. 数据优化中除了用过mapjoin之外,还用过哪些join( 不是常见的五种),简述

12. 修改批量文件中的词

13. Shell脚本的定时任务


1.英语自我介绍,说一下越到的最大的挑战

2.unionunion all的区别

3.给了个题目,一个表两个字段,一个是id,一个是value value是连续相同的,但是有缺失的,找出来缺失的地方补全

4.去重的操作

5.spark提交任务的流程

6.Spark oom怎么处理

7.join有哪些?mapsidejoin是什么知道吗(不知道,大概猜了下,然后就没继续问)

8.Linux指令用过哪些?

9.shell直接查找到文件中的一个词,然后替换(这个不会)

10.Data modeler用过没

11.维度建模什么情况


1.用英语介绍下数据仓库和数据集市的区别

2.讲下 linux 免密登陆

3.介绍下spark执行流程

4.spl 开窗函数

5.shell 脚本读取文件

6.项目中最自豪的事情

7.数据库中count(*) count(1) 在什么情况下数据不一致

8.最有压力的事情

9.shell 脚本替换文件内容,替换文本

10.数据倾斜调优


1.英语介绍一下olapoltp 的区别

2.olap的产品知道哪些

3.数仓模型建设

4.对表的设计

5.data modeler工具

6.项目中的etl过程

7.统计人员使用什么工具查询

8.数据报表工具知道哪些

9.工作主要涉及的技术有哪些

10.每日数据量多少,存量多少

11.如何通过sparksql对数据进行更新

12.hbase数据如何更新

13.两表join跑不出数据会是什么原因,如何解决

14.如何进行mapjoin

15.开窗函数

16.linux命令考查

17.hdfs上跨节点如何数据迁移

18.免密登录如何实现

19.ip映射是记录在哪个文件中

20.如何批量修改文件中某一字符串

21.如何确保项目成功交付

22.项目交付时如何进行数据验证

23.项目中最有成就感的事情


六、Spark相关


Q: Spark任务提交后的流程

A: 只要能说出来sparkContext, DAG, Stage, Executor 就大致上应该了解些。


详细答案参考:

1)构建Spark Application的运行环境(启动SparkContext ),SparkContext向资源管理器(可以是StandaloneMesos YARN)注册并申请运行Executor资源;

(2)资源管理器分配Executor资源并启动StandaloneExecutorBackend Executor运行情况将随着心跳发送到资源管理器上;

(3)SparkContext构建成DAG图,将DAG 图分解成Stage,并把Taskset发送给Task SchedulerExecutorSparkContext 申请Task

(4)Task SchedulerTask发放给Executor 运行同时SparkContext将应用程序代码发放给Executor

(5)TaskExecutor上运行,运行完毕释放所有资源。


Q: SparkAPI有哪两大类?分别解释一下和举个例子?

A: Transformation & Action.Transformations是转换操作,如map, filter, union, reduceByKey等,Actions 是执行操作,如count, collect, reduce, saveAsXXX


Q: Spark中的union属于宽依赖还是窄依赖? 有无shuffle?

A: 属于窄依赖,无shuffle


SQL:

Q: union all union 有什么区别?哪个性能好?

A: union all 不去重, union会去重。Union all性能好,因为无需额外去重


Q: 如何判断一张表里某个字段有重复?

A: 利用COUNT HAVING ,答到这个的一般没问题, 具体如下:

SELECT COL, COUNT(1) AS CNT FROM TABLEGROUP BY 1 HAVING CNT > 1


Q: 有一张表有两个字段,分别是商品ID和商品价格,如何取到商品价格是前10 名的所有商品ID

A: 如果只能想到ORDER BY + LIMIT的,说明SQL 较弱。知道用窗口函数(PARTITION BY)的话,至少说明应该不止做过简单的SELECT * FROMTABLE,但想到用row_number() 的话。。不行, 如果会问价格是否有重复的话,说明对问题考虑得算周全,因为价格通常都会重复,ID是一般唯一的,如果知道rank() , dense_rank()的话基本就没问题了。当然也有不用partition by 的方式,但步骤较多


数仓:

Q: 数据仓库一般的分层有哪些

A: 不同公司叫法不同,但是可以让他解释每层分别放什么样的数据, 下面是网上抄的,大同小异,知道基本概念就行

ODSOperation Data Store

原始数据

DWD(数据清洗/DWI) data warehouse detail

数据明细详情,去除空值,脏数据,超过极限范围的

明细解析

具体表

DWS(宽表-用户行为,轻度聚合) data warehouseservice ----->有多少个宽表?多少个字段

服务层--留存- 转化-GMV-复购率-日活

点赞、评论、收藏;

轻度聚合对DWD

ADS(APP/DAL/DF)-出报表结果 Application Data Store

做分析处理同步到RDS数据库里边


Q: 维度表和事实表分别是什么?举些例子?

A: 简单解释:

事实表就是交易表。

维度表就是基础表。

二者的区别:

维度表的冗余很大,主要是因为维度一般不大(相对于事实表来说的) ,而维度表的冗余可以使事实表节省很多空间。

事实表一般都很大,如果以普通方式查询的话,得到结果一般发的时间都不是我们可以接受的。所以它一般要进行一些特殊处理。如SQL Server 2005就会对事实表进行如预生成处理等。

事实表一般是没有主键的,数据的质量完全由业务系统来把握。


七、SQL相关


1.distributeby sort by cluster by order by 区别?

1). order by 只有一个reduce负责对所有的数据进行排序,若大数据量,则需要较长的时间。建议在小的数据集中使用order by 进行排序。

2). order by 可以通过设置hive.mapred.mode参数控制执行方式,若选择strict ,则order by 则需要指定limit(若有分区还有指定哪个分区);若为nostrict ,则与关系型数据库差不多。

3). sort by 基本上不受hive.mapred.mode影响,可以通过mapred.reduce.task 指定reduce个数,查询后的数据被分发到相关的reduce中。

4). sort by 的数据在进入reduce前就完成排序,如果要使用sort by 是行排序,并且设置map.reduce.tasks>1,sort by 才能保证每个reducer输出有序,不能保证全局数据有序。

5). distributeby 采集hash算法,在map 端将查询的结果中hash值相同的结果分发到对应的reduce文件中。

6). distributeby 可以使用length方***根据string 类型的长度划分到不同的reduce中,最终输出到不同的文件中。 length 是内建函数,也可以指定其他的函数或这使用自定义函数。

7). cluster by 除了distribute by 的功能外,还会对该字段进行排序,但是排序只能是升序排序,不能指定排序规则为ASC 或者DESC,所以cluster by = distribute by +sort by


2.请简述 以下sql 执行顺序是什么?

select

catid,

count(orderid) as sales

from t_tab

where catid <> "c666"

group by  catid

having count(orderid) > 10

order by count(orderid) desc

limit 100



答:

from -> where -> group by ->having -> select -> order by -> limit


3.问:(1 )两条语句的执行结果是否一样?为什么?

2 )假设,数据量很大的情况下,您会选择哪种语句执行?也可以自行开发


--sql 语句 1

select

t1.id,t1.xxx,t2.xxx

from t1 left join t2

on t1.id = t2.id and t1.id < 10


--sql 语句 2

select

t1.id,t1.xxx,t2.xxx

from t1 left join t2

on t1.id = t2.id

where t1.id < 10




答:1)由于left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left right表中的记录,full则具有left right的特性的并集。

sql 语句 1 采用的是left join,所以 on 里的 t1.id <10 对左表 t1 不起作用,结果还是会返回t1 表的所有数据


sql 2 则是先 通过 on 上的条件,将两表关联,在最终关联好的表上,在进行过滤,所以只会返回t1.id < 10 的所有数据

2) 当数据量很大的情况下,基于上述情况我会选择 sql 2 ,但是性能不高,可以采用以下查询

select

tmp_t1.id,tmp_t1.xxx,t2.xxx

from

(

select * from t1 where t1.id < 10

) tmp_t1 left join t2

on tmp_t1.id = t2.id


4.count(distinct user_id) group by user_id 之后 count 两者有什么区别?

首先要清楚,count(distinct) 的原理机制,首先他是将数据通过map 端发往一个reduce,之后reduce接收到数据之后,会将数据放入到 hashset 中去重,之后cleanUp() 方法,在执行最后的逻辑,比如:计算hashset size等。

这里就出现了一些问题,

1)数据都发往一个reduce会造成数据倾斜,

2)程序从分布式变成单机程序,影响效率

3)程序执行过程中,只产生一个job

但也不是绝对的,当数据量很小的时候,此时我们并不需要采分布式执行,一个job运行足矣,但是,当数据量比较大的时候,这时count(distinct) 就暴露除了大大的弊端,所以,此时,不应该采用此法来实现去重

group() by  count() 当数据量比较大的时候,采用此法,先分组,这时已经在map端实现了去重机制,之后数据发往reduce 数据量已经变得很小了,并且此法涉及到shuffle ,所以reduce的压力不会集中在某个上,并且会产生多个job

1.1 group() by  count() 一定比count(distinct) 性能要好吗?

不一定,当数据量比较大的时候采用group() by  count() 会比count(distinct) 要好,但是在数据量比较小的时候,一个 job就可以处理,没必要用两个job ,也没必要shuffle,所以调优看情况而定

#面经##eBay##大数据开发工程师##校招##社招#
全部评论
要加学习群的或交流的同学可以加微信Fawn0504,不用后台私信哈,回复不过来。
2 回复
分享
发布于 2020-08-16 17:31
楼主你好,请问你是实习、校招还是社招?
点赞 回复
分享
发布于 2020-08-16 11:54
阅文集团
校招火热招聘中
官网直投
楼主您好,请问可以帮忙内推21届校招吗?
点赞 回复
分享
发布于 2020-08-19 12:10
大数据也问spring么,还是因为项目用了spring
点赞 回复
分享
发布于 2020-08-19 17:13
ebay问这么多吗?还那么细,这不是一个人的面试吧?
点赞 回复
分享
发布于 2020-09-20 11:00
请问楼主现在还在ebay吗?可以找你内推ebay做大数据实习吗?
点赞 回复
分享
发布于 2021-01-24 13:33

相关推荐

46 353 评论
分享
牛客网
牛客企业服务