java开发 美团面经

## 一面

String类型是不是基本类型,

Integer类型,Integer与Integer的判等。

hashmap的底层实现。

如何在一个链表中实现排序。如果内部是Integer,String类型的话,Arrays.sort,Collections.sort方法。

对于一个**static变量,他的操作是不是线程安全的。**


```
1、静态变量:线程非安全。

静态变量即类变量,位于方法区,为所有对象共享,共享一份内存,一旦静态变量被修改,其他对象均对修改可见,故线程非安全。

2、实例变量:单例模式(只有一个对象实例存在)线程非安全,非单例线程安全。

实例变量为对象实例私有,在虚拟机的堆中分配,若在系统中只存在一个此对象的实例,在多线程环境下,“犹如”静态变量那样,被某个线程修改后,其他线程对修改均可见,故线程非安全;如果每个线程执行都是在不同的对象中,那对象与对象之间的实例变量的修改将互不影响,故线程安全。

3、局部变量:线程安全。

每个线程执行时将会把局部变量放在各自栈帧的工作内存中,线程间不共享,故不存在线程安全问题。
```

```
静态方法中如果没有使用静态变量,则没有线程安全的问题;
静态方法内的变量,每个线程调用时,都会新创建一份,不会公用一个存储单元,故不存在线程冲突的问题。
```


tcp和udp的区别

http的get和post,**get能不能改变一个值**


```
get 和post都是http协议的一个请求头中的字段,http协议的底层是tcp协议,所以不管是get还是post,底层都是一样的tcp协议,所以post可以做的事情get也可以做,get也可以用来传送数据,改变数据的值。

从协议方面来说,GET 是可以带 body 的,但是不赞成这么做,所以好多工具并没有去提供支持。基本上也不要用 GET 来携带 body 数据。
```


创建线程的方法。直接调用run方法和start()有什么区别。

如何终止一个正在运行的线程。比如如何终止一个死循环打印。使用某个全局变量判断true,false的方法,会不会线程不安全。(说到了stop,interrupt)

ThreadLocal底层实现

**RabbitMQ如何保证可以取到那个数据**。

```
数据库-->主从同步章节
```


项目中是否用到了事务。用的事务隔离级别是什么。

Spring的IOC 的用处。**AOP的使用场景**,除了日志。


```
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging  调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence  持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务

```
==Spring事务==
```
编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中

声明式事务管理也有两种常用的方式,一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解。显然基于注解的方式更简单易用,更清爽

```


**注解的底层实现是什么**
使用java反射机制实现。



设计模式:讲一下策略模式,策略模式的用处是什么。

哪些线程池,线程池的参数。

接口的方法是不是可以实现,抽象类呢?

volatile可见性怎么做的,禁止指令重排序。

Synchronized底层实现,使用的什么锁。是可重入锁吗?可重入锁的概念。

递归方法怎么结束?

**一个递归的方法,内部使用synchronized,是否会出现死锁**,synchronized锁住对象实例和类的区别是什么。

