java面试(一)--(1)JDBC的反射,以及它的作用(2)数据库优化方法(3)字符串替换

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/JAVA_I_want/article/details/102336828

1.请你谈谈JDBC的反射,以及它的作用?

通过反射com.mysql.jdbc.Driver类,实例化该类时,会调用该类的静态代码块,该代码块会去DriverManager类中注册自己,DriverManager管理所有已注册的驱动类,当调用DriverManager.getConnection()方法时会遍历所有驱动类,并尝试连接数据库,只要有一个连接成功,就返回Connection对象,否则报异常.

2.请介绍一些你了解的数据库优化方法

优化方向:
(1)SQL以及索引的优化。首先根据需求写出良好的SQL,然后根据SQL在表中建立有效的索引。但是索引不能过多不然会影响,否则会影响查询效率。
(2)合理的数据库设计。根据数据库三范式来进行表的结果设计,设计时应该考虑如何更有效的进行查询.
补充:
字段类型选择:
a.少使用INT,多使用TINYINT,SMALLINT,如果非负加上UNSIGNED
b.VARCHAR的长度只分配真正需要的空间
c.避免使用NULL,因为很难查询优化且占用额外索引空间
数据库三范式:
第一范式:数据表中每个字段都必须是不可拆分的最小单元,也就是确保每一列的原子性;
第二范式:满足一范式后,表中每一列必须有唯一性,都必须依赖于主键;
第三范式:满足二范式后,表中的每一列只与主键直接相关而不是间接相关(外键也是直接相关),字段没有冗余。
(3)系统配置的优化.例如:mysql数据库的my.cnf文件
优化方案:
(1) 代码优化。有一些性能问题完全是由于代码写的不合理,有时候直接修改下就能解决。比如:for循环过多,做了无谓的条件判断,相同逻辑重复多次。
(2) 定位慢SQL,并优化。由自带的慢查询日志或者开源的慢查询系统定位到具体的出问题的SQL,然后使用explain,prifile等进行逐步调优.
(3) 合理使用索引。由于索引是以空间换时间,会影响增,删,改的效率.频繁写的表不宜建索引。选择在where,group by,order by,on从句中出现的列作为索引,对于离散度不大的列没必要创建索引。
(4) 缓存
(5) 分表
(6) 读写分离

3. 请实现一个函数,将一个字符串中的每个空格替换成“%20”。

例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

public class Solution {
    public String replaceSpace(StringBuffer str) {
    String [] strs = str.toString().split(" ");
        String s="";
        for(int i=0;i<strs.length-1;i++){

            s=s+strs[i]+"20%";
        }
        s+=strs[strs.length];

        return s;
    }
    public static void main(String []args){

        StringBuffer s = new StringBuffer();

        s.append("hello world");

        System.out.println(new Solution().replaceSpace(s));
    }
}

猜你喜欢

转载自blog.csdn.net/JAVA_I_want/article/details/102336828