一、 基础知识部分(每题2分,共40分)
- 抽象类和接口的区别
答案 |
1) 接口:inerface 纯抽象的类,里面不能有任何实现的成员;接口是某一类通用功能的描述。和子类没有必然的联系。 2) 抽象类:abstract 实现和非实现成员都可以有;抽象类是子类的基类,它是子类的通用特征的描述 |
- 表达式float f=3.4对吗?如果不对,请说明原因
答案 |
1) 不对 2) 在c#中,应为 float f = 3.4f 或者 float f = 3; |
- 列举一下public,private,protected以及未声明修饰符之间的区别
答案 |
Public 公有,其他类都可以访问 Protected 保护,只有本类和子类可以访问 Private 私有,只有本类可以使用 Internal 内部,本程序集中的类可以使用。 |
- 试写出&与&&有什么区别
答案 |
&是java中的位逻辑运算: |
- Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
答案 |
Override:覆盖,是父类与子类之间多态性的一种表现,如果子类中定义的某方法与父类有相同的名称和参数,我们说该方法被重写 |
- 访问修饰符都有哪些?
答案 |
Public 公有,其他类都可以访问 Protected 保护,只有本类和子类可以访问 Private 私有,只有本类可以使用 Internal 内部,本程序集中的类可以使用。 |
- Try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
答案 |
finally会执行,在return 前执行. |
- short a = 1,a = a+1 有什么错?short a = 1, a += 1有什么错?
答案 |
1)a=a+1中的1要做强制类型转换为short。 2)没有错 |
- 委托是什么,事件跟委托是不是一回事?
答案 |
委托是一种传递消息的机制,可以将方法作为参数传递 事件是一种特殊的委托 |
- net中读写数据库需要用到那些类?他们的作用?
答案 |
SqlConnection 连接数据库 SqlCommand 执行Sql语句或存储过程 SqlDataReader 实现对数据表记录向前只读 SqlDataAapter 执行Sql语句或存储过程 |
- DataSet和DataReader的区别是什么?
答案 |
DataSet提供一个内存中数据的关系表示形式,一整套包括一些表在内的数据(这些表包含数据、对数据进行排序并约束数据),以及表之间的关系。DataReader提供一个来自数据库的快速、仅向前、只读数据流。 |
- string和stringBuffer区别是什么?
答案 |
StringBuffer是可变的而String是不可变的. |
- 左联接在什么时候应用?
答案 |
需要显示左表中所有数据,右表中对应数据. |
- 说说delete from tableA与truncate table tableA的区别。
答案 |
1.delete是数据操作语言,操作会写入日志,在未提交之前可以回滚;truncate是数据定义语言,不写入日志,不可回滚 2.truncate执行效率比delete高 3.delete可以根据条件删除数据;truncate会删除表中所有的记录 |
- 引用和值类型的区别,请用代码说明?
答案 |
声明一个值类型变量,编译器会在栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。 引用类型的实例分配在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址, 1:public class Person 2: { 3: public string Name { get; set; } 4: public int Age { get; set; } 5: } 6: 7: public static class ReferenceAndValue 8: { 9: public static void Demonstration() 10: { 11: Person zerocool = new Person { Name = "ZeroCool", Age = 25 }; 12: Person anders = new Person { Name = "Anders", Age = 47 }; 13: 14: int age = zerocool.Age; 15: zerocool.Age = 22; 16: 17: Person guru = anders; 18: anders.Name = "Anders Hejlsberg"; 19: 20: Console.WriteLine("zerocool's age:\t{0}", zerocool.Age); 21: Console.WriteLine("age's value:\t{0}", age); 22: Console.WriteLine("anders' name:\t{0}", anders.Name); 23: Console.WriteLine("guru' name:\t{0}", guru.Name); 24: } 25: } |
- 程序部署在tomcat,weblogic那个目录里?
答案 |
1) Webapps 2) Domain |
- JSP的内置对象有哪些?请写出对象名及常用的方法。
答案 |
request: 该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,既使用该对象可以获取用户提交的信息。 当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理。首先,将获取的 字符串用ISO-8859-1进行编码,并将编码存发到一个字节数组中,然后再将这个数组转化为字符串对象即可。 例: String textContent=request.getParameter("boy"); byte b[]=textContent.getBytes("ISO-8859-1"); textContent=new String(b); request常用的方法: ※getParameter(String strTextName) 获取表单提交的信息。 例:String strName=request.getParameter("name"); ※getProtocol() 获取客户使用的协议。 例:String strProtocol=request.getProtocol(); ※getServletPath() 获取客户提交信息的页面。 例:String strServlet=request.getServletPath(); ※getMethod() 获取客户提交信息的方式。 ※getHeade() 获取HTTP头文件中的accept、accept-encoding和Host的值。 例 String strHeade=request.getHeader("accept"); ※getRermoteAddr() 获取客户的IP地址。 ※getRemoteHost() 获取客户机的名称。 ※getServerName() 获取服务器名称。 ※getServerPort() 获取服务器的端口号。 ※getParameterNames() 获取客户端提交的所有参数的名字。 ************ 1.2:Response ************ 对客户端发出的请求作出动态的响应,向客户端发送数据 ※setContentType() 动态响应页面用page指令设置的contentType属性 例:response.setContentType(String strCT); 注:参数strCT可取"text/html","application/x-msexcel","application/msword"等。 ※sendRedirect() 实现客户的重定向 例:response.sendRedirect(strURL); ************ 1.3:Session ************ JSP页面被装载时自动创建,完成会话期管理。 ※public String getId() 获取Session对象编号 ※public void setAttribute(String key,Object objS)将参数Object指定的对象obj添加岛Session对象 ※public Object getAttribute(String key) 获取Session对象中含有关键字的对象。 ※public Boolean isNew() 判断是否时一个新的客户。 ************ 1.4:Application ************ 服务器启动后就产生了Application对象,一直到服务器关闭,所有的客户端共享这个内置的 Application对象。 ※setAttribute(String key,Object objA)将参数objA添加到Application对象中 ※getAttribute(String key)获取指定关键字Application对象中对象。 ************ 1.5:Out ************ 一个输出流,用来向客户端输出数据。 ※out.ptint() 输出各种类型数据 ※out.newLine() 输出一个换行符 ※out.close() 关闭流 ************ 1.6:Cookie ************ Cookie是Web服务器保存在客户端的一段文本信息,并且允许Web服务器在以后的客户端访问时取回它 是以“关键字key=值value”格式存储的。 ※Cookie("userName","john") 构造函数,创建Cookie对象。 ※response.addCookie(cookie) 将Cookie对象传送到客户端 ※request.getCookies() 获取保存到客户端的Cookie对象数组。 例: Cookie[] cookieArray= request.getcookies(); if(null!=cookieArray) for(int i=0;i<cookieArray.length;i++) if("userName".equale(cookieArray[i].getName())) out.prinln(cookieArray[i].getValue()); ※setMaxAge(intTime) 设置Cookie对象的有效时间,intTime为时间 ************ 1.7:pageContext ************ 页面上下文对象 ************ 1.8:Config ************ 配置对象 ************ 1.9:Page ************ 页面对象 ************ 1.10:Exception ************ 例外对象 |
- final ,finally,finalsize的区别是什么?
答案 |
final修饰符(关键字),如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。方法的参数被final修饰表示在方法体内,该参数的值不可以被修改。 private final String ss = "ss"; public final void m(){ } public String m2(final String param){ } finally在异常处理时提供finally块来执行任何清除操作。无论有没有异常被抛出、捕捉,finally块都会被执行。 finalize是方法名。Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。 |
- Vector与ArrayList区别是什么?
答案 |
Vector : 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能走出Array的限制。性能也就不可能超越Array。所以,在可能的情况下,我们要多运用Array。另外很重要的一点就是Vector是“sychronized”的,这个也是Vector和ArrayList的唯一的区别。 ArrayList:同Vector一样是一个基于Array上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。 |
- List、Map、Set按存储方式说说都是怎么存储的?
答案 |
List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。 Set接口也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法,Arrays则是对一个数组进行类似的操作。 Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。Map有两种比较常用的实现:HashMap和TreeMap。HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单,用pub(Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象。 |
二、 编程题(12题4分,最后1题5分,其余每题2分。共35分)
1. 手写一个表单内容包括 ‘用户名 text’ ‘年龄 text’ ‘性别 单选 默认没有选中’ ‘提交按钮’ ‘重置按钮’
答案 |
<form action=”” method=”post”> <input type=”text” name=”txtName” > <input type=”text” name=”txtAge” > <input type=”radio” name=”rGender”/> <input type=”submit” > <input type=”reset” > </form> |
2. 手写一个表格, 第一行2列, 第二行1列
答案 |
<table style=”100px; height:100px” > <tr> <td>1</td><td>2</td> </tr> <tr> <td colspan=”2”>合并</td> </tr> </table> |
3. 请声明一个有100个元素的数组
答案 |
1) String[] arr = new String[100]; 2) Array arr = Array.CreateIntence(typeof(string),100); 注:Array类是所有数组的父类 |
4. x=4,y=6在不声明新变量的情况下交换x,y的值
答案 |
Int x = 4; Int y = 6; X+=y; Y = x – y ; X = x- y ; |
5. 写一段程序,把 this is a apple 变成 apple a is this 这种形式
答案 |
string str = "this is a apple"; string[] strs = str.Split(' '); string output = ""; for (int i = strs.Length - 1; i >= 0; i--) { output += strs[i] + " "; } if (output.Length > 0) { output = output.Substring(0, output.Length - 1); } str = output; |
6. 编写一个类,求一元二次方程的实根
答案 |
x = double.Parse(a.Text); y = double.Parse(b.Text); z = double.Parse(c.Text); if (x == 0) { if(y!=0) { n1 = z / y; x1.Text = n1.ToString(); //y1.Text = n2.ToString(); } if(y==0&&z!=0) MessageBox.Show("b=0 无解", "wujie",MessageBoxButtons.OK, MessageBoxIcon.Warning); if(y==0&&z==0) MessageBox.Show("无数组解", "00",MessageBoxButtons.OK); } if(x!=0) { if (y * y - 4 * x * z >= 0) { n1 = (-y + Math.Sqrt(y * y - 4 * x * z)) / (2 * x); n2 = (-y - Math.Sqrt(y * y - 4 * x * z)) / (2 * x); x1.Text = n1.ToString(); y1.Text = n2.ToString(); } else { MessageBox.Show("无解", "wujie",MessageBoxButtons.OK, MessageBoxIcon.Warning); } } |
7. 使用C#语言写出一个单例模式类
答案 |
Public class SingleClass { Private SingleClass() {} Static SingleClass objClass= null; Public static SingleClass GetObject() { If(objClass!=null) { objClass = new SingleClass(); } Return objClass; } } |
8. 求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
答案 |
int Num = this.TextBox1.Text.ToString() ; |
9. 写出使用javascript进行页面跳转的几种方式?
答案 |
1、location.href="a.jsp" 2、window.location='a.jsp' |
10.用一条SQL语句将第一和第二张表连接成第三张表
答案 |
select * from A union all select * from B ----2个表的全部记录(包括重复的,不排序) or select * from A union select * from B -----排序并去掉重复的记录 |
11.写出正则表达式只许输入整数
"^-?\d+$"
12.写一个完整的DAO层接口,用来对会员信息进行添删改查操作
13.查询出Test表中ID重复三次以上的记录
答案 |
select * from test where id in (select id from test group by id having count(*)>=3) |
14.索引列 sal SQL语句:select * from product where sal*12<5000; 优化此语句并简述原因
答案 |
select * from product where sal<5000/12 计算和函数会使索引列失效,因此改为不对索引列进行计算,就可以利用到索引列,提高查询效率 |
15.根据以下表,完成sql语句
表S |
||||||||
字段名 |
字段描述 |
|
类型 |
|
是否空 |
|||
stno |
学号 |
|
int |
|
not null |
|||
stuname |
stuname 姓名 |
|
varchar2 |
|
not null |
|||
class |
班级 |
|
varchar2 |
|
null |
|||
busary |
奖学金 |
|
int |
|
null |
|||
表C |
||||||||
字段名 |
字段描述 |
|
类型 |
|
是否空 |
|||
classID |
课程编号 |
|
int |
|
not null |
|||
Score |
分数 |
|
int |
|
null |
|||
表SC |
||||||||
字段名 |
字段描述 |
|
类型 |
|
是否空 |
|||
stno |
学号 |
|
int |
|
not null |
|||
classID |
课程编号 |
|
int |
|
not null |
|||
1查询没有奖学金,但是至少有一们课的成绩在80分以上
|
||||||||
2查询成绩曾100分,但是没奖学金,并把奖学金改为300
|
||||||||
3查询张涛选学,而李明没有选学的课程
|
||||||||
4定义一个视图 查询奖学金总额大于3000(包含3000)的班级
|
三、 论述题(每题5分)
- 介绍一下你在项目中经常遇到的几种异常(至少两种以上)
答案 |
3) 连接数据库失败(数据库连接串有问题) 4) 未将对象引用到对象的实例 (某些对象在使用过程中,未判断是否等于null,然后就直接调用方法或者属性) |
- 介绍几种你熟悉的设计模式,写出原理及应用环境
答案 |
1)Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。用于可能使用多种数据源的情况。 2)Singleton:保证一个类仅有一个实例,并提供一个访问它的全局访问点。用于一些工具类,如数据库操作类。 3)Iterator:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。 如集合中类的枚举方法 |
- 简要谈一下您对微软NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
答案 |
ASP.NET Web 服务的基础结构是通过将SOAP消息映射到Web方法调用,为Web服务提供了简单的API。通过提供一种非常简单的编程模型 (基于将 SOAP 消息交换映射到方法调用),它实现了此机制。ASP.NET Web 服务的客户端不需要了解用于创建它们的平台、对象模型或编程语言。而服务也不需要了解向它们发送消息的客户端。唯一的要求是:双方都要认可正在创建和使用的 SOAP 消息的格式,该格式是由使用 WSDL 和 XML 架构 (XSD) 表示的 Web 服务合约定义来定义的。 .NET Remoting 为分布式对象提供了一个基础结构。它使用既灵活又可扩展的管线向远程进程提供 .NET 的完全对象语义。ASP.NET Web 服务基于消息传递提供非常简单的编程模型,而 .NET Remoting 提供较为复杂的功能,包括支持通过值或引用传递对象、回调,以及多对象激活和生命周期管理策略等。要使用 .NET Remoting,客户端需要了解所有这些详细信息,简而言之,需要使用 .NET 建立客户端。(或者使用支持 .NET Remoting 的其他框架)。 |
- 谈谈你对AJAX的优点的理解
- 谈谈你对Struts或者MVC的理解
答案 |
Struts实现了mvc模式.其中,自定义标签和ActionForm实现了视图层,ActionServlet,struts-Config.xml,action,RequestProcessor类实现了控制器.JavaBean实现了业务逻辑层. |