面试问题总结(学习笔记)

来源:互联网 发布:linux网络管理命令 编辑:程序博客网 时间:2024/06/03 23:40

1、ArrayList和LinkedList的区别

ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引  但是缺点就是查找非常麻烦 要丛第一个索引开始
2、java程序经编译后会产生什么
machine codebyte codeDLL或者这三个都不产生,而是产生别的
byte  code  编译以后会生成.class文件,也就是字节码文件,你在使用开发工具(比如Myeclipse)时,可以去工作空间查看相应的文件!所以答案是byte code!
3、HashMap和Hashtable的区别
Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。 也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。 第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。 一些资料建议,当需要同步时,用Hashtable,反之用HashMap。但是,因为在需要时,HashMap可以被同步,HashMap的功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap都优先于Hashtable。 关于Properties 有时侯,你可能想用一个hashtable来映射key的字符串到value的字符串。DOS、Windows和Unix中的环境字符串就有一些例子,如key的字符串PATH被映射到value的字符串C:\WINDOWS;C:\WINDOWS\SYSTEM。Hashtables是表示这些的一个简单的方法,但Java提供了另外一种方法。 Java.util.Properties类是Hashtable的一个子类,设计用于String keys和values。Properties对象的用法同Hashtable的用法相象,但是类增加了两个节省时间的方法,你应该知道。 Store()方法把一个Properties对象的内容以一种可读的形式保存到一个文件中。Load()方法正好相反,用来读取文件,并设定Properties对象来包含keys和values。 注意,因为Properties扩展了Hashtable,你可以用超类的put()方法来添加不是String对象的keys和values。这是不可取的。另外,如果你将store()用于一个不包含String对象的Properties对象,store()将失败。作为put()和get()的替代,你应该用setProperty()和getProperty(),它们用String参数。
4、在java.sql包含哪些接口
(1) Statement  —— SQL语句执行接口Statement接口代表了一个数据库的状态,在向数据库发送相应的SQL语句时,都需要创建Statement接口或者PreparedStatement接口。在具体应用中,Statement主要用于操作不带参数(可以直接运行)的SQL语句,比如删除语句、添加或更新。(2) PreparedStatement —— SQL语句预编译接口   PreparedStatement也执行相应的SQL语句。它继承于Statement接口,除了具备Statement所有功能,还可以对SQL语句进行预处理。主要方法:① ResultSet executeQuery() throws SQLException在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。从不返回 null;如果发生数据库访问错误或者 SQL 语句没有返回ResultSet 对象则抛出SQLException异常。② int executeUpdate() throws SQLException在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL INSERT、UPDATE 或 DELETE 语句;或者是一个什么都不返回的 SQL 语句,比如 DDL 语句。返回值int表示影响的记录条数,一条都没有则返回0;③ boolean execute()throws SQLException在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。有结果集则返回true, 没有结果集则返回false; ④各种set方法   将指定位置的参数设置为指定的类型。比如ps.setString(3, “tarena”);(3) ResultSet —— 结果集操作接口   ResultSet接口是查询结果集接口,它对返回的结果集进行处理。ResultSet是程序员进行JDBC操作的必需接口。(4) ResultSetMetaData —— 元数据操作接口   ResultSetMetaData是对元数据进行操作的接口,可以实现很多高级功能。Hibernate运行数据库的操作,大部分都是通过此接口。可以认为,此接口是SQL查询语言的一种反射机制。ResultSetMetaData接口可以通过数组的形式,遍历数据库的各个字段的属性,对于我们开发者来说,此机制的意义重大。  JDBC通过元数据(MetaData)来获得具体的表的相关信息,例如,可以查询数据库中有哪些表,表有哪些字段,以及字段的属性等。MetaData中通过一系列getXXX将这些信息返回给我们。                      数据库元数据 Database MetaData   使用connection.getMetaData()获得MetaData包括:                        包含了关于数据库整体元数据信息。                结果集元数据 Result Set MetaData   使用resultSet.getMetaData()获得                                      比较重要的是获得表的列名、列数等信息。元数据对象:ResultSetMetaData meta = rs.getMetaData(); 字段个数:meta.getColomnCount(); 字段名字:meta.getColumnName(); 字段JDBC类型:meta.getColumnType(); 字段数据库类型:meta.getColumnTypeName();
5、数据库存储过程
http://blog.csdn.net/yang3wei/article/details/6281255
6、UML图有哪些
UML包括九种图:使用案例图、类图、对象图、构件图、部署图、活动图、协作图、状态图、序列图
7、软件工程的步骤
这个过程可能包括投入、需求分析、规格说明、设计、实施、验证、安装、使用支撑和文档化,还可能包括短长期的修复和升级以满足用户增长的需求。因为维护、没有被普遍接受,所以在这里没有包括进来。在美国国防部(DoD)维护包括软件修复和升级,而在商业计算机领域它是指提供服务、修复软件缺陷但不包括升级。 
8、

