当前位置: 首页 > 后端技术 > Java

HeapDump性能社区专题系列之四:后端面试必备题集

时间:2023-04-01 16:24:23 Java

春节结束了,一切都是新的开始。马上就是“金三银四”了。打算跳槽的工程师一定已经开始偷偷努力了!今天多多帮大家整理了一些经典或者刷题的面试题,以及一些难点分析,希望能帮助大家查漏补缺,拿到心仪的offer~1.面试官问我:Whatisrequest高并发下合并?作者:WhyTechnology前段时间,一位在深圳有两年工作经验的小伙伴出去面试了。在收获几大厂商offer的同时,他也总结了面试中遇到的面试题。面试题如下:有很多,文末分享给大家。本文主要分享他在面试中遇到的一个场景题:他说对于这个场景题,他在面试的时候完全没有想法。说真的,请求合并我知道高并发无非就是快速的请求合并。但是在我有限的知识范围内,如果把类似秒杀中高并发扣库存的场景用请求合并的方式来做的话,个人觉得有点怪怪的,不够传统。在传统的,或者说业界普遍使用的秒杀方案中,从前端到后端,你找不到要求合并的话。我理解请求合并比较适用的场景是查询,或者是增值需求。对于库存扣款,一不小心就会出现超卖的情况。当然也有可能是我理解错了题意。看到高并发扣库存,就想到秒杀场景。不过没关系,我们不能直接对面试官强硬。我再举一个我认为合理的场景,把我对请求合并和高并发下请求合并的理解告诉大家。2.面试官:请问什么是时间轮?作者:whytechnology大家好,我是WaiWai。今天我就带你去转动时光轮。这东西其实挺实用的。常见于各种框架中,偶尔会出现在面试中。理解起来有点难,但是知道了原理之后,感觉大部分人一说起时间轮都会从netty说起。我不同,我想从Dubbo入手,毕竟我第一次接触时间轮其实是在Dubbo,当时就被惊艳到了。而且Dubbo的时间轮也是取自Netty的源码,基本一致。3、面试官:说说线程池中的锁。作者:whytechnology最近有位读者告诉我,面试中讨论线程池的时候,我们聊得很好,基本都答对了,但是有一个问题直接把他搞糊涂了。面试官问他:说说线程池中的锁。结果他对线程池的认识其实是在各种博客或者面经上找的。他自己没有看过源码,所以压根没有关注线程池中锁的存在。他还跟我吐槽:他说这话的时候,我也觉得大家讲线程池的时候,都不太讲里面用到的锁。的确,存在感很低。我怎么安排?4、《我想进大厂》的Mysql暗杀系列第13题作者:艾小仙1、能告诉我myisam和innodb的区别吗?2、说下mysql索引,什么是聚簇索引和非聚簇索引?3、你知道什么是覆盖索引和回表吗?4、锁的种类有哪些?5.能否谈谈事务的基本特征和隔离级别?6....5.《我想进大厂》的Redis杀伤链11问作者:艾小仙1.Redis的基本数据类型有哪些?2、Redis为什么快?3、那为什么Redis在6.0之后要转为多线程呢?4.你知道什么是热键吗?如何解决热键问题?5、什么是缓存击穿、缓存穿透、缓存雪崩?6....6.JVM经典面试20题作者:程序员大斌,说说JVM的内存结构?说说栈的区别?什么情况下会发生栈溢出?类文件结构什么是类加载?类加载的过程?...7.面试官:为什么cglib不能代理私有方法?作者:看代码再上班你用过Spring吗?你听说过SpringAOP吗?肯定有!今天讲一下SpringAOP中的代理方法cglib的原理,顺便回答一下为什么cglib不能代理私有方法。8、Java多线程知识CheatSheet(一)作者:朱小四本文主要整理笔者遇到的Java多线程相关知识点,适合速记,故取名《CheatSheet》。本文没有特别的重点。每一项都会对一个多线程的知识做一个总结总结,有的会带一点例子。这些练习很容易理解和记忆。9.据说99.99%的人都会回答错classloading的问题。作者:你傻。首先,我将问题抛给你。这个问题也是我厂同学在做性能分析产品时遇到的问题。同一个类加载器对象是否可以多次加载同一个class文件,得到多个java层可以使用的Class对象?请仔细注意上面描述中的关键词同一个类加载器:表示不是每次new一个类加载器对象,我知道有些对类加载器稍有了解的同学肯定会想到这个。我们这里强调的是加载同一个类加载器对象。同一个类文件:表示类文件中的信息是一致的,没有任何修改,至少名字不能改。因为有些同学会钻空子,比如拿到班级文件改名字,哈哈。多个Class对象:表示每次创建都是一个新的Class对象,返回的不是同一个Class对象。可以被java层使用:表示java层可以感知。可能长期关注我的同学看过我的一些文章,知道我在这里说的是什么。不知道的可以看看我之前的文章文章,这里有一个trick,我就不直接告诉你是哪篇文章了,只是稍微提醒一下,和内存GC相关的。那么在看下面这篇文章之前,我觉得大家可以先思考一个问题,同一个类加载器对象是否可以多次加载同一个class文件,得到多个不同的Class对象(单选)A,不知道B。YesC.No.虽然标题有点党性,但我觉得标题里的99.99%应该不夸张。也许这个百分比应该更大,但请认真回答。不要随意选择。我知道有人会随机选择,哈哈。10、在Java层面调用native方法如何在native库中找到对应的方法?作者:RednaxelaFXQ:在Java代码上调用一个本地方法,比如调用某个对象的getClass()本地方法,那么如何从java层面的调用开始,在本地库中找到如下方法呢?JNIEXPORTjclassJNICALLJava_java_lang_Object_getClass(JNIEnv*env,jobjectthis){if(this==NULL){JNU_ThrowNullPointerException(env,NULL);}返回0;}else{return(*env)->GetObjectClass(env,this);}}这期间发生了什么?如何找到这个本地方法,相关的vm代码在哪里?