迈入2020年,我们开始了崭新的一年,也要学会跟过去告别。对于2019年我的个人总结,唯有2个字:可惜!实际上,在2019年末之际,我去腾讯面试了一波,却卡在了第三面,主要是关于“锁”方面的面试题没有答得太好,不过并不气馁,今年春节比以往来得早一些,所以做好准备,准备秋招,我也相信自己是没有太大的问题的。
腾讯Java岗面经:3面被挂,全败在了“锁”上
腾讯三面核心面试题:
- 进程和线程有什么区别?进程之间的通信方式有哪些?线程呢?
- 什么是死锁,如何避免死锁,死锁和饥饿有什么关系?可以给我手写一个产生饥饿的情况吗?如何避免死锁,银行家算法知道吗?
- 怎么设置一个key的过期时间?
- redis中的哈希槽你知道吧?
- 那他和一致性哈希有什么区别呢?
- 一致性哈希里的虚拟节点是什么?
- 你用了分布式锁,那分布式锁有哪些实现方式?都有哪些优缺点?
- Synchronized和Lock哪个更好?
- HashMap中的get()方法是如何实现的?
- HashMap可以用在哪些场景?
- JVM,垃圾回收机制,内存划分等
- SQL优化,常用的索引?
- 两个10G的文件,里面是一些url,内存只有1G,如何将这两个文件合并,找到相同的url?
- 1000个多并发线程,10台机器,每台机器4核的,设计线程池大小。
- 代码题:两个有序数组,数组中存在重复数字,合并成一个有序数组,去除重复数字。
- 什么情况会出现雪崩,以及如何应对?
- 负载均衡的原理
- 数据库事务属性
- 与同事沟通的时候,如果遇到冲突了如何解决?
- 工作中觉得哪方面欠缺?
腾讯面试题答案:
面试必备之“锁”集合
01 面试必备之乐观锁和悲观锁
- 说一下什么是乐观锁?什么是悲观锁?
- 简单描述一下悲观锁和乐观锁的使用场景
- 说一下乐观锁常见的实现方式
- 乐观锁有什么缺点吗?
- CAS与Synchronized的使用情景
02 面试必备之分布式锁
- 为什么用分布式锁?
- 基于Redis实现分布式锁(实现原理)
- 基于zookeeper实现分布式锁
- 讲讲分布式锁的实现与应用场景
- 讲一讲分布式锁应该具备的条件
- Redis分布式锁如何续期?
- 为什么用了分布式锁还出现超卖?
03 面试必备之MySQL锁
- MySQL 中有哪几种锁?
- 说一下锁的优化策略
- 什么是锁?说一下基本类型
- 如何加表锁?
- 说一说MyISAM的并发锁
- InnoDB锁
- 说一下行锁的实现
- 什么是死锁?锁等待?如何优化这类问题?通过数据库哪些表可以监控?
04 一个读写锁面试题
- 一个Spring Bean类中有一个服务地址信息的成员变量,这个bean类中成员函数会根据服务地址调用其接口,同时这个服务地址信息可能会在运行时被用户修改,这种情况下是否存在线程安全问题?
- 那有哪些方法解决这个问题?
- 简单讲一下Java读写锁,你会怎么用?
- 你知道Java读写锁实现原理吗?
面试题答案:
制定复习计划,备战春招,二战腾讯,定拿offer
这次面试腾讯没有拿到好的结果,实际上也在我的意料之中,表面是被“锁”给搞晕了,实际上还是自己的知识储备不足,因此准备春招二战,一定要有一个系统性的学习计划,把知识都要复习到位,做到查漏补缺。
(一)Java面试手册
这份Java面试手册,一共整理了350道一线大厂Java岗的核心面试题,基本上各个知识面都包括了,刷完这本面试手册,差不多就能够对大厂喜欢问什么,做到心中有数了。
- 性能优化面试专栏(Tomcat+JVM+Mysql)
- 微服务架构面试专栏(SpringCloud+SpringBoot+Dubbo)
- 并发编程高级面试专栏
- 开源框架面试题专栏(Spring+SpringMVC+MyBatis)
- 分布式面试专栏(分布式限流+分布式通讯+分布式数据库)
(2)阅读学习笔记
关于一些技术知识点,实际上光看书本或面试题是很难加深理解的,所以我们平日可以阅读一些大佬们写的学习笔记。目前,我手上也整理了一些,这里以Redis笔记和SpringBoot笔记为例吧。
- Redis学习笔记:
简单来说redis就是一个数据库不过与传统数据库不同的是redis的数据是存在内存中的所以存写速度非常快,因此redis被广泛应用于缓存方向。另外, redis也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外, redis支持事务、持久化、 LUA脚本、LRU驱动事件、多种集群方案。
这份Redis学习笔记,实际上对学习Redis是很有帮助的,能够帮助你加快对Redis 的理解和应用。
- Spring Boot学习笔记
相信小伙伴们在使用 Spring 或 SpringMVC 的过程中,或多或少会被各种配置问题所牵绊,这些配置不仅徒增工作量,而且在跨平台部署时容易出现问题。
因此,Spring Boot 应运而生,它集成了大量常用的第三方库配置(例如 Jackson、JDBC、MongoDB、Redis、Mail 等等),这些第三方库几乎都可以零配置的开箱即用,可以帮助我们快速搭建一个项目,从而让开发者能够更加专注于业务逻辑。
这份Spring Boot学习笔记,能够让我们快速了解到SpringBoot,从入门到进阶,深入理解。
(3)理清思路,提升信心
无论是学习还是面试,都要在自己脑海中有一个清晰的思路,也就是至少自己有一个知识性的脉络在脑海中,这样也能够提升自己的自信心,应对面试官的种种。
关于思路,我自己也是整理了一个比较清晰的脉络大纲,无论是现在的复习也好,还是日后工作以后不断学习来提升自己,都会按照这个大纲一步一步,当我全部掌握时,相信这个台阶上升的不只一星半点。
- JVM和性能优化为例
写在最后
马上秋招就要来临,实际上春招的竞争力要比秋招大的多,毕竟还有考研考公大军的注入,因此要想在春招中拔得头筹,唯有提升自己的竞争力。祝大家前程似锦~