02 2019 档案
摘要:有状态服务器和无状态服务器 对服务器程序来说,有两个基本假设十分重要,究竟服务器是基于状态请求还是无状态请求。状态化的判断是指两个来自相同发起者的请求在服务器端是否具备上下文关系。如果是状态化请求,那么服务器端一般都要保存请求的相关信息,每个请求可以默认地使用以前的请求信息。而无状态请求则不行,服务
阅读全文
摘要:转载:https://www.jianshu.com/p/60fc156401b7
阅读全文
摘要:zookeeper 使用场景 Zookeeper作为一个分布式协调系统提供了一项基本服务:分布式锁服务,分布式锁是分布式协调技术实现的核心内容。像配置管理、任务分发、组服务、分布式消息队列、分布式通知/协调等,这些应用实际上都是基于这项基础服务由用户自己摸索出来的。 数据发布与订阅实现配置管理:发布
阅读全文
摘要:ZAB协议 概述 ZAB协议是专门为zookeeper实现分布式协调功能而设计。zookeeper主要是根据ZAB协议是实现分布式系统数据一致性。 zookeeper根据ZAB协议建立了主备模型完成zookeeper集群中数据的同步。这里所说的主备系统架构模型是指,在zookeeper集群中,只有一
阅读全文
摘要:快速排序 原理 快速排序是冒泡排序的优化 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。 快速排序快的原因 因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到
阅读全文
摘要:Servlet 梳理 概述 Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础。 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又
阅读全文
摘要:tomcat性能优化 Tomcat本身优化 Tomcat内存优化 启动时告诉JVM我要一块大内存(调优内存是最直接的方式) 我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数 JAVA_OPTS参数说明 server 启用jdk 的 server 版 Xm
阅读全文
摘要:tomcat梳理 Tomcat的缺省端口是多少,怎么修改? 默认接口是8080 修改 1)找到Tomcat目录下的conf文件夹 2)进入conf文件夹里面找到server.xml文件 3)打开server.xml文件 4)在server.xml文件里面找到下列信息 Tomcat有几种部署方式 第一
阅读全文
摘要:java单例五种实现模式 饿汉式(线程安全,调用效率高,但是不能延时加载) 一上来就把单例对象创建出来了,要用的时候直接返回即可,这种可以说是单例模式中最简单的一种实现方式。但是问题也比较明显。单例在还没有使用到的时候,初始化就已经完成了。也就是说,如果程序从头到位都没用使用这个单例的话,单例的对象
阅读全文
摘要:转载:https://segmentfault.com/a/1190000017568892
阅读全文
摘要:Integer常量池 问题1 问题2 问题3 解释 使用==的情况: 如果比较Integer变量,默认比较的是地址值。 Java的Integer维护了从 128~127的缓存池 如果比较的某一边有操作表达式(例如a+b),那么比较的是具体数值 使用equals()的情况: 无论是Integer还是L
阅读全文
摘要:一致性哈希 概述 在解决分布式系统中负载均衡的问题时候可以使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求(并维护这些请求的信息),起到负载均衡的作用。 但是普通的余数hash(hash(比如用户id)%服务器机器数)算法伸缩性很差,当新增或者下线服务器机器时候
阅读全文
摘要:CAP原理 概述 CAP理论的主要场景是在分布式环境下,在单机环境下,基本可不考虑CAP问题。 CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能
阅读全文
摘要:Redis内存模型 Redis内存统计 在客户端通过redis cli连接服务器后(后面如无特殊说明,客户端一律使用redis cli),通过info命令可以查看内存使用情况 info memory info命令可以显示redis服务器的许多信息,包括服务器基本信息、CPU、内存、持久化、客户端连接
阅读全文
摘要:rabbitmq 架构图 RabbitMQ 中的 broker 是指什么?cluster 又是指什么 broker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ 应用程序。cluster 是在 broker 的基础之上,增加了 node 之间共享元数据
阅读全文
摘要:Nginx 负载均衡 概述 Nginx负载均衡提供上游服务器(真实业务逻辑访问的服务器),负载均衡、故障转移、失败重试、容错、健康检查等。 当上游服务器(真实业务逻辑访问的服务器)发生故障时,可以转移到其他上游服务器(真实业务逻辑访问的服务器)。 配置 负载均衡算法 负载均衡算法 每个请求按时间顺序
阅读全文
摘要:Nginx 反向代理 概述 反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 反向代理好处 1.充当防火墙,隔离真是服务器,防止主服务器被恶
阅读全文
摘要:ArrayList.subList方法使用总结 示例 总结 使用sublist()返回的只是原list对象的一个视图,因此Sublist内部类和ArrayList的内部保存数据的地址是一样得;即它们在内存中是同一个List(集合),只是parentOffset ,size等参数不同 对SubList
阅读全文
摘要:equals()和hashCode()使用总结 equals() Object类中的equals方法和“==”是一样的,没有区别,即俩个对象的比较是比较他们的栈内存中存储的内存地址。 而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,他们比较的
阅读全文
摘要:Arrays.asList()用法梳理 asList概述 Arrays是java容器相关操作的工具类,asList方法将Array转换为list,是Array和List之间的桥梁。 asList本质 使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add
阅读全文
摘要:索引的最左前缀原则 原理 mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先,如: 如果有一个2列的索引(col1,col2),则已经对(col1)、(col1,col2)上建立了索引; 如果有一个3列索引(col1,col2,col3),则已经对(col1)、(col1,col2)、(
阅读全文
摘要:深入理解ClassLoader ClassLoader 作用 负责将 Class 加载到 JVM 中 ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回 这个类的class对象。 审查每个类由谁加载(父优先
阅读全文
摘要:CountDownLatch CyclicBarrier和 Semaphore 原理 基于AQS实现。 让需要的暂时阻塞的线程,进入一个死循环里面,得到某个条件后再退出循环,以此实现阻塞当前线程的效果。 CountDownLatch CountDownLatch一般用于某个线程A等待若干个其他线程执
阅读全文
摘要:垃圾收集器 如果说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现 Serial收集器 串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法、老年代标记 压缩;垃圾收集的过程中会Stop The World(
阅读全文
摘要:垃圾收集算法 Mark Sweep(标记 清除算法) 标记清除算法分为两个阶段,标记阶段和清除阶段。标记阶段任务是标记出所有需要回收的对象,清除阶段就是清除被标记对象的空间。 优缺点:实现简单,容易产生内存碎片。因为会存在大量的空间碎片,因为回收后的空间是不连续的,这样给大对象分配内存的时候可能会提
阅读全文
摘要:对象可达判断 引用计数算法(Reference Counting) 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器减1;任何时刻计数器都为0的对象就是不可能再被使用的。 引用计数算法的实现简单,判断效率也很高,在大部分情况下它都是一个不错的算法。 但是Java
阅读全文
摘要:散列算法和哈希表结构 算法概述 Hash ,一般翻译做“ 散列” ,也有直接音译为“ 哈希” 的,就是把任意长度的输入(又叫做预映射, pre image ),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不 同的输入可能会散
阅读全文
摘要:桶排序 概述 桶排序Bucket Sort从1956年就开始被使用,该算法的基本思想是由E. J. Issac R. C. Singleton提出来。 桶排序是一种效率很高的排序算法,它的时间复杂度为O(N+M),(N个元素,范围为0 M),但桶排序有一定的限制,必须为非负整数,而且元素不宜过大 设
阅读全文
摘要:Spring事务传播行为 概述 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为 事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。 事务的分类 Java事务类型分为JDBC事务跟JTA事务 JDBC事务:即为上面说的数据
阅读全文
摘要:AQS 概述 AQS,即AbstractQueuedSynchronizer, 队列同步器,它是Java并发用来构建锁和其他同步组件的基础框架 AQS原理 AQS的实现依赖内部的同步队列(FIFO双向队列),如果当前线程获取同步状态失败,AQS会将该线程以及等待状态等信息构造成一个Node,将其加入
阅读全文
摘要:重入锁 重入锁指的是当前线成功获取锁后,如果再次访问该临界区,则不会对自己产生互斥行为。 Java中对ReentrantLock和synchronized都是可重入锁,synchronized由jvm实现可重入即使,ReentrantLock都可重入性基于AQS实现。 ReentrantLock还提
阅读全文
摘要:CAS 算法介绍 CAS(比较与交换,Compare and swap) 是一种有名的无锁算法。 CAS具有原子性 CAS, CPU指令,在大多数处理器架构,包括IA32、Space中采用的都是CAS指令,CAS的语义是“我认为V的值应该为A,如果是,那么将V的值更新为B,否则不要更改该位置,只告诉
阅读全文
摘要:队列分类 单向队列 Queue extends Collection 队列实现了 Collection 接口,Collection接口是集合类的顶级接口 从前面删除元素,从后面插入元素,跟现实中排队是一样的道理 双向队列 双端队列支持同时从两端添加或移除元素 双向队列在java中的接口规范是Dequ
阅读全文

浙公网安备 33010602011771号