二年级JAVA期末答辩试题

Generics泛型

1. what is generics?

把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型;
即在定义类,接口,或方法时,将类型(类或接口)作为参数

泛型毕竟也是一个类型,一个参数化类型,引用型类型。

2.what is benefits of generics?

Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常.

  1. 在编译时有更强的的检测性,尽早发现bug
  2. 可以消除 类型不一致的异常【即强制转换带来的classCastException】
  3. 提高程序可读性和稳定性【在编写集合时可以规定具体类型】
  4. 编写通用算法程序【DAO】,提高代码的复用性
3.how to use generics?
  1. 泛型类,泛型方法,子类继承/实现泛型类/接口(已知参数类型和未知参数类型两种)
    —调用泛型方法举例
public class ObjectTool {
//    创建泛型方法
    public <T> void show(T t){
        System.out.println(t);//打印字符串
        System.out.println(t.getClass().getName());//打印类型
    }
//    调用泛型方法
    public static void main(String[] args) {
        //创建对象
        ObjectTool tool = new ObjectTool();
        //调用方法,传入的参数是什么类型,返回值就是什么类型
        tool.show("string");  //返回String类型
        tool.show(8);   //返回int类型
        tool.show(8.8);   //返回 double类型
    }
}

结果

string
java.lang.String
8
java.lang.Integer
8.8
java.lang.Double
  1. 类型通配符<?><? extends T> <? super T>
  2. 泛型在DAO中的应用

Containers容器 集合框架

1.what container does java contain?
  1. Collection:一个独立元素的序列,这些元素都服从一条或者多条规则。 List必须按照插入的顺序保存元素,而set不能有重复的元素。Queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)。
    |Collection接口
    |  ├List接口
    |  │-├LinkedList类 :
    |  │-├ArrayList 类
    |  │-└Vector类
    |  │ └Stack类
    |  ├Set接口
    |  │├HashSet 类
    |  │├TreeSet 类
    |  │└LinkedSet 类
    |  │Queue接口
  2. Map:一组成对的“键值对”对象,允许你使用键来查找值。
    Map
      ├Hashtable
      ├HashMap
      └WeakHashMap
2.what is difference between collection and collections?
  1. java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作==方式。
  2. java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
3.Use HashMap or TreeMap?

HashMap的实现原理是数组+链表+红黑树,它保存的Entry对象是无序的,在进行添加 查找 和删除时效率较为高。

TreeMap的数据结构是红黑树,即集合中的Entry都是排好了顺序,可以根据key的排序进行有序输出value。

4.what is the implentation principle of HashMap?

jdk1.8及以后(尾插),hashMap的数据结构是由:数组+链表+红黑树实现的,即当第一次添加元素时,底层会自动创建以个容量为16的Node[]数组;
@map.put(k,v)实现原理
第一步首先将k,v封装到Node对象当中(节点)。
第二步它的底层会调用K的hashCode()方法得出hash值。
第三步通过哈希表函数/哈希算法,将hash值转换成数组的下标,下标位置上如果没有任何元素,就把Node添加到这个位置上。如果说下标对应的位置上有链表。此时,就会拿着k和链表上每个节点的k进行equal。如果所有的equals方法返回都是false,那么这个新的节点将被添加到链表的末尾。如其中有一个equals返回了true,那么这个节点的value将会被覆盖。

另外当bucket中的链表的长度>=8时且Node[]数组长度>64则链表变成为红黑树,当bucket中的元素<=6时,树又会转变为链表的形式,这样可以提高查找效率。

5.How to does Iterator work? what are the characteristics?
  1. 通过itertor()方法返回一个以正确顺序在list进行过迭代的迭代器
  2. 通过hasnext()进行判断迭代器中是否还有迭代元素
  3. 通过next()返回下一个迭代元素
  4. 通过remove()删除从迭代器中返回的最后一个元素
6.what is difference between iterator and listiterator ?

Iterator适用于set和list接口的遍历 listIterator只适用于list接口遍历
Iterator仅支持后序遍历next,而listIterator支持前序previous和后序遍历
ListIterator继承了Iterator接口,可以进行增add 删remove 插set 以及获取索引下标nextIndex;而iterator只能进行删 remove操作 ;

GUI图形化用户界面

1.what is default layouts for object of Jframe class and Jpanel class?

JFrame的默认布局BorderLayout; Jpanel的默认布局时FlowLayout

2.Introduce the swing event model?

在这里插入图片描述

IO流
1.How many kinds of IO stream are there in Java?

