【上岸过程】仅工作2年半就成功上岸拿到京东offer,附上大佬的成功经验希望帮助到大家!

前言

本人某211硕士,工科背景,出身相对一般 ,是技术方向,做JAVA开发的,这是我人生第一次群面,对于群面的流程一无所知。群面前,群面中,群面后都是一脸懵逼的。然后晚上快十点,接到短信和邮件,通知HR面时间,没想到自己居然群面过了。
说实话我直到现在,还是无论如何都想不明白,这位农大老哥疯狂硬怼我的目的和逻辑,可能这就是985的力量吧!
【上岸过程】仅工作2年半就成功上岸拿到京东offer,附上大佬的成功经验希望帮助到大家!_第1张图片
另外我这里为大家准备了一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套大厂面试题(不断更新中),有需要的朋友点击这里备注csdn,自行下载即可希望大家都能找到心仪的工作!
【上岸过程】仅工作2年半就成功上岸拿到京东offer,附上大佬的成功经验希望帮助到大家!_第2张图片

一面

  • 自我介绍
  • 项目介绍

Redis的数据过期策略

  • Redis 中数据过期策略采用定期删除+惰性删除策略:

  • 定期删除策略:Redis 启用一个定时器定时监视所有的 key,判断key是否过期,过期的话就删除。这种策略可以保证过期的 key 最终都会被删除,但是也存在严重的缺点:每次都遍历内存中所有的数据,非常消耗 CPU 资源,并且当 key 已过期,但是定时器还处于未唤起状态,这段时间内 key 仍然可以用。

  • 惰性删除策略:在获取 key 时,先判断 key 是否过期,如果过期则删除。这种方式存在一个缺点:如果这个 key 一直未被使用,那么它一直在内存中,其实它已经过期了,会浪费大量的空间。 这两种策略天然的互补,结合起来之后,定时删除策略就发生了一些改变,不在是每次扫描全部的 key 了,而是随机抽取一部分 key 进行检查,这样就降低了对 CPU 资源的损耗,惰性删除策略互补了为检查到的key,基本上满足了所有要求。 但是有时候就是那么的巧,既没有被定时器抽取到,又没有被使用,这些数据又如何从内存中消失?没关系,

  • 还有内存淘汰机制,当内存不够用时,内存淘汰机制就会上场。淘汰策略分为:

  • 当内存不足以容纳新写入数据时,新写入操作会报错。(Redis 默认策略)

  • 当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 Key。(LRU推荐使用)

  • 当内存不足以容纳新写入数据时,在键空间中,随机移除某个 Key。

  • 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 Key。这种情况一般是把 Redis 既当缓存,又做持久化存储的时候才用。

  • 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 Key。

  • 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 Key 优先移除

Mysql如何保证一致性和持久性?

  • MySQL为了保证ACID中的一致性和持久性,使用了WAL(Write-Ahead Logging,先写日志再写磁盘)。Redo log就是一种WAL的应用。当数据库忽然掉电,再重新启动时,MySQL可以通过Redo log还原数据。也就是说,每次事务提交时,不用同步刷新磁盘数据文件,只需要同步刷新Redo log就足够了。

垃圾回收机制

  • 引用计数法:引用计数法是一种简单但速度很慢的垃圾回收技术。每个对象都含有一个引用计数器,当有引用连接至对象时,引用计数加1。当引用离开作用域或被置为null时,引用计数减1。虽然管理引用计数的开销不大,但这项开销在整个程序生命周期中将持续发生。垃圾回收器会在含有全部对象的列表上遍历,当发现某个对象引用计数为0时,就释放其占用的空间。

  • 可达性分析算法:这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。

Atomic类如何保证原子性(CAS操作)?

  • CAS是英文单词CompareAndSwap的缩写,中文意思是:比较并替换。CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。如 Intel 处理器,比较并交换通过指令的 cmpxchg 系列实现。

二面

  • 自我介绍
  • 项目介绍
  • JVM内存
  • 垃圾回收的算法,分代收集
  • 方法区中哪些可以被回收
  • 类被回收必需要满足的条件
  • 判断一个对象是否死亡?可达性分析一定会被回收吗?覆盖finalize(),原理是什么?(木知)
  • 哪些对象可以作为GC Roots
  • 引用有哪几种,特点
  • JDK 1.8的新特性有什么了解
  • 类加载器和双亲委派
  • 线程池的构造方法和过程
  • 常用的内置线程池方法,特点?
  • AQS-(不会)
  • 原子整型类的原理,
  • volatile 的原理。可见性,禁止指令重排序,new 一个对象的过程?
  • CAS原理,底层实现(不会)
  • HashMap碰撞怎么解决?(拉链法,开放寻址法)
  • HashMap的底层原理,两个版本的put有什么区别,头插和尾插有什么问题
  • 多线程的同步异步问题
  • Spring中的AOP是如何实现的,jdk和CGLIB方法的区别
  • SpirngBoot不用人工去写bean这些事如何实现的
  • Spring中如果想实现多线程并发安全如何处理
  • Spring中事务
  • mysql联合索引使用A>n and B=m和 A=n and B=m的条件去查询会有什么样不同的处理(这个真没看到过,有老哥帮我解答一下吗。。)
  • MyBatis大量频繁访问数据库时使用什么优化机制SPI(从没听过 )

三面

  • 自我介绍
  • 说说你做的项目.

Java中overload override的区别

  • Overload是重载的意思,Override是覆盖的意思,也就是重写。

  • 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中定义的方法,这相当于把父类中的方法给覆盖了,这也是多态性的一种表现。

  • 重载overload的特点就是与返回值无关,只看参数列表,所以重载的方法可以改变返回值类型。所以,如果两个方法的参数列表完全一样,是不能通过让它们的返回值类型不同来实现重载的。

  • override是覆盖一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。

  • overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同类型的输入参数来区分这些方法,然后再调用时,JVM就会根据不同的参数样式,来选择合适的方法执行。

  • 方法的重写和重载是Java多态性的不同表现。重写是父类与子类之间多态性的一种表现,而重载是一个类中多态性的一种表现。

  • Java中abstract类和interface的区别

  • 单例模式的几个创建方式

  • 饿汉式、懒汉式、懒汉式+同步方法、Double-Check、Volatile+Double-Check、 Holder、方式枚举法

线程的创建方式

  • 继承Thread

  • 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。

  • 创建Thread子类的实例,即创建了线程对象。

  • 调用线程对象的start()方法来启动该线程。

实现Runnable接口

  • 定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。

  • 创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

  • 调用线程对象的start()方法来启动该线程。

实现Callable接口

  • 创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。

  • 创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。

  • 使用FutureTask对象作为Thread对象的target创建并启动新线程。

  • 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

  • 新生代和老年代
    (当讲到CMS收集器的时候被打断了)

  • 听说过SPW? 守护线程吗? (一脸懵??? 还望大佬在评论区解释下Java中的SPW,跪谢)

  • JVM在垃圾收集期间其他线程会终止吗?

  • 人生规划以及目的

  • 还学过哪些技术?

  • 创建线程有几种方式

  • 项目中有使用到缓存吗?

  • 为什么要使用缓存

总结

最后我为大家准备了Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。有需要的朋友点击这里备注csdn,自行下载即可,另外提醒一点,充分复习,是消除你紧张的心理状态的关键,但你复习充分了,自然面试过程中就要有底气得多。
【上岸过程】仅工作2年半就成功上岸拿到京东offer,附上大佬的成功经验希望帮助到大家!_第3张图片
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书一起免费分享给大家!

你可能感兴趣的:(java,面试专题,java,spring,redis,面试,jvm)