进入主题之前,开篇先闲谈几句,我是直接投的简历,以为没戏了,这次的面试来得意外,所以心里上是没有准备的,这次疫情对我们的学习、工作和生活都造成了非常大的影响,很多学校延期开学,企业也延期返工,实际上在闭关的这段时间里,我们正好可以好好利用这段时间,为自己之后想要做得事情充分做好准备,也希望疫情赶快过去,我们的生活恢复正常。
当前环境,很多公司都采取了远程办公,远程面试。我想这次疫很多也是初次视频面试吧,有一说一,我也是第一次远程面试,当时还是比较紧张的。
拼多多一面:(远程视频一面)
- 自我介绍一下
- JVM 内存分哪几个区,每个区的作用是什么?JVM有哪些回收算法,对应的收集器有哪些?
- GC 的两种判定方法 ?CMS 收集器与 G1 收集器的特点。
- hashmap源码问题
- HashMap、HashMap如何保证线程安全、ConcurrentHashMap
- HashMap底层结构 put操作讲一下
- GC 的两种判定方法 ?CMS 收集器与 G1 收集器的特点。
- java线程同步都有哪几种方式,在 Java 中 CycliBarriar 和 CountdownLatch 有什么区别?
- cas的原理,变量要用哪个关键字修饰,volatile实现的原理。
- 你在多线程环境中遇到的常见的问题是什么?你是怎么解决它的?
- MYSQL 数据库服务器性能分析的方法命令有哪些?
- 什么是通用 SQL 函数?
- 手撕代码:按层次遍历二叉树?
- Java 配置的方式配置 Spring
- spring中用到了什么, 简述 AOP 和 IOC 概念,aop是怎么实现的?
拼多多二面(远程视频二面)
- 自我介绍&项目
- 项目用 Spring 比较多,有没有了解 Spring 的原理?AOP 和 IOC 的原理
- 分布式锁原理
- CAS 算法,CAS 与 synchronized 的使用情景
- 简洁描述 Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
- 分别解决什么问题?
- dubbo有哪些模块,底层通信的原理?Dubbo 集群的负载均衡有哪些策略?
- 如果让你实现一个https,你会怎么实现?
- 常用的负载均衡,该怎么用,你能说下吗?
- 常见的分布式事务方案有哪些?
- Dubbo 的核心功能?如何从0到1设计一个类似Dubbo的RPC框架?
拼多多三面(远程视频三面)
- 再谈谈一致hash算法(redis)?
- 数据库索引,B+树的特性和建树过程。
- mysql相关的行锁,表锁;乐观锁,悲观锁
- 分布式锁的方案,redis和zookeeper哪个个好,如果是集群部署,高并发情况下哪个性能更好。
- activeMQ 发送消息的方式有哪些?activeMQ 如何调优
- 设计模式与重构,谈谈你对重构的理解
- Collections.sort底层排序方式
- 说说 Redis 哈希槽的概念?Redis 集群如何选择数据库?
- spring cloud的服务注册与发现是怎么设计的?
拼多多四面(远程视频四面)
- 自己参与的项目,技术难度高的有哪些?
- 线上有实际的性能优化经验?
- 从SQL、JVM、架构、数据库四个方面讲讲优化思路,以及如何优先排序?
- redis的持久化方式,redis3.0原生集群和redis读写分离+哨兵机制区别
- Redis 的 list zset 的底层实现
- 如果让你实现一个mq,怎么样保证消息不丢失
- 你熟悉哪些中间件,谈谈你对他们的理解,以及对应的使用场景区别?
- 最后,你有什么想问我的?
远程面试后,我总结了下,问的都不算很难,虽然不是很顺畅,但问题也都一一回答上了,就是通过视频的形式来面试,总感觉有种说不出的感觉。本以为已经凉凉了,谁知道几天后竟然收到通知,竟然过了!心情也是有点无法平静
当然,大厂的面试,是一个系统规范化的流程,除了Spring、Redis、MQ这些必备品外,每一个简历都会有一句你Java基础扎实(有没有被说中),那么,到底怎么样算Java基础扎实?
1、集合,例如 List、Map的原理,HashMap基本必问这个不用我多说
2、并发,例如线程、线程池,锁相关,这些也基本必问
3、JVM,例如垃圾回收器,垃圾回收算法,OOM处理,jvm参数及调优
那么专业技能怎么写?
先问一下你自己会什么,然后看看你意向的公司需要什么。我说的是一般HR可能并不太懂技术,(当然内部人员来面试就不一样了)所以他在筛简历的时候可能就盯着你专业技能的关键词来看。对于公司有要求而你不会的技能,你可以提前花几天时间学习一下,然后在简历上可以写上自己了解这个技能。比如你可以这样写(下面这部分内容摘自我的简历,大家可以根据自己的情况做一些修改和完善):
- 计算机网络、数据结构、算法、操作系统等课内基础知识:掌握
- Java 基础知识:掌握
- JVM 虚拟机(Java内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM内存管理):掌握
- 高并发、高可用、高性能系统开发:掌握
- Struts2、Spring、Hibernate、Ajax、Mybatis、Redis、JQuery :掌握
- SSH 整合、SSM 整合、 SOA 架构:掌握
- Dubbo: 掌握
- Zookeeper: 掌握
- 常见消息队列: 掌握
- Linux:掌握
- MySQL常见优化手段:掌握
- Spring Boot +Spring Cloud +Docker:了解
- Hadoop 生态相关技术中的 HDFS、Storm、MapReduce、Hive、Hbase :了解
- Python 基础、一些常见第三方库比如OpenCV、wxpy、wordcloud、matplotlib:熟悉
上面说的这些,是面试基本的标配了。
首先来说下对于简历的准备。MQ、Redis这两个是标配没跑的了。为啥?你要突出你的核心竞争力,无非围绕高并发、高可用、海量数据这几个点出发。
其次,核心竞争力也体现在分布式解决方案的真实落地实践,但是这些分布式解决方案,也很大程度上依赖 Redis和 MQ。
以下主要分享面经和个人学习方***包括很多PDF文档,如面试题库(含答案+解析)、学习笔记、实战文档和脑图等等,个人可以免费分享,关注后点击传送门即可领取~
由于文章的篇幅有限,所以把这次的面试题答案整理在了PDF文档里
如果简历上只是做的项目不同,但是实质都是简单的CRUD,那么没面试之前,已经给淘汰得差不多了。
通过数十家面试的观察,对于Redis和MQ,考察的方向,其实也是有迹可循的。首先他们的高可用是怎么保证的,原理是怎么样的,几乎必问(不信你可以自己观察)。当然还会根据你的回答往下继续拓展问题,每个人回答得不一样,自然拓展的问题也不一样。
- Java核心知识整理
- Java面试汇总整理
Spring系列(实战)
性能优化(JVM+Tomcat+MySQL)答案解析整理
分布式(限流+缓存+通讯)答案解析整理:
提示自身的软实力(知识和技术)
第二个关键就要自己的自身实力过硬了,无论是你应届生,还是工作好几年,无论是校招还是社招,企业招聘的永远是自身实力过硬的,也就是你的知识储备,你的技术水平要达到要求,而提升自身软实力的唯一办法就是:不断学习。
以下分享一些我个人的学习文档,有需要的朋友自行选择获取:
刷题:
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
感言
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。