面试题、五

 

一、String是最基本的数据类型吗?String和StringBuffer的区别?

不是。Java中的基本数据类型只有8个:byte,short,int,long,float,double,char,boolean,除了基本类型(primitive type),剩下的都是引用类型(reference type),枚举类型(enumeration type)也是引用类型。其中 byte 一个字节,short两个字节,int四个字节,long八个字节,char两个字节。

区别:

(1)String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String 是final类,即不能被继承。

(2)StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象。它只能通过构造函数来建立对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中付值的时候可以通过它的append方法.

二、int和Integer有什么区别?

int是基本数据类型,Integer是引用数据类型; int默认值是0,Integer默认值是null; int类型直接存储数值,Integer需要实例化对象,指向对象的地址。

三、运行时异常与一般异常有何异同?

1.定义不同,运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等。一般异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。

2.处理方法不同,运行时异常是不检查异常,程序中可以选择捕获处理,也可以不处理。对于一般异常,JAVA编译器强制要求用户必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。

3.发生原因不同,运行时异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。

四、说出Servlet的生命周期,并说出Servlet和CGI的区别?

服务器启动时(web.xml中配置load-on-startup=1,默认为0)或者第一次请求该servlet时,就会初始化一个Servlet对象,也就是会执行初始化方法init(ServletConfig conf),该servlet对象去处理所有客户端请求,service(ServletRequest req,ServletResponse res)方法中执行,最后服务器关闭时,才会销毁这个servlet对象,执行destroy()方法。

区别: 1)较好的可移植性。由于Java语言具有跨平台和可移植性强的特点,使得Sevlet也有较好的可移植性, 即无须修改代码就可以部署到多种不同类型的Web服务器上。 2)执行效率高。由于CGI针对每个请求都会创建一一个进程来处理, 而Servlet针对每个请求创建一个线程来执行,而创建线程比创建进程的开销要小,所以,与CGI相比,Servlet在交互过程中有更短的响应时间, 响应效率更高。 3)功能强大。Servlet可以与Web服务器进行交互,而CGI却无法与Web服务器直接交互。 4)使用方便。Servlet 提供了许多非常有用的接口用来读取或设置HTTP头消息,处理Cookie和跟踪会话状态等。 5)可扩展性强。由于Servlet是由Java语言编写的,所以,它具备了Java 语言的所有优势

 

五、说出ArrayList,Vector,LinkedList的存储性能和特性。

ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了 synchronized 方法(线程安全), 通常性能上较 ArrayList 差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

 

六、struts 核心控制器

Struts1: ServletAction继承于HttpServlet,是struts1.x中和核心控制器。 Struts 2: FilterDispatcher是Struts 2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求。如果用户请求以action结尾,该请求将被转入Struts 2框架处理。

七、jstl

JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

 

八、过滤器 拦截器

1.过滤器(Filter):过滤器就是过滤的作用,在web开发中过滤一些我们指定的url,比如过拦截掉我们不需要的接口请求,修改请求(request)和响应(response)内容,完成CORS跨域请求等等

2.拦截器(Interceptor):是面向切面编程(AOP,Aspect Oriented Program)的。就是在Service或者一个方法前调用一个方法,或者在方法后调用一个方法。比如动态代理就是拦截器的简单实现,在调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在调用方法后打印出字符串,甚至在抛出异常的时候做业务逻辑的操作。

 

 

九、jsp内置对象

 

1、request对象 request 该对象代表了客户端的请求信息

2、response对象 response 代表的是对客户端的响应,

3、session对象 session 对象是由服务器自动创建的与用户请求相关的对象。

4、application对象 application 对象可将信息保存在服务器中,直到服务器关闭,

5、out 对象 out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。

6、pageContext 对象 pageContext 对象的作用是取得任何范围的参数

7、config 对象 config 对象的主要作用是取得服务器的配置信息。

8、page 对象 page 对象代表JSP本身,只有在JSP页面内才是合法的。

9、exception 对象 exception 对象的作用是显示异常信息

十、四大作用域

  1. page域: 只能在当前jsp页面使用 (当前页面)

  2. request域: 只能在同一个请求中使用 (转发)

  3. session域: 只能在同一个会话(session对象)中使用 (私有的)

  4. context域: 只能在同一个web应用中使用 (全局的)

十一、Ajax

AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

十二、介绍线程死锁

线程死锁,当线程为了安全及同步时,用全局信号 量进行相互等待或是相互制约时程序 进入 了一个死锁状态 时(两个线程都停掉了)叫线程死锁。

 

十三、XML解析方式

 

DOM(Document Object Model) 生成和解析XML文档。由W3C提供的接口,它将整个XML文档读入内存,构建一个DOM树来对各个节点(Node)进行操作。

SAX(Simple API for XML) 生成和解析XML文档。SAX不用将整个文档加载到内存,基于事件驱动的API(Observer模式),用户只需要注册自己感兴趣的事件即可。

