答辩题

1、Java语言的特点是什么?

答:简单,跨平台性,安全性,健壮性,面向对象,垃圾回收机制,多线程

 

2、如何编译和执行java文件?产生帮助文档用什么命令?

答:javac  文件名.java 编译java文件  java  类名执行.class文件   javadoc 文件名 产生文档

 

3、虚拟机的工作流程是什么?

编写源文件,通过javac编译成class 文件 类加载------字节码验证—通过解释器为不同操作系统进行翻译和解释,由操作系统去执行

 

4、main方法怎么书写?

答:Public static void main(String [ ]args){

}

 

5、什么是标识符?标识符有几种?标识符的命名规则是什么?

答:标识符是用来给类,对象,方法,变量,接口和自定义数据类型命名的。标识符由字母数字下划线和美元符号组成,开头只能是字母下划线 和美元符号

类名一般是首字母大写,采用驼峰命名法。变量名和方法名首字母小写,采用驼峰命名法,常量全是大写字母,单词之间用下划线连接。

 

6、Java中基本数据类型有哪些?各占几个字节?Java中引用数据类型有哪些?基本数据类型与引用数据的差别?

答: long 8 double 8  float 4  int 4 char 2 short 2 byte 1 boolean 1

     引用数据类型:类,数组,接口(long与float比较,后者要大,因为float及包含整数也包含小数点,二者必需强转)

差别:基本放具体的数据值,而引用数据放的是地址

 

7、Java中char类型用什么编码?

答:unicode码 (统一码,万国码)

 

8、变量三要素是什么?

答:变量类型,变量名,变量值

 

9、Java的注释有几种?

答:三种 (单行//  多行/*  / 文档注释/** */)

 

10、定义常量用什么关键字?

答:final(修饰变量不可变)

 

11、什么是对象?什么是类?对象和类的关系是什么?

答:对象是行为和属性的封装,对象因为关注而产生。类是对对象的抽象。类是对象的蓝图,对象是类的实力

 

12、变量按作用域划分有哪几种?局部变量使用时需要注意什么问题?

答:局部变量,成员变量,静态变量。局部变量只在方法内部,方法结束,局部变量结束,局部变量放在栈中(栈结束则结束),成员变量是放在堆中(对象结束成员变量才结束),静态变量放在数据段中(虚拟机关闭才结束),局部变量使用需注意:1,局部变量使用之前必须初始化,否则编译错误,2,局部变量作用范围,3,局部变量修饰符,只能是默认和final

 

13、静态变量和成员变量有什么区别?应该怎么调用?

答:1 静态变量在虚拟机加载的时候就已经加载入内存中,成员变量是对象产生时产生

2 所有对象共享一个静态变量。成员变量因对象不同而不同。

3 可以通过类名 点 变量名的方式调用。成员变量需要创建对象后,用对象名点变量名的方式调用。

4 存放空间不一样,静态变量在数据段中,成员变量在堆中

 

14、垃圾回收GC回收什么样的对象?

答:没有引用指向的对象

 

15、什么是包?包的作用是什么?如何导入别的包中的类?什么样的类不需要导入?

答:包是类的容器,用于组织类,做信息隐藏,用于分隔类名空间。Import 包名点类名。 Java.lang包里的类以及本包的类

 

16、静态方法能直接调用成员方法或属性吗?为什么?

答:不能。因为静态方法在加载时就加载进内存,可以直接调用,但是成员方法和属性只有通过对象的产生而产生,所以无法知道他们具体是什么,会产生编译时异常。

 

17、当传递和返回对象,传递和返回的是什么?

答:对象的引用。

 

18、什么是构造方法?构造方法的作用是什么?

答:与类名一样,只有修饰符而没有返回值的特殊方法,用于创建对象。

首先再堆中划分空间,

并且在该空间划分属性,

并对属性进行初始化

执行构造方法中的代码

返回对象的引用

 

19、创建对象有几种方式?

答:使用关键字new ,反射,反序列化,克隆

 

20、this和super各代表什么含义?

答:this可以任意调用本类方法和属性, 也可以调用父类的方法和属性,但是受到访问修饰符影响。this(); 调用本类构造器,只能写入构造器的第一句。并不会默认写入

Super不能调用当前类的方法和属性,调用父类的方法和属性也要受到访问修饰符的影响。

super();调用父类构造器,当子类没有写的时候,系统会默认写入一个无参的父类构造器的调用方法 super();  若是父类没有无参构造器且子类没有写入 super(**); 有参。则会报错。  同this()一样,只能写在构造器的第一局。

This()和super()只能存在一个在构造器里面。

 

 

 

21、数组如何定义?

答: String [] test=new String[5]; 或 String [] test=new String[]{“1”,”abc”};

 

22、数组、字符串、集合各自的长度如何获得?

答:数组是 .length 属性。 字符串是 length()方法。 集合 是 .size() 方法

 

23、数组有哪些特点?

答:数组变量存放的是数组第一个元素的空间地址引用,下标表示的是一个元素空间大小的偏移量。因为数组存放空间是连续的,并且空间地址是由系统自动分配,如果一旦能改变大小,那么其增加的空间不一定是空闲的,所以数组的大小一旦建立不可改变。

1.数组的长度是确定的,一旦数组被创建,其大小不可更改

2.只能存放相同类型的元素并且是按顺序存放。

3.数组地址存放空间是连续的。下标从0开始,最大下标是长度减一

4.数组无论存放那种类型的元素都是在堆中。

5.数组存放的元素都是变量。基本数据类型直接存放值,引用类型存放引用地址。

6.数组建好之后内部元素会初始化。基本数据类型是0,引用类型为null

 

 

24、继承用什么关键字?子类继承父类,构造方法第一句应该如何书写?

答:extends  super();

 

25、重写和重载的区别是什么?重写有什么要求?

答:1.重写发生在父类和子类之间 子类重写继承于父类的方法,重载是发生在本类之中

  2.重写的方法,返回类型不可改变,方法的参数不可改变(包括参数数量,类型,顺序),重载是方法名相同,参数类型不同(参数数量不同,参数类型不同,参数顺序不同)

 

重写的要求:

       1.重写的方法访问修饰符的范围只能大于或等于父类该方法的访问修饰符范围。重载是可以随意更改。

       2.重写的方法不能抛出比父类方法更多的异常,但可以抛出运行时异常

 

26、Java中一个类能同时继承多个类吗?所有类的父类是什么?

答:不能。Object

27、构造方法能继承吗?构造方法能重载吗?

答:不能,能

 

28、final、finally、finalize的区别是什么?

答:final 是一个可选修饰符

  1)声明一个常量

  2)声明一个最终类,该类是不能被继承。String就是一个常见的典型的最终类。

  3)声明一个最终方法,该方法不能被重写,构造器不能被final修饰

  finally 是做异常处理时提供的finally块,finally结构使代码总会执行,无论是否产生异常。可以用来清理非内存资源。

