这次面试总结是是针对笔试的题目,是我不会或者理解不够深的。这里主要对相关资料的整理。
一、string和stringbuffer的区别
- 就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。
- StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改。
- 插入、删除等操作,使用StringBuffer要更加适合一些。String对象创建以后就不能修改了,除非让String类型的引用指向另一个String对象。
二、线程的基本概念状态以及它们的关系
概念: 线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
线程的状态:
- 新建,创建Thread类的一个实例,线程进入新建状态(未启动);
- 就绪,线程已经启动,等待分配cpu时间片;(启动start方法)
- 运行,线程获得cpu资源正在执行任务(执行run方法);
- 堵塞,由于某种原因导致正在运行的线程让出cpu并暂停执行,即进入阻塞状态
- 死亡,当线程执行完毕或者被其他线程杀死,线程进入死亡状态
线程的关系图如下:
三、谈谈jsp跟Servlet的区别
- jsp编译后就编程Servlet,JSP的本质就是Servlet,JVM只能识别java类,不能识别JSP代码,WEB容器将JSP的代码编译成Java类
- Jsp擅长表现于页面显示,servlet擅长于逻辑控制;servlet没有内置对象,jsp内置对象必须通过http对象得到。
- 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语句(由于原题没找到,所以用相似的代替,这里还补充了其它)
题目:
有三个表
- BOOK:(图书表)
- 找出姓李的读者姓名(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='经济系')