List, Set, Map是否继承自Collection接口?

List和Set是继承自Collection接口的接口,Set不允许重复的项目,List允许重复项目,Set接口派生的类有TreeSet,HashSet,LinkedHashSet。List接口派生的类有ArrayList,Vector等。Map是独立的接口,不继承Collection接口
9、JSP指令都包含哪些

 JSP指令

l       JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。在JSP 2.0规范中共定义了三个指令:

l       page指令

l       Include指令

l       taglib指令

   taglib指令

l       Taglib指令用于在JSP页面中导入标签库,讲自定义标签技术时讲

10、读取当前WEB应用的资源的对象(读取资源)

HttpServletContext

11、jsp9个隐含变量

是隐藏对象。1、out 来源于java.io.Writer类,它用于发送输出流到客户端。2、request 来源于javax.servlet.http.HttpServletRequest接口。它被关联到每一个HTTP请求。3、response 来源于javax.servlet.http.HttpServletResponse。response对象用于把取得的数据返回到客户端。4、pageContext 提供访问JSP页面的命名空间。它也提供用来访问其他的JSP隐含对象。5、session 来源于javax.servlet.http.HttpSession。它用于存储客户端请求的信息,因此它是有状态交互式的。6、application 来源于javax.servlet.ServletContext。7、config 来源于ServletConfig,它包含了当前JSP/Servlet所在的WEB应用的配置信息。8、page 来源于当前被访问JSP页面的实例化。它实际使用的是JSP转换成的Servlet。9、exception 用于捕获JSP抛出的异常。它只有在JSP页面属性isErrorPage=true时才可用。

12、session和request的区别

request对象和session对象的最大区别是生命周期 request对象的生命周期是针对一个客户端(说确切点就是一个浏览器应用程序)的一起请求 当请求完毕之后,request里边的内容也将被释放点 ,也就是request的生命周期只在数据提交而session的生命周期也是针对一个客户端 但是却是在别人设置的会话周期内(一般是20-30分钟)session里边的内容将一直存在 即便关闭了这个客户端浏览器 session也不一定会马上释放掉的简单来说可以这么理解session相当于是一个客户端的全局变量;  request是某一次访问的局域变量;
13、String和StringBuffer的区别
在java中有3个类来负责字符的操作。1.Character 是进行单个字符操作的,2.String 对一串字符进行操作。不可变类。3.StringBuffer 也是对一串字符进行操作,但是可变类。String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String 是final类,即不能被继承.StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象它只能通过构造函数来建立,StringBuffer sb = new StringBuffer();note:不能通过付值符号对他进行付值. sb = "welcome to here!";//error对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中付值的时候可以通过它的append方法.sb.append("hello");字符串连接操作中StringBuffer的效率要比String高:String str = new String("welcome to ");str += "here";的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后再将StringBuffer toSting();这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
14、int和Integer 的区别
1.int是基本的数据类型,直接存数值;2.Integer是int的封装类;integer 是对象,用一个引用指向这个对象;Integer 是一个类,是int的扩展,定义了很多的转换方法。3.int和Integer都可以表示某一个数值;
4.int和Integer不能够互用,因为他们两种不同的数据类型;
15、SELVERT的生命周期
分为以下几个步骤,第一,加载并实例化,第二,初始化,第三,服务,容器启动的时候,会加载servlet的class,并new出这个对象,然后,当用户请求这个servlet的时候,容器会调用init方法初始化这个servlet,这也是整个生命周期中只会调用一次的方法,然后,会调用service方法,由这个方法调用doGet或doPost方法来响应用户,然后,容器在可用资源紧张或是长期没有对Servlet发出请求的情况下,会销毁这个servlet。

16.stringbuffer和stringbuilder的区别

1.  在执行速度方面的比较:StringBuilder >  StringBuffer   2.  StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。3.  StringBuilder:线程非安全的  StringBuffer:线程安全的    当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。对于三者使用的总结:1.如果要操作少量的数据用 = String                    2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder                    3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer


 




0 0
原创粉丝点击