JAVA面试面试常见问题

面试官问你一个问题,你要说出关键点,不要说出一大堆然后又没有重点,那样的话其实没有任何意义,关于这个点的问题,我就举几个例子:

 

第一个是:

Struts的工作流:

如果别人问你struts的工作流,你该怎么说,首先啊,你要严格地突出几个点:核心过滤器,十八个拦截器,值栈,ruquest的请求,你怎么把它串起来呢,这样的,首先,当一个请求到达服务器的时候,它会经过struts的核心过滤器,然后,加载struts的配置文件,根据mapping找到对应的action,再初始化action,紧接着经过十八个默认的拦截器,然后才会找到action里面对应的方法,找到方法进行处理之后,它会把(从dao返回过来的数据)放在值栈里,然后默认把值栈默认放在ruquest的域对象中,然后再转发或者重定向(返回一个逻辑视图,然后再去找对应配置文件的里面真实的视图。再达到对应视图。

   注:首先说为什么我要突出这几个点呢,因为别人问你struts的工作流,你不用非要说到代码级别的,但是你起码要告诉别人,你是知道核心过滤器,也是知道十八个拦截器的。紧接着你也要是知道值栈,并且知道值栈默认放在request的域里面。如果你把这些流程都掌握了,基本上问题都不大了,但是呢,这个时候你要搞清楚值栈的两个部分,一个普通的栈顶(根元素数据),和context非根元素对象(map),因为问到struts的工作流,他会引导你答出值栈,又会问值栈怎么搞,如果你把值栈弄比较熟了,那你这个struts也就差不多了,

 

 

 

但是呢还有下一个问题

你有没有用过自定义拦截器,

 

怎么定义自定义拦截器:

按开发步骤回答:

1.首先有一个类继承或者实现(某个类)interceptor

2.再配置拦截器组(将自定义拦截器与默认拦截器放在同一个组内)

3.再对它们进行引用(保证即经过自定义拦截器也经过这18个默认的拦截器)

小编补充:

自定义拦截器配置:

拦截器组<interceptors>

拦截器(名称,完整类名)

栈(名称)                    <interceptor-stackname="myStack">

栈的引入(先引入默认栈,后引入自定义栈)

执行(自定义)栈

例:

 <default-interceptor-ref name="myStack"></default-interceptor-ref>

 

          <interceptors>

              <interceptor name="hello"class="cn.itcast.b_interceptor.HelloInterceptor"></interceptor>

              <interceptor-stack name="myStack">

                  <!-- 一定要先引入“默认的栈” -->

                  <interceptor-ref name="defaultStack"></interceptor-ref>

                  <!--  引入自定义的拦截器 -->

                  <interceptor-ref name="hello"></interceptor-ref>

              </interceptor-stack>

          </interceptors>

          <!-- 2.执行自定义的“栈” -->

          <default-interceptor-ref name="myStack"></default-interceptor-ref>

<action name="user"class="cn.itcast.b_interceptor.UserAction">

              <result name="success">/index.jsp</result>

              <result name="error">/error.jsp</result>

          </action>

         </package>

 

还有,面试官问你、

hibernate的缓存

你可以先简单地说下一级缓存然后紧接着说二级缓存

 

说二级缓存你该怎么说呢,首先呢,你要说它的优点,然后再说它的缺点,然后再说我们一般是怎么做的

优点:快

缺点:耗内存

应用:经常需要查询但很少修改的放在二级缓存中

 

如果面试官问到

spring

不会简单问aop

面试官会问,请你说下对

spring的理解和心得体会

(赶脚你瞬间就懵了)

那你应该怎么答呢?

首先就三点:

(基本解决)

 

1.spring是个轻量级的基于企业级开源的框架,它是基于IOC的,(IOC又是什么呢?IOC是控制反转,然后控制反转的优点:不需要程序员去关注对象的创建与销毁,你只要专心自己的业务,还有什么好处?它可以节约内存,并且面向接口编程,还可以达到高内聚松耦合,它可以达到一种解耦的效果(后面可以自由扩展)

2.AOP,面向切面编程,基于接口编程的。基于动态代理的

优点:代替了人力的切面编程

应用:AOP事物与AOP日志

什么是动态代理:

  设计模式

3.容器的作用

它作为框架的整合器(容器),有整合作用,有提高良好的第三方支持,它能够帮助我们更好地结合其他框架完成企业级任务。

 

这些都是答题或介绍新技术的模式

 

 

AJAX:

做异步请求

特点:不用整体提交,也不用整体刷新页面。

优点:节约网络资源,表单验证可以做到同步做不到的(整体刷新)   对比地回答

 

Servletjsp的访问流程

 

重点:

1.servlet是当一个请求来到的时候,如果是第一次请求该servlet,将进行servlet的初始化,后面再有请求就不会初始化了。(引出话题,单例与多例)

Servlet是单例

Struts是多例(不需要画蛇添足回答多线程,企业级应用都是多线程  ==)

什么是单例与多例,单例设计模式

2.jsp在第一次请求,被翻译成一个servlet,再把请求转发或重定向到它,再次请求不会再翻译,直接就会将请求转发或重定向。(详细看文末的解释--jsp运行机制

 

引出来的点:(设计模式必须掌握三种)

小结:设计模式的分类

创建型模式(共五种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。

结构型模式(共七种):适配器模式,装饰者设计模式,代理模式,外观模式,桥接模式,组合模式,享元模式。

行为型模式(共十一种):策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式。

其他(两种):并发型模式与线程池模式。

单例设计模式:

一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例类的特殊类,通过单例模式,可以保证系统中一个类只有一个实例易于外界访问,从而方便对实例个数的控制并节约系统资源,如果希望在系统中某个类的对象只能存在一个,单例设计模式就是最好的解决方案

优点:

实例控制方面,会阻止其他对象实例化单例对象的副本从而确保所有对象都访问唯一实例

灵活性:因为类控制了实例化过程,所以类可以灵活更改实例化过程

缺点:

开销方面:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销,可以通过使用静态初始化解决此问题

可能引发的开发混淆:使用单例对象(尤其在类库中定义的对象时,开发人员必须记住自己不能使用new关键字实例化对象,因为可能无法访问库源代码,因此应用程序开发人员可能意外发现自己无法直接实例化此类。

 

面试官需要知道的是技术核心,一般程序员要知道的东西。

总结:

答技术,它是什么,做什么,优点是什么。可顺带说一下在项目中的应用

如果要回答两种技术的区别的时候,比如说dom编程与sax编程,dom有什么优点,有什么缺点,sax有什么优点,什么缺点

所以我们一般在什么情况用dom,什么时候用sax。

注:

DOM树和SAX流解析模式的区别?

 

基于SAX(事件的处理)的优点和缺点

 

优点:这种处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需 要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。

缺点:由于应用程序没有以任何方式存储数据,使用 SAX 来更改数据或在数据流中往后移是不可能的。

 

基于DOM(树)的处理的优点和缺点

优点:

1)由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。

2)它可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。

3)DOM 使用起来也要简单得多。

缺点:

1)在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。

    2)创建一棵DOM树可能是一个缓慢的过程。

 

 

所以面试有技巧,没有那么简单也没有那么难。

表达在面试中比编码能力更为突出。

不用没有目的学习技术,遇到瓶颈则选择替换技术。(没有永不淘汰的技术)

了解优缺,了解改进。这样成长会比较快。

关于不理解的技术,可以问我(老秦),我不懂可以问百度,当你没对MVC开发模式了解,但你一定要写在简历时,请到csdn的博文上看过相关介绍至少两篇以上再写入简历中。

 

【小编补充:

jsp运行机制(介绍)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值