字节你好狠的心💔
投票
字节一面,前面的八股和项目基本都答完了,毕竟前面也面了一些了,可以侃侃而谈了,但是手撕给了我迎头一棒,面完后,我搜了下牛客和小红书,貌似没有原题,我就分享一下吧。题目含义就是integer a=12,integer b=13,然后他的输出写好了,现在需要实现一个swap方法,使得a和b数值交换,然后swap返回值是void,入参是两个integer类型。也怪我没有去看过源码,里面的数值value是用final修饰的,integer是个不可变对象,需要用反射去修改了。我只记得八股里提到过有一个缓存,-128到127的范围的对象缓存。害好可惜,本身下游211本就很难约大厂面了。算法也暑假突击过了,常见算法没有什么问题,最后却死在了反射上。(也是自己笨吧,应该申请换题的,脑子瓦特了)。之后反问的时候,说反射不是一开始学Java的时候就应该了解的吗?说明你基础不扎实(有没有一种可能,因为我没看过integer的源码,所以不知道是不可变值,所以没想到用反射。。。)。总之毫无意外,隔了两天感谢信就发来了,面评应该也很脏,半夜睡不着,想着来牛客发个帖,希望后续秋招顺利吧。#字节跳动# #秋招#
全部评论
感谢分享,老哥秋招加油
考点:Integer 用final修饰 + 缓存机制
代码:
public static void swap(Integer a, Integer b) throws NoSuchFieldException, IllegalAccessException {
Field valueField = Integer.class.getDeclaredField("value");
valueField.setAccessible(true);
// 创建临时存储的基本类型值
int tempA = a;
int tempB = b;
// 直接设置基本类型值
valueField.setInt(a, tempB);
valueField.setInt(b, tempA);
}
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
Integer a = 1;
Integer b = 2;
swap(a, b);
System.out.println(a + " " + b);
}
java8能用反射,java8以上好像会报错,之前试过String暴力反射,java17不让反射获取
相关推荐
查看11道真题和解析