自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(203)
  • 收藏
  • 关注

原创 Redis实战指南

读缓存最佳实践:先读缓存,如果命中则返回;如果未命中则查询数据库,再写入redis中。先把数据写入数据库,在操作redis缓存。直接删除redis缓存,而不是修改,因为redis缓存的更新成本很高,需要访问多张表联合计算。另外,删除redis缓存操作简单,副作用只是增加了一次chache miss,建议大家使用改策略在以上最佳实践中,为了尽可能保证缓存与数据库的一致性,可以采用延迟双删策略。

2025-04-07 18:22:57 572

原创 Redis高级技能进阶

淘汰的目标数据可以分为数据库中有key-value的数据和数据库中配置了过期事件的key-value数据两种。针对这两种目标数据,一共有8种淘汰策略。noeviction:默认策略,不淘汰任何数据。allkeys-lru:使用近似LRU算法淘汰长时间没有使用的key。allkeys-lfu:使用近似LFU算法,保留常用的键,淘汰数据库中最不常用的键。volatile-lru:使用近似LRU算法淘汰配置了过期时间,最近最少使用的key。

2025-04-05 00:08:38 1022

原创 Redis常用的数据结构及其使用场景

消息队列是一种异步的服务间通信方式,适用于分布式和微服务架构。消息在被处理和删除之前一直存储在队列上。它基于先进先出的原则,允许生产者向队列中发送消息,而消费者则可以从队列中获取消息并进行处理。消息队列通常被用于解耦应用程序的各个组件,实现异步通信、削峰填谷、解耦合、流量控制等功能。

2025-03-30 21:20:26 880 1

原创 Redis的高可用

redis对数据读/写操作的速度快到令人发指,因此很多人把redis当作缓存系统来使用,用于提高系统的读取性能。然而,“快”是需要付出代价的:内存无法持久化,一旦断电或宕机,保存在内存中的数据会全部丢失。在这种情况下,没有了redis的支持,大量流量被发到mysql种可能带来更大的问题。因此,如果redis重启时从mysql数据库里面获取数据加载到内存中,当数据量巨大时,可能会给mysql数据库造成更大的压力。考虑到这种情况,redis本身可以实现数据持久化,做到宕机快速恢复——RDB快照和AOF。

2025-03-10 23:26:00 712 1

原创 MongoDB分片集群

chunk的意思是数据块,一个chunk代表了集合中的“一段数据”,例如,用户集合在切分成多个chunk之后如下图所示:chunk所描述的是范围区间,例如,db.users使用了userId作为分片键,那么chunk就是userId的各个值(或哈希值)的连续区间。chunk的切分方式,决定如何找到数据所在的chunk。chunk的分布状态,决定如何找到chunk所在的分片。

2025-03-03 11:32:51 1206

原创 MongoDB安全管理

使用createRole命令可以创建自定义角色,每一个角色都需要绑定到指定的库中。普通的业务库中的角色对象只允许访问当前库的资源对象,而位于admin库的角色则没有此限制。use admin],roles:[},orderdb、goodsdb、userdb数据库的read角色的权限。tracedb数据库中etlLogs集合的读写权限。use somedb。

2025-03-01 21:53:23 814

原创 mongodb的并发优化

MongoDB的锁设计MongoDB的高性能表现离不开它的多粒度锁机制。多粒度主要可以针对不同层级的数据库对象进行枷锁,通过避免全局性的互斥来提升并发能力。从整个数据库层面看,MongoDB的并发锁的分层如下图所示:从上往下是一个逐步细分的关系,分别为Global(全局)、Database(数据库)、Collection(集合)、Document(文档)。需要说明的是,mongodb只定义了前三种级别的锁,对于文档级的由WiredTiger引擎实现的,其内部使用了MVCC乐观锁的方式来实现并发控制。

2025-02-23 22:26:05 1002

原创 MongoDB应用设计调优

数据库范式概念是数据库技术的基本理论,几乎是伴随着数据库软件产品的推出而产生的。在传统关系型数据库领域,应用开发中遵循范式是最基本的要求。但随着互联网行业的发展,NoSQL开始变得非常流行,在许多的应用实践中也涌现出一些反范式的做法。(1)第一范式:数据库表的每一列都是不可分割的原子项。如下表,所在地一列就是不符合第一范式的,其中对于“广东省、深圳市”这样的字符串,实际上应该拆分为省份、城市两个字段。第1范式要求将列尽可能分割成最小的粒度,希望消除利用某个列存储多值的行为,而且每个列都可以独立进行查询。

