本文共 5033 字,大约阅读时间需要 16 分钟。
java生命周期:
加载:将源文件的class文件找到类的信息并将其加载到方法区中然后在实例化一个对象作为方法区中这个类的信息的入口
验证:确认其是否符合java语言规范,是否有重复的属性和行为,继承是否合理反正就是为了保证jvm能够执行
准备:主要就是未由static修饰的成员变量分配内存,并设置其默认的初始值
解析:将常量池中的符号引用转换为直接引用
初始化:就是将静态变量赋值的过程
使用:在类的使用中存在三步:对象实例化、垃圾收集、对象终结
对象实例化:就是如果该类存在父类jvm会通过显示或者隐示的方式先执行父类的构造函数,在堆内存中为父类的实例变量开辟空间,并赋予其默认的初始值,然后在根据构造函数的代码将真正的值赋予实例变量本身,然后引用变量获取对象的首地址,通过操做对象来调用实例变量和方法
垃圾收集:当对象不再被引用时就会被虚拟机标上特别的垃圾记号,在堆中等待GC回收
对象终结:对象被GC回收后对象不在存在其生命走到了尽头
类卸载:类的生命周期也结束了,程序中不在有该类的引用该类也会被jvm垃圾回收从此结束
Int char double long short boolean byte float
可以相互转换
integer是int的包装类 int是java中的一个基本类型
Integer必须实例化之后才可以使用,而int变量不需要
Integer是对象的引用当new一个integer时实际是生成一个指针指向此对象而int则是直接存储数据值
Integer默认值为null而int默认值为0
执行报错group by语句中select指定的字段必须是“分组依据字段”或者聚合函数不能有b
封装 继承 多态
利用修饰符private,默认修饰符(default),protected和public对成员变量进行修饰,或者各种内部类实现对细节代码的隐藏。封装就是利用这些方式将信息隐藏,只留下一些受限制的接口给外部访问。
利用extends关键字(新类extends旧类),将新一类与某一类形成is-a的关系,实现代码复用,减轻工作量,新类具有父类的许多方法与属性。
继承和接口(interface)的实现是多态的基础,接口的实现是利用implements关键字,将新类实现了接口的所有方法。而继承则是通过方法重写(父子关系,方法名、参数、返回值相同,访问权限修饰符不小于父类)完成不同的类对同一消息作出不同反应。
用父类(接口)的引用指向子类(实现类)的构造器。然后利用多态参数(传入父类,子类所有都可以隐式转化为父类),对同一消息(指令)作出不同的反应,得到不同的结果实现多态。
主要体现在方法的重写以及方法的重
1. runtimeException子类:
1、 java.lang.ArrayIndexOutOfBoundsException
数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。 2、java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。 3、java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等 4、java.lang.ClassNotFoundException 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。5、java.lang.NegativeArraySizeException 数组长度为负异常
6、java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常
7、java.lang.SecurityException 安全性异常
8、java.lang.IllegalArgumentException 非法参数异常
2.IOException
IOException:操作输入流和输出流时可能出现的异常。
EOFException 文件已结束异常
FileNotFoundException 文件未找到异常
3. 其他
ClassCastException 类型转换异常类
ArrayStoreException 数组中包含不兼容的值抛出的异常
SQLException 操作异常类
NoSuchFieldException 字段未找到异常
NoSuchMethodException 方法未找到抛出的异常
NumberFormatException 字符串转换为数字抛出的异常
StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常
IllegalAccessException 不允许访问某类异常
InstantiationException 当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常
Throw抛出异常 try catch finally捕获异常
序列化
以流的方式写进文件中保存,也叫写对象反序列化
把文件中的对象以流的方式读出来,也叫读对象创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
结构型模式,共七种:适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
原则:单一职责原则 里氏替换原则 依赖倒转原则 接口隔离原则 迪米特法则 合成复用原则
Mybatis的一级缓存是指Session缓存。一级缓存的作用域默认是一个SqlSession。Mybatis默认开启一级缓存。
也就是在同一个SqlSession中,执行相同的查询SQL,第一次会去数据库进行查询,并写到缓存中;第二次以后是直接去缓存中取。当执行SQL查询中间发生了增删改的操作,MyBatis会把SqlSession的缓存清空。一级缓存的范围有SESSION和STATEMENT两种,默认是SESSION,如果不想使用一级缓存,可以把一级缓存的范围指定为STATEMENT,这样每次执行完一个Mapper中的语句后都会将一级缓存清除。如果需要更改一级缓存的范围,可以在Mybatis的配置文件中,在下通过localCacheScope指定Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。
二级缓存是默认启用的(要生效需要对每个Mapper进行配置),如想取消,则可以通过Mybatis配置文件中的元素下的子元素来指定cacheEnabled为false。
1. 接口是最抽象的一层,不需要进行任何实现;抽象层可以实现部分接口方法,也可以自定义方法;实现类必须实现所有方法。
2. 接口能被类(抽象类和具体类)实现,区别在于抽象类实现接口,可以实现该接口的方法,也可以不实现该接口的方法;具体类必须实现接口的所有方法
3. 接口可以被接口继承,但不允许被类继承
4. 类之间可以相互继承,而且只能单继承
5. abstract是抽象的意思,在java中,规定只能修饰类或者方法,所以不能修饰属性。被abstract修饰的内容都是暂未被实现的,比如类、方法。属性之所以不能被abstract修饰,是因为属性不存在"尚未被实现"的状态。比如你可能会联想到int age; 或是String name; 但可惜的是,在申明变量时,int会默认给age赋予初始值0,String会默认给name赋予初始值""。因此属性达不到"尚未被实现的状态",从而不能被abstract修饰。
6. 抽象类和普通类在于:抽象类不能进行实例化,一方面抽象方法类似于接口的方法;另一方面,非抽象方法又和普通类方法相同,所以它兼备接口和普通类两种特型。
7. 由于抽象类不能实例化,因此一般是作为父类,由子类进行扩充和实例化,因此,在抽象类的所有protected级别以上的方法或变量,均可以在子类中调用。
1、MySQL不会使用索引的情况:非独立的列
2、前缀索引:如果列很长,通常可以索引开始的部分字符,这样可以有效节约索引空间,从而提高索引效率
3、多列索引和索引顺序:在多个列上建立独立的索引并不能提高查询性能,新的版本会采用合并索引的策略
4、避免多个范围条件
5、覆盖索引:果一个索引包含或者说覆盖所有需要查询的字段的值,那么就没有必要再回表查询,这就称为覆盖索引;索引条目远小于数据行大小,如果只读取索引,极大减少数据访问量
索引是有按照列值顺序存储的,对于I/O密集型的范围查询要比随机从磁盘读取每一行数据的IO要少的多
6、使用索引扫描来排序:其一是对结果集进行排序的操作,其二是按照索引顺序扫描得出的结果自然是有序的。如果explain的结果中 type列的值为 index表示使用了索引扫描来做排序
7、冗余和重复索引:冗余索引是指在相同的列上按照相同的顺序创建的相同类型的索引,应当尽量避免这种索引,发现后立即删除。
8、删除长期未使用的索引:定期删除一些长时间未使用过的索引
9、优化COUNT()查询
10、优化关联查询
11、优化LIMIT分页:优化这种查询一个最简单的办法就是尽可能的使用覆盖索引扫描,而不是查询所有的列。然后根据需要做一次关联查询再返回所有的列
实际上分库跟分表是有区别的,简单来说有垂直和水平两种方式,垂直就是将表按字段进行拆分,水平就是将表按照数据分布来做行拆分
mycat里面通过定义路由规则来实现分片表(路由规则里面会定义分片字段,以及分片算法)。分片算法有多种,你所说的hash是其中一种,还有取模、按范围分片等等。在mycat里面,会对所有传递的sql语句做路由处理(路由处理的依据就是表是否分片,如果分片,那么需要依据分片字段和对应的分片算法来判断sql应该传递到哪一个、或者哪几个、又或者全部节点去执行)
(1)master将数据改变记录到二进制日志(binary log)中,也即是配置文件log-bin指定的文件(这
些记录叫做二进制日志事件,binary log events)
(2)slave将master的binary log events拷贝到它的中继日志(relay log)
(3)slave重做中继日志中的事件,将改变反映它自己的数据(数据重演)
JBK是什么?
SQL语句和伪SQL语句?
JVM内存
JDK1.5
API的实现使用的设计模式例子
程序中经常会出现和处理的异常类型
使用反射的方式调用String对象的toUpperCase方法
转载地址:http://xtxws.baihongyu.com/