今日20210417面试题

今日20210417面试题

日期:2021年4月17日

1、线程与进程的区别?

​ 进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元。
​ 一个程序至少有一个进程,一个进程至少有一个线程。

2、面向对象的特征主要有以下几个方面,分别解释每个特征

​ 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么;

3、java中有几种方法可以实现一个线程?

​ 继承 Thread 类
​ 实现 Runnable 接口
​ 实现 Callable 接口,需要实现的是 call() 方法

4、String s = new String(“xyz”);创建了几个字符串对象?分别存储于什么位置

​ 两个对象,一个是静态区的”xyz”,一个是用new创建在堆上的对象。

5、什么是可重入锁

​ 在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁

6、重载(Overload)和重写(Override)的区别。

​ 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。
​ 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;
​ 重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问

7、简述你对乐观锁和悲观锁的理解

​ 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数 据就会阻塞直到它拿到锁。
​ 乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期 间别人有没有去更新这个数据,可以使用版本号等机制。

8、String 是最基本的数据类型吗?可以写出java中的所有基本数据类型和每个基础类型长度吗?

​ 不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;
​ byte(字节) 1(8位)
​ float(浮点型) 4(32位)
​ shot(短整型) 2(16位)
​ double(双精度) 8(64位)
​ int(整型) 4(32位)
​ char(字符型) 2(16位)
​ long(长整型) 8(64位)
​ boolean(布尔型) 1位

9、什么是ThreadLocal变量?

​ ThreadLocal是Java里一种特殊的变量。每个线程都有一个ThreadLocal就是每个线程都拥有了自己独立的一个变量,竞争条件被 彻底消除了。

10、你如何确保main()方法所在的线程是Java 程序最后结束的线程?

​ 可以使用Thread类的join()方法来确保所有程序创建的线程在main()方法退出前结束。

11、写出线程的几种状态,并且分别写出每个状态之间的区别

​ 新建状态(New):用new语句创建的线程处于新建状态,此时它和其他Java对象一样,仅仅在堆区中被分配了内存。
​ 就绪状态(Runnable):当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态,Java虚拟机会为它创建方法调用栈和程序计数器。处于这个状态的线程位于可运行池中,等待获得CPU的使用权。
​ 运行状态(Running): 处于这个状态的线程占用CPU,执行程序代码。只有处于就绪状态的线程才有机会转到运行状态。
​ 阻塞状态(Blocked): 阻塞状态是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU。直到线程重新进入就绪状态,它才有机会转到运行状态。
​ 死亡状态(Dead): 当线程退出run()方法时,就进入死亡状态,该线程结束生命周期。

12、notify()和notifyAll()有什么区别?

​ 当一个线程进入wait之后,就必须等其他线程notify/notifyall,使用notifyall,可以唤醒所有处于wait状态的线程,使其重新进入锁的 争夺队列中,而notify只能唤醒一个。

如果没把握,建议notifyAll,防止notigy因为信号丢失而造成程序异常。

13、当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法?

​ 如果其他方法没有synchronized的话,其他线程是可以进入的。

​ 所以要开放一个线程安全的对象时,得保证每个方法都是线程安全的。

14、在java中wait和sleep方法的不同?

​ 最大的不同是在等待时wait会释放锁,而sleep一直持有锁。Wait通常被用于线程间交互,sleep通常被用于暂停执行。

15、写出Java 中每个原始类型提供了包装类型

  • 原始类型: boolean,char,byte,short,int,long,float,double
  • 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

16、环境变量path和classpath的作用分别是什么

​ path是配置Windows可执行文件的搜索路径,即扩展名为.exe的程序文件所在的目录.用于指定DOS窗口命令的地址
​ Classpath是配置class文件所在的目录,用于指定类搜索路径,JVM就是通过它来寻找该类的class类文件

17、this和super的区别

​ this : 代表本类对象的引用
​ super : 代表父类的存储空间

18、静态变量和成员变量的区别

​ 调用方式
​ 静态变量也称为类变量,可以直接通过类名调用,也可以通过对象名调用,这个变量属于类
​ 成员变量也称为实例变量,只能通过对象名调用.
​ 存储位置
​ 静态变量存储在方法区中的静态区
​ 成员变量存储在堆内存
​ 局部变量存储在栈内存
​ 生命周期
​ 静态变量随着类的加载而存在,随着类的消失而消失.生命周期长
​ 成员变量随着对象的创建而存在,随着对象的消失而消失
​ 与对象的相关性
​ 静态变量是所有对象共享的数据
​ 成员变量是每个对象所特有的数据

19、接口与抽象类的区别

​ A
​ 抽象类只能被单继承
​ 接口可以多实现,接口的出现避免了多继承的局限性
​ B
​ 抽象类中的数据特点
​ 成员变量:可以是变量,也可以是常量
​ 成员方法:可以是抽象方法,也可以是非抽象方法
​ 构造方法:有构造方法
​ 接口中的数据特点
​ 成员变量:是常量。默认修饰 public static final
​ 成员方法:都是抽象方法。都有默认修饰 public abstract
​ 构造方法:没有构造方法
​ C
​ 抽象类中定义的是继承体系中的共性功能
​ 接口中定义的是继承体系中的扩展功能
​ D
​ 抽象类被继承是"is a"关系:xx是yy的一种
​ 接口被实现是"like a"关系:xx像yy的一种

20、==和equals的用法

​ 如果要比较两个基本类型的数值是否相等,则一定要用““来比较
​ 如果要比较两个引用变量对象的值是否相等,则要用对象的equals()方法进行比较
​ 如果要比较两个引用变量是否指向同一对象,则使用“
”来进行比较
​ 对于自定义的类,应该根据情况重写其父类或Object类中的equals()方法,否则默认的equals()方法功能与“==”相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值