面试总结 -记周六校招笔试

404 阅读7分钟

这次面试总结是是针对笔试的题目,是我不会或者理解不够深的。这里主要对相关资料的整理。

一、string和stringbuffer的区别

  1. 就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。
  2. StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改。
  3. 插入、删除等操作,使用StringBuffer要更加适合一些。String对象创建以后就不能修改了,除非让String类型的引用指向另一个String对象。

二、线程的基本概念状态以及它们的关系

概念: 线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

线程的状态:

  1. 新建,创建Thread类的一个实例,线程进入新建状态(未启动);
  2. 就绪,线程已经启动,等待分配cpu时间片;(启动start方法)
  3. 运行,线程获得cpu资源正在执行任务(执行run方法);
  4. 堵塞,由于某种原因导致正在运行的线程让出cpu并暂停执行,即进入阻塞状态
  5. 死亡,当线程执行完毕或者被其他线程杀死,线程进入死亡状态

线程的关系图如下:

三、谈谈jsp跟Servlet的区别

  1. jsp编译后就编程Servlet,JSP的本质就是Servlet,JVM只能识别java类,不能识别JSP代码,WEB容器将JSP的代码编译成Java类
  2. Jsp擅长表现于页面显示,servlet擅长于逻辑控制;servlet没有内置对象,jsp内置对象必须通过http对象得到。
  3. JSP本质上就是Servlet,但是两者的创建方式不一样,Servlet完全是Java程序代码构成,擅长于流程控制和事务处理,通过Servlet生成动态网页,JSP由HTML和JSP标签构成可以方便编写动态网页,因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页,在Struts框架中,JSP位于MVC的视图层,而Servlet位于控制层。

四、谈谈转发和重定向的区别

1,请求重定向:客户端行为,从本质上讲等同于两次请求,前一次的请求对象不会保持,地址栏的URL地址会改变。

response.sendRedirect()

2,请求转发:服务器行为,是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。(服务器内部转发,所有客户端看不到地址栏的改变)

request.getRequsetDispatcher().forward(requset,response);

五、JAVA异常处理机制

JAVA语言提供两种异常处理机制:捕获异常和声明抛弃异常

1)捕获异常:在Java程序运行过程中系统得到一个异常对象是,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常交给这个方法处理;如果找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。

2)声明抛弃异常:当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃异常。声明抛弃异常是在一个方法声明中的throws子句中指明的。

转载:www.cnblogs.com/yibao/p/610…

六、SQL语句

1. 用一条SQL 语句 查询出每门课都大于80 分的学生姓名

name kecheng fenshu

张三 语文 81

张三 数学 75

李四 语文 76

李四 数学 90

王五 语文 81

王五 数学 100

王五 英语 90

A: select distinct name from table where name not in (select distinct name from table where fenshu<=80) 
B: select name from table group by name having min(fenshu)>80
C: select name from table group by name having count(kecheng)>=3 and min(fenshu)>=80

2. 查询平均成绩大于60分的同学的学号和平均成绩;(由于原题没找到,所以用相似的代替)

   select stuId,avg(score)
    from Scores
    group by stuId having avg(score) >60;

3.根据表跟按要求写出SQL语句(由于原题没找到,所以用相似的代替,这里还补充了其它)

题目:

有三个表

  1. BOOK:(图书表)

2. READER:(读者表)

3. BORROW:(借阅表)

  1. 找出姓李的读者姓名(NAME)和所在单位(COMPANY)。(用到一个表)
SELECT name,addr FROM reader WHERE name LIKE '李%';

2 ) 列出图书库中所有藏书的书名(BOOK_NAME)及出版单位(OUTPUT)。(用到一个表)

SELECT DISTINCT(book_name),output FROM book;  

3 ) 查找“高等教育出版社”的所有图书名称(BOOK_NAME)及单价(PRICE),结果按单价降序排序。(用到一个表)

SELECT DISTINCT(book_name),price FROM book
    WHERE output='高等教育出版社' 
    ORDER BY 2 DESC;

4 ) 查找价格介于10元和20元之间的图书种类(SORT),结果按出版单位(OUTPUT)和单价(PRICE)升序排序。(用到一个表)

SELECT sort,price FROM book 
     WHERE price BETWEEN 10 AND 20 
     ORDER BY output,price;
 

5 ) 查找书名以”计算机”开头的所有图书和作者(WRITER)。(用到一个表)

SELECT DISTINCT(book_name),writer FROM book 
     WHERE book_name LIKE '计算机%';

6 ) 检索同时借阅了总编号(BOOK_ID)为112266和449901两本书的借书证号(READER_ID)。(用到一个表)

