Java面试知识点

1、JUC
    可重入锁【可重入锁又名递归锁】:
    LockSupport:
    
2、spring主流面试方向:IOC、AOP、TX
    spring的AOP的顺序
    spring的循环依赖

    Aop常用注解:    @Before 前置通知:目标方法之前执行、
            @After 后置通知:目标方法之后执行、
            @AfterReturning 返回后置通知、
            @AfterThrowing 异常通知、
            @Around 环绕通知:环绕目标方法执行

3、Spring、SpringMVC和SpringBoot之间的区别

4、抽象工厂模式Java实现

5、工厂模式Java实现

6、spring核心之一:控制反转(IOC)和依赖注入(DI)

7、Spring核心AOP(面向切面编程)总结    

8、正确理解MySQL中的where和having的区别

9、MySQL中InnoDB和MyISAM对比:
·事务:InnoDB支持事务,InnoDB支持行级锁
·锁:MyISAM不支持事务,MyISAM支持表级锁
·存储:
InnoDB,基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件    的大小,它的索引文件和数据是存放到一起的,MyISAM是分开存储的。
MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型, .frm文件存    储表定义,数据文件的扩展名为.MYD,  索引文件的扩展名是.MYI。
·索引:
InnoDB(索引组织表)使用的聚簇索引、索引就是数据,顺序存储,因此能缓存索引,也能缓存数据
MyISAM(堆组织表)使用的是非聚簇索引、索引和文件分开,随机存储,只能缓存索引
·场景选择:
InnoDB 
需要事务支持(具有较好的事务特性)
行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成
数据更新较为频繁的场景
数据一致性要求较高
硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘 IO
MyISAM
不需要事务支持(不支持)
并发相对较低(锁定机制问题)
数据修改相对较少(阻塞问题),以读为主
数据一致性要求不是非常高

10、什么是索引?Mysql目前主要的几种索引类型

 

一、JAVA如何开启线程?怎么保证线程安全?
线程和进程的区别:进程是操作系统进行资源分配的最小单元。线程是操作系统进行任务分配的最小单元,线程隶属于进程。

如何开启线程?1、继承Thread类,重写run方法。2、实现Runnable接口,实现run方法。3、实现Callable接口,实现call方法。通过FutureTask创建一个线程,获取到线程执行的返回值。4、通过线程池来开启线程。

怎么保证线程安全?加锁:1、JVM提供的锁,也就是Synchronized关键字。2、JDK提供的各种锁Lock。

二、Volatile和Synchronized有什么区别?Volatile能不能保证线程安全?DCI(Double Check Lock)单例为什么要加Volatile?
1、Synchronized关键字,用来加锁。Volatile只是保持变量的线程可见性。通常适用于一个线程写,多个线程读的场景
2、不能。Volatile关键字只能保证线程可见性,不能保证原子性。
3、Volatile防止指令重排。在DCL中,防止高并发情况下,指令重排造成的线程安全问题。

三、JAVA线程锁机制是怎么样的?偏向锁、轻量级锁、重量级锁有什么区别?锁机制是如何升级的?
1、Java的锁就是在对象的Mark Word中记录一个锁状态。无锁、偏向锁、轻量级锁,重量级锁对应不同的锁状态。
2、Java的锁机制就是根据资源竞争的激烈程度不断进行锁升级的过程。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值