Go 语言高性能编程

目录序言关于本书第一章 性能分析benchmark 基准测试pprof 性能分析第二章 常用数据结构字符串拼接性能及原理切片(slice)性能及陷阱for 和 range 的性能比较反射(reflect)性能第三章 并发编程读写锁和互斥锁的性能比较如何退出协程(超时场景)第四章 编译优化减小编译体积附录 Go 语言陷阱数组和切片这个系列的由来我使用 Go 作为主力编程语言已经有一年多的时间了,主要的工作职责是开发一些效率工具,例如分布式编译加速工具。对性能不太敏感的地方,通常会使用 Python...阅读全文

Segmentfault 2020-12-16 13:32:33 极客兔兔

VS Code with GO

安装Go 语言包 https://studygolang.com/dl Windows下安装(最新) 双击你下载的安装包(go1.13.4.windows-amd64.msi),一直点击“Next”即可,注意有一步要求选择安装路径,为了后面教程好说明请不要更改。 然后点“Install”安装 这个过程请等待 点击“Finish”完成安装 怎么来验证我们的安装是成功的呢?按windows键+R,输入:cmd回车 在出现的命令行窗口输入:go version回车,这时会显示你当前安装的go版本,说明...阅读全文

简书 2020-12-13 12:32:44 泥人冷风

Golang之sync.Pool对象池对象重用机制总结

文章来源于: https://gobea.cn/blog/detail/VrL2jbol.html sync.Pool作用 对象重用机制,为了减少GC,sync.Pool是可伸缩的,并发安全的 两个结构体 type Pool struct { local unsafe.Pointer // local fixed-size per-P pool, actual type is [P]poolLocal localSize uintptr // size of the local array //...阅读全文

简书 2020-12-13 12:32:39 叫什么昵称好呢

Kibana源码编译坑记

需要编译Kibana的背景 目前所在的公司使用的Elasticsearch大多是5.4.3版本,使用自研插件的方式,通过添加自研header实现了索引级别的鉴权。此种方式的鉴权便要求所有到es的请求都必须添加指定的自定义header。在这种场景下,kibana也应该配置自定义header,以适配自研的鉴权。 经调查,Kibana可以通过配置 elasticsearch.customHeaders 属性来添加自定义header。本以为到这就可以完成调试安心使用kibana对接开启自研权限的Elas...阅读全文

简书 2020-12-13 12:32:38 JaydenRansom

Android AOSP学习(三)Android系统源码的整编和单编

前言 在上一篇文章Android AOSP基础(二)AOSP 源码下载 中,我们顺利的将AOSP下载了下来,很多时候我们不仅仅需要去查看源码,还有以下的几个需求: 动态调试Android系统源码 定制Android系统 将最新版本的Android系统刷入到自己的Android设备中 将系统源码导入到Android Studio中 为了实现这些需求,就需要我们去编译系统源码。 1.编译系统概述 了解以下一些概念,会对Android编译系统有大概的了解。 Makefile Android平台的编译系...阅读全文

简书 2020-12-13 02:32:41 码了个码农

微服务之间调用超时的设置治理

推荐阅读: 我总结了72份面试题,累计3170页,斩获了30+互联网公司offer(含BATJM) 2020首战告捷,这份Java面试神技Plus版,让我成功拿到了阿里、京东、字节跳动等大厂offer 膜拜!阿里内部都在强推的K8S(kubernetes)学习指南,不能再详细了 微服务是⼀种分布式架构,系统内各部分(服务)被部署为单独的应用程序,并通过某种远程访问协议进⾏通讯。分布式应⽤的挑战之⼀就是如何管理远程服务的可用性和它们的响应。本⽂主要探讨服务的响应时间对系统的影响和应对。 上图是简化...阅读全文

简书 2020-12-13 02:32:41 Java入门到入坟

2020-12-12:现场写代码,把CPU打满,java和go都行,并解释为什么。

