随笔分类 - 语言算法
摘要:Python 内存管理层次: 众所周知,计算机硬件资源由操作系统负责管理,内存资源也不例外。应用程序通过 系统调用 向操作系统申请内存,而 C 库函数则进一步将系统调用封装成通用的 内存分配器 ,并提供了 malloc 系列函数。 C 库函数实现的通用目的内存管理器是一个重要的分水岭,即内存管理层次
阅读全文
摘要:GIL 由来 我们先思考一个问题:我们在前面介绍的 list 、 dict 等内建对象是 线程安全 的吗? 在 Python 层面,list 、dict 等内建对象是线程安全的,这是最基本的常识。研究 list、dict 等内建对象源码时,我们并没有看到任何 互斥锁 的痕迹,这多少有点令人意外。以
阅读全文
摘要:哈希值 Python 内置函数 hash 返回对象 哈希值 ,哈希表 依赖 哈希值 索引元素: 根据哈希表性质, 键对象 必须满足以下两个条件,否则哈希表便不能正常工作: 哈希值在对象整个生命周期内不能改变; 可比较,且比较相等的对象哈希值必须相同; 满足这两个条件的对象便是 可哈希 ( hasha
阅读全文
摘要:list 对象是一种 容量自适应 的 线性容器 ,底层由 动态数组 实现。动态数组结构决定了 list 对象具有优秀的尾部操作性能,但头部操作性能却很差劲。 容量调整 当我们调用 append 、pop 、insert 等方法时,列表长度随之发生变化。当列表长度超过底层数组容量时,便需要对底层数组进
阅读全文
摘要:面向对象理论中“ 类 ”和“ 对象 ”这两个重要概念,在 Python 内部均以对象的形式存在。 “类”是一种对象,称为 类型对象 ;“类”实例化生成的“对象”也是对象,称为 实例对象 。 根据对象不同特点还可进一步分类: 类别特点 可变对象 对象创建后可以修改 不可变对象 对象创建后不能修改 定长
阅读全文
摘要:go编译器 Go 语言的编译器完全用 Go 语言本身来实现,它完全实现了从(编译)前端到后端的所有工作 Golang 的生态中相关工具我们能用到的有 pprof 和 trace。pprof 可以看 CPU、内存、协程等信息在压测流量进来时系统调用的各部分耗时情况。而 trace 可以查看 runti
阅读全文
摘要:系统调用是指使用类似函数调用的方式调用操作系统提供的API。虽然从概念上来说系统调用和函数调用差不多,但本质上它们有很大的不同(call vs int/syscall) 操作系统的代码位于内核地址空间,而CPU在执行用户代码时特权等级很低,无权访问需要最高优先级才能访问的内核地址空间的代码和数据,所
阅读全文
摘要:所有在 UNIX 系统上运行的程序最终都会通过 C 系统调用来和内核打交道。用其他语言编写程序进行系统调用,方法不外乎两个:一是自己封装,二是依赖 glibc、或者其他的运行库。Go 语言选择了前者,把系统调用都封装到了 syscall 包。封装时也同样得通过汇编实现。 当M一旦进入系统调用后,会脱
阅读全文
摘要:如果想兼顾开发效率,又能保证高并发,协程就是最好的选择。它可以在保持异步化运行机制的同时,用同步方式写代码(goroutine-per-connection),这在实现高并发的同时,缩短了开发周期,是高性能服务未来的发展方向。 CPU 和 IO 设备是不同的设备,能并行运行。合理调度程序,充分利用硬
阅读全文
摘要:mutator 申请内存是以应用视角来看问题,我需要的是某一个 struct,某一个 slice 对应的内存,这与从操作系统中获取内存的接口(比如mmap)之间还有一个鸿沟。需要由 allocator 进行映射与转换,将以“块”来看待的内存与以“对象”来看待的内存进行映射。在现代 CPU 上,我们还
阅读全文
摘要:性能优化流程理清待优化代码的常用逻辑与场景根据实际场景编写压测用例使用pprof 或者火焰图等工具取得数据找到热点代码重点优化 Profilingpprof 是用于可视化和分析性能分析数据的工具。为什么pprof可以帮助我们分析Go程序性能呢?因为它可以采集程序运行时数据:比如说协程栈,这样服务阻塞
阅读全文
摘要:Java垃圾回收 垃圾回收区域及划分 在介绍Java垃圾回收之前,我们需要了解Java的垃圾主要存在于哪个区域。JVM内存运行时区域划分如下图所示: 图源:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) —机械工业出版社 程序计数器:是一块较小的内存空间,它可以看作是当前线程所执行的字节
阅读全文
摘要:垃圾回收(Garbage Collection,简称 GC)是编程语言中自动的内存管理机制,垃圾回收,垃圾指的是不再需要的内存块,如果不及时清理就没有办法再利用。 垃圾回收算法 常见的垃圾回收算法有: 引用计数:每个对象维护一个引用计数,如果这个对象被销毁,则计数 -1 ,当计数为 0 时,回收该对
阅读全文
摘要:一、架构整体设计 1.Dubbo调用关系说明 在这里主要由四部分组成: Provider: 暴露服务的服务提供方 Protocol 负责提供者和消费者之间协议交互数据 Service 真实的业务服务信息 可以理解成接口和实现 Container Dubbo的运行环境 Consumer: 调用远程服务
阅读全文
摘要:Dubbo配置项说明 dubbo:service和dubbo:reference详解 mock: 用于在方法调用出现错误时,当做服务降级来统一对外返回结果 timeout: 用于指定当前方法或者接口中所有方法的超时时间。我们一般都会根据提供者的时长来具体规定。比如我们在进行第三方服务依赖时可能会对接
阅读全文
摘要:大O表达式 描述 例 O(1) 常数级,表明算法的执行时间不随问题规模 n 的增大而增大; 另外,对于常数 c,有 O(c) = O(1) 普通语句,如 a = b+c O(logn) 对数级,表明算法的执行时间随问题规模 n 的增大而呈对数增长; 对数的底数与增长的数量级无关(不同的底数相当于常数
阅读全文
摘要:常见的数据结构链表、队列、栈、二叉树、堆使用内置结构实现高级数据结构,比如内置的list/deque实现栈 链表有单链表、双链表、循环双端链表如何使用python来表示链表结构 实现链表常见操作,比如插入节点,反转链表,合并多个链表 leetcode练习常见链表题目 队列是先进先出结构实现队列的ap
阅读全文
摘要:设计模式 创建型模式(工厂/单例)工厂模式(Factory):解决对象创建问题 解决对象创建问题解耦对象的创建和使用包括工厂方法和抽象工厂 构造模式(Builder):控制复杂对象的创建用来控制复杂对象的构造创建和表示分离。比如你要买电脑,工厂模式直接给你需要的电脑但是构造模式允许你自己定义电脑的配
阅读全文
摘要:Netty线程模型 其中ChannelPiepline的设计模型采用的是Handler组成的责任链模型 blocking I/O 阻塞nonblocking I/O 非阻塞I/O multiplexing (select and poll) 多路复用signal driven I/O (SIGIO)
阅读全文
摘要:Spring Spring中的基本概念1.IOC/DI对象的属性由自己创建,为正向流程,而由Spring创建,为控制反转.DI(依赖注入)为实现IOC的一种方式,通过配置文件或注解包含的依赖关系创建与注入对象.正向流程导致了对象与对象之间的高耦合,IOC可以解决对象耦合的问题,有利于功能的复用 例如
阅读全文