常见面试题

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. 死亡,死亡的线程即彻底结束了。

posted @ 2020-04-06 21:31  Java丨Mr.Chen  阅读(140)  评论(0)    收藏  举报