最新 | 最热门 | 最高评价

+0  如何写出内存泄露的程序?

Tag: Go
鸟窝 发于 2021年01月01日 15:35 | 点击: 78 | 展开摘要
Go语言语法简单,学习起来容易,也容易上手,所以越来越多的公司和个人采用Go语言开发应用程序。不管使用什么语言,内存泄露是经常遇到的一类问题,而使用Go语言编写内存泄露的代码却不容易,本文将教你几招编写出内存泄露的代码,以满足你创造出内存泄露bug的心里需求。

即使你编写出内存泄露的bug,一般来说也很容易通过pprof查找出来,或者通过pprof的两次对比中找出哪一块出现的问题,所以不要因为写出bug就沾沾自喜,此类bug还是很容易被发现的。

资源泄露

一些打开的资源

查看全文: http://www.udpwork.com/item/17406.html

+0  go os/exec 简明教程

Tag: Go
鸟窝 发于 2020年12月27日 14:26 | 点击: 76 | 展开摘要
Go标准库提供了便利的方法,可以很容易地运行外部命令,一般我们会使用os/exec包下的方法实现执行外部命令以及和外部命令交互。os/exec包装了os.StartProcess方法,更方便的进行输入和输出的访问,提供I/O pipe等功能。我会通过两篇文章专门介绍Go启动新进程,执行外部命令的方法,这是第一篇,专门介绍os/exec库。

os/exec库提供方法和POSIX标准中定义的C语言的方法)类似,但是提供了进一步的封装,更方便使用。接下来我会一一给你介绍。

运行

查看全文: http://www.udpwork.com/item/17407.html

+0  Go 运行程序中的线程数

Tag: Go
鸟窝 发于 2020年12月27日 10:58 | 点击: 78 | 展开摘要
稍微入门Go语言的程序员都知道,GOMAXPROCS变量可以限制并发运行用户态Go代码操作系统的最大线程数,你甚至可以通过调用函数func GOMAXPROCS(n int) int在程序运行时改变最大线程数的大小,但是当你进一步阅读文档,或者更深入的应用Go语言开发的时候,你就会发现,实际线程数要比你设置的这个数要大,有时候甚至远远大于你设置的数值,更悲剧的是,即使你的并发任务回退到没有几个的时候,这些线程数还没有降下来,白白浪费内存空间和CPU的调度。

当然,这个问题很

查看全文: http://www.udpwork.com/item/17408.html

+0  用markdown写知乎文章的完美解决方案

Tag: toolkit | zhihu | 知乎 | markdown
张炎泼(xp) 发于 2020年12月24日 08:00 | 点击: 80 | 展开摘要
习惯了用markdown做各种笔记或创作, 想要分享到知乎的时候,
发现知乎对文章导入markdown的支持并不很好, 不支持表格, 需要公开可访问的url的图片,
以及知乎私有的公式编辑功能.

于是有了这样一个工具 md2zhihu , 将markdown文档直接转换成可以导入到知乎的格式.
主要做3项转换: 公式, 表格和图片.

例如以下 markdown 源码:

| Data size | Data Set | gzip size |

查看全文: http://www.udpwork.com/item/17476.html

+0  Why Is GIL Worse Than We Thought?

laike9m 发于 2020年12月23日 16:37 | 点击: 81 | 展开摘要
以前每当看到有人抱怨 GIL(Global Interpreter Lock),我总会告诉他们不用慌,各种场景都有对应的解决方案,比如主 IO 操作用 async,主 CPU 操作用多进程。我也一直认为,Python 的慢主要慢在“纯”执行速度,而 GIL 只不过是一个瑕疵。

然而最近我意识到,GIL 是一个比想象中严重得多的问题,因为它阻碍了程序的按需并行。

什么是“按需并行”?这个词是我造的,用来描述编程中的一种常见 pattern,即把最耗时的那部分操作并行化,而程

查看全文: http://www.udpwork.com/item/17383.html

+0  分析Go程序的Off-CPU性能

Tag: Go
鸟窝 发于 2020年12月07日 12:14 | 点击: 78 | 展开摘要
性能问题可以分为两种类型:

On-CPU: 线程花费在CPU上的时间。

Off-CPU: 线程阻塞在I/O、锁、计时器、页交换等场景中的等待时间。

Off-CPU性能分析砖窑用来测量和研究off-CPU时间,所以它不同于CPU profiling只检查线程在CPU上的运行时间,而是专门研究阻塞的线程状态,如下图所示:

