2021年Java基础面试题总结

1、事务管理(ACID)

原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性(Consistency)

事务前后数据的完整性必须保持一致。

隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库的改变就是永久性的,接下来即时数据库发生故障也不应该对其有任何影响。

2、线程的生命周期包括哪几个阶段?

线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁。

  • 新建:就是刚使用new方法,new出来的线程;

  • 就绪:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行;

  • 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能;

  • 阻塞:在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep()、wait()之后线程就处于了阻塞状态,这个时候需要其他机制将处于阻塞状态的线程唤醒,比如调用notify或者notifyAll()方法。唤醒的线程不会立刻执行run方法,它们要再次等待CPU分配资源进入运行状态;

  • 销毁:如果线程正常执行完毕后或线程被提前强制性的终止或出现异常导致结束,那么线程就要被销毁,释放资源;

3、使线程阻塞的方法有哪些?

sleep() 方法、suspend()方法、yield() 方法、wait() 方法、join()方法

suspend e()使线程进入阻塞状态,只有对应的resume e()被调用的时候,线程才会进入可执行状态。(不建议用,容易发生死锁)

yield()的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。(暂停当前正在执行的线程,并执行其他线程,且让出的时间不可知)

join()也叫线程加入。是当前线程A调用另一个线程B的join()方法,当前线程转A入阻塞状态,直到线程B运行结束,线程A才由阻塞状态转为可执行状态。

4、Java中的有哪些线程池?

1.newCachedThreadPool创建一个可缓存线程池程

2.newFixedThreadPool 创建一个定长线程池

3.newScheduledThreadPool 创建一个周期性执行任务的线程池

4.newSingleThreadExecutor 创建一个单线程化的线程池

newCachedThreadPool:一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

newFixedThreadPool :创建一个指定工作线程数量的线程池,每当提交一个任务就创建一个工作线程,当线程 处于空闲状态时,它们并不会被回收,除非线程池被关闭了,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列(没有大小限制)中。

newScheduledThreadPool:它的核心线程数量是固定的,而非核心线程数是没有限制的,并且当非核心线程闲置时会被立即回收,它可安排给定延迟后运行命令或者定期地执行。这类线程池主要用于执行定时任务和具有固定周期的重复任务。

newSingleThreadExecutor :这类线程池内部只有一个核心线程,以无界队列方式来执行该线程,这使得这些任务之间不需要处理线程同步的问题,它确保所有的任务都在同一个线程中按顺序中执行,并且可以在任意给定的时间不会有多个线程是活动的。

5、Java基本数据类型

数值型-整数类型:byte、short、int、long

数值型-浮点类型:float、double

字符型:char

布尔类型:boolean

6、Java包装类

Integer Long Short Byte Character Double Float Boolean BigInterger BigDecmail

7、Java中Object类都有哪些方法?

 registerNatives()、getClass()、hashCode()、equals()、clone()、toString()、notify()、notifyAll()、wait(long)、wait(long,int)、wait()、finalize()共十二个方法

8、Java集合ArrayList和LinkedList区别

ArrayList:内存地址连续,所以查询大于增删

LinkedLIst 内存地址不联系 插入时只需要将节点掰开即可,所以增删大于查询

9、Java中JDK1.7和1.8的区别

JDK1.8增加了三大重要特性:

①HashMap结构由:散列表(数组+链表)转换为红黑树

②增加了Lambda表达式

③接口中可以写方法体

10、Linux下常用命令

cd /home 进入home目录

ls 列出当前目录下所有目录

ll 列出当前目录下所有目录

.. 上级目录

cat filename 查看文件的内容

tail -f catalina.out 这个命令用来监控我们后台的日志

tar -cvf 20170630.tar ROOT 备份

tar -xvf 20170630.tar ROOT 解压

unzip test.zip 解压zip包

zip -r test.zip test 压缩test目录

tar -zxvf java.tar.gz 解压gz包

ps -ef| grep java 查看当前的Java进程

kill -9 [端口号] 强制杀掉

11、Linux中看日志带颜色和具体查找

输出文件的后100行中包含关键字的行和该行的前后10行 关键字加上颜色 (其中 前10行是B 后10行是A)

tail -n 100 file.log | grep "关键字" -B10 -A10 --color=auto

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

内卷成仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值