1java语言的特点
面向对象、跨平台、多线程、异常处理、垃圾回收机制
2JAVA中的数据类型
基本数据类型: short int long char float double boolean byte 复合数据类型
3java中for循环与while与do while的 区别?
For while与do while 初始值、判断条件、循环增量/减量、循环体 判断条件、循环体 可以在结构之外定义初始值,也可以不定义 需要自行在结构定义初始值 循环增量/减量循环结构自行控制 循环增量/减量 手动控制 需要明确循环次数 不需要考虑循环次数
4java中实例变量和类变量的区别?
类变量 实例变量 有static关键字修饰 没有static关键字修饰 程序执行前分配数据的内存空间 程序运行时分配数据的内存空间 可以在多个同类对象之间共享数据值 不能在多个同类对象之间共享数据值 类名和对象调用 对象调用
5接口和抽象类的区别
抽象类 接口 abstract class interface Extends 一个 Implements 一个/多个 利用上转型对象创建抽象类对象 利用接口回调创建接口对象 抽象类中元素 实例变量、类变量、构造方法 实例方法、类方法、抽象方法 接口中可以有类变量、类方法和抽象方法 抽象类的子类往往是同一种事务 接口的子类往往是不同种事务 抽象类的出现体现了java的重构 接口的出现体现了java的扩建
6 int 和 integer的区别
Int integer 基本数据类型 封装类 初始值为0 初始值为null 存于栈区 存于堆区和栈区
7java中Error 与Exception的区别
Error是java程序运行中不可预料的异常情况,会导致jvm不可处理或者不可恢复,不能被抓取。 Exception 是java程序中可以预料的异常,可以获取到。
8 String 与 String Builder 与String Buffer的区别
String String Builder String Buffer 慢 快 较快 线程不安全 线程不安全 线程安全 不可变 可变 可变 处理少量字符串 处理单线程下的大量字符串 处理多线程下的大量字符串
9java中常见的内部类
成员内部类、方法内部类、匿名内部类、静态嵌套类
10java中字节流和字符流的区别?
字节流:8位2进制 可以读取任何数据类型 字符流:16位2进制 只读文本
11什么是序列化
将一个java对象转换成2进制数据流的过程
12Arraylist和linkedlist的区别?
Arraylist linkedlist 动态数据结构 双向链表结构 查询快,增删慢 增删快,查询慢 适合大量查询操作 适合大量增删操作 没有提供对第一个和最后一个元素的操作 提供对第一个和最后一个元素的操作 初始容量为10 没有初始容量 扩容机制为1.5倍 没有扩容机制
13 Hashmap和Hashtable的区别?
Hashmap Hashtable 可以有null键/值 没有null键/值 继承AbstractMap类 继承Dictionary类 默认容量为16 默认容量为11 2倍 2倍+1 线程不安全 线程安全
14Collection和Collections的区别
Collection Collections Interface Class 包含了一些集合的操作方法(增删改查) 集合框架的帮助类,对集合的排序,搜索以及序列化的操作
15什么是多线程,创建线程的方式有什么区别?
多线程:某一个程序运行中会产生多个不同的执行线索,这些多个不同的执行线索共同运行的情况是多线程 创建方式:
Thread类 Runnable Collable Extends thread Implements Runnable Implements callable 重写run方法 重写run方法 重写call方法 没有返回值 没有返回值 有返回值 不能声明抛出异常 不能声明抛出异常 声明抛出异常 直接创建线程对象 先创建目标对象,通过Thread类构造方法创建线程对象 先创建callable接口子类对象通过Thread 构造方法创建线程对象 不能资源共享 能资源共享 能资源共享
16线程池的创建方式有几种?
线程池创建有七种方式,最核心的是最后一种: newSingleThreadExecutor() :它的特点在于工作线程数目被限制为 1,操作一个无界的工作队列,所以它保证了所有任务的都是被顺序执行,最多会有一个任务处于活动状态,并且不允许使用者改动线程池实例,因此可以避免其改变线程数目; newCachedThreadPool() :它是一种用来处理大量短时间工作任务的线程池,具有几个鲜明特点:它会试图缓存线程并重用,当无缓存线程可用时,就会创建新的工作线程;如果线程闲置的时间超过 60 秒,则被终止并移出缓存;长时间闲置时,这种线程池,不会消耗什么资源。其内部使用 SynchronousQueue 作为工作队列; newFixedThreadPool(int nThreads) :重用指定数目(nThreads)的线程,其背后使用的是无界的工作队列,任何时候最多有 nThreads 个工作线程是活动的。这意味着,如果任务数量超过了活动队列数目,将在工作队列中等待空闲线程出现;如果有工作线程退出,将会有新的工作线程被创建,以补足指定的数目 nThreads; newSingleThreadScheduledExecutor() :创建单线程池,返回 ScheduledExecutorService,可以进行定时或周期性的工作调度; newScheduledThreadPool(int corePoolSize) :和newSingleThreadScheduledExecutor()类似,创建的是个 ScheduledExecutorService,可以进行定时或周期性的工作调度,区别在于单一工作线程还是多个工作线程; newWorkStealingPool(int parallelism) :这是一个经常被人忽略的线程池,Java 8 才加入这个创建方法,其内部会构建ForkJoinPool,利用Work-Stealing算法,并行地处理任务,不保证处理顺序; ThreadPoolExecutor() :是最原始的线程池创建,上面1-3创建方式都是对ThreadPoolExecutor的封装。
17线程的生命周期
18什么是线程同步?有几种实现方法?有什么区别?
当多条线程同时访问同一公共资源的时候,每次只能由其中一条访问公共资源,其它线程处于等待状态,不能访问公共资源。 同步代码块、同步方法、lock锁
Synchronized Lcok锁 关键字 接口 自动锁定资源 手动锁定资源 不灵活 灵活 异常时自动释放锁 不会自动释放锁,需要在finally()中执行 不能中断锁,必须等待线程执行完成释放锁 可以中断锁
19 sleep和 wait的区别?
Sleep Wait Thread Object 依赖于系统时钟和cpu调度机制 线程调用notify()或notifyAll()方法 不释放已经获取的锁资源 释放已获取的锁资源
20tcp和udp的区别?
Tcp Udp 传输控制协议 用户数据报 消耗大,安全,效率低 效率高,不安全,消耗小
21 什么是反射,如何得到反射对象
在程序运行中,可以得到某个类的对象,可以调用某一个类中的任意一个变量和方法 通过getclass()
22==和equals的区别
== equals 比较运算符 Object类方法 比较基本数据类型比较的是它们的值 不能比较基本数据类型 比较复合数据类型比较的是堆内存的地址 比较复合数据类型比较的是堆内存的地址,重写后比较的是它们的值
23 JDK动态代理 与cglib动态代理的区别?
JDK动态代理 Cglib 动态生成代理 动态生成代理 Jdk提供反射包中proxy这个类 Cglib提供Enhancer这个类 只能为实现接口的java类创建对象 为任何java类创建代理对象
24什么是事务?事务的特征?
事务是指访问并可能更新数据库中的各种数据项的程序执行单元 A原子性 C 一致性 I隔离性 D持久性
25说一下java的事务隔离级别有几种,分别是什么?
Java中定义了五种隔离级别。
Read-uncommiteed 允许脏读,不可重复读和幻读 Read-commiteed 禁止脏读,允许不可重复读与幻读 Read-READ 禁止脏读和不可重复读,允许幻读 Serializable 禁止脏读、不可重复读和幻读 None JDBC 驱动不支持事务