• Hello Redis,我有7个问题想请教你
    作者:陈于喆 来源:https://mp.weixin.qq.com/s/kT8yw51kfWSTedQUP-XwGAHello,Redis!我们相处已经很多年了,从模糊的认识到现在我们已经深入结合,你的好我一直都知道也一直都记住,能否再让我多问你的几个问题,让我更加深入的去了解你。一、Redis 的通讯协议是什么Redis 的通讯协议是文本协议,是的,Redis 服务器与客户端通过 RESP(Redis Serialization Protocol)协议通信。没错,文本协议确实是会浪费流量,不过它的优点在...
  • 你好 Redis,能回答我 7 个问题吗?
    Hello,Redis!我们相处已经很多年了,从模糊的认识到现在我们已经深入结合,你的好我一直都知道也一直都记住能否再让我多问你的几个问题,让我更加深入的去了解你。一、Redis 的通讯协议是什么Redis 的通讯协议是文本协议,是的,Redis 服务器与客户端通过 RESP(Redis Serialization Protocol)协议通信。没错,文本协议确实是会浪费流量,不过它的优点在于直观,非常的简单,解析性能极其的好我们不需要一个特殊的 Redis 客户端仅靠 Telnet 或者是文本流就可以跟 R...
  • 七问Redis,才知道我与技术大牛的差距在哪里
    Redis 的通讯协议是文本协议,是的,Redis 服务器与客户端通过 RESP协议通信。从 Redis 来说可以从 2 个层面看,一个是执行错误是否有确保一致性,另一个是宕机时,Redis 是否有确保一致性的机制。Redis 因为是单线程操作,所以在隔离性上有天生的隔离机制,当 Redis 执行事务时,Redis 的服务端保证在执行事务期间不会对事务进行中断,所以,Redis 事务总是以串行的方式运行,事务也具备隔离性。Redis 和 ACID 纯属站在使用者的角度去思想,Redis 设计更多的是追求简单与高性能,不会受制于传统 ACID 的束缚。
  • 咱们从头到尾说一次 Java 的垃圾回收
    确实,在 Java 的世界里,似乎我们不用对垃圾回收那么的关注。但其实这并不代表 Java 的 GC 就不重要。今天,新零售技术事业群的率鸽(花名)就从头到尾,完整地聊一聊 Java 的垃圾回收。1960年,基于 MIT 的 Lisp 首先提出了垃圾回收的概念,而这时 Java 还没有出世呢!所以实际上 GC 并不是Java的专利,GC 的历史远远大于 Java 的历史!因此,采用引用计数的垃圾收集不属于严格意义上的"Stop-The-World"的垃圾收集机制。
  • 系统性能提升利刃 | 缓存技术使用的实践与思考
    本文将提及的缓存技术则是提升性能的另一把利刃。这一策略常被应用于缓解DB数据库的数据访问压力。多份进程内缓存存储着同样的数据内容,造成内存使用浪费。接下来的若干缓存使用策略所围绕的核心考量点就是在保证系统稳定性的同时,旨在提升缓存命中率。
  • 从头到尾说一次 Java 的垃圾回收
    之前上学的时候有这个一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C++ 程序员,吃完直接就走的,是 Java 程序员。确实,在 Java 的世界里,似乎我们不用对垃圾回收那么的专注,很多初学者不懂 GC,也依然能写出一个能用甚至还不错的程序或系统。但其实这并不代表 Java 的 GC 就不重要。今天我们就从头到尾完整地聊一聊 Java 的垃圾回收。1960年,基于 MIT 的 Lisp 首先提出了垃圾回收的概念,而这时 Java 还没有出世呢!所以实际上 GC 并不是Java的专利,GC 的历史远远大于 Java 的历史!
  • 数据不撒谎,Flink-Kafka性能压测全记录!
    模拟不同数量级的消息队列的消息写入和消费场景,根据Kafka的处理结果,评估Kafka是否满足处理亿级以上的消息的能力。Kafka消息写入创建的topic命名为test_kafka_throughout,Kafka消费读取的topic也是该topic;使用命令发起消费该topic的请求,针对不同的测试指标,本次我们采用固定其他值,动态变化测量值的方式来进行,具体使用脚本为kafka自带的测试脚本,分别为kafka bin目录下的kafka-producer-perf-test.sh和kafka-consumer-perf-test.sh;通过测试来查看Kafka消费不同数量级别的消息时的处理能力。
  • 干货 | 一文看懂JVM内存布局及GC原理
    “java的内存布局以及GC原理”是java开发人员绕不开的话题,也是面试中常见的高频问题之一。如上图,虽然堆外内存不受JVM管控,但是堆内存中会持有对它的引用,以便进行GC。在第一部分JVM内存布局中,我们知道了thread独享的区域:PC Regiester、JVM Stack、Native Method Stack,其生命周期都与线程相同,所以无需GC。线程共享的Heap区、Method Area则是GC关注的重点对象。
  • JVM|04垃圾回收
    有了垃圾回收机制后,程序员只需要关心内存的申请即可,内存的释放由系统自动识别完成。当然,除了Java语言,C#、Python等语言也都有自动的垃圾回收机制。在垃圾回收过程中,应用无需挂起。初始状态下,所有的目标对象都是为0待jvm出现有效内存耗尽,就会挂起线程,执行GC线程,进行标记从根节点进行标记到最后,然后回收未被标记的对象。不管怎样,都会保证名为To的Survivor区域是空的。GC会一直重复这样的过程,直到“To”区被填满,“To”区被填满之后,会将所有象移动到年老代中。
  • MySQL索引和SQL调优手册
    为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引。MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构。MySQL 索引实现在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。在MyISAM中,主索引和辅助索引在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。
  • 七问Redis,才知道我与技术大牛的差距在哪里
    “Hello,Redis!我们相处已经很多年了,从模糊的认识到现在我们已经深入结合,你的好我一直都知道也一直都记住,能否再让我多问你的几个问题,让我更加深入的去了解你。Redis的通讯协议是什么Redis 的通讯协议是文本协议,是的,Redis 服务器与客户端通过 RESP(Redis Serialization Protocol)协议通信。没错,文本协议确实是会浪费流量,不过它的优点在于直观,非常的简单,解析性能极其的好,我们不需要一个特殊的 Redis 客户端仅靠 Telnet 或者是文本流就可以跟 R
  • 构建 Kubernetes 集群——合理选择工作节点数量和大小
    集群容量一般来说,Kubernetes 集群可以被视为是将一组单个节点抽象为一个大的“超级节点”。主节点数量和大小的选择是完全不同的主题。有报告称,节点被报告为未就绪,是因为周期性的的 kubelet 运行状况检查花费了太长时间来迭代节点上的所有容器。出于这些原因,Kubernetes 官方建议每个节点最多 110 个 Pod。对于这个数字,Kubernetes 已经进行过相关测试,可以在一般类型的节点上可靠地工作。在 Google Kubernetes Engine上,无论节点类型如何,每个节点的限制为 100 个 Pod。在 Azure Kubernetes Service上,默认限制是每个节点 30 个 Pod,但最多可以增加到 250 个。Kubernetes 可以将失败节点的工作负载重新安排到其他节点。
  • MySQL索引和SQL调优手册
    为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引。MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构。MySQL 索引实现在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。MyISAM索引实现MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。在MyISAM中,主索引和辅助索引在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。
  • 学习笔记 | 深入理解Java内存模型
    Java内存模型Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。此外,程序计数器是 Java 虚拟机规定的唯一不会发生内存溢出的区域。虚拟机栈 虚拟机栈也是每个线程私有的一块内存空间,它的生命周期与线程相同。虚拟机栈描述的是 Java 方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。堆内存 堆内存主要用于存放对象和数组,它是 JVM 的内存中最大的一块区域,堆内存和方法区都被所有线程共享,在虚拟机启动的时候创建。
  • 图解Go语言内存分配
    Golang运行时的内存分配算法主要源自 Google 为 C 语言开发的TCMalloc算法,全称Thread-Caching Malloc。基础概念Go在程序启动的时候,会先向操作系统申请一块内存,切成小块后自己进行管理。arena区域就是我们所谓的堆区,Go动态分配的内存都是在这个区域,它把内存分割成8KB大小的页,一些页组合起来称为mspan。内存管理单元mspan:Go中内存管理的基本单元,是由一片连续的8KB的页组成的大块内存。并且会使用一个位图来标记其尚未使用的object。顺便提一句,类型Size Class为0表示大对象,它实际上直接由堆内存分配,而小对象都要通过mspan来分配。
  • 一文了解 Redis 内存监控和内存消耗
    内存使用统计通过 info memory 命令可以获得 Redis 内存相关的指标。当 Redis 内存超出可以获得内存时,操作系统会进行 swap,将旧的页写入硬盘。Redis 使用 maxmemory 参数限制最大可用内存。对象内存对象内存是 Redis 内存占用最大的一块,存储着用户所有的数据。键对象都是字符串,在使用 Redis 时很容易忽略键对内存消耗的影响,应当避免使用过长的键。输入输出缓冲区在大流量场景中容易失控,造成 Redis 内存不稳定,需要重点监控。可以定期执行 client list 命令,监控每个客户端的输入输出缓冲区大小和其他信息。
  • 学习笔记 | Java 垃圾回收(面试必备)
    Java 垃圾回收与垃圾收集器垃圾回收,就是通过垃圾收集器把内存中没用的对象清理掉。对象的内存分配主要在新生代的 Eden Space 和 Survivor Space 的 From Space,少数情况会直接分配到老年代。当对象在 Survivor 区躲过一次 GC 后,其年龄就会加 1。ParNew 收集器 ParNew 收集器是 Serial 收集器的多线程版本,可以使用多条线程进行垃圾收集。ParNew 是运行在 Server 模式下的虚拟机中首选的新生代收集器,只有 ParNew 收集器能够与 CMS 收集器配合工作。Parallel Scavenge 收集器的目标是 达到一个可控制的吞吐量。GCTimeRatio:参数的值是一个大于 0 且小于 100 的证书,就是垃圾收集时间占总时间的比率,相当于是吞吐量的倒数。
  • 详解 Redis 内存管理机制和实现
    Redis是一个基于内存的键值数据库,其内存管理是非常重要的。最大内存限制Redis使用 maxmemory 参数限制最大可用内存,默认值为0,表示无限制。因为 Redis 默认情况下是会尽可能多使用服务器的内存,可能会出现服务器内存不足,导致 Redis 进程被杀死。具体Redis 内存监控的内容请查看一文了解 Redis 内存监控和内存消耗。当 Redis保存大量的键,对每个键都进行精准的过期删除可能会导致消耗大量的 CPU,会阻塞 Redis 的主线程,拖累 Redis 的性能,因此 Redis 采用惰性删除和定时任务删除机制实现过期键的内存回收。源码展示的时 Redis 4.0 版本。
  • 精心整理了20道操作系统高频面试题(建议收藏)
    操作系统1、简单说下你对并发和并行的理解?通知后,才能进行后续的执行。时间片轮转调度算法时间片轮转调度算法主要适用于分时系统。短作业优先调度算法是一个非抢占策略,他的原则是下一次选择预计处理时间最短的进程,因此短进程将会越过长作业,跳至队列头。最短剩余时间优先调度算法最短剩余时间是针对最短进程优先增加了抢占机制的版本。优先级调度算法优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。
  • 再也不用担心被虐啦,高频率JVM面试题,都在这里!
    JVM简单来说就是运行Java代码的解释器,作为螺丝钉程序员JVM其实了解下就差不多啦,不懂JVM内部细节照样能写出优质的代码!但是一到造火箭、飞机的场景(面试)不懂JVM的你,会被面试官虐的体无完肤,本期内容列举常见的JVM面试题:说一JVM的内存结构是什么样子的?面对这一大波JVM面试题,你真的Hold的住吗?再有人问你JVM的内存结构就回想下上面的图,但是知道JVM的内存模型的样子还是不行的,还要知道他们分别干什么的。两块区域交替使用,最大问题就是会导致空间的浪费,现在堆内存的使用率只有50%。
公众号