finalize 是一个方法,是在垃圾收集器将对象从内存中清理出去之前做必要的清理工作,这个方法是有垃圾收集器在确定这个对象没有被引用时对这个对象调用。

 

29、访问修饰符有哪些?各自作用范围是什么?

答:访问修饰符有 publicprotected private , 他们的作用如下

本类    同包子类  同包非子类    不同包子类   不同包非子类

Public            yes       yes      yes              yes          yes

Protected        yes       yes      yes              yes          no

默认             yes       yes      yes              no           no

Private           yes       no         no              no           no

public表示公有,都可访问。 protected是包内和子类可以访问 不写表示默认,只有包内可以访问、private 表示私有,只有本类可以访问

 

30、什么是内部类?内部类class文件是怎样命名的?

答:在类里面定义一个类,相当于外部类的一个属性。内部类的产生必须依赖外部类,  内部类也是一个完整的独立的类可以有方法、属性、构造器、代码块。同样可以产生对象。也有独立的.class文件。

 

内部类.class文件名:静态或成员内部类前面要有外部类的类名加上$ 符号加上内部类类名。

如:OutClass1$InnerClass1.class

局部内部类:.class文件名 为外部类类名加上$符号加上表示定义顺序的数字(从1开始)再加上类名。如OutClass1$1InnerClass1.class

 

匿名内部类:

.class文件名 为外部类类名加上$符号加上表示定义顺序的数字(从1开始)

如OutClass1$1.class

 

31、什么是多态?多态有什么特点?

答:

多态:允许使用父类变量指向子类对象,允许使用接口变量指向实现类对象

多态有静态多态:使用重载实现,在编译期就已知方法执行的最终效果

动态多态:使用动态绑定和重写实现,编译期未知,运行期根据绑定对象的不同,有不同的效果。

 