2025-02-22 20:14:25 1190 1

原创 MongoDB副本集

mongodb的副本集选举、复制机制是基于Raft协议的。Raft协议的选举机制中leader必须通过大多数节点投票才能产生。我们假设副本集的投票成员数量为N,则大多数为N/2+1。当副本集内存活的成员数量不足大多数时,整个副本集将无法选举除主节点,此时无法提供写服务,这些节点都将处于只读状态。此外,如果希望避免平票结果的产生,最好使用奇数个节点成员,比如3个或5个。为选举定时器增加少量的随机时间偏差,这样避免各个节点 在同一时刻发起选举,提高成功率。

2025-02-16 10:12:31 849

原创 MongoDB索引介绍

索引是什么索引在数据库技术体系中占据了非常重要的位置,其主要表现为一种目录式的数据结构,用来实现快速的数据查询。通常在实现上,索引是对数据库表(集合)中的某些字段进行抽取、排列之后,形成的一种非常易于遍历读取的数据集合。目前绝大多数的数据库对于索引技术都有非常强大且稳定的支持。索引的作用非常类似于一本书的目录。索引的分类。

2025-02-15 00:12:18 827

原创 MongoDB基础入门

MongoDB是NoSQL数据库中的佼佼者,目前是排名第一的文档型数据库。该数据库基于灵活的JSON文档模型,非常适合敏捷式的快速开发。与此同时,其与生俱来的高可用、高水平扩展能力使得它在处理海量、高并发的数据应用时颇具优势。在我们的系统中,通常会用分层来描述现实中的模型,如图所示:从下往上看,每一层都提供了更简单、更容易表述的模型来隐藏下层的复杂性。最为典型的是,数据库系统屏蔽了所有磁盘中文件如何存取、压缩/解压等细节,向应用程序展示了一些通用的数据模型,如SQL表、列、或是基于JSON、XML的文档模

2025-02-10 01:38:21 867

原创 前端UI组件库的打包与发布

UI组件库的打包是指“将开发完成的业务代码处理成可在生产环境中运行,并供用户在浏览器上使用”的过程。浏览器可以视为用户使用的生产环境,除浏览器外,常见的生产环境还有Node.js。Node.js通常是现代前端开发过程所运行的环境,例如我们常在Node.js环境下使用Vue和React,相当于Node.js是它们的生产环境。Node.js在13.2.0版本之前仅支持CommonJS模块,在13.2.0版本之后才开始支持ESM模块。

2025-01-26 14:11:27 897

原创 网络代理基础知识

代理指在客户端和服务器之间路由流量的服务·,用于实现系统安全、负载均衡等功能。尤其在爬虫项目中,代理服务器常常扮演着重要的角色,它能帮助我们突破服务器带来的限制和封锁,从而正常抓取数据。代理是客户端和服务器的中间层,按照不同的维度可以分为不同的类型。一种常见的划分方式是将代理分为正向代理(Forward Proxy)和反向代理(Reverse Proxy)。根据实现代理的方式可以分为http隧道代理、MTM代理和透明代理。

2024-07-24 08:33:52 1805

原创 Go协程的运行机制以及并发模型

在下面这个例子中,atomic.CompareAndSwapInt64会判断flag变量的值是否为0,如果是0,则将flag的值设置为1.这一系列操作都是原子性的,不会发生数据争用,也不会出现内存操作乱序问题。因此准确的说,Go语言中的协程是从属某一个线程的,只有协程和实际线程绑定,才有执行的机会。由于在同一时间内只能有一个协程获取互斥锁并执行操作,因此在多读少写的情况下,如果长时间没有写操作,读取到的会是完全相同的值,使用互斥锁就显得没有必要了,这时使用读写锁更加恰当。

2024-07-23 12:04:30 1214 1

原创 Docker+k8s上云以及CI/CD

