泰州高端网站建设,北京外贸网站建设公司,wordpress链接伪静态,网络工程师报名1、JDK 和 JRE 有什么区别#xff1f; JDK是Java的开发工具包#xff1b;而JRE是Java的运行环境 其中JDK中包含JRE、JDK中有一个名为jre的目录#xff0c;里面包含两个文件夹bin和lib#xff0c;bin就是JVM#xff0c; lib就是JVM工作所需要的类库
2、 和 equals 的区别是…1、JDK 和 JRE 有什么区别 JDK是Java的开发工具包而JRE是Java的运行环境 其中JDK中包含JRE、JDK中有一个名为jre的目录里面包含两个文件夹bin和libbin就是JVM lib就是JVM工作所需要的类库
2、 和 equals 的区别是什么
对于基础类型比较的是值对于引用类型比较的是地址equals不能用于基本类型的比较如果没有重写equalsequals就相当于如果重写了equals方法equals比较的是对象的内容
3、final 在 java 中有什么作用 用来修饰一个引用 1)、如果引用为基本数据类型则该引用为常量该值无法修改。 2)、如果引用为引用数据类型比如对象、数组、则该对象、数组本身可以修改但指向该对象或数组的地址的引用不能修改 3)、如果引用时类的的成员变量则必须当场赋值否则编译会报错 用来修饰一个方法 使用final修饰方法时这个方法将成为最终方法无法被子类重写但是该方法仍然可以被继承 用来修饰类 使用final修改类时该类成为最终类无法被继承 比如常用的String类就是最终类
4、java 中的 Math.round(-1.5) 等于多少 在Math提供了三个与取整有关的方法cell、floor、round cell向上取整 Math.ceil(2.2) 3; Math.ceil(-2.2) -2; floor:向下取整 Math.floor(2.2) 2; Math.floor(-2.2) -3; round:四舍五入 小数点超过0.5以上如果是正数则会1如果是负数则会-1 Math.round(2.2) 2; Math.round(2.7) 3; Math.round(-2.7) -3; Math.round(-2.2) -2;
5、String 属于基础的数据类型吗 不属于String是包装类型八种基础类型如下byte、short、char、int、long、double、float、boolean
6、String stri与 String strnew String(“i”)一样吗 String str i会将分配到常量池中常量池中没有重复的元素如果常量池中存在i就将i的地址赋给变量如果没有就创建一个再赋给变量。 String str new String(“i”)会将对象分配到堆中即使内存一样还是会重新创建一个新的对象。
7、如何将字符串反转 将对象封装到StringBuilder中调用reverse方法反转
public static void main(String[] args) {String str 123456789;StringBuilder stringBuilder new StringBuilder(str);String ret stringBuilder.reverse().toString();System.out.println(ret);}8、String 类的常用方法都有那些 常见String类的获取功能 length获取字符串长度 charAt(int index):获取指定索引位置的字符 indexOf(String str)返回指定字符在此字符串中第一次出现处的索引 substring(int start)从指定位置开始截取字符串默认到末尾 substring(int start, int end):从指定位置开始截取字符串到指定位置结束截取字符串 常见String类的判断功能 equals(Object obj):比较字符串的内容是否相同区分大小写 contains(String str):判断字符串中是否包含了传递进来的字符串 startsWith(String str):判断字符串是否以传递进来的字符串开头; endsWith(String str):判断字符串是否以传递进来的字符串结尾 isEmpty():判断字符串的内容是否为空串; 常见String类的转换功能 byte[] getBytes():把字符串转换为字节数组 char[] toCharArray():把字符串转换字符数组 String valueOf(char[] chr):把字符数组转换成字符串valueOf可以将任意类型转换为字符串 toLowerCase():把字符串转换为小写 toUpperCase();把字符串转换为大写 concat(String str):把字符串拼接; 常见String类的其他常用功能 replace(char old, char new);将指定字符进行互换 replace(String old,String new);将指定字符串进行互换 trim()去除两端空格 int compareTo(String str):会对照ASCII码表从第一个字母进行减法运算返回的就是这个减法的结果如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果如果这个字符串一模一样返回的就是0
9、new String(“a”) new String(“b”) 会创建几个对象 对象1:new StringBuilder() 对象2:new String(“a”) 对象3:常量池中的a 对象4:new String(“b”) 对象5:常量池中b 深入解析:String Builder中的toString() 对象6:new String(“ab”) toString()的调用在字符串常量池中没有生成ab
10、如何将字符串反转 添加到StringBuilder中调用reverse()进行反转
11、String 类的常用方法都有那些 equals length contains replace split hashCode indexOf valueOf substring trim toUpperCase toLowerCase isEmpty等等
12、普通类和抽象类有哪些区别 抽象类不能被实例化 抽象类可以有抽象方法只需要声明不需要实现 有抽象方法等类一定是抽象类 抽象类的子类必须实现抽象类中的所有的抽象方法否则子类仍然是抽象类 抽象方法不能声明为静态不能被static final修饰
13、接口和抽象类有什么区别 (1) 、接口 接口使用interface修饰 接口不能实例化 类可以实现多个接口 ps:Java8之前接口中的方法都是抽象方法省略了public abstractJava8之后接口中可以定义静态方法静态方法必须有方法提普通方法没有方法体需要被实现 (2)、抽象类抽象类使用abstract修饰抽象类不能实例化抽象类只能单向继承抽象类中可以包含抽象方法和非抽象方法非抽象方法需要有方法体如果一个类继承了抽象方法,如果实现了所有的抽象方法子类可以不是抽象类但是如果没有实现所有的抽象方法子类仍然是抽象类14、java 中 IO 流分为几种 1、按流划分分为输入流和输出流 2、按单位划分分为字符流和字节流。 字节流inputStream、outputStream。 字符流reader、writer
15、BIO、NIO、AIO 有什么区别 1、同步阻塞BIO 一个连接 一个线程在JDK1.4之前建立网络连接的时候采用BIO模式先在启动服务端socket然后再启动客户端socket对服务端通信客户端发送请求后先判断服务端是否有线程响应如果没有则会一直等待或者遭到拒绝请求如果有的话会等待请求结束后才继续执行。 2、同步非阻塞NIO 一个请求 一个线程NIO主要是想解决BIO的大并发问题BIO是每一个请求分配一个线程当请求过多时每个线程占用一定的内存空间服务器就瘫痪了在JDK1.4开始支持NIO适用于连接数目多且连接比较短的框架例如聊天服务器并发局限于应用中 3、异步非阻塞AIO 一个有效请求 一个线程在JDK1.7开始支持AIO适用于连接数目多且连接比较长的框架例如相册服务器充分调用OS参与并发操作
16、Files的常用方法都有哪些 createFile exist createDirectory write read copy size delete move
17、什么是反射 所谓反射是Java在运行时进行自我观察的能力通过class、constructor、filed、method四个方法获取一个类的各个组成部分 在Java运行时环境中对任意一个类可以知道类有哪些属性和方法这种动态获取类的信息以及动态调用对象的方法等功能来自于反射机制
18、什么是 java 序列化什么情况下需要序列化 序列化就是一种用来处理对象流的机制将对象的内容流化将流化后的对象传输于网络之间。 序列化是通过实现serializable接口该接口没有需要实现的方法implement Serializable只是为流标注该对象是可被序列化的使用一个输出流(FileOutputStream)来构造一个ObjectOutputStream对象接着使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数的obj对象到磁盘需要恢复的时候使用输入流 序列化是将对象转换为容易传输的格式的过程 例如可以序列化一个对象然后通过HTTP、通过internet在客户端和服务端之间传输该对象在另一端反序列化将从流中心构造成对象 一般程序在运行时产生对象这些对象随着程序的停止而消失但我们想将某些对象保存下来这是将可以通过序列化将对象保存在磁盘需要使用的时候通过反序列化获取到 对象序列化的主要目的就是传递和保存对象保存对象的完整性和可传递性
19、为什么要使用克隆如何实现对象克隆深拷贝和浅拷贝区别是什么 1、什么时候克隆 想对一个对象进行复制又想保留原有的对象进行接下里的操作这个时候将需要克隆。 2、如何实现克隆 实现Cloneable接口重写clone方法 实现Serializable接口通过对象的序列化和反序列化实现克隆可以真正的深克隆 BeanUtils、apache和Spring提供的bean工具只是这些都是浅克隆 3、深拷贝和浅拷贝区别是什么 浅拷贝仅仅克隆基本类型变量不克隆引用类型变量 深拷贝既克隆基本类型变量也克隆引用类型变量
20、throw 和 throws 的区别 1、throw 作用在方法内表示抛出具体异常由方法体内的语句处理一定抛出了异常 2、throws 作用在方法的声明上表示抛出异常由调用者来进行异常处理可能出现异常不一定会发生异常
21、final、finally、finalize 有什么区别 1、final可以修饰类、变量、方法修饰的类不能被继承修饰的变量不能重新赋值修饰的方法不能被重写 2、finally用于抛异常finally代码块内语句无论是否发生异常都会在执行finally常用于一些流的关闭 3、finalize方法用于垃圾回收 一般情况下不需要我们实现finailze当对象被回收的时候需要释放一些资源比如socket链接在对象初始化时创建整个生命周期内有效那么需要实现finalize方法关闭这个链接但是当调用finalize方法后并不意味着gc会立即回收该对象所以有可能真正中调用的时候对象又不需要回收了然后到了真正回收时候因为之前调用了一次这次又不会调用了产生问题所以不推荐使用finalize方法
22、try-catch-finally 中如果 catch 中 return 了finally 还会执行吗 会执行finally方法
23、常见的异常类有哪些 1、NullPointerException:空指针异常 2、SQLException:数据库相关异常 3、IndexOutOfBoundsException打开文件失败时抛出 4、FileNotFoundException打开文件失败时抛出 5、IOException当发生某种IO异常时抛出 6、ClassCastException当试图将对象强制转换为不是实例的子类时抛出此异常 7、NoSuchMethodException无法找到某一方法时抛出 8、ArrayStoreException试图将错误类型的对象存储到一个对象数组时抛出异常 9、NumberFormatException当试图将字符串转换成数字时失败抛出此异常 10、IllegalArgumentException:抛出的异常表明向方法传递了一个不合法或不正确的参数 11、ArithmeticException当出现异常的运算条件时抛出此异常。
24、hashcode是什么有什么作用 Java中Object有一个方法 public native int hashcode(); (1)、hashcode()方法的使用 主要配合基于散列的集合一起使用比如HashSet、HashMap、HashTable 当集合需要添加新的对象时先调用这个对象的hashcode()方法得到对应的hashcode值实际上hashmap中会有一个table保存已经存进去的对象的hashcode值如果table中没有改hashcode值则直接存入如果有将调用equals方法与新元素进行比较相同就不存入不同就存入。 (2)、equals和hashcode的关系 如果equals为true hashcode 一定相等; 如果equals为falsehashcode不一定不相等; 如果hasecode值相等equals不一定相等 如果hasecode值不相等equals一定不相等 (3)、重写equals方法时候一定要重写hashcode方法 (4)、hashcode方法返回该对象的哈希码值支持该方法是为哈希表提供一些优点
25、java 中操作字符串都有哪些类它们之间有什么区别 (1)、String 是不可变对象每次对String类型的改变时都会生成一个新的对象 (2)、StringBuilder 线程不安全效率高多用于单线程 (3)、StringBuffer 线程安全由于加锁的原因效率不如StringBuilder多用于多线程 StingBuilder StringBuffer String
26、java 中都有哪些引用类型 (1)、强引用 Java中默认声明的就是强引用只要强引用存在GC将永远不会回收被引用的对象如果想被回收可以将对象置为null (2)、软引用 在内存足够的时候软引用不会被回收只有在内存不足时系统才会回收软引用对象如果回收了软引用对象之后仍然没有足够的内存才会抛出内存溢出异常 (3)、弱引用 进行GC时弱引用就会被回收 (4)、虚引用 (5)、引用队列 引用队列可以与软引用、弱引用、虚引用一起配合使用当GC准备回收一个对象时如果发现它还有引用就会在回收对象之前把这个引用加入到引用队列中程序可以通过判断引用队列中是否加入了引用来判断被引用的对象是否将要被GC回收这样可以在对象被回收之前采取一些必要的措施
27、在 Java 中为什么不允许从静态方法中访问非静态变量 1、静态变量属于类本身在类加载的时候就会分配内存可以通过类名直接访问 2、非静态变量属于类的对象只有在类的对象产生时才会分配内存通过类的实例强访问 3、静态方法也属于类本身但是此时没有类的实例内存中没有非静态变量所以无法调用
28、并发编程 1、原子性是指一个或者多个操作要么全部执行并且在执行过程中不被其他操作打断要么就是全部都不执行 2、可见性是指多个线程操作一个共享变量时其中一个线程对变量进行修改后其他线程可以立即看到修改的结果 3、有序性是指程序的执行顺序按照代码的先后顺序来执行
29、实现可见性有哪些方法 synchronized或lock在保证同一时刻只有一个线程获取锁来执行代码锁释放之前把最新的值刷新到主内存。
30、创建线程有哪些方式 1、通过Runnable接口创建线程类 2、通过Callable和Future创建线程 3、通过线程池创建 4、继承Thread类创建线程类
31、创建线程方式的对比 1、采用接口方式实现创建多线程Runnable,Callable 优势 线程类只是实现了接口还可以继承其他类在这种方式下多线程可以共享一个target对象适合多个相同线程来处理同一份资源的情况将CUP和代码以及数据分开形成清晰的模型很好的体现了面向对象的思想。 劣势 编写复杂要访问当前线程必须使用Thread.currentThread()方法 2、使用继承类方式实现多线程Thread 优势 编写简单要访问当前线程无须使用Thread.currentThread()方法直接使用this即可获得当前线程 劣势 线程类已经做了继承不能再继承其他的分类 3、Runnable和Callable的区别 Runnable的方法是runCallable的方式call Runnable没有返回值Callable有返回值 Runnable不可以抛出异常Callable可以抛出异常
32、线程的基本状态 1、new 新建状态线程对象创建后进入新建状态 2、Runnable 就绪状态调用线程是start方法线程进入就绪状态 3、Running 运行状态cpu调度处于就绪状态的线程线程才得以执行进入运行状态 4、Blocked 阻塞状态处于运行状态的线程因为某种原因暂时停止执行进入阻塞状态直到其进入到就绪状态才能再次被cpu调用。 阻塞又分为三种状态 等待阻塞运行状态中的线程执行了wait方式使线程进入到等待阻塞状态 同步阻塞线程在获取synchronized同步锁失败会进入到同步阻塞状态中 其他阻塞调用sleep或join或发出了IO请求会进入到阻塞状态 5、Dead 死亡状态线程执行完了或者异常退出了run方法结束其生命周期
33、线程池的创建 1、newCacheedThreadPool 创建一个可缓存线程池 2、newFixedThreadPool 创建一个定长线程池可控制线程最大并发数 3、newScheduledThreadPool 创建一个定长线程池支持定时及周期性任务执行 4、newSingleThreadExceutor 创建一个单线程化的线程池
34、线程池的优点 1、重用存在的线程减少对象创建销毁的开销 2、有效的控制最大并发线程数提高系统资源的使用率 3、提供定时执行、定期执行、单线程、并发数控制等