02 2021 档案
摘要:Spring Cloud简介 Spring Cloud官网:https://www.springcloud.cc/ Spring Cloud并不是一个框架,而是Spring为微服务提供一站式解决方案。 Spring Cloud底层是基于Spring Boot实现的云应用开发。 Spring Clou
阅读全文
摘要:Java 语言在设计之初就引入了线程的概念,以充分利用现代处理器的计算能力,这既带来了强大、灵活的多线程机制,也带来了线程安全等令人混淆的问题,而 Java 内存模型(Java Memory Model,JMM)为我们提供了一个在纷乱之中达成一致的指导准则。 Happen-before 原则简单理解
阅读全文
摘要:在实际工程中经常遇到这样的问题,在一起字符串里查找是否包含某个字符串,并且找到要找字符串所出现的位置。 让我们来举一个例子: 在上图中,字符串B是A的子串,B第一次在A中出现的位置下标是2(字符串的首位下标是0),所以返回 2。 字符串B在A中并不存在,所以返回 -1。 常见的算法包括:BF(Bru
阅读全文
摘要:JVM概述 垃圾收集机制为我们打理了很多繁琐的工作,大大提高了开发的效率,但是,垃圾收集也不是万能的,懂得 JVM 内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础。 JVM 内存区域的划分 通常可以把 JVM 内存区域分为下面几个方面,其中,有的区域是以线程为单位,而有的区域则是
阅读全文
摘要:HashMap介绍 hashMap是java中一个非常重要的数据结构,工作中也会经常使用到。 HashMap与Map接口的关系 HashMap继承于AbstractMap类,实现了Map接口,Map是key-value键值对的接口,AbstractMap实现了"键值对"的通用函数接口。 TreeMa
阅读全文
摘要:volatile的作用及原理 当一个变量被volatile修饰时,会拥有两个特性: 保证了不同线程对该变量操作的内存可见性.(当一个线程修改了变量,其他使用次变量的线程可以立即知道这一修改). 禁止了指令重排序. 1. 保证内存可见性 JMM操作变量的时候不是直接在主存进行操作的,而是每个线程拥有自
阅读全文
摘要:集合框架的线程安全问题 在高并发的场景下有些集合框架是非线程安全的,比如ArrayList、LinkedList、HashSet、HashMap等,因此在高并发环境下使用时是非常不安全的。所以Java也提供了对应的线程安全的并发版本。 集合框架 线程安全集合框架 说明 ArrayList CopyO
阅读全文
摘要:Netty概述 Netty是由Jboss提供的一个异步的,基于事件驱动的高性能网络通信开源框架,可以快速的开发高性能,高可靠的网络IO程序,其实就是对Java原生IO的优化和重写。 Netty主要是针对TCP协议下(TCP/IP -> JDK原生IO -> NIO-> Netty),面向Client
阅读全文
摘要:一、什么是CAS 假设现在有多个线程想要操作同一个资源对象,很多人的第一反应就是使用互斥锁,但是互斥锁的同步方式是悲观的。 什么是悲观呢?简单来说就是操作系统将会悲观地认为如果不严格同步线程的调用,那么一定会产生异常,所以互斥锁将会将资源锁定只供一个线程调用而阻塞其他线程。因此这种同步机制也叫做悲观
阅读全文
摘要:synchronized官方解释 翻译成中文: Synchronized同步方法可以支持使用一种简单的策略来防止线程干扰和内存一致性错误:如果一个对象对多个线程可见,则对该对象变量的所有读取或写入都是通过同步方法完成的。 简单就是说Synchronized的作用就是Java中解决并发问题的一种最常用
阅读全文
摘要:优先队列和普通队列区别: 1. 普通队列:先进先出(FIFO)。 2. 优先队列:优先队列中出队列的顺序和乳队列的顺序无关,和队列中元素的优先级有关。 优先队列是贪心算法的重要组成部分,借助于优先队列贪心算法可以解决非常多的实际问题包括: 1. 旅行商TSP问题 2. 01背包问题 3. 霍夫曼编码
阅读全文
摘要:1. 单进程最大打开文件数限制 有时候会遇上socket/file: can‘t open so many files的问题,其实是Linux系统有文件句柄限制的,一般Linux系统限制单进程最大可以打开1024个文件,这是远远不能满足高并发需求的。 通过ulimit –a命令来查看系统的一些资源限
阅读全文
摘要:递归(Recursion)是一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归。在计算机算法中,则是方法本身调用自己方法的过程,它可将一个大问题一步步的化为小问题,直到可以直接求解计算,典型的问题就是汉诺塔。
阅读全文
摘要:链表也是一种线性表结构,和数组类似,是一种非常基础的数据结构。 链表定义 链表是一种线性表数据结构; 从底层存储结构上看,链表不需要一整块连续的存储空间,而是通过“指针”将一组零散的内存块串联起来使用; 链表中的每个内存块被称为链表的“结点”,每个结点除了要存储数据外,还需要记录上(下)一个结点的地
阅读全文
摘要:冯诺依曼体系结构 冯诺依曼(John von Neumann)提出“存储程序”原理,即把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存,以此为基础的计算机称为冯诺依曼机(Von Neumannarchitecture)。 特点: 1. 计算机由运算器,控制器,存储器,输入和输出五部分
阅读全文
摘要:kubernetes 对于访问 API 来说提供了两个步骤的安全措施:认证和授权。认证解决用户是谁的问题,授权解决用户能做什么的问题。通过合理的权限管理,能够保证系统的安全可靠。 通俗的讲,认证就是验证用户名密码,授权就是检查该用户是否拥有权限访问请求的资源。 Kubernetes集群的所有操作基本
阅读全文
摘要:多进程 历史上最早出现也是最简单的一种并处处理多个请求的方法就是利用多进程。 比如在Linux世界中,我们可以使用fork、exec等方法创建多个进程,我们可以在父进程中接收用户的链接请求,然后创建子进程去处理用户请求。
阅读全文
摘要:disruptor是一个高性能的队列,最初是应用在LMAX架构中。我们可以把disruptor用在生产者-消费者问题以获取高效地处理和高吞吐量。
阅读全文
摘要:一、什么是复杂性 Ousterhout 教授认为,软件设计的最大目标,就是降低复杂性(complexity)。 所谓复杂性,就是任何使得软件难于理解和修改的因素。 二、如何度量软件的复杂性 软件复杂性度量的参数主要包括: 1. 规模,即总共指令数或源程序行数。 2. 难度,通常由程序中出现的操作数的
阅读全文
摘要:1. 操作系统定义 操作系统(Operating System,OS):是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面
阅读全文
摘要:延时队列的应用 什么是延时队列?顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。 延时队列在项目中的应用还是比较多的,尤其像电商类平台。 1. 订单成功后,在30分钟内没有支付,自动取消订单 外卖平台发送订餐通知,下单成功后60
阅读全文
摘要:LVS简介 LVS英文全称是Linux Virtual Server的简称, 也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。在Linux系统内核2.6中,它已经成为内核的一部分,在Linux老的版本中则需要重新编译内核。
阅读全文
摘要:IO模型 IO模型简单点说就是使用什么样的通道进行数据的发送和接收,这种通道的特性决定了程序通信的性能, 比如这个通道是否是异步还是同步,是阻塞还是非阻塞,是否有缓存,是单向通道还是双向通道。 Java中IO模型 Java中共支持3中网络IO模型:BIO,NIO,AIO。 1. BIO: 同步并阻塞
阅读全文
摘要:无论是上层应用还是操作系统内核开发,内存问题都是我们所需要关注的。 我们来看看Linux内核管理和分配机制。 伙伴算法 伙伴算法从物理连续的大小固定的段上进行分配。从这个段上分配内存,采用 2 的幂分配器来满足请求分配单元的大小为 2 的幂(4KB、 8KB、16KB 等)。请求单元的大小如不适当,
阅读全文
摘要:一. 函数式选项模式 有时候一个函数会有很多参数,为了方便函数的使用,我们会给希望给一些参数设定默认值,调用时只需要传与默认值不同的参数即可,类似于 python 里面的默认参数和字典参数,虽然 golang 里面既没有默认参数也没有字典参数,但是我们有选项模式。
阅读全文
摘要:官网资料 :https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/
阅读全文
摘要:就绪探针和存活探针简介 就绪探针 Readiness Probe: Kubernetes需要一种机制当Pod服务启动的时候需要判断Pod是否可以接受请求,是否已经完成初始化达到可工作状态。 存活探针 Liveness Probe
阅读全文
摘要:计算机程序等应用都是需要占用资源的,比如内存,CPU,网络,磁盘空间等。一个微服务应用就需要一定的计算机资源才能正常的运行,但是对于资源的占用也不是无限制的,在Kubernetes中的资源也是有限制的,Kubernetes通过Request/Limit这两个抽象概念来支持资源的申请和配额的管理。
阅读全文
摘要:在Docker中就有数据卷的概念,由于容器本身是非持久化的,当容器删除时或者崩溃,数据也一起会被删除,想要持久化使用数据,需要把主机上的目录挂载到Docker中去,在K8S中,数据卷是通过Pod实现持久化的,如果Pod删除,数据卷也会一起删除。 kubernetes为了解决以上问题,引入了存储卷Vo
阅读全文
摘要:软件开发是需要快速高质量的交付给客户,微服务也一样。如何将微服务快速高质量的交付到线上环境,也是微服务重点解决的问题。 实践证明持续集成(CI:Continuous Integration), 持续交付(CD:Continuous Delivery)和 持续部署(Continuous Deliver
阅读全文
摘要:Kubernetes集群中有存储机制。 Kubernetes集群存储机制分类 1. configMap 2. Secret。 3. Volume。 4. 持久卷(Persistent Volume,PV)和持久卷声明(Persistent Volume Claim,PVC)
阅读全文
摘要:通常情况下,Pod分配到哪些Node是不需要管理员操心的,这个过程会由scheduler自动实现。但有时,我们需要指定一些调度的限制,例如某些应用应该跑在具有SSD存储的节点上,有些应用应该跑在同一个节点上等等。
阅读全文
摘要:一、 什么是蓝绿发布 蓝绿发布是指在项目逻辑上分为AB组,在项目发布时,首先把A组从负载均衡中摘除,进行新版本的部署,B组仍然继续提供服务,做到用户体验无中断。 当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署。A组重新提供服务。 最后,B组也升级完成,负载均衡重新接
阅读全文
摘要:Skywalking github地址:https://github.com/apache/skywalking
阅读全文
摘要:Pod是什么 Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes中虚拟机抽象,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。Pod中包含了一个或多个容器,还包括了存储、网络等各个容器共享的资源,是Kubernetes最基本的调度单位。Pod支
阅读全文
摘要:从kubernetes的1.8版本开始,kube-proxy引入了IPVS模式 (IP Virtual Server,IP虚拟服务器),IPVS在Kubernetes1.11中升级为GA稳定版。IPVS模式与iptables同样基于Netfilter,作为linux内核的一部分实现传输层负载均衡的技
阅读全文
摘要:Kubernetes上的网络通讯模型 k8s 有三种网络:Pod网络、集群网络、节点网络。 1. Pod网络:(Pod Ip + port) Pod网络用于Pod虚拟机之间互联互通,所有Pod都处于同一个网络中。 Pod网络概念模型: Pod相当于是K8s云平台中的虚拟机,它是K8s的基本调度单位。
阅读全文