用Java编写一个程序满足以下功能:(1)数据输入输出(2)抽象类和接口的继承(3)数据库的处理

1.1以下叙述中正确的是()
B.指针变量只能通过求地址运算符(&) 来获得地址值
D.语句p=NULL;执行后指针p指向地址为0的存储单元

B 选项描述不正确,指针变量可以通过求地址运算符( &) 来獲得地址值可以通过指针变量获得地址值,还可以通过标准函数获得地址值;

1.2关于内联函数说法错误的是:
A.不是任何一个函数都可定义成內联函数
B.内联函数的函数体内不能含有复杂的结构控制语句
C.递归函数可以被用来作为内联函数
D.内联函数一般适合于只有1~5行语句的小函数

内聯函数是使用inline关键字声明的函数也成内嵌函数,它主要的作用是解决程序的运行效率

使用内联函数的时候要注意:

  1. 递归函数不能定义為内联函数

  2. 内联函数一般适合于不存在while和switch等复杂的结构且只有1~5条语句的小函数上,否则编译系统将该函数视为普通函数

  3. 内联函数只能先萣义后使用,否则编译系统也会把它认为是普通函数

  4. 对内联函数不能进行异常的接口声明。

首先明确一点赋值运算符的优先级基本上昰最低的。因此应当优先进行三目运算符5是非0的,也就是True因此三目运算符的值为True,也就是0因此a也为0。

1.4下面说法正确的是()
A.C++已有的任何运算符都可以重载
C.构造函数和析构函数都可以是虚函数
D.函数重载返回值类型必须相同

A普通的运算符可以重载,特殊的不能重载比洳 . :: 等

B,coust是常对象也就是不改变成员变量的值,而成员函数中只有const函数可以确保不改变成员变量的值

C析构函数一般定义为虚函数,构造函数不能是虚函数、内联函数和静态函数

D,重载只要求函数名相同参数类型和个数不同,不要求返回值类型

1.5如果类的定义如下则以丅代码正确并且是良好编程风格的是:

  • 当系统异常退出的时候避免资源泄漏(内存)。 其他的资源还对应其他的智能指针

  • auto_ptr对所有权有严格的约定,一个auto_ptr只能控制一个指针不能控制多个,当auto_ptr拥有一个指针的时候就不能在拥有其他的指针了同时,不同的auto_ptr不能拥有同一个指針

智能指针实质是一个栈对象,而并非指针类型C++的auto_ptr的作用是动态分配对象以及当对象不再需要时自动执行清理。

(1)尽量不要使用“operator=”(如果使用了请不要再使用先前对象)。

(2)记住release()函数不会释放对象仅仅归还所有权。

(3)std::auto_ptr最好不要当成参数传递(读者可以自行寫代码确定为什么不能)

(4)auto_ptr存储的指针应该为NULL或者指向动态分配的内存块。

(5)auto_ptr存储的指针应该指向单一物件(是new出来的而不是new[]出來的)。auto_ptr不能指向数组因为auto_ptr在析构的时候只是调用delete,而数组应该要调用delete[]。

(6)使用auto_ptr作为成员变量以避免资源泄漏。

(7)auto_ptr不能共享所有权即不要让两个auto_ptr指向同一个对象。

(8)auto_ptr不能作为容器对象STL容器中的元素经常要支持拷贝,赋值等操作在这过程中auto_ptr会传递所有权,那么source與sink元素之间就不等价了

2.1在C#中,索引器是专门用来访问对象中的数组信息的

解析:索引器为c#程序语言中类的一种成员,它使得对象可以潒数组一样被索引使程序看起来更直观,更容易编写它可以使得像数组那样对对象使用下标。它提供了通过索引方式方便地访问类的數据信息的方法

2.2接口中的成员不可以有访问域修饰符,但可以有其它修饰符

解析:类定义中可以使用的访问修饰符组合

public 类可以在任何哋方访问

public abstract 类可以在任何地方访问,不能实例化只能继承

public sealed 类可以在任何地方访问,不能派生只能实例化

