这是本人第一次面试真题及以后的每一次面试都会整理。这一次的面试题倒是挺简单的。
注:每个题基本不会深究,知道如何解答即可。
1.Java之所以可以实现跨平台,是因为Java程序在运行时使用了()。
JVM
JVM是Java虚拟机。
2.JAVA中类的访问修饰符有();类成员的访问修饰符有()。
类:仅有public ,friendly
成员属性:public、protected、friendly、priavate
成员方法:public、protected、friendly、priavate
friendly不是关键字,如果是默认权限,则没有任何修饰符。
3.JAVA程序中异常处理的关键字是(),抛出异常的关键字是()。
Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。
一般情况下是用try来执行一段程序,如果系统会抛出(throw)一个异常对象,可以通过它的类型来捕获(catch)它,或通过总是执行代码块(finally)来处理;try用来指定一块预防所有异常的程序;catch子句紧跟在try块后面,用来指定你想要捕获的异常的类型;throw语句用来明确地抛出一个异常;throws用来声明一个方法可能抛出的各种异常(当然声明异常时允许无病呻吟);finally为确保一段代码不管发生什么异常状况都要被执行。
4.Window的()事件在浏览器完成页面加载后立即触发。
页面加载完成有两种事件:
一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件);
二是onload,指示页面包含图片等文件在内的所有元素都加载完成。
5.ER模型的组成包括的元素为()、()、()。
实体-联系模型(entity-relationship model),简称为E/R模型。在E/R模型中,数据结构被表示为“实体-联系”图,图中有三个主要的元素类型:实体;属性; 关系。
1.一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?
答:这个是可以的,一个“.java”源文件里面可以包含多个类,但是只允许有一个public类,并且类名必须和文件名一致。
每个编译单元只能有一个public 类。这么做的意思是,每个编译单元只能有一个公开的接口,而这个接口就由其public 类来表示。
2.静态变量和实例变量的区别?(面试中经常遇到)
答:
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。
public class Test11 {
public static int staticVar = 0;
public int instanceVar = 0;
public Test11() {
staticVar++;
instanceVar++;
System.out.println("staticVar=" + staticVar + ",instanceVar="
+ instanceVar);
}
public static void main(String[] args) {
Test11 test = new Test11();
Test11 test1 = new Test11();
Test11 test2 = new Test11();
}
}
输出
staticVar=1,instanceVar=1
staticVar=2,instanceVar=1
staticVar=3,instanceVar=1
3.session与cookie区别?
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
4.MVC各个部分是由哪些技术来实现的。如何实现。
Model 代表的是应用的业务逻辑( 通过JavaBean, EJB 组件实现), View 是应用的表示面( 由 JSP 页面产生), Controller 是提供应用的处理过程控制( 一般是一个 Servlet)。
5.J2EE是技术还是平台还是框架?主要包含那些技术?
首先,它肯定是一个框架。名称是Java2平台企业版(Java 2 Platform,Enterprise Edition)。
J2EE应用服务器它包括两大容器 EJB容器+Web容器,即业务逻辑层+表示层。
两大组件Web组件+Ejb组件
Web组件(即三种技术):Servlet、JSP、JavaBean,Servlet是Web服务器的功能扩展,接受Web请求,返回动态的Web页面。Web容器中的组件可以使用EJB中的组件来完成复杂的业务逻辑。值得注意的是静态的HTML页面和Applets不算是Web层组件。
EJB组件(三种技术):会话Bean、消息驱动Bean、实体Bean。会话Bean:着重业务逻辑的实现与控制,负责与Web层通信,给Web层提供访问业务数据的接口。当客户端完成执行过程的时候,会话Bean及相关数据会消失。实体Bean:代表持久数据,数据相当于存储在数据库表中,它负责保存业务数据,给会话Bean访问业务数据的接口。消息驱动Bean:用于接收、处理客户通过JMS发送过来的消息,允许业务组件接收衣服的JMS消息。
6.数据库约束并简单描述(5种)。
首先要想到主键约束,外键约束,非空。然后还有检查约束(check),唯一约束。
1.—-主键约束(Primay Key Coustraint) 唯一性,非空性
2.—-唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
3.—-检查约束 (Check Counstraint) 对该列数据的范围、格式的限制(如:年龄、性别等)
4.—-默认约束 (Default Counstraint) 该数据的默认值
5.—-外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列
1.三位数水仙花数。(题意不详述了)。
解析:大家肯定都有过编程基础了。怎样解答,肯定得有一个等式来证明。那就是这个水仙花数S=个位数立方+十位数立方+百位数立方
然后呢,就是把每一个个位数,十位数,百位数求出来即可啦。并且我们都知道一个数的几次方可以这样表示pow(x,y),这表示x的y次方。
另一种思路就是由数字1,5,3组合起来的只要满足
a^3+b^3+c^3 = a*100+b*10+c即可
public class Flower_number {
public static void main(String[] args) {
int i=0;
int m,n;
for(int a=1;a<10;a++){
for(int b=0;b<10;b++){
for(int c=0;c<10;c++){
m=a*100+b*10+c;
n=a*a*a+b*b*b+c*c*c;
if(m==n){
i++;
System.out.println("水仙花数为"+m);
}
}
}
}
System.out.println("水仙花数总共有 "+i+" 个");
}
}
数据库查询语句本人也总结过,详见本人数据库里面的帖子
有班级表CLASS和学生表STUDENT,两个表通过class_id进行关联,其表结构如下:
1、写出创建学生表STUDENT的SQL语句,注意添加相关的约束,要求表明、字段名都是英文。(自己写的,参考答案)
CREATE TABLE STUDENT(
S_NO CHAR(6) PRIMARY KEY,
S_NAME VARCHAR2(10) NOT NULL,
S_SEX CHAR(2) CHECK(SEX = ‘男’ OR SEX = ‘女’),
S_BIRTHDAY DATE ,
S_SCORE NUMBER(5,1),
S_ADDF NUMBER(5,1),
CLASS_NO CHAR(5),
FOREIGN KEY(CLASS) REFERNCES CLASS(CLASS_NO)
)
2、查询编号为c002班级中所有的女同学。(自己手写,参考答案)
思路:此题要我们把女同学查出来,而且班级编号也要有,而Student表里包含这两个条件。
SELECT Sname FROM Student WHERE S_SEX = ‘女’ AND CLASS_ID = ‘c002’
3、 查询总分(入学成绩+附加分)在550和600之间的所有学生,并且按照降序排列。
思路:首先,要知道查询的学生,然后条件是总分的范围条件,还有降序的要求。(降序知道用DESC就OK,如果升序啥也不用写,系统查询默认升序)
SELECT * FROM Student WHERE S_SCORE+S_ADDF BETWEEN 550 AND 600 ORDER BY S_NO DESC
4、将所有名字中带“斌”或“潇”的学生成绩加30%。
思路:首先查出名字带“斌”或“潇”,并且我们知道成绩在Student表里,这样就知道了当我们更新表时,更新的是Student表。
第一步:
SELECT S_NO FROM Student WHERE S_NAME = ‘%斌%’ OR S_NAME = ‘%潇%’
第二步
UPDATE Student SET S_SCORE = S_SCORE * (1+30%) WHERE S_NO IN (SELECT S_NO FROM Student WHERE S_NAME = ‘%斌%’ OR S_NAME = ‘%潇%’)
5、查询入学成绩大于其所在班级平均入学成绩的所有学生的学号、姓名、成绩。
思路:首先我们要知道WHERE后面千万不能跟聚合函数!举个错误示范:SELECT Sname FROM Student WHERE SAGE = MAX(SAGE)
遇到这样的题目,我们要分步作答,先求出平均成绩然后再进行比较。
第一步:计算平均成绩。
SELECT AVG(S_SCORE) FROM Student
第二步:查询。
SELECT S_NO,S_NAME,S_SCORE FROM Student WHERE S_SCORE>(SELECT AVG(S_SCORE) FROM Student)
延伸:为什么上面不用GROUP BY,然后在后面的HAVING里面添加查询条件呢,因为上面这个题目并没有让我们分组,如果题目要求我们查询每一门课程的考试平均成绩的话,我们才会用到GROUP BY分组查询。当然我们也可以用GROUP BY,因为我们通过学号把每一个学生分组,然后就可以用HAVING+聚合函数进行查询了。
因此上面查询语句也可以写为:
SELECT S_NO,S_NAME,S_SCORE FROM Student GROUP BY S_NO HAVING S_SCORE > AVG(S_SCORE)
6、创建存储过程del_student,输入参数sno,找到并删除该条记录。(student表)。