临近大学毕业,出来试试找工作,学c#出身,半路出家java,做过几个ssh、stringMVC的项目。基础知识不太扎实,勿喷

  以下是我在网上收集的资料

------------------------------------------------------------------------------------------------------------------------------

  

  1.前台后台都做吗? 10分

  这一般是我的第一个问题,超过90%的人会回答:"都做,后台多一点,前台少一点"

  这不是我想要的答案,鬼都知道程序员都要多少涉及一下前台,后台更不用说了.

  碰到过一个聪明人,他是这么回答的: 前台js写的比较熟练,html的框架模板也能搭建的非常整齐美观,只是特效能力比较差

  这个问题我不想过多讨论,加分但不减分

  2.事务,什么是事务,为何用事务 10分

  大部分面试者,就会举各种各样的例子(比如银行存钱,这个最多)来说明这个问题,其实他们都理解.

  但这不是我想要的答案,我期望的答案只有一句:"保证数据的一致性和完整性" ,可惜只有5%左右的人答出来了

  这个问题可以大概了解出面试者的分析能力,以及语言总结能力,还有他们对这个玩意的理解程度

  答不出减分,举例子不加分

  3. 面向切面(AOP),原理是什么 10分

  这个就是对技能的掌握程度了

  大部分又是举例子,什么找中介啊之类的, 其实就是来掩盖他们懂一点实现逻辑,但是不知道源码怎么实现的.

  但还真是有学霸能把代理的原理讲出来,非常好.

  答不出减分,举例子不加分,讲出原理双倍分.

  4.两个项目之间如何通信 10分

  很基础的问题,答上来就有分,说明你接触或者了解过网络

  5.在上个问题基础之上问,碰到乱码怎么解决,utf-8和gbk可以直接转换么 10分

  大部分应聘者到这里基本就开始胡扯了. 有说声明字符串编码接收的,有说改项目编码的,各种各样五花八门.

  更有甚者,utf-8和gbk可以直接转换...

  直接说明了他们完全没有遇到过此类问题,也并不了解编码.

  答不出不减分,胡扯减分,答对双倍分.

  6.简述一项技术或设计模式的原理 20分

  这个几乎是送分的,但90%的人答不出.我很不解.

  答不出减分,答出加分

下面对昨天没有总结完的java面试题继续总结: 

第一:GC是什么? 为什么要有GC? 
答:GC 即垃圾回收(Gabage Collection) 在C++ 、C中内存的管理是最为繁琐的事情不回收内存和错误的回收内存造成系统崩溃和内存泄露 GC会自动监测对象的作用域来判断这个对象是否超过作用域如果超过则自动的回收内存 java中没有提供显示的对已经分配内存进行回收的方法 
第二:垃圾回收的优点和原理。并考虑2种回收机制。 
答:GC对分配的对象进行自动的监测记录对象的作用域是否可以达到 在java中对象就不存在‘作用域’ 而是引用的这个对象的变量具有’作用域‘ ,垃圾回收器通常作为一个低级的线程在不可预知的情况下对堆中已经死亡的和长时间没有使用的对象进行清除和回收这样可以有效的防治内存泄露 提高内存的可使用率 垃圾回收可分为:分代复制垃圾回收、标记垃圾回收、增量垃圾回收 
第三:垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 
答: 当创建许多对象 GC就会对对象的地址、大小、使用情况进行记录 GC采用有向图的方式记录和管理堆中的对象 通过这种方式记录对象是否可达到 当对象不可达到的时候GC就会负责去回收不可达到对象的内存 。我们可以主动的通知GC去进行垃圾回收  
System.gc()但是jvm不保证会执行  
第四:java中会存在内存泄漏吗,请简单描述。 
答: 
  <1首先简述什么是内存泄露: 
所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象变成了孤立的时候,对象将自动被垃圾回收器从内存中清除掉。由于Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的 
 <2内存泄露情况: 
  1>:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中可能出现内存泄露的情况,例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局map对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。 
  2>:如果一个外部类的实例对象的方法返回了一个内部类的实例对象,这个内部类对象被长期引用了,即使那个外部类实例对象不再被使用,但由于内部类持久外部类的实例对象,这个外部类对象将不会被垃圾回收,这也会造成内存泄露。 
  3>:当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,造成内存泄露。