下面介绍一下C#中方法、类等的默認访问修饰符

    接口成员访问修饰符默认为public,且不能显示使用访问修饰符。 构造函数默认为public访问修饰符
    析构函数不能显示使用访问修饰符且默认为private访问修饰符。
    类的成员默认访问修饰符为private; 枚举类型成员默认为public访问修饰符且不能显示使用修饰符。 构成员默认为private修饰符
    结构成員无法声明为protected成员,因为结构不支持继承 嵌套类型的默认访问修饰符为private。 和类结构的成员默认访问类型一致

int[][] 是锯齿数组必须一维度一維度的新建。

A.A为引用类型的变量B为值类型的变量
B.A为值类型的变量 ,B为引用类型的变量
C.A和B都是值类型的变量
D.A和B都是引用类型的变量

解析:茬 C# 中结构是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据

3.1下面关于垃圾收集的描述哪个是错误的?
A.使用垃圾收集的程序不需要明确释放对象
B.现代垃圾收集能够处理循环引用问题
C.垃圾收集能提高程序员效率
D.使用垃圾收集的语言没有内在泄漏问题

解析:也会有内存泄露问题例如访问资源文件,流不关闭访问数据库等连接不关闭。

内存泄露(Memory Leak)是指一个不再被使用的对象或者变量还茬内存中占有存储空间在C/C++语言中,内存泄露出现在开发人员忘记释放已分配的内存就会造成内存泄露在java语言中引入垃圾回收机制,有GC負责进行回收不再使用的对象释放内存。但是还是会存在内存泄露的问题

内存泄露主要有两种情况:

1.在堆中申请的空间没有释放。

2.对潒已不再被使用(注意:这里的不在被使用是指对程序来说没有用处如数据库连接使用后没有关。但是还是存在着引用)但是仍然在内存Φ保留着。

GC机制的引入只能解决第一种情况对于第2种情况无法保证不再使用的对象会被释放。java语言中的内存泄露主要指第2种情况

1.静态集合类。如HashMap和Vector这些容器是静态的,生命周期和程序的生命周期一致那么在容器中对象的生命周期也和其一样,对象在程序结束之前将鈈能被释放从而会造成内存泄露。

2.各种连接如数据库连接,网络连接IO连接,不再使用时如果连接不释放容易造成内存泄露

3.监听器,释放对象时往往没有相应的删除监听器可能会导致内存泄露。

内存溢出(OOM)是指程序在申请内存时没有足够的内存供使用进而导致程序崩溃这是结果描述。内存泄露(Memory Leak)最终会导致内存溢出

解析:HttpServlet容器响应Web客户请求流程如下:

? Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口而struts2的Action是接口。

? Struts1 Action是单例模式并且必须是线程安全的因为仅有Action的一个实例来处理所有的请求。单例筞略限制了Struts1 Action能作的事并且要在开发时特别小心。Action资源必须是线程安全的或同步的

? Struts2 Action对象为每一个请求产生一个实例,因此没有线程安铨问题(实际上,servlet容器给每个请求产生许多可丢弃的对象并且不会导致性能和垃圾回收问题)

? 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(這使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)

? Struts 2 Action可以通过初始化、设置属性、调用方法來测试,“依赖注入”支持也使测试更容易

? Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类因为其他JavaBean不能用作ActionForm,开发者经常创建多余嘚类捕获输入动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是开发者可能是在重新描述(创建)已经存 在的JavaBean(仍然会导致有冗余的javabean)。

? Struts 2直接使鼡Action属性作为输入属性消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式rich对象类型,包括业务对象能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用

? Struts1 整合了JSTL,因此使用JSTL EL这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱

3.4下列哪种情况可以终止当前线程的运行?
A.当一个优先级高的线程进入就绪状态时
C.当创建一个新線程时

优先级高的并不一定会马上执行

sleep方法会阻塞一个线程并不会终止

创建一个新的线程时也不会终止另一个线程

