- 浏览: 33863 次
- 性别:
- 来自: 上海
最新评论
-
yunchow:
1,一致性hash主要通过环形hash满足单调性,通过虚拟节点 ...
一致性哈希算法 -
kidding87:
dieslrae 写道数组的生产和消费怎么可以分离,每一次消费 ...
ArrayBlockingQueue和LinkedBlockingQueue的区别 -
dieslrae:
数组的生产和消费怎么可以分离,每一次消费都涉及到数组元素的移动 ...
ArrayBlockingQueue和LinkedBlockingQueue的区别 -
jag522:
yunchow 写道以下java代码会引起活锁:在a线程里:b ...
liveness hazard—死锁,活锁,饥饿 -
yunchow:
死锁是两个线程同时在请求对方占有的资源;活锁是线程对任务的处理 ...
liveness hazard—死锁,活锁,饥饿
文章列表
相同点:
1、NoClassDefFoundError和ClassNotFoundException都是类运行时出错。
2、都和classpath有关。
不同点:
1、ClassNotFoundException继承java.lang.Exception,是一种受检异常(checked exception),需要显式地使用try/catch来进行处理。通常需要确保需要的类已经在classpath上了。
--------------------------------
而NoClassDefFoundError继承java.lang.LinkageError,是一种错误(Error)。
2 ...
XSS (cross-site scripting),即跨站脚本攻击,它的本质还是一种“HTML注入”,用户的数据被当成了HTML代码一部分来执行,从而混淆了原本的语义,产生了新的语义。
来看一张某网站遭受XSS攻击后的图片,
其实就是攻击者发送了一段html代码,就达到了上述的效果。
<img height="0" width="0" src="xx" onerror='function fn(){n = $("#userName").html();$("textarea#pub_msg_in ...
分布式缓存问题
假设我们有一个网站,最近发现随着流量的增加,服务器压力越来越大,之前直接读写数据库的方式不太给力了,于是我们想引入Memcached作为缓存机制。现在我们一共有三台机器可以作为Memcached服务器,如下图 ...
版本控制系统可以分为集中式(CVCS, Centralized Version Control System, 例如CVS、Subversion)和分布式(DVCS, Distributed Version Control System,例如Git)版本控制系统。
传统的集中式版本控制系统,本地只保存代码库的一个版本拷贝。 ...
1.队列中的锁的实现不同
ArrayBlockingQueue中的锁是没有分离的,即生产和消费用的是同一个锁;
LinkedBlockingQueue中的锁是分离的,即生产用的是putLock,消费是takeLock
2.在生产或消费时操作不同
ArrayBlockingQueue基于数组,在生产和消费的时候,是直接将枚举对象插入或移除的,不会产生或销毁任何额外的对象实例;
LinkedBlockingQueue基于链表,在生产和消费的时候,需要把枚举对象转换为Node<E>进行插入或移除,会生成一个额外的
要说Spring xml配置中的<aop:aspectj-autoproxy />,先从@EnableAspectJAutoProxy注解说起,
Spring的配置除了使用xml之外,还可以使用Java类+ 注解的方式,例如下面的AppConfig类:
// 配置文件类
@Configuration @EnableAspectJAutoProxy public class AppConfig { @Bean public FooService fooService() { return new FooService(); ...
什么是稳定的排序算法,举个简单的例子,对四张扑克牌按照牌面值进行升序排序,对于红桃5和黑桃5,牌面值相同,如果使用稳定的排序算法,则排序前是红桃5在前、黑桃5在后的相对顺序,在排序后依然是这个顺序。
如果使用不稳定的排序算法,则红桃5和黑桃5的相对顺序被打乱。
稳定的排序算法有什么作用?
再举个查询学生情况的例子,
归并排序采用分治法(Divide and Conquer),是一种稳定的排序方法。顾名思义,其实就是通过先递归、再合并的思想来排序。
如下图所示,假设有一个无序数组{10, 4, 6, 3, 8, 2, 5, 7},
先根据二分法对其进行递归分解,
第一次分解后,变成两个数组{10, 4, 6, 3}, {8, 2, 5, 7},
第二次分解后,变成四个数组{10, 4}, {6, 3}, {8, 2}, {5, 7},
直到分解成一个数组只包含一个元素,
然后再对元素进行比较、合并,
第一次合并后,变成四个数组
浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如:Expires;Cache-control等)。但是也有非HTTP协议定义的缓存机制,如使用HTML Meta 标签,Web开发者可以在HTML页面的<head>节点中加入<meta>标签,代码如下:
秒杀活动的技术挑战
1. 对现有网站业务造成冲击
秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必须会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。
2. 高并发下的应用、数据库负载
用户在秒杀开始前,通过不停刷新浏览器页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库服务器造成极大的负载压力。
3. 突然增加的网络及服务器带宽
假设商品页面大小200K(主要是商品图片大小),那么需要的网络和服务器带宽是2G(200K×
关于设计模式的六大原则,经典的总结是“单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。”
单一职责原则(Single Responsibility Principle)
一个类只负责一项职责,好处:变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。
里氏替换原则(Liskov Substitution Prin ...
在java多线程编程中,一不小心就会引起活性危险(liveness hazard),需要非常谨慎。liveness可以翻译成活性,如果线程的活性好,说明运行状态不错,能得到CPU的有效处理;反之则线程可能处于死锁、饥饿、活锁等危险状态。-----------------------------------------------------------------------------------------------------------------------------------------什么是死锁,举个简单的例子:两只山羊过独木桥,它们同时走到桥中间,结果都堵在中间动弹不 ...