常见面试题
1.final修饰的作用
final修饰的方法不能被子类覆盖
final修饰的类不能被继承
final修饰的变量不能改变值
final修饰的引用类型不能指向别的引用,但是可改变对象里面的内容
比如:
class A {
String age;
}
final A aaa = new A();
aaa.age = "123";
System.out.println(aaa.age);
aaa.age = "1234";
System.out.println(aaa.age);
2.java类的执行顺序
1.父类的静态变量和静态块赋值(按照声明顺序)
2.自身的静态变量和静态块赋值(按照声明顺序)
3.父类成员变量和块赋值(按照声明顺序)
4.父类构造器赋值
5.自身成员变量和块赋值(按照声明顺序)
6.自身构造器赋值
3.接口以及接口的实现
接口:接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract (只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误。)
实现接口:实现接口,就要实现接口的所以方法,相当于重写方法,方法的重写需要满足:两同一大两小(方法名、返回值类型<=重写前、形参相同;访问权限>=重写前;抛出异常<=重写前)
4.switch表达式特性
switch (表达式){
case 值1 : 语句1 break;
case 值2 : 语句2 break;
...
default : 语句n break;
}
从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break为止。假如任何一个case语句的值都不等于表达式的值,
就运行可选标签default之下的语句。
5.静态方法调用,类名.方法
public class TestClass {
private static void testMethod(){
System.out.println("testMethod");
}
public static void main(String[] args) {
((TestClass)null).testMethod(); //正常输出testMethod
}
}
6. jsp相关知识
3大指令:page,include,taglib
page:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> page指令,后面跟着三个属性,分别是language、contentType、pageEncoding。
这只是其中的几个属性,并没有写全.
include: 比较简单,只有一种形式 <%@ include file="relativeURL"%> relativeURL:本应用程序内另一个JSP文件或者HTML文件的路径,例如,网址内所有页面均有一个统一风格的导航栏和页脚版权,那么就可以使用该指令将其包含进来。
taglib:JSP支持标签技术,后面会讲到标签的用法,jstl标签库的使用等,作用:用来指明JSP页面内使用的JSP标签库,taglib指令有两个属性,
uri为类库的地址,prefix为标签的前缀,<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
9大内置对象:
request:请求对象, 类型:httpServletRequest
response:响应对象 类型:httpServletResponse
session:表示一次会话,在服务器端记录用户状信息的技术
application:标识web应用上下文,类型:ServletContext,详情就看Servlet中的ServletContext的使用
exception 表示发生异常对象,类型 Throwable,在上面我们介绍page指令中的一个errorPage属性时就有说到他
page:page对象代表当前JSP页面,是当前JSP编译后的Servlet类的对象。相当于this。
config:标识Servlet配置,类型:ServletConfig,api跟Servlet中的ServletConfig对象是一样的,能获取该servlet的一些配置信息,能够获取ServletContext
out:输出响应体 类型:JspWriter
pageContext:表示 jsp页面上下文(jsp管理者) 类型:PageContext
4大作用域:
1)page作用域
代表变量只能在当前页面上生效
2)request作用域
代表变量能在一次请求中生效,一次请求可能包含一个页面,也可能包含多个页面,比如页面A请求转发到页面B。
3)session作用域
代表变量能在一次会话中生效,基本上就是能在web项目下都有效,session的使用也跟cookie有很大的关系。一般来说,只要浏览器不关闭,cookie就会一直生效,cookie生效,session的使用就不会受到影响。
4)application作用域
代表变量能一个应用下(多个会话),在服务器下的多个项目之间都能够使用。比如baidu、wenku等共享帐号。
7.cookie 和 session的区别
cookie:服务器保存在客户端的数据,一台服务器在一个客户端最多保存20个cooike,一个浏览器最多保存300个。
session:保存在服务器中的数据,每个用户浏览器访问服务器时创建的一个会话对象。
区别:1.cookie存放在浏览器上,session存放在服务器上
2.cookie不是很安全,容易被获取
3.session存放在服务器,但是易占用服务器资源
4.cookie禁用会导致session失效,要想重新启用要用到url重写,或者使用隐藏域保存sessionid
基本用法;
Cookie cookie = new Cookie("user", user);
cookie.setMaxAge(365 * 24 * 3600); //设置存活时间
cookie.setPath("/"); //设置保存路径
response.addCookie(cookie);
HttpSession session = request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(2 * 3600); // Session保存两小时
session.invalidate(); //使session失效
8.线程5个状态的理解:
1. 新建,刚刚新建的线程,还未进入就绪队列
2. 就绪,进入就绪队列的线程拥有了获得 CPU 时间的机会,但不是一定会马上执行,与线程调度有关。
3. 运行,获得了 CPU 时间,正在被执行的线程。
4. 阻塞,进入阻塞状态的线程只是暂时失去了 CPU 时间,该类线程没有结束,“阻塞态”的线程只能进入到“就绪态”。
5. 死亡,死亡的线程即彻底结束了。

浙公网安备 33010602011771号