java面试真题 烽火通信_Java岗面试练习真题:十道你能解答几道?

1、每日一题:索引分类

索普唯复聚非全(普通索引、唯一索引、复合索引(组合索引、联合索引)、聚簇索引、非聚簇索引、全文索引)

主键索引、倒排索引、覆盖索引、哈希索引、B+树、空间数据索引(RTree)

2、每日一题:谈谈JDK1.8下的HashMap在并发情况下链表成环的过程。(挖)(题目中有错误,请指出并回答问题)

jdk1.8下的hashmap采用的是尾插法,不会有链表成环的问题。jdk1.7下采用的头插法,会有链表成环的问题。

hashmap成环原因的代码出现在transfer代码中,也就是扩容之后的数据迁移部分

解释一下transfer的过程:

首先获取新表的长度,之后遍历新表的每一个entry,然后每个ertry中的链表,以反转的形式,形成rehash之后的链表。

并发问题:

若当前线程此时获得ertry节点,但是被线程中断无法继续执行,此时线程二进入transfer函数,并把函数顺利执行,此时新表中的某个位置有了节点,之后线程一获得执行权继续执行,因为并发transfer,所以两者都是扩容的同一个链表,当线程一执行到e.next = new table[i] 的时候,由于线程二之前数据迁移的原因导致此时new table[i] 上就有ertry存在,所以线程一执行的时候,会将next节点,设置为自己,导致自己互相使用next引用对方,因此产生链表,导致死循环。

3、每日一题:假设一个订单的编号规则是AAAAOrder2020-0000001,AAAAOrder2020-0000002....后面的数字是自增长,如果订单号码达到AAAAOrder2020-1000000(100万),数据库中应该有100万条数据,此时我随机删除2条数据(物理删除,且不考虑日志和备份),请问怎么找到删掉的数据的编号?给出解题思路即可,答案需要在1秒内运行得到。(昨天群员面试题)

分批查询:分成500次count(*),每次count(*)肯定小于等于2000条数据,经过测试,一次count(*)在.1ms左右,500次就是500ms。

二分法(时间微超):count(*) 50万,25万,12.5万依次下去。

rownum作差(时间超):rownum和id首个差值,取id。

错位join(时间超):

SELECT C_ID FROM t_vd20190814 WHERE C_ID NOT IN (SELECT C_ID+1 FROM t_vd20190814)

4、每日一题:Object obj = new Object()这句话在内存里占用了多少内存(java顺丰)

5、每日一题:用户每看一次电影有一条记录,一亿用户里看过5次电影以上的人,查找出来

1.redis集群+zset有序集合

2.hadoop

3.kafka

4.flink或者spark streaming

5.mysql:select userid from records group by userid having count(userid)>=5

6.搞一个 100M 的存储,每个字节代表一个用户的观影次数

6、每日一题:设计一个连接池(群员面试题)

参考答案:

有些题目,表面叫你设计一个连接池,背地里想考你连接池的原理。

面试官你好,如果让我设计一个连接池,首先我会设计一个[核心线程数],用来常驻内存中,迅速响应任务进行。再设计一个[最大可扩展线程数]。用来当任务增多的时候最多扩展线程的数量,当达到最大线程数的时候,仍有任务来申请线程,我们需要有一个具体的[拒绝策略]来拒绝这些任务的申请,当任务很少的时候,核心线程数可以应对的时候,我们还需要一个[除核心线程数以外其他线程的保留时间],最好还要有一个[任务队列]。这样可以存放着,我们那些还没处理但是没有线程去处理的任务。甚至我们还可以设计一个[工厂],用于生成线程时指定名字

线程池7大参数:核最生单任线拒

7、每日一题:工作中如何解决MQ消息堆积和消息重复的问题?(群员面试真题)

参考答案:

消息堆积表只能考虑 增多消费者 以及后端其他服务 组件的吞吐能力 别的有办法吗 如果更彻底一点 分撒单个队列里的消息 队列 更分门别类 或者 只是简单物理分散 也都能提高吞吐 但是本质都是增多消费者 运维方法 有靠各种 弹性在消息堆积的情况下自动增加消费者集群实例数量的办法

消息重复 首先要在消息内 加入可以识别的 业务唯一id 然后就是针对该id做的 消费记录 检查 为了防止多消费者间的冲突 还要做2层检查 第一层 宏观的 利用nosql 集群记录相关id 另一层用分布式锁 以防内容重复的消息 同时被2个消费者线程消费 然后者会发现已经有一个前者在处理中

8、每日一题:现在你有个秒杀抢购的app,用户不断大量增加,技术层面,你要怎么做,才能既满足用户需求,又能扛住压力,还能帮公司合理支出?(群员面试题)

限流(杀部分用户祭天)、削锋、缓存、弹性可拓展

9、每日一题:有一家生产奶酪的厂家,每天需要生产100000份奶酪卖给超市,通过一辆送货车发货,送货车辆每次送100份。厂家有一个容量为1000份的冷库,用于奶酪保鲜,生产的奶酪需要先存放在冷库,运输车辆从冷库取货。厂家有三条生产线,分别是牛奶供应生产线,发酵剂制作生产线,奶酪生产线。生产每份奶酪需要2份牛奶和1份发酵剂。请设计生产系统。(群员面试真题)

简要回答仅供参考:三个生产者消费者模式先并联再串联。

针对临时存放牛奶地方:牛奶供应生产线为生产者,奶酪生产线为消费者。

针对临时存放发酵剂的地方:发酵剂制作生产线为生产者,奶酪生产线为消费者。

针对冷库:奶酪生产线为生产者,车为消费者。

10、每日一题:mycat部署数据库集群的时候 遇到了哪些坑(群员面试真题)

使用activity时,连接mycat设置进去的序列化的流程变量,反序列化会报错

4595518dfa0d7ef3fe3b648e589697af.png

这个类型字段类型是blob类型,mycat对这种类型处理时有点问题

更多精彩内容请关注笔者,后续干货更多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值