最新总结Java基础面试题

1java语言的特点

  面向对象、跨平台、多线程、异常处理、垃圾回收机制

2JAVA中的数据类型

  基本数据类型: short int long char float double boolean byte
  复合数据类型

3java中for循环与while与do while的 区别?

Forwhile与do while
初始值、判断条件、循环增量/减量、循环体判断条件、循环体
可以在结构之外定义初始值,也可以不定义需要自行在结构定义初始值
循环增量/减量循环结构自行控制循环增量/减量 手动控制
需要明确循环次数不需要考虑循环次数

4java中实例变量和类变量的区别?

类变量实例变量
有static关键字修饰没有static关键字修饰
程序执行前分配数据的内存空间程序运行时分配数据的内存空间
可以在多个同类对象之间共享数据值不能在多个同类对象之间共享数据值
类名和对象调用对象调用

5接口和抽象类的区别

抽象类接口
abstract classinterface
Extends 一个Implements 一个/多个
利用上转型对象创建抽象类对象利用接口回调创建接口对象
抽象类中元素 实例变量、类变量、构造方法
实例方法、类方法、抽象方法接口中可以有类变量、类方法和抽象方法
抽象类的子类往往是同一种事务接口的子类往往是不同种事务
抽象类的出现体现了java的重构接口的出现体现了java的扩建

6 int 和 integer的区别

Intinteger
基本数据类型封装类
初始值为0初始值为null
存于栈区存于堆区和栈区

7java中Error 与Exception的区别

  Error是java程序运行中不可预料的异常情况,会导致jvm不可处理或者不可恢复,不能被抓取。
  Exception 是java程序中可以预料的异常,可以获取到。

8 String 与 String Builder 与String Buffer的区别

StringString BuilderString Buffer
较快
线程不安全线程不安全线程安全
不可变可变可变
处理少量字符串处理单线程下的大量字符串处理多线程下的大量字符串

9java中常见的内部类

  成员内部类、方法内部类、匿名内部类、静态嵌套类

10java中字节流和字符流的区别?

  字节流:8位2进制 可以读取任何数据类型
  字符流:16位2进制 只读文本

11什么是序列化

  将一个java对象转换成2进制数据流的过程

12Arraylist和linkedlist的区别?

Arraylistlinkedlist
动态数据结构双向链表结构
查询快,增删慢增删快,查询慢
适合大量查询操作适合大量增删操作
没有提供对第一个和最后一个元素的操作提供对第一个和最后一个元素的操作
初始容量为10没有初始容量
扩容机制为1.5倍没有扩容机制

13 Hashmap和Hashtable的区别?

HashmapHashtable
可以有null键/值没有null键/值
继承AbstractMap类继承Dictionary类
默认容量为16默认容量为11
2倍2倍+1
线程不安全线程安全

14Collection和Collections的区别

CollectionCollections
InterfaceClass
包含了一些集合的操作方法(增删改查)集合框架的帮助类,对集合的排序,搜索以及序列化的操作

15什么是多线程,创建线程的方式有什么区别?

  多线程:某一个程序运行中会产生多个不同的执行线索,这些多个不同的执行线索共同运行的情况是多线程
  创建方式:

Thread类RunnableCollable
Extends threadImplements RunnableImplements 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锁

SynchronizedLcok锁
关键字接口
自动锁定资源手动锁定资源
不灵活灵活
异常时自动释放锁不会自动释放锁,需要在finally()中执行
不能中断锁,必须等待线程执行完成释放锁可以中断锁

19 sleep和 wait的区别?

SleepWait
ThreadObject
依赖于系统时钟和cpu调度机制线程调用notify()或notifyAll()方法
不释放已经获取的锁资源释放已获取的锁资源

20tcp和udp的区别?

TcpUdp
传输控制协议用户数据报
消耗大,安全,效率低效率高,不安全,消耗小

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驱动不支持事务
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值