DOM4J生成和解析XML文档。dom4j是目前在xml解析方面是最优秀的(Hibernate、Sun的JAXM也都使用dom4j来解析XML),它合并了许多超出基本 XML 文档表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文档或流化文档的基于事件的处理

JDOM生成和解析XML 。 JDOM与DOM非常类似,它是处理XML的纯JAVA API,API大量使用了Collections类,且JDOM仅使用具体类而不使用接口。

十四、JDK与JRE

JDK与JRE的区别 JRE: Java Runtime Environment JDK:Java Development Kit JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。 JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。

 

十五、内存回收机制

分配内存与回收内存的标准是八个字:分代分配,分代回收。 由于字符串、对象和数组没有固定大小,所有当他们的大小已知时,才能对他们进行动态的存储分配。JavaScript程序每次创建字符串、数组或对象时,解释器都必须分配内存来存储那个实体。只要像这样动态地分配了内存,最终都要释放这些内存以便他们能够被再用。

十六、断点快捷键

快捷键 功能描述 F8 单步调试,不进入函数内部 F7 单步调试,进入函数内部 Shift+F7 选择要进入的函数 Shift+F8 跳出函数 Alt+F9 运行到断点 Alt+F8 执行表达式查看结果 F9 继续执行,进入下一个断点或执行完程序 Ctrl+F8 设置/取消当前行断点 Ctrl+Shift+F8 查看断点

十七、自动装箱拆箱

自动装箱,就是自动将基本数据类型转换为包装器类型;自动拆箱,就是自动将包装器类型转换为基本数据类型

 

十八、jquery

jQuery是一个快速、简洁的JavaScript框架,它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

十九、jsp指令和动作各自原理

 

三个指令: page include taglib 标签指令 六个动作: < jsp:include > 动态包含 < jsp:forward> 请求转发 < jsp:param> 设置请求参数 < jsp : useBean> < jsp : setProperty> 给指定的对象属性赋值 < jsp : getProperty >取出指定对象的属性值

 

二十、css样式怎么定义

1.新建一个HTML页面,命名为test.html,用于对CSS样式定义的说明。 2.在test.html页面定义一个div元素,并且通过<style type="text/... 3.给div定义CSS样式,可以直接使用元素div作为选择器来实现样式定义。

 

二十一、oracle分页

 

String sql = "select * from " + (select *,rownum rid from (select * from students order by postime desc) where rid<=" + pagesizepagenumber + ") as t" + "where t>" + pageSize(pageNumber-1);

 

二十二、.final,finally,finalize的区别

一、final :

1、修饰符(关键字) 如果一个类被声明为final,意味着它不能再派生新的子类,不能作为父类被继承。

2、将变量或方法声明为final,可以保证他们使用中不被改变。被声明为final的变量必须在声明时给定初值,而以后的引用中只能读取,不可修改,被声明为final的方法也同样只能使用,不能重载。

二、finally: 在异常处理时提供finally块来执行清楚操作。如果抛出一个异常,那么相匹配的catch语句就会执行,然后控制就会进入finally块,如果有的话。

三、finalize: 是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除之前做必要的清理工作。这个方法是在垃圾收集器在确定了,被清理对象没有被引用的情况下调用的。 finalize是在Object类中定义的,因此,所有的类都继承了它。子类可以覆盖finalize()方法,来整理系统资源或者执行其他清理工作。

 

二十三、怎么启动线程

继承Thread类

1.自定义类MyThread继承Thread类

2.MyThread类重写run方法。

实现Runnable接口

1.自定义类MyRunnable实现Runnable接口

2.重写run()方法

3.创建MyRunnable类的对象

4.创建Thread类的对象,并把步骤3创建的对象作为构造参数传递

5.启动线程

 

二十四、java为什么是跨平台的

 

因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。

 

二十五、get,post请求的区别

 

1、 Get请求提交的数据会在地址栏显示出来,而post请求不会再地址栏显示出来

2、 传输数据的大小 http Get请求由于浏览器对地址长度的限制而导致传输的数据有限制。而POST请求不会因为地址长度限制而导致传输数据限制。

3、 安全性,POST的安全性要比GET的安全性高。由于数据是会在地址中呈现,所以可以通过历史记录找到密码等关键信息。

二十六、lis和set的区别

 

List是有序的Collection。

Java List一共三个实现类:

分别是ArrayList、Vector和LinkedList。

Set是唯一的,不可重复的,

常用的实现类有HashSet、TreeSet、LinkedHashSet

 

二十七、hashmap怎么用

 

HashMap根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快 的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记 录的值为 null。HashMap 非线程安全。

 

二十八、还有ajax怎么实现同步和异步

 

AJAX中根据async的值不同分为同步(async = false)和异步(async = true)

 

二十九、还有文件传输怎么传

第一种:以字符串传参的方式发送到指定的接口取出其值(多个就采用数组) 第二种:采用流传输的方式传接口,这种可以批量传输且,大小无限制,支持多种类型文件上传

 

 

猜你喜欢

转载自www.cnblogs.com/zhaozhitong/p/12450152.html