java每次面试中的问题整理,java篇(详解)

Java集合框架是什么,集合框架优点!

最初的java版本包含几个集合类,Vector,Stack,HashTable,和Array.

Java1.2提出了囊括所有集合的接口,实现和算法的集合框架。集合框架的部分优点↓

1,实现核心集合类降低开发成本.并非实现我们自己的集合类,

2,随着使用经过严格测试的集合框架类,代码质量会得到提高,

3,通过使用JDK附带的集合类,可以降低代码维护成本,

4,复用性和可操作性,

集合框架中泛型有什么优点,

Java1.5引入的泛型,所有集合的实现都大量的使用它,泛型允许我们为集合提供一个可以容纳的对象类型,如果添加其他类型的元素,会在编译的时候报错,避免了在运行时出现的类未找到异常(ClassCastException),泛型使代码更加整洁,不需要显示转换,和instanceOF操作符,同时也可以给运行带来好处,因为不会产生类型检查的字节码指令。

Java集合框架的基础接口有哪些?

Collection为集合层次的根接口,一个集合代表一组对象,这些对象也就是他的元素,java平台不提供任何接口的实现。

Set是一个不能包含重复元素的集合,这个集合对数学集合抽象进行建模,被用来代表集合,就像一副扑克牌。

List是一个有序的集合,可以包含重复的元素。你可以通过索引来访问任何元素。List更像长度动态变换的数组。

Map是将一个key映射到value的对象,一个Map不能包含重复的Key,每个Key最多映射一个value,

4.为何Collection不从Cloneable和Serializable接口继承?

Collection接口指定一组对象,对象即为它的元素。如何维护这些元素由Collection的具体实现决定。

为什么Iterator接口没有具体的实现,

Iterator接口定义了遍历集合的方法,但他的实现则是集合实现类的责任,每个能够返回用于遍历的iterator的集合类都有他自己的Iterator实现内部类。

为什么Map接口不继承Collection接口,

尽管Map接口和实现是集合框架的一部分,但Map不是集合,集合也不是Map所以Map继承Collection毫无意义,

如果Map继承collection那么元素去哪里?

Map以键值对的方式存储数据,她提供抽取Key或Value列表集合的方法,他不符合一组对象的规范。

Iterator是什么

Iterator接口提供遍历任何collection的接口。迭代器允许调用者在迭代过程中移除元素。

Eunmeration和iterator接口的区别?

Enumeration的速度是iterator的两倍,使用的内存少。

Enumeration非常基础,也满足了基础的需要,但是

和Enumeration相比,iterator更加安全,因为当一个集合正在遍历的时候,他会阻止其他线程去修改集合,

迭代器取代了Enumeration在JAVA集合中的地位,迭代器允许调用者在迭代过程中移除元素。而Enumeration不可以做到这一点。

为什么没有Iterator.add()这个方法向集合中添加元素,

Iterator协议不能确保迭代的次序,Listiterator没有add操作是因为他要确保迭代的顺序,

为什么迭代器没有一个方法可以直接获取下一个元素,而不需要移动游标,

他可以在当前iterator的顶层实现,但是他用的很少,如果把他加到接口中,每个继承都需要去实现它,没有意义,

Iterater和Listiterator之间有什么区别,

1,iterater可以遍历Set和List,而ListIterator只可以遍历List.

2,Iterater只可以向前遍历,而ListIterator可以双向遍历,

ListIterator继承自Iterater,扩展了一些额外的功能,比如添加替换一个元素,获取前面或者后面元素的索引位置。

遍历List的方式

Listlist=new ArrayList();

For(String obj : list){

System.out.print(obj);

}

Iterator it=List.iterater();

While(it.hasNext()){

String obj=It.next();

System.out.println(obj);

}

迭代器是线程安全的,因为可以确保当前遍历的集合被元素更改的时候,会抛出ConcurrentModificationException

集合框架中通用算法有哪些,

JAVA集合提供常用的算法实现,比如排序和搜索,Collections类包含这些算法的实现,大部分算法使操作List的,有一些算法对所有集合都可以使用,比如排序,搜索混编,最大最小值。

如何对一组对象进行排序

可以使用Arrays.sort();方法

如果排序对象列表可以使用Collection.sort();

或者Comparator的重载的方法,sort();

Collections内部使用数组排序方法,性能相同,只是Collections需要花时间将列表,转换为数组。

Collections类是什么?

Java.util.Collections是一个工具类,只包含静态方法,他们操作或返回集合它包含操作集合的多态算法,返回一个由集合指定的新集合和其他内容,这个类包含集合算法的方法,比如折半搜索,排序,混淆,和逆序等

哪些集合提供对元素的随机访问?

ArrrayList,HashMap,TreeMap,HashTable类提供对元素的随机访问。

哪些集合是线程安全的?

Vector,HashTable,Prop,erties,和Stack是同步类,是线程安全的,可以在多线程的环境下使用,

JAVA1.5并发API包括一些集合类,允许迭代时修改,因为他们都工作在集合的克隆上,所以他们在多线程环境中是安全的。

Array和ArrayList区别什么时候更适合用Array?

Array可以容纳基本类型和对象,ArrayList只能容纳对象。

Array是指定大小的,而ArrayList大小是固定的。

Array没有ArrayList功能多,比如addAll,removeAll,iterator等。尽管ArrrayList功能多,但有时 Array比较好用,

如果大小已经被指定,大部分情况下,是存储和遍历他们,

如果是多维数组使用[][]比List<List<>>更容易

什么时候用HashMap什么时候用TreeMap?

HashMap适合进行插入,删除,和定位这类操作。

TreeMap适合对Key进行遍历

HashMap和HsahTable的区别?

1,HashMap允许key和value为空,HashTable不允许为空。

2,HashTable是同步的,而HashMap不是。所以HashMap适合单线程环境,HashTable适合多线程环境,

3,HashMap提供对Key和Set进行遍历,因此他是fail-fast的,但是HashTable提供对key的Enumeration进行遍历,他不支持fail-fast。

4,JAVA1.4中添加了LinkedHashMap,HashMap的一个子类,如果想要便利顺序很容易从HashMap转向LinkedHashMap,但是HashTable不是这个样子,他的顺序是不可预知的。

在迭代集合的时候,如何避免ConcurrentModificationException

遍历一个集合时,我们可以使用并发集合来避免这个异常。

比如使用CopyOnWriteArrayList而不是ArrayList

HashCode()和equals()方法的重要性。

HashMap使用Key对象的HashCode()和equals()方法决定key-value对的索引.equals和hashCode的实现应该遵守规则。

例:o1.equals(o2)那么o1.hashCode()==o2.hashCode()总是true.

O1.hashCode()==o2.hashCode(),并不意味o1.equals(o2)为true.

Map接口提供了哪些不同的集合视图,

Set keyset():返回map中包含的所有key的一个Set视图。
Collection values(),返回一个Map中包含所有value的一个Collection视图。
Set<Map.Entry<K,V>>ebtrySet()返回一个map中包含映射的一个集合视图。
从Map中移除对应的映射时,他们都不支持add和addAll操作。

队列

关于集合的实践

1,根据需要选择正确的集合类型,比如,如果指定了大小,我会选Array并不是ArrayList,如果按照顺序遍历Map,我会用TreeMap,

如果不想重复,就用Set集合。

基于接口编程,而非基于实现编程,它允许我们后来轻易地改变实现。
总是使用类型安全的泛型,避免在运行时出现ClassCastException.
使用JDK提供的不可改变类,作为Map和Key可以避免自己实现hashCode()和equals();
尽可能的使用Collection工具类,或者获取只读,同步或者空的集合,而非编写自己的实现,他将会提高代码的重用性,因为他有着,更好地稳定性,和可维护性。

对spring IOC 的理解

Ioc 就是控制反转,不是一种技术,而是一种思想,将组建对象的控制器从代码本身转移到外部容器。

ioc在运行中动态的向某个对象提供她所需要的对象,是通过依赖注入来实现的,

DI依赖注入:将类的创建和使用分开。

可以减少代码之间的耦合

依赖注入的方式

Set

Interface 接口

Constructor 构造

Ajax和javaScript的区别。

Ajax是一种创建交互式网页应用的开发技术,其中使用的技术中包括javascript.

Javascript是一种在浏览器端执行的脚本语言。

ajax是sun公司的,javascript是网景公司的,

Ajax 属性

1.url:

要求为String类型的参数,发送请求的地址。

2.type:

要求为String类型的参数,请求方式(post或get)默认为get

3.timeout:

要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置

dataType:

要求为String类型的参数,预期服务器返回的数据类型。

Success回调函数

3,jquery与JavaScript的区别

答:jquery 就对javascript的一个扩展,封装,比javascript更好用,更简单。jquery就是要用更少的代码,漂亮的完成更多的功能。
9、JSP的内置对象及方法

Request:取客户端表单域信息及cookie, header, 和session

response :对客户端的响应返回文本、写cookies。

Session:Session一个用户多个页面共享同一变量。

application:存放容器级的变量。

out:向客户端打印html文本.

page :表示从该页面产生的一个servlet实例

pageContext :当前jsp页面的上下文环境,得到请求,响应等内置对象,

config:用于存取servlet实例的初始化参数。

exception:异常,当iserrorpage=true

json

json是一种数据传输格式。

json的类型:

model

{“name”:“aaa”,“age”,18}

list

[{“name”:“aaa”,“age”,18},{“name”:“aaa”,“age”,18}]

map

