小红书-引擎架构- java实习-一&二面凉经

五面小红书全挂了嘻嘻😁

一面:

1.自我介绍

算法:反转单链表,递归写法怎么写,acm格式

2.解释下线程和进程的区别

3.static 和 const这两个的含义

4.java的垃圾回收机制

5.反问 感觉像KPI 就没问什么

二面:

1.自我介绍

2.就比如说是个交易系统,比如说我要给谁转账,你不能说失败了,就是我转给他钱,这个事是不能失败的,对吧?嗯,对的,即使失败了也要有这个兜底保障机制的,就我要能够保障这笔操作必然能成功。嗯,那这种我们是可能是什么样一种解决方案?

3.那你比如说现在你第一个任务失败了,第二个任务还失败了,你怎么知道他失败了两次?你怎么知道要重试两次。(说了增加计数器)

4.那我再延伸一下,你这里任务每次执行的参数都不一样,你这些参数放到哪里呢(说了抽象出上下文字段)

5.解答我的问题:这里其实你的想法还是维护一个任务失败的记录表,但是比如说我们扫表的过程中数据库压力满了,不是单单的任务的问题,这个时候你的兜底机制再去扫表,其实又是给他增加了一个性能的损耗,这种情况其实更适合,把一些失败的任务当作一个消息放到消息队列中,去消费这些失败的消息,这种做个解耦我觉得更好一点

6.聊一下这个excel导出的需求

7.你是怎么去发现这个内存溢出的问题的,怎么去定位到对应的代码中?

(这种排查相关的问题核心就是:问题发现-定位-解决)

发现的背景balabal -- 通过MAT去分析dump文件,发现XSSFWorkBook占用了大量内存,然后定位到代码中,发现POI用到了这个WorkBook去把所有的文件全部加载到了内存中,所以数据量大的情况下产生了OOM -- 解决:分批加载、同步转异步balabala

8.cpu飙高的这种问题你觉得可以怎么排查

(这种排查相关的问题核心就是:问题发现(背景)-定位-解决)

(1)定位高CPU占用进程:top命令找到对应的进程ID

(2)根据进程ID找到导致CPU飙高的线程:top -Hp <PID>

(3)将线程ID转化为16进制:printf "%x\n" <TID>

(4)获取线程堆栈信息:jstack <PID> | grep -A 10 <TID> (其实就是找到进程-线程堆栈信息,打印对应的前10行信息)

(5)根因分析(分析堆栈信息)(比如死循环、大量线程上下文切换、死锁、大量FullGC)

(6)代码优化

(7)方案验证

差不多是按照这样答的,但是面试官觉得jstack看不到具体的信息,说可以用火焰图和Arthas去看9.那可以怎么定位到代码中呢,其实可以用火焰图

火焰图可以定位到问题方法

10.阿里开源的阿尔萨斯知道吗

Arthas就高级了,可以debug去打断点,可以看到具体执行逻辑中数据的流动

11.说一个实习过程中对你来说最有技术成长的case

12.怎么去排查fullgc、yunggc的问题,怎么去避免fullgc的问题

如何排查频繁FullGC的问题:

(1)分析/监控GC日志:可以手动看日志,也可以通过一些可视化工具如GCViewer来监控GC情况

(2)JVM参数优化:在分析完日志后,可以适当修改堆内存大小,然后继续监控GC情况

(3)分析dump文件:如果参数优化完成后还是会有问题,说明是代码里面的问题,那这里跟OOM排查就基本上一样了,去分析dump文件看是代码哪里的问题,然后去解决

不一样的点在于,这里要多次dump做对比,最好在GC前跟GC后都做对比,因为如果你在GC后去分析dump,有的大对象已经被回收掉,可能就排查不到问题所在

避免fullgc的问题:

增加堆内存大小、优化对象创建、使用合适的垃圾回收器、对象生命周期管理、监控分析、定时检查内存泄漏

算法:子集

反问:大概介绍了十几分钟的业务情况(以为稳了,热情是你的谎言~ 一周后排序挂)

#面试问题记录#
面筋(烤面筋) 文章被收录于专栏

烤面筋~烤面筋~三元一串,五元两串

全部评论
兄弟们可以给我送点🌹🌹 不 让我做什么都行
1 回复 分享
发布于 08-15 18:27 山东
java有const吗。。
1 回复 分享
发布于 08-15 21:37 广东
uu第二个说的是MySQL持久化重试吗
点赞 回复 分享
发布于 08-18 09:28 广东
这么猛都挂了?好多我感觉我学了这么久都没听过
点赞 回复 分享
发布于 08-18 07:57 北京
没事替你体验了一下,打杂的,跑路了
点赞 回复 分享
发布于 08-17 19:23 北京
为啥问这么多jvm的
点赞 回复 分享
发布于 08-17 15:15 江苏
接好运
点赞 回复 分享
发布于 08-15 19:26 上海

相关推荐

08-22 20:29
已编辑
东北大学 Java
进面试间,就是一句命令“把你摄像头打开”,自我介绍,说一半就被打断了,让我别墨迹,直接讲过往经历15min实习我实习是个小厂,然后他就全程蔑视我,让我讲技术难点,听完了说:“这就是你认为的难点?”“我已经重复这个问题好几次了”“就这个?”“呵呵行吧”20min八股+场景实现一个线程都有哪几种方式?Runnable&nbsp;和&nbsp;Callable的区别,内部的实现原理上有什么不一样?A、&nbsp;B、&nbsp;C&nbsp;三个线程同时启动,三个线程之间的执行顺序是先执行&nbsp;A,再执行&nbsp;B,再执行&nbsp;C,怎么达到这个结果?countdownlatch和cyclicbarrier的区别,内部实现区别Redis里面有1&nbsp;亿个key,里面有&nbsp;10&nbsp;万个&nbsp;key&nbsp;是以某个固定前缀开头的,如何能把它们找出来?数据库里面有&nbsp;2000&nbsp;万的数据,但是Redis&nbsp;中只能存&nbsp;20&nbsp;万的数据,怎么保证&nbsp;Redis&nbsp;中的数据都是热点数据?String&nbsp;s&nbsp;=&nbsp;new&nbsp;String(&quot;abc&quot;),创建了几个对象,都在哪静态代码块+继承+构造方法的输出顺序20min手撕1.&nbsp;sql,查询前一个月下单量最多的三天是哪三天2.&nbsp;保证线程输出顺序算上暑期,大大小小面了几十场面试,这是唯一一次让我真的感到被蔑视、不被尊重的一次,全程被压力闷了,基本没有问题是让我完整答完的,答一半就打断我,我回答完就说“行吧行吧”,我思考的时候,跟我说“不会就说不会,别瞎说,别浪费时间”。手撕写出来了,没有任何反馈,不让我讲思路,问我“你觉得你写的对吗”“你觉得对那就下一道”“行吧行吧”“我知道,我看到了”TMD&nbsp;恶心死我了&nbsp;面试过程我挤都挤不出来笑容更新,二面过了
我的代码出BUG了:这种面试情况有可能是部门压力比较大,故意压力你测试你看看你能够正常应对,面试官写面评的时候应该会夸你。
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
评论
10
64
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务