面试复盘|运满满(满帮)Java后端22届校招一面二面面经

面试复盘|运满满(满帮集团)Java后端22届校招一面二面面经


面试轮次:技术面一面

方式:视频面试(域名是bsurl)

时间:9月29日14:00

时长:30分钟

开头闲聊

Q:你现在在公司吗?

Q:面试官简单自我介绍

Q:那你先自我介绍一下吧

Q:系统说说公司实习

Q:两端实习哪一个对你来说收获更大?

A:巴拉巴拉随便说……总之:第一段赚钱、开启转Java之路。第二段积累了实际经验。

技术面开始

Q1:Java中面向对象的三大特性

A:封装、继承、多态。(本来想展开说的,结果面试官问了)

Q:多态指什么?

A:它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。

Q2:重载和重写的区别

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。

  • 重写发生在子类与父类之间, 重写方法返回值和形参都不能改变,与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分。
  • 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。

Q3:创建对象的方式

A:常见的通过new方式、反射、clone方式,想了半天,还有字节码技术,算吗?(也算,还有吗?)想不起来了。

java中提供了以下四种创建对象的方式:
1. new创建新对象 调用了构造函数
2. 通过反射机制 调用了构造函数
3. 采用clone机制 没有调用构造函数
4. 通过序列化机制 没有调用构造函数

Q:接口可以多继承吗?

A:

正确答案:接口一般来说压根就不能继承类。

因为接口中只能出现3种成员:
    1. 公共的静态常量(public final static )
    2. 公共的抽象方法(public abstract )
    3. 静态内部类(static class)
而一个类中,就算什么都不写,也必须带一个构造方法,在extends时就会被子类继承,如果是接口也会继承这个构造方法,很明显构造方法不在上面三项之列而如果类中有一般的方法和成员变量,也会被子类全部继承,这些更不能出现在接口中了,所以接口是绝对不可能继承一个类的

Q4:JVM内存结构

A:主要包括方法区、程序计数器、虚拟机栈、本地方法栈、堆5个部分。(然后逐个简单介绍下,见下图和md)

Q:方法区会发生OOM吗?

A:会。(比如一些框架使用的动态字节码技术,会生产大量的类信息,导致方法区的OOM)

Q:还有哪些会发生OOM?

A:主要是堆区。还有栈也会。首先栈会有StackOverflow。

Q:那本质上StackOverflow也是由于内存不够导致的溢出吗?

A:是的。但是除了StackOverflow,栈也可能直接报OOM。(关于OOM,《深入了解Java虚拟机》这本书有一小节专门讨论了)

图片说明

1. 程序计数器:线程私有的,是一块很小的内存空间,作为当前线程的行号指示器,用于记录当前虚拟机正在执行的线程指令地址;
2. 虚拟机栈:线程私有的,每个方法执行的时候都会创建一个栈帧,用于存储局部变量表、操作数、动态链接和方法返回等信息,当线程请求的栈深度超过了虚拟机允许的最大深度时,就会抛出StackOverFlowError;
3. 本地方法栈:线程私有的,保存的是native方法的信息,当一个jvm创建的线程调用native方法后,jvm不会在虚拟机栈中为该线程创建栈帧,而是简单的动态链接并直接调用该方法;
4. 堆:java堆是所有线程共享的一块内存,几乎所有对象的实例和数组都要在堆上分配内存,因此该区域经常发生垃圾回收的操作;
5. 方法区:存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码数据。即永久代,在jdk1.8中不存在方法区了,被元数据区替代了,原方法区被分成两部分;1:加载的类信息,2:运行时常量池;加载的类信息被保存在元数据区中,运行时常量池保存在堆中;

Q:堆区分为哪几个部分?

A:分为:老年代和新生代,新生代又分为:eden区、survivor1区和survivor2区。

Q:新生代各区比例是多少?

A:8:1:1

Q:新生代和老年代的比例是多少?

A:1:2

(中间还有个问题,没记下来,纸上写着各种……,实在想不起来了)

Q5:知道逃逸分析吗?

A:听过。通过逃逸分析可以可以实现栈上分配,学JVM的时候看到过,其他的就不了解了。

Q:逃逸分析是用来解决什么问题?

A:嗯嗯🤔,我想想啊。……不知道😅

