一寸光阴一寸金,寸金难买寸光阴!

    

高亚科技公司软件开发笔试题目(附答案)

高亚科技公司软件开发笔试题目(附答案)

目录

问答题

  1. int和Integer的区别
  2. String和StringBuffer的区别
  3. 运行时异常和一般异常的区别
  4. final的意思
  5. error和exception的区别
  6. String s = new String("x"+"y"+"z")共创建多少个对象
  7. List,Set,Map是否继承Collection接口
  8. this()和super()的区别
  9. ArrayList和LinkListed的区别

编程题

  1. 第一题
  2. 第二题

数据库部分


int和Integer的区别

  1. Integer是int的包装类,int则是java的一种基本数据类型
  2. Integer变量必须实例化后才能使用,而int变量不需要
  3. Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
  4. Integer的默认值是null,int的默认值是0

String和StringBuffer的区别

JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。

String类表示内容不可改变的字符串。

StringBuffer类表示内容可以被修改的字符串。

1、当你知道字符数据要改变的时候就可以使用StringBuffer,也可以使用StringBuffers来动态构造字符数据。

2、String实现了equals方法,new String(“abc”).equals(new String(“abc”)的结果为true,而StringBuffer没有实现equals方法,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的结果为false。

举一个具体的例子来说明,我们要把1到100的所有数字拼起来,组成一个串。

StringBuffer sbf = new StringBuffer();  

for(int i=0;i<100;i++)

{
    sbf.append(i);
}

上面的代码效率很高,因为只创建了一个StringBuffer对象,而下面的代码效率很低,因为创建了101个对象。

String str = new String();  

for(int i=0;i<100;i++)

{
    str = str + i;
}

3、String覆盖了equals方法和hashCode方法,而StringBuffer没有覆盖equals方法和hashCode方法,所以,将StringBuffer对象存储进Java集合类中时会出现问题。

StringBuffer与StringBuilder的区别

StringBuffer和StringBuilder类都表示内容可以被修改的字符串,StringBuilder是线程不安全的,运行效率高,StringBuffer是线程安全的,运行效率相对较低。如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer。

运行时异常和一般异常的区别

运行时异常与一般异常区别:
一般异常表示程序运行过程中可能出现的非正常状态;运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

Throwable是Java错误处理的父类,有两个子类:Error和Exception。

Error:无法预期的严重错误,导致JVM虚拟机无法继续执行,几乎无法恢复捕捉的

Exception:可恢复捕捉的。java健壮程序的手段。

Java提供了两类主要的异常:runtime exception和checked exception (编译时被检查的异常)。

checked exception (编译时被检查的异常):JAVA编译器强制要求我们必需对出现的这些异常进行catch或throws。所以,面对这种异常不管我们是否愿意,只能写一大堆catch块或throws去处理可能的异常。 如IO异常,以及SQL异常等。

runtime exception:编译通过,但运行通不过,出现RuntimeException,通常是程序员出错。虚拟机接管会终止线程或主程序。如错误的类型转换、数组越界访问和访问空指针等~

final的意思

  1. 修饰变量:final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
  2. 修饰方法:final方法不能被子类方法覆盖,但可以被继承。
  3. 修饰类:final类不能被继承,没有子类,final类中所有方法都是final的。

error和exception的区别

Error类和Exception类的父类都是throwable类,
他们的区别是:
Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

String s = new String("x"+"y"+"z")共创建多少个对象

答:创建了一个,后面的"x","y","z"只是从字符串池里面取的,用完就释放了

List,Set,Map是否继承Collection接口

答:List,Set是,Map不是。

this()和super()的区别

super()与this()的区别主要有以下: 

不同点: 
1、super()主要是对父类构造函数的调用,this()是对重载构造函数的调用 
2、super()主要是在继承了父类的子类的构造函数中使用,是在不同类中的使用;this()主要是在同一类的不同构造函数中的使用 

相同点: 
1、super()和this()都必须在构造函数的第一行进行调用,否则就是错误的

ArrayList和LinkListed的区别

  1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
  2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
  3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

编程题

第一题

有一个包含N个Integer的向量(vector).它包含的Intger 可以是 1 到 N +1 之间任何一个,但是互不相同,也就是说vector 中不包含任何重复的值,因为有N个对象并且可能得值有N+1 个,所以有一个值没有包含在这个vector中,请编程 找到这个vector中没有包含的那个整数,(注意:只可以使用Vector.get(),Vector.getSize())

代码如下:

public int find(Vector<Integer> v){
     int n = v.size();
     int result = 0;
     
     for(int i=1;i<=n+1;i++){
      boolean isExist = false;
      
      for(int j=0;j<n;j++){
       if(i == v.get(j)){
        isExist = true;
        break;
       }
      }
      
      if(isExist == false){
       result = i;
       break;
      }
     }
     
     return result;  //返回0 证明传入的参数不符合规定或N+1个值都包含在vector中
   }

第二题

给你一组字符串 如 {5,2,3,2,4,5,1,2,1},让你输出里面出现次数最多且数值最大的一个,出现几次 (仔细想想,应该这样理解:输出里面出现次数最多,(如果最多的次数有好几个数)且其中数值最大的一个)

答案点我

数据库部分

本题用到下面三个关系表:CARD     借书卡。   CNO 卡号,NAME  姓名,CLASS 班级BOOKS    图书。     BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数 BORROW   借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。

要求实现如下15个处理:
 1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。

CREATE TABLE BORROW( 
CNO int FOREIGN KEY
REFERENCES CARD(CNO),    
BNO int FOREIGN KEY
REFERENCES BOOKS(BNO),
RDATE datetime,    
PRIMARY KEY(CNO,BNO)) 

  2. 找出借书超过5本的读者,输出借书卡号及所借图书册数。 

SELECT CNO,借图书册数=COUNT(*)FROM BORROW GROUP BY CNOHAVING COUNT(*)>5

 3. 查询借阅了"水浒"一书的读者,输出姓名及班级。  

SELECT * FROM CARD cWHERE EXISTS(
 SELECT * FROM BORROW a,BOOKS b  WHERE a.BNO=b.BNO  
  AND b.BNAME=N'水浒' AND a.CNO=c.CNO)

4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期。  

SELECT * FROM BORROW WHERE RDATE<GETDATE()

5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者。

SELECT BNO,BNAME,AUTHOR FROM BOOKSWHERE BNAME LIKE N'%网络%'

  6. 查询现有图书中价格最高的图书,输出书名及作者。

SELECT BNO,BNAME,AUTHOR FROM BOOKSWHERE PRICE=(
 SELECT MAX(PRICE) FROM BOOKS
) 

  7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。  

SELECT a.CNOFROM BORROW a,BOOKS bWHERE a.BNO=b.BNO AND b.BNAME=N'计算方法'
AND NOT EXISTS( 
SELECT * FROM BORROW aa,BOOKS bb  WHERE aa.BNO=bb.BNO            AND bb.BNAME=N'计算方法习题集' AND aa.CNO=a.CNO)
 ORDER BY a.CNO DESC

8. 将"C01"班同学所借图书的还期都延长一周。

UPDATE b SET RDATE=DATEADD(Day,7,b.RDATE)FROM CARD a,BORROW bWHERE a.CNO=b.CNO    ANDa.CLASS=N'C01'

  9. 从BOOKS表中删除当前无人借阅的图书记录。  

DELETE A FROM BOOKS aWHERE NOT EXISTS(
 SELECT * FROM BORROW    WHERE BNO=a.BNO
) 

10.如果经常按书名查询图书信息,请建立合适的索引。  

CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)