32、面向对象的特征有哪些?

答:多态,

封装:指把数据和过程包围起来,对数据的访问只能通过已定义的方法,调用者无需知道具体的实现步骤,实现信息的隐藏

继承:通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新类。是一种联结类的模型,并且允许和鼓励类的重用。

抽象

 

 

33、什么是抽象类?什么是抽象方法?定义抽象类的关键字是什么?

答:用abstract 声明,无法创建对象的特殊类,一个拥有抽象方法的类也必须是抽象类。

抽象方法是用 abstract 声明的方法,只有方法的声明部分,没有实现部分。

抽象方式是只有定义而没有实现。

 

 

34、接口如何定义?实现接口用什么关键字?一个类实现接口必须做什么?

答:接口是不同类中相同行为的抽象。Implements  必须实现该接口中定义的方法,如果一个类没有实现完该接口中的方法,那么这个类是抽象类。

 

 

35、接口中定义的方法修饰符是什么?接口中定义的变量修饰符是什么?

答: public abstract                       public static final

 

36、抽象类和接口的区别是什么?

答:1. 抽象类只能是单继承,而接口可以多实现,接口可以继承多接口

       2. 抽象类可以implements用继承接口,但是接口只能extends 接口

       3. 抽象类强调所属关系。接口强调特定功能的实现。

       4. 抽象类中并不是所有方法都是抽象方法,子类继承抽象类可以选择实现也可以选择声明其是一个抽象方法而不实现(有抽象方法的类,必须是抽象类)。

       5. 抽象类是接口与类的中介。

       6. 抽象类的变量默认是friendly类型,其值可以在子类中重新定义,也可以重新赋值,但是接口的变量默认是 public static final,实现类中无法重新定义,不能改变其值

 

 

抽象类

定义语法:

1.abstract class 

2.访问修饰符都可以

3.里面可以是任意属性 

4.有构造器

5.抽象的方法必须写abstract  

6.可以有实现方法

使用语法:

1.可以被子类继承,单继承

设计思想:

1.把一脉相承,与生俱来的属性和方法设计在抽象类之中。

 

 

接口:

定义语法:

1.interface

2.访问修饰符只能是 public 和默认

3.里面只能是公共静态常量

4.无构造

5.抽象方法可以不写 abstract .

6.1.8版本以前里面无实现方法,1.8可以添加default关键字 添加实现方法

使用语法:

1.  可以被子接口继承,多继承,可以被实现类实现,多实现

2.  接口中的方法不能被static

设计思想:

1.把外部可以附属添加的行为设计到接口中

 

37、异常的API结构是怎样的?Error和Exception有什么区别?

答:java把异常当作对象来处理,并且定义了一个基类java.lang.Throwable,其下有2个子类,一个为Error 错误类,一个是Exception 异常类。 在Exception类的子类中,分为,检查时一场,和运行时异常 。 error是指程序无法处理的错误,这些异常发生时,JVM一般会选择线程终止。Exception 是程序本身可以处理的一场,这种异常分为检查时异常和运行时异常。

 

 

38、异常的执行顺序怎样?如果在try块中有return,finally会执行吗?

答:先执行try块,若无异常则执行 finally块(如果有的话),然后结束try/catch 块,执行异常捕获后的代码

如果执行try块中产生了一个异常,则会终止try块的运行,并进入catch块中,当执行完后依旧会执行finally块(如果有的话),并结束 try/catch块,执行异常捕获后的代码。

 

try块中有return也会执行finally,需要注意的是如果try块中无异常,最终返回的值依旧是try块中的值,而不是finally块。

 

 

39、finally是否在任何时候都会执行?

答:否。(System.exit(0)时就不会执行了)

 

40、throw 和throws的区别是什么?

答:throw关键字是用于方法体内部,用来抛出一个异常,如果抛出的异常是检查时异常则必须在方法声明部分写上可能抛出的异常类型,该方法的调用者也必须检查处理抛出的异常。

throws关键字是用于方法的声明部分,用来声明该方法可能会抛出一个异常,如果抛出的异常是检查时异常,那么方法的调用者必须处理或者重新抛出该异常。

 

41、异常分为几种?如何区分?

答:检查时异常和运行时异常。运行时异常都是RunTimeException 的子类,其他的为检查时异常

 

42、如何得到当前工作目录?

答:System.getProperty(“user.dir”);

 

