首先是机试题:
根据业务需要,提供过来2个csv文件(客户信息和订单信息),要求对其中数据进行一些列处理
1. 加载数据,并处理其中的空格和空值
2.将其中的日期格式的列转换为标准格式(yyyy-MM-dd)并保存成scv
3.根据客户身份证号码计算客户年龄并筛选出小于18岁的客户数据
4.根据客户性别统计客户数
5.对两个数据进行关联获取订单信息并保存csv
还有几个问题记不清了,在开发中也遇到了几个问题:
1.加载csv中文乱码
-- 需要指定一个字符集,我是用java+spark开发的,所以使用spark.option("encoding","utf8")
2.文件中的手机号和身份证号两个字段格式被自动处理成科学计数了
-- 因为时间比较紧张,我是直接处理csv文件字段格式,代码里应该也可以处理
3.文件列名使用的是中文名,后续的处理最好还是转换了
很遗憾,机试题我没有做出来,所以面试我都不想继续了,不过还是将一些问题记录如下
1. 首先简单自我介绍
这个没什么说的,我就是介绍了自己这么些年做过什么会什么能做什么
2.说说spark和flink区别
-- spark实际是微批操作,flink是流式操作,在执行效率上,flink更高
回答的太简单了,对这个问题虽然有所准备,但临场都答不上来
3.你在项目中怎么使用spark或者sparkstreaming的
--这个我说了说我们项目的技术组件以及我在工作中的角色,我说使用了MR对历史存量数据的清晰以及在清晰过程中遇到的一些问题以及如何去解决的,接着就问了我下面的问题
4. 你能说说MR的结构吗
-- 我就说了map reduce 以及shuffle
hbase rowkey 怎么设置
-- 说了下我们项目里rowkey设置规则
5.你们如何保证数据顺序的
-- 通常对于实时计算,数据来源都是kafka,对于sparkstreaming来说,只要保证kafka分区内数据顺序性,在加上程序内对数据进行优先级排序基本就可以了,对flink来说,根据事件时间,水位线和窗口来做全局的顺序,接着我说了下我自己的sparkstreaming项目如何做的(因为实际项目中按照上面的说法没法保证数据最终的正确性,以及flink在这个场景下的局限性),没说完被其中一位年长的面试官打断了
6.为什么flink不行呢?
--(刚刚要说你给我打断),我们项目的实际情况就是没法做到顺序,甚至kafka分区内的有序都不一定保证(又被打断)
7.kafka怎么保证有序
-- 一般情况下消息的产生顺序是确定的,只要按照数据的产生顺序将同一条数据投递到同一个分区就能保证数据这个局部有序,接着我说我们那个项目里为什么不适合用flink,我们没法保证数据什么时候会全部过来,有可能5分钟,10分钟,1小时甚至1两天(是不是不理解?我又被打断了)
8 spring和springboot什么区别
--我没回答,一是不知道怎么回答,二是,不想回答这种问题
9 .缓存和缓冲什么区别
-- 我也没回答,一样的原因
10.JVM内存模型
-- 没答上来
11.JVM内存调优都调哪些东西
-- 没答上来
12.写一下单例吧
给手写了一个双校验模式的单例(同步关键字代码块内少了if判断条件);
13.为什么要syns?
-- 这个答上来了,倒没什么,就是口误,线程和进程搞反了
14.线程和进程有什么区别
-- 接着上个问题的口误问的,我纠正了
15 lock和syns的区别
-- lock更灵活,syns 可以在方法或者代码块上使用,更简单,但是灵活性较差
还有吗?有,一时记不起来
16.说一说线程池吧,有哪些线程池
-- 单一线程的线程池,限制大小的线程池,不限制大小的线程池(还有1个想不起来了)
线程池参数有哪些
-- 线程池类型,线程数,最大线程数,线程存活时间 (总共7个吧,还有几个想不起来了)
由于没有录音,暂时就记得上面这些问题,2位面试官,一位年长一些(大概40+),一位年轻些(30+),年长的那位问的更理论化,比如 spring和springboot什么区别,缓存和缓冲什么区别,这样问题我在内心深处是很不屑的,年轻的问的更偏向技术,这一块确实是没有回答好,他们基本都没有主动问过我项目相关的问题,所以我感觉我的经验与他们的需求不是那么合,加之我机试题没做出来(太丢脸),我本身也没抱希望,中间也问了我能否接受996和当前薪资,算了吧,不过这个经验还是值得的