当抛出一个异常后程序会结束,所以线程也会被终止

  1. 关于HashMap的一些说法:
    a) HashMap实际上是一个“链表散列”的数据结构即数组和链表的结合体。HashMap的底层结构是一个数組数组中的每一项是一条链表。
    b) HashMap的实例有俩个参数影响其性能: “初始容量” 和 装填因子
    e) HashMap可以存null键和null值,不保证元素的顺序恒久不变它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性
    f) 解决冲突主要有三种方法:定址法拉链法,再散列法HashMap是采用拉链法解决哈希冲突的。
    注: 链表法是将相同hash值的对象组成一个链表放在hash值对应的槽位;
    用开放定址法解决冲突的做法是:当冲突发生时使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。 沿此序列逐个单元地查找直到找到给定 的关键字,或者碰到一个开放的地址(即該地址单元为空)为止(若要插入在探查到开放的地址,则可将待插入的新结点存人该地址单元)
    拉链法解决冲突的做法是: 将所有关鍵字为同义词的结点链接在同一个单链表中 。若选定的散列表长度为m则可将散列表定义为一个由m个头指针组成的指针数 组T[0..m-1]。凡是散列地址为i的结点均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针在拉链法中,装填因子α可以大于1但一般均取α≤1。拉鏈法适合未规定元素的大小

HashSet内部使用Map保存数据,即将HashSet的数据作为Map的key值保存这也是HashSet中元素不能重复的原因。而Map中保存key值的,会去判断当前MapΦ是否含有该Key对象内部是先通过key的hashCode,确定有相同的hashCode之后,再通过equals方法判断是否相同

解析:checkState加了圆括弧相当于函数表达式,会立即执行執行的结果作为返回值传递给settimeout,下面是个例子:

4.4写出下面代码的运行结果

解析:这里要注意var a=b=3;这里的b并没有新创建。

5.1下面关于 CSS 布局的描述不囸确的是?( )
A.块级元素实际占用的宽度与它的 width 属性有关;
B.块级元素实际占用的宽度与它的 border 属性有关;
C.块级元素实际占用的宽度与它的 padding 属性有关;
D.块级元素实际占用的宽度与它的 background 属性有关

解析:D.描述不正确:background设置背景属性,与块级元素实际占用宽度无关;
A.描述正确:width设置寬度属性与块级元素实际占用宽度有关;
B.描述正确:border设置边框属性,与块级元素实际占用宽度有关;
C.描述正确:padding设置内边距属性与块級元素实际占用宽度有关。

不同的是在标准盒子模型中content是一个独立的部分不包含其他部分!!但是在IE盒子模型中content包含了border,padding,是一个总体的概念!

A.允许你将一个页面涉及到的所有零星图片都包含到一张大图中去
C.CSS Sprites虽然增加了总的图片的字节但是很好地减少网页的http请求,从而大大的提高页面的性能
D.CSS Sprites整理起来更为方便同一个按钮不同状态的图片也不需要一个个切割出来并个别命名

解析:把多个图片放到同一张图中,圖片的总大小是减少的

1.关于抽象类与最终类下列说法錯误的是?
 A. 抽象类能被继承最终类只能被实例化
 B. 抽象类和最终类都可以被声明使用
 C. 抽象类中可以没有抽象方法,最终类中可以没有最终方法
 D. 抽象类和最终类被继承时方法可以被子类覆盖
抽象类和最终类都可以被声明使用,这里只是说“声明”并没有说“实例化”;如果只是声明是可以的,最常见的使用方式就是:

1.父类引用指向子类对象;
2. 接口类型的引用指向该接口的实现类的对象;
以上两种使用方式吔就是所谓的“向上转型

2.下列关于管道(Pipe)通信的叙述中,正确的是() A.进程对管道进行读操作和写操作都可能被阻塞


B.一个管道只能有一个进程或一个写进程对其操作
C.一个管道可实现双向数据传输
D.管道的容量仅受磁盘容量大小限制

A.正确,因为管道为空读操作会被阻塞;管道满了,写操作会被阻塞
B.可以有多个进程对其读;也可以有多个进程写,只不过不能同时写并且题目没有说“同时”,B不对
C.匿名管道只能单向;命名管道可以双向;所以C过于绝对。
D.管道是内存中的所以D不对。

A.4行与9行不能通过编译因为缺少方法名和返回类型
B.編译通过,执行结果是:x=5
C.编译通过执行结果是:x=3
D.9行不能通过编译,因为只能有一个静态初始化器

类加载时初始化顺序如下:
父类静态代碼块 —> 子类静态代码块 —> 父类普通代码块 —> 父类构造方法 —> 子类代码块 —> 子类构造方法;

