项目08-15

最痛的领悟:

写算法题之前先确认需求,输入输出是什么,之后举例子,理清思路,并和面试官沟通,最后才动手写;

打手,打手。。。

  1. 最后一道算法题:给定一个字符数组,产生长度为n的所有字符串;
    • 用递归的思想:
    • public static ArrayList<String> makestring(char[] str,int n){
      	ArrayList<String> rst = new ArrayList<String>();
      	if(n == 1){
      		for(int i=0;i<str.length;i++){
      			String tmp = String.valueOf(str[i]);
      			rst.add(tmp);
      		}
      		return rst;
      	}
      	ArrayList<String> tmp = makestring(str,n-1);
      	for(int i=0;i<tmp.size();i++){
      		StringBuilder ss = new StringBuilder(tmp.get(i));
      		for(int j=0;j<str.length;j++){
      			rst.add(ss.append(str[j]).toString());
      			ss.deleteCharAt(ss.length()-1);
      		}
      	}
      		return rst;
      	}
      	
      	
      public static void main(String[] args)  {
      	String a = new String();
      	char[] nums = {'a','b'};
      	//new Test_BST().
      	ArrayList<String> rst = makestring(nums,3);
      	for(int i=0;i<rst.size();i++){
      		System.out.println(rst.get(i));
      	}
      }
  1. Kafka的prodecer生产消息的过程:同步、异步;ACK的设置;Broker List;写文件时:log、index,log到达一定大小log.segment.bytes,会产生新的segment file,批量写磁盘;消费时,查找offset,因为segment按照第一条消息的offset命名,所以可以进行二分查找,先定位到具体的文件,之后通过index定位消息;
  2. consumer和partition的对应关系,项目中offset存在HDFS文件中,消费了一定的消息条数之后同时将消息追加至HDFS文件内,同时更新offset值;若丢失则同时丢失,保证消息只被消费一次;
  3. Flume的source:Thrift、Avro、Spooling Directory Source,我使用过的如下;
    • Thrift:简单了解RPC、具体使用的传输协议等可以深入看一下;http://elf8848.iteye.com/blog/1960131    http://blog.csdn.net/heavendai/article/details/9282967
    • Spooling Directory Source:取某个目录下所有文件内容,可以配置:文件处理完后的后缀名、处理策略优先消费新的or旧的、文件被消费完后是否删除、还可以过滤掉一些文件,不处理;
    • Syslog TCP Source:自己写socket client,发数据;
    • Java中的
  1. java创建线程的方式,线程池的每个参数;
  2. 多线程,超时:Callable、Future接口的深入了解:http://www.cnblogs.com/dolphin0520/p/3949310.html  java的Future和FutureTask
  3. 写代码实现单例模式的多个版本:OK,单例模式好复杂:Java单例模式深入详解
  4. 海量数据问题:两个文件:A:uid、tag   B:uid、record 将A中的tag附加在B表的每条记录之后,前提uid匹配,B文件的数据量很大,A相对较小,有五台机器,可以分布式处理,设计方案:
    • 用hash将A、B划分成小文件:可以保证同一个uid的数据在一台机器上,之后遍历B0,在A0中查找是否存在uid,附加tag;
    • 数据倾斜:某一台机器负载特别大,怎么处理:
    • B中的uid后加一个随机数,eg0-9内的随机数,之后哈希,可以进一步划分该uid对应的记录,那么A中相应的uid如何处理
    • A数据量小,可以在uid后加0-9的每个数字,即A中数据发送10份,给B分发后的每台机器;
    • 也就是改变做哈希的key值;
    • 和一致性哈希的虚拟节点功能类似,虚拟节点映射时在IP后加随机数,增加虚拟节点,让每台机器上负载的key的个数相对均衡,但是不能解决某个key对应的数据量特别大,这样机器和机器之间总的负载数据量不均衡;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值