一些杂乱无章的东西

1.分布式之CAP原则

在这里插入图片描述
其中
Consistency:(一致性,其中分为强一致性,若一致性和最终一致性),在分布式系统的所有数据备份,在同时是否存在同样的值.
即在写完之后的读的时候,必须要有该数据.
High-Availability:(高可用),在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性).
Partition-Tolerance:(分区容错性),以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
在分布式系统的设计中,没有一种设计可以同时满足一致性,可用性,分区容错性 3个特性 ,要不就是CA,要么CP,要么就是AP.即有三种取舍策略:

CA

如果不要求P(不允许分区),则C(强一致性)和A(可用性)可以保证 ,但是放弃了P就等于放弃了系统的可扩展性,也就是分布式节点受阻,违背了分布式系统设计的初衷.

CP

如果不要求A(可用),每个请求都需要在服务器之间保持C(强一致性),而P(分区)会导致同步时间无限延长,也就是需要等待数据完全同步才能正常的进行访问,一旦发生网络的故障或者消息丢失,就要牺牲用户的体验,等待所有数据一样后才让用户进行访问.

AP

要高可用并且允许分区,需要放弃C(一致性),一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能使用本地数据进行服务,这样会存在全局数据的不一致性.

出现问题就会有问题的解决方案,这个解决方案就是Base理论.(太长了下次总结一下再写).

2.缓存击穿,缓存穿透,缓存雪崩及其解决方案

缓存击穿,缓存穿透,缓存雪崩及其解决方案.

3.线程池的执行流程及其四种拒绝策略.

线程池的执行流程及其四种拒绝策略.

4.拦截器和过滤器的区别

1.拦截器只能拦截action请求,过滤器能拦截所有请求;
2.拦截器是spring支持的,过滤器则是依赖于servlet;
3.拦截器基于java反射机制的,过滤器是基于函数的回调;
4.拦截器可以访问action上下文,堆,栈里的对象,但是过滤器不行;
5.在action的生命周期里面,拦截器可以被调用很多次,但是过滤器只能在容器初始化时被调用一次;
6.拦截器可以获取IOC中的Bean,但是过滤器不行,在拦截器注入一个service,可以调用业务逻辑;

5.什么是Servlet?

servlet是使用java Servlet应用程序接口(API)及相关类和方法的java程序,所有的Servlet都必须要实现的核心接口是,javax.servlet.servlet.

6.servlet生命周期

servlet生命周期主要分成四个阶段:实例化,初始化,服务,销毁;
当用户请求servlet时候,首先判断有没有servlet对象,若不存在则有web容器创建一个对象,然后调用init()方法对其进行初始化,这个初始化方法在servlet生命周期中只会调用一次,完成servlet对象的实例和初始化之后,web容器会调用servlet对象的service()方法来处理请求;当web容器关闭或者Servlet对象要从web容器中被删除的时候,则会调用destory()方法;

7.创建对象有几种方式

<1>通过new创建新的对象
<2>通过反射机制创建对象
<3>采用clone()克隆对象
<4>通过反序列化机制进行创建对象;

8.jvm虚拟机模型

在jdk7之前,jvm虚拟机分为老年代,新生代和永久代,在jdk8中已经成为老年代,新生代和元空间(MetaSpace).

新生代又分为eden区和survivorFrom区和survivorTO区比例为8:1:1,新生对象都在eden区创建,除了部分特别大的数据直接放到老年区,新生代的垃圾回收被叫做Minor GC,回收过后幸存的数据会被复制到survivorFrom区里面,survivorFrom区作为上一次GC的幸存者,作为这一次GC的被扫描者,通过程序计数器来判断计算数据的年龄,当JVM无法为新建对象分配内存空间的时候(Eden满了),Minor GC被触发。因此新生代空间占用率越高,Minor GC越频繁。
MinorGC的过程:采用复制算法。
首先,把Eden和ServivorFrom区域中存活的对象复制到ServicorTo区域(如果有对象的年龄以及达到了老年的标准,一般是15,则赋值到老年代区)
同时把这些对象的年龄+1(如果ServicorTo不够位置了就放到老年区)
然后,清空Eden和ServicorFrom中的对象;最后,ServicorTo和ServicorFrom互换,原ServicorTo成为下一次GC时的ServicorFrom区。经过MinorGC内存都是完整的没有碎片化的.
在这里插入图片描述
老年代的GC不会频繁执行,比较稳定,当无法找到足够大的连续空间分配给新创建的较大对象时也会提前触发一次MajorGC进行垃圾回收腾出空间。
MajorGC采用标记—清除算法:
1.首先扫描一次所有老年代,标记出存活的对象
2.然后回收没有标记的对象。
MajorGC的耗时比较长,因为要扫描再回收。MajorGC会产生内存碎片,为了减少内存损耗,我们一般需要进行合并或者标记出来方便下次直接分配。
当老年代也满了装不下的时候,就会抛出OOM(Out of Memory)异常。
永久代现在也被成为元数据区,主要存放Class和Meta(元数据)的信息.
Class在被加载的时候被放入永久区域。它和和存放实例的区域不同,GC不会在主程序运行期对永久区域进行清理。所以这也导致了永久代的区域会随着加载的Class的增多而胀满,最终抛出OOM异常。
不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值