{“list1”:[{“name”:“aaa”,“age”,18},{“name”:“aaa”,“age”,18}],“list2”:[{“name”:“aaa”,“age”,18},

Get和post

一般浏览器输入网址访问资源都是通过get方式,在form表单提交中可以通过method指定提交方式,默认是get方式

最基本的方法有四种 分别是get,post,put,delete对应查,改,增,删,

Get和post的区别

get用于查看资源,

post一般用于更新操作,个人认为这是本质的区别,

String和 StringBuffer的区别

答:都是存字符串,String类对象不可被修改, StringBuffer类可以被修改,使用append方法
46、String and StringBuffer的区别?

String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合,速度慢。

StringBuffer:长度可变,可以将多个字符串值直接联合,效率高
68、Java有没有goto?

java中的保留字,现在没有在java中使用。

48、集合的作用是什么?

可以存储数据,对数据进行增删改查操作,可以存放不同类型的对象
49、集合的通用方法有那些?通用方法是什么?(操作)

集合List 的遍历方法有:

Iterator:

Enumeration

For

Get

set

Collection的通用方法有:

Iterator()

Add()

Clear();

remove()
50、说出ArrayList,Vector, LinkedList的存储性能和特性HashMap和Hashtable的区别

ArrayList Vector:以数组的方式存储,增、删慢,查、改快

   ArrayList:线程不安全,速度快

   Vector:线程安全,速度慢(synchoronized)

LikedList: 以单链表的方式存储,增、删快,查、改慢
51、Collection 和 Collections的区别。

Collection是集合的根接口,其下有set及list

Collections是集合的算法。
52、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用。

在比较时先调用hashCode方法,如果不相同,证明不相等。

如果相同,再调用equals方法,如果equals方法相同,证明相等,不相同,证明不相等。

==:主要用在基本数据类型及引用

Equals:主要是对象或对象引用的比较。

集合中是否包含某一个元素用contains来判断。
53、List, Set, Map是否继承自Collection接口?

List,set继承于Collection

Map没有继承于Collection,其相对是独立的。属于Collection类型的对象,

Map可以通过构造函数将一个集合构造成另外一个集合。
54、面向对象的特征有哪些方面

面向对象的特征:抽象,封装,继承,多态

1.抽象:是将共有的属性、方法放到父类中

2.继承:是子类继承于父类,具有父类的所有属性与方法,可以重用,可以覆盖。

3.封装:是将属性私有化,提供共有的get,set方法。

4.多态性:子类new父类,方法的重写和重载

2,mybatis和hibernate的区别

答:1. 而mybatis是半自动框架。 hibernate是全自动框架,

 2. mybatis比hibernate的SQL灵活性高

 3. hibernate比mybatis拥有更完整的日志系统

 4. hibernate数据库移植性比mybatis好很多。

 5. mybatis相比hibernate更注重细节

 mybatis:小巧轻便、简单、高效、半自动化

 hibernate:强大方便、复杂、高效、全自动化

Mysql关键字

最大max、最小min、平均avg、求和sum、是否重复distinct、统计行数count等查询

%代表任意个任意的字符,可以是没有

limit关键字优先级:条件>排序>limit

什么是SVN?

SVN=版本控制+备份服务器。

他可以记住每次上传到这个服务器的档案内容,并自动赋予每次变更一个版本号。

为什么使用SVN?

1.备份工作档案。万一硬盘坏了,无法修复,放在这里比放在硬盘里安全。

2.版本控制。我们无法保证手中的最新版本永远是对的。如果没有做好版本控管,那么,最差的情况就是要全部重来。

3.伙伴间的数据同步的重要性。很多时候,除了个人,工作伙伴也需要你的档案。有一个统一的仓库,方便传输和管理。

4.备份不同版本是很耗费硬盘空间的。单纯的档案备份,占用空间会累加,

浪费内存

poi是什么?

   比如在后台添加商品的时候,怎么整呢?不可能一条一条的添加,这个时候就用到了我们的poi。

   poi就是批量的操作文件或数据的导入以及导出。

   我们一般采用的是用excel的方式将信息导入或导出,

   //定义一个工作簿

   //创建一个sheet,名字简单取为“111”

   读取数据库的信息,采用的是使用jdbc工具类的方式

   //创建行

   //创建单元格。这里是把数据库的字段写到第一行单元格

   //循环将数据写入到excel

   //输出

SpringMVC原理图

第一步:用户发起请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配置或者注解进行查找

第三步:找到以后处理器映射器(HandlerMappering)像前端控制器返回执行链(HandlerExecutionChain)

第四步:前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)

第五步:处理器适配器去执行Handler

第六步:Handler执行完给处理器适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView

第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析

第九步:视图解析器像前端控制器返回View

第十步:前端控制器对视图进行渲染

第十一步:前端控制器向用户响应结果

前端控制器(DispatcherServlet):接收请求,响应结果

处理器映射器(HandlerMapping):根据URL去查找处理器

处理器(Handler):(需要程序员去写代码处理逻辑的)

处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器

视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面

30
M-Model 模型(完成业务逻辑:有javaBean构成,service+dao+entity)
V-View 视图(做界面的展示 jsp,html……)
C-Controller 控制器(接收请求—>调用模型—>根据结果派发页面)

22、Spring MVC的优点:

1、易于通view框架无缝集成,采用IOC便于测试

2、典型的纯MVC构架,Struts是不完全基于MVC框架的

3、与tapestry是纯正的Servlet系统,(这也是相对于Struts的优势)

12、jsp页面中两种跳转方式分别是什么?有什么区别?

转发: 保留上次的request

跳转:不保留上次的request

13数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。

String有有length()这个方法。3

67、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)12 Math.round(-11.5)-11 round方法返回与参数最接近的长整数,参数加1/2后求其floor.
78、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

不对,有相同的hash code。

70、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。任何抽象类都是实际类Object的子类。

71 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

55、String是最基本的数据类型吗?

基本数据类型包括byte、int、char、long、float、double、boolean和short。

java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

java中8种数据类型所占字节数如下:

boolean 这个试编译环境而定 
 
byte 1个字节   8位
 
short 2个字节  16位
 
char 2个字节   16位
 
int 4个字节    32位

float 4个字节  32位
 
double 8个字节 64位

long 8个字节 64位

56、int 和 Integer 有什么区别?

   Int是基本数据类型,不是对象,占一个内存空间,没有方法。与其同类的有long,char,doble

   Integer是封装类,具有方法及属性。与其同类的有Long,Double.Float

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

   运行时异常:java JVM抛出的异常,代码中不用处理。

   一般异常:用户抛出的异常,如果用throws 声明了,调用这个方法的代码必须对其处理。

abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

都不能
抽象类和接口的区别

1 接口可以被多重实现,而抽象类只能被单一继承

2 抽象类中可以有构造方法,普通方法和静态方法。接口中只能有抽象方法,

3抽象类方法默认是public,protected 接口中访问修饰符只能是public, 默认public static

4 抽象类里可以定义常量和变量,而接口中只能定义常量
73、构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
74、是否可以继承String类?

String类是final类故不可以继承。

58、&和&&的区别?

   &:与: 左边若为false右边还执行。

   &&:短路与,左边若为false右边不执行。

75、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

SpringMVC 组件

DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。

HandlerMapping:扩展映射处理器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

HandlAdapter:扩展处理器适配器,支持更多类型的处理器。

ViewResolver:扩展视图解析器,支持更多类型的视图解析,例:jsp、pdf、excel等。

Springmvc题

  1. 讲下SpringMvc和Struts1,Struts2的比较的优势

性能上Struts1>SpringMvc>Struts2 开发速度上SpringMvc和Struts2差不多,比Struts1要高

讲下SpringMvc的核心入口类是什么,Struts1,Struts2的分别是什么

SpringMVC是DispatchServlet,

Struts1是ActionServlet,

Struts2的是StrutsPrepareAndExecuteFilter

  1. SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决

是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的

解决方案是在控制器里面不能写字段

  1. SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代

一般用@Conntroller注解,表示是表现层,不能用用别的注解代替.

  1. @RequestMapping注解用在类上面有什么作用

用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

  1. 怎么样把某个请求映射到特定的方法上面

直接在方法上面加上注解@RequestMapping,并在这个注解里面写上要拦截的路径

  1. 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置

可以在@RequestMapping注解里面加上method=RequestMethod.GET

  1. 如果在拦截请求中,我想拦截提交参数中包含"type=test"字符串,怎么配置

可以在@RequestMapping注解里面加上params=“type=test”

  1. 我想在拦截的方法里面得到从前台传入的参数,怎么得到

直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样

  1. 如果前台有很多个参数传入,这些参数都是一个对象的,那么怎么样快速得到这个对象

直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面

  1. 怎么样在方法里面得到Request,或者Session

直接在方法的形参中声明request,SpringMvc就自动把request对象传入

  1. SpringMvc中函数的返回值是什么.

返回值可以有很多类型,有String, ModelAndView,当一般用String比较好

  1. SpringMvc怎么处理返回值的

SpringMvc根据配置文件中InternalResourceViewResolver的前缀和后缀,用前缀+返回值+后缀组成完整的返回值

f-sm-14. SpringMVC怎么样设定重定向和转发的

在返回值前面加"forward:“就可以让结果转发,譬如"forward:user.do?name=method4” 在返回值前面加"redirect:“就可以让返回值重定向,譬如"redirect:http://www.baidu.com

  1. SpringMvc用什么对象从后台向前台传递数据的

通过ModelMap对象,可以在这个对象里面用put方法,把对象加到里面,前台就可以通过el表达式拿到

  1. SpringMvc中有个类把视图和数据都合并的一起的,叫什么

叫ModelAndView

  1. 怎么样把ModelMap里面的数据放入Session里面

可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key

  1. SpringMvc怎么和AJAX相互调用的

通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象

具体步骤如下

1.加入Jackson.jar

2.在配置文件中配置json的映射

3.在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解

  1. 当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理

要加上@ResponseBody注解
Windows 和Linux 的区别

1在收费方面两个系统对个人用户来说都是免费使用的.

2windows系统可以运行绝大多数的软件以及游戏,对硬件厂商几乎百分百的支持,

Linux系统下可以直接运行的软件和游戏很少,很少有人会在linux系统下玩游戏,