SELECT borrow.reader_id FROM borrow ,
     (SELECT reader_id FROM borrow WHERE book_id = 112266) t WHERE borrow.reader_id = t.reader_id and book_id = 449901;
SELECT DISTINCT(reader_id) FROM borrow where BOOK_ID in (112266,449901);

7 ) 查找所有借了书的读者的姓名(NAME)及所在单位(COMPANY)。(用到两个表)

SELECT name,company FROM reader 
WHERE reader_id in 
     (SELECT reader_id FROM borrow WHERE book_id is NOT null);

8 ) 找出李某所借所有图书的书名及借书日期(BORROW_DATE)。(用到三个表)


SELECT BOOK.BOOK_NAME,BORROW.BORROW_DATE FROM BOOK,BORROW,READER

WHERE BOOK.BOOK_ID=BORROW.BOOK_ID AND

BORROW.READER_ID=READER.READER_ID AND READER.NAME LIKE '李%'
  

9 ) 无重复地查询2006年10月以后借书的读者借书证号(READER_ID)、姓名和单位。


SELECT READER_ID,NAME,COMPANY FROM READER

WHERE READER_ID IN (SELECT READER_ID FROM BORROW WHERE BORROW_DATE >='2006-10-1' )

10 ) 找出借阅了《FoxPro大全》一书的借书证号。

SELECT reader_id FROM borrow WHERE book_id in 
      (SELECT DISTINCT book_id FROM book 
         WHERE book_name='FoxPro大全');

11 ) 找出与”赵正义”在同一天借书的读者姓名、所在单位及借书日期 。 方法一:

SELECT name,company,
      (SELECT borrow_date FROM borrow WHERE reader_id =
      (SELECT reader_id FROM reader WHERE name='赵正义') )   
                  borrow_date
FROM reader WHERE reader_id = (
    SELECT reader_id FROM borrow WHERE  borrow_date = 
        (SELECT borrow_date FROM borrow WHERE reader_id =
        (SELECT reader_id FROM reader WHERE name='赵正义') ) 
    AND reader_id != (SELECT reader_id FROM reader 
                                   WHERE name='赵正义') );

方法二:联合查询

SELECT reader.name, reader.company, borrow.borrow_date 
FROM reader,borrow 
  WHERE reader.reader_id = borrow.reader_id 
  AND borrow_date in (
       SELECT borrow_date FROM borrow WHERE reader_id =
          (SELECT reader_id FROM reader WHERE name = '赵正义')
   ) AND reader.name <> '赵正义';

12 ) 查询2006年7月以后没有借书的读者借书证号、姓名及单位。 日期的关系:昨天 > 今天 > 明天

SELECT READER_ID,NAME,COMPANY FROM READER

WHERE READER_ID NOT IN (SELECT READER_ID FROM BORROW WHERE BORROW_DATE>='2006-7-1')

13 ) 求”科学出版社”图书的最高单价、最低单价、平均单价。

SELECT max(price),min(price),avg(price) FROM book 
     WHERE output='科学出版社' ;

14 )求”信息系”当前借阅图书的读者人次数。

SELECT count(distinct reader_id) FROM borrow 
     WHERE reader_id in
             (SELECT reader_id FROM reader WHERE company='信息系');

15 ) 求出各个出版社图书的最高价格、最低价格和总册数。

SELECT max(price),min(price),count(book_id) 
      FROM book GROUP BY output;

16 ) 分别找出各单位当前借阅图书的读者人数及所在单位。

SELECT count(reader_id),company FROM reader 
   WHERE reader_id in (SELECT distinct reader_id FROM borrow)
    GROUP BY company;

17 ) 找出当前至少借阅了2本图书(大于等于2本)的读者姓名及其所在单位。

SELECT name,company FROM reader WHERE reader_id in
       (SELECT  reader_id FROM borrow 
         GROUP BY reader_id having count(book_id)>=2);

18 ) 分别找出借书人次数多于1人次的单位及人次数。

SELECT COMPANY,COUNT(*) 人次数 FROM READER,BORROW WHERE BORROW.READER_ID=READER.READER_ID GROUP BY COMPANY HAVING COUNT(*)>1

19 ) 找出藏书中各个出版单位的名称、每个出版社的书籍的总册数(每种可能有多册)、书的价值总额。

SELECT output,count(book_id),sum(price) 
FROM book GROUP BY output;
 

20 ) 查询经济系是否还清所有图书。如果已经还清,显示该系所有读者的姓名、所在单位和职称。

SELECT NAME,COMPANY FROM READER

WHERE NOT EXISTS (SELECT* FROM READER,BORROW

WHERE READER.READER_ID=BORROW.READER_ID AND COMPANY='经济系')