虾皮 Java后端开发一面面经

面试时间一个小时。

  1. Java中的锁机制,什么是可重入锁

  • 主要包括synchronized关键字、Lock接口及其实现类(如ReentrantLock)、原子类(如AtomicInteger)、volatile关键字等。可重入锁是指同一个线程在外层方法获取锁时,再进入该线程的内层方法会自动获取锁,不会因为之前已经获取过还没释放而阻塞。Java中的ReentrantLock和synchronized都是可重入锁。

  1. AQS(AbstractQueuedSynchronizer)

  • AQS是Java并发包中的核心基础组件,用于构建锁或者其他同步组件。它使用一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。

  1. Redis相关数据结构,为什么每种数据类型一般都有两种数据结构

  • Redis的主要数据结构包括String、List、Hash、Set和Sorted Set。每种数据类型一般都有两种数据结构的原因是为了在空间和时间之间取得平衡。

  1. JVM相关内存结构,GC

  • JVM内存结构包括堆(年轻代和老年代)、方法区、程序计数器、虚拟机栈和本地方法栈。垃圾回收算法有标记-清除算法、复制算法、标记-整理算法和分代收集算法。

  1. HashMap底层原理

  • HashMap的底层数据结构是数组+链表+红黑树(JDK 1.8及以后)。主要属性包括存储数据的数组、实际存储的键值对数量、扩容阈值和负载因子。

  1. MySQL索引类型,索引失效,覆盖索引,hash索引

  • MySQL索引类型包括B+树索引(默认)、Hash索引和全文索引。索引失效的情况有使用!=或<>操作符、使用函数或表达式、类型隐式转换、使用OR连接条件、like以%开头、不满足最左前缀原则等。

  1. Spring IOC AOP原理,循环依赖解决

  • IOC的核心是BeanFactory和ApplicationContext,通过反射机制实例化bean并建立bean之间的依赖关系。AOP的核心是ProxyFactory,通过织入切面来实现功能的统一维护。Spring通过三级缓存解决循环依赖。

  1. MyBatis相关,#和$区别

  • {}是预编译处理,会将参数替换为?;${}是字符串替换,直接将参数值拼接到SQL中。#{}可以防止SQL注入,而${}不能防止SQL注入。

  1. 线程池相关,流程,拒绝策略,如何设计线程池最大线程数和核心线程数

  • 线程池执行流程包括创建新线程处理请求、将请求加入队列、创建新线程处理请求、任务被拒绝等。拒绝策略有AbortPolicy、DiscardPolicy、DiscardOldestPolicy和CallerRunsPolicy。设计线程池最大线程数和核心线程数时,CPU密集型任务的线程数为CPU核心数+1,IO密集型任务的线程数为CPU核心数*(1+平均等待时间/平均工作时间)。

  1. HashMap和ConcurrentHashMapHashMap是非线程安全的,允许null键和null值。ConcurrentHashMap是线程安全的,不允许null键和null值,JDK 1.8使用CAS+Synchronized实现。
  2. 红黑树,二叉查找树,红黑树高度差二叉查找树的左子树所有节点的值均小于根节点的值,右子树所有节点的值均大于根节点的值。红黑树的每个节点要么是红色,要么是黑色,根节点是黑色,每个叶子节点是黑色。
  3. MySQL索引MySQL索引类型包括普通索引、唯一索引、主键索引、联合/组合索引和全文索引。B+树索引的特点是所有数据都存储在叶子节点,叶子节点形成一个单向链表,非叶子节点只存储键值信息。
  4. 如何判断链表有环,如何判断树是二叉查找树判断链表是否有环可以使用快慢指针法或哈希表法。判断树是否为二叉搜索树可以使用中序遍历法或递归法。
  5. Redis分布式锁Redis分布式锁的实现原理包括使用SETNX命令设置一个键值对、删除该键值对、设置键的过期时间等。实现细节包括使用Lua脚本保证加锁操作的原子性、使用唯一标识符防止误删其他客户端的锁、考虑Redis主从复制的延迟问题等。
  6. 限流算法限流算法包括计数器算法、滑动窗口、令牌桶算法和漏桶算法。

全部评论
叶子节点是双向链表
3 回复 分享
发布于 2024-08-30 22:56 浙江
佬,有手撕吗
1 回复 分享
发布于 2024-08-31 09:04 山东
up
点赞 回复 分享
发布于 2024-09-01 19:57 上海
点赞 回复 分享
发布于 2024-08-31 18:35 上海
感觉问的好有深度
点赞 回复 分享
发布于 2024-08-30 20:09 湖北
佬是什么时候面的
点赞 回复 分享
发布于 2024-08-30 18:38 广东
佬啥时候面的
点赞 回复 分享
发布于 2024-08-29 23:34 广东
中标题的序号全是1
点赞 回复 分享
发布于 2024-08-29 19:41 韩国

相关推荐

不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下&nbsp;HR&nbsp;会来跟你谈。”&nbsp;我当时脑子直接宕机,一句话都没憋出来。后面&nbsp;HR&nbsp;找我谈话,直属领导也在旁边。HR&nbsp;说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
2025-12-08 07:42
门头沟学院 Java
27届末九,由于是女生,身边人几乎没有就业导向的,自学只能跟着网课,没人指导,很迷茫。下图是我目前的简历,不知道有需要修改的地方吗?求拷打。下面是目前的学习情况:目前算法过完了一遍力扣100和代码随想录,不过不是很熟,面经看了小林coding、JavaGuide,有一些没用过的技术看得不是很明白,掌握得不是很扎实。再加上常年跟黑马网课听思路,真正自己动手写代码的时间很少,这让我一直不敢投简历,总觉得内里空虚。项目没准备好面试相关的问题,简历上相应的考点不熟。如此种种。。。看到很多很多学长学姐大佬们的面经,愈发觉得面试可怕,自己没准备好,总担心自己是不是无望后端开发了。看到牛客很多同届以及更小一届的同学都找到实习了,很希望自己也能找到实习。而自己又好像摸不到后端学习的门路,只能不断赞叹黑马虎哥写的代码真优雅!微服务架构实在巧妙!消息队列、redis、sentinel、nacos、mybatisplus等等的引入都会让我赞叹这些工具的设计者的巧思,以及包括但不限于Java语言的优雅。然而只是停留在了解的程度,并不熟练。我是很希望能够继续深入探索这些知识的,只不过有一大部分时间都花在学校课程上了。我感觉我被困住了,我一方面必须保证我能够有个不错的学业分使我能有我几乎不想选择的读研退路(还有个原因是复习不全我会焦虑考试挂科,因此我会做好全面的准备,而这一步很费时间),一方面在B站学习各种网课,一方面得考虑提升自己并不扎实的算法基础,另一方面还得准备八股面经。这让我有点苦恼,我好像没那么多时间,因为绝大部分时间都花在了复习学校科目中了。我好像处处用时间,但收效甚微。想问问各位大佬是怎么平衡时间的呢?算法、项目和八股是怎么准备的呢?有什么高效的方法吗?谢谢您们花时间阅读我的稿件!
菜菜狗🐶:大胆投,我当时也是害怕面试,投多了发现根本约不到面🤡
点赞 评论 收藏
分享
评论
13
111
分享

创作者周榜

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