线程既可以因为I/O或者锁的原因离开CPU,但也有一些与当前线程执行无关的原因,包括对CPU资源的高需求导致的非自愿上下文切换和中断。不管是什么原因,如

查看全文: http://www.udpwork.com/item/17410.html

+0  Go运行时中的 Mutex

Tag: Go
鸟窝 发于 2020年12月07日 12:14 | 点击: 79 | 展开摘要
我在极客时间上开了一门面向中高级Go程序员的课程:Go 并发编程实战课,有读者问Go channel中的实现中使用了mutex,这个mutex和标准库中的Mutex有什么不同?正好在百度厂内分享Go相关课程中有同事也提出了相同的问题,所以我专门写一篇文章介绍一下。

sync.Mutex是一个high level的同步原语,是为广大的Go开发者开发应用程序提供的一种数据结构,现在它的内部实现逻辑比较复杂了,包含spin和饥饿处理等逻辑,它底层使用了运行时的low level的

查看全文: http://www.udpwork.com/item/17409.html

+0  Stars Don’t Make Me Happy. Feedbacks Do.

laike9m 发于 2020年11月30日 07:09 | 点击: 79 | 展开摘要
Like many other programmers, I used to get hyped when somebody stars my project on GitHub. However, I find myself becoming less and less excited about it. It's not to say that I hate it. Nobody hates stars, and I'm still happy to see the nu

查看全文: http://www.udpwork.com/item/17384.html

+0  URL中的 # 原来是这个意思

技术小黑屋 发于 2020年11月24日 18:30 | 点击: 74 | 展开摘要
URL 是我们进行网络活动中很重要的概念,一个URL中可以包含域名,路径和参数等,

一个典型的 URL

1

https://www.example.com/fruits.html?from=google#apple

这其中包含了

协议: https

域名: www.example.com

路径文件名: fruits.html

参数: from=google

片段: apple

#片段是什么

URL 中的 # 指的是一个片段

URL 片段 往往用来告知

查看全文: http://www.udpwork.com/item/17439.html

+0  如何判断 SwiftUI Previews 环境以条件运行相关代码

图拉鼎 发于 2020年11月17日 22:56 | 点击: 76 | 展开摘要
最近在写 macOS 产品,不知道从什么时候开始,在 Xcode 里进行 SwiftUI Previews 时会把 App 也跑起来,导致总是打断我写 SwiftUI 代码。从 Xcode 的视角就是,它执行 SwiftUI Previews 的过程中,把 AppDelegate 给完整地跑了一遍。

我去测试了之前用过 SwiftUI 的两个项目,发现也是这样。但是我新建的干净 Xcode 项目,无论是 AppDelegate 的 Life Cycle 模式还是 Swift

查看全文: http://www.udpwork.com/item/17427.html

+0  slimarray: gzip的压缩率, 即时访问

Tag: algo | array | 数组 | compress | succinct
张炎泼(xp) 发于 2020年11月15日 08:00 | 点击: 83 | 展开摘要
slimarray

场景和问题

在时序数据库, 或列存储为基础的系统中, 很常见的形式就是存储一个整数数组,
例如 slim 这个项目按天统计的 star 数:

这类数据有有很明显的统一的变化趋势, 对这类数据的存储,
我们可以利用数据分布的特点, 将整体数据的大小压缩到几分之一.
这就是 slimarray 要做的事情.

使用 slimarray, 可以将数据容量减小到gzip差不多的大小,
同时还能允许直接访问这些数据!
测试中我们选择了2组随机数, 以及现实中的

查看全文: http://www.udpwork.com/item/17477.html

+0  如何自定义一个 Gradle 任务

技术小黑屋 发于 2020年11月14日 20:28 | 点击: 74 | 展开摘要
很多的项目是基于 gradle 构建,而且依托 gradle 的强大能力,我们可以实现更多的功能。比如像今天这样,我们会介绍如何创建一个自定义的 gradle 任务。

修改文件

(Android 项目)app 模块下的 build.gradle 为例

增加PrintInfoTask

增加自定义的Task 分为两步

增加Class声明 PrintInfoTask

创建task printInfo

具体实施代码如下

1
2
3
4
5
6
7
8
9
10
11

查看全文: http://www.udpwork.com/item/17440.html
|<<<1234567>>>| 一共1312页, 15738条记录