首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

格子拼贴 — 关于模块化的故事

应用可从配置应用受益匪浅,配置应用每个显示密度都被放在一个独立应用,允许设备定制安装,也大大减少下载体积。 Plaid 显示图形资源时,很大程度依赖于 vector drawables。...实现模块化 我们实现模块化所选的方法: 将所有代码资源块移动到核心模块。 识别可模块化功能。 将相关代码资源移动到功能模块。...Plaid 的 核心模块 开始重构,我们将所有代码资源都移动至一个 com.android.library 模块。进一步重构后,我们的核心模块仅包含各个功能模块间共享所需要代码资源。...但是通过在你的代码遵循一些约定,也未尝不可能。 通过 Plaid,文件在被用到的地方作为前缀。例如,资源仅用于以 dribbble_ 前缀的 :dribbble。...清单文件合并视图将所有功能模块清单文件合并到应用模块。合并失败将导致功能模块样式文件在指定时间对应用模块不可用。 为此,我们在核心模块样式文件每一样式如下创建一份声明: <!

9410
您找到你想要的搜索结果了吗?
是的
没有找到

Plaid 应用迁移到 AndroidX 的实践经历

获取更多应用信息重新设计的视觉效果,可以查阅 Restitching Plaid。...Restitching Plaid: 把 Plaid 更新到最新应用标准 大多数 Android 应用一样,Plaid 依赖 Android Support Library,该库可以为新 Android...一次性迁移整个应用也非常必要,因为部分迁移——同时使用 AndroidX Support 库将会导致迁移过程的失败。...这个方法有利于把流程拆解可控的步骤。我们留下了一些任务,诸如修复导入顺序、提取依赖变量、减少完整 classpath 的使用,以便后续的清理工作。...接下来,Palette API 在新版变得可以为,为了暂时避开(参考这次提交)这点,我们添加了!!(非断言操作符)。 然后我们遇到了一个 plusAssign 缺失的报错。

93230

Plaid 应用迁移到 AndroidX 的实践经历

获取更多应用信息重新设计的视觉效果,可以查阅 Restitching Plaid。...Restitching Plaid: 把 Plaid 更新到最新应用标准 大多数 Android 应用一样,Plaid 依赖 Android Support Library,该库可以为新 Android...这个方法有利于把流程拆解可控的步骤。我们留下了一些任务,诸如修复导入顺序、提取依赖变量、减少完整 classpath 的使用,以便后续的清理工作。...接下来,Palette API 在新版变得可以为,为了暂时避开(参考这次提交)这点,我们添加了!!(非断言操作符)。 然后我们遇到了一个 plusAssign 缺失的报错。...遇到的问题主要涉及依赖库或类的错误转换,以及新库的 API 变化。 幸运的是这些都相对容易解决。Plaid 现在已经准备好再被用起来了!

99350

格子拼贴 — 关于模块化的故事

应用可从配置应用受益匪浅,配置应用每个显示密度都被放在一个独立应用,允许设备定制安装,也大大减少下载体积。 Plaid 显示图形资源时,很大程度依赖于 vector drawables。...实现模块化 我们实现模块化所选的方法: 将所有代码资源块移动到核心模块。 识别可模块化功能。 将相关代码资源移动到功能模块。 ?...Plaid 的 核心模块 开始重构,我们将所有代码资源都移动至一个 com.android.library 模块。进一步重构后,我们的核心模块仅包含各个功能模块间共享所需要代码资源。...复制代码 清单文件合并视图将所有功能模块清单文件合并到应用模块。合并失败将导致功能模块样式文件在指定时间对应用模块不可用。 为此,我们在核心模块样式文件每一样式如下创建一份声明: <!...模块化需要一些时间,但鉴于上文所见好处,这是值得付出努力的,特别是考虑到动态交付。 去查看 Plaid’s source code 了解我们所有的变化快乐模块化过程!

79630

Redis--Redis集群、缓存穿透、缓存击穿、缓存雪崩

2.1.2 缓存穿透的解决方案对空值缓存 : 如果查询返回的数据(不管数据是否存在),我们仍然把这个结果(null)进行缓存,设置结果的过期时间会很短,最长不超过五分钟。...进行实时监控 : 当发现Redis的命中率开始急剧下降时,需要排查访问对象访问的数据,运维人员配合,可以设置黑名单限制服务。...实时调整 : 现场监控哪些数据热门,实时调整key过期时长。使用锁 :就是在缓存失效的时候(判断拿出来的值),不是立即去 load db。...将缓存失效时间分散开:比如我们可以在原有的失效时间基础上增加一个随机值,比如:1~5分钟随机,这样每一个缓存的过期时间重复率会降低,就很难引发集体失效的事件。...也就是每个key的失效事件设置不一样的,在不同的时间更新ley,而不是在某个时间点更新所有的key。Redis核心:单线程 + IO多路复用技术

