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
相关文章
|
1月前
|
存储 安全 Java
每日大厂面试题大汇总 —— 今日的是“美团-后端开发-一面”
文章汇总了美团后端开发一面的面试题目,内容涉及哈希表、HashMap、二叉树遍历、数据库索引、死锁、事务隔离级别、Java对象相等性、多态、线程池拒绝策略、CAS、设计模式、Spring事务传播机制及RPC序列化工具等。
39 0
|
1月前
|
存储 消息中间件 NoSQL
每日大厂面试题大汇总 —— 今日的是“京东-后端开发-一面”
文章汇总了京东后端开发一面的面试题目,包括ArrayList与LinkedList的区别、HashMap的数据结构和操作、线程安全问题、线程池参数、MySQL存储引擎、Redis性能和线程模型、分布式锁处理、HTTP与HTTPS、Kafka等方面的问题。
85 0
|
3月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
15天前
|
存储 缓存 持续交付
后端世界的微妙平衡:性能与可维护性的博弈###
【10月更文挑战第15天】 在软件开发的浩瀚宇宙里,后端开发犹如一颗星辰,既需璀璨夺目以支撑业务辉煌,又得稳若磐石确保系统长青。本文探讨了后端开发中性能优化与代码可维护性之间的微妙平衡,通过实例分析与策略建议,揭示了如何在追求极致速度的同时,保持代码的清晰、可读与易于迭代,实现技术与艺术的和谐共生。我们相信,正如印度圣雄甘地所言:“你必须成为你希望在世界上看到的改变。”开发者在面对复杂系统挑战时,也应主动寻求变革,探索更高效的解决方案。 ###
31 3
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
349 37
|
2月前
|
JavaScript 前端开发 数据库
优化后端性能:如何使用异步编程提升系统响应速度
异步编程已成为现代后端系统性能优化的重要策略。通过避免阻塞操作,异步编程可以显著提高系统的响应速度和并发处理能力。本文章深入探讨了异步编程的基本概念,比较了常见的异步编程模型,并通过实际案例演示如何在Node.js和Python中实现异步操作,以提升系统性能。
|
1月前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
26 0
|
1月前
|
存储 Java 数据库
每日大厂面试题大汇总 —— 今日的是“顺丰-后端开发-一面”
文章汇总了顺丰后端开发一面的面试题目,涵盖了Java虚拟机内存模型、HashMap与ConcurrentHashMap的区别、Spring框架设计模式、SpringBoot与SpringMVC差异、Nacos注册中心原理、Seata分布式架构、MySQL事务隔离级别、数据库死锁问题解决方法、乐观锁实现方式、HBASE底层设计、BIO与NIO区别、以及为何不使用现有开源框架而选择自建平台等问题。
17 0
|
3月前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
3月前
|
JavaScript 前端开发
深入理解Node.js事件循环及其对后端性能的影响
【8月更文挑战第31天】 本文将带你一探Node.js的核心概念—事件循环,揭示其工作原理及如何影响后端应用的性能。我们将从基础的事件驱动模型出发,通过代码示例和性能分析,展示如何有效利用事件循环来提升应用响应速度和处理能力。