说说堆的年轻代和老年代
堆的年轻代大则老年代小,GC少,但是每次时间会比较长。年轻代小则老年代大,会缩短每次GC的时间,但是次数频繁。可以让老年代尽量缓存常用对象,JVM默认年轻代和老年代的大小比例为1:2,。观察峰值老年代内存,不影响full GC,加大老年代可调1:1,但是要给老年代预留三分之一的空间。减少使用全局变量和大对象 ,调整新生代,老年代更合适。
HTTP协 议,GET和POST 的区别
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST把提交的数据则放置在是HTTP包的包体中,是用HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 安全性方面:对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4.传输数据量方面: get传送的数据量较小,不能大于2KB。理论上讲,POST是没有大小限制的,HTTP协 议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。
5. 执行效率:get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
栈溢出的原因有哪些
是否递归的调用;大量循环;全局变量是否过多;数组,List,Map数据是否过大;用DDMS工具检查地方。内存溢出的原因过多使用了static;static建议只用int和string等基本类型;大量的递归或者死循环;大数据项的查询,如返回表的所有记录,应该采用分页查询。检查是否有数组、List、map中存放的是对象的引用而不是对象,这些引用会让对应对象不能被释放。栈过大会导致内存占用过多,频繁页交换阻碍效率。
Dubbo源码使用了哪些设计模式
A,工厂模式,ExtenstionLoader.getExtenstionLoader(Protocol.class).getAdaptiveExtenstion()
B,装饰器模式+责任链,以provider的调用链为例,具体调用链代码是在protocolFilterWrapper的buildInvokeChain完成的,将注解中含有group=provider的Filter实现,调用顺序为EchoFilter -> ClassLoaderFilter -> GenericFilter -> ContextFilter -> ExceptionFilter -> TimeoutFilter -> MonitorFilter -> TraceFilter。装饰器模式和责任链混合使用,Echo是回声测试请求,ClassLoaderFilter则只是在其主功能上添加了功能。
C,观察者模式,provider启动时需要与注册中心交互,先注册自己的服务,再订阅自己的服务,订阅时采用了观察者模式,注册中心每5s定时检查是否有服务更新,有更新则向服务提供者发送1个notify消息后即可运行NotifyListener的notity方法,执行监听器方法。
D,动态代理模式。 扩展JDK的ExtensionLoaderdeAdaptive实现,根据调用阶段动态参数决定调用哪个类,生成代理类的代码是ExtensionLoader的createAdaptiveExtenstionClassLoader方法。