```
synchronized是可重入锁,同一个对象的锁可重入。

synchronized拥有强制原子性的内部锁机制,是一个可重入锁。因此,在一个线程使用synchronized方法时调用该对象另一个synchronized方法,即一个线程得到一个对象锁后再次请求该对象锁,是永远可以拿到锁的。

Spring用过吗?google的小工具用过吗?

@Controller 和@RestController的区别

Spring是单例的吗?如何用多例的?Spring单例的话如何保证线程安全性?(ThreadLocal)

如何实现一个本地缓存(LinkedHashMap),缓存的淘汰策略有哪些?

redis的集群***机制。

JDK1.8的工作流了解吗?

linux,如何查看日志的最后几行?tail,tac。

Spring源码看过吗?

如何学习新知识。(看源码,看博客)

## 二面
问秒杀项目,问异步队列是干什么用的。redis是怎么保证数据一致性的

如果redis预减库存成功,但是数据库减库存失败怎么办?

java JVM是干什么用的。java的内存结构。为什么已加载的类存在方法区中。java的类加载机制(忘了)

java并发,java创建线程的方法。为什么callable可以返回值。

java线程池的参数和拒绝策略。

TCP的滑动窗口。TCP的三次握手四次挥手。

数据库用的哪个?数据库的索引有哪些。索引的底层结构是什么样子的。hash索引为什么不可以范围查找。

写快排。

## 后面不给面了,让转岗,拒绝了
#美团##Java工程师##面经##校招#
全部评论
要转哪个岗位呢
点赞 回复 分享
发布于 2019-10-11 15:17

相关推荐

03-27 17:33
门头沟学院 Java
代码飞升:同学院本,你要注意hr当天有没有回复过,早上投,还要打招呼要推销自己,不要一个劲投
点赞 评论 收藏
分享
咦哟,从去年八月份开始长跑,两处实习转正都失败了,风雨飘摇,终于拿到offer了更新一下面试记录:秋招:多部门反复面试然后挂掉然后复活,具体问了啥已经忘了,只是被反复煎炸,直至焦香😋春招:base北京抖音hr打来电话说再次复活,准备面试,gogogo北京抖音一面:六道笔试题:1.promise顺序2.定义域问题3.flat展开4.并发请求5.岛屿数量算法(力扣)深度,广度都写6.忘记了,好像也是算法,难度中等其他问题多是框架底层设计,实习项目重难点~~~秒过😇北京抖音二面:三道笔试题:(为什么只有三道是因为第三道没做出来,卡住了)1.中等难度算法(忘记啥题了,应该是个数组的)2.认识js的继承本质(手写继承模式,深入js的面相对象开发)3.手写vue的响应式(卡在了watch,导致挂掉)---后知后觉是我的注册副作用函数写得有问题,有点紧张了其他题目多是项目拷打,项目亮点,对实习项目的贡献~~~第二天,挂,but立马复活转战深圳客服当天约面深圳客服一面:六道笔试题,由于面过太多次字节,面试官叫我直接写,不用讲,快些写完😋,具体都是些继承,深拷贝(注意对数组对象分开处理,深层次对象,循环引用),加中等难度算法题~~~秒过深圳客服二面:口诉八股大战:大概囊括网络,浏览器渲染原理,动画优化,时间循环,任务队列等等(你能想到的简单八股通通拉出来鞭尸😋)算法题:笔试题6道:1:找出数组内重复的数,arr[0]-arr[n]内的数大小为[1-n],例如[1,2,2,3,3]返回[2,3],要求o(n),且不使用任何额外空间(做到了o(n),空间方面欠佳,给面试官说进入下一题,做不来了)2:原滋原味的继承(所以继承真滴很重要)3:力扣股票购买时机难度中等其他滴也忘记了,因为拿到offer后鼠鼠一下子就落地了,脑子自动过滤掉可能会攻击鼠鼠的记忆😷~~~秒过深圳客服三面:项目大战参与战斗的人员有:成员1:表单封装及其底层原理,使用成本的优化,声明式表单成员2:公司内部库生命周期管理成员3:第三方库和内部库冲突如何源码断点调试并打补丁解决成员4:埋点的艺术成员5:线上项目捷报频传如何查出内鬼成员6:大文件分片的风流趣事成员7:设计模式对对碰成员8:我构建hooks应对经理的新增的小需求的故事可能项目回答的比较流利,笔试题3道,都很简单,相信大家应该都可以手拿把掐😇~~~过过过无hr面后续煎熬等待几天直接hr打电话发offer了,希望大家也可以拿到自己心仪的offer
法力无边年:牛哇,你真是准备得充分,我对你没有嫉妒,都是实打实付出
查看19道真题和解析
点赞 评论 收藏
分享
评论
1
50
分享

创作者周榜

更多
牛客网
牛客企业服务