3在安全性方面我觉得是一样的,windows系统的漏洞病毒多是因为用户使用量多,

linux用户少的病毒不会有优先考虑的,

4 linux对外部开放源代码,

5windows主攻图形界面,系统桌面容易使用,

Linux主攻字符模式运行,图形界面只是附属品,

6如果没接触过电脑

使用windows系统身边找个上过网的都可以教你两下,

如果是linux 系统 上网找文档教程吧,

其实没什么区别但是如果修电脑,修windows比修linux多,

ervlet简介

Servlet是处理web请求的框架。没有main方法,不可以独立的运行,servlet的运行需要容器的支持,Tomcat是最常使用的JSP/servlet容器。

Servlet 运行在 Servlet 容器中,有容器管理servlet从创建到销毁的的过程,

当用户向servlet发送请求的时候,servlet容器会创建相对应的servletRequest和servletResponce两个对象,然后调用service方法,方法从对象获得客户信息,处理请求,向客户返回响信息。

Servlet的生命周期

1、当servlet被部署在应用服务器中(应用服务器中用于管理Java组件的部分被抽象成为容器)以后,由容器控制servlet的生命周期。

2、除非特殊制定,否则在容器启动的时候,servlet是不会被加载的,servlet只会在第一次请求的时候被加载和实例化。
3、servlet一旦被加载,一般不会从容器中删除,直至应用服务器关闭或重新启动。但当容器做内存回收动作时,servlet有可能被删除。也正是因为这个原因,第一次访问servlet所用的时间要大大多于以后访问所用的时间。

什么是servlet

Servlet是web端的处理web请求的框架。

每一个servlet都有doGet doPost service方法。

doGet方法处理get请求。

doPost方法处理Post请求。

service 可以处理get和post请求。

每个方法都有2个参数 httpSerlvetRequest(处理请求),httpServletResponse(处理相应的)这两个参数的使用需要一个jar包 servlet-api.jar

存servlet的项目结构

entity实体类

dao 数据访问层

service 业务逻辑层

servlet/web 请求层。

private int i,j;

servlet是单例的,springmvc也是单例的 正是因为Servlet和springmvc都是单例的,所以有资源竞争问题。不建议在类中定义全局变量。

Servlet的实例过程一般如下:

当服务器接收一个客户端请求时,需要做一下四件事情。

(1) 加载和实例化

如果Servlet容器还没实例化一个Servlet对象,此时容器装载和实例化一个 Servlet。创建出该 Servlet 类的一个实例。如果已经存在一个Servlet对象,此时不再创建新实例。

初始化
在产生 Servlet 实例后,容器负责调用该 Servlet 实例的 init() 方法,在处理用户请求之前,来做一些额外的初始化工作。
(3) 处理请求
当 Servlet 容器接收到一个 Servlet 请求时,便运行与之对应的 Servlet 实例的 service() 方法,service() 方法根据用户的请求调用相对应的doGet或doPost 方法来处理用户请求。然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。
(4) 销毁
当 Servlet 容器决定将一个 Servlet 从服务器中移除时 ( 如 Servlet 文件被更新 ),便调用该 Servlet 实例的 destroy() 方法,在销毁该 Servlet 实例之前,来做一些其他的工作。

5、如何实现一个自定义的servlet?

extends HttpServlet 并覆盖doPost或doGet方法

在web.xml中进行部署

Servlet的生命周期是什么?

加载实例化

Init

Service多次执行doGet或doPost

destroy

JSP中的三种Java脚本

1.<%…%>:该脚本中写的是java代码,但是这里面不能定义类、方法以及成员变量。

2.<%=…%>:该脚本用来输出,书写的是java的表达式

3.<%!..%>:该脚本用来声明,例如声明类的成员变量和成员方法。

13、描述JSP和Servlet的区别、共同点、各自应用的范围

Jsp主要在于页面的显示动态生成页面,可以与html标记一起使用,其还是要生成为一个servlet。

Servlet:主要是控制的处理,如调用业务层,跳转不同的jsp页面。

MVC:

          Jsp:V

          Servlet:C

          JavaBean:M

↑已经面试过的知识点


给我一个你最常见到的runtime exception

ArithmeticExceptio 算术异常类

ArrayIndexOutOfBoundsException 数组下标越界异常类

ArrayStoreException 数组类型不兼容异常

ClassCastException 类型强制转换异常类

ClassNotFoundException 未找到相应类异常

FileNotFoundException 文件未找到异常类

IOException 输入输出异常类

NegativeArraySizeException 建立元素个数为负数的数组异常类

NullPointerException 空指针异常类

NumberFormatException 字符串转换为数字异常类

NoSuchFieldException 字段未找到异常类

NoSuchMethodException 方法未找到异常类

SQLException 操作数据库异常类

StringIndexOutOfBoundsException 字符串索引超出范围异常

IndexOutOfBoundsException 对象(数组或字符串)的索引超出范围时抛出

ArrayStoreException, 数组类型不兼容异常,

BufferOverflowException,

BufferUnderflowException,

CannotRedoException,

CannotUndoException,

CMMException,

ConcurrentModificationException,

DOMException,

EmptyStackException,

ImagingOpException,

IndexOutOfBoundsException,

MissingResourceException,

NegativeArraySizeException,

NoSuchElementException,

NullPointerException,

ProfileDataException,

ProviderException,

RasterFormatException,

SecurityException,

SystemException,

一般异常:

IOException

FileNotFoundException

SqlException

super()与this()的区别?

This():当前类的对象,super父类对象。

Super():在子类访问父类的成员和行为,必须受类继承规则的约束

而this他代表当前对象,当然所有的资源都可以访问.

在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.
而在方法中super和this使用的方法就差不多了.只不过super 要考虑是否能访问其父类的资源.

作用域public,protected,private,以及不写时的区别?

Public:不同包、同一包、类内都可用
Private:类内
Protected: 不同包的子类、同一包、类内都可用
不写时:同一包内、类内

编程输出如下图形。



代码如下:

public class Print {

public static void main(String[] args) {

   for (int i = 0; i < 5; i++) {

       for (int j = 5; j > i; j--) {

          System.out.print("*");

       }

       System.out.println();

   }

}

}

在JAVA中,如何跳出当前的多重嵌套循环?

用break; return 方法。

什么是java序列化,如何实现java序列化?(写一个实例)

序列化:

处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:

将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

JAVA的事件委托机制和垃圾回收机制

java 事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。

垃圾回收机制 垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为null,则次对象适合进行垃圾回收

38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

动态内存:存放类实例

静态内存:类本身

垃圾收集主要针对的是动态内存,一般当内存不够用时会进行垃圾收集。

或通过System.gc()或者Runtime.getRuntime().gc()手动收集,但不保证一定执行。
65、GC是什么? 为什么要有GC?

GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
84、垃圾回收的优点和原理。并考虑2种回收机制。

优点:

程序员不用担心内存管理,因为垃圾收集器会自动进行管理,开发方便。运行优先非常低,程序无法清楚实例什么时候被消毁。

85、描述一下JVM加载class文件的原理机制?

JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

MySQL数据库

关于mysql中的drop delete 和 truncate 的区别

1)drop 删除的是表,delete和truncate删的是表中的数据,重新插入数据id从1开始自增。delete删除数据的时候可以加where关键字

2)delete删除数据的时候删除的是一行,将删除的操作保存在日志中,以便回滚操作;

truncate table 是一次性从表中删除所有数据,该操作不保存在日志中,删除行不能恢复。删除过程中不会触发与表有关的删除触发器,执行速度快。

3)表被 truncate删除时,索引占用的空间恢复成初始大小,

    delete删除时不会减小索引占用空间,

    drop  删除释放索引占用空间。

4)一般来说 drop > truncate > delete

5)应用范围 truncate对表,delete 对表和视图。

6)truncate 和delete删除的是数据,drop删除的是表的结构和数据。

7)truncate和不带where的delete只能删除数据,不能删表的结构,

drop删除的是表的,结构,数据,约束,触发器,索引,依赖的存储过程函数被保留

其状态改为invalid.

8)truncate drop 是 DLL操作立即生效,数据不能回滚,

delete 是DML,操作会放到rollback中,事务提交后生效,相应的tigger会被触发。

9)谨慎使用drop, truncate,一般使用delete和where的组合,删除表用drop,删除和事务无关的数据用truncate,想触发tigger用delete。

10)truncate 比delete速度快速度快,效率高,

11)trancate 删除表中的数据,结构,列,约束。索引等保持不变,

12)有外键约束的表不可以使用truncate 应使用不带where子句的delete语句,teuncate 不记录在日志中,所以不能激活触发期。

一、设计数据库的步骤

1.需求分析阶段

2.概要设计阶段

3.详细设计阶段

二、数据库的实体类中间的关系 paga8

*1:1 一对一 主键

*1:N 一对多 一所大学对应多个老师或者学生

*M:N 多对多 老师和学生

三、规范设计

第一范式:确保每列的原子性

第二范式:在第一范式的基础上,确保表中每列都和主键间接相关;

第三范式:在第二范式的基础上,确保表中每列都和主键直接相关;

四、数据库的实现

一个完整的数据库包括三部分:至少包含主文件和日志文件

1主数据文件【.MDF】

2次要数据文件【.ndf】

3日志文件【.ldf】

约束的目的:

1实体完整性

2域完整性

3引用完整性

4自定义完整性

常用约束类型

1主键约束

2非空约束

3唯一约束

4检查约束

5默认约束

6外键约束

约束的语法

添加约束: Add constraint 约束名 约束类型 具体的约束说明

删除约束:drop constraint 约束名

五、数据库变量的使用

局部变量: 以@为前缀标记 例如 @err

全局变量: 以@@为前缀 例如:@@error

输出语句:print

1.数据类型转换:

1CAST(表达式 as 数据类型)

2CONVERT(数据类型[(长度)],表达式[样式])

2.逻辑控制语句

1顺序结构: begin end

