Redis-字典
Redis中的字典被广泛用于实现Redis的各种功能,其中包括数据库和哈希键。字典会根据负载情况自动进行扩容和收缩,而和其他语言哈希表的扩缩容不同的是,Redis采用渐进式操作的方式实现,以保证扩缩容期间服务的性能稳定
Redis-简单动态字符串(SDS)
Redis只会使用C字符串作为字面量,在大多数情况下,Redis使用SDS(Simple Dynamic String,简单动态字符串)作为字符串表示。相比于C字符串,SDS提供了更好的性能和安全性。
Golang-逃逸分析
逃逸分析是 Go 语言中的一种编译器优化技术,用于确定变量应在堆栈还是堆上分配。它是静态代码分析后的一个优化步骤,用于改善内存管理和提高程序速度。如果函数外没有引用,变量会优先被放置在堆栈中,因为堆栈比堆栈更快,但空间有限。如果函数外有引用,由于存在悬空指针的风险,变量必须放在堆上。逃逸分析可以将变量直接分配到堆,从而减少堆内存分配和 GC 压力。通过使用特定标志编译或检查汇编代码,可以查看转义分析的结果。常见的转义情况包括指针转义、堆栈空间不足以及引用对象的闭包。逃逸分析有助于正确分配内存,从而提高效率和性能。
Golang-数组与切片
Go 中的数组和分片都是顺序数据结构,但有一些关键的区别:数组是固定长度的,由存储的元素类型和大小定义;而分片可以理解为动态数组,与类型和长度无关。切片有一个结构,包含长度、容量和指向底层数组的指针,可以同时被多个切片引用。生成切片时,结果的容量是从数组的起点到终点。切片支持特殊方法,如在某些条件下扩展长度和容量。当切片用作函数参数时,函数内部的更改会因底层数组而生效。不过,分片没有并发控制,在并发环境中可能不安全。
Linux-ps命令的使用
psreport a snapshot of the current processes.
统计当前进程运行情况
概述ps命令的选项有三种风格
This version of ps accepts several kinds of options:
1 UNIX options, which may be grouped and must be preceded by a dash.
2 BSD options, which may be grouped and must not be used with a dash.
3 GNU long options, which are preceded by two dashes.
UNIX:可以分组,使用一个破折号(dash)开头
1$ ps -ef
BSD:可以分组,不使用破折号(dash)
1$ ps aux
GNU:不可以分组,使用两个破折号(dash)开头
1$ ps --user
ps -aux和ps aux是不一样的
Note that “ps -aux” is d ...
Python性能分析实战1
前置知识
Python 基础语法
cProfile 基本使用
问题环境上发现有接口请求的响应时间高达10s以上,严重影响功能的使用
需要分析具体的代码执行耗时,针对问题代码进行优化,优化接口性能
解决思路分析代码执行情况使用 cProfile 工具,将目标接口的代码执行情况dump到文件中
123456with cProfile.Profile() as pf: # api business code # ... pf.dump_stats('api.prof')
获得dump文件后,使用 snakeviz 渲染方便查看
123snakeviz api.prof
执行命令后,snakeviz 会自动打开浏览器显示渲染后的结果
可以看到接口中调用的service方法耗时长达10s左右,根据图示的调用栈可以看到耗时久主要是跟一个decrypt方法有关
接下来到底下的搜索框过滤出关于decrypt相关的执行情况
可以看到,decrypt相关的方法被调用37次,每次耗时0.2s左右
0.2s算是比较耗时的操作了,这样耗时的代码逻辑居然还执行了37次,最终导致总耗时 ...
MongoDB副本集搭建
MongoDB副本集搭建概述
本文参照 MongoDB 官方文档(https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/#std-label-server-replica-set-deploy)进行实践基于单机环境,启动3个mongod进程模拟搭建mongo副本集(replica set)
实践环境
使用单台机器启动多个mongod进程模拟集群
操作系统(OS):
12$ cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
使用Docker构建Mongo环境
Docker版本:
12$ docker --versionDocker version 1.13.1, build 7d71120/1.13.1
Mongo镜像版本:
12$ docker images | grep mongodocker.io/mongo 4.2-bionic e301407a044e 6 months ago ...
LC17-电话号码的字母组合
电话号码的字母组合LeetCode题目链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number/
难度:中等
分析本题属于典型的递归回溯的题型,根据数字查找可使用的字母,在进行遍历递归回溯组合出所有可能的组合即可
思路
递归纵向遍历数字串(递归过程中当前遍历的索引即可实现递归纵向遍历)
根据数字取出对应的字母集合
遍历该集合组合结果
递归结束条件:当结果集中的字母和所给数字一样多时,即遍历结束
点我展开JavaGolang1123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657const ( CHAR_ONE = '1' CHAR_TWO = '2' CHAR_THREE = '3' CHAR_FOUR = '4' CHAR_FIVE = '5' CHAR_SIX = '6' ...