43、String x = "abc" 和 String x = newString("abc")有什么区别?

答: 前者只有一个对象,在数据段里的常量池中。后者需要在常量池中查询是否拥有这个字符串常量,如果有只创建一个对象,没有则创建2个对象。

 

44、String和StringBuffer的区别?

答:String产生的对象值是不能更改的,每次变化都是重新产生了一个对象。而StringBuffer产生的对象的值是可以改变的。StringBuffer是缓冲区对象,当对这个对象进行操作的时候,不会产生新对象,所以效率高。StringBuilder是线程不安全的,效率最高。

 

 

45、如何将字符串转化为基本数据类型?

答:用包装类中静态方法 包装类.parse基本数据类型(字符串)。如Integer.parseInt(“10000”);

 

 

46、如何将日期对象进行"2011-12-10"格式化输出?如何将"2011-12-10"字符串转化为日期类型?

答:使用SimpleDateFormat test=new SimpleDateFormat(“yyyy-MM-dd”) 定制格式。然后用

Test.format(date类对象) 返回一个字符串 然后输入该字符串     

 Date.valueOf("2011-12-10");sql的date类,如果是util包的date 则是需要              

Date  test= new SimpleDateFormat(“yyyy-MM-dd”).parse(“2011-12-10”)

 

 

47、javaBean规范有哪些内容?

答:JAVA标准类:

1.    必须要有个1公共无参构造(写了带参构造必须添加一个,都不写则有默认)

2.    Javabean类不应有公共属性,属性都应该是 private

3.    为私有(private声明)属性提供符合命名规范的get/set方法。?为什么:1.合法性验证,2.可以删除get,set方法,属性变成只读或只写。

4.    应该要实现serializeable 接口

5.    javaBean类必须是一个公共类,将其访问属性设置为public

 

48、什么是反射?

答:是指在运行状态,对于任意一个类,都能够知道这个类所有的属性和方法,对于任意一个对象,都可以调用他任意的一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能成为java语音的反射机制。

 

 

49、如何得到Class对象?如何利用Class对象产生该类的对象?

答:得到class对象: 1. 利用实例获得Class对象 如 Class a=实例.getClass();

                                   2. 利用类名获得 Class 对象如 Class a = 类名.class ;  jdk1.5以前包装类是用 包装类名,TYPE的方式获得如 Integer.TYPE

                                  3. 用forname方式获得 如Class a=Class.forName(类的限定名);

 

如何产生对象: 1. 用Class对象的newInstance方法产生一个对象,该方法只能产生带无参构造器的类的对象

                        2. 用Class对象 获取一个 构造对象,并使用 该对象的newInstance方法产生对象,可以产生带参构造器的类的对象 如 Classtest=Class.forName(类的限定名);

Object a=test.getConstructor(null).newInstance();

需要注意的是,除非使用setAcccessable方法否则,无法通过private修饰构造器产生对象

             

 

 

50、线程和进程的区别?

答:1.进程是指一种自包容的的运行程序,有自己的地址空间,线程是进程内部的单一顺序流。

2.进程间调用涉及的开销比线程间通讯多。

3.线程间的切换成本比进程低

 

51、创建线程有几种方式?如何启动线程?调用start()和调用run()的区别?

答:2种。一个是继承Thread类,一个是实现Runnable 接口。 前者直接调用父类的 start方法。 后者需要产生一个Thread对象关联runnable的实现类,并调用Thread对象的start方法。 Start方法是在主线程之外开启一个新的子线程,而run()方法就是单纯的调用该方法

 

52、线程有几种状态?

答:5种, 创建:创建一个新的线程对象

就绪:调用start()方法之后执行run()方法之前

运行:执行run()方法

中断:1.由于优先级的关系,线程没有抢到CPU 而没有被执行

        2.使用sleep()方法造成了休眠。恢复后也不是立即执行,而是重新参与CPU竞争

        3.由于等待I/O事件而被阻塞

        4.使用wait()方法是线程进入等待

        5.挂起 yield()方法

死亡:run()执行完毕

 

 

53、什么是线程优先级?分为几级?

答: 优先级是为了在多线程的环境中,便于系统对线程的调度,优先级高的线程将被优先执行(但不是绝对)。

当两个或两个以上的线程,同时处于就绪状态,那么优先级高的线程将被优先执行。10级。

 

 

54、什么是线程同步?同步会造成什么结果?

