1.sleep() 和 wait() 有什么区别?
sleep():是线程类的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其它线程一起竞争cpu的执行时间。
wait():方法是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的锁,使得其他线程能够访问
2.线程的 run()和 start()有什么区别?
start()方法来启动一个线程,真正实现了一个多线程的运行
run()方法是在本线程里的,只是线程里的一个函数,而不是多线程
每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方run()称为线程体,通过调用Thread类的start()方法来启动一个线程
3.如何将字符串反转
①,使用StringBuilder或StringBuffer的reverse方法,本质都调用了他们的父类
②,递归
4.什么是反射,有什么作用?
就是在运行状态中:
获取任意名称,package信息,所有属性,方法,注解,类型。
获取任意对象的属性,并且能改变对象的属性
调用任意对象的方法
判断任意对象所属的类
5,重载和重写有什么区别
①,作用范围:重写的作用范围是父类和子类之间;重写是发生在一个类里面
②,参数列表:重载必须不同,重写不能修改
③,返回类型:重载可修改,重写方法返回相同类型或子类
④,抛出异常:重载可修改,重写一定不能抛出比父类更广的异常
⑤,访问权限:重载可修改,重写一定不能做更为严格的限制
6,简单工厂和抽象工厂有什么区别?
简单工厂模式:是由一个工厂对象创建产品实例,简单工厂模式的工厂类一般是使用静态方法,通过不同的参数创建不同的实例对象实例;可以生产结构中的任意产品,不能增加新的产品
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体类,生产多个系列产品;生产不同产品的全部产品,不能新增产品,可以新增产品族
7.java常见的算法
①,冒泡排序算法
②,选择排序算法
③,插入排序算法
④,快速排序算法
⑤,堆排序:是借助对来实现的选择排序,思想同简单的选择排序
8,throw和throws的区别?
throw:表示方法内抛出某种异常对象
用于程序员自行抛出异常
位于方法体内部,可以作为单独语句使用
throws:方法的定义上使用throws表示这个方法可能抛出某些异常
用于声明该方法内抛出了异常
必须跟在方法内抛出异常
9,什么是动态代理?应用场景?
动态代理:在运行时,创建目标类,可以调用和扩展目标类的方法
应用场景:
①统计每个api的请求耗时
②统一的日志输出
③校验被调用的api是否已经登录和权限鉴定
④Spring的AOP功能模块就是采用动态代理的机制来实现切面编程
10,java跨平台原理
①.java源文件要先编译成与操作系统无关的.class字节码文件,然后字节码文件再通过java虚拟机解释成机器码运行
11,什么是java的垃圾回收机制
java语言不需要程序员直接控制内存回收,由JVM再后台自动回收不再使用的内存