2分支结构:if else case end

3循环结构: while

3.使用GO 来分割查询单元

*数据库事务

什么是事务?

是一种机制,一个操作序列。

要么都执行,要么都不执行

特点:

1原子性

2一致性

3隔离性

4持久性

语法:

begin transaction 开始事务

commi transaction 提交事务

roback transaction 回滚事务

定义常量:

declare

(二)视图

定义:

是一个虚拟的表,通常用来查看一个或多张表中的数据

视图的3种操作:

1筛选表中的行;

2防止未经许可的用户访问敏感数据

3将多个物理数据表抽象为一个逻辑数据表

注意事项:

1每个视图可以查询多个表

2视图可以嵌套视图

3不能包含 order by 子句,不能包含into,不能引用临时表或表变量

(三)索引

索引的分类:

*唯一索引:不允许两行具有相同的索引值;

*主键索引:要求主键中的每个值是非空的唯一的;

*聚集索引:一个表只能包含一个聚集索引

*非聚集索引:一个表可以有多个

*复合索引

*全文索引

语法:

创建索引:

CREATE INDEX INDEX_NAME ON TABLE_NAME(列名)

删除索引:

DROP INDEX TABLE_NAME.INDEX.NAME

*学习XML

节点:

1成对出现

2区分大小写

3是一种标记语言

mybatis介绍

是一个持久层的orm框架

orm是什么? object relational mapping 对象关系映射。

特点:轻量,小巧,简单,易学。
9 Spring 应用框架技术
1、Spring和Struts的区别?
strusts:是一种基于MVC模式的一个web层的处理。

   Spring:提供了通用的服务,ioc/di aop,关心的不仅仅web层,应当j2ee整体的一个服务,可以很容易融合不同的技术struts hibernate ibatis ejb remote springJDBC springMVC

2、什么是aop,aop的作用是什么?

Oop:纵向的业务

Aop:oop的一个横向的服务,是对oop进一步的补充,提供安全、事务、日志等的集中式处理,相关的装备before、around、after exception
3、aop中的关键名词有些那些,相互关系是什么?

拦截器: 代理

装备(advice)

目标对象

关切点:条件

连接点:方法、属性
4、依赖注入的方式有几种,各是什么?

Setter

Interface

constructor
5、spring中的核心类有那些,各有什么作用?

BeanFactory:产生一个新的实例,可以实现单例模式

BeanWrapper:提供统一的get及set方法

ApplicationContext:提供框架的实现,包括BeanFactory的所有功能
6、ApplicationContext的作用

beanFactory

国际化(getMesage)

资源管理:可以直接读取一个文件的内容(getResource)

加入web框架中(加入一个servlet或监听器)

事件处理
7、如何实现资源管理

使用

applicationContext.getResource(“classpath:文件名”):在src根目录下,在类路径下

applicationContext.getResource(“classpath:/chap01/文件名”): 以src根目录下的基准往下走。

applicationContext.getResource(“file:c:/a.properties”):在系统文件目录下。
8、如何实现加入web框架中

在web.xml中加入如下同容,在启动web服务器时加载/WEB-INF/applicationContext.xml中的内容。

context

org.springframework.web.context.ContextLoaderServlet

1

通过如下类得到ApplicationContext实例

                 WebApplicationContextUtils.getWebApplicationContext

9、如何实现事件处理

事件

          Extends ApplicationEvent

监听器

          Implements ApplicationListener

事件源

          Implements ApplicationContextAware

在applicationContext.xml中配置事件源、监听器

先得到事件源,调用事件源的方法,通知监听器。
10、spring的ioc及di代表什么意思?

Ioc:程序在运行过程中,根据配置文件动态加载所依赖的配置类
、如何在spring中实现国际化?

 在applicationContext.xml加载一个bean

          <property name="basename">

                 <value>message</value>

          </property>

 在src目录下建多个properties文件

 对于非英文的要用native2ascii -encoding gb2312 源 目转化文件相关内容

 其命名格式是message_语言_国家。

 页面中的中显示提示信息,键名取键值。

 当给定国家,系统会自动加载对应的国家的properties信息。

 通过applictionContext.getMessage(“键名”,”参数”,”区域”)取出相关的信息。
12、spring的配置的主要标签是什么?有什么作用?

                 <bean id=”” class=”” init=”” destroy=”” singleton=””>

                        <property name=””>

                               <value></value>

                        </property>

                        <property name=””>

                               <ref local></ref>

                        </property>

                 </bean>
13、spring与ejb2.0的事务管理比较的优缺点?

测试:

                 Spring:pojo

                 Ejb:二个接口一个类,一堆配置文件

事务类型

                 Spring:jdbc jta  hibernate

                 Ejb:jta

成本

             Spring:普通容器(tomcat jboss)

             Ejb:weblogic jboss

开发的周期:

                 Spring远比ejb快.

14、spring的jdbc与传统的jdbc有什么区别,其核心类有那些?

Spring的jdbc:节省代码,不管连接(Connection),不管事务、不管异常、不管关闭(con.close() ps.close )

JdbcTemplate(dataSource):增、删、改、查

TransactionTemplate(transactionManager):进行事务处理
15、在spring中有几种事务管理,分别是什么?

代码管理的事务处理

TransactonTemplate的execute方法中的内部类TransactionCallback中的doInTransaction方法中使用。

public void make()

   {    

          TransactionTemplate jtm=new TransactionTemplate(this.getTransactionManager());

          jtm.execute(new myClass1());

   }

   public class myClass1 implements TransactionCallback

   {



          public Object doInTransaction(TransactionStatus trans)

          {

                 JdbcTemplate jdbc=new JdbcTemplate(dataSource);

                 jdbc.execute("insert into customer(customerName) values('b')");

                 jdbc.execute("insert into customer(customerName) values('b')");

                 return null;

          }           

   }

                 容器管理的事务处理

16、在spring中如何配代码的事务管理?

Datasouce

                 transactionManager

                 userDao要注入

                        Datasouce

                        transactionManager

          通过如下类实现

                        TransactionTemplate

                        JdbcTemplate

17、在spring中如何配容器的事务管理,相关的类有那些?

Datasource

transactionManager

userDao要注入

Datasouce

Proxy代理

Target:userDao:代理对象(目标对象)

transactionAttributes(那些方法需要事务处理)

transactionManager(事务处理服务)
18、如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确?

不需要
19、spring+hibernate的配置文件中的主要类有那些?如何配置?

在myeclipse中先加入spring环境再加入hibernate环境。

   如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确?

   spring+hibernate的配置文件中的主要类有那些?如何配置?

          dataSource

          sessionFactory:hibernate.cfg.xml

          transactionManager

          userDao (extends HibernateDaoSupport) 

                 sessionFactory

          facade

          proxy

                 sessionFactory

                 transactionManager

                 facade

20、spring+hibernate的代码实现中,对于实现类一定继承于一个类是那一个,它有什么作用。

extends HibernateDaoSupport,可以节省代码。
21、如何配置spring+struts?

 在struts-config.xml加入一个插件,通过它加载applicationContext.xml

 在struts-config.xml修改action-mapping标记,具体action交给了DelegateActionProxy

 通过DelegateActionProxy进入一spring的环境。

 在spring的applicationContext.xml加入
22、如何在web环境中配置applicationContext.xml文件?

          <listener-class>

                 org.springframework.web.context.ContextLoaderListener

          </listener-class>

   </listener>

   或:

   <servlet>

          <servlet-name>context</servlet-name>

                 <servlet-class>

                        org.springframework.web.context.ContextLoaderServlet

                 </servlet-class>

          <load-on-startup>1</load-on-startup>

   </servlet>

   通过如下方法取出applicationContext实例:

   ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);

24、Jsf和spring的区别?
jsf:是一种基于MVC模式的一个web层的处理,粒度较struts较细。

   Spring:提供了通用的服务,ioc/di aop,关心的不仅仅web层,应当j2ee整体的一个服务,可以很容易融合不同的技术struts hibernate ibatis ejb remote springJDBC springMVC

9 Spring 应用框架技术
1、Spring和Struts的区别?
strusts:是一种基于MVC模式的一个web层的处理。

   Spring:提供了通用的服务,ioc/di aop,关心的不仅仅web层,应当j2ee整体的一个服务,可以很容易融合不同的技术struts hibernate ibatis ejb remote springJDBC springMVC

2、什么是aop,aop的作用是什么?

Oop:纵向的业务

Aop:oop的一个横向的服务,是对oop进一步的补充,提供安全、事务、日志等的集中式处理,相关的装备before、around、after exception
3、aop中的关键名词有些那些,相互关系是什么?

拦截器: 代理

装备(advice)

目标对象

关切点:条件

连接点:方法、属性
4、依赖注入的方式有几种,各是什么?

Setter

Interface

constructor
5、spring中的核心类有那些,各有什么作用?

BeanFactory:产生一个新的实例,可以实现单例模式

BeanWrapper:提供统一的get及set方法

ApplicationContext:提供框架的实现,包括BeanFactory的所有功能
6、ApplicationContext的作用

beanFactory

国际化(getMesage)

资源管理:可以直接读取一个文件的内容(getResource)

加入web框架中(加入一个servlet或监听器)

事件处理
7、如何实现资源管理

使用

applicationContext.getResource(“classpath:文件名”):在src根目录下,在类路径下

applicationContext.getResource(“classpath:/chap01/文件名”): 以src根目录下的基准往下走。

applicationContext.getResource(“file:c:/a.properties”):在系统文件目录下。
8、如何实现加入web框架中

在web.xml中加入如下同容,在启动web服务器时加载/WEB-INF/applicationContext.xml中的内容。

context

org.springframework.web.context.ContextLoaderServlet

1

通过如下类得到ApplicationContext实例

                 WebApplicationContextUtils.getWebApplicationContext

9、如何实现事件处理

事件

          Extends ApplicationEvent