镜像构建完成后,需要将镜像推送到相关私有的镜像仓库,建议在构建时根据代码分支来写入相应的标签前缀,这样就可以根据标签前缀来选择对应环境执行自动部署了,比如开发环境、测试环境和生产环境的自动部署,这样只要控制好分支权限即可。这一步,需要使用“docker login”命令来登录私有仓库,使用“docker push”命令来推送镜像。而且如果节点实在不同的云服务商上也是不能访问的,例如:master节点在腾讯云服务器上,而node节点在阿里云服务器上,那么master节点无法访问阿里云服务器上节点ip。

2024-05-20 00:24:16 1425 2

原创 React基础知识大汇总

如果在多个组件中使用了相同的useEffect或useState逻辑,推荐将这些相同的逻辑封装到函数中,这些函数被称为自定义的Hooks。下面举例3个自定义的Hooks的示例。useForceUpdate:返回一个让组件重新渲染的函数。// 调用 forceUpdate 函数来强制组件重新渲染usePrevVal:获取状态的上一次的值,它利用了Ref的可变性,以及effect在DOM被绘制到屏幕上才执行的特性。

2024-04-21 01:56:05 1193

原创 Android全新UI框架之Compose状态管理与重组

Compose采取了声明式UI的开发范式。在这种范式中,UI的职责仅作为数据状态的反应。如果数据状态没有变化,则UI永远不会自行改变。如果把Composable的执行看作是一个函数运算,那么状态就是函数的参数,生成的布局就是函数的输出。

2024-02-24 16:14:35 2146 2

原创 Android全新UI框架之Compose组件渲染流程

在传统View体系中,组件渲染分为三步:测量、布局和绘制。Compose也遵循这样的分层设计,将组件渲染流程划分为组合、布局与绘制三个阶段。对于一般的组件都是正常经历组合->布局->绘制三个阶段来生成帧画面的,当然也存在特例,LazyColumn、LazyRow、等组件的子项合成可以延迟到这类组件的布局阶段进行,这是由于这类组件的子项组合需要依赖这类组件在布局阶段所能提供的一些信息。

2024-02-23 11:05:58 1735

原创 Android全新UI框架之常用ComposeUI组件

在Compose中,每个组件都是一个带有@Composable注解的函数,被称为Composable。Compose已经预置了很多基于MD设计规范的Composable组件。在布局方面,Compose提供了Column、Row、Box三种布局组件(感觉跟flutter差不多),类似于传统视图开发中的LinearLayout(Vertical)、LinearLayout(Horizontal)、RelateiveLayout,可以满足各类产品的常见布局需求。

2024-02-21 18:49:55 3275

原创 Android全新UI框架之Jetpack Compose入门基础

以往,我们开发Android原生页面的时候,通常是在xml中画相关的UI控件,然后在activity中通过findViewById拿到相关的控件对象,接着根据业务需求调用该控件对象的相关API方法。在传统视图体系中由View与ViewGroup构成视图树,而Compose中也有同样一颗视图树,它由LayoutNode构成,由Composition负责管理。由于Compose在编程范式上与传统视图体系有着根本的不同,在开始深入学习Compose之前,有必要对Compose API的设计原则做一个介绍。

2024-02-20 18:04:45 1651

原创 前端性能优化之渲染优化

为了使每一帧页面渲染的开销都能在期望的时间范围内完成。就需要开发者了解渲染过程的每个阶段,以及各阶段中有哪些优化空间是我们力所能及的。经过分析根据开发者对优化渲染过程的控制力度,可以大体将其划分为5各部分:js处理、计算样式、页面布局、绘制与合成。这个过程中的每一个阶段都有可能产生卡顿。注意:并非对于每一帧画面都会经历这5个部分,比如仅修改与绘制相关的属性(文字颜色,背景图片或边缘阴影等),而未对页面布局产生任何修改,那么在计算样式阶段完成后,便会跳过页面布局直接执行绘制。

2024-01-10 22:22:33 1346

原创 前端性能优化之数据存取,存储以及缓存技术

无论是哪种计算机语言,说到底它们都是对数据的存取与处理。若能在处理数据前,更快地读取数据,那么必然会对程序执行性能产生积极的作用。一般而言,js的数据存取有4种方式。其中数组元素和对象属性不仅可以是直接字面量的形式,还可以是由其他数组对象或对象属性组成的更为复杂的数据结构。从读取速度来看,直接字面量与变量是非常快的,相比之下数组元素和对象属性由于需要索引,其读取速度也会因组成结构的复杂度越高而变得越慢。如今浏览器对内部js引擎不断迭代优化,在一般的数据规模下,其快慢的差别已经微乎其微。

