面试汇总

来源:互联网 发布:php bool false true 编辑:程序博客网 时间:2024/05/24 03:23

1、AOP原理

AOP,即面向切面编程,AOP是一种思想,和具体的实现技术无关,通过Java的动态代理机制实现AOP思想。

AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即切面。所谓“切面”,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。

使用“横切”技术,AOP把软件系统分为两个部分:核心业务逻辑组件和横切关注点。横切关注点模块化为特殊的类,这些类被称为“切面”,好处:横切关注点都集中于一块,不会出现大量重复代码;核心模块只关注核心功能的代码,模块间藕合度降低。

 AOP 实际上是由目标类的代理类实现的AOP 代理是由 AOP 框架动态生成的一个对象,该对象可作为目标对象使用。AOP 代理包含了目标对象的全部方法,但 AOP 代理中的方法与目标对象的方法存在差异,AOP 方法在特定切入点添加了增强处理,并回调了目标对象的方法

2、Mybatis框架

MyBatis是一个数据持久层(ORM)框架。把实体 类和SQL语句之间建立了映射关系,是一种半自 动化的ORM实现。

Mybatis通过xml或注解的方式将要执行的statement配置起来,并通过Java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

SSM框架流程:JSP页面--->controller-->service-->mapper-->mapper.xml

优点:

1)优化获取和释放。

2)SQL统一管理,对数据库进行存取操作。

3)生成动态SQL语句。

4)能够对结果集进行映射。

3、JDBC

1)数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。

2)将sql语句硬编码到java代码中(并且分散在各个Java类中),如果sql语句修改(比如where条件改变),需要重新编译java代码,不利于系统维护。

3)向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。

4)从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。

5)重复sql语句。

4、JDBC与Mybatis比较

JDBC就是简单的建立数据库连接,然后创建statement,将sql语句传给statement去执行,如果是有返回结果的查询语句,会将查询结果放到ResultSet对象中,通过对ResultSet对象的遍历操作来获取数据;

MyBatis是将sql语句中的输入参数和输出参数映射为java对象,放弃了对数据表的完整性控制,但是获得了更灵活和响应性能更快的优势。

从使用上看,如果进行底层编程,而且对性能要求极高的话,应该采用JDBC的方式;如果要灵活使用sql语句的话建议采用MyBatis框架。

5、PreparedStatement和Statement区别

Java提供了Statement、PreparedStatement和CallableStatement三种方式来执行查询语句,其中Statement用于通用查询,PreparedStatement用于执行参数化查询,而CallableStatement则是用于存储过程。

PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,比Statement对象生成的查询速度更快。

PreparedStatement一旦绑定了sql,此PreparedStatement就不能执行其他的sql,即只能执行一条sql命令。Statement可以执行多条SQL命令;对于执行同构的sql(只有值不同,其他结构都相同),用PreparedStatement的执行效率比较的高,对于异构的sql语句,Statement的执行效率要高;当需要外部变量的时候,PreparedStatement的执行效率更高。

PreparedStatement优势:

PreparedStatement可以写动态参数化的查询。

PreparedStatement比Statement更快。

PreparedStatement可以防止SQL注入式攻击。

6、redis可视化工具

Redis是一个key-value存储系统,它支持存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set 有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

redis可视化工具:Redis Desktop Manager

(1)管理查询缓存。

(2)响应迅速,性能好,但不支持数据库备份与恢复。

Redis Desktop Manager使用:

(1)下载并安装Redis Desktop Manager;

(2)在页面下方,点击“Connect to Redis Server”;


(3)在弹出的框填写Name、Host、Port,点击TestConnection可测试连接是否成功;

(4)连接成功;


(5)选中数据库,右键,选择“Add new key”,填写Key、Type、Value;


(6)查看;

7、vi常用命令

vi是一种功能强大的文本编辑器,而vim则是高级版的vi,可以用不同颜色显示文字内容,还能进行诸如shell脚本、C语言程序编辑等功能,可以作为程序编辑器。

vi三种模式:输入模式、命令模式、底线命令模式。

vi常用命令

8、Linux常用命令

Linux常用命令

9、单例模式的应用

(1) Windows的Task Manager(任务管理器);

(2)windows的Recycle Bin(回收站);

(3)网站的计数器,一般也是采用单例模式实现,否则难以同步;

(4) 多线程的线程池的设计;

(5)应用程序的日志应用,由于共享的日志文件一直处于打开状态,只能有一个实例去操作,否则内容不好追加。

(6)Web应用的配置对象的读取,因为配置文件是共享的资源。

(7)数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,使用单例模式来维护,就可以大大降低这种损耗。

单例模式应用的场景一般发现在以下条件下:

(1)资源共享的情况下,避免由于资源操作时导致的性能或损耗等,如日志文件,应用配置。

(2)控制资源的情况下,方便资源之间的互相通信,如线程池等。




原创粉丝点击