监听器

          Implements ApplicationListener

事件源

          Implements ApplicationContextAware

在applicationContext.xml中配置事件源、监听器

先得到事件源,调用事件源的方法,通知监听器。
10、spring的ioc及di代表什么意思?

Ioc:程序在运行过程中,根据配置文件动态加载所依赖的配置类
、如何在spring中实现国际化?

 在applicationContext.xml加载一个bean

          <property name="basename">

                 <value>message</value>

          </property>

 在src目录下建多个properties文件

 对于非英文的要用native2ascii -encoding gb2312 源 目转化文件相关内容

 其命名格式是message_语言_国家。

 页面中的中显示提示信息,键名取键值。

 当给定国家,系统会自动加载对应的国家的properties信息。

 通过applictionContext.getMessage(“键名”,”参数”,”区域”)取出相关的信息。
12、spring的配置的主要标签是什么?有什么作用?

                 <bean id=”” class=”” init=”” destroy=”” singleton=””>

                        <property name=””>

                               <value></value>

                        </property>

                        <property name=””>

                               <ref local></ref>

                        </property>

                 </bean>
13、spring与ejb2.0的事务管理比较的优缺点?

测试:

                 Spring:pojo

                 Ejb:二个接口一个类,一堆配置文件

事务类型

                 Spring:jdbc jta  hibernate

                 Ejb:jta

成本

             Spring:普通容器(tomcat jboss)

             Ejb:weblogic jboss

开发的周期:

                 Spring远比ejb快.

14、spring的jdbc与传统的jdbc有什么区别,其核心类有那些?

Spring的jdbc:节省代码,不管连接(Connection),不管事务、不管异常、不管关闭(con.close() ps.close )

JdbcTemplate(dataSource):增、删、改、查

TransactionTemplate(transactionManager):进行事务处理
15、在spring中有几种事务管理,分别是什么?

代码管理的事务处理

TransactonTemplate的execute方法中的内部类TransactionCallback中的doInTransaction方法中使用。

public void make()

   {    

          TransactionTemplate jtm=new TransactionTemplate(this.getTransactionManager());

          jtm.execute(new myClass1());

   }

   public class myClass1 implements TransactionCallback

   {



          public Object doInTransaction(TransactionStatus trans)

          {

                 JdbcTemplate jdbc=new JdbcTemplate(dataSource);

                 jdbc.execute("insert into customer(customerName) values('b')");

                 jdbc.execute("insert into customer(customerName) values('b')");

                 return null;

          }           

   }

                 容器管理的事务处理

16、在spring中如何配代码的事务管理?

Datasouce

                 transactionManager

                 userDao要注入

                        Datasouce

                        transactionManager

          通过如下类实现

                        TransactionTemplate

                        JdbcTemplate

17、在spring中如何配容器的事务管理,相关的类有那些?

Datasource

transactionManager

userDao要注入

Datasouce

Proxy代理

Target:userDao:代理对象(目标对象)

transactionAttributes(那些方法需要事务处理)

transactionManager(事务处理服务)
18、如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确?

不需要
19、spring+hibernate的配置文件中的主要类有那些?如何配置?

在myeclipse中先加入spring环境再加入hibernate环境。

   如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确?

   spring+hibernate的配置文件中的主要类有那些?如何配置?

          dataSource

          sessionFactory:hibernate.cfg.xml

          transactionManager

          userDao (extends HibernateDaoSupport) 

                 sessionFactory

          facade

          proxy

                 sessionFactory

                 transactionManager

                 facade

20、spring+hibernate的代码实现中,对于实现类一定继承于一个类是那一个,它有什么作用。

extends HibernateDaoSupport,可以节省代码。
21、如何配置spring+struts?

 在struts-config.xml加入一个插件,通过它加载applicationContext.xml

 在struts-config.xml修改action-mapping标记,具体action交给了DelegateActionProxy

 通过DelegateActionProxy进入一spring的环境。

 在spring的applicationContext.xml加入
22、如何在web环境中配置applicationContext.xml文件?

          <listener-class>

                 org.springframework.web.context.ContextLoaderListener

          </listener-class>

   </listener>

   或:

   <servlet>

          <servlet-name>context</servlet-name>

                 <servlet-class>

                        org.springframework.web.context.ContextLoaderServlet

                 </servlet-class>

          <load-on-startup>1</load-on-startup>

   </servlet>

   通过如下方法取出applicationContext实例:

   ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);

24、Jsf和spring的区别?
jsf:是一种基于MVC模式的一个web层的处理,粒度较struts较细。

   Spring:提供了通用的服务,ioc/di aop,关心的不仅仅web层,应当j2ee整体的一个服务,可以很容易融合不同的技术struts hibernate ibatis ejb remote springJDBC springMVC

2、hibernate的核心配置文件是什么及其作用?

Hibernate.cfg.xml:数据库连接、指定相关的映射文件
3、hibernate的核心类是什么,它们的相互关系是什么?重要的方法是什么?

Configuration

SessionFactory

Session如下方法

                 Save

                 load

                 Update

                 Delete

              Query q=CreateQuery(“from Customer where customerName=:customerName”)

                 beginTransaction

                 close

                 Transaction

                 Commit()       

5、hibernate中的one-to-many或many-to-one中常用的方式是什么?

主控方在many这边,不级联删除

27、Request对象的主要方法:

setAttribute(String name,Object):设置名字为name的request的参数值

getAttribute(String name):返回由name指定的属性值

getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

getCharacterEncoding():返回请求中的字符编码方式

getContentLength():返回请求的Body的长度

实例

getInputStream():返回请求的输入流,用于获得请求中的数据

getMethod():获得客户端向服务器端传送数据的方法

getParameter(String name):获得客户端传送给服务器端的有name指定的参数值

getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParameterValues(String name):获得有name指定的参数的所有值

getProtocol():获取客户端向服务器端传送数据所依据的协议名称

getQueryString():获得查询字符串

getRequestURI():获取发出请求字符串的客户端地址

getRemoteAddr():获取客户端的IP地址

getRemoteHost():获取客户端的名字

getSession([Boolean create]):返回和请求相关Session

getServerName():获取服务器的名字

getServletPath():获取客户端所请求的脚本文件的路径

getServerPort():获取服务器的端口号

removeAttribute(String name):删除请求中的一个属性
30、Servlet执行时一般实现哪几个方法?

public void init(ServletConfig config)

public ServletConfig getServletConfig()

public String getServletInfo()

public void service(ServletRequest request,ServletResponse response)

public void destroy()

20、Servlet中的核心类有那些,各有什么特点?

ServletContext:容器,放置全局变量

   setAtribute()

   getAttribute()

ServletConfig:一个servlet的配置

   getInitParameter(”名称”)

HttpServletRequest:封装的所有的请求

   getParameterValue(”名称”)

   getParameterValues(”称”)

getSession();

   getAttribute(” 名称”);

   getRequestDispatch(”a.jsp”).forward(request,response)

HttpServletResponse:响应

   getOut();

   sendRedirect(””)                                             

HttpSession:一个用户多个页面共享同一变量

   setAttribute(””,””)

21、Servlet中重要的包有那些,有什么区别?

javax.servlet.;javax.servlet.http.;
22、说出Servlet的生命周期,并说出Servlet和CGI的区别?

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与cgi的区别在于servlet处理服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
23、什么情况下调用doGet()和doPost()?

Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。
25、如何现实servlet的单线程模式

在doGet及doPost方法前加入synchoronized

JSP:

<%@ page isThreadSafe=“true”%>

15、描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。

Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。

Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。存储的数据量大,安全性高。占用服务端的内存资源。

集合:

Iterable -collection -list - linkedlist 链表实现,查改慢,增删快线程不安全

                -arraylist      数组实现   查改快,增删慢 线程不安全

               - Vector     数组实现   线程安全

   --set -hashset 无序不重复,去重原理:重写hashcode和equals方法

          -- treeset 有序不重复  实现comparable,comparator接口

map— hashMap 键值对 线程不安全

— hashtable 键值对 线程安全

HashMap和Hashtable的区别。

都属于Map接口的类,都是以键值对存储数据的

HashMap没有分类和排序,允许一个键为null和多个值为空。

Hashtable 类似于HashMap,但是键值对不可以为空,比HashMap慢,因为它是同步的。

Hashtable继承自Dictionary类.

HashMap是Java1.2引进的Map interface的一个实现

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在

多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap

就必须为之提供外同步。

58.1当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。如果是异步的话就可以
59、final, finally, finalize的区别?

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,覆盖 finalize() 方法用来整理系统资源或者执行其他清理工作。

char型变量中能不能存贮一个中文汉字?为什么?

能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

一个".java"源文 件中是否可以包括多个 类(不是内部类)?有什么限制?

可以。如果这个类的修饰符是public,其类名与文件名必须相同。

排序都有哪几种方法?请列举。用JAVA实现一个快速排序?

排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)

快速排序的伪代码。

Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的

重写Override,子类覆盖父类的方法,将子类传与父类的引用调用的还是子类的方法。

重载Overloading 一个类多个方法,名称相同,参数个数类型不同。

两者都是Java多态性的不同表现。

Overloaded的方法是可以改变返回值的类型。

Final类有什么特点?

   属性常量

   方法不可以overridding

   类不可以继承

继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?

答:父类:

package test;

public class FatherClass

{

public FatherClass()

{

System.out.println(“FatherClass Create”);

}

}

子类:

package test;

import test.FatherClass;

public class ChildClass extends FatherClass

{

public ChildClass()

{

System.out.println(“ChildClass Create”);

}

public static void main(String[] args)

{

FatherClass fc = new FatherClass();

ChildClass cc = new ChildClass();

}

}

输出结果:

C:>java test.ChildClass

FatherClass Create

FatherClass Create

ChildClass Create

内部类的实现方式?

答:示例代码如下:

package test;

public class OuterClass