答:两个或两个以上的线程同一时间访问同一个资源时,该资源只能被一个线程占用。

同步会造成死锁,死锁是指当2个线程访问一对相互依赖的资源对象。

死锁的解决是用wait() 和notify()方法来解决

同步:1一个是数据安全,2 效率低下

 

 

 

55、wait和sleep的区别?

答:1.wait定义在Object方法中,sleep定义在线程中

2.wait会让该线程进入等待状态,并释放同步锁,通过notify唤醒后参与到CPU竞争。Sleep会让线程进入休眠状态,不能释放同步锁

3wait必须写在同步快中, Sleep则是可以放在任意地方,。

 

56、集合的作用是什么?集合框架的API结构是怎样的?

答:数据的封装,检索,操作和传输对象

集合框架包括 接口:包括Collection 和Map

 实现类: ArrayList,Vector,LinkedList

HashSet TreeSet

HashMap Hashtable

和算法  Collections  Comparator和Comparable

 

Collection---List和set 是他的子类  

Map

 

 

57、List、Set、Map集合各自有什么特点?

答: List: 是一种线性集合。指的是存放在这种集合里的元素是有顺序的,这个顺序指的是可以通过前一个元素找到下一个元素,只有List是线性有序。元素可以重复,2个元素可以指向同一个对象。

 Set: 不能重复 ,使用自己内部的排序机制,Set集合的不重复是通过对象的equals()方法和hashcode()方法来判断:

equals()返回true,hashCode返回的值要和它相同

1 严格意义上 一旦重写了equals()方法,同时也要重写hashcode()方法

2equals()返回true,hashCode返回的值要和它相同

3equals()返回false,hashCode返回的值不要求一定相同(最好不同)

 Map:键值对,Map一个元素有2个对象,并且键的对象值是不能重复的。

 

58、集合元素如何添加?如何删除?如何遍历?

答:List类 和Set 类是add()方法添加,remove()方法删除。遍历:只有list可以使用普通for循环,但都可以使用迭代器或foreach循环 如

 Iterator it=list.iterator();

              While(it.hasNext()){

       It.next();

}

Map集合 用put()方法添加 remove(),方法删除,遍历是 Keyset()得到key值的Set集合,在用set的遍历方式中使用 get(key)方法去遍历Map集合,或者用Values()方法获得所有的值的集合。再用foreach或迭代器进行遍历。

 

 

 

59、List接口实现类ArrayList、Vector、LinkedList的区别?HashMap和Hashtable区别?

答:ArrayList 底层数据结构是数组,线程不安全,Vector和ArrayList一样,但是是线程安全。

LinkedList底层数据结构是双向链表。

HashMap线程是不安全的,可以存放空值,空键值(空键值只能有一个)

Hashtable是线程安全,不能存放空值,空键值

 

 

60、集合如何进行排序?

答: 1.实现java.util.comparable 接口 内部比较器,类需要实现该接口的compareTo(<E> t)方法,如果传入的参数在这个对象之后,那么返回-1 在之前则返回一个正数,相等则返回0

       2. 实现 java.lang.Comparator接口 外部比较器 不需要更改对象,通过一个外部的类实现该接口用来为2个对象排序。

 

61、awt和swing有什么区别?

答:AWT abstract window toolkit 是抽象窗口工具包,提供了一套与本地图形界面进行交互的接口。AWT是Swing的父类,由于使用系统本身的图形界面,会导致跨平台的时候风格不一致。

Swing则是在AWT的基础上构建的一套新的图形界面系统,他提供了AWT 所能提供的所有功能,并且用纯粹的JAVA代码对AWT的功能进行了大幅度的扩充。Swing 有自己的界面,并不依赖于系统,在跨平台时不会产生变化

 

 

62、GUI常见布局管理器有哪些?

答:流布局:组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满后到下一行继续排列。Jpanel默认是流布局

 

边界布局:容器划分东西南北中五个区域,南北贯通,中间最大,默认加入组件的情况下也是放入中间,中间会占用其他未放置组件的方向,而其他方向无法占用中间。在JFrame中,默认就是边界布局。

 

卡牌布局:能让多个组件共享一个显示空间,共享空间的组件之间的关系就像一叠牌组件叠在一起。默认显示第一个添加的组件。

 

网格布局:按行列的方式在界面上划分空间,每个空间等大,如果划分的空间不够,优先保证行不变,增加列。

 

