Java初级程序员面试总结(三)--Lock篇

Java初级程序员面试总结(三)

引言:
我是一个菜鸟程序员,坐标HZ,面试总结系列将无期更新,有疑问的朋友可以留言
Q1: 你知道Java有哪些锁?
Answer: 乐观锁和悲观锁.乐观锁是CAS(CompareAndSwap).悲观锁是Lock锁,偏向锁,轻量锁,重量锁这些.(悲观锁太多了,我记不全,sync不是悲观锁,它有4种状态,第一种是自旋是乐观锁,其他的是悲观锁)–这题欢迎水友补充
Q2: 你知道Lock锁和Sync锁的区别吗?
Answer: Lock锁是API级别的.Lock锁的范围是锁代码块的,在其锁的代码块中出现异常时,会死锁,需要在finaily中unlock手动释放锁.Lock锁可以指定为读锁或写锁.Lock锁可以中断.可以调用tryLock获取锁,并可指定等待获取时间.Sync是JVM级别的.Sync锁的范围是锁代码块,static方法,方法.在锁的范围内出现异常,不会死锁,手动释放锁.不可手动指定为读锁.不可以中断.获取锁需要其他线程释放锁.
Q3: 你知道数据库有哪些锁吗?
Answer: 乐观锁和悲观锁.乐观锁是CAS(CompareAndSwap).悲观锁是读锁和写锁…写锁分为行锁,表锁,页面锁.innodb默认是行锁,MyISAM默认是表锁,Memory默认也是表锁.行锁会在无索引或索引数据占其数据库的大部分时升级成表锁.行锁和页面锁会死锁,开销大.表锁不会死锁,开销小.
Q4: 你知道分布式锁有哪些吗?
Answer: Redis锁,Zookeeper锁,数据库锁.Redis锁使用setnx进行,基于Redis单线程,进行原子性操作设置,如果存在则在锁定状态,如果不存在则不在锁住状态.可以设置过期时间,到期释放锁防止死锁.Redis挂了时,会进行死锁.Zookeeper锁,基于Zookeeper创建节点,按0,1,2…顺序进行.创建了最小的节点,则该节点在锁定状态,如果该节点删除,则解锁.宕机时,不会死锁.


欢迎留言补充,这里简单介绍了锁的种类,面试最好能结合项目应用回答

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一名初级Java程序员,你可能会在面试中遇到以下问题: 1. 什么是Java虚拟机(JVM)? Java虚拟机是Java程序的运行环境,它负责将Java源代码编译成字节码,并且在不同的操作系统上执行这些字节码。JVM允许Java程序在不同的平台上运行,因此Java被称为是“平台无关的编程语言”[2]。 2. 请解释一下反射机制是什么? 反射机制是指在程序运行时动态地获取和操作类的信息。通过反射,我们可以在运行时获取类的构造函数、方法、成员变量等信息,并且可以在运行时调用这些方法和访问这些变量。反射机制为程序提供了更大的灵活性和动态性。 3. 什么是线程?如何创建线程? 线程是程序中的执行单元,一个进程可以包含多个线程。线程可以同时执行不同的任务,使得程序可以并行执行多个操作。在Java中,可以通过继承Thread类或者实现Runnable接口来创建线程。继承Thread类需要重写run()方法,而实现Runnable接口需要实现run()方法,然后将实现了Runnable接口的对象传递给Thread类的构造函数来创建线程。 4. 什么是多线程?为什么要使用多线程多线程是指在一个程序中同时执行多个线程。使用多线程可以提高程序的效率和响应性,特别是在处理需要同时执行多个任务的场景下。通过多线程,可以将任务并行执行,从而减少等待时间和提高处理能力。 5. 请解释一下Java中的同步和异步? 同步是指多个线程按照一定的顺序执行,一个线程需要等待前一个线程执行完毕后才能执行。异步是指多个线程可以同时执行,不需要等待前一个线程执行完毕。在Java中,可以使用synchronized关键字或者Lock来实现同步,而使用线程池、Future等机制来实现异步。 6. 什么是死锁?如何避免死锁? 死锁是指多个线程因为互相等待对方释放资源而无法继续执行的状态。避免死锁的方法包括:避免使用嵌套锁、按照相同的顺序获取锁、避免长时间持有锁、使用超时机制等。此外,良好的设计和合理的资源分配也可以减少死锁的发生。 7. 什么是异常?Java中如何处理异常? 异常是指程序在执行过程中发生的错误或异常情况。在Java中,可以使用try-catch语句块来捕获和处理异常。通过捕获异常,可以防止程序因为异常而终止,并且可以根据具体的异常类型进行相应的处理操作。 8. 什么是面向对象编程(OOP)?Java是一种面向对象的编程语言吗? 面向对象编程是一种编程范式,它将程序中的数据和操作封装成对象,并且通过对象之间的交互来实现程序功能。Java是一种面向对象的编程语言,它支持面向对象的特性,如封装、继承、多态等。 9. 什么是类和对象?它们之间有什么关系? 类是对一类具有相同属性和行为的对象的抽象。对象是类的一个实例,它可以根据类的定义来创建。类是对象的模板,而对象是类的实例化结果。通过创建对象,我们可以使用类中定义的属性和方法。 10. 什么是构造函数?如何创建对象并调用构造函数? 构造函数是一种特殊的方法,它用来初始化对象的状态。在创建对象时,会调用该对象的构造函数来完成对象的初始化。在Java中,可以通过使用new关键字和构造函数来创建对象,例如:ClassName obj = new ClassName()。 以上是一些常见的Java初级程序员面试题,希望能帮到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值