{

private class InterClass

{

Public Interlass()

{

System.out.println(“InterClass Create”);

}

}

public OuterClass()

{

InterClass ic = new InterClass();

System.out.println(“OuterClass Create”);

}

public static void main(String[] args)

{

OuterClass oc = new OuterClass();

}

}

输出结果:

C:>java test/OuterClass

InterClass Create

OuterClass Create

13 JAVA类实现序例化的方法是实现java.io.Serializable接口

Collection框架中实现比较要实现Comparable 接口和 Comparator 接4
14 编程:编写截取字符串函数

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。

答:代码如下:

public static void split(String source,int num) throws Exception

{

   int k=0;

   String temp="";

   for (int i = 0; i <source.length(); i++)

   {  

       byte[] b=(source.charAt(i)+"").getBytes();

       k=k+b.length;

       if(k>num)

       {

          break;

       }

       temp=temp+source.charAt(i);       

   }  

   System.out.println(temp);

}

15、Java编程,打印昨天的当前时刻

public class YesterdayCurrent{

public void main(String[] args){

Calendar cal = Calendar.getInstance();

cal.add(Calendar.DATE, -1);

System.out.println(cal.getTime());

}

}

良好的编程习惯有什么

17、指出下面程序的运行结果。

class A{

static{

System.out.print(“1”);

}

public A(){

System.out.print(“2”);

}

}

class B extends A{

static{

System.out.print(“a”);

}

public B(){

System.out.print(“b”);

}

}

public class Hello{

public static void main(String[] ars){

A ab = new B(); //执行到此处,结果: 1a2b

ab = new B(); //执行到此处,结果: 1a2b2b

}

}

注:类的static 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造
18、抽象类和接口的区别?

(1)接口可以被多重implements,抽象类只能被单一extends

(2)接口只有定义,抽象类可以有定义和实现

(3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)

当功能需要累积时用抽象类,不需要累积时用接口。

什么是类的返射机制?                                                                   通过类(Class对象),可以得出当前类的fields、method、construtor、interface、superClass、modified等,同是可以通过类实例化一个实例、设置属性、唤醒方法。Spring中一切都是反射、struts、hibernate都是通过类的返射进行开发的。

20、类的返射机制中的包及核心类?

 java.lang.Class

 java.lang.refrection.Method

 java.lang.refrection.Field

 java.lang.refrection.Constructor

 java.lang.refrection.Modifier

 java.lang.refrection.Interface

21、得到Class的三个过程是什么?

对象.getClass()

   类.class或Integer.type(int)  Integer.class(java.lang.Integer)

   Class.forName();

22、如何唤起类中的一个方法?

产生一个Class数组,说明方法的参数

通过Class对象及方法参数得到Method

通过method.invoke(实例,参数值数组)唤醒方法
79、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是引用传递

基本数据类型:值

对象: 引用
23、如何将数值型字符转换为数字(Integer,Double)?

Integer.parseInt(“1234”)

Double.parseDouble(“123.2”)

如何将数字转换为字符?

1+””

1.0+””
25、如何去小数点前两位,并四舍五入。

double d=1256.22d;

d=d/100;

System.out.println(Math.round(d)*100);

25.1编程题: 用最有效率的方法算出2乘以8等於几?

2 << 3
26、如何取得年月日,小时分秒?

Calendar c=Calendar.getInstance();

   c.set(Calendar.YEAR,2004);

   c.set(Calendar.MONTH,0);

   c.set(Calendar.DAY_OF_MONTH,31);

   System.out.println(c.get(Calendar.YEAR)+"  "+(c.get(Calendar.MONTH)+1)+"  "+c.get(Calendar.DAY_OF_MONTH));

28、如何获取某个日期是当月的最后一天?

当前日期加一天,若当前日期与结果的月份不相同,就是最后一天。

取下一个月的第一天,下一个月的第一天-1

public static void main(String[] args)

{

   Calendar c=Calendar.getInstance();

   c.set(Calendar.YEAR,2004);

   c.set(Calendar.MONTH,0);

   c.set(Calendar.DAY_OF_MONTH,30);

   Calendar c1=(Calendar)c.clone();

   System.out.println(c.get(Calendar.YEAR)+"  "+(c.get(Calendar.MONTH)+1)+"  "+c.get(Calendar.DAY_OF_MONTH));

  

   c.add(Calendar.DAY_OF_MONTH,1);

   if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH))

   {

       System.out.println("是最后一天");

   }

   else

   {

                 System.out.println("不是取后一天");

      

   }

}

29、如何格式化日期?

Import java.text. SimpleDateFormat;

SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);

Date dat=new Date();

//把日期转化为字符串

String str=sdf.format(dat);

System.out.println(str);

//将字符串转化为日期

Java.util.Date d1=sdf.parse(“yyyy-mm-dd”);

30、编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。

String a=new String(“中”.getBytes(“gb2312”),“iso-8859-1”);

String a=new String(“中”.getBytes(“iso-8859-1”));
32、String s = new String(“xyz”);创建了几个String Object?

new了一个,”XYZ”本来又是一个

两个

33、float型float f=3.4是否正确?

 报错,应当是float f=3.4f

 如果是float f=3(整数)正确
35、说出一些常用的类,包,接口,请各举5个

常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer

常用的包:java.lang java.awt java.io java.util java.sql javax.xml javax.sevlet javax.ejb. java.net javax.faces

常用的接口: List Map Document NodeList EjbObject EjbHome SessionBean EntityBean
36、java中会存在内存泄漏吗,请简单描述。

会。如:int i,i2; return (i-i2); //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。

37、java中实现多态的机制是什么?

   静态的多态:方法名相同,参数个数或类型不相同。(overloading)

   动态的多态:

          子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法

          实现接口的实例传与接口的引用调用的实现类的方法。     

39、静态变量和实例变量的区别?

static i = 10; //常量

class A a; a.i =10;//可变

静态方法可以调用静态变量。

实现方法可以调用静态变量、实例变量
41、是否可以从一个static方法内部发出对非static方法的调用?

不可以,如果其中包含对象的method();不能保证对象初始化.
42、写clone()方法时,通常都有一行代码,是什么?

Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。
43、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

Try:执行部分,产生异常

Catch:捕捉异常

Finally:不管有没有异常都执行

Throws:在方法声明处声明要抛出的异常,调用者必须对其进行处理。

Throw:抛出一个异常

在try中可以抛出异常,一般与声明的异常相同。

自定义异常要继承于Exception或Exception的子类
83、Java中的异常处理机制的简单原理和应用。

原理

有错直接转到异常处理部分或向上抛出。

应用:

JAVA的异常就是错误,有两种一种是运行时,编码可以不用捕捉。一种是一般异常,如果throws声明了,必须进行处理。

76、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

45、冒泡排序法

//相邻两个数比较,将最小或最大的放到后面,最后面数的不参与比较

public class BubbleSort {

private static int al[] = new int[10];

public BubbleSort() {

   al[0]=2;

   al[1]=3;

   al[2]=23;

   al[3]=45;

   al[4]=1;

   al[5]=67;

   al[6]=23;

   al[7]=80;

   al[8]=35;

   al[9]=72;

}

public static void main(String[] args) {

   BubbleSort bs = new BubbleSort();

   System.out.println("排序前:");

   display(al);

  

   for(int i=0;i<al.length;i++) {

  

       for (int j = 0; j < al.length-i-1; j++) {

         

          if(al[j]>al[j+1]) {

              swap(j,j+1);

          }

       }

   }

   System.out.println();

   System.out.println("排序后:");

   display(al);

}

private static void display(int[] al2) {

   for (int i = 0; i < al2.length; i++) {

       System.out.print(al2[i]+"  ");

   }

}

private static void swap(int i, int j) {

   int temp = al[i];

   al[i]= al[j];

   al[j] = temp;

}

}
66、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型) short s1 = 1; s1 += 1;(可以正确编译)

62、heap和stack有什么区别?

栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。

堆是栈的一个组成元素
63、Static Nested Class 和 Inner Class的不同?

Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
63、Static Nested Class 和 Inner Class的不同?

Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
64、什么时候用assert?

assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。

断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。

断言有两种形式:

Expression1 应该总是产生一个布尔值。

Expression2 可以是得出一个值的任意表达式

为了提高性能,在软件发布后,assertion检查通常是关闭的.

80、四种会话跟踪技术

Cookie

Session

Hidden

url 重写

编程题: 写一个Singleton出来。
饥汉模式

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种种形式:

第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {

private Singleton(){}

//在自己内部定义自己一个实例,是不是很奇怪?

//注意这是private 只供内部调用

private static Singleton instance = new Singleton();

//这里提供了一个供外部访问本class的静态方法,可以直接访问

public static Singleton getInstance() {

return instance;

}

}

饱汉模式

第二种形式:

public class Singleton {

private static Singleton instance = null;

public static synchronized Singleton getInstance() {

//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次

//使用时生成实例,提高了效率!

if (instance==null)

instance=new Singleton();

return instance;   }

}

其他形式:

定义一个类,它的构造函数为private的,所有方法为static的。

一般认为第一种形式要更加安全些

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

1、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于Reader Writer。在java.io包中还有许多其他的流,低层流与高层流,高层流主要是为了提高性能和使用方便。
17、输入输出流的理解:

在java使用流的机制进行数据的传送,从文件到内存是输入流,从内存到文件是输出流,输入流可以通过 read读取,输出流以write或print写入,对于流可以是分为高层流和低层流,低层以 一个字节或字符为单位进行处理,高层流以一批数据为单位进行处理。

 FileInputStream(System.in)至InputSteamReader至BufferReader

 OutputSteam(System.out)至printStream

 FileReader至BufferedReader

 FileWriter 至 PrintWriter或bufferWriter

分类:

字节(二进制)

       FileInputStream(低层输入流)

       FileOutputStream(低层输出流)



       PrintStream(高层流)  System.out.println()

字符(一个char)

       FileReader

       FileWriter

