YaPiBlog


You look look you one day day de

go随笔-内存管理

内存分配 内存管理中的三个角色 Mutator: fancy(花哨的)word for application,其实就是你写的应用程序,它会不断地修改对象 的引用关系,即对象图 Allocator: 内存分配器,负责管理从操作系统中分配出的内存空间 malloc 其实底层就有一个内存分配器的实现(glibc中),tcmalloc是malloc 多线程改进版(malloc再分...

go随笔-内置数据结构

内置数据结构 Channel 主要数据结构 type hchan struct { qcount uint // 当前队列当中的数据数量 dataqsiz uint // 循环队列的长度 buf unsafe.Pointer // 对应数据数组地址 elemsize uint16 closed uint32 ele...

go随笔-系统初始化

系统初始化流程 首先确定程序启动位置,当前编译过后可执行文件名称为 main 使用readelf -h /main 找到程序启动位置 使用dlv exec /main 调试代码,在上述启动位置使用 b * 命令打上断点 dlv中使用si跳转到下一个位置。 这样就找到了启动文件在 ../golang/src/runtime/rt0_linux_amd64.s:8 [ro...

go随笔-编译反编译及工具使用

编译 在Go语言中,可以使用下述语句观察整个编译过程 go build -x main.go 在编译过程中,主要包含两个步骤 编译 将源代码文件编译为.o结尾的目标文件 链接 将目标文件合并为可执行文件 可执行文件在不同操作系统中规范不一样。linux系统中为ELF,windows系统中PE,m...

服务发现及配置中心

使用consul 集群版consul架构 多数据中心主要部分为两部分,server及client Gossip: 流言协议 多server之间通讯(广域网 WAN Pool)使用 WAN GOSSIP协议进行通讯 多client之间通讯(局域网 LAN Pool)使用 LAN GOSSIP协议进行通讯 client到server端检测相关通讯也适用LAN Gossip协议 Go...

go-micro

核心概念 Micro是什么 用来构建和管理分布式程序的系统,包含下述三个主要部分 Runtime(运行时):用来管理配置,认证,网络等 Framework(程序开发框架):用来方便编写微服务 Clients(多语言客户端):支持多语言访问服务端 设置 GO module私有仓库设置 go get 内部使用git clone命令,默认只支持共有仓库 在指定gi...

Netty总结

知识点 Netty 是什么? Netty 是一个 基于 NIO 的 client-server(客户端服务器)框架,使用它可以快速简单地开发网 络应用程序。 它极大地简化并优化了 TCP 和 UDP 套接字服务器等网络编程,并且性能以及安全性等很多方面甚至都要更好 支持多种协议 FTP,SMTP,HTTP 以及各种二进制和基于文本的传统协议 很多开源项目比如我们常用的 ...

Spring框架总结

Spring框架 Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以 很方便地协助我们进行开发。 这些模块是:核心容器、数据访问/集成,、Web、AOP(面向切面 编程)、工具、消息和测试模块。比如:Core Container中的Core组件是S...

MyBatis总结

Mybatis缓存 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力。跟Hibernate 一样,MyBatis 也有一级缓存和二级缓存 并且预留了集成第三方缓存的接口 MyBatis 跟缓存相关的类都在cache 包里面,其中有一个Cache接口,只有一个默认的实现类 PerpetualCache,它是用HashMap 实现的。 我们可以通过 以下类找到这...

一条SQL语句在MySQL中如何执行的

MySQL基本架构 连接器: 身份认证和权限相关(登录 MySQL 的时候) 查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用) 分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确 优化器: 按照 MySQL 认为最优的方案去执行 ...