按输入方向可分为:输入流(将源头中的数据读入到程序中),输出流(将程序中的数据写到目的地);
按读写方式分为:字节流,字符流;

2.what are the characterics of random accessfile ?

随机流的指向既可以是目的地也可以是源头;即随机流进行文件读写操作的时候可以读文件,也可以写文件;支持随机访问文件,seek(long a)可以定位到文件的具体位置,getFilePointer()可以获取当前位置。

Thread多线程

1.what is difference between parallel and concurrent?

并行性:在多处理器环境下,多个线程在不同处理器上同时运行;
并发行:在单处理器环境下,在给定时间内只有一个线程在处理器中运行,其他线程进行等待

2.what are the states of Thread ?

在这里插入图片描述

3.what is difference between sleep() and wait()?

Sleep()方法是Thread类的静态方法,可以使当前线程进入睡眠状态,将cpu让给其他线程,睡眠结束后又和其他线程竞争cpu。不涉及线程间的通信,它不会释放对象锁!可以在任何地方使用。
wait()方法是Object类中的方法,可以通过具体对象来调用,当某个对象调用wait()方法时使得当前线程阻塞,进入该对象的,该对象需要调用notify()方法来唤醒该线程进入就绪状态,进行线程间的通信;即当线程执行了对象的wait()方法进入等待队列释放对象锁并且一般在sychronized修饰的代码块中使用。

4.Introduce the synchronization principle of processing thread which running concurrently?synchronize 同步机制

并发规则包括数据访问规则和线程活动规则两方面,数据访问规则主要由锁来实现,线程活动规则主要表现在线程调度上。
锁又分为内部锁显示锁,内部锁由Sychronized关键字实现,sychronized可以修饰方法和代码块,所修饰的代码成为临界区。当线程执行到同步块时,Java虚拟机需要申请引导锁,只有申请成功才能执行临界区,执行完临界区锁会被Java虚拟机释放。
内部锁的非公平调度,当多个线程进行申请锁的时候,只有一个线程能够申请成功,其他线程则会进入阻塞状态进入等待队列,当锁释放,Java虚拟机唤醒等待队列的某个线程,该线程继续和其他活跃线程抢占释放的锁。

DesignPattern设计模式

1.introduce a design pattern that you are familiar with?
*单例模式:一个类只有一个实例,且该实例由自己创建
  **优点:减少了内存的开销,尤其是频繁的创建和销毁实例
  **缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而   不关心外面怎么样来实例化。
  **分类:
    **懒汉式(加锁/不加锁):需要的时候,new对象  
    **饿汉式:不管需不需要,都new对象  ;没有起到lazy loading的效果
    **静态内部类:当需要时,通过静态内部类new对象;相比饿汉式更为合理;
    **双重检查型  (判空->加锁->判空):synchronized会带来比较严重的性能开销,volatile可以禁止指令重排,避免脏读
    **枚举型:自动支持序列化机制,绝对防止多次实例;避免反射攻击

JDBC数据库驱动