19、如何列出某个目录下的所有文件

Import java.io.File;

File f=new File(“C:\”);

    File[] f1=f.listFiles();

    for(int i=0;i<f1.length;i++)

    {

        if(f1[i].isDirectory())

        {

            System.out.println("dirctory is"+f1[i].getName());

        }

        else

        {

            System.out.println("file is"+f1[i].getName());

        }

    }

}

2、启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,启动线程并调用run方法。
3、线程的基本概念、线程的基本状态以及状态之间的关系

线程是进程内的并发,没有自已内存空间,共享进程的,线程间的通信成本较低。

Java中的线程有四种状态分别是 新建状态,就绪状态,运行状态,阻塞状态,死亡状态。

4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方面有两种,分别是synchronized,wait与notify

反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。
5、集合框架有什么?

Collection

List Set

ArrayList HashSet

linkedList TreeSet


Map

HashMap

HasnTable
13、同步和异步有和异同,在什么情况下分别使用他们?举例说明。

同步:上一段代码没的完成,下一段必须等到上一段代码完成后才可以执行。如买票排队

异步:上一段代码没的完成,下一段不必等到上一段代码完成就可以执行。如手机发送短信。

14、sleep() 和 , 有什么区别?

Sleep是指休眠给定的时间,当这个时间达到之后,线程会再次醒来。

Wait是等待状态,多长时间不清楚,由另一个线程将其唤醒。
15、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

如只其它方法是同步方法,不可以进入。如果不是可以进入。

实现线程同步的几种方式

1.同步方法

即有synchronized关键字修饰的方法。

由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,

内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。

代码如:

public synchronized void save(){}

注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类。

2.同步代码块

即有synchronized关键字修饰的语句块。

被该关键字修饰的语句块会自动被加上内置锁,从而实现同步

代码如:

synchronized(object){

}

注:同步是一种高开销的操作,因此应该尽量减少同步的内容。

通常没有必要同步整个方法,使用synchronized代码块同步关键代码即可。

3.使用特殊域变量(volatile)实现线程同步

a.volatile关键字为域变量的访问提供了一种免锁机制,

b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新,

c.因此每次使用该域就要重新计算,而不是使用寄存器中的值

d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量

多线程中的非同步问题主要出现在对域的读写上,如果让域自身避免这个问题,则就不需要修改操作该域的方法。

4.使用重入锁实现线程同步

在JavaSE5.0中新增了一个java.util.concurrent包来支持同步。

ReentrantLock类是可重入、互斥、实现了Lock接口的锁,

它与使用synchronized方法和快具有相同的基本行为和语义,并且扩展了其能力。

ReenreantLock类的常用方法有:

ReentrantLock() : 创建一个ReentrantLock实例

lock() : 获得锁

unlock() : 释放锁

注:关于Lock对象和synchronized关键字的选择:

a.最好两个都不用,使用一种java.util.concurrent包提供的机制,

    能够帮助用户处理所有与锁相关的代码。

b.如果synchronized关键字能满足用户的需求,就用synchronized,因为它能简化代码

c.如果需要更高级的功能,就用ReentrantLock类,此时要注意及时释放锁,否则会出现死锁,通常在finally代码释放锁

5.使用局部变量实现线程同步

如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,

副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。

ThreadLocal 类的常用方法

ThreadLocal() : 创建一个线程本地变量

get() : 返回此线程局部变量的当前线程副本中的值

initialValue() : 返回此线程局部变量的当前线程的"初始值"

set(T value) : 将此线程局部变量的当前线程副本中的值设置为value

Jdo是什么?  

JDO是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。

JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。
Web编程Jsp&Servlet技术
1、简单说说tomcat的配置?

JAVA_HOME=JDK的根目录

CATALINA_HOME=tomcat的根目录

CATALINA-HOME\conf\server.xml:可以配置tomcat的端口,可以配置tomcat中下连接池。

CATALINA-HOME\common\lib:存放公用的类包

在My eclipse中如何配置tomcat

在eclipse中,选择windows->preference->MyEclipse->ApplicationServer->Tomcat

选择Tomcat 的安装目录,并选择TomCat所需的jdk,选择enable,确定即可。
2、JSP中动态INCLUDE与静态INCLUDE的区别?

jsp:include:在运行时调用另一个页面,变量是可以重复的。

<%@include file=””%>:在转译时合在一起,会成为同一个类,变量不可以重复。
3、forward和redirect的区别?

forward: 转发,在下一个页面中,request保留上一个页面中的request的所有值

redirect: 跳转,不传递request对象。
7、jsp就是一个servlet是否正确?


一、Maven有哪些优点和缺点

优点如下:

简化了项目依赖管理:

易于上手,对于新手可能一个"mvn clean package"命令就可能满足他的工作

便于与持续集成工具(jenkins)整合

便于项目升级,无论是项目本身升级还是项目使用的依赖升级。

有助于多模块项目的开发,一个模块开发好后,发布到仓库,依赖该模块时可以直接从仓库更新,而不用自己去编译。

maven有很多插件,便于功能扩展,比如生产站点,自动发布版本等

缺点如下:

maven是一个庞大的构建系统,学习难度大

maven采用约定优于配置的策略(convention over configuration),虽然上手容易,但是一旦出了问题,难于调试。

当依赖很多时,m2eclipse 老是搞得Eclipse很卡。

中国的网络环境差,很多repository无法访问,比如google code, jboss 仓库无法访问等。

二、Maven坐标

一般maven使用[groupID,artifactId,version,packaging]来表示一个项目的某个版本,有时还会使用classifier来表示项目的附属构建,常见的附属构建有javadoc和sources包。

三、Maven常见的依赖范围有哪些?

compile:编译依赖,默认的依赖方式,在编译(编译项目和编译测试用例),运行测试用例,运行(项目实际运行)三个阶段都有效,典型地有spring-core等jar。

test:测试依赖,只在编译测试用例和运行测试用例有效,典型地有JUnit。

provided:对于编译和测试有效,不会打包进发布包中,典型的例子为servlet-api,一般的web工程运行时都使用容器的servlet-api。

runtime:只在运行测试用例和实际运行时有效,典型地是jdbc驱动jar包。

system: 不从maven仓库获取该jar,而是通过systemPath指定该jar的路径。

import: 用于一个dependencyManagement对另一个dependencyManagement的继承。

四、Maven的生命周期

maven有三套生命周期,分别为:

1、clean 周期:主要用于清理上一次构建产生的文件,可以理解为删除target目录

2、默认周期,

主要阶段包含:

process-resources 默认处理src/test/resources/下的文件,将其输出到测试的classpath目录中,

compile 编译src/main/java下的java文件,产生对应的class,

process-test-resources 默认处理src/test/resources/下的文件,将其输出到测试的classpath目录中,

test-compile 编译src/test/java下的java文件,产生对应的class,

test 运行测试用例,

package 打包构件,即生成对应的jar, war等,

install将构件部署到本地仓库,

deploy 部署构件到远程仓库

3、site周期

主要阶段包含

site 产生项目的站点文档

site-deploy 将项目的站点文档部署到服务器

五、我们经常使用“Mvn Clean Package”命令进行项目打包,请问该命令执行了哪些动作来完成该任务?

在这个命令中我们调用了maven的clean周期的clean阶段绑定的插件任务,以及default周期的package阶段绑定的插件任务

默认执行的任务有(maven的术语叫goal, 也有人翻译成目标,我这里用任务啦):

maven-clean-plugin:clean->

maven-resources-plugin:resources->

maven-compile-plugin:compile->

mavne-resources-plugin:testResources->

maven-compile-plugin:testCompile->

maven-jar-plugin:jar

六、依赖的解析机制

解析发布版本:如果本地有,直接使用本地的,没有就向远程仓库请求。

解析快照版本:合并本地和远程仓库的元数据文件-groupId/artifactId/version/maven-metadata.xml,这个文件存的版本都是带时间戳的,将最新的一个改名为不带时间戳的格式供本次编译使用。

解析版本为LATEST,RELEASE,过于复杂,且解析的结果不稳定, 不推荐在项目中使用,感兴趣的同学自己去研究,简而言之就是合并groupId/artifactId/maven-metadata.xml找到对应的最新版本和包含快照的最新版本。

七、插件的解析机制

当我们输入"mvn dependency:tree"这样的指令,解析的步骤为:

解析groupID:

maven使用默认的groupID:“org.apache.maven.plugins"或者"org.codehaus.mojo”

解析artifactId(maven的官方叫做插件前缀解析策略)

合并该groupId在所有仓库中的元数据库文件(maven-metadata-repository.xml)

通过比较这样的条目,我们就将该命令的artifactId解析为maven-dependency-plugin

解析version

如果你在项目的pom中声明了该插件的版本,那么直接使用该版本的插件,否则合并所有仓库中groupId/artifactId/maven-metadata-repository.xml,找到最新的发布版本。

对于非官方的插件,有如下两个方法可以选择:

1)使用groupId:artifactId:version:goal 来运行,好长~~~~~~~~~~

2)在Settings.xml中添加pluginGroup项,这样maven不能在官方的插件库中解析到某个插件,那么就可以去你配置的group下查找啦。

八、多模块如何聚合

配置一个打包类型为pom的聚合模块,然后在该pom中使用元素声明要聚合的模块

九、对于一个多模块项目,如果管理项目依赖的版本

通过在父模块中声明dependencyManagement和pluginManagement, 然后让子模块通过元素指定父模块,这样子模块在定义依赖是就可以只定义groupId和artifactId,自动使用父模块的version,这样统一整个项目的依赖的版本。

十、一个项目的依赖来源于不同的组织,可能这些依赖还会依赖别的Jar包,如何保证这些传递依赖不会引起版本冲突。

使用<dependency&gt的元素将会引起冲突的元素排除。

十一、常见的Maven私服的仓库类型。

(宿主仓库)hosted repository, (代理仓库)proxy repository, (仓库组)group repository