对象逃逸: 它并不是一种直接优化代码的手段,而是为其它优化手段提供依据的分析技术(通过此技术可以判定哪些代码可以被优化,如何被优化)。逃逸分析的基本行为就是分析对象动态作用域。一般分为两种方式:方法逃逸和线程逃逸
    1. 方法逃逸:当一个对象在方法中被定义后,它可能被外部方法所引用则称为方法逃逸。例如用该对象作为调用参数传递到其它方法中。
    2. 线程逃逸:当一个对象在方法中被定义后如果能外部线程访问则为线程逃逸。比如将该对象赋值给类变量或可以在其它线程中访问该对象
如果能证明一个对象不会逃逸到方法或线程之外,也就是说别的方法或者线程无法通过任何途径访问这个对象,则可能对这个变量进行一些高效的优化

Q5:java1.8默认的垃圾回收器是什么?

A:这个记不清了。应该是Parallel Scavenge + Parallel Old吧。(后面说了一个错误的理由😅)。

Q6:并发与并行分别是什么意思?

A:并发:一个处理器同时处理多个任务,从宏观上看是同时执行的,微观上看是交替执行;并行:多个处理器或者是多核的处理器同时处理多个不同的任务,是真正的同事执行任务。

Q:那你举个生活中的例子:

A:我现在在面试,嘴在说话,眼睛在看着屏幕,这是同时在做,是并行。而我嘴现在在说话,有些渴了,喝一口水,这个是交替执行,是并发。

Q7:新建一个线程执行是调用start还是run?

A:start。

Q:start和run有什么区别?

A:调用start方法方可启动线程,真正实现了多线程;而run方法只是thread的一个普通方法调用还是在当前线程里执行,并没有增加线程的数量。

Q8:场景题:现在数据库有1亿的数据,在多张表中,如何同步到es(elasticsearch)中?

A:(傻眼了,面试官让随便说说,是开放题,然后说了几句,然后时间到了,面试官说技术面就到这了,下面聊聊其他的)

聊天+反问

Q:说说过往的经历都有哪些收获,可以从生活、学校、实习

A:(主要比较了学校和在公司实习说的,之前被其他公司问到过)

反问:

  1. 我大概什么时候知道面试结果?

A:2-3天。

  1. 我也不知道我说了啥😅

A:我给你点建议吧,(说了我你作为一个应届生,基础知识掌握的情况,具体评价我就不写出来了😁)

另外就是欠缺实战经验,要尝试去大公司,可以锻炼自己,学到很多技术。(我就点头嗯嗯,谢谢)

  1. 可以介绍下部门的业务吗?虽然开头说了下,但是就一句话😄

A:首先说了下公司,公司上市时间、股市、市值等。

公司技术分大前台、中台、技术中间件。所在部门主要业务是物流体系建设,主要负责短途,竞争对手有滴滴、货拉拉。……反正就是很🐂🍺吧,来了能学到技术,然后还说希望以后能在公司见到你。


面试轮次:技术面二面

方式:视频面试(域名是bsurl)、中间用腾讯会议发了一个链接用来写代码

时间:10月12日14:00

时长:30分钟

面试官简单说了二面、面试时长等

首先请你先自我介绍一下

聊聊你做的最成功的一个项目

技术面开始

Q9:设计模式了解哪些?

A:了解一些Spring里面用到的设计模式,比如工厂模式、代理模式等。还有学习Java基础的时候学到的单例模式

Q:单例模式用在什么场景下?

A:什么场景……?Spring里面也有单例,但是Spring里面的单例是一个ApplicationContext创建的对象是唯一的,我们一般理解的单例是JVM中对象的唯一。但是我觉得思想都是一样的。

Q:单例模式有几种?

A:饿汉式,这是线程安全的。还有懒汉式,安全的有DCL,使用volatile和synchronized关键字保证线程安全;还有懒加载也就是静态内部类,因为类只会被加载一次,且使用的时候加载,所以也是懒汉式,而且由JVM保证线程安全。

Q10:编码:尽可能多的写出你所知道的单例模式。(用腾讯视频会议发来一个链接,然后就吭哧吭哧开始写)

  • 饿汉式(最简单)
public class Singleton {
    private Singleton(){}
    private static final Singleton INSTANCE = new Singleton();
    public static Singleton getINSTANC() {
        return INSTANCE;
    }
}
  • DCL(双重检查锁定,volatile和synchronized解决线程安全问题的应用)
