*100万条数据取topN,手写代码(手写快速排序)
*如何一个很大的文件把你的linux磁盘整崩溃了,怎么去查找这个文件?(这里的崩溃是指占用磁盘过多,什么命令找出这个文件;注意面试官提问问题前的提示)
df -h 通过文件系统来获取空间大小的信息
du -h 通过搜索文件来计算每个文件的大小然后累加得到的值(能在文件系统里面看到的文件才会被du统计)
思路,先df -h,找到是那个磁盘崩溃了,然后cd 切换到该磁盘下,du -sh * 查看各个目录文件所占用大小,即找到该大文件
-h, --human-readable 以可读性较好的方式显示尺寸(例如:1K 234M 2G)
-s, --summarize 只分别计算命令列中每个参数所占的总用量
*kafka中producer、consumer,哪段是线程安全的,哪段是线程不安全的
生产者KafkaProducer是线程安全对象,所以建议KafkaProducer采用单例模式,多个线程共享一个实例
消费者KafkaConsumer是线程不安全,
为什么是KafkaConsumer是线程不安全?
线程与KafkaConsumer对象的对应关系是1:1,一个KafkaConsumer对象始终是由同一个线程来操作的;不然也不会存在消费者组的概念,topic下的每个分区只从属于消费组中的一个消费者,其它消费者是不能再去消费这个分区了。
不能使用ScheduledExecutorService这个线程池来操作KafkaConsumer。因为线程池本来是为了共享而存在的,他在执行任务时,线程与任务的关系是不固定的,而KafkaConsumer要求的是固定的线程
*ES、Hbase数据更新有什么区别
都是存在更新,把旧数据标记为删除,不存在插入,如果一定要说有什么区别,那就是更新的命令不同,原理都很相似。
Hbase更新数据 (Put,Delete,Put,Scan/Get)
put 'ns1:t_userinfo','rk0001','base_info:name','zhaomin'
使用put命令更新现有的单元格值,新给定值替换现有的值,并更新该行。
标记删除,不是真正的删除。
major compact
默认7天执行一次,将多个storefile合并,会将过期的,超出版本数量的、标记为删除的数据都
进行删除(一般要在系统空闲的时候去做,因为需要大量的磁盘IO),一般会设置手动执行
ES更新数据
restful
window(http方式)
linux(curl方式),以此为例; -XPut、-XDelete、-XPut/-Post、-XGet
curl -XPUT 11.11.11.11:30000/test_index/product/1 -d '{"brand_name" : "华为","product_name" : "P9"}'
ES可以使用PUT或者POST对文档进行更新(全部更新),如果指定ID的文档不存在,则执行插入操作,如果已经存在,则执行更新操作。
PUT操作是幂等的,即连续多次执行同一个PUT命令,与只执行一次命令,