其他分享
首页 > 其他分享> > 近期面试总结

近期面试总结

作者:互联网

1.使用ReentrantLock与使用synchronized区别?

synchronize是锁对象,ReentrantLock应该是锁代码块;
使用synchronized。如果Thread1不释放,Thread2将一直等待,不能被中断。synchronized也可以说是Java提供的原子性内置锁机制。内部锁扮演了互斥锁(mutual exclusion lock ,mutex)的角色,一个线程引用锁的时候,别的线程阻塞等待。

使用ReentrantLock。如果Thread1不释放,Thread2等待了很长时间以后,可以中断等待,转而去做别的事情。

2.关于消息中间件mq的了解?

1)ActiveMQ

ActiveMQ 是一款比较早期的消息组件,由Apache开源出来的,它能满足吞吐量一般的业务场景,但是对于高并发场景,性能较差。

2)Kafka

Kafka追求高吞吐量的特性,它一开始使用于日志的收集。缺点是消息可靠性支持较少,适合产生大量数据的互联网服务的数据收集业务。

3)RocketMQ

RocketMQ 早期由阿里团队开发的,现在升级为Apache的顶级项目。纯 Java 开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。缺点是,有些功能不是开源的,如消息事务。

4)RabbitMQ

RabbitMQ 是由 Erlang 语言编写的,适合对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

3.线程池的了解?

1)线程池作用

线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。

2)手动版

自己创建线程池的,自己传入参数,根据自己服务器相关的一些性能去做合理的配置;
创建线程池 , 参数含义 :(核心线程数,最大线程数,加开线程的存活时间,时间单位,任务队列长度);

3)线程池四种创建方式

Java通过Executors(jdk1.5并发包)提供四种线程池,分别为:
newCachedThreadPool创建一个(可缓存线程池),如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个(单线程化的线程池),它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

4)创建线程的七个参数?

[ 核心线程数、最大线程数、超时时间、超时
单位、阻赛队列、线程工厂、拒绝策略。]

4.数据库连接池

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

5.数据库调优

1)数据库方面:根据业务不同可以进行分库分表,读写分离,选用合适的数据类型储存,使用合适的存储引擎,适当创建索引
2)sql语句方便:避免全表查询,查看sql的执行计划,查看是否索引失效,如果是子查询的话,查看子查询是大表驱动小表还是小表驱动大表。

6.mybatis的运行原理?

  1. 先创建SqlSessionFactory的创建者对象SqlSessionFactoryBuilder,然后再创建SqlSessionFactory工厂对象来读取配置文件(sqlMapConfig.xml),再依据配置文件中的配置找打映射文件(mapper.xml);

2)读取映射文件中的SQL语句创建预编译的PreparedStatement SQL语句,由于预编译的SQL语句较多,会将他们保持到Map中,以sql id作为key,以sql语句作为value

  1. SqlSessionFactory工厂对象再调用openSession()返回一个SqlSession对象,该对像封装了执行预编译SQL语句的相关方法.

4)SqlSession调用具体执行方法,传入sql id和参数.

5)依据sql id去Map中找对应sql id的value(预编译SQL),将参数传入预编译的SQL中并调用PreparedStatement对象的excuteUpdate()方法执行该SQL语句.

6)如果是插入,更新操作会返回影响的行数,是个int值
7) 如果是查询语句可以返回list,entity,map,以map为例,则将查询结果保存在结果集Map中,key是表中的字段名,value是字段值,多个返回结果时保存到多个Map中,然后调用结果集的getInt(),getString()等方法从Map中通过key取出value, 然后调用实体对象的set方法进行赋值实现映射关系.

7.java设计模式的分类?

总体来说设计模式分为三大类,共计23种设计模式:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

8.JSP九大内置对象?

在这里插入图片描述

9.4个作用域及作用域对象?

在这里插入图片描述

标签:总结,创建,数据库,sql,模式,面试,线程,近期,SQL
来源: https://blog.csdn.net/static_asd/article/details/119903844