视觉设计是一种视觉语言。学习视觉设计与学习一门新的语言没有什么不同。 好的视觉设计师并不是天生的。他们是后天养成的。成为好的视觉设计师的关键是需要严谨的。如果你下意识地努力,你将会提升为视觉设计师。 这里有一些你应该掌握的基础知识,可以把你的视觉设计提升到一个新的高度。 原理1:回归基本类型 你可以通过查看他们的排版来告诉很多设计师。因为这个类型是设计的基础。 将字体配对可以大大改变设计的动态。 原理2:利用空间创造平衡 间距有助于在你的设计中建立垂直和水平运动。它是创建视觉层次和形成元素之间的关键因素。 原理3:使用大小建立视觉层次 当创建视觉层次结构时,规模是必须条件。通过利用大小来传达元素之间的视觉关系,建立流程。 规模化是网格有可用性的原因之一。通过网格使元素的比例大小表达的更具有重要性。 原理4:利用颜色传达意义 颜色扮演很多角色。它传达意义,创造情感共鸣,并使设计统一。
十条数据,算出各自的哈希值,(这里就不变了,实际上要经过一系列计算) 0 : 0 1 : 1 2 : 2 3 : 3 4 : 4 5 : 5 6 : 6 7 : 7 8 : 8 9 : 9 有三个节点, 算出各自的哈希值 node a: 3 node b: 5 node c: 7 这个时候比较两者的哈希值,5等于b,则归属b,4小于b,归属b,3等于a,则归属a,最后所有大于c的,归属于c(这里只是模拟 ) 相当于整个哈希值就是一个环,对应的映射结果: node a: 0,1,2,3 node b: 4,5 node c: 6,7,8,9 这个时候加入node d, 就可以算出node d的哈希值: node d: 9 这个时候对应的数据就会做迁移: node a: 0,1,2,3 node b: 4,5 node c: 6,7 node d: 8,9 只有最后8,9这2条数据被存储到新的节点,其他不变
EVM 设计原理 以太坊可以抽象的分成两部分,一部分是状态,另外一部分是用于改变状态的 EVM。 data: 一个不限制大小的字节数组,用来指定消息调用的输入数据 请注意,这是最开始的设计思路,后面经过诸多的 EIP 后,有些改变,更详细的内容可见 理解交易[12]。 B8%8E%E5%8E%9F%E7%90%86/%E5%88%9D%E6%AD%A5%E7%90%86%E8%A7%A3%E4%BB%A5%E5%A4%AA%E5%9D%8A%E8%99%9A%E6%8B B8%8E%E5%8E%9F%E7%90%86/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E7%9A%84%E6%95%B0%E6%8D%AE%E7%BB%84%E7%BB%87.md [ B8%8E%E5%8E%9F%E7%90%86/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E7%9A%84%E6%95%B0%E6%8D%AE%E7%BB%84%E7%BB%87.md [
本文主要简单介绍Kafka的设计原理。 group Zookeeper:保存着集群broker、topic、partition等meta数据;另外,还负责broker故障发现,partition leader选举,负载均衡等功能 三、Kafka设计原理 如图,Consumer Group 1的Consumer1和Consumer Group 2的Consumer4,同时消费TopicA-part0的消息。 如果有partition或者Consumer的增减,为了保证均衡消费,需要实现Consumer Rebalance,分配算法如下: broker对Consumer设计原理: 对于每个Consumer 3.6 HA基本原理 broker HA broker集群信息由Zookeeper维护,并选举出一个controller。
节点之间的三次握手原理分析12.基于slots槽位机制的数据分片原理分析13.Redis集群slots分配与内核数据结构14.基于slots槽位的命令执行流程分析15.基于跳跃表的slots和key关联关系 16.集群扩容时的slots转移过程与ASK分析17.Redis主从架构原理18.Redis老版本的sync主从复制原理以及缺陷19.Redis新版本psync的偏移量和复制积压缓冲区20.Redis集群的故障探测 (4)为什么通过队列 + 单线程进行串行化处理针对内存里的共享数据结构,如果允许多线程并发访问,那么就会导致频繁的加锁和互斥。 (4)如何决定一个key应交给集群中哪个节点来处理客户端想要对某个key进行请求操作时,由于不知道究竟找哪个节点去处理,所以会随机找一个节点来发送关于这个key的命令请求。 18.Redis老版本的sync主从复制原理以及缺陷Redis 2.x以前的老版本里使用的sync主从复制有很多缺陷,只有了解老版本的sync主从复制原理,才能理解Redis主从复制原理的演进过程。
Eureka设计原理 1.1. 前言 目前我越来越关注技术原理层面的东西,开始考虑中间件设计背后,要考虑哪些因素,为什么要这样设计,有什么优化的地方,这次来讨论Eureka 1.2. 设计问题 设计一个注册中心,需要考虑什么东西?一步步来 首先注册中心的作用是用来存储各个服务器的地址端口等信息,所以需要考虑如何存储 存储就需要考虑是主动去拉还是各系统自己推送地址信息过来? 如何抗住上千台机器压力 假设100个服务每个部署20台机器,那就是2000台 按每个客户端每隔30秒发送一个心跳+一次注册表拉取,每分钟就是4次,也就是总共每分钟4*2000=8000次 也就是每秒8000 Eureka采用的是ConcurrentHashMap来存储注册表信息,没错就是这玩意,我一开始看到也很吃惊,不是吃惊它什么巧妙的设计,我觉得让一个刚入行的菜鸟来做存储,可以也做成这样,只不过可能用的HashMap 注册延迟原理 同样的上面的机制,导致了服务注册到可使用完毕需要更多的延迟,这些延迟在什么地方呢?
1、目录 JetCache介绍 上帝视角:如何设计一个缓存组件? SpringCache VS JetCache JetCache基本使用 JetCache部分源码分析 2、JetCache介绍 3、如何设计一个缓存组件? 4、SpringCache VS JetCache 5、JetCache基本使用 5.1 JetCache配置信息 jetcache: statIntervalMinutes: 60 areaInCacheName #- redis://127.0.0.1:7001 #- redis://127.0.0.1:7002 5.2、JetCache使用示例 6、JetCache原理 CaffeineCache:基于Caffeine工具设计的内存缓存 RedisCache:Redis实现,使用Jedis客户端 RedisLettuceCache:Redis实现,使用Lettuce客户端
纯Java开源缓存框架,配置简单、结构清晰、功能强大,是一个非常轻量级的缓存实现,Hibernate里面就集成了相关缓存功能。
原理 前面介绍了HBase的一般架构,我们知道了HBase有ZK、Master和RS等组成,本节我们来介绍下HBase的基本原理,从数据访问、RS路由到RS内部缓存、数据存储和刷写再到region的合并和拆分等等功能 不管是HDFS还是Linux下常用的文件系统如Ext4、XFS等,对小而多的文件上的管理都没有大文件来的有效,比如小文件打开需要消耗更多的文件句柄;在大量小文件中进行指定rowkey数据的查询性能没有在少量大文件中查询来的快等等 HBase设计 HBase是一个分布式数据库,其性能的好坏主要取决于内部表的设计和资源的分配是否合理。 列簇设计 HBase的表设计时,根据不同需求有不同选择,需要做在线查询的数据表,尽量不要设计多个列簇,我们知道,不同的列簇在存储上是被分开的,多列簇设计会造成在数据查询的时候读取更多的文件,从而消耗更多的 推荐阅读: 1,大数据查询——HBase读写设计与实践 2,HBase的安装部署 3,浅谈数据分库分表之道 4,Spark源码系列之spark2.2的StructuredStreaming使用及源码介绍
索引是应用程序设计和开发的一个重要方面。若索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响,要找到一个平衡点,这对应用程序的性能至关重要。 二 索引的原理 一 索引原理 索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数。 具体一页有多大数据跟操作系统有关,一般为4k或8k,也就是我们读取一页内的数据时候,实际上才发生了一次IO,这个理论对于索引的数据结构设计非常有帮助。 #2、and的工作原理 条件: a = 10 and b = 'xxx' and c > 3 and d =4 索引: 制作联合索引(d,a,b,c) #3、or的工作原理 条件: a = 10 or b = 'xxx' or c > 3 or d =4 索引: 制作联合索引(d,a,b,c)
Docker: 镜像加速原理 docker镜像实际上是由一层一层的文件系统组成, 这种层级就是联合文件系统UnionFS, bootfs(boot file system) 主要包含bootloader 这就是镜像的分层 4. 为什么Docker镜像要采用分层结构呢?
可实时进行消息的处理计算 日志处理 Application 批量,异步发送日志/行为数据 流式处理 可以流式读取数据,支持Storm/Spark/Kafka Steaming 消息得生产实例&原理 (一) 生产者-发送/发布消息的一端 消息的生产&原理(二) 消息的生产&原理(三) 消息的消费实例&原理(一) 消息的消费实例&原理(二) 消费规则: 一个Partition只能被同一个ConsumerGroup partition数,可能会消费多个Partition 同一个partition保证是有序消费的 0.9之前consumer依赖zk,0.9之后直接链接kafka的Coordinator 消息的消费&原理 leader挂掉之后,通过选举选择follower中一个作为leader[去中心化] ZK中通过ISR维护着所有Follower,Follower通过Tcp与ZK保持心跳 副本因子 KAFKA逻辑架构设计
hash槽,也就是说当前Redis Cluster支持的最大节点数就是4096 Redis Cluster使用的分布式算法也很简单:crc16( key ) % HASH_SLOTS_NUMBER 整体设计可总结为
纯Java开源缓存框架,配置简单、结构清晰、功能强大,是一个非常轻量级的缓存实现,Hibernate里面就集成了相关缓存功能。
这篇推文学习创建型模式最后一种-原型模式,该模式的思想是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象,以便使用
引入了代理模式的Java程序执行流(AOP实现的机制) 4. Spring AOP的工作原理 1. 弄清楚这个问题,你不得不了解设计模式中的代理模式了。下面我们先来了解一下引入了代理模式的Java程序执行流是什么样子的。 3. 关于代理模式 代理模式属于Java代码中经常用到的、也是比较重要的设计模式。代理模式可以为某些对象除了实现本身的功能外,提供一些额外的功能,大致作用如下图所示: ? 4. Spring AOP的工作原理 前面已经介绍了AOP编程首先要选择它感兴趣的连接点----即切入点(Point cut),那么,AOP能对切入点做什么样的编程呢?
就是vue的双向绑定原理,你学会了吗? 别看文章一般 实则短小精悍 层层过滤筛选 这篇最为精简 我是 “ 我不是费圆 ”,一个正在努力的人。
LOG-END-OFFSET LAG CONSUMER-ID 0 5 5 0 consumer-1 1 5 5 0 consumer-1 2 5 5 0 consumer-1 3 5 5 0 consumer-2 4
就是vue的双向绑定原理,你学会了吗? 别看文章一般 实则短小精悍 层层过滤筛选 这篇最为精简
对配置文件和命令行参数进行转换最终生成配置选项参数options,最终会根据配置参数实例花webpack对象,然后交给webpack执行构建流程(complier) Tapable插件架构和Hooks设计 都生成一个新的chunk 2.遍历module的依赖列表,将依赖的module也加入到chunk 3.如果一个依赖module是动态引入的模块,那么就会根据这个module创建一个新的chunk,继续遍历依赖 4. 重复上面过程,直到得到所有的chunks 全剧终 经过一周的时间,重新对这几年使用webpack4的感悟进行整理,是时候和 webpack4 说再见了,希望以后不要再见了...