1.8K10

特斯拉最快车型Model S Plaid交付

当地时间周四,特斯拉在加州弗里蒙特工厂举行了Model S Plaid交付活动。 活动一开场,Model S设计师Franz von Holzhausen抡着大锤就上场了。...Model S Plaid拥有1020马力,每次充电的续航里程约为400英里,最高时速200英里/小时(配有合适的轮胎)。 此外,零百加速2.1秒,四分之一英里加速9.23秒。...Model S Plaid还采用了更简约的内饰设计,使用了17英寸控屏+12.3英寸的液晶仪表,与Model YModel 3风景触摸屏相似。...中控台后座乘客提供了额外的屏幕。至于司机,特斯拉在方向盘后面其安装了「驾驶舱」屏幕。 ‍...比保时捷快,比沃尔沃安全 在交付活动,马斯克透露: 虽然新车尚未获得美国政府的安全评级,但特斯拉的内部测试使该公司相信,Model S Plaid可以实现自2011年以来任何车辆测试的最低受伤率

30030

面试官:熟悉Redis?请讲讲Redis缓存穿透、缓存击穿、缓存雪崩有什么区别

Redis查询不到数据,导致大面积的缓存未命中 出现非正常的URL访问请求(网站受到恶意攻击) 解决方案 对空值缓存:如果一个查询返回的数据(不管是数据是否不存在),我们仍然把这个结果(null...)进行缓存,设置结果的过期时间会很短,最长不超过五分钟 设置可访问的名单(白名单):使用bitmaps类型定义一个可以访问的名单,名单id作为bitmaps的偏移量,每次访问bitmap里面的id进行比较...它的优点是空间效率查询时间都远远超过一般的算法,缺点是有一定的误识别率删除困难。)...进行实时监控:当发现Redis的命中率开始急速降低,需要排查访问对象访问的数据,运维人员配合,可以设置黑名单限制服务。...实时调整:现场监控哪些数据热门,实时调整key的过期时长。 使用锁: (1) 就是在缓存失效的时候(判断拿出来的值),不是立即去load db。

45850

提示 依赖注入在多模块工程的应用

一款拼接应用 Plaid — 整体到模块化: 模块化 Plaid 应用的初衷、过程结果 让我以鸟瞰图的形式快速回顾一下 Plaid 的样子。...在我们开始模块化操作和以 Dagger 为主介绍依赖注入之前,先来熟悉下 Plaid 的相关类函数: class DesignerNewsInjector { fun providesApi...我们依赖注入需求选择了 Dagger 意味着我们的依赖图在编译阶段会被创建。下面的章节要记住这一点。...依赖图解 当一个单块应用引入依赖注入库时,通常整个应用有个单一的依赖图。 ? 这可以使组件间共享依赖。在一些库,依赖可以被设置作用域来避免冲突,或者被注入对象提供一种特殊的实现。...引入的功能模块边界通过分离的依赖图反映在依赖注入。意识到这个限制可有助于共享组件找到合适的位置。 你可以深入到代码来查看我们如何使用 Dagger 解决 Plaid 的依赖注入问题。

1.7K10

依赖注入在多模块工程的应用

一款拼接应用 Plaid — 整体到模块化: 模块化 Plaid 应用的初衷、过程结果 让我以鸟瞰图的形式快速回顾一下 Plaid 的样子。...在我们开始模块化操作和以 Dagger 为主介绍依赖注入之前,先来熟悉下 Plaid 的相关类函数: class DesignerNewsInjector { fun providesApi...我们依赖注入需求选择了 Dagger 意味着我们的依赖图在编译阶段会被创建。下面的章节要记住这一点。...依赖图解 当一个单块应用引入依赖注入库时,通常整个应用有个单一的依赖图。 这可以使组件间共享依赖。在一些库,依赖可以被设置作用域来避免冲突,或者被注入对象提供一种特殊的实现。...引入的功能模块边界通过分离的依赖图反映在依赖注入。意识到这个限制可有助于共享组件找到合适的位置。 你可以深入到代码来查看我们如何使用 Dagger 解决 Plaid 的依赖注入问题。

1.7K10

提示 Plaid 应用迁移到 AndroidX 的实践经历

获取更多应用信息重新设计的视觉效果,可以查阅 Restitching Plaid。...Restitching Plaid: 把 Plaid 更新到最新应用标准 大多数 Android 应用一样,Plaid 依赖 Android Support Library,该库可以为新 Android...这个方法有利于把流程拆解可控的步骤。我们留下了一些任务,诸如修复导入顺序、提取依赖变量、减少完整 classpath 的使用,以便后续的清理工作。...接下来,Palette API 在新版变得可以为,为了暂时避开(参考这次提交)这点,我们添加了!!(非断言操作符)。 然后我们遇到了一个 plusAssign 缺失的报错。...遇到的问题主要涉及依赖库或类的错误转换,以及新库的 API 变化。 幸运的是这些都相对容易解决。Plaid 现在已经准备好再被用起来了!

98110

Redis有效时间设置及时间过期处理

Redis中有三种处理策略:定时删除、惰性删除定期删除。 定时删除:在设置键的过期时间的时候创建一个定时器,当过期时间到的时候立马执行删除操作。...惰性删除:惰性删除策略不会在键过期的时候立马删除,而是当外部指令获取这个键的时候才会主动删除。处理过程:接收get执行、判断是否过期(这里按过期判断)、执行删除操作、返回nil()。...三、主从服务器删除过期键处理 参考书上说的有三种:RDB持久化、AOF持久化复制功能。 RDB: 1....主服务器模式运行在载入RDB文件时,程序会检查文件的键,只会加载未过期的,过期的会被忽略,所以RDB模式下过期键不会对主服务器产生影响。 2....从服务器运行载入RDB文件时,会载入所有键,包括过期过期。当主服务器进行数据同步的时候,从服务器的数据会被清空,所以RDB文件的过期键一般不会对从服务器产生影响。

3.8K20

redis过期时间实现原理_redis过期时间实现原理

Redis中有三种处理策略:定时删除、惰性删除定期删除。 定时删除:在设置键的过期时间的时候创建一个定时器,当过期时间到的时候立马执行删除操作。...惰性删除:惰性删除策略不会在键过期的时候立马删除,而是当外部指令获取这个键的时候才会主动删除。处理过程:接收get执行、判断是否过期(这里按过期判断)、执行删除操作、返回nil()。...使用定期删除的时候一定要把握好这个删除的时间点。 三、主从服务器删除过期键处理 有三种:RDB持久化、AOF持久化复制功能。 RDB: 1....主服务器模式运行在载入RDB文件时,程序会检查文件的键,只会加载未过期的,过期的会被忽略,所以RDB模式下过期键不会对主服务器产生影响。 2....从服务器运行载入RDB文件时,会载入所有键,包括过期过期。当主服务器进行数据同步的时候,从服务器的数据会被清空,所以RDB文件的过期键一般不会对从服务器产生影响。

1.5K20

面试58同城!面试官问我redis 雪崩、穿透、击穿怎么处理?

1.2 缓存雪崩发生的原因 缓存雪崩通常是由以下原因引起的: 缓存过期时间设置不合理:如果缓存的数据在同一时间过期,那么大量请求就会直接访问数据库。...缓存服务器宕机:当缓存服务器宕机时,无法提供缓存服务,请求会直接落到数据库上。...1.3 处理缓存雪崩的解决方案 为了应对缓存雪崩问题,可以采取以下解决方案: 设置合理的缓存过期时间:合理设置缓存的过期时间,避免大量缓存在同一时间点失效。...实时监控缓存状态:通过监控工具实时监测缓存的状态,及时发现问题并进行处理。 增加服务端熔断或者限流。...缓存对象:当数据库不存在某个数据时,将对象缓存起来,避免重复请求数据库。

41510

什么是Redis缓存穿透、缓存雪崩和缓存预热

缓存对象  如果一个查询返回的数据(无论是数据不存在,还是系统故障),我们仍然把这个结果进行缓存,但它的过期时间会很短,最长不超过五分钟。     ...第一,值做了缓存,意味着缓存层存了更多的键,需要更多的内存空间 ( 如果是攻击,问题更严重 ),比较有效的方法是针对这类数据设置一个较短的过期时间(最长不超过五分钟),让其自动剔除。     ...第二,缓存层存储层的数据会有一段时间窗口的不一致,可能会对业务有一定影响。...例如过期时间设置 5分钟,如果此时存储层添加了这个数据,那此段时间就会出现缓存层存储层数据的不一致,此时可以利用消息系统或者其他方式清除掉缓存层对象。...四、缓存热备   缓存热备即当一台缓存服务器不可用时能实时切换到备用缓存服务器,不影响缓存使用。集群模式下,每个主节点都会有一个或多个从节点来当备用,一旦主节点挂点,从节点立即充当主节点使用。

87320

Redis相关面试问题

Redis 持久化、搭建集群、数据备份恢复、合理的设置过期时间 5、Redis的持久化方式有哪些、谈谈它们的区别?...volatile-ttl:从已设置过期时间的数据集(即带有 TTL 的 key)挑选即将过期的数据淘汰。...volatile-random:从已设置过期时间的数据集(即带有 TTL 的 key)随机选择数据淘汰。...办法设置热点数据永不过期:将一些热点数据设置永不过期,这样即使缓存失效,也不会导致请求直接穿透缓存,而是会在缓存重新加载数据。...缓存雪崩问题可以通过以下几种方式来解决:缓存数据过期时间随机化:将缓存数据的过期时间随机化,避免同时失效,分散缓存的更新时间,减少缓存失效的风险。

40050

Redis 缓存问题

它实际上是一个很长的二进制向量(位图)一系列随机映射函数(哈希函 数)。 布隆过滤器可以用于检索一个元素是否在一个集合。...缓存值 如果一个查询返回的数据(不管是数据是否不存在),我们仍然把这个结果(null)进行缓存,用于处理后续这个请求,设置结果的过期时间会很短,最长不超过五分钟。...解决这个缺陷的方式就是设置较短过期时间 即使对空值设置了过期时间,还是会存在缓存层存储层的数据会有一段时间窗口的不一致,这对于需要保持一致性的业务会有影响。...进行实时监控 当发现 Redis 的命中率开始急速降低,需要排查访问对象访问的数据,运维人员配合,可以设置黑名单限制服务。...其实集中过期,倒不是非常致命,比较致命的缓存雪崩,是缓存服务器某个节点宕机或断网。因为自然 形成的缓存雪崩,一定是在某个时间段集中创建缓存,这个时候,数据库也是可以顶住压力的。

1.2K30

高并发之缓存

清空策略:FIFO/LFU/LRU/过期时间/随机 FIFO:最先进入缓存的数据,在缓存空间不足时被清除,为了保证最新数据可用,保证实时性 LFU(Least Frequently Used):最近最不常用...业务需求也决定了实时性的要求,直接影响到过期时间更新策略,实时性要求越低越适合缓存。 2.缓存的设计(策略粒度) 通常情况下缓存的粒度越小,命中率越高。...适用场景: 1.取最新N个数据的操作 2.排行榜类似的应用 3.精准设定过期时间的应用 4.计数器的应用 5.唯一性检查 6.实时系统,队列系统,最基础的缓存功能 ?...1缓存一致性问题 当数据时效性要求很高时,需要保证缓存的数据与数据库的保持一致,而且需要保证缓存节点副本的数据也保持一致,不能出现差异现象。这就比较依赖缓存的过期更新策略。...可以通过下面的几种常用方式来避免缓存传统问题: 缓存对象 对查询结果的对象也进行缓存,如果是集合,可以缓存一个的集合(非null),如果是缓存单个对象,可以通过字段标识来区分。

98720

Redis 缓存穿透 + 缓存雪崩 + 缓存击穿的原因和解决方案「建议收藏」

目录 一、缓存穿透 解决方案: 二、缓存雪崩 解决方案: 三、缓存击穿 解决方案: ---- 在生产环境,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响...,意味着缓存层存了更多的键,需要更多的内存空间,比较有效的方法是针对这类数据设置一个较短的过期时间,让其自动剔除。...例如过期时间设置5分钟,如果此时存储层添加了这个数据,那此段时间就会出现缓存层存储层数据的不一致,此时可以利用消息系统或者其他方式清除掉缓存层对象 2....这种方法适用于数据命中不高、数据相对固定、实时性低的应用场景,代码维护较为复杂,但是缓存空间占用少。 布隆过滤器实际上是一个很长的二进制向量一系列随机映射函数。...布隆过滤器可以用于检索一个元素是否在一个集合。它的优点是空间效率查询时间都远远超过一般的算法,缺点是有一定的误识别率删除困难。

47310

特斯拉一次把电池容量翻了5倍,新车2秒破百,续航超800公里,公司股价却跌了

北京时间 9 月 23 日凌晨 4 点半,数百辆汽车停在特斯拉的加州弗利蒙特工厂,等着看一场「露天发布会」。 ? 这是特斯拉股东大会暨电池日活动的现场。...马斯克表示,特斯拉还计划在德国格伦海德市(Grünheide)的工厂生产电池,该工厂目前正在建设。...在今年 5 月份披露的无极耳电池新专利申请,特斯拉解释了当前有极耳电池的局限性:「当前的电池使用果冻卷式设计(即将多层材料平面层压成薄片之后再卷起来,然后塞进一个圆柱形的微型容器里),将阴极、阳极隔板卷在一起...此外,特斯拉表示,新款 Model S Plaid 在任何量产车型中表现出最快的零百加速四分之一英里加速,其中零百加速时间少于 2 秒,四分之一英里加速少于 9 秒。 ?...目前,Model S Plaid 可以选择五种车身颜色,分别是珍珠白、纯黑、金属银、深蓝红色。轮胎型号则有 19 寸 Tempest 轮胎 21 寸 Sonic Carbon 双涡轮轮胎可选。

38930
领券