• 简答题汇总


    1、 StringStringBufferStringBuilder三者有什么区别?

    String

    字符串常量

    StringBuilder

    字符串变量(非线程安全)

    StringBuffer

    字符串变量(线程安全)

    (1).在这方面运行速度快慢为:StringBuilder > StringBuffer > String    String最慢的原因:

      String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

    (2).在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

      String:适用于少量的字符串操作的情况

      StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

      StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

    2.

     int Integer 有什么区别?

    (1)Integer是int的包装类;int是基本数据类型;
    (2)Integer变量必须实例化后才能使用;int变量不需要;
    (3)Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;
    (4)Integer的默认值是null;int的默认值是0。

     

    对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false

    3.URL和URI有什么区别,可举例说明?

    (URL)统一资源定位符用于标示网络资源的位置     URI,统一资源标识符用于标示一个抽象或者物理资源  URI是以一种抽象的,高层次概念定义统一资源标识,而URL则是具体的资源标识的方式。URL是一种URI。一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema(protocol)必须被指定。

    举例:

    统一资源定位器(URL)指的是Internet文件在网上的地址。

     

    4.判断字符串值是否相同时是用==还是equals()?他们有何差别?

    String既可以作为一个对象来使用,又可以作为一个基本类型来使用。

    一种是用"=="来比较,这种比较是针对两个String类型的变量的引用,也就是说如果两个String类型的变量,它们所引用同一个String对象(即指向同一块内存堆),则"=="比较的结果是true。

    另一种是用Object对象的equals()方法来比较,String对象继承自Object,并且对equals()方法进行了重写。两个String对象通过equals()方法来进行比较时,其实就是对String对象所封装的字符串内容进行比较,也就是说如果两个String对象所封装的字符串内容相同(包括大小写相同),则equals()方法将返回true。

     

     

    5.Java面向对象的三大特性是什么 ? 简述其特点 ?

    封装思想

    使用 private 修饰符把成员变量设置为私有,防止外部程序直接随意调用或修改成员变量,然后对外提供 public 的 set 和 get 方法按照开发者的意愿(可以编写一些业务逻辑代码,虽然很少这样做)设置和获取成员变量的值。

    也可以把只在本类内部使用的方法使用 private,这就是封装的思想,是面向对象最基本的开发规范之一。

      public 修饰符,具有最大的访问权限,可以访问任何一个在 CLASSPATH 下的类、接口、异常等。

      protected 修饰符,主要作用就是用来保护子类,子类可以访问这些成员变量和方法,其余类不可以。

      default 修饰符,主要是本包的类可以访问。

      private 修饰符,访问权限仅限于本类内部,在实际开发过程中,大多数的成员变量和方法都是使用 private 修饰的。

    继承

    多态

    多态指允许不同类的对象对同一“消息”做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。可以用于消除类型之间的耦合关系,Spring 的核心就是多态和面向接口编程。

    6.访问springmvc框架环境下的javaweb页面显示405错误信息, 该如何解决?

    首先添加一个自定义类,继承Spring的分发器类DispatcherServlet,然后重写processHandlerException方法,在web.xml中配置上述分发器:

    7.Springmvc中如何定义转发和重定向?

    (1)不需要传递参数

    返回String
    return "redirect:/ toList ";

    使用ModelAndView
    return new ModelAndView("redirect:/toList");

    (2)带参数

    attr.addAttribute("param", value);
    return "redirect:/namespace/toController";

    转发:

    返回ModelAndView :
    @RequestMapping(value="/test",method=RequestMethod.GET)
    public ModelAndView testForward(ModelAndView model){

    model.setViewName("forward:index.jsp");
    return model;
    }

    返回String:

    @RequestMapping(value="/forward",method=RequestMethod.GET)
    public String testForward(){

    return "forward:/index.action";
    }

    8.mybatis和hibernate

    但是对于一个大型项目,复杂语句较多,这样再去选择hibernate就不是一个太好的选择,选择mybatis就会加快许多,而且语句的管理也比较方便。

    针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。

    MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

    9.简述静态变量和实例变量有什么区别 ?

    静态变量也叫类变量,这种变量前加了static修饰符。可以直接用类名调用,也可以用对象调用,而且所有对象的同一个类变量 都是共享同一块内存空间。   静态变量是所有对象共有的,某一个对象将它的值改变了,其他对象再去获取它的值,得到的是改变后的值;

     实例变量则是每一个对象私有的,某一个对象将它的值改变了,不影响其他对象取值的结果,其他对象仍会得到实例变量一开始就被赋予的值。

     

    10.接口可以有方法的实现吗 ? 怎么使用 ?

     

     Java8新增了default关键字,可以使接口有自己的默认的实现类,而且还不影响接口的实现类。

     

    11.事务的ACID指的是什么 ?

    ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。

    12.Servlet的生命周期是:

    生命周期:分为三个阶段:

      1,初始化阶段  调用init()方法

      2,响应客户请求阶段  调用service()方法

      3,终止阶段  调用destroy()方法

    13.面向对象的五大原则:

     

      1、 单一职责原则,指一个类的功能要单一,不能包罗万象;

     

      2、 替换原则。指子类可以替换父类并出现在父类能出现的任何地方。

     

      3、 开放封闭原则,一个模块在更改性方面应该是封闭的,在扩展性方面应该是开放的。

     

      4、 依赖倒置原则:就是要依赖于抽象,不要依赖于具体。

     

      5、 接口隔离原则:不同的模块要通过抽象接口隔离开,而不是通过具体的类强耦合。

    14.如果Mybatis进行查询的时候实体类的属性名和数据库字段不一致怎么办?

     

     添加关联映射,或者是修改sql语句

    15.什么是向上转型? 什么是向下转型?

     

      1、 向上转型:父类引用指向子类对象。

     

      2、 通俗的说就是子类实例对象赋值给父类引用,然后父类引用又要赋值给子类引用,这个过程就是向下转型。

    16.简述响应码200, 404, 500的含义? 

     

    200 OK 服务器成功处理了请求,404未找到资源

     

    500内部服务器错误,服务器遇到一个错误,使其无法为请求提供服务

    17.如何控制servlet在什么时候加载?

     

     Servlet的加载和实例化是发生在容器启动的时候发生的。什么时候加载和实例化Servlet是由“1”配置来决定的。同意初始化发生在实例化Servlet之后。

     

    18.Session失效有几种方法, 请列举一下

    在主页面或者公共页面中加入:session.setMaxInactiveInterval(900);,就是在项目的web.xml中设置

    1. <!-- 设置session失效,单位分 --> 
    2. <session-config> 
    3. <session-timeout>1</session-timeout> 
    4. </session-config> 

    直接在应用服务器中设置,如果是tomcat,可以在tomcat目录下conf/web.xml中找到<session-config>元素,tomcat默认设置是30分钟,只要修改这个值就可以了。

     

    19.简述jsp全称以及底层实现原理?

      1. jsp运行在服务器
      2.jsp的基础是Servlet(相当于对Servlet进行了一个包装而已)

      2、 原理:Jsp页面也正是先翻译成Servlet,然后再编译加载进内存的。

    20.javaweb开发中Model1模式和Model2模式的定义是什么?

      1、 Web早期的开发中,通常采用的都是Model1。Model1设计模式中,主要分为两层,视图层和模型层。

      2、 Model2,也就是MVC模式,Model2设计模式,把一个Web软件项目分成三层,包括视图层、控制层、模型层。

     

    21.WebLogicTomcat有什么区别?

    Tomcat开源,免费,节省成本;再就是tomcat是轻量级程序,一般来说小企业只有基本的服务,用不到EJB等服务,选择tomcat就可以满足。

           大企业,要求安全性较高,运用EJB等的企业,选择weblogic比较合适。

     

    22.如何定义一个监听器和过滤器, 各自的作用是什么?

     

    Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可以进行逻辑判断,如用户是否已经登录、有没有权限访问该页面等等工作,它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关的请求,只有当你的web应用停止或重新部署的时候才能销毁。

     

     

    void init(FilterConfig filterConfig) 用于完成过滤器的初始化

     

     void destroy() 用于过滤器销毁前,完成某些资源的回收

     

     void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) 实现过滤功能,该方法对每个请求增加额外的处理

     

    Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是:做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

     

    项目启动时,先启动监听器,再启动过滤器。

     

     

     

     

     

     

     

     

    23. 什么是MVC, 这三个字母分别代表什么?

     

    M:model (模型):javaBeansrpinghibernatemybatis

     

    V:view(视图) :jsphtmlfreemaker

     

    C:controller(控制器):servlet strutsspringmvc

     

    24. Hibernate什么是临时态, 持久态, 游离态?

     

    ---瞬时态。他们在数据库中没有对应的记录存在

     

    持久态。

     

    缓存中的对象与数据库是同步的

     

    游离态

     

    数据库中有数据,缓存中没有数据

    25.访问springmvc框架环境下的javaweb页面显示405错误信息, 该如何解决?

     首先添加一个自定义类,继承Spring的分发器类DispatcherServlet,然后重写processHandlerException方法,然后在web.xml中配置上述分发器:

     

    26.说一下什么是sql注入, 以及需要注意的地方有什么?

     通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

    27. Hibernateget方法和load方法有什么区别 ?

    load方法支持延迟加载, 当查询结果被使用的时候才会去数据库进行查询, get方法不支持延迟加载

    load方法查询时如果数据库中没有查询到该结果, 则会抛出异常, get方法则会返回null

    28.

    PLSQL编程中循环有几种方式? 分别列举一下

    三种方式

    1,

    LOOP

    EXIT...WHEN...

    END LOOP

    2,

    WHILE

    LOOP

    END LOOP

    3,

    FOR ... IN ...

    LOOP

    END LOOP

    21, 以下代码的输出结果是 ? 为什么 ?

    public class Test {

    public static void main(String[] args) {

    Integer i1 = 100;

    Integer i2 = 100;

    Integer i3 = 150;

    Integer i4 = 150;

    System.out.println(i1 == i2);

    System.out.println(i3 == i4);

    String s1 = aaa;

    String s2 = aaa;

    System.out.println(s1==s2);

    System.out.println(s1.equals(s2));

    }

    }

    :

    true

    false

    true

    true

    i1i2两个变量被定义成Integer引用类型, 当被赋值时根据赋值的大小(是否在byte类型的范围内)先判断是否在Integer类型的缓存中, 如果有, 则直接引用, 如果没有则返回new Integer(...), 所以第二个结果为false

    ==对比的是在内存中引用地址是否相同, equals对比的是值是否相同

    String类在内存中有一个常量池, 当第一个变量被定义时会储存到常量池中, 第二个String类型定义时会去常量池里面查找是否已经定义此值, 如果有, 直接引用

    22, 抽象类和接口有什么相同点和不同点 ? 以及分别用什么关键字定义 ?

    :

    分别用abstractinterface关键字定义

    抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

    抽象类要被子类继承,接口要被类实现。

    接口只能做方法声明,抽象类中可以做方法声明,也可以做方法实现

    接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

    抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

    抽象方法只能声明,不能实现,接口是设计的结果 ,抽象类是重构的结果

    抽象类里可以没有抽象方法

    如果一个类里有抽象方法,那么这个类只能是抽象类

    抽象方法要被实现,所以不能是静态的,也不能是私有的。

    接口可继承接口,并可多继承接口,但类只能单继承。

    23, 什么是DAO?

    :

    dao全称是data access object,数据库访问对象

    DAO模式通过将数据访问计划分为抽象层(或者interface)和实现层,从而分离了数据使用和数据访问的地称实现细节。这意味着业务层与数据访问的底层细节无关,也就是说,可以在保持上层机构不变得情况下,通过切换底层实现来修改数据访问的具体机制,常见的一个例子就是,我们可以通过仅仅替换数据访问层实现,将我们的系统部署在不同的数据库平台之上。

    24, 如何通过反射获得一个类的实例化对象, 以及获取这个对象中的属性和属性值 ?

    :

    获取一个类的实例化对象

    Class<?> cla = Class.forName("com.hanqi.maya.model.User");

    Object obj = cla.newInstance(); // 此对象为获取的User对象

    获取属性值

    Field field = cla.getField("属性名");

    fieldValue=field.get(obj);

    25, oracle数据库scott用户下的员工表中, 查询出员工姓名中字母”R”出现两次或者两次以上的员工

    SELECT * FROM EMP E WHERE LENGTH(REPLACE(E.ENAME, 'R', '')) - LENGTH(E.ENAME) >= 2

    或者使用translate函数

    Java中运算符>>, <<, >>>分别是什么意思?

    位运算符

    >>表示以二进制的形式向右移动, <<表示向左移动, >>>表示无符号向右移动, 即无论正负都在前面补0

    29, java环境下的命令行中java命令和javac命令分别是做什么用的 ?

    因为java是一门解释型语言, javac用来编译java文件以生成字节码形式的class文件, java命令用来向虚拟机进行解释来执行编译好的class文件

    30, 当调用equals方法来判断字符串是否相同时, 经常会写成"aaa".equals(str), 为什么 ?

    防止str变量接收到的参数为null

    如果写成str.equals("...")在编译过程不会报错, 但是如果str这个变量接收到的参数为null的话则会报出空指针异常, 但是将字符串常量写在外面就可以避免这个情况, 因为nulljava中也被看作是一个对象的形式, 这时候会返回false

    31, 什么是内部类 ? 为什么要有内部类 ?

    在一个类的内部再定义一个class, 内部类是为了解决java不能进行多重继承的问题

    32, 什么是二分查找法?以及使用二分查找法的前提是?

    二分折半查找法, 每次取一个顺序序列的中间值与要查找的值进行比对, 然后判断是在前半段查找还是后半段查找, 确定好之后再取中间值进行比对继续查找, 所以前提条件是要查找的序列必须进行排序

    33, 线程中start(), sleep(), stop(), setPriority()分别是什么方法 ? 如果让你设计一个终止线程的方法, 你会怎么做 ?

    start: 启动线程

    sleep: 使线程休眠

    stop: 终止线程, 已废弃

    setPriority: 设置线程的优先级

    定义一个代表状态的变量, 通过判断此变量的值来判断是否该终止线程, 尽量避免调用interrupt()stop(), 因为这两个方法可能引起系统资源不会被正常处理

    34, 描述一下在线程中, 什么是死锁 ?

    当两个线程启动时, 第一个线程需要获取第二个线程的一个属性, 第二个线程需要获取第一个线程的一个属性的时候, 互相等待对方线程释放此对象时会造成死锁, 造成死锁的情况的条件还有要使用synchronized关键字

    35, Oracle中一个表最多可以有几个主键, 使用两个字段作为主键的情况称为什么情况, 怎么使用?

    一个表只能有一个主键, 主键可以使用两个字段, 叫做联合主键, 当同时确定这两个字段就能确定一条数据的唯一性的时候生效

    37, Javaweb中要实现10天内登录保存密码的功能怎么实现 ?

    在登录处理页面使用Cookie, 将登录信息存储到Cookie, 然后调用Cookie中方法setMaxAge(...)来设置cookie的过期时间, 值为毫秒数, 下次登录的时候先判断Cookie中有没有值, 如果返回不为null可以取出直接调用

    38, jsp中如何使用EL表达式读取request对象中的一个Map对象的值 ?

    ${key}

    39, Hibernateget方法和load方法有什么区别 ?

    load方法支持延迟加载, 当查询结果被使用的时候才会去数据库进行查询, get方法不支持延迟加载

    load方法查询时如果数据库中没有查询到该结果, 则会抛出异常, get方法则会返回null

    40, jsp<%...%><%!...%><%=...%><%--...--%>分别是什么含义?

    <%...%>: 定义java代码的语言脚本

    <%!...%>: 声明变量等

    <%=...%>: 将方法的返回值或某个变量直接显示

    <%--...--%>: 脚本中的注释, 该注释不会在html页面中"查看页面源代码"中显示

     

     

     

     

  • 相关阅读:
    安装python3的详细教程
    MySQL中的各种引擎
    MySQL的语句执行顺序
    MySQL 5.7新增加的json数据类型
    MySQL5.6 PERFORMANCE_SCHEMA 说明
    MySQL中的sys系统数据库是干嘛的
    MySQL中information_schema数据库是干啥的
    mysql中You can’t specify target table for update in FROM clause错误解决方法
    win10 localhost 解析为::1 的解决办法
    python 中对象is和==是怎么比较的
  • 原文地址:https://www.cnblogs.com/zuo72/p/8734894.html
Copyright © 2020-2023  润新知