63、如何进行事件的添加?

答: java在GUI处理事件是使用委托事件模型,需要有事件源对象,监听器对象和触发对象。

方法一:单独写一个监听器类,实现见提前接口,重写抽象方法。可以为不同的事件源使用同一个监听器类,也可以为每个事件源书写单独的监听器类。如果要操作窗体上的其他元素,必须要传参。

好处:1 代码独立,任务清晰 2 使用灵活,既可以为不同的事件源书写同一个监听器,也可以书写各自的。

坏处:1 类的数量增加了,维护量也增加了 2 如果要操作其他的容器或组件,必须要传参

 

方法二:让容器充当监听器,实现监听器接口,重写监听方法。

好处:操作本容器的子容器或组件,不需要传参

坏处:1 类的任务不明确 2  无法为不同的事件源书写格子的监听方法

 

方法三:使用匿名内部类,在绑定的时候同时实现接口的重写。

好处:1 访问本容器的自容器或组件,不传参  2 可以为每个事件源书写各自的监听器

3 类的功能各自独立

坏处: 初学者代码比较晦涩难懂

 

 

64、流按照输入输出方向分有几种?相对于什么而言?

答:输入流和输出流。相对于内存而言。

 

 

65、流按照传输内容分有几种?各自的父类是什么?

答:(字节流,字符流,对象流)文件流,字节数组流,管道流,过滤流类,对象流,序列流

其父类因传输大小如下:

字符流的父类是java.io.Reader 和  java.io.Writer

字节流的父类是java.io.InputStream 和 java.io.OutStream

 

66、操作流时,如果文件不存在会出现什么情况?如果流不关闭会出现什么情况?

答:读取的时候,文件不存在会抛出FileNotFoundException异常,输出的时候,文件不存在会自动写出该文件(前提是文件目录必须存在)。如果流不关闭会导致该资源一直被占用,如果再来一个请求会抛出异常,有可能会导致写入的时候写不进数据。

 

67、如何判断一个文件是否存在?如何创建一个目录?如何知道一个目录中有多少文件?

答:用 exists()方法来判断是否存在 使用mkdirs()方法,需要注意的是中文目录不一定能创建  使用listFiles()方法(会得到所有文件包括文件夹)

 

68、什么是对象序列化?如何实现对象序列化?

答:需要对对象传输的时候,因为对象较大,无法直接传输,所以将对象变成二进制数据,将对象以二进制的方式输出。

反序列化:将输入的一个二进制流转换为一个对象

实现Serializable 接口(标记接口)

 

 

 

69、TCP/IP协议分为几层?

答:协议是指双方定制的共同表达方式。

4层:应用层(应用层,表示层,会话层) , 传输层,网络层,网络接口层(数据链路层,物理层)

 

70、什么是端口?常见端口有哪些?

答:端口包括逻辑端口和物理端口。物理端口是指物理存在的端口,如交换机上的端口,而逻辑端口则是逻辑意义上用于区分服务的端口,端口号范围从0到65535.

一般是指一个业务程序输入输出数据的通道

常见的端口:有 FTP的21端口 HTTP的80端口 Telnet端口 23 数据库的3306

HTTPS443   SMTP 25   POP3 110  TOMCAT 8080

 

 

71、TCP和UDP的区别是什么?掌握TCP编程流程。

答:TCP是传输控制协议,会经历三次握手来确认才能使双方建立连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据流量控制等功能来确保数据的可靠性和安全性。相对而言效率低。

UDP是用户数据包协议协议,不提供可靠性及安全性,效率高。一般用于视频数据的传输。

 

72、什么是XML?XML声明是怎样的?XML注释是怎样的?

答:XML是可扩展标记语言,用于标记电子文件使其具有结构性的标记语言

<?XMLversion="1.0"  encoding=”UTF-8”standalone=”yes”?> 声明,一般后面的两项会默认,只需要写成<?XML version="1.0"?> 即可

<!--  注释 -->

 

 

73、一个格式良好的XML有哪些规定?

答:

1.标记的书写正确,必须成对出现,有开始标记必须有结束标记,除非是单标记

2.每个标记只能有一个根元素

3.标记嵌套必须正确,不能出现交叉标记

4.属性必须加引号

5.开头必须要有声明

6.标记要区分大小写

 

74、格式良好的XML和有效的XML有什么区别?

答:格式良好的XML是指符合XML语法规则的