1.Talk about the steps of connect to the databases?
  1. 导入驱动jar包
  2. 注册驱动class.forName(“com.mysql.jdbc.Driver”):告诉程序使用MySQL数据库的驱动jar包
  3. 获取连接对象DriveManager.getConnection(“jdbc:mysql://localhost:3306/databaseName”,user,password)
2.Introduce the PrepareStatement?

PrepareStatement是执行sql语句的对象,可以表示一条预编译过的sql语句

优点:

  1. 提高性能:
    数据库服务器会对预编译语句提高性能优化,由于预编译语句会重复调用,所以sql语句被数据库服务器编译器编译后的执行代码会被·缓存下来,下次调用时。只要是相同的预编译语句就不需要再编译了只要将参数传入编译过的执行代码中就会得到编译;
  2. 安全:
    防止SQL注入,使用preparestatement预编译的语句时,自己输入的内容不会和原来SQL语句发生匹配关系,仅仅是需要的参数。符合就通过,不符合就报错。
    sql:案例在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
3.How to traverse the ResultSet?如何遍历结果集

1.可以通过while循环判断resultSet的next()方法是否为true
第一次调用next方法 光标移动到第一行,改行元素有效则返回true,第二次调用next方法光标移动到第二行,依次类推
2.为Connition中的createStatement(int type,int concurrency)方法设置相关的参数,实现ResultSet向前或向后遍历;
Type的参数是ResultSet接口中的int型static常量
**TYPE_FORWARD_ONLY:只支持游标向下移动
**TYPE_SCROLL_INSENTIVE:支持游标上下移动,但是数据库发生变化时,当前得到的结果集不变
**TYPE_SCROLL_SENTIVE:支持游标上下移动,结果集随着数据实时更新
Concurrenc参数 决定为只读模式/更新模式
**CONCUR_REDYONLY:结果集不能更新表
**CONCUR_UPDATABLE:结果集可以更新表(resultSet中有相关的更新方法)

Java程序设计》课程实验指导书程序代码(答案)(实验四:java继承与多态),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验四 java继承与多态 一、实验目的: 掌握继承、多态的概念与实现方法; 掌握包和接口的定义和使用方法; 了解JAVA语言实现多继承的途径; 二、实验内容: 1.分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求: (1) Point2D有两个整型成员变量x, y (分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化。 (2)Point2D有一个void型成员方法offset(int a, int b),它可以实现Point2D的平移。 (3)Point3D是Point2D的直接子类,它有有三个整型成员变量x,y,z (分别为三维空间的X,Y,Z方向坐标),Point3D有两个构造方法:Point3D(int x,int y,int z)和Point3D(Point2D p,int z),两者均可实现对Point3D的成员变量x, y,z的初始化。 (4)Point3D有一个void型成员方法offset(int a, int b,int c),该方法可以实现Point3D的平移。 (5)在Point3D中的主函数main()中实例化两个Point2D的对象p2d1,p2d2,打印出它们之间的距离,再实例化两个Point2D的对象p3d1,p3d2,打印出他们之间的距离。 2.定义抽象类Shape,抽象方法为showArea(),求出面积并显示,定义矩形类Rectangle,正方形类Square,圆类 Circle,根据各自的属性,用showArea方法求出各自的面积,在main方法中构造3个对象,调用showArea方法。 定义接口DiagArea,其中包含方法double getDiagonal()求对角线长, double getArea()求面积,定义一个矩形类,实现此接口,并自行扩充成员变量和方法,定义一个正方形类继承矩形类(如矩形有长w和宽h,正方形有边x,并有相应的构造函数,有一个方法中一次直接显示边长、面积和对角线长),在另一类中的主方法里使用测试该类。 三、实验要求: 1. 能实现类的继承关系; 2. 用多种方法创建各个类的对象; 3. 程序应包括各个被调用方法的执行结果的显示。 4. 写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)定义Point2D,及定义它的属性和方法; 定义子类Point3D,及定义它的属性和方法;在Point3D中的主函数main()中实例化两个Point2D的对象,并通过这两个对象调用它们的属性和方法,输出方法执行结果。 2.(第2题)定义抽象类Shape,抽象方法为showArea(),再定义矩形类Rectangle,正方形类Square,圆类 Circle,和各自的属性。定义主类、主方法,在main方法中构造3个对象,调用showArea方法;定义接口DiagArea,其中包含方法double getDiagonal(),在主main方法中输出方法执行结果。 五、自做作实验 1.定义一个描述人的基本类,该类包括人的性别和出生日期两个数据成员,以及设置和获取这些属性值的方法成员;再定义一个大学生类,使大学生类具有人的所有属性外,还具有姓名、学号,大学入学成绩,籍贯属性以及设置和获取这些属性值的方法成员;编写完整的程序,完成一个具有班级学生信息管理功能的程序。 2创建一个接口Shape,其中有抽象方法area,类Circle 、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象;如是2,生成Rectangle对象;如是3,生成Star对象)。然后将Vector中元素依次取出,判断其是否为Star类。如是返回其是个Star。否则返回其面积。 3..学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学生的管理和对教师的管理在他们身上都有体现。 1)设计两个信息管理接口StudentManageInterface和TeacherManageInterface。其中,StudentInterface接口包括setFee()方法和getFee()方法,分别用于设置和获取学生的学费;TeacherInterface接口包括setPay()方法和getPay()方法,分别用于设置和获取教师的工资 2) 定义一个研究生类Graduate,实现StudentInterface接口和TeacherInterface接口,它定义的成员变量有name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。 3) 创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足2000元,则输出“provide a loan”(需要贷款)信息。 提示: 1)定义两个接口,分别在其中申明两个方法。 2)定义主类Graduate,实现这两个接口。 3)定义主类的成员变量,和构造方法。 4)给出四个接口方法的实现。 5)给出一个计算是否需要贷款的方法,在里面统计年收入和学费,并输出是否需要贷款的信息。 6)写main方法。在其中创建一个姓名为“zhangsan”的研究生,调用计算是否需要贷款的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值