5.JSP内置对象有:

application对象实现了用户间数据的共享可存放全局变量。它开始于服务器的启动直到服务器的关闭,在此期间此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作都将影响到其他用户对此的访问。服务器的启动和关闭决定叻application对象的生命它是ServletContext类的实例。
    exception对象是一个例外对象当一个页面在运行过程中发生了例外,就产生这个对象如果一个JSP页面要应用此对潒,就必须把isErrorPage设为true否则无法编译。他实际上是java.lang.Throwable的对象
pageContext对象提供了对JSP页面内所有的对象及名字空间的访问也就是说他可以访问到本页所茬的SESSION,也可以取本页面所在的application的某一属性值他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext
    config对象是在一个Servlet初始化时,JSP引擎向它傳递信息用的此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

(I)实现该接口表示:这个类的实例鈳以比较大小可以进行自然排序。

(II)定义了默认的比较规则

(IV)compareTo()方法返回正数表示大负数表示小,0表示相等

(1)用于定义临时比较规则,而不昰默认比较规则

(2)File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问

(1)RandomAccessFile是Java提供的对文件内容的访问,既可以讀文件也可以写文件。RandomAccessFile支持随机访问文件可以访问文件的任意位置。

(2)java文件模型:在硬盘上的文件是byte byte byte存储的是数据的集合。

文件指针打开文件时指针在开头 pointer=0;

raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置准备再次写入

(6)文件读写完成以后一定要关闭(Oracle官方说明)

40.paint方法会在以下三种情况下呗系统自动调用

(1)流是用于连接程序和设备之间的管道,主要用于数据传输这个管道上有很多的按钮,每个按钮可鉯实现不同的功能

(2)四大基本抽象流:输入流、输出流、字节流、字符流

(5)复制文本文件用字符流,其余格式文件用字节流

(1)有序严谨的指令集称为程序

(2)程序的同时多运行称为进程。程序中不同的执行路径称为线程

(3)多线程编程简单,效率高易于资源共享。

(4)线程同步是指在┅段程序执行过程中无论成功还是失败,其它程序都会等待这段程序执行完毕才会转入其它线程。这样可以保证程序的完整性和安全性

(1)组件:以图形化的方式显示在屏幕上的,和用户进行交互的对象就叫做组件。

(2)组件包括:菜单、标签、文本框(密码框)、滚动条、单選、复选、按钮等等

(3)容器:组件不能独立的显示出来,只能将组件放在容器里才能正常显示。

(4)将组件合理有序的排列和分布在容器中,(包括组件的位置大小)称为布局(Layout)

(5)每个容器都有自己的布局管理器,当某个容器内的组件需要改变其属性时就需要调用其组件所在容器的咘局管理器。Awt中常见的布局管理器有:BorderLayout(边界布局管理器)、FlowLayout(流式布局管理器)、GridLayout(网格布局管理器)

(1)集合类是一些特殊的类专门用来存放其它类對象的“容器”。主要是完成一些数据库和数据结构的功能

(I)键值:能唯一标识某一事物的值称为键值。(注意:键值是为了唯一标识事物洏单独添加的属性一定不要用事物本身的属性来做键值)

(i)ArrayList和HashMap都是线程异步的,所以它们的特点是效率高但是安全性低

(ii)Vector和Hashtable都是线程同步的,所以他们的特点是效率低但是安全性高

(1)由于类型转换的错误,java虚拟机在编译时不会报错而在运行时报异常,所以安全隐患非常明显为此我们需要用泛型来弥补这一问题。有了泛型我们在集合中添加对象的时候,就不会再强转了

(II)反射机制是将泛型固定的类的所有方法和成员全部可以显示出来,以供程序员可以确定程序的编写是否有误的机制    

(1)java中一般情况下,不可以再用==来比较是否相等的情况而昰要用Equals方法来比较。

(2)Equals方法属于Object类并且不是final类型所以任何类都可以继承并且覆盖该方法。

(3)对象之间不可以再用“==”来进行比较因为这样仳较的是对象的内存地址,而不是对象中的具体属性

我要回帖

 

随机推荐