2023-04-17移动云苏州研究所java开发面试

这篇文章是记录一次移动苏州研究院java开发岗位的面试经过。

问的问题基本上是大数据相关的或者是java基础的,这应该是和我的过往项目经历相关的。

1、怎么搭建一个大数据平台  

根据我的工作经验以及我平时对大数据平台技术的了解,我讲了一些我对大数据平台的认识。大数据平台底层一般以Hadoop集群做存储,也就是用hdfs,为提高数据计算速度,会引入spark,因为spark是主要在内存中完成计算,所以计算速度会比传统的MapReduce要快得多。然后大数据平台会引入Hive做数据仓库实现离线计算,引入Hbase高可用数据库实现实时数据查询,因为Hive支持通过Sql存储、查询和计算结构化数据,而Hbase是列式内存数据库,架构上对海量数据快速检索天然友好。再往上就是诸如可视化系统、精准营销等数据产品了。

2、怎么做用户画像

用户画像是通过埋点和数据ETL收集用户数据,经过大数据平台存储、计算和分析得到包含一定价值的多维度数据,给用户划分多维度的数据视角并以数据呈现进行可视化,建立标签体系,体现用户群体特性,这就是我理解的用户画像。

3、如何开发一个ETL工具

业界有一些开源的ETL工具,如熟知的Sqoop。一些厂家的大数据平台一般也会自研自己的ETL工具,像星环大数据平台就有可视化提供低代码能力的ETL工具,可以开发数据抽取、清洗和加载任务。我们的数据平台中也自研了一款ETL工具,就是使用Spark技术开发的,从线上抽取数据后在内存中计算再加载进数据仓库,但没有可视化操作的界面,只能通过配置文件的方式管理数据任务。

4、消息队列怎么实现消息顺序消费

   kafka能保证一个分区内的消息是有序的,但这只是中间件层面的。服务端要实现消息顺序消费,需要讲消息hash到指定线程去消费,然后在单个线程内处理顺序,方法可是给每个消息设置递增的一个唯一标识将消息对象存入一个最小堆,记录上一次消费消息的id,判断最小堆堆顶元素消息id是否是下一个递增的id,是的话取出来消费,不是的话说明顺序的下一个消息还没有到服务端,则等待片刻继续从最小堆中获取堆顶元素直到其id是顺序的下一个。

5、讲一下zk的zab协议 

zk的zab协议包括两个阶段,第一个是广播事务预执行,第二个是根据所有参与者的事务预执行结果判断是否有半数以上的成功,如果是则向所有参与者发送提交事务请求,如果不是则发送事务回滚请求

6、paxos的关键流程是什么

paxos是为促成分布式系统数据一致性的一个广为流传的协议,本身协议的内容比较复杂,简单地来说会分为prepare和commit阶段,节点在提出一个proposal之后会向其他节点发出去prepare请求,这个阶段参与者在接收到prepare请求后遵守一些约束,个人理解是为避免事务冲突,之后在判断prepare阶段成功完成后会再广播commit请求,各个参与者此时提交预处理的事务。

7、2PC的流程和缺点是什么

2PC是指prepare(预处理) 提交(或cancle)。  缺点包括:1、协调者单点问题。因为两个阶段都是协调者发起请求,所以一旦协调者挂掉,这个协议过程就不能完成  2、数据一致性问题。在提交阶段,如果在部分参与者发送提交请求之前挂掉了,就会导致一部分参与者无法提交事务,产生数据一致性问题。

8、spark任务内存溢出怎么处理

关于Spark任务内存溢出问题我没有太多的经验,以往都是垂直扩容和调大内存配置(实际还有解决数据倾斜、优化spark配置、优化SparkSql等可以涉及到)。

9、深拷贝和浅拷贝什么区别 怎么实现深拷贝

*(关于Java的问题比较基础)深拷贝是在复制对象同时对对象的属性都进行内存拷贝,也就是要新创建内存。方法是需要对待拷贝的对象进行遍历其所有属性并创建内存实行复制,必要时需要进行递归(比如其属性有树这种结构的)。

10、怎么创建线程池

Java岗位面试常见的面试题之一。使用JDK Api ThreadPoolExecutor创建并指定核心线程数、最大线程 、阻塞队列、抛弃策略。JDK 也有预置的几个线程池可以直接拿来用(不需要一一传参),包括具有单一线程的线程池(newSingleThreadExecutor)、最大线程数和核心线程数相同的线程池(newFixedThreadPool),最大线程数几乎无限制的线程池(newCachedThreadPool),还有支持对线程进行定时或周期调度的线程池(newScheduledThreadPool)等。

 

你可能感兴趣的:(面试,大数据,职场和发展)