java基础

来源:互联网 发布:java运维框架 编辑:程序博客网 时间:2024/05/16 09:31

1.    1. class super {
2. public float getNum() {return 3.0f;}
3. )
4.
5. public class Sub extends Super {
6.
7. )
Which method, placed at line 6, will cause a compiler error?
A. public float getNum() {return 4.0f; }
B. public void getNum () { }
C. public void getNum (double d) { }
D. public double getNum (float d) {retrun 4.0f; }

2.         1.   public   class   Test   {  
  2.   static   boolean   foo(char   c)   {  
  3.   System.out.print(c);  
  4.   return   true;  
  5.   }  
  6.   public   static   void   main(   String[]   argv   )   {  
  7.   int   i   =0;  
  8.   for   (   foo('A');   foo('B')&&(i<2);   foo('C')){  
  9.   i++   ;  
  10.   foo('D');  
  12.   }  
  13.   }  
  14.   }  
  What   is   the   result?  
  A.   ABDCBDCB  
  B.   ABCDABCD  
  C.   Compilation   fails.  
  D.   An   exception   is   thrown   at   runtime.

3.       public class Test {
    public static void changeStr(String str) {
        str = "welcome";
        System.out.println(str);
    }  
    public static void main(String[] args) {
       String str = "1234";
        changeStr(str);
        System.out.println(str);
    }
}
 Please   write   the   output   result  
 A .    welcome
        1234

 B .    welcome
       Welcome
C .    1234
        1234
 D .    1234
        welcome

4.  关于下述程序:

public class Test3

{

public static void main(String[] agrs)

{

byte b = 2,e =3;       //1

byte f = b+e;         //2

System.out.println(f);  //3

}

}

描述正确的是 

A.      编译通过,运行时打印出5

B.      编译通过,运行时打印出23

C.      编译不通过,在//2处有错误,因为此处f必须是一个int类型的变量。

D.      编译不通过,在//1处有错误,不能这样定义变量

5.  Java中,关于让垃圾回收器强制回收对象的说法中,正确的是(  )。

A.垃圾回收不能强制

B. 调用System.gc()方法

C. 调用System.gc()方法,并且将需要回收的对象引用作为参数传递给这个方法

D. 调用Runtime.gc()方法

6.  关于下述三个接口:

public interface IA

{

public void methodA();

}

 

public interface IB

{

public void methodB();

}

 

public interface IC extends IA,IB

{

public void methodA();

}

A.      接口IC不能通过编译,因为它继承了两个接口。

B.      接口IC不能通过编译,因为它定义了一个和IA中一样的方法methodA()

C.      接口IC不能通过编译,因为它继承了两个接口,并且还定义了一个和IA一样的methodA()方法。

D.      接口IC能够顺利通过编译。

7. 下列描述正确的是:(  

A.      hashCode()返回是对象在内存唯一的标识,对象不同,hashCode()返回值一定不同。

B.      hashCode()方法可以重写,但重写的逻辑要和equals()保持一致性。

C.      语句System.out.println("java"=="java");打印出的结果为“false”。

D.      HashSet容器在存放某一类的对象时,改变该类的hashCode()方法可能会影响到HashSet容器的效率

8. 下面哪项是默认情况下已经被加入到当前JSP页面,而不需要特殊声明(   )
   A.  java.lang.*                
   B.  java.servlet.*
   C.  java.util.*                  

   D.  java.servlet.http.*

9.  HTML中,<frameset cols=#>是用来指定()
a 混合分割
b 纵向分割
c 横向分割

d 任意分割

10. 1NF________规范为2NF
A.消除非主属性对码的部分函数依赖      
B.消除非主属性对码的传递函数依赖

C.消除主属性对码的部分和传递函数依赖 

D.消除非平凡且非函数依赖的多值依赖

 

11.  谈谈你对面向对象和面向过程的认识,什么是对象,什么是类,什么是oop

面向对象 是一种以事物为中心的编程思想

把软件组织成一系列离散的,合并了数据结构和行为的对象。面向对象的方法主要是把事物给对象化,对象包括属性与行为.当程序规模不是很大时,面向过程的方法还会体现出一种优势,因为程序的流程很清楚,按着模块与函数的方法可以很好的组织.

面向过程 是一种以事件为中心的编程思想。

就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.它考虑的是实际的实现.一般的面向过程是从上往下步步求精.所以面向过程最重要的是模块化的

对象 是一个实实在在存在的事物。“万事万物皆对象”。

  实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。

OOP Object Oriented Programming,面向对象的程序设计。所谓对象就是一个或一组数据以及处理这些数据的方法和过程的集合。面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。

 

12.  jdk1.41.5的区别,1.51.4的基础上增加了哪些新特性

1.   泛型

2   自动装箱/拆箱

3   for-each  

4   static   import  

5   变长参数

 

13.  说一说Java语言的面向对象的特性。

OO基本特征

定义

具体实现方式

优势

封装

隐藏实现细节,对外提供公共的访问接口

属性私有化、添加公有的settergetter方法

增强代码的可维护性

继承

从一个已有的类派生出新的类,子类具有父类的一般特性,以及自身特殊的特性

继承需要符合的关系:is-a

1、实现抽象(抽出像的部分)

2、增强代码的可复用性

多态

同一个实现接口,使用不同的实例而执行不同操作

通过Java接口/继承来定义统一的实现接口;通过方法重写为不同的实现类/子类定义不同的操作

增强代码的可扩展性、可维护性

 

14.  如果没有IDE环境,如何编写java程序,如果编译、解释、运行?如何将程序打成jar包?

15.  String str=new String("hello,你好"+"hello,你好");产生了几个对象?str.length()的为?str.getBytes().length为多少?

16. 简述接口和抽象类的区别。

Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的声明没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)

抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能被密封。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类

 

17. 谈谈final,finally,finallize 的区别。

1 final

final 定义的变量:

简单数据类型:数值不可变;

引用数据类型:变量的引用地址不可变;

 

final  定义的函数

不允许任何从此类继承的类来覆写这个方法,

但是继承仍然可以继承这个方法,也就是说可以直接使用

 

final 修饰的类

final类是无法被任何人继承的

2 finally:

finally 关键字是对 Java 异常处理模型的最佳补充。 finally 结构使代码总会执行,而不管有无异常发生。使用 finally 可以维护对象的内部状态,并可以清理非内存资源。

3 finalize

finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的

 

18. 谈谈overrideoverload的区别

Override,实现接口声明的所有方法或继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:
   1
、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
   2
、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
   3
、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
   4
、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
   

overload指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,JVM就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点:

1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int, float), 但是不能为fun(int, int));

2、不能通过访问权限、返回类型、抛出的异常进行重载;

3、方法的异常类型和数目不会对重载造成影响;

4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

 

 

19. 谈谈线程和进程的区别,及产生线程的几种方法

线程的创建:1、继承Thread类,重写run方法;

            2、实现Runnable接口,实现run方法、

 

20. 简述ListSetArrayListLinkedListHashMapHashtable的区别?

List也称作序列,它是一个有序可重复的Collection

Set是一个无序可重复的集合,内部排序。

 

HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。

Hashtable实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。

为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法

 

 

21.  简述Java中的异常处理机制, 列举你最常见到的runtime exception

JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类.

 

RuntimeException

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

 

22.  How you can force java Garbage Collection?

GC是垃圾收集的意思(Garbage Collection,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

 

23.  请编写一个字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,能够在读取的每行前面都加上有行号和冒号。

public void printFile(InputStream is) {

       try {

           //对流对象进行封装

           BufferedReader br=new BufferedReader(new InputStreamReader(is));

           //控制行号

           int index=0;

           String line=null;

           //读取文件的每一行内容

           while((line=br.readLine())!=null){

              index++;

              System.out.println(index+": "+line);

           }

       } catch (IOException e) {

           e.printStackTrace();

       }

    }

 

24.请在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递给该方法,如果传入的数组为null,应抛出IllegalArgumentException异常。在类的main方法中以各种可能出现的情况测试验证该方法编写得是否正确,例如,字符不存在,字符存在,传入的数组为null等。

/**

     * @param arr 要搜索的字符数组

     * @param ch  需查询的字符

     * @return    返回charr中第一次出现的下标,不存在则返回-1

     */

    public int indexOf(char[] arr,char ch){

       //字符数组为空,则抛出异常

       if(arr==null)

           throw new IllegalArgumentException();

       for (int i = 0; i < arr.length; i++) {

           //返回该字符在字符数组中第一次出现的下标

           if(ch==arr[i])

              return i;

       }

       //不存在则返回-1

       return -1;

    }

 

25. 编写了一个服务器端的程序实现在客户端输入字符然后在控制台上显示,直到输入"END"为止。

try {

           ServerSocket ss = new ServerSocket(10000);

           while (true) {

              final Socket s = ss.accept();

              new Thread() {

                  @Override

                  public void run() {

                     // TODO Auto-generated method stub

                     try {

                         BufferedReader br = new BufferedReader(

                                new InputStreamReader(s.getInputStream()));

                         String line = null;

                         while ((line = br.readLine()) != null) {

                            System.out.println("客户端:" + line);

                            if ("END".equals(line))

                                break;

                         }

                         br.close();

                         s.close();

                     } catch (IOException e) {

                         // TODO Auto-generated catch block

                         e.printStackTrace();

                     }

                  }

              };

           }

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

 

26. 编写sql语句:  
 
表结构:  
  1
        表名:g_cardapply  
 
字段(字段名/类型/长度)  
  g_applyno                 varchar       8
//申请单号(关键字)  
  g_applydate           bigint           8
//申请日期  
  g_state                 varchar           2
//申请状态  

  2
        表名:g_cardapplydetail  
 
字段(字段名/类型/长度)  
  g_applyno                 varchar           8
//申请单号(关键字)  
  g_name                 varchar           30
//申请人姓名  
  g_idcard                 varchar           18
//申请人身份证号  
  g_state                 varchar           2
//申请状态  
 
其中,两个表的关联字段为申请单号。  
 
题目:  
  1
)查询身份证号码为440401430103082的申请日期;
  2
)删除g_cardapplydetail表中所有姓李的记录。