//DCL:
class Singleton {
    private volatile Static Singleton instance = null;
    private Singleton(){}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized(Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
  • 静态内部类(也叫懒加载模式,JVM中,类的初始化是懒惰的,首次访问类的静态变量或静态方法时会触发类的初始化)
// 懒加载:
// 1. 类的初始化是懒惰的,首次访问类的静态变量或静态方法时会触发类的初始化
// 2. 虚拟机会保证这个类的构造方法的线程安全
class Singleton {
    private Singleton(){}

    private static class LazyHolder {
        private static final Singleton INSTANCE = new Singleton();        
    }

    public static Singleton getInstance() {
        return LazyHolder.INSTANCE;
    }
}

然后就开始挨个介绍:

Q11:DCL模式为什么synchronized代码块中又进行了一次if判断?

A:因为如果有多个线程同时来竞争锁,比如A,B,当A竞争锁成功,进入创建对象返回后,如果在同步代码块中不仅下if判断,A释放锁之后B获得锁进入代码块又会创建一次对象,就不是单例了。

Q12:类是如何加载的?

A:类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内。

Q:那创建的类对象放在哪里?

A:堆区。

Q13:能详细说说synchronized关键字吗?

1. 常用的有以下三种使用方式:
 - 修饰代码块,即同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象。
 - 修饰普通方法,即同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象。
 - 修饰静态方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象
2. 从编译后的字节码看:同步块的入口和出口分别有monitorenter和monitorexit指令。当执行monitorenter指令时,线程试图获取锁也就是获取monitor(monitor对象存在于每个Java对象的对象头中,synchronized锁便是通过这种方式获取锁的,也是为什么Java中任意对象可以作为锁的原因)的持有权。
3. 深入底层,这里答得不好,有些忘记了。

Q:Java中还提供了其他的锁吗?

A:JUC并发包中的Lock接口,有ReentryLock。

Q:为什么叫ReentryLock?

A:首先Lock是接口,ReentryLock是实现Lock接口的一个类,之所以叫ReentryLock是因为这是一个可重入的锁。

Q:什么叫可重入锁?

A:(这个没答好,以前整理过的)当一个线程得到一个对象锁后,再次请求此对象锁时是可以再次得到该对象锁的。

Q:synchronized是可重入锁吗?

A:是的。

反问阶段:

  1. 多久知道面试结果?
  2. 一共几轮技术面?
  3. 给些评价和建议?(公司说了不能直接正面评价面试者,所以我们也要遵守这规定,希望理解)

讨论&交流

这里汇总下自己当时没get到面试官想问的还有没有答好、不懂的问题:

  1. Java创建对象的方式,被遗漏的八股文。
  2. 关于接口和类,单继承和多实现,接口和类的区别,接口里面可以有什么?Java8前后接口的新变化。
  3. 关于逃逸分析,概念,作用等。
  4. java1.8默认的垃圾回收器是什么?扩展下,各个版本默认的垃圾回收器。
  5. 现在数据库有1亿的数据,在多张表中,如何同步到es(elasticsearch)中?求解:主要是思考方式、用到的哪些知识。平时只会八股文,没啥实战经验,遇到问题也不会分析。
#面试复盘##面经##校招##运满满##Java##秋招##满帮集团#
全部评论
请问HR联系你了吗
1 回复
分享
发布于 2021-10-13 16:30
楼主,请问是你的项目用到了ES,然后面试才问你那个场景题吗?
1 回复
分享
发布于 2021-10-24 20:47
春招专场
校招火热招聘中
官网直投
昨天联系了内推人,他说我也二面淘汰了(本来以为一面就无了,没想到还有二面,结果刚燃起来的希望现在又没了。。),三天了,没声音,楼楼最后收到了感谢信吗?
1 回复
分享
发布于 2022-03-25 21:40
好贴。借楼问下笔试是咋样的啊
点赞 回复
分享
发布于 2021-10-12 18:34
我刚收到二面通过的消息,楼主啥时候拿到的offer啊
点赞 回复
分享
发布于 2021-10-14 10:11
点赞 回复
分享
发布于 2021-10-17 09:15
该没结果吗
点赞 回复
分享
发布于 2021-10-22 20:05
感觉楼主回答的挺好的啊,这都没有后续了吗😥
点赞 回复
分享
发布于 2021-11-01 21:53
楼主是985211的吗,感觉回答的都不错啊
点赞 回复
分享
发布于 2021-11-04 09:51
没后续嘛,好可惜啊;设计模式、锁那一块我都不是很了解。
点赞 回复
分享
发布于 2022-03-10 16:20
阿里闲鱼技术,2023届发实习offer,加微信:jack164059,流程快!
点赞 回复
分享
发布于 2022-03-11 16:17

相关推荐

18 130 评论
分享
牛客网
牛客企业服务