虾皮 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 韩国

相关推荐

07-25 11:26
清华大学 Java
打开电脑,思绪又回到了7月份刚开始的时候,感觉这个月过的如梦如幻,发生了太多事,也算是丰富了我本就是平淡的人生吧太早独立的我习惯了一切都是自己做决定,拥有绝对的决定权,而且永远不会听取别人的建议。我就是那个恋爱四年出轨的男主啦,感觉既然在牛客开了这个头,那我就要做个有始有终的人。从我出轨到结束再到和女朋友和好如初真的太像一场梦了,短短的一个月我经历了太多,也成长了很多,放下了那些本就不属于我的,找回了那些我不该放弃的。我的人生丰富且多彩,但人不能一直顺,上天总会让你的生活中出点乱子,有好有坏,让你学会一些东西,让你有成长。我和女朋友的恋爱四年太过于平淡,日常除了会制造一些小浪漫之外,我们的生活...
段哥亡命职场:不得不说,我是理解你的,你能发出来足见你是个坦诚的人,至少敢于直面自己的内心和过往的过错。 这个世界没有想象中那样非黑即白,无论是农村还是城市,在看不见的阴影里,多的是这样的事。 更多的人选择站在制高点去谩骂,一方面是社会的道德是需要制高点的,另一方面,很多人不经他人苦,却劝他人善。 大部分的我们,连自己生命的意义尚且不能明晰,道德、法律、困境,众多因果交织,人会迷失在其中,只有真的走出来之后才能看明白,可是没走出来的时候呢?谁又能保证自己能走的好,走的对呢? 可是这种问题有些人是遇不到的,不去追寻,不去探寻,也就没了这些烦恼,我总说人生的意义在过程里,没了目标也就没了过程。 限于篇幅,没法完全言明,总之,这世界是个巨大的草台班子,没什么过不去了,勇敢面对,革故鼎新才是正确,祝你早日走出来。查看图片
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
13
112
分享

创作者周榜

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