好难!腾讯面试体验已结束。。。

还有 1 个月,秋招提前批就准备开始了 ,提前批持续 1 个月后,就正式进入秋招阶段,也就是 8-9 月份开始。

还在校的同学,大家要重视秋招,秋招可以说校招阶段最多企业招聘的时间段,明年春招的话,一般是补录阶段,机会肯定没有秋招的多。

所以不要觉得还有一年才毕业,就觉得时间多,实际上黄金的校招求职阶段就是几个月后的秋招这段时间,大概会持续 12 月份。

那么在这段时间,我还会继续跟大家拆解后端开发的面经,协助大家一起准备面试的过程,以面试题为导向来复习知识点是一种比较高效的方式。

今天来给大家分享一位同学的腾讯后端面经面完就秒挂了 ,一面面试体验一轮游。考察的知识点比较细节,面试官的问法也比较场景化,不是普通的八股文的问法。

大家看看觉得难度如何?

图片

考察的知识点,我帮大家罗列一下:

  • Java:创建对象的方式、反射、序列化和反序列化、垃圾回收算法

  • 网络:I/O多路复用、timewait 状态、网络排查问题

  • 算法:找出图中所有的连通子图

Java创建对象除了new还有别的什么方式?

  • 通过反射创建对象:通过 Java 的反射机制可以在运行时动态地创建对象。可以使用 Class 类的 newInstance() 方法或者通过 Constructor 类来创建对象。

public class MyClass {
    public MyClass() {
        // Constructor
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        Class<?> clazz = MyClass.class;
        MyClass obj = (MyClass) clazz.newInstance();
    }
}
  • 通过反序列化创建对象:通过将对象序列化(保存到文件或网络传输)然后再反序列化(从文件或网络传输中读取对象)的方式来创建对象,对象能被序列化和反序列化的前提是类实现Serializable接口。

import java.io.*;

public class MyClass implements Serializable {
    // Class definition
}

public class Main {
    public static void main(String[] args) throws Exception {
        // Serialize object
        MyClass obj = new MyClass();
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("object.ser"));
        out.writeObject(obj);
        out.close();
        
        // Deserialize object
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("object.ser"));
        MyClass newObj = (MyClass) in.readObject();
        in.close();
    }
}
  • 通过clone创建对象:所有 Java 对象都继承自 Object 类,Object 类中有一个 clone() 方法,可以用来创建对象的副本,要使用 clone 方法,我们必须先实现 Cloneable 接口并实现其定义的 clone 方法。

public class MyClass implements Cloneable {
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {
        MyClass obj1 = new MyClass();
        MyClass obj2 = (MyClass) obj1.clone();
    }
}

反射在你平时写代码或者框架中的应用场景有哪些?

加载数据库驱动

我们的项目底层数据库有时是用mysql,有时用oracle,需要动态地根据实际情况加载驱动类,这个时候反射就有用了,假设 com.mikechen.java.myqlConnection,com.mikechen.java.oracleConnection这两个类我们要用。

这时候我们在使用 JDBC 连接数据库时使用 Class.forName()通过反射加载数据库的驱动程序,如果是mysql则传入mysql的驱动类,而如果是oracle则传入的参数就变成另一个了。

//  DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
Class.forName("com.mysql.cj.jdbc.Driver");

配置文件加载

Spring 框架的 IOC(动态加载管理 Bean),Spring通过配置文件配置各种各样的bean,你需要用到哪些bean就配哪些,spring容器就会根据你的需求去动态加载,你的程序就能健壮地运行。

Spring通过XML配置模式装载Bean的过程:

  • 将程序中所有XML或properties配置文件加载入内存

  • Java类里面解析xml或者properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息

  • 使用反射机制,根据这个字符串获得某个类的Class实例

  • 动态配置实例的属性

配置文件

className=com.example.reflectdemo.TestInvoke
methodName=printlnState

实体类

public class TestInvoke {
    private void printlnState(){
        System.out.println("I am fine");
    }
}
  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值