简答题汇总

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页面中"查看页面源代码"中显示

 

 

 

 

 

 

 

 

posted on 2018-04-10 16:03  左剃头  阅读(199)  评论(0编辑  收藏  举报

导航