有效的XML是指不但符合XML语法规则而且符合DTD规范或 schemal规范

所以良好格式的XML不一定是有效的XML,但是有效的XML一定是良好格式的XML

 

75、DOM和SAX有什么区别?

答: 1 DOM使用树形结构,在内存当中一次性表现整篇XML文档

2 SAX采用事件回调的方式,从上往下读取一篇XML文件,当遇到我们要操作的元素的时候,它就调用我们要操作这个元素的方法。

3DOM解析最大的优势是可以来回遍历,而SAX不行。SAX在读取到后面的时候是不能再回到前面的! .

4大的XML文件不适合DOM解析,反之则采用SAX

 

76、静态块和实例化块分别在什么时候执行?

答:前者在虚拟机加载的时候就执行,只执行一次。后者在每次创建对象的时候执行,每创建一次执行一次。

 

76、什么是一对一、一对多、多对多?

答:

- 一对一:一条主表记录对应一条从表记录,同时一条从表记录也对应一条主表记录。

- 一对多:一条主表记录对应多条从表记录,同时一条从表记录对应一条主表记录。

- 多对多:一条主表记录对应多条从表记录,同时一条从表记录对应多条主表记录。

(多对多需要中间表来连接,中间表来描述关系)

77、数据库完整性有哪些?

答:为了防止垃圾数据的产生,从而影响数据库的执行效率。(可靠性+准确性)

数据完整性的分类 

  - 实体完整性:保证一行数据是有效的(实现:1,主键约束primary key(主键列不能为空也不能重复,一个表只能有一个主键),2 唯一约束unique(唯一约束可以为空,并且可以在一张表中给多个列设置)) 

  - 域完整性:保证一列数据是有效的 (实现:1 非空约束not null ,2 默认约束default ,3 检查约束 mysql不支持)

  - 引用完整性:保证引用编号是有效的

  - 用户自定义完整性;保证自定义规则 

 

 

78、什么是主键,主键有什么特点?

答:主键是表中的一个字段,主键列不能为空,也不能重复。一个表只能有一个主键

 

 

79、什么是外键,它和外键约束有什么区别

答:一个表中的某个字段是另外一个表中的主键,该字段被称为外键。外键约束:约束了主键所在表中的记录不能在外键表存在的情况下直接删除,强行要求从表记录的外键必须引用主表记录的主键

删除有两种方式:1 级联删除:将主表记录对应的从表记录先删除,在删除主表记录

                     2 外键设空:讲主表记录对应的从表记录的外键设置为null,在删除主表记录

区别:1 外键是指从表的某列与主表的某列有存在依赖关系

       2 外键约束市值在外键关联主键上强制加上一个约束,如果违反约束,则不允许该条数据的修改,注意:没有外键约束不等于没有外键

 

 

 

80、增、删、改、查的基本SQL语句

答:insert into t_table 增加

   Delect from t_table where t_name=”” 删除

  Update t_table set t_name= ‘””

Select* from t_table

 

81、DELETE和TRUNCATE的区别

答:delete 可以会记录日志,可以恢复数据。 Truncate 不会记录日志,不可以恢复数据,执行效率高

 

83、排除重复记录用什么关键字?如何限制查询数据的返回限定行数?

答: distinct   limit

 

84、如何查询null值

答: select * from t_xxx where e_name is null;

 

 

85、SQL语句的聚合函数有哪些?

答:max():计算某列的最大值

min():计算某列的最小值

sum(): 获取单个列的合计值

avg():计算某个列的平均值 ( avg 不会把值为null 的加入计算中)

--如果要计算为null值的元素 sum()/count(*)

count():统计行数量,count(*) 统计所有的记录,count(字段)统计符合该字段的非空记录,count(case when  then end) 条件筛选统计

 

需要注意的是,函数和后面的括号之间不要有空格

 

 

86、在分组语句中,查询的列可以有哪些?

答:能查询的字段只能是分组字段和聚合函数

 

 

87、where和having的区别

答:where 执行在运行分组前,因此不能执行任何聚合函数

having执行在运行分组后,只能用在使用聚合函数的过滤

 

 

88、描述SQL查询语句执行顺序

答:fromàwhereàgroup byàselectàhavingàorder by

 

 

89、内连接和外连接区别

答:内联接 是指使用比较运算符,根据每个表共有的列的值匹配两个表中的行

