美团二面
写在前面
那什么,uu们别光收藏不点赞,这可是xd一个一个字手敲的!!!!
-------------------------
感谢一面大哥不杀之恩,岑某若能入职必定涌泉相报......
-------------------------
被二面杀了,xdm秋招加油吧
面试
- 开篇经典环节-自我介绍
- 来到了part2,项目经历
- 终于到了我最熟悉的part3,基础知识询问
- 介绍一下 JVM 的内存模型:
- 堆,方法区,虚拟机栈,本地方法区,程序计数器
- 堆:
- 放对象的地方,class对象和new的对象(我的对象在哪里?TAT)
- 方法区:方法区是一个逻辑概念,1.6是永久代实现,1.7是堆和永久代实现,1.8是元空间和堆实现。
- 会存放一些常量池,字符串常量池等,有的池子还会缓存一些基本类型的封装类型的数据,比如Integer就会缓存-128-127的数据,在使用该范围内数据会直接从缓存里面拿而不是new一个新的。
- 这里面对于方法区和堆具体请看图片吧,能理解就理解,理解不了自己再搜一下吧,我懒得改了 略略略
- 虚拟机栈:
- 存储结构栈帧,每一个栈帧就是一个方法的执行
- 局部变量表,内部的计数器,动态链接(面试忘了),返回地址。
- 本地方法区:
- native方法,就是比jvm还底层的c的方法。
- 程序计数器:
- 仿cpu结构的一个东西,用来决定下一个该执行什么代码
- 紧随其后,常见的OOM有哪些:( 总结来讲,只要没有限制直接把JVM虚拟机干爆的,都会抛出OOM异常)
- 虚拟机栈:
- 固定大小:申请不到栈帧报 StackOverflow
- 无限大小:申请不到栈帧报 OutOfMemory
- 堆:忘记是不是能固定大小了
- jvm内存满了,对象分配不到堆了就会报OutOfMemory
- 方法区:(面试官提示,感谢)
- 方法区里面的常量池也是会不断加入数据的
- 一直调用string.intern()方法会不断加字符串到字符串常量池导致OOM
- 反射加载类:(要不是回去看我又忘掉了QAQ)
- final, finalize, finally之间的区别
- final定义的对象,指针无法修改,指向了固定的内存起始位
- finalize:这个可能是垃圾回收那个重生方法吗,我记不住了没答
- finally:try、catch、finally,必定会执行的语句块
- 线程池有哪些参数:可以模拟现实巧记一下的
- 核心线程数
- 最大线程数
- 额外线程存活时间
- 存活时间单位
- 阻塞队列(四种,我记得是,但好像只见过三种)
- 线程工厂(面试忘了woc,写到这才想起来)
- 拒绝策略(四个)
- 线程池使用规范:(这我怎么知道?我只能扯一些我了解的东西了)
- 要用ThreadPoolExcutor创建线程池,不要那三个写好的
- 为什么?
- sigleton和fixed使用的都是无限队列,可能会OOM,拒绝策略也不会生效
- cached没有一直存活的线程,有任务才创建,任务也不会堆积(这个是它用的阻塞队列的特性)
- 除了队列外,还有其他的建议吗?(???这我怎么知道,绞尽了脑汁)
- cpu密集型:N+1
- IO密集型:2*N
- 解释了一下为什么,你们自己搜一下吧,懒得手打了
- 死锁的四个条件:(说实话名词真没记住,倒是破环死锁的三个元素我倒是记得清清楚楚:前进、互斥、有限等待)
- 互斥
- 无法剥夺
- 请求和保持
- 循环等待
- 常用的锁有哪些(顺手问了下项目,之前的锁,当时被整懵了,忘了实现原理了,面完才反应过来项目当时的情况可重入锁解决不了问题)
- JVM的synchronized
- Concurrent里面Lock类下的ReentrantLock
- 提醒了我一下,我项目当时的设计确实是有问题,二次rpc调用的话无法保证路由到同一个机器,jvm层级的锁会有问题的,果然经历面试才会发现问题哈!!!
- 上面的锁谈到了Redis实现分布式锁,那么Redis的持久化都有什么,区别呢
- RDB:瞬时数据快照
- AOF:追加操作命令
- 混合:AOF重写时先RDB,然后把生成RDB时对Redis的操作用AOF的形式追加到文件中,所以叫混合模式
- 一致性hash:
- 我只知道它是个环状hash,新增节点或者节点宕机不用将全部数据都hash一遍,只需要rehash区间数据即可
- (面试官提示,确实学到了)他的主要应用场景是针对于有状态服务新增或下线节点
- 一致性hash的算法了解吗?(???谁会看啊?,有大佬可以在下面贴个链接我有时间过去瞅瞅吗)
- 没了解过,这个真的没法扯了
- 经典缓存三板斧:(相信各位牛油果们都比较熟悉了)
- 缓存穿透
- 缓存击穿
- 缓存雪崩
- 介绍Spring的IOC,还有作用域
- 就是把对象实例化和初始化操作交给容器管理
- 作用域(原来不止两个,面试官提示了一个,但他说一般这两个就够用了)
- singleton
- prototype
- session(一些web相关的作用域)
- AOP:经典问题
- 应用场景:日志等非业务逻辑切面,便于维护和弱耦合
- 实现方式
- jdk的继承接口(我记得是反射执行invoke方法来着)
- cglib的ASM字节码织入(效率更高,调用类文件比反射快)
- AOP的限制:哦对,上述应用场景少了个事务
- 我只能想到事务失效的情况,最常见的,类调用自己内部加了事务注解的方法,由于是原本对象调用而不是代理对象调用,事务根本不会生效
算法
阿巴阿巴
出了一道题,他说我也没做过,我们俩一起看看,然后给我理了一下思路,指出是一个状态变换的题,还把关键点给我指了一下,A了之后问要不要解释一下,他说你刚才思考的时候自言自语已经解释过了就不用了......
写在后面
由于和上一个面试官同部门,一些东西在上一个面试官那问过了,就问了问我还需要学点什么以及接下来的面试流程之类的。面试氛围还不错,说一些场景的时候还把面试官逗笑了hhh
------------------------------------
上面的八股是我个人浅显的理解,希望有大佬可以帮我指正以下,岑某不胜感激,谢谢uu们。^_^~
------------------------------------
好了uu们,泡池子人才库了,唉...有缘再见~~~