后端开发面试总结

 

 

Minor GC和FULL GC的区别
新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Java 对象大多都具备朝生夕灭的特性,所以 Minor GC 非常频繁,一般回收速度也比较快。老年代 GC(Major GC  / Full GC):指发生在老年代的 GC,出现了 Major GC,经常会伴随至少一次的 Minor GC(但非绝对的,在 ParallelScavenge 收集器的收集策略里就有直接进行 Major GC 的策略选择过程) 。MajorGC 的速度一般会比 Minor GC 慢 10倍以上。
Minor GC触发机制:
当年轻代满时就会触发Minor GC,这里的年轻代满指的是Eden代满,Survivor满不会引发GC
Full GC触发机制:
当年老代满时会引发Full GC,Full GC将会同时回收年轻代、年老代,当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载

 

String为什么是final的

从设计安全上讲, 
1)、确保它们不会在子类中改变语义。String类是final类,这意味着不允许任何人定义String的子类。
换言之,如果有一个String的引用,它引用的一定是一个String对象,而不可能是其他类的对象
从效率上讲: 
1)、设计成final,JVM才不用对相关方法在虚函数表中查询,而直接定位到String类的相关方法上,提高了执行效率。 
2)、Java设计者认为共享带来的效率更高

 

spring MVC中的controller是单例模式(只是表示多个请求变量共享),但是是多线程,各个线程之间不影响!

spring mvc 的Controller类默认Scope是单例(singleton)的

By Lee - Last updated: 星期一, 二月 10, 2014 Leave a Comment

使用Spring MVC有一段时间了,之前一直使用Struts2,在struts2中action都是原型(prototype)的, 说是因为线程安全问题,对于Spring MVC中bean默认都是(singleton)单例的,那么用@Controller注解标签注入的Controller类是单例实现的?

测试结果发现spring3中的controller默认是单例的,若是某个controller中有一个私有的变量i,所有请求到同一个controller时,使用的i变量是共用的,即若是某个请求中修改了这个变量a,则,在别的请求中能够读到这个修改的内容。 若是在@Controller之前增加@Scope(“prototype”),就可以改变单例模式为多例模式

 

redis与memcached的区别

0.Redis只使用单核,而Memcached可以使用多核

1.存储方式:

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

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

2.数据支持类型:

    redis在数据支持上要比memecache多的多。

- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

 

3.使用底层模型不同:

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

4.运行环境不同:

    redis目前官方只支持Linux 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上

 

设计模式的六大原则

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;F:\Program Files\IBM\WebSphere MQ\java\lib\com.ibm.mqjms.jar;F:\Program Files\IBM\WebSphere MQ\java\lib\com.ibm.mq.jar

单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系(对类进行修改时尽量不要重写父类方法也不要重载父类方法);依赖倒置原则告诉我们要面向接口编程(高层不应该依赖于底层而是依赖于抽象,底层不应该依赖于细节也是依赖于抽象);接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。

 

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

 

有2种办法让HashMap线程安全,分别如下:
  方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的。 这个要求大家习惯基于接口编程,因为返回的并不是HashMap,而是一个Map的实现。

  方法二:重新改写了HashMap,具体的可以查看java.util.concurrent.ConcurrentHashMap. 这个方法比方法一有了很大的改进。

 

collection与collections的区别

     Collection 是集合类的上级接口,继承与他的接口主要有Set 和List.

Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安

全化等操作。

 

sleep() 和wait() 有什么区别?

sleep 是线程类(Thread )的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控

状态依然保持,到时后会自动恢复。调用 sleep 不会释放对象锁

wait Object 类的方法,对此对象调用 wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定

池,只有针对此对象发出notify 方法(或notifyAll )后本线程才进入对象锁定池准备获得对象锁进入运

行状态。

 

如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。

 

 

在java代码中,如果调用方法后可能会出现异常,则必须对异常进行处理,写java代码时自动抛出的异常称为检测性异常,例如在写文件时会自动抛出IOException;有些异常不会自动抛出,比如在执行parseIntger()方法时,如果括号中的参数不可以转换为整数,则会抛出异常,应用程序会终止,而在写代码的时候却不需要处理这个异常,这样的异常称为非检测性异常

 

 

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

ArithmeticException, ArrayStoreException, BufferOverflowException,

BufferUnderflowException, CannotRedoException, CannotUndoException,

ClassCastException, CMMException, ConcurrentModificationException, DOMException,

EmptyStackException, IllegalArgumentException ( 不合法的参数异常) ,

IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,

ImagingOpException, IndexOutOfBoundsException, MissingResourceException,

NegativeArraySizeException, NoSuchElementException, NullPointerException,

ProfileDataException, ProviderException, RasterFormatException, SecurityException,

SystemException, UndeclaredThrowableException, UnmodifiableSetException,

UnsupportedOperationException

 

 

单例模式

class Singleton{

     private static Singleton instance=null;

     public static synchronized Singleton getInstance(){

               if(instance ==null)

                    return new Singleton ();

               return instance;

     }

}

 

AOP的jdk动态代理技术

要了解这个要先了解代理模式(为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用)

静态代理就如设计模式中所讲,其中优点:1.客户端和代理对象的桥梁2.无侵入的增强业务代码3.增强点多样化(在做被代理的对象的事情时可以在代理前入,后入,异常增加自己的业务),其中缺点:扩展能力差,可维护性差

其中根据配置的被拦截的类的名称来获取其实例然后代理涉及到java反射机制

  1.     /* 
  2.     User u = new User(); 
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值