2024-01-10 06:38:33 1654

原创 前端性能优化之图像优化

图像优化问题主要可以分为两方面:图像的选取和使用,图像的加载和显示。

2024-01-07 22:46:00 1181

原创 前端页面的生命周期

传输层常见的协议有tcp协议和udp协议,由于我们重点是前端页面的资源请求,这需要面向连接,丢包重发以及✓数据传输的各种控制,所以我们详细介绍下“三次握手”和“四次挥手”。“三次握手”具体过程分为如下步骤:客户端生成一个随机数seq,假设其值为t,兵将标志位SYN设为1,将这些数据打包后发给服务端后,客户端进入等待服务端确认的状态。

2024-01-05 21:55:39 1241

原创 前端性能优化简述

大部分网站体现的价值都无外乎信息的载体、交互的工具或商品流通的渠道,这就要求它们需要与更多的用户建立关系,同时还要保持所建立的联系拥有绵延不绝的用户粘性,所以网站就不能只关注自我表达,而不顾及用户是否喜欢。用户的留存我们都希望用户访问网站所进行的交互,对网站构建的内容来说是有意义的,比如,电商网站希望用户浏览并购买商品,社交网站希望用户之间进行互动,视频网站希望用户观看视频,而这些希望都是建立在网站用户留存的基础上的。。

2024-01-04 18:45:52 466

原创 Vue.js 3.0的变化

keep-alive组件如果使用KeppAlive缓存组件,无论如何加载组件,都会触发。

2023-12-04 07:39:23 291

原创 Android系统新特性——功耗的改进

移动设备的续航时间无疑是所有用户都非常在意的。我们都希望自己的手机一次充电可以使用更长的时间。但遗憾的是,近几年移动设备的电池元件一直没有重大的技术突破。并且,随着硬件性能的提升却带来了更多的电量消耗。如果对比近几年的Android和ios手机,我们会发现:通常情况下,Android手机的电池要比同时期的ios电池容量大很多,但是待机方面却没有太大的优势。ios之所以续航优秀,其很大的原因在于对于后台进程的限制。在ios上,后台进程是无法长时间处于活跃状态的。

2023-11-26 18:06:10 515

原创 android系统新特性——用户界面以及系统界面改进

一类是系统的内置应用,这些应用提供了手机的基本功能。包括launcher、系统设置、电话、相机等。它们位于/packages/apps/目录下。理论上,这些应用都是可以被第三方应用所替代的,例如:我们完全可以安装一个第三方的电话、相机,而不使用系统的,这也是Android系统最为灵活的地方(注意:系统设置通常无法被第三方应用替代,因为它使用了一些拥有非常高权限的内部api。为了保证系统安装,这些api很多不会对外开放)。

2023-11-26 00:03:31 793

原创 AndroidNDK开发之交叉编译

在Android studio2.2以及以上,构建原生库的默认工具是。CMake是一个跨平台的构建工具,可以使用简单的语句来描述所有平台的安装(编译过程)。能够输出各种各样的makefile或者project文件。cmake并不直接构建出最终的软件,而是产生其他工具的脚本(如makefile)。然后再根据这个工具的构建方式使用。cmake是一个比make更高级的编译配置工具,可以根据不同的平台、不同的编译器生成相对应的makefile或vcproject项目,从而达到跨平台的目的。

2023-11-23 18:22:37 1027

原创 Linux常用命令指南以及shell脚本编程

shell脚本里面的sh和bash有什么区别:linux中sh是链接到bash上的,所以sh与bash在功能上是没有去别的,相当于bash解析器是sh的增强版本。创建sh文件编写sh脚本文件——使用vim 命令进行编写bin / bash#我是注释执行sh文件输出结果:hello world执行sh文件时传入参数bin/bash#我是注释echo 当前shell脚本的名称:$0echo 参数1: $1echo 参数2: $2echo 本次执行结果状态如下:if (($?));

2023-11-23 17:57:41 134

原创 Vue入门——核心知识点