1)      select a.g_applydate from g_cardapply a, g_cardapplydetail b where a.g_applyno=b.g_applyno;

2)   delete from g_cardapply a, g_cardapplydetail b where a.g_applyno=b.g_applyno and b.gname like ‘%’;

 

27. 写出JDBC的步骤,并用JDBC实现17题的问题1

28. 用单子模式按照连接池的原理创建一个数据源。

29.写一段JavaScript代码,利用正则表达式与String.split()方法,从"http://www.wepull.com/get.jsp?user=zxx&pass=123"这样的URL地址中提取出每个参数的名称和值。

<script>

    var str="http://www.wepull.com/get.jsp?user=zxx&pass=123";

    var url=str.split('/?');

    var args=url[1].split('&');

    for(var i=0;i<args.length;i++){

       var value=args[i].split('=');

       alert(value[0]+":"+value[1]);

    }

</script>

 

30. forwardredirect的区别,以及该如何使用它。

Forward:服务器端得跳转;

Redirect:客户端的跳转

 

31. 使用jsp代码和使用javascript代码 进行表单数据验证有什么不同?

Jsp代码:这是服务器端的验证,验证的数据需从客户端提交,服务器的Java代码进行验证;

Javacript:这是客户端的验证,需要验证的数据只需要从交给js代码。

 

32. 简述JSP内置对象及作用。

request       用户端请求,此请求会包含来自GET/POST请求的参数

response      网页传回用户端的回应

pageContext  网页的属性是在这里管理

session       与请求有关的会话期

application    servlet 正在执行的内容

config        servlet的构架部件

out           用来传送回应的输出   (用来向客户端输出数据)

page          JSP网页本身

exception     针对错误网页,未捕捉的例外 (异常)

 

33.说一说Servlet的生命周期。

服务器实例化一个servlet对象,容器运行其init方法,请求到达时运行其service方法,service方法根据请求的类型调用(doGetdoPost)方法,当服务器决定将实例销毁时调用其destory方法。

 

34.谈一谈你所知道的设计模式,解释一下模式的概念。什么是MVC

设计模式:

Factory(工厂模式)      Builder(建造模式),       Factory Method(工厂方法模式),

Prototype(原始模型模式),Singleton(单例模式)    Facade(门面模式),

Adapter(适配器模式)    Bridge(桥梁模式),        Composite(合成模式),

Decorator(装饰模式)    Flyweight(享元模式),     Proxy(代理模式)

Command(命令模式),      Interpreter(解释器模式), Visitor(访问者模式),

Iterator(迭代子模式),   Mediator(调停者模式),    Memento(备忘录模式),

Observer(观察者模式),   State(状态模式),         Strategy(策略模式),

Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)

MVC

 

模式Pattern)一词的指涉范围甚广,它标志了物件之间隐藏的规律关系,而这些物件并不必然是图像、图案,也可以是数字、抽象的关系、甚至思维的方式。模式强调的是形式上的规律,而非实质上的规律。

模式是前人积累的经验的抽象升华。简单地说,就是从不断重复出现的事件中发现和抽象出的规律,似解决问题的经验的总结。只要是一再重复出现的事物,就可能存在某种模式。

 

MVCModelViewController的简写。

"Model" 代表的是应用的业务逻辑 (通过JavaBeanEJB组件实现),

"View" 应用的表示面(由JSP页面产生),

"Controller" 提供应用的处理过程控制(一般是一个Servlet,通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

 

原创粉丝点击