韩**面经

面经 xug9998 ⋅ 于 2020-07-13 17:17:59 ⋅ 2441 阅读

面试企业题
第一家
面试题:
1. HashMap与HashTable的区别?
(1)存储结构:HashMap在JDK1.8之前,以数组+链表的形式,JDK1.8之后是数组+链表
+红黑树的形式;HashTable是以数组+链表的形式存储;
(2)HashMap的key和value都可以为null,但只允许一个key为null;Hashable的key和
value不允许存储null值;
(3)默认初始容量不同:HashMap默认容量是16个,HashTable的默认容量是11个;
扩容不同:newsize=2oldsize倍,HashTable扩容是newsize=2oldsize+1;
(4)对修改内部的共享数据的方法添加了synchronized,因此HashTable线程安全,
HashMap线程不安全;
(5)效率不同:因为HashTable加锁,效率较HashMap要慢;
(6)两者通过hash值散列到hash表的算法不一样:
HashTable是古老的除留取余法,直接使用hashCode:
file
HashMap是:
file
2. HashMap的初始容量为2的倍数
(1)取决于操作系统,初始化的时候按照2的倍数进行扩容,进行的是位运算,提高了运算速度;
(2)2的倍数可以减少内存碎片;
(3)2的倍数可以提高哈希计算散列度,降低哈希冲突;

  1. 悲观锁与乐观锁
  2. 事务的四种隔离级别?
    (1)读未提交
    (2)读已提交 这是 Oracle和 SQL Server 的默认隔离级别
    (3)可重复读 MySQL默认隔离级别
    (4)串行化 数据库最高隔离级别
    参考:https://baijiahao.baidu.com/s?id=1611918898724887602&wfr=spider&for=pc
  3. MapReduce的shuffle阶段?
  4. JVM的垃圾回收算法?
  5. SQL查询每门课程的前几名?
    例如,有一个表student,字段有id,course,score字段,求每门课程的前三名:
    file
    如果是HQL:
    file
    rownumber:会对所有数值,输出不同的序号,序号唯一且连续,如:1、2、3、4、5。
    rank:会对相同数值,输出相同的序号,而且下一个序号间断,如:1、1、3、3、5。
    denserank:会对相同数值,输出相同的序号,但下一个序号不间断,如:1、1、2、2、3。
  6. 大表join大表,如何解决数据倾斜?
    第二家
  7. dateformat(date,format)函数
    date:是合法的日期,也必须是有效日期;可以是date类型,可以是timestamp类型,还可
    以是字符串类型;
    format:由预定义的说明符组成的格式字符串;
    第三家
  8. 简介最近项目?
    实时正文抽取;
    (1)在讲项目的时候,往redis存的字段说的是有三个,企业真正做的时候,不会那么少,
    这里有漏洞。
  9. HBase与Redis的应用场景?
    (1)Hbase与Redis都是这种NOSQL数据库,但是Redis支持的value类型更丰富,例如:
    咱们的实时正文抽取,用到了set,zset集合,当然还有其它的hash,list。
    (2)Redis存储是基于内存的,当然也可以做持久化,支持的数据量通常受内存限制,而
    HBase通常是没有内存限制的。
    (3)Redis适合做缓存服务器,HBase适合做大数据量的持久存储。
  10. kafka出现过消息丢失吗?
    答:没有。但根据我对项目的的总结,。。。。。
  11. 现有一张表sc,有学生号SID,以及课程号CID,查询出和SID='01'选的课程一样的人,
    输出SID即可?
    答:
    file
    file
  12. 如何保证kafka只消费一次?或者如何保证kafka的幂等性?
    答:这个问题属于老生常谈了。
  13. 把offset维护到Zookeeper里面,用的哪个类或者哪个方法?
    答:file
  14. SparkStreaming的参数调优?
    答:资料已有。
  15. 在MR程序中,如何确定是资源倾斜还是资源不够?
    (1)在mr程序中写一个通用类;例如wordcount,加conbiner,输入可以指定特定字段组
    合作为你的key,以及一个阈值,超过这个阈值的写出来,就可以知道哪些数据是非常多的。
    (2)任务进度长时间维持在99%,查看任务监控页面,发现只有少量(1个或者几个),
    处理的数据量和其它reduce差异过大;可能出现单一reduce的记录数与平均记录数差异过
    大,通常可能达到3倍甚至更多,最长时间大于平均时间。
  16. MR原理?
    答:主要讲解shuffle过程。
  17. MR过程中,有一个环形缓冲区,那么环形缓冲区有什么作用?
    第六家
  18. 介绍最近一个项目
    (1)项目简介
    (2)你负责哪一块
    (3)哪一块使用的时间比较长:编写抽取算法,进行实时网页正文XPath抽取;HBase表
    的设计;
    (4)现场需求:现在有历史日志数据,把数据写入kafka,进行kafka数据消费,
    sparkstreaming从kafka做简单的消费,对数据拆分(kafka中的数据是join格式),拆分之
    后把想要的字段存入Hive或者Redis里面。
    整个过程需要多长时间:1个多月;
    如何计划完成这项任务:首先查阅需求文档;然后技术选型,具体使用什么技术实现我的功能;拿到kafka中的数据,进行数据的分析;redis中存储数据的设计,包括keyvalue等;HBase中rowkey的设计,预分region等等。
    写代码+自己功能测试时间:10天就可以;
  19. 是否加班,加班加到几点
  20. 课程相似度推荐项目
    (1)项目讲解
    第一步:写公式;
    问1:为什么可以一下子写出来?
    答1:以前经常写,当时跟着别人开发,需要经常给我们领导汇报项目进展情况,写的多
    了,就记住了;
    问2:记这个公式的意义在哪里?
    答2: 以后再做相同的项目时,我知道有这个公式可以实现,到时候可以把具体的业务套进
    公式进行功能实现;
    问3:这个公式的含义?
    答3:
  21. 阿卡索分布式数据采集平台
    (1)项目架构
    (2)你的工作是什么?
  22. 公司技术
    spark,hive,redis,kafka
  23. zookeeper作用
  24. 正文抽取项目 — 用Hive分析每个host的数据量,如何分析?
    第八家
  25. spark算子
    mapPartition与foreachPartition区别;
    reduceByKey与groupByKey区别:reduceByKey中shuffle的mapper阶段,进行一次
    combiner,这样就减少了reducer阶段拉取的数据量;
  26. kafka数据堆积问题
    产生原因:消费者消费的速度小于生产者生产速度,导致数据堆积。但是之前的测试是消费
    者大于生产者,那么是什么原因呢?答案应该是:重复消费。
    consumer在堆积的消息队列中拿出部分消息来消费,但是这个拿取是随机的(不确定,目
    前看来是),在如果生产者在一个批次间隔产生的数据非常大,例如是5w条,cunsumer有
    可能在规定的时间内(session.timeout.ms)是消费不完的。
    如果设置的是自动提交(enable.auto.commit),就会出现提交失败的情况,提交失败就出
    现回滚,这部分数据就相当于没有消费过,然后consumer继续去拿数据,如果还没消费继
    续回滚,这样循环下去。(但是我发现有时间数据还是会被消费的,比如说数据小于2万条/
    次,所以我说取得数据是随机的,应该可以设置 )
    解决方案:(1)增加session.timeout.ms的时间;(2)设置手动提交
    (enable.auto.commit=false)
    如果采用第一种方案,随着时间的增加,数据量也会增加那么还是会超时。应该采用第二种
    方案。
    file
  27. kafka中partition数量如何计算?
    答:kafka第一节笔记。
  28. 批处理时间延迟怎么办,导致数据堆积怎么办?
    答:延迟修改:可以先将需要修改的数据暂时保存到缓存中,然后定时将缓存中的数据保存
    到数据库中,程序在读取数据时可以同时读取数据库中和缓存中的数据。
  29. 成员介绍
    答:我们组目前是8个人,上游2个做ETL,2个做数仓,我们是中游,下游1个哥们做数据挖
    掘侧重算法这块,组长是金山过来的,侧重算法这一块。
  30. 技能测试
    (1)java语言与scala语言都用在哪里?
    (2)Hive中哪里会产生数据倾斜?如何解决?
    数据倾斜发生在join,group by,count(distinct),其实就两种,因为count(distinct)的底层就
    是group by。
    解决方法:
    file
    大小表的join如何解决数据倾斜?
    join原则:小表放左;多表join,如果字段一样,只会生成一个job任务,join的字段类型要一致。
    可以使用MapJoin,并且Hive默认开启MapJoin。
    file
    大表join大表如何解决数据倾斜?
    答:把空值的key变成一个字符串加上随机数,把倾斜的数据分到不同的reduce上,由于
    null值关联不上,处理后并不影响最终结果。
    对于count(distinct)而言:
    采用 sum() group by的方式来替换。
    (3)小文件问题如何优化?
    答:HIve优化笔记。
    (4)spark这一块用的多吗?
    答:也用,最后项目也用了。这个回答真傻比。
    应该回答:用的挺多的,我们的正文抽取系统项目与课程相似度推荐系统都是使用的spark
    程序。
    (5)spark steaming读取kafka的方式?
    file
    (6)sparkstreaming程序在运行过程中,如果发生批次堆积如何处理?
    (7)Hive中的排序?
    答:order by,sort by ,distribute by,cluster by。
    (8)讲解实时正文抽取项目?
    (9)spark中常用的算法?
    file
    (10)实现一个字符串A,内容与长度都不确定;另一个字符串B,内容是“ab”,编程实
    现:判断字符串B是否在字符串A中。
    答:直接使用string类的contains()方法即可实现;但这道题考查的是contains()方法的底层
    实现原理。
    (11)实现数据的列转行?
    答:这道题很简单,使用case when函数实现,但没有写出来。真打脸。
  31. 业务分配
    答:实时处理与离线处理业务都有,实时处理占60%,离线处理占40%。
    有PC端,移动端都有。
    业务方数据也有。
    偏指标开发,类似于写SQL这一块。
  32. 你还有什么想问我的吗?
    答:(1)数据驱动型公司;
    备注:
    面试官在面试中,对我任职的公司一直说他们。。。,他们。。。;这时候的我回答应该是
    我们。。。,我们。。。;
    当面试官文小组成员时,没有清晰回答出来每个人具体的分工。
    以后在交谈中,当别人问起对某个语言或者组件熟不熟悉的时候,只要知道就要说熟悉。一
    定不要再说自己的缺点。
    以后在讲技术的时候不要带有“好像”这种词。
    第九家
  33. 你觉得你自己做的最成功的是哪一个项目?
    我回答的是阿卡索分布式数据采集平台,因为整个项目架构是我们一点一点开发出来的。
  34. 简介项目?框架目的?框架的设计是什么?你在整个框架中扮演的角色?
    目的:根据他们编辑部门给的链接,进行实时高效率的网页正文获取。
    框架的设计:生产
    消费者模式,发布
    订阅模式。给他画那两个图。
    扮演角色:(1)开始是把中间结果放到MySQL里面,但是当数据量特别大的时候,
    MySQL性能产生瓶颈。于是后面我想出放到redis,因为redis开始实现数据的去重,而且它
    使用内存作为缓存,读写速度非常快;(2)如何实现单机多线程问题,用的是python的
    queue。(3)如何保证数据上传到hdfs上的数据完整性 — 采用MD5校验;
    (1)解析字段:
    url,host,domain,MD5,
    (2)kafka集群多大?
    目前是3台
    (3)爬取的数据是多大?这时候面试官可能说数据量不是很大?
    我离职的这一周大约是27G。
    我们这一块只做自己的业务;可能不像咱们去哪儿网,业务范围广,数据量大。
    3 公司Hive仓库结构是什么样子的?
    这一块不是我负责对的,不是很清楚。
    问:你负责哪一块?
    答:我主要做Hive这一块,进行数据的离线分析。
    问:你能举个例子呢?
    答:例如,咱们要统计一下,最近半个月有多少人买了课程,使用count(distinct),再比
    如:不同地区课程销售情况;
    问:这一个是临时需求吗?除了这一个临时需求,有没有定时需求?
    答:这是一个临时需求。定时需求的就是我们基本统计,例如咱们app每天的访问量,流失
    量,注册量等。
  35. 如何保证定时任务产出数据是可靠的?你们都监控什么数据?
    答:我们使用报表系统,在WEB UI界面展示出来,进行数据的监控;
    我们监控的数据是:PU,UV,IV等;
  36. 如何确定数据是否发生异常?如何处理?
    答: 我们对每一个指标进行阈值的设定,如果这个UV,上周客户访问量是30W,那么我们
    就对这30W进行设定,同时设定上下浮动不超多5%就是没问题的,如果超过5%,那么就会
    切断后续程序的执行,给我们发一个报警文件;然后我们根据这个文件,找到问题的所在,
    从而进行问题的解决。
    面试回答:看一个指标的波动,比如昨天是1千,今天掉了5%,那么就可以定义为一个异
    常。这个平台不是我们明天监控的,而应该是有一个报警系统,触发之后,给我们发一个邮
    件或者短信。一旦发生异常,后面的Job就不应该继续执行了,俗称的熔断,阻断;后面的
    报表系统也不应该发出。
    可靠,及时;
  37. 报表如何优化,例如:报表是8点发出来,底层数据是6点导入,如何确保这两个小时中
    间任务一定可以跑完?
    第一种方案:把底层数据依赖往前提;也就是把时间6点往前提;
    第二种方案:把目前不急需结果的任务,暂停掉;跑一些任务急需数据。但这个有缺点:因
    为job特别多,无法确定哪个是任务重,任务轻;
    问:你现在看了一个job,假如这个job任务是两个,是否可以变成一个小时?
    答:其实面试官问到这里,意思是想问如何对这个job任务进行优化。奈何我还是没有理解
    他的意思,最后他指出来吗,如何对job任务优化。
    问:你可以从HQL角度去思考这个问题?数据倾斜产生原因?如何解决?
    答:说到这里我就明白他的意思了,对他回答了HQL优化的总结。
  38. 表与表的join,如果是一个小表,一个是大表,如何解决?
    我们把小表放在左边,发表放在右边;实现这种MapJoin,我们知道Hive默认是开启
    MapJoin的。此Join操作在Mapper阶段完成,不再需要redcuer阶段。
    为什么把小表放在左边可以提高效率?
    答:以往的说法是把小表放进内存中,然后大表的每条记录再去内存中检测,最终完成关联
    查询。
    通过测试以上说法是不对的,正确的说法应该是:把重复关联键少的表放在join前面做关联
    可以提高join的效率。
    因为写在关联左侧的表每有1条重复的关联键时底层就会多1次运算处理。
    file
  39. 你有什么想问的?
    (1)公司目前技术架构?
    讲解了数据仓库结构;
    (2)实时数据多还是离线数据多?
    (3)集群是哪个?
    (4)业务:
    数仓优化,数据开发,跟业务对接做一些指标,报表,数据需求;
    (5)核心竞争能力:
    了解业务,在数据开发过程中,积累的对数仓与运维的经验;
    第十家
  40. 你觉得哪个项目可以反映出你的开发水平与能力?
    讲解的第二个项目。
    问:你们这四个项目哪个代码量最大?
    答:这一块没有具体比较过。
    问:你们这个数据采集平台项目,代码量是多大?
    答:这个项目使用python语言开发的,最大的一个模块有1200多行,其他的都是一些封装
    的util类,有timeutil,dbutil,logutil等。
    问:你最擅长的是哪一部分?
    答:平常使用hive是比较多,开发的话,spark现在是用的多。
    问:那你Hive都用在项目的哪一块?
    答:最近这个项目使用了HIve作分析,对HBase进行预分region。刚进公司的时候,使用Hive这一块,有Hive分区等。
    问:你们现在来了一个需求,人员如何分配,需要多长时间?
    答:针对需求,进行人员分工,基本是两个人负责一个模块;首先对拿到的需求,进行分
    析;然后是整个技术架构的设计,技术的选型探讨,以及项目开发流程的设定。
    问:你们实际开发用了多长时间?
    答:我们也是会对整个项目进行时间评估,如果你对自己负责的这个模块在规定的时间完成
    不了,那么你就压缩下一个模块的时间,加班呗。、
    问:你们项目谁负责架构?
    答:我们组长负责,它是金山过去的。
    问:给你一个项目你可以设计吗?
    答:小型项目这种技术架构,技术选型是没问题;但是设计出来的框架也是需要不断的完
    善,因为在实际开发中,需求也是不断变化的。
  41. HR面试(最终败在了HR手里)
    (1)关于离职是否已办完?
    答:目前基本流程已办完。
    如果还继续问那些没有完成,就可以说离职证明还没有开。
    (2)公司人数有多少?
    答:这个问题考察你对公司熟不熟悉,有哪些组织结构,平常接触哪些人员。
    整个公司根据上次统计的人数是3500多,具体不清楚;我平常接触多的就是我们技术部
    (技术部里面有:前端,后端,Java开发,还有我们数据组),其他部门就是编辑部,推
    广部,运营部这些人。
    (3)介绍工作价值,了解工资内容以及工作优势?
    答:先说的期间做过4个大型项目;
    问:人事问如何定义“大”这个字;
    答:第一,从数据量来理解,我们的离线数据分析与现在刚启动的实时正文抽取系统,目前
    一天的数据量是57G;第二:工作价值大,对于领导提出的某项方案,我们会用数据去支持
    这个方案;另一方面,通过与其它部门的合作,加快公司运行效率。
    答:继续说了,日常工作,主要是做离线数据这一块,用HiveQL进行数据的分析。
    (4)项目多久有?如果项目没有的话,你们是一个什么状态?
    答:项目是根据领导需求。平常的话,主要是做数据分析这一块,根据领导或者其它部门的
    需求,我使用HQL进行数据分析,把结果发给他们;另外就是对已上线的平台或系统进行维
    护,每天监控数据的质量,解决系统出现的问题。
    (5)如果会离职?
    答:父母年龄比较大了,想离他们近一些。
    问:你还是没有解决这种根本性的问题,例如:还是只能周末或者五一才能回家?
    答:问到这里,我怀疑人事和我有仇。我当时回答的太灵性(这个问题我从人的心理需求来
    说的,真不应该,不管对谁,第一次见面这样说,让人事以为我是一个把握不住事情的
    人)。应该这么说:
    现在距离近了,父母想我的时候可以来北京看我,也是比较近的。
    (6)上家公司如何进去的?是通过校招进去的吗?
    答:通过朋友介绍进去的;
    问:为什么会想着去深圳?
    答:当时也没有考虑那么多,就想着技术的提升;
    问:为什么不留在北京?
    答:因为我那边有朋友,他也是做技术这块的,想着可以互帮互助。
    问:北京也有很多岗位,你投了哪些?
    答:当时这个工作基本定下来了,就没有再看其它的。
    问:为什么没有看其他的,是因为这家公司很符合你的预期吗?
    答:因为这家刚开始做数据,我也是想着从头到尾掌握这一套整体知识架构,形成一套系统
    化的知识。
    问:你是学地质的,平时怎么提升自己?你当初接触是自己看的还是报的培训班?
    答:我是自学的。
    问:你为什么转这个专业?
    答: 大学期间,我们院与计算机院正好挨着,我们住在一个宿舍,经常聊天,我也是比较
    感兴趣,由于就买一些书籍看。
    问:现在学习通过哪些途径?
    答:对工作中使用的技术和项目用到的技术不断总结,看一些帖子,买一些课程之类的。
    问:现在住哪里?
    答:刚过来,住朋友那里。
    问:现在有女朋友吗?
    答:目前没有。
    问:目前的薪水是多少?
    答:将近15k;
    问:将近15k是什么意思?
    答:我们不是有加班嘛,这个月加班多了,多给点;
    问:基本工资是多少?
    答:基本工资9k,乘以13;
    问:那一个月是年终奖吗?
    答:是。
    问:你们的工资什么架构?
    答:基本工资(11.5k)+绩效(3.5k);
    问:你们的五险怎么交?(这一块准备的不太充足,是一大败笔)
    答:
    问:你有什么要了解的吗?
    答:问了薪资待遇,人员培养,工作氛围。
    第十五家

面试题:

  1. 求出每门课程都大于80分的姓名?
    file
    file
    file

  2. 参考网址:https://blog.csdn.net/brycegao321/article/details/78038272
    字段的类型使用varchar,索引使用hash索引即可。
    第19家
    实际面试人员:字节跳动人员
    面试题:
  3. spark计算速度快,除了基于内存,还有哪些特征?
    (1)spark是基于内存进行数据处理的,mapreduce是基于磁盘进行数据处理的;
    MR是中间结果存于文件中,提高了可靠性,减少了内存占用;
    spark中间结果基于内存,可靠性不如mr程序;
    (2)spark中具有DAG有向无环图,DAG有向无环图在此过程中减少了shuffle以及中间磁
    盘落地spark比mr计算快的根本原因在于DAG计算模型,*
版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海牛部落-xug9998,http://hainiubl.com/topics/75210
本帖由 青牛 于 1年前 取消置顶
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter