后端

业务拆分原则介绍

1. 常见的做法 常见的错误做法: 服务拆分粒度越小越好 按照大公司的套路拆分 以代码量为拆分标准 拆分核心三原则: 2. 服务粒度匹配团队规模 服务粒度过细的问题,可以先看下面的两个图 可以看到,服务粒度过多时,虽然单个服务的内容可以减少,但是服务间调用关系的复杂度程指数级的增长,这同样也是很可怕的一件事 如果项目的人员不多,那么划分过多的服务

第一章 理解高性能程序 (9) 保持缓存的热度

保持缓存的热度        首先,别浪费缓存,因为主存很慢。这意味着无序地从内存中读取数据(被称为指针追逐pointer-chasing)并非明智。在现代处理器上,程序以预测的方式读取连续的内存块,可以受益于硬件级的预读取(prefetching)机制。一言以蔽之,即数据局部化(data locality)。        举个反面例子,唉,是我们古老而可靠的链表,遍历链表是一次实实在在的指

JNI库文件加载源码解析

下面我们结合源码详细探讨下JNI调用的库文件是如何加载的,为啥HelloWorld.so必须被命名成libHelloWorld.so,JNI_OnLoad方法是在什么时候回调的,返回的版本号有啥用?先看下总体的流程图 Java源码解析 System.loadLibrary和System.load方法 System.loadLibrary(String)方法用来加载动态链接库的,String参数是指

ArrayList 可以完全替代数组吗?

前言 大家好,我是小彭。 在前面的文章里,我们学习了很多数据结构与算法思想。在实际的业务开发中,往往不需要我们手写数据结构,而是直接使用标准库的数据结构 / 容器类。 在后续的文章里,我们将以 Java 语言为例,分析从 ArrayList 到 LinkedHashMap 等一系列标准库容器类,最后再有一篇总结回顾,请关注。 学习路线图: 1. 说一下 ArrayL

发脾气

取快递,这是我第一次感到如此麻烦,有取货码不行,报电话说不是我的电话,报收货人说不是这个收货人,我要把包裹拿来,还不让我看包裹,当时我就急了,把手机甩到她眼前,让她看看是不是我的取货码,她直接说我把手机触到她脸上,直接发起脾气,不弄这个快递了,我看了下快递后,反倒乐了,因为我一看,这就是隐私保护的手机和收货人,上面还有具体的步骤,怎么打电话,只是这人的业务能力实在低下,我就看她如何表演,最后是另外

Lottie动画文件压缩

前言 项目中引入了“大量的”lottile动画文件以优化动画显示效果,稍微统计了下,共20多个,小的几十k,大的1.33M,总大小超过8M,apk包体积急速膨胀。 使用的lottie文件统计.png 解决方案 由于项目中显示动画的需要,引入了大量的Lottie动图,以优化显示效果导致包体积急速膨胀,目前可以想到的解决方案主要有如下2种: 方案1)远端方案 将lottie json文件放

架构设计——软件产品规划设计绕不过的坎

任何在 IT 公司工作的人,对于“架构”这个词应该都不陌生。但你去问“架构”这个词是什么意思,似乎又有点只可意会不可言传的意思。那么 “架构”这个词,它应该如何定义呢? 架构设计对于软件系统和软件开发而言起到的作用是什么呢? 软件系统或软件产品的架构应该用什么样的方式表达呢? 这篇文章,会尝试讨论一下上面这些问题。 如何定义架构设计? 我们先来看一个古老的的思想实验: 忒休斯之船(The S

Collection集合接口的介绍和使用

一.关于Collection接口的继承关系图 Collection接口有两个重要的子接口:List,Set。 List接口的三个重要的实现类:LinkedList,ArrayList,Vector Set接口两个重要的实现类:HashSet,TreeSet image.png 二.Collection接口的实现类的特点 1.Collection实现类,可以存放多个元素,每个元素可以是

MySQL性能调优(三):MySQL中的系统库(mysql系统库)

文章目录 MySQL性能调优 数据库设计优化 查询优化 配置参数调整 硬件优化 MySQL中的系统库 1.5.Mysql中mysql系统库 1.5.1.权限系统表 1.5.2.统计信息表 1.5.2.1.innodb_table_stats 1.5.2.2.innodb_index_stats 1.5.3.日志记录表 1.5.3.1. gen