1.kafka服务端存储会有超过存储范围的情况吗?如果有的话,kafka会以什么机制处理?会不会有丢失数据的情况?
我觉得可能会抛异常或者丢失数据。异常的话,肯定就不能继续接收生产者的数据也会出现问题。
如果是一个正常的服务应该让应用端感知到,而不是直接把数据丢失了,不然系统的鲁棒性太差了。broker端返回异常,写入报错。
2.kafka的内外网隔离监听器不是很理解其中的原理和作用。
很多开放平台都会有这个诉求,像淘宝的开放平台和京东的电商平台,比如京东的商家订单信息 很多都是一些大的电子商务公司。他们都是在自己的系统里操作订单,比如发货了要修改订单状态啥的,然后同步给京东。京东就可以开放一个有外网的topic,给这些有自己研发能力的电子商务公司,把他们的数据同步给京东。嗯,这个云厂商里部署的kafak也会有这个需求,你们公司一部分系统部署在阿里云,一部分在腾讯云也会有这个需求。
3.一个线程发生OOM之后,其他线程还能继续运行嘛?
应该不行吧,会导致父进程直接OOM被kill掉?
还可以,有一个例外就是主线程OOM,子线程又是守护线程。那就会都退出。
线程OOM一般是调用栈OOM,递归死循环了。堆是各个线程公用的。
4.面试被问到设计一个类似微信抢红包的系统,该如何回答?需要考虑哪些点?
如果是限定人数的红包,是不是可以在发红包的时候,就根据算法,把这个分好呢?然后就和库存一样了,假设是10人红包,那么根据算法把这个分为10份,只是每一份金额是不同的.这个其实库存抢占啦,只要保证原子性就行了.
抽奖怎么做的呢
也是一堆奖池,有100的,有5块的。大部分都没有奖,比如key的格式为一个随机值,然后每一个抢 红包的用户,在达到redis的时候,都会计算一个随机值.如果用你的随机值去查询 redis的时候,刚好查到,那么你就有机会抢到这个红包,但是这个时候需要考虑一个场景,那就是,两个用户算成了一个随机值。怎么办?这个时候就需要用lua脚本进行原子化扣减了,扣减完了,可以给value设置一个占位符,表示已经扣减成功啦!用key string结构,好处在哪里?这样就不会出现大key啦,list和zset啥的都会有大key问题,key string结构是可以随着集群分片数量不断增多的,达到水平扩容,这个就是一个比较合理的架构。貌似上次咱们有个问题说,啥是一个合理的架构.最后还剩一个问题,如果redis突然宕机了,咋办?数据一致性怎么保证
5.如何解决缓存和数据库数据不同步问题?
坦白来说…只要有两个副本。即使是mysql的纯主从负责也会有延迟问题.
除非是类似 zk的这种 满足CP协议的存储才行,但是保证不了可用性.还有一种方式,为了提升同步性。会在写接口里写完数据库之后,同步的写入缓存,但是这个也是提升了一定的同步性,绝对解决不了
6.如何将ip地址转换成long类型,哪种方式比较好?
先转二进制,然后再转int,还原int转二进制,然后每次右移8位。
res = a_109+b*106+c_10^3+d
还原
a=res/10^9
b=(res/106)%103
c=(res/103)%103
d=res % 10^3
String ip="125.213.100.123";
String[] ips = ip.split("\\.");
long Ip_Num = 0L;
for (int i=0;i < ips.length;i++){
Ip_Num = Long.valueOf(ips[i]) | Ip_Num << 8;
}
System.out.println(Ip_Num);
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(Ip_Num>>24);
stringBuffer.append(".");
stringBuffer.append((Ip_Num&0xffffff)>>16);
stringBuffer.append(".");
stringBuffer.append((Ip_Num&0x00ffff)>>8);
stringBuffer.append(".");
stringBuffer.append(Ip_Num&0x00ff);
System.out.println(stringBuffer.toString());
7.zk的内存数据会被淘汰吗?
待研究,我猜不淘汰,会持久化到磁盘。
8.在现在的求职面试中,对算法要求到什么程度算是基本合格?可以形象描述一下到什么程度么?要不然没有具体的概念?
我的标准是,只要思路对的,代码没有写完,没有关系
确保思路要对,其他的就要靠练习了