十二、如何查询一个插件有哪些目标(Goal)

mvn help:describe -Dplugin=groupId:artifactId

from: http://www.javacoder.cn/?p=211

redis面试总结

http://blog.csdn.net/guchuanyun111/article/category/6335900

(1)什么是redis?

Redis 是一个基于内存的高性能key-value数据库。 (有空再补充,有理解错误或不足欢迎指正)

(2)Reids的特点

Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。

Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。

Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

(3)Redis支持的数据类型

Redis通过Key-Value的单值不同类型来区分, 以下是支持的类型:

Strings

Lists

Sets 求交集、并集

Sorted Set

hashes

(4)为什么redis需要把所有数据放到内存中?

Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。

如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。

(5)Redis是单进程单线程的

redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销

(6)虚拟内存

当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.

当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.

vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.

自己测试的时候发现用虚拟内存性能也不错。如果数据量很大,可以考虑分布式或者其他数据库

(7)分布式

redis支持主从的模式。原则:Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连接master来同步数据。

这是一个典型的分布式读写分离模型。我们可以利用master来插入数据,slave提供检索服务。这样可以有效减少单个机器的并发访问数量

(8)读写分离模型

通过增加Slave DB的数量,读的性能可以线性增长。为了避免Master DB的单点故障,集群一般都会采用两台Master DB做双机热备,所以整个集群的读和写的可用性都非常高。

读写分离架构的缺陷在于,不管是Master还是Slave,每个节点都必须保存完整的数据,如果在数据量很大的情况下,集群的扩展能力还是受限于单个节点的存储能力,而且对于Write-intensive类型的应用,读写分离架构并不适合。

(9)数据分片模型

为了解决读写分离模型的缺陷,可以将数据分片模型应用进来。

可以将每个节点看成都是独立的master,然后通过业务实现数据分片。

结合上面两种模型,可以将每个master设计成由一个master和多个slave组成的模型。

(10)Redis的回收策略

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

no-enviction(驱逐):禁止驱逐数据

  1. 使用Redis有哪些好处?

(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

(2) 支持丰富数据类型,支持string,list,set,sorted set,hash

(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

  1. redis相比memcached有哪些优势?

(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型

(2) redis的速度比memcached快很多

(3) redis可以持久化其数据

  1. redis常见性能问题和解决方案:

(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件

(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次

(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内

(4) 尽量避免在压力很大的主库上增加从库

(5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3…

这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。

  1. MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据

相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:

voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

no-enviction(驱逐):禁止驱逐数据

  1. Memcache与Redis的区别都有哪些?

1)、存储方式

Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。

Redis有部份存在硬盘上,这样能保证数据的持久性。

2)、数据支持类型

Memcache对数据类型支持相对简单。

Redis有复杂的数据类型。

3)、使用底层模型不同

它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。

Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

4),value大小

redis最大可以达到1GB,而memcache只有1MB

  1. Redis 常见的性能问题都有哪些?如何解决?

1).Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。

2).Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。

3).Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。

4). Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内

7, redis 最适合的场景

Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用Memcached,何时使用Redis呢?

   如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:



 1 、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

 2 、Redis支持数据的备份,即master-slave模式的数据备份。

 3 、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

GIT

(1)、会话缓存(Session Cache)

最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?

幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。

(2)、全页缓存(FPC)

除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。

再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。

此外,对WordPress的用户来说,Pantheon有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

(3)、队列

Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。

如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这里去查看。

(4),排行榜/计数器

Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:

当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行:

ZRANGE user_scores 0 10 WITHSCORES

Agora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在这里看到。

(5)、发布/订阅

最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统!(不,这是真的,你可以去核实)。

面试当中的git问题

原创 2017年03月27日 19:55:41 503

面试当中的git和svn的内容:

git是分布式版本控制系统,SVN是集中式版本控制系统。

问题1:reset 与 rebase, pull 与 fetch 的区别

git reset 不修改commit相关的东西,只会去修改.git目录下的东西。

git rebase 会试图修改你已经commit的东西,比如覆盖commit的历史等,但是不能使用rebase来修改已经push过的内容,容易出现兼容性问题。rebase还可以来解决内容的冲突,解决两个人修改了同一份内容,然后失败的问题。

git pull pull=fetch+merge,

使用git fetch是取回远端更新,不会对本地执行merge操作,不会去动你的本地的内容。

而是用git pull会更新你本地代码到服务器上对应分支的最新版本

问题2:git merge和git rebase的区别

git merge把本地代码和已经取得的远程仓库代码合并。

git rebase是复位基底的意思,gitmerge会生成一个新的节点,之前的提交会分开显示,而rebase操作不会生成新的操作,将两个分支融合成一个线性的提交。

问题3:git和svn的优缺点。

1.SVN优缺点

优点:

1、 管理方便,逻辑明确,符合一般人思维习惯。

2、 易于管理,集中式服务器更能保证安全性。

3、 代码一致性非常高。

4、 适合开发人数不多的项目开发。

缺点:

1、 服务器压力太大,数据库容量暴增。

2、 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。

3、 不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。

2.Git优缺点

优点:

1、适合分布式开发,强调个体。

2、公共服务器压力和数据量都不会太大。

3、速度快、灵活。

4、任意两个开发者之间可以很容易的解决冲突。

5、离线工作。

缺点:

1、学习周期相对而言比较长。

2、不符合常规思维。

3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

4.git如何解决代码冲突

git stash

git pull

git stash pop

这个操作就是把自己修改的代码隐藏,然后把远程仓库的代码拉下来,然后把自己隐藏的修改的代码释放出来,让gie自动合并。

如果要代码库的文件完全覆盖本地版本。

git reset –hard

git pull

Nginx面试中最常见的18道题 抱佛脚必备

nginx CodeMan 2017年08月15日发布

赞 | 1收藏 | 3

4.4k 次浏览

Nginx的并发能力在同类型网页服务器中的表现,相对而言是比较好的,因此受到了很多企业的青睐,我国使用Nginx网站的知名用户包括腾讯、淘宝、百度、京东、新浪、网易等等。Nginx是网页服务器运维人员必备技能之一,下面为大家整理了一些比较常见的Nginx相关面试题,仅供参考:

1、请解释一下什么是Nginx?

Nginx是一个web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。

2、请列举Nginx的一些特性。

Nginx服务器的特性包括:

反向代理/L7负载均衡器

嵌入式Perl解释器

动态二进制升级

可用于重新编写URL,具有非常好的PCRE支持

3、请列举Nginx和Apache 之间的不同点。

4、请解释Nginx如何处理HTTP请求。

Nginx使用反应器模式。主事件循环等待操作系统发出准备事件的信号,这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。单个线程可以提供数万个并发连接。

5、在Nginx中,如何使用未定义的服务器名称来阻止处理请求?

只需将请求删除的服务器就可以定义为:

Server {

listen 80;

server_name “ “ ;

return 444;

}

这里,服务器名被保留为一个空字符串,它将在没有“主机”头字段的情况下匹配请求,而一个特殊的Nginx的非标准代码444被返回,从而终止连接。

6、 使用“反向代理服务器”的优点是什么?

反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的,特别是当您使用web托管服务时。

7、请列举Nginx服务器的最佳用途。

Nginx服务器的最佳用法是在网络上部署动态HTTP内容,使用SCGI、WSGI应用程序服务器、用于脚本的FastCGI处理程序。它还可以作为负载均衡器。

8、请解释Nginx服务器上的Master和Worker进程分别是什么?

Master进程:读取及评估配置和维持

Worker进程:处理请求

9、请解释你如何通过不同于80的端口开启Nginx?

为了通过一个不同的端口开启Nginx,你必须进入/etc/Nginx/sites-enabled/,如果这是默认文件,那么你必须打开名为“default”的文件。编辑文件,并放置在你想要的端口:

Like server { listen 81; }

10、请解释是否有可能将Nginx的错误替换为502错误、503?

502 =错误网关

503 =服务器超载

有可能,但是您可以确保fastcgi_intercept_errors被设置为ON,并使用错误页面指令。

Location / {

fastcgi_pass 127.0.01:9001;

fastcgi_intercept_errors on;

error_page 502 =503/error_page.html;

#…

}

11、在Nginx中,解释如何在URL中保留双斜线?

要在URL中保留双斜线,就必须使用merge_slashes_off;

语法:merge_slashes [on/off]

默认值: merge_slashes on

环境: http,server

12、请解释ngx_http_upstream_module的作用是什么?

ngx_http_upstream_module用于定义可通过fastcgi传递、proxy传递、uwsgi传递、memcached传递和scgi传递指令来引用的服务器组。

13、请解释什么是C10K问题?

C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。

14、请陈述stub_status和sub_filter指令的作用是什么?

Stub_status指令:该指令用于了解Nginx当前状态的当前状态,如当前的活动连接,接受和处理当前读/写/等待连接的总数

Sub_filter指令:它用于搜索和替换响应中的内容,并快速修复陈旧的数据

15、解释Nginx是否支持将请求压缩到上游?

您可以使用Nginx模块gunzip将请求压缩到上游。gunzip模块是一个过滤器,它可以对不支持“gzip”编码方法的客户机或服务器使用“内容编码:gzip”来解压缩响应。

16、解释如何在Nginx中获得当前的时间?

要获得Nginx的当前时间,必须使用SSI模块、 d a t e g m t date_gmt和 date_local的变量。

Proxy_set_header THE-TIME $date_gmt;

17、用Nginx服务器解释-s的目的是什么?

用于运行Nginx -s参数的可执行文件。

18、解释如何在Nginx服务器上添加模块?

在编译过程中,必须选择Nginx模块,因为Nginx不支持模块的运行时间选择。

2017年08月15日发布

新浪微博微信TwitterFacebook


作者:qq_40001362
来源:CSDN
原文:https://blog.csdn.net/qq_40001362/article/details/81905044
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/hjmlyj/article/details/83615188