0925Java面试知识点准备

  1. java数据库性能优化之SQL语句?

参考地址
一般来讲数据查询会使用索引来提高查询效率,优化器根据索引来提高性能.但如果在SQL语句中的代码不合理,导致优化器删除索引而全表扫描,一般这种SQL语句就是劣质语句,实际SQL语句中我们要清楚优化器何时会删除索引,从而提高查询效率.

SQL语句中where子句容易出现的问题.及时某些列存在索引,但是由于劣质SQL语句导致不能使用索引,出现问题.

  • 以EXIST代替IN的方式,提高查询效率(主要是多了多表连接转换的过程)
  • 以NOT EXIST代替NOT IN(因为NOT IN 没有办法使用索引)
  • 以>0或者设置字段默认值的方式替代IS NULL和IS NOT NULL(如果字段中存在空值,索引是不会被使用的,所以通过设置字段默认值的方式 使用索引提高查询效率)
  • 以>=3替换>2(虽然从效果上看是一样的,但是>2首先会查询出记录为2的值进行比较,而>=3的会直接查询出3的记录索引.)
  • 模糊查询条件下不适用%xxx(因为通配符在前面无法使用索引,造成效率的下降)
  • 使用UNION ALL替代UNION(因为UNION实际上是将2张表的数据叠加后将重复的去掉,所以效率来讲就很慢)
  • 避免在未建立索引的字段上进行order by排序,降低效率
  • 以x<3000 x>3000的方式替代NOT (x=3000)(以为前面的那种方式采用了索引)
    所以关于SQL语句上性能的优化实际上就是尽量让优化器使用索引,提高查询效率(exist替代in/not exist 替代not in/>0替代is not null 设置默认值/通配符不要放在第一位/>=3替换>3/order by使用索引字段/union all 替换union/>3000and <3000替换<>3000)

SQL语句书写的影响
1.书写方式大写保持一致,减少SQL语句分析
2.where限制条件顺序的不同,数据量少的放前面
3.查询表顺序,数据量小的尽量放前面

所以再次强调一遍关于SQL语句优化平时有哪些点要注意?where限制条件8个+3个写法上的注意
8个限制条件–》extist 替换in/not exist 替换not in/x>0替换 x is not null 字段设置默认值/like模糊查询通配符不要放前面/x>=3替换x>2/orderby 排序使用索引字段/union all替代union /x>1000and x<1000替换x<>1000 not语句
3个书写上的注意点:书写格式保持一致 使用大写+where 限制条件字段 存在率少的放面前/关联查询数据量少的尽量放前面

使用explain进行SQL语句优化.使用关联查询替代子查询

  1. Java中常见的设计模式有哪些?
    java中常见的设计模式包含23种,包含5种构创建型模式+7中构建型模式+11种行为性模式.
    5中创建型模式:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式.
    7中构建型模式:适配器模式,装饰器模式,代理模式,外观模式,组合模式,桥接模式,亨元模式.
    11种行为型模式:策略模式,模板方法模式,观察者模式,责任链模式,迭代子模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式.
    所以总的来看23种模式看起来虽然很多,但只要3种模式的前面几种后面的模式也就都好记起来了.更多的还是要理解起来.如5种创建型模式:工厂方法模式,抽象工厂模式,单例模式,原型模式,建造者模式.7种结构性模式:装饰器模式,适配器模式,代理模式,外观模式,桥接模式,组合模式,亨模式.11中行为型模式.策略模式,模板方法模式,观察者模式,责任链模式,迭代子模式,命令模式,状态模式,备忘录模式,访问者模式,中介者模式,解释器模式.

  2. 请列举出jdk中常用的一些设计模式?
    单例模式引用与RunTime和Calendar类下,工厂模式主要应用于各种不可变的类,如Boolean.valueOf(),观察者模式主要应用于swing和时间监听里面.装饰器模式适应于IO输入流中。

  3. 什么是设计模式?
    设计模式是开发人员针对特定问题提出的一种有效的解决办法,设计模式是代码可用性的延伸.

  4. Java中什么是单例模式,请写出线程安全的单例模式?
    单例模式说白了一个只有一个实例对象,主要应用于Runtime(饿汉模式)和Calendar类中.
    而线程安全的饿汉模式没有问题,懒汉模式需要双重安全检查的.
    在这里插入图片描述

  5. 解释下什么是 观察者模式?
    观察者模式属于行为型模式的一种,主要应用于swing及时间监听.观察者是基于对象的状态变化和观察者通讯,以便对这些变化做出应对.

  6. 使用工厂模式的好处是什么?在哪里使用
    使用工厂模式最大的好处就是增加了创建对象的层次性.
    当使用工厂模式创建对象的时候,以后可以使用更高级或者更高性能的创建对象.而不用再代码调用层去修改.
    .

  7. 举一个用java实现的装饰器模式,它是对象层次还是类层次?
    装饰器模式是对象层次的,主要应用于IO输入流.类似于静态代理,通过代理对象实现同目标对象同样的接口功能,并在此基础上进行功能扩展.类似BufferReader和BufferWriter,都是基于Reader和Writer基础上扩展的功能.

  8. 如果让你设计一个ATM系统,需要考虑哪些问题?
    事物控制,锁机制,错误条件,边界条件等.

  9. 什么是工厂模式,工厂模式中的工厂方法模式与抽象工厂有什么区别?
    工厂模式是基于一个抽象产品类,衍生出不同的产品实现类,通过工厂类传入不同的类型得以生成不同的类对象实例.工厂方法是一个抽象类或接口衍生出来的,而抽象工厂是不同的抽象类或接口衍生出来的。所以抽象工厂实际上是在工厂方法模式上的一种升级.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章