Java习题
-
实例化子类时父类与子类之间的调用顺序(代码段,属性,构造方法)?
- 父类静态属性和静态块-子类静态属性和静态块–父类非静态属性和代码段-父类构造方法-子类非静态属性和代码段-子类构造方法。
- 同一个类中静态属性和静态代码段 执行顺序和定义顺序一致
-
已知 Inner1和static Inner2 类属于 Outter类的内部类,在Test类中如何实例化 Inner1 和 Inner2?
Outter.Inner2 inner2 = new Outter.Inner2();
Outter.Inner inner = new Outter().new Inner(); -
写出5种以上的设计模式?
根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式 3 种。
- 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。
- 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。
- 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。GoF 中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。
-
4.什么是事务?特点是什么?
事务是恢复和并发控制的基本单位。一系列的操作要么全部成功,要么全部失败。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
- 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
- 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
- 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响
-
5.数据库一共几种范式?写出前3种范式各自的要求?
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)- 第一范式(1NF)是指在关系模型中,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项。
- 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF),第二范式就是在第一范式的基础上属性完全依赖于主键
- 第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
- 简单说:
第一范式 域 (列)不可再分割,
第二范式 存在唯一标识记录的列(有主键)
第三范式 在2NF基础上消除传递依赖,消除冗余,表不能再分割。(主外键)
-
6.编程题
编写一个摇号程序,range 为取值范围:1~range。count 为出号的个数。
例如:generRandom(33,6) ,表示摇出1~33内的不重复的6个号
public static Integer[] generRandom(int range,int count){
//适合range值比较大的情况 且 count/range 小概率情况
// Set<Integer> set = new TreeSet<>();
// Random random = new Random();
// int i = 0;
// while (set.size()< count ) {
// int r = random.nextInt(range)+1;
// set.add(r);
// i++;
// }
// System.out.println(i);
// Integer[] arr = new Integer[count];
// set.toArray(arr);
// return arr;
//
//适合于range 小的情况 比例高的情况
ArrayList<Integer> list = new ArrayList<Integer>();
Integer[] result = new Integer[count];
for (int i = 1; i <= range ; i++) {
list.add(i);
}
Collections.shuffle(list);
for (int i = 0; i <result.length ; i++) {
result[i] = list.get(i);
}
Arrays.sort(result);
return result;
}