外联接 是指不管有没有匹配,被定义了外联接的表数据都要出现在结果中

 

 

90、什么是JDBC

答:是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成。

  - 是java连接数据库的一套规范,该规范中定义了一系列的接口,由数据库厂商提供接口实现类,由开发者根据接口,调用实现类的方法。这样开发者就可以屏蔽不同数据库的差异,无论连接什么数据库,对数据库做什么样的操作,都是一套API。

 

91、JDBC开发流程

答:加载驱动建立联接,操作SQL语句,关闭连接

 

92、什么是SQL注入

答:SQL注入,在执行SQL语句时,如果以拼接字符串方式设置值,如果在值中有SQL语句的关键字或非法字符或语句,可能会造成执行结果不正确或执行失败的情况。这就叫SQL注入。

 

 

 

93、 Statement和PreparedStatement的区别

答:1.Statement 是PreparedStatement的父类

2.Statement在执行SQL语句,只能以拼接字符串的方式设置值。由于每一次的值都不一样,所以在执行SQL语句时,都会将SQL语句重新编译,效率较低。而 PreparedStatement 提供占位符的方式,SQL语句不用每一次执行都进行编译,执行效率较高。

3.Statement 在执行SQL语句时,由于采用字符串方式设置值,所以容易造成SQL注入,而

PreparedStatement使用占位符方式设置值,无论是什么值都当字符串处理,不会造成SQL注入

 

 

94、 什么是三层架构(关注点分明)

持久层、业务层、表现层

持久层:

完成数据库的操作。采用DAO模式,建立实体类和数据库进行映射,也就是那个类对应哪个表,那个属性对应哪个列。而持久层的目的就是完成关系数据和对象数据的转换!

 

业务层 

完成业务处理。采用事务脚本模式。将一个业务中所有的业务操作封装成一个方法。保证该方法中所有数据库更新操作同时成功或同时失败。

 

表现层

完成数据的展示 采用MVC模式

M:模型:也就是实体类,完成数据的封装和数据的传输

V:视图,也就是GUI窗体,完成数据的展示

C:控制,也就是事件,完成业务方法的调用和业务流程控制

 

层与层之间,采用接口模式做耦合,这样,当其中一个层的组件发生更改和替换的时候,不会影响别的层的组件的使用。

 

用户—》表现层---接口---》业务层---接口---》持久层-----》DB(数据库) 最接近用户的是低层

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尊敬的评委老师,大家好,我是来自某某公司的某某,今天很荣幸能够在这里进行软件开发转正答辩,以下是我的答辩报告。 一、项目背景 某某公司是一家专注于软件开发的企业,我在公司担任软件开发工程师,主要负责某某项目的开发和维护。该项目是一款基于Web的在线考试系统,主要目标用户为学校和培训机构。 二、项目任务 在项目开发过程中,我主要负责以下任务: 1.需求分析:与客户沟通,收集需求,编写需求分析文档。 2.系统设计:根据需求分析文档进行系统设计,包括数据库设计、业务流程设计等。 3.编码实现:根据系统设计文档进行编码实现,包括前端页面开发、后端业务逻辑编写等。 4.测试调试:进行单元测试、集成测试和系统测试,确保系统的质量和稳定性。 5.项目维护:对已上线的系统进行维护和优化,解决用户反馈的问题。 三、项目成果 在我参与开发的某某项目中,取得了以下成果: 1.系统功能完善:实现了在线考试、试管理、成绩统计等核心功能,满足了客户的需求。 2.性能优化:对系统进行了性能优化,大大提高了系统的响应速度和并发能力。 3.代码规范:在编写代码时,遵循了公司的编码规范,提高了代码的可读性和可维护性。 4.问题解决:及时解决了用户反馈的问题,提高了用户满意度。 5.团队协作:与团队成员积极沟通和协作,促进了项目的顺利完成。 四、个人感悟 在项目开发过程中,我深刻认识到了作为一名软件开发工程师的责任和使命。我们的工作不仅仅是编写代码,更重要的是要为用户提供优质的服务和体验。同时,我也意识到了团队合作的重要性,只有通过相互协作和支持,才能实现项目的成功。 五、结束语 在未来的工作中,我将继续努力学习和提升自己的技术水平,为公司和用户提供更好的服务。我相信,在公司的指导和支持下,我能够更好地完成自己的工作,为公司的发展做出贡献。 谢谢评委老师的聆听。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值