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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: HeapDump性能社区专题系列四:后端面试必备问题集

一元复始,万象更新。春节结束,一切又是新的开始。马上就到“金三银四”了,有跳槽打算的工程师,一定已经开始偷偷努力了吧!今天堆堆帮大家整理了一些或经典或刁钻的面试题,以及一些难点解析,希望能帮大家查漏补缺,拿到心仪的offer~


1.面试官问我:什么是高并发下的请求合并?


作者:why技术


前段时间一个在深圳的,两年经验的小伙伴出去面试了一圈,收割了几个大厂 offer 的同时,还总结了一下面试的过程中遇到的面试题,面试题有很多,文末的时候我会分享给大家。


这次的文章主要分享他面试过程中遇到的一个场景题:

d.png

他说对于这个场景题,面试的时候没有什么思路。


说真的,请求合并我知道,高并发无非就是快速的请求合并。


但是在我有限的认知里面,如果类似于秒杀的高并发扣库存这个场景,用请求合并的方式来做,我个人感觉是有点怪怪的不够传统。


在传统的,或者说是业界常用的秒杀解决方案中,从前端到后台,你也找不到请求合并的字样。


我理解请求合并更加适用的场景是查询类的,或者说是数值增加类的需求,对于库存扣减这种,你稍不留神,就会出现超卖的情况。


当然也有可能是我理解错题意了,看到高并发扣库存就想到秒杀场景了。


但是不重要,我们也不能直接和面试官硬刚。


我会重新给个我觉得合理的场景,告诉大家我理解的请求合并和高并发下的请求合并是什么玩意。


2.面试官:你给我说一下什么是时间轮吧?


作者:why技术


你好呀,我是歪歪。


今天我带大家来卷一下时间轮吧,这个玩意其实还是挺实用的。


常见于各种框架之中,偶现于面试环节,理解起来稍微有点难度,但是知道原理之后也就觉得:


大多数人谈到时间轮的时候都会从 netty 开始聊。


我就不一样了,我想从 Dubbo 里面开始讲,毕竟我第一次接触到时间轮其实是在 Dubbo 里面,当时就惊艳到我了。


而且,Dubbo 的时间轮也是从 Netty 的源码里面拿出来的,基本一模一样。


3.面试官:你给我说一下线程池里面的几把锁。


作者:why技术


最近有个读者给我说,面试聊到线程池的时候,相谈甚欢,基本都回答上来了,但是其中有一个问题直接把他干懵逼了。


面试官问他:你说一下线程池里面的锁吧。


结果他关于线程池的知识点其实都是在各个博客或者面经里面看到的,没有自己去翻阅过源码,也就根本就没有注意过线程池里面还有锁的存在。


他还给我抱怨:

e.png

他这么一说,我也觉得,好像大家聊到线程池的时候,都没有怎么聊到里面用到的锁。

确实是存在感非常低。


要不我就安排一下?


4.《我想进大厂》之mysql夺命连环13问


作者:艾小仙


1.能说下myisam 和 innodb的区别吗?


2.说下mysql的索引有哪些吧,聚簇和非聚簇索引又是什么?


3.那你知道什么是覆盖索引和回表吗?


4.锁的类型有哪些呢?


5.你能说下事务的基本特性和隔离级别吗?


6.……


5.《我想进大厂》之Redis夺命连环11问


作者:艾小仙


1.说说Redis基本数据类型有哪些吧


2.Redis为什么快呢?


3.那为什么Redis6.0之后又改用多线程呢?


4.知道什么是热key吗?热key问题怎么解决?


5.什么是缓存击穿、缓存穿透、缓存雪崩?


6.……


6.JVM经典面试20问


作者:程序员大彬


讲一下JVM的内存结构?


说一下堆栈的区别?


什么情况下会发生栈溢出?


类文件结构


什么是类加载?类加载的过程?


……


7.面试官:cglib为什么不能代理private方法?


作者:看点代码再上班


你用过Spring么?听说过Spring AOP么?肯定都有吧!今天就说一说Spring AOP里面的

一种代理方式cglib的原理,以及顺便回答一下cglib为什么不能代理private方法。


8.Java多线程知识小抄集(一)


作者:朱小厮


本文主要整理笔者遇到的Java多线程的相关知识点,适合速记,故命名为“小抄集”。本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆。


