开篇:为什么转Java?
先说说个人情况吧,坐标广州,16年从一所普通二本大学毕业,毕业后在一家小公司干android开发,年薪在15w左右。转Java的契机是认识到了一个朋友,做Java后台的,经常跟他聊相关的内容,经过慎重考虑及个人的发展规划,所以就决定转型了。
从安卓转Java,肯定不能是说转就转的,需要耗费大量的时间和精力,所以在工作之余是一定要抽出自己的时间来学习。好在付出终是有回报的,简历上不说敢写精通,熟练是没多大问题的,最终4面拿下了美团offer。
以下主要分享面经和个人学习方法,会包括很多PDF文档,如面试题库(含答案+解析)、学习笔记、实战文档和脑图等等,均可以免费分享,私信口令「美团」即可获取。
美团点评面试场景还原,最真实的面经
美团点评第一面:
- 做一下自我介绍吧,简单说一下你的项目;
- 有遇到过内存泄漏吗?你们是怎么解决的?
- Java的基本类型有哪几个?String是不是java的基本类型?String为什么要是final类型的?
- 反射机制的底层实现是什么?动态呢?动态的实现原理?
- HashMap了解吗?说一下hashmap相关的一些东西?hashmap是线程安全的吗?为什么是线程安全的?
- concureenthashmap了解吗?他是如何实现线程安全的?
- 你刚才说1.8基于cas?cas的ABA问题怎么解决?
- 说一下JVM的线程模型?这些区域都分别是干啥用的?、
- 说一下Java类加载器的工作机制?类加载在哪个域进行的?
- 说一下Java的线程模型?
- violate了解吗?它的原理是什么?violate是线程安全的吗?
- 保证线程安全的解决方法有哪些?说一说读写锁吧,读写锁的读
- 数据库的索引有哪几种?为什么要用B+树来做索引?组合索引和几个单个的索引有什么区别?数据库的大表查询优化了解吗?MVCC机制了解不?MVCC机制有什么问题?怎么去解决这个问题?mysql慢语句调优做过吗?说说你是怎么做的?
- redis了解吗?你说说怎么用redis实现分布式锁?
- spring中Bean的作用域,springMVC的controller是线程安全的吗?怎么去保证线程安全呢?
- 消息队列有用过吗?说说你怎么用的?
- 计算机网络了解吗?说一说TCP三次握手和四次挥手吧
- time_wait状态产生的原因是什么?,有什么危害?可以如何避免?
- 寻找旋转排序数组中的最小值
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
请找出其中最小的元素。
你可以假设数组中不存在重复元素。
示例 1:
输入: [3,4,5,1,2]
输出: 1
示例 2:
输入: [4,5,6,7,0,1,2]
输出: 0
美团点评第二面:
- 首先还是问项目。
- String,StringBuffer,StringBuilder的区别,为什么String是不可变的,StringBuffer和StringBuilder哪个是线程安全的,他们分别适用于什么场景。
- java类加载过程是怎么样的,说一下volatile。
- 并发包了解吗?假如几个线程之间相互等待,可以用哪个并发类来实现,他的原理是什么?
- 数据库慢查询优化了解哪些?
- 说一下spring容器的启动过程?
- 讲一下分布式锁,基于zookeeper实现和redis实现在性能上有什么差异?
- kafka如何保证不丢消息又不会重复消费。了解大数据相关的一些技术吗?
- 最后写了道题:跳跃游戏;
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
示例 1:
输入: [2,3,1,1,4]
输出: true
解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。
示例 2:
输入: [3,2,1,0,4]
输出: false
美团点评第三面:
- 自我介绍
- 项目介绍
- 怎么管理项目成员
- 当意见不一致时,如何沟通并说服开发成员,并举个例子
- 怎么保证项目的进度
- 数据库的索引原理
- 非聚簇索引和聚簇索引
- 索引的使用注意事项
- 联合索引
- 从底层解释最左匹配原则
- Mysql对联合索引有优化么?会自动调整顺序么?哪个版本开始优化?
- Redis的应用
- Redis的持久化的方式和原理
- 技术选型,一个新技术和一个稳定的旧技术,你会怎么选择,选择的考虑有哪些
- 说你印象最深的美团点评技术团队的三篇博客
- 最近在学什么新技术?
- 你是怎么去接触一门新技术的?
- 会看哪些书
- 怎么选择要看的书
- 为什么要转Java?
美团点评第四面:
- 在原公司的哪一段时间是比较享受的?
- 为什么现在出来看机会呢?看什么类型的机会?
- 同事或者朋友之间如何评价你?
- 平时如何学习呢?有没有什么技巧?
- 你对我们的业务方向有了解吗?
- 你的职业规划是什么?
- 你的一些优点有哪些?
- 目前还在看哪些机会呢?手里还有别的Offer吗?
- 转Java之后有遇到哪些困难?怎么解决的?
美团4面面试题完整答案(详细解析版):
篇幅有限,面试题答案和下文的文档资料,私信口令「美团」即可免费领取~
从安卓转到Java,我经历了哪些?如何才敢挑战美团?
(一)清楚自己要什么:调整心态,多给自己勇气,重新规划目标
安卓转Java,这个想法是需要比较大的勇气的,前后我大概是纠结了一年多的时间才做出了决定,期间的心态是比较复杂和焦虑的,最主要的是“担心”,所以要想成功转到Java,首先第一个难关就是自己的心态问题。这个过程中,我不断给自己加油打气,重新规划目标,才得以冷静且稳定下来,重新规划了自己的目标。
(二)清楚自己学什么:重新梳理知识结构,整理知识脉络
做安卓的,都是具备一定的Java基础的,所以相对其他语言来说,转Java要容易不少。但要想成为合格的Java后台开发,具备的技术肯定是远远不够的,因此需要重新去梳理一遍自己的知识结构,整理Java的知识脉络,清楚目前掌握了多少,需要学习哪些内容。
另外,我手上也有一本Java核心知识点的pdf,Java知识点整理得非常齐全,我之所以能够拿下美团offer,也多亏我自己努力把这份文档给吃透。需要我分享的可以私信获取~
Java部分:Java基础,集合,并发,多线程,JVM,设计模式
数据结构算法:Java算法,数据结构
开源框架部分:Spring,MyBatis,MVC,netty,tomcat
分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等
微服务部分:SpringBoot,SpringCloud,Dubbo,Docker
(三)清楚面试问什么:飞速提升,恶补开源,刷题备战
当自己学习到一定程度后,需要的就是准备面试及工作了,所以这一步就需要让自己有一个飞速的提升,要优化自己所学,要清楚Java面试会问一些什么?因此接下来的安排就是要读一些书籍笔记,开始刷题备战面试了。
- 实战系列:Spring全家桶+Redis等
- 其他相关的电子书:源码+调优
- 大厂面试题题库:阿里巴巴、腾讯、美团、字节跳动、网易、拼多多等
写在最后
说了这么多,不善言辞,也是随性发挥,想到啥说些啥,更多是对自己开发历程的一些感受和自己学习的方法。不过,最后我想表达的是,在开发过程中每一行代码,每一种设计模式的使用,思考的重点和角度都会有所不同。所以,能够尝试不同的技术栈,从不同的视角来思考并解决问题,融会贯通,才是我个人追求的技术之“道”。
以上内容中,我谈及到的学习方法、学习面试资料,均可以免费分享给大家,希望大家在今年的金九银十里能够发挥顺利,进到自己想进的公司,共勉!
资料免费获取,转发+评论文章,关注我,私信口令「美团」即可。