- 浏览: 9273 次
- 性别:
- 来自: 珠海
最新评论
文章列表
1.内存划分
新生代(eden、survivor1,survivor2)98%的对象朝生夕死,在eden、surviror1分配,如果仍然存活会转移到s2,每一次MinorGC年龄加1,到达阈值后转移到老年代
老年代 分配大对象和长期存活对象;
永久代,-方法区;
CMS收集器,有停顿,标记-清除算法;
2.线程
volatile 原理:缓存一致性协议;
作用:保持多线程之间可见性;保证顺序性;适用单线程写多线程读;
java实现原子操作
循环 CAS(处理器CMPXCHG指令); 有ABA问题,采用版本号解决;
锁机制;
java对象头
...
MYSQL索引类型:
B+索引:叶子结点顺序地存储了键值,适用于全键值、键值范围、键前缀查找;
HASH索引:存储引擎会对索引列计算一个hash code,hash code存储在索引中,同事在哈希表中保持指向每个数据行的指针;
全文索引:用于查找文本中的关键词。
聚簇索引:一种数据存储方式,数据行存放在索引的叶子页中。聚簇索引把相关数据保存在一起,这样查找更快。因为无法同时把数据行存放在两个不同的地方,所以一个表只能有一个聚簇索引。
高性能索引策略:
1.不重复的索引值越少越好;
2.复合索引,按可选性高低排列,在sql语句中只有将复合索引的第一个字段作为约束条件,该复合索引才 ...
数据库事务隔离级别:1.未提交读(脏读)。在本事务过程中读了其他事务没有提交的数据;2.提交读(不可重复读)。在本事务中第一次读某个数据的值跟第二次读的值不一样,因为其他事务在这个时间段提交了事务。ORACLE默认级别3.可重复读。只读别人提交的数据,这样就不会读同一条记录出现不同结果的情况。但是避免不了别人新加入了一条记录,出现多读记录的情况,即幻读。MYSQL默认级别4.可串行化。 每行数据都加锁,避免幻读。加锁可能导致大量超时和锁竞争问题,为了避免死锁,还要加死锁检测和死锁超时机制
java线程与锁模型
通过锁解决竞态条件,锁有内置锁,读写锁
缺点:
内存可见性,如果读写线程不进行同步就不能保证可见性
存在乱序执行(编译器优化,JVM动态优化,硬件性能提升优化);
死锁;
同步与异步,描述请求方;同步即发送请求后一直等到对方发回响应后才接着发送下一个请求,而异步机制不需要等到当前请求响应就可以继续发送下一个请求
阻塞与非阻塞,描述处理方;阻塞即调用结果返回之前,当前处理线程从运行状态被挂起,直到调用结果返回,非阻塞方式调用结果不能立即返回,当前线程也不会被挂起,而是立即返回执行下一个调用
java BIO 即阻塞IO,一个socket套接字需要使用一个线程来处理
NIO,对所有客户端的socket套接字的事件做处理,然后派发到不同线程。当有通知时可以进行读写相关操作
AIO,读写已经完成,直接进行后续处理
Node的异步IO,事件来来源与网络请 ...
1.springmvc,DispatcherServlet,根据请求url从HandlerMapping找到controller(controller被封装在HandlerExecutionChain中,HandlerExecutionChain中包含控制器以及拦截器),controller处理请求返回ModelAndView,Didaptcher解析视图并呈现,最后将视图返回客户端
2.struts2,核心过滤器FilterDispatcher,执行doFilter,从ActionMap里面找到Action,创建ValueStack,ActionContext,ActionInvocati ...
1.减少HTTP请求的数量。每一个HTTP请求除了有TCP开销以外,还包含了大量的头信息。2.缓存,设置静态资源过期时间,Expires,Cache-Control(HTTP1.1)3.源码压缩,Gzip,HTTP1.1支持4.CDN,提供静态资源内容服务,部署多个CDN服务器,用户可以从就近的服务器得到响应资源
1.客户端轮询,缺点:有延迟、对服务器造成压力2.comet(永久帧、xhr流、htmlfile、长轮询),缺点:性能问题无法解决,向服务器发送的每个连接都带有完整的http头信息,延迟较高3.浏览器插件和jaava,基于tcp直接和服务器建立socket连接,缺点:需要所有浏览器安装插件、容易被防火墙拦截4.html5规范-- webSocket,缺点:有些浏览器不支持,如IE,部分实现有安全问题webSocket,基于tcp的双向的,全双工的socket连接,不是基于httpSocket.IO是一个Node.js库,实现了WebSocket,能兼容大多数浏览器
ps:node.js,基于 ...
正向代理,局域网内客户端通过代理访问外网
反向代理,把站点的资源发布,让外网客户端访问。
反向代理指令,proxy_pass,设置被代理服务器的地址
Proxy cache,设置缓存信息
负载均衡
静态负载均衡:一般轮询法,基于比率的加权轮询法,基于优先级的加权轮询法
动态负载均衡:最少连接优先,基于性能的最快响应优先算法,预测算法及动态性能分配算法
Niginx,对特定资源实现负载均衡,对不同域名实现负载均衡,实现带有url重写的负载均衡。
Niginx,web缓存
404错误驱动web缓存,但是不支持动态链接请求,可以搭配squid服务器实现。proxy cach ...
高性能之应用层优化
不要使用web服务器来做静态内容服务,或者减少和动态服务使用不同的实例。
请求一个css文件或图片没必要用一个固定占用50或100M的线程。
用静态内容服务器做代替,Nginx,lighttp
使用缓存代理服务器,比如squid或varnish,esi(edge side includes)将部分页面中小块的动态内容潜入到静态缓存中
缓存过期策略,
主动缓存,将请求转发给应用服务器生成缓存squid
被动缓存,要么有要么没有,memcache
应用层缓存
本地缓存,一个变量或者哈希表
本地共享内存缓存
分布式内存缓存,memcache,适合存储共享对 ...
有人说过:写太多if/else的代码不是好代码。写了几年的代码,感觉这句话很有道理。如果一段代码有太多的if/else,起码有以下问题。第一阅读性差。可能自己当时看的懂,过了一段时间估计自己也看不懂了,更何况其他程序员来理解这段代码。第二维护性差:写太多的if/else,如果稍有不慎,出错几率很大,特别是当其他程序员来改这段代码,那么可能引起新的bug
- 2012-12-20 22:45
- 浏览 2158
- 评论(0)
在JAVA1.5中加入了java.util.concurrent包,这个包提供了很多多线程处理类。本文简单介绍下线程池的使用,更多信息请查看JDK1.5API。
1.线程池的作用
在生产环境中,如果为每个人任务分配一个线程,例如客户端每一次请求都在服务端发起一个线程处理,由于线程的创建与销毁会付出一定的代价,且消耗时间、内存,那么如果请求非常多可能导致服务器崩溃。
线程池可以限制无限制的创建线程,减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大 ...
- 2012-11-22 20:24
- 浏览 441
- 评论(0)
相信大家都知道20/80规则,比如财富论中80%的人掌握世上20%的人的财富,20%的人掌握世上80%的人的财富,80%的人用脖子以下赚钱20%的人用脖子以上赚钱。在ORACLE性能优化方法论中也有这个规则:
(1)数据库体系结构设计和应用 ...
- 2012-11-01 23:13
- 浏览 360
- 评论(0)
一、回调是一种常见的程序设计模式。在这种模式中,可以指出某个特定事件发生时应该采取的动作。例如,可以指出在按下鼠标或选择某个菜单项时应该采取什么行动。
1.在C#中,我们会定义一个委托用来传递回调函数,请看下面代码,在A类里面调用B类的ShowAssociateRuleView的方法时传递了一个匿名委托(即回调函数),
在ShowAssociateRuleView方法中触发了传过来的onComplete,即回调了A传过来的匿名委托。
Class A
{
/// <summary>
/// 查看二级关联授权情况
/// </summary>
/// & ...
- 2012-11-01 19:09
- 浏览 643
- 评论(0)