9.据说99.99%的人都会答错的类加载的问题


作者:你假笨


首先还是把问题抛给大家,这个问题也是我厂同学在做一个性能分析产品的时候碰到的一个问题。


同一个类加载器对象是否可以加载同一个类文件多次并且得到多个Class对象而都可以被java层使用吗


请仔细注意上面的描述里几个关键的词


同一个类加载器:意味着不是每次都new一个类加载器对象,我知道有些对类加载器有点理解的同学肯定会想到这点。我们这里强调的是同一个类加载器对象去加载。


同一个类文件:意味着类文件里的信息都一致,不存在修改的情况,至少名字不能改。因

为有些同学会钻空子,比如说拿到类文件然后修改名字啥的,哈哈。


多个Class对象:意味着每次创建都是新的Class对象,并不是返回同一个Class对象。


都可以被java层使用:意味着Java层能感知到,或许对我公众号关注挺久的同学看过我的一些文章,知道我这里说的是什么,不知道的可以翻翻我前面的文章,这里卖个关子,不直接告诉你哪篇文章,稍微提示一下和内存GC有关。


那接下来在看下面文章之前,我觉得你可以先思考一个问题,

同一类加载器对象是否可加载同一类文件多次且得到多个不同的Class对象(单选)

A.不知道 B.可以 C.不可以


虽然有些标题党的意思,不过我觉得标题里的99.99%说得应该不夸张,这个比例或许应该更大,不过还是请认真作答,不要随便选,我知道肯定有人会随便选的,哈哈。


10.Java层面调用native方法是怎么找到本地库中对应方法的?


作者:RednaxelaFX


问:在Java代码上调用了一个本地方法,比如调用某个对象的getClass()本地方法,那么在java层面调用开始到找到本地库中的如下方法?

JNIEXPORT jclass JNICALL  
Java_java_lang_Object_getClass(JNIEnv *env, jobject this)  
{  
    if (this == NULL) {  
        JNU_ThrowNullPointerException(env, NULL);  
        return 0;  
    } else {  
        return (*env)->GetObjectClass(env, this);  
    }  
}

这期间到底发什么了什么?怎么找到这个本地方法的,相关vm代码在哪里呢?

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
21天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
175 37
|
18天前
|
JavaScript 前端开发 数据库
优化后端性能:如何使用异步编程提升系统响应速度
异步编程已成为现代后端系统性能优化的重要策略。通过避免阻塞操作,异步编程可以显著提高系统的响应速度和并发处理能力。本文章深入探讨了异步编程的基本概念,比较了常见的异步编程模型,并通过实际案例演示如何在Node.js和Python中实现异步操作,以提升系统性能。
|
2月前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
2月前
|
JavaScript 前端开发
深入理解Node.js事件循环及其对后端性能的影响
【8月更文挑战第31天】 本文将带你一探Node.js的核心概念—事件循环,揭示其工作原理及如何影响后端应用的性能。我们将从基础的事件驱动模型出发,通过代码示例和性能分析,展示如何有效利用事件循环来提升应用响应速度和处理能力。
|
2月前
|
消息中间件 缓存 Java
如何优化大型Java后端系统的性能:从代码到架构
当面对大型Java后端系统时,性能优化不仅仅是简单地提高代码效率或硬件资源的投入,而是涉及到多层次的技术策略。本篇文章将从代码层面的优化到系统架构的调整,详细探讨如何通过多种方式来提升Java后端系统的性能。通过对常见问题的深入分析和实际案例的分享,我们将探索有效的性能优化策略,帮助开发者构建更高效、更可靠的后端系统。
|
3月前
|
存储 负载均衡 关系型数据库
面试题MySQL问题之通过配置FastDFS提高性能如何解决
面试题MySQL问题之通过配置FastDFS提高性能如何解决
43 1
|
2月前
|
运维 监控 算法
[go 面试] 优化线上故障排查与性能问题的方法
[go 面试] 优化线上故障排查与性能问题的方法
|
3月前
|
缓存 监控 算法
Java面试题:讨论JVM性能调优的常见方法和技巧。
Java面试题:讨论JVM性能调优的常见方法和技巧。
46 1
|
3月前
|
Java
Java面试题:什么是G1垃圾收集器,它如何改善性能?
Java面试题:什么是G1垃圾收集器,它如何改善性能?
34 0
下一篇
无影云桌面