Vue是一套用于构建用户界面的渐进式JS框架。构建用户界面:就是将后端返回来的数据以不同的形式(例如:列表、按钮等)显示在界面上。渐进式:就是可以按需加载各种库。简单的应用只需要一个核心库即可,复杂的应用可以按照需求引入各种Vue插件。在 Vue 中,除了内置指令 (v-model, v-show, v-else 等) 外,也可以自定义指令。自定义指令的语法和使用方式如下:1.全局自定义指令// 这里写你的代码,比如操作 DOM},

2023-11-01 23:46:17 246

原创 iOS的应用生命周期以及应用界面

我们主要的编码工作就是在AppDelegate和ViewControlle这两个类中进行的。它们的类图如下图所示:AppDelegate是应用程序委托对象,它继承了UIResponder类,并实现了UIApplicationDelegate委托协议。

2023-10-28 00:31:22 1250

原创 kubernetes集群

k8s集群中对资源管理和资源对象编排部署都可以通过声明样式(yaml)文件来解决,也就是可以把需要对资源对象操作编辑到yaml格式文件中,我们把文件叫做资源清单文件,通过kubectl命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。

2023-09-15 13:50:38 229

原创 Flutter与Native通信原理剖析与实践

这三种类型的Channel都是全双工通信,即AB,Flutter可以主动发送消息给Native端,并且Native接收到消息后可以做出回应,同样,Native端可以主动发送消息给Flutter端,Flutter端接收到数据后返回给Native。在讲解Flutter与Native之间是如何传递数据之前,我们先了解下Flutter与Native的通信机制,Flutter和Native的通信是通过Channel来完成的。我们分几种场景来介绍Flutter和Native之间的通信。

2023-09-14 04:41:34 1115

原创 Flutter框架和原理剖析

Flutter是Google推出并开源的跨平台开发框架,。开发者可以通过Dart语言开发Flutter应用,一套代码同时运行在ios和Android平台。不仅如此,flutter还支持web、桌面、嵌入应用的开发。flutter提供了丰富的组件、接口,开发者可以很快地为flutter添加native扩展。。

2023-09-13 14:04:06 930

原创 Dockerfile解析

Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时会真正开始提供服务;

2023-09-12 06:59:29 618

原创 什么是Docker和Docker-Compose?

compose是docker公司推出的一个工具软件,可以管理多个Docker容器组成一个应用。Docker Server:Docker daemon的主要组成部分,接受用户通过Docker Client发出的请求,并按照相应的路由规则实现路由分发。而且,如果使用了GoLand编译器安装了Docker插件之后编写docker-compose的时候都会有提示的。Docker镜像:Docker镜像运行之后变成容器(docker run)Docker Client:Docker的客户端。Docker自身组件。

2023-09-11 16:01:11 2071

原创 c++中的常用知识点总结

当一个派生类通过多条路径继承自同一个基类时,如果不使用虚基类,那么在派生类中就会存在多个基类子对象的实例,这样就会导致同名成员在派生类中出现冗余,访问这些成员时会产生二义性。友元类(Friend Class)是指在一个类中声明另一个类为友元,从而使得被声明的类可以访问声明它为友元的类的私有成员。总结来说,虚基类的作用是解决多继承中的菱形继承问题,避免冗余和二义性,确保派生类对基类成员的访问是唯一的。在上面的例子中,类B被声明为类A的友元类,因此类B可以访问类A的私有成员privateData。

2023-09-05 17:34:35 992 1

原创 Android开发中的各种零碎知识点

这种方式主要是获取和监听系统深色主题模式的开启状态动态设置主题或皮肤。首先我们需要定义好深色主题或者皮肤,换肤功能通过来实现。onCreate方法中在setContentView之前判断是否开启暗黑模式,设置暗主题。

2023-09-04 11:44:30 570

原创 深入理解Android消息机制的原理

message.target=null,这类消息不会被真的执行,它起到了flag标记的作用,mq在遍历消息队列时,如果队头是同步屏障消息,那么会忽略同步消息,优先让异步消息得到执行。这就是它的目的,一般异步消息和同步消息会一同使用。消息分发核心方法在于loop方法,loop方法里面会的调用的linux里的epoll机制。epoll会把哪个流发生了怎样的I/O事件通知我们。此时我们对这些流的操作都是有意义的。为什么主线程中创建Handler没有绑定looper,也能发送消息呢?异步消息&同步屏障 使用场景。

2023-08-28 00:12:08 203

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除