牛客网面试题知识点记录-03

发布时间:2024年01月03日

1.题目讲解重写后子类调用父类的方法总结:当子类重写了父类方法A,父类方法直接调用被重写的父类方法后,调用的是子类的重写的父类方法A。

class Test {
    public static void main(String[] args) {
        System.out.println(new B().getValue());
    }
    static class A {
        protected int value;
        public A (int v) {
            setValue(v);
        }
        public void setValue(int value) {
            this.value= value;
        }
        public int getValue() {
            try {
                value ++;
                return value;
            } finally {
                this.setValue(value);
                System.out.println(value);
            }
        }
    }
    static class B extends A {
        public B () {
            super(5);
            setValue(getValue()- 3);
        }
        public void setValue(int value) {
            super.setValue(2 * value);
        }
    }
}

// 输出的结果是 22 34 17

2.Java一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用2个字节。Java的char类型,通常以UTF-16 Big Endian的方式保存一个字符。实现国际化应用常用的手段是利用ResourceBundle类

3.HashMap允许存在一个键值为null。HashMap的存储顺序是根据Hash值存储的,故无序

4.String类型不属于包装类

5.按位与、或、异或、取反知识点,以及题目讲解公式~n=-n-1

与:& 两个都为1才为1,一个为0就为0
或:| 一个为1才就为1,否则为0
异或:^ 不同就为1,相同则为0
取反:~ 01,10

题目
int i = 5;
int j = 10;
System.out.println(i + ~j); //~j=-11,故5-11等于-6。

6.局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。成员内部类该类像是外部类的一个成员,可以无条件的访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。

7.题目讲解锁的机制

public class Test {
    private synchronized void a() {
    }
    private void b() {
        synchronized (this) {
        }
    }
    private synchronized static void c() {
    }
    private void d() {
        synchronized (Test.class) {
        }
    }
}
// 题目:上述a和b没有static关键字,锁住的是对象;c有static关键字,锁住的是类,和d一样。

8.outputStream输出流包含flush方法

9.强引用(会一直存在于内存中)、软引用(当内存空间不足时,垃圾回收器会回收)、弱引用(不管内存空间是否充足,都要回收)、虚引用(相当于没有引用,任何时候都可以回收)。

10.题目讲解进制转换

以下哪个式子有可能在某个进制下成立()
A.13*14=204
B.12*34=568
C.14*14=140
D.1+1=3

//设为x进制,对于A选项由于 (1*x^1+3*x^0)(1*x^1+4*x^0)=2*x^2+4*x^0解出方程式x的值为8。则A选项可以被表示。

11.Spring提供了AOP,但是spring没有提供AOP的日志系统,日志系统需要自己进行实现。

12.static和final关键字可以一起使用。

13.局部变量在创建方法栈时被初始化HashMap是链地址法解决哈希冲突,ThreadLocal是开放定址法解决哈希冲突。

14.Ant 没有生命周期必须定义目标和目标之间的依赖。你必须手工为每个目标附上一个任务序列。

15.默认的整数数据类型是int,默认的浮点数据类型是double

16.题目讲解c语言和java语言下的char

char chr = 127;
int sum = 200;
chr += 1;
sum += chr;

// c语言中的char类型是一个字节,故范围是-128-127。chr+1超出的了范围127对应的补码是01111111,+1后10000000,为-128,故sum+=chr为200-128等于72

// java语言中char类型是两个字节,127+1则为128,sum输出为328

17.PreparedStatement是CallableStatement的父接口

18.元数据区不属于新生代区

19.代码讲解replaceAll方法

String classFile = "com.jd.". replaceAll(".", "/") + "MyClass.class";
输出 ///MyClass.class,原因在于replaceAll(".", "/")中的'.'表示全部字母

20.final关键字定义的常量一定需要进行初始化,否则会报错。

21.讲解线程的生命周期函数
在这里插入图片描述

22.File类不能读写文件,读写文件是通过字符流和字节类

23.volatile关键字包含的特性为:有序性,可见性

24.Object.wait/notify/notifyAllCondition.await/notify/notifyAll可以实现线程之间的通知和唤醒

25.javac-D 指定编译后类层次的根目录

26.题目讲解变量的正确定义

// 'a'在此刻相当于一个数值
'a' = 1/3

27.局部内部类相当于类的一个变量,不可以使用public/private/default关键字来进行修饰

28.native关键字表名修饰的方法是由其他非java语言进行编写的

29.若存在一个类名为Test,执行java Test one two three 命令是什么意思?java Test是执行命令,one two three 才是传入的字符串。

30.包装类和基本类型直接进行比较时,会自动进行装箱和拆箱(也就是相当于值比较)。

31.三元表达式会自动将类型进行转换,也就是会将精度进行提高

Object o1 = (false)?new Double(1.0):new Double(2);
// 输出的o1为2.0

32.JVM分为三个区域,分别时永久代、年轻代、年老代。永久代时static或者final等常量,年轻代是new出来的对象。

33.栈(线程共享):存储类变量,类对象;方法区(线程共享):存储class文件和静态数据;:存储局部变量、基本类型变量、操作指令。

34.HashSet子类依靠toString()和equals()来判断是否存在重复元素

35.HttpServletResponse不包含获取请求地址方法,请求地址方法仅存在于HttpServletRequest类中

36.对int和Integer进行补充:int和Integer(包含对象)进行比较时,会自动进行装箱和拆箱(==判断的为True)。但是范围仅在-128~127之间。

37.题目讲解static静态块

// 输出 P is init 123,原因在于以下三种情况将不会初始化子类
// 1. 调用的是父类的static方法或者字段
// 2. 调用的是父类的final方法或者字段
// 3. 通过数组来引用

public class P {
    public static int abc = 123;
    static{
        System.out.println("P is init");
    }
}
public class S extends P {
    static{
        System.out.println("S is init");
    }
}
public class Test {
    public static void main(String[] args) {
        System.out.println(S.abc);
    }
}

38.当类对象为空时,也可以调用类中的静态方法

39.对象序列化中,可以使对象进行传输的仅为ObjectOutputStreamObjectInputStream流。

40.事务的传播性(可以根据后缀来参考)
1.required:必须的,没有事务就新建事务
2.support:支持的,没有事务,就用非事务
3.mandatory:强制的,必须要有事务,否则报错
4.required_new:必须要新建事务,老事务将会被挂起重新创建新事物

文章来源:https://blog.csdn.net/weixin_45477146/article/details/135200456
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。