2017秋招之面试整理(3)

来源:互联网 发布:qq偷菜软件下载 编辑:程序博客网 时间:2024/05/23 15:01

一:数据库优化的方法
1.在使用jdbc大批量插入数据时,明显使用(PreparedStatement + 批处理)性能更优
2.建立索引,创建索引一般有以下两个目的:维护被索引列的唯一性和提供快速访问表中数据的策略。95% 的数据库能 问题都可以采用索引技术得到解决。索引有助于提高检索性能,但过多或不当的索引也会导致系统低 效。因为用户在表中每加进一个索引,数据库就要做更多的工作。过多的索引甚至会导致索引碎片。
3.分表,针对每个时间周期产生大量的数据,可以考虑采用一定的策略将数据存到多个数据表中。
4.分库:就是将系统按照模块相关的特征分布到不同的数据库中,以提高系统整体负载能力。
5.缓存:hibernate,spring3有缓存模块。
6.Sql语句优化:A.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。B.充分利用连接条件,在某种情况下,两个表之间可能不只一个的连接条件,这时在 WHERE 子句中将 连接条件完整的写上,有可能大大提高查询速度。
二:存储过程
存储过程概念:其实就是带逻辑的(多个)sql语句。也是sql编程。
存储过程特点:
1)存储过程保存到数据库服务器端,通过数据库客户端工具调用存储过程
2)存储过程的效率会非常高!因为存储过程是在数据库服务器端执行。
3)存储过程的移植性非常差的!

创建存储过程-- 定义结束符号DELIMITER 结束符号CREATE PROCEDURE 存储过程名称 (形式参数列表) BEGIN    多个sql语句END 结束符号-- 调用存储过程CALL 存储过程名称(实际参数列表);

参数类型:
IN: 输入参数,可以携带数据到存储过程中
OUT: 输出参数,可以携带数据到存储过程外面。
INOUT: 输入输出参数。
如何接收存储过程的输出参数???
– 定义变量去接收输出参数数据。
– mysql数据库三种变量:
– 1)全局变量。mysql内置的变量,mysql程序关闭的时候全局变量才会失效!!
– show variables:产看全局变量
– character_set_client: mysql接收的客户端的数据编码
– character_set_results: mysql使用什么编码输出给客户端数据
– 查看某个全局变量: select @@变量名
– 修改某个全局变量: set @@变量名=值
– 2) 会话变量。变量只在某次登录的会话中有效!退出连接,会话变量数据失效!!
– 查看某个会话变量: select @变量名
– 修改/定义某个会话变量: set @变量名=值
– 案例:演示查询和更改会话变量
– 3) 局部变量:在存储过程中定义的变量。存储过程结束局部变量失效!!
– 查看某个局部变量: select 变量名
– 修改某个局部变量: set 变量名=值
– 定义某个局部变量: declare 变量名 数据类型;

三:设计模式
单例模式(分为2种,一种是饿汉式,一种是懒汉式,饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。)
适配器模式(分为俩种,类适配器和对象适配器,其中类适配器是用继承实现,对象适配器是用组合实现,一般情况是优先使用组合而不是继承,因为对于组合他的内聚性会比用继承高,并且耦合度比较低。)
模板模式:定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
桥接模式:它的意图就是将抽象部分与实现部分分离,使它们都可以独立的变化。
抽象工厂:(前面已经整理)
四:项目中遇到的问题
1.中文乱码问题:用过滤器解决
2.连接效率问题:用连接池解决
3.保留Sql语句:做产品部署的时候是要给别人建表的,要对装好的数据库进行初始化操作什么的,所以说没有SQL语句咋么行,所以建议留SQL语句。
4.路径问题:虽然说使用相对路径较为简单,但是容易出现差错,所以使用的是绝对路径。
5.要进行验证,分为客户端验证和服务器端验证。

原创粉丝点击