11.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。

CREATE TRIGGER TR_SAVE ON BORROWFOR INSERT,UPDATE AS IF @@ROWCOUNT>0
    INSERT BORROW_SAVE SELECT i.*
FROM INSERTED i,BOOKS bWHERE i.BNO=b.BNO    AND b.BNAME=N'数据库技术及应用'

  12.建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)。

CREATE VIEW V_VIEWAS
    SELECT a.NAME,b.BNAME FROM BORROW ab,CARD a,BOOKS b WHERE ab.CNO=a.CNO 
AND ab.BNO=b.BNO    AND a.CLASS=N'力01'

  13.查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。

SELECT a.CNOFROM BORROW a,BOOKS bWHERE a.BNO=b.BNO    AND b.BNAME IN(
    N'计算方法',N'组合数学')GROUP BY a.CNOHAVING COUNT(*)=2 
ORDER BY a.CNO DESC

  14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句。

ALTER TABLE BOOKS ADD PRIMARY KEY(BNO)

  15.对CARD表做如下修改:    a. 将NAME最大列宽增加到10个字符(假定原为6个字符)。    b. 为该表增加1列NAME(系名),可变长,最大20个字符。1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束--实现代码:

ALTER TABLE CARD ALTER COLUMN NAME varchar(10) 

15.2 为该表增加1列NAME(系名),可变长,最大20个字符--实现代码:

ALTER TABLE CARD ADD 系名 varchar(20)

转载整合优化地址:点我查看

所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!

支持一下呗!Y(・∀・)Y
  • QQ
  • AliPay
  • WeChat

  Previous post 已到最后一篇
Next post   CSS学习笔记

已有 3 条评论

  1. 乔
    哈哈哈~ 很棒!

添加新评论

选择表情

  Timeline:今日文案

你看世界的眼光最要紧

updated on :

  关于博主

blog名-小优,平时喜欢跑步,喜欢听一些温柔,轻松的音乐,喜欢接触新事物,对自己的能力有一个很好的认知,人生在于折腾,一寸光阴一寸金,寸金难买寸光阴!我就是我,颜色不一样的烟火!

  近期评论

生活其实很简单,过了今天就是明天。

低头哭过别忘了抬头继续走。

不要被任何人打乱自的脚步,因为没有谁会像你一样清楚和在乎自己梦想。

没有人可以打倒我,除非我自己先趴下!

你要记住你不是为别人而活,你是为自己而活。