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

相关推荐

04-11 00:51
已编辑
门头沟学院 Java
先说一下楼主的情况:双非本大三,两段实习,javaer,想要找一个暑期大厂offer,努力了两个月,三月份每天的状态就是算法,八股,项目,四月份更是一个面试没有,最终还是没有结果,心碎了一地。期间面了一些中小厂,大厂只有腾讯约面,其他大厂都投了一遍,但是还是石沉大海。再看一下楼主的面试结果吧,就不说ttl了腾讯s3:三面挂csig:一面挂teg:三面挂wxg:一面挂没错,面了八次腾讯,两次三面挂,当时真的心都碎了。其他中小厂都有面,有的没过,有的oc,但是都没有去。其他大厂投了简历,但是不是简历挂,就是测评挂,都说今年行情好很多,各大厂都扩招,可是问题出在那里呢?学历背景吗?实习经历吗?还是简历不够好看?依稀记得,从年初七就离开了家里,回到学校,早早准备面试,当时自己认为凭借着自己的两段实习经历,以及大二就开始准备的八股算法,拿大厂offer不是问题,但是还是不敢放松,回校的状态每天就是算法,八股,还有查看各种招聘信息,想着尽早投机会多,但是事实证明,投的早,不如投的刚刚好。当时想着,先投一些中小厂开始面试,找找面试感觉,从2.10就开始有面试了,基本都是线下面试,面试的感觉都很不错,觉得自己的状态慢慢回来了,期间也有oc一些中小厂,但是自己的目标并不在此,只是想练一下手,遂拒。后面投了腾讯的暑期实习基地,不久就约面了,第一次面这么大的厂,多少有点紧张,好在运气还不错,遇到的面试官也比较好,一直干到了三面,期间看牛客有不少说一面就挂了的,感觉自己还是比较幸运的,但是没想到倒在了三面,一周后就挂了,伤心是有的,但是想到这才刚刚开始,还有很多机会,便继续准备下一次面试了,很快,被另外一个部门捞了,一进会议,面试官没开摄像头,看网上说没开摄像头很多都是kpi,但是自己给自己打气,认为面试官只是不方便开摄像头罢了,面完,感觉良好,没问什么很难得问题,基本都答出来了,算法两道也a了一道,感觉实习不会这么严格吧?还是过了一会挂了,因为这个?还是技术不太匹配?面试过程中说搞C++的,心想,搞c++的你面我干啥?唉,这时候有点气馁,然后就接下来半个月没有面试。这时已经是三月底了,看到牛客好多人都已经陆陆续续拿到了offer,看人家的面试准备也没那么早,有0实习的,有没刷算法的,有两个面的,,,唉,反正是一言难尽啊,感觉努力没有什么意义,面试多半是看面试官的感觉,主观性很大啊,只要你技术没有太大的问题。第三次面试腾讯,面试来的比较突然,期间已经有几天没看八股什么的了,临时看了一下之前自己做的面试笔记,但是面试却异常顺利,三天闯到了三面,自己也不敢相信,三面玩感觉也良好,脑子里不得不想着一些“offer结算画面”,但是过了一会查看流程显示“流程终止”,我?哎,当时真的有苦说不出啊,也是一晚没睡。后面就逐渐开始褪去大厂梦了,看着曾经跟自己交流的牛油,朋友,认识的人,觉得他们技术不太如你,算法刷的没你多,进了大厂,但是这又如何呢?能力强不强不是你了说了,面试官说了算。也逐渐知道,不是你能力好就可以了,还得有运气,运气,运气。这个过程太累了,和自己和解吧,不用非得大厂,找个合适一点的就好,放轻松一点。今天有点心事睡不着,闲着想写一些自己的面试过程,勿喷。附上一张面试的情况,公司就不方便透露了。
怒卷的斯科特:八分运气两分实力
点赞 评论 收藏
分享
喜欢喜欢喜欢:这是我见过最长最臭的简历
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
13
111
分享

创作者周榜

更多
牛客网
牛客企业服务