Java笔试面试题

1.  mysql使用索引的好处与坏处

好处:使用索引可以提高系统性能,加快用户查询速度

           通过索引的唯一性,可以保证数据库每一行数据的唯一性

           可以加速表与表之间的链接

           降低查询中分组和排序的时间

坏处:索引的存储需要占用大量的磁盘空间

           当索引的数量非常大时,索引的创建和维护所需要的时间也是非常大的       

           当每次执行CRU操作时,索引也需要动态维护,降低了数据维护的效率

2.多线程

线程是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段、数据段和堆空间)和系统分配的资源(CPU、IO,打开的文件),但是各个线程也拥有自己的栈空间,多线程可以减少程序响应时间;提高cup的利用率;创建和切换开销小;数据共享效率高;简化程序结构。

3.如何保证线程安全

线程安全问题是指在多线程背景下,线程没有按照我们的预期执行,导致操作共享变量出现异常。在Java中有许多同步方案提供给我们使用,从轻到重有三种方式:原子类、volatile关键字、锁。 原子类是juc atomic包下的一系列类,通过CAS比较与交换的机制实现线程安全的更新共享变量。通过预期值与内存值的比较来判断是否修改。volatile关键字是轻量级的同步机制,他实现了变量的可见性、防止指令重排序。保证了【单个变量】读写的线程安全。 原子类和volatile只能保证单个共享变量的线程安全,锁则可以保证临界区内的多个共享变量线程安全。java中常用的锁有两种:synchronized+juc包下的lock锁。synchronized锁是互斥锁,可以作用于实例方法、静态方法、代码块,基于对象头和Monitor对象,在1.6之后引入轻量级锁、偏向锁等优化。lock锁接口可以通过lock、unlock方法锁住一段代码。

4.什么是springMVC

Spring mvc 是一个基于java的实现了mvc设计模式的轻量级web框架,在这种模式下软件被分为三层,即model、view、Controller。将软件分层的好处是 可 以将对象之间的耦合度降低,便于代码的维护。model封装了数据和对数据的操作,是实际进行数据处理的地方,view负责进行模型的展示,一般就是我们见 到的用户界面 Controller控制器负责视图和模型之间的交互主要负责两方面的动作,一是把用户的请求分发到相应的模型,二是把模型的改变及时地响应到 视图上。Spring mvc框架已经成为了mvc模式地最主流实现,前端控制器是DispatcherServlet接口实现类,映射处理器是HandlerMapping接口实现类,视图 解析器是ViewResolver接口实现类,页面控制器是Controller接口实现类

5.乐观锁和悲观锁

乐观锁:乐观锁总是假设最好的情况,每次去拿数据的时候默认别人不会修改,所以不会上锁,只有当更新的时候会判断一下在此期间有没有人更新了这个数据。适用于多读,可以使用版本号机制进行控制 悲观锁:悲观锁总是假设最坏的情况,每次去拿数据是都认为别人会修改,所以每次在拿数据时都会上锁,这样别人想拿这个数据时会阻塞直到拿到锁。mysql数据库的共享锁和排他锁都是悲观锁的实现。

6.了解设计模式吗

常用的设计模式有单例模式、工厂模式、代理模式、适配器模式、装饰器模式、模板方法模式等等。像sping中的定义的bean默认为单例模式,spring中的BeanFactory用来创建对象的实例,他是工厂模式的体现。AOP面向切面编程时代理模式的体现,它的底层就是基于动态代理实现的。适配器模式在springMVC中有体现,它的处理器适配器会根据处理器规则适配相应的处理器执行,模板方法模式用来解决代码重复的问题等

7.AOP

AOP面向切面编程。是spring两大核心之一,它是一种编程思想,是对OOP的一种补充。它可以对业务逻辑的各个部分进行隔离,降低耦合,提高代码的可重用性。它的底层是通过动态代理实现的。它的应用场景有事务、日志管理等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值