福哥答案2020-12-12: 现在的电脑一般是多核的,单个for循环cpu是不会打满的。 我的电脑是四核八线程的,不管是java还是go,6个for循环就能把cpu打满,4个和5个cpu打不满。 为什么是6个线程?现在还不得而知,请直接评论。 golang代码如下: package main import "time" func main() { for i := 0; i < 6; i++ { go func() { for { //fmt.Println("1") } }() } time...阅读全文

简书 2020-12-13 02:32:40 福大大架构师每日一题

Go 平滑重启(优雅重启)

问题背景生产环境重要且复杂,许多的操作需要在任何场景都要保证正常运行。如果我们对线上服务进行更新的步骤如下:kill -9服务再启动服务那么将不可避免的出现以下两个问题:未处理完的请求,被迫中断,数据一致性被破坏新服务启动期间,请求无法进来,导致一段时间的服务不可用现象一般有三种方案处理以上问题:生产环境会通过四层(lb)->七层(gateway)->服务,那么可以通过流量调度的方式实现平滑重启k8s管理程序自身完成平滑重启(本章介绍)什么事平滑重启进程在不关闭其所监听端口的情况下进行重启,并且...阅读全文

Segmentfault 2020-12-16 10:32:34 WilburXu

Go数据结构系列之 Array and Alice

概述在使用 Go 开发的时候,数组和切片经常被使用到,这篇文章来简单聊聊吧。数组array在 Go 中,有两种方式可以初始化数组 func main() { userId := [3]int{1, 2, 3} userName := [...]string{"wqq", "curry", "joke"} } 一种是显式的定义数组的大小,另一种通过 [...] 声明数组,Go 会在编译期间推导出数组的大小。既然使用了数组,少不了遍历,在 Go 中遍历数组一般也就两种方式。 func main() ...阅读全文

Segmentfault 2020-12-16 08:32:35 wuqinqiang

Go系列之 反射

反射增强了语言的动态描述能力,你要问我什么是动态,我只能说,所有可能产生意料之外情理之中的变化,都是动态。概述反射这个词并不是特定语言持有的,相反很多语言拥有着自己的反射模型。老实说,我并不喜欢去用专业的术语去解释一些概念性的东西,这样往往观看的人也云里雾里,这些概念性的东西,每个人脑海中都有自己的“解释语言“,随他去吧。我主要想谈谈为什么需要反射,应用场景是什么?其实在我看来,这两个问题严格意义上是等价的,即 为什么=应用场景,应用场景=为什么。go 作为静态类型语言,如果没有反射,很多能够作...阅读全文

Segmentfault 2020-12-15 23:32:33 wuqinqiang

天呐!Java工作2年,有些程序员竟然还不懂进程、线程、协程之间的关系

前言 我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。 一、进程 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。 进程的组成 进程一般由程序、数据集合和进程控制块三部分组成。 程序用于描述进程要完成的功能,是控制进...阅读全文

简书 2020-12-12 10:33:38 今天你敲代码了吗

一文解决二叉树遍历

Brush the topic-BinaryTree 大家好,这是Brush the topic的第一章节,BinaryTree。首先我说一下为什么把这个放在刷题的第一节呢? 原因如下: 培养、训练自己的计算机的思维。 锻炼模版化,抽象化思维 下面让我们一起去完成一个壮举,那就是完全解决二叉树的遍历问题,以及相关问题。are you ok? 知识点回顾 二叉树的遍历 由于对于二叉树的遍历顺序不同,构造出三种不同的遍历方式 前序遍历-根左右 中序遍历-左根右 后序遍历-左右根 递归代码模版如下 P...阅读全文

简书 2020-12-12 10:32:48 Payne_Wu

2020-12-11:多个线程同时写同一个日志文件,为什么相互写的内容不会被覆盖?

福哥答案2020-12-11: 答案来自此链接: 这是道面试题,可惜我没什么思路,网上找了些答案。如果有更好的答案,请直接评论。 1.没看代码前,以为会用到缓存队列+组提交。 2.golang的日志源码位于log/log.go中的Output方法。加锁了。 3.系统级别。当打开文件并设置了O_APPEND标识,内核会共享文件写入游标,保证内容不会被覆盖。 这个问题涉及到 系统底层 ,这就要看 操作 系统, 与 Windows 不同, Linux 允许一个文件在写入的时候被读取(或者在被读取的时候...阅读全文

简书 2020-12-12 10:32:48 福大大架构师每日一题

基础配置篇:建立项目,为我的博客项目制定目录层次结构和项目初始化

前期准备、构思已经相对比较完善了,我们在构思章节中,已经明确了我们的需求,知道我们的博客他需要有些什么功能,博客的数据库设计、博客的界面设计等信息。也大致了解到了golang的安装配置、基本语法等。 这一节内容中,我们将开始进行我们最重要的一步,开始实战学习golang了。 目录结构 一个清晰明确的目录结构,可以让项目更清晰,更好维护和扩展。目录结构的组织,也是可以灵活变动的。它本身没有一个严格规定的格式。我们只需要做到合适、合理、清晰就可以。下面是我对博客程序设计的目录结构的设计。目录都采用一...阅读全文

简书 2020-12-12 10:32:47 Fesion

基础配置篇:我的博客项目配置文件数据和配置的读写处理

上一节,我们已经定义和创建了我们需要的目录,和项目初始化。这一节我们就可以开始编写博客配置功能了。 上面我们提到,我们的配置处理函数将存放在config目录中。我们的项目还需要配置文件。配置文件我们就命名为config.json。它是一个json文件,里面将包含了博客网站的基本信息、数据库配置信息等。 config.json 配置文件 为了方便查看和读取config.json,我们将它放在项目的config目录下。它里面将包含的字段信息有: { "mysql": { "database": "i...阅读全文

简书 2020-12-12 10:32:46 Fesion