12 2021 档案
摘要:Golang调度器原理解析 本文主要介绍调度器的由来以及golang调度器为何要如此设计,以及GPM模型解析 一.调度器的由来 1.单进程时代 单进程时代不需要调度器,一切程序都是串行,所以单进程的操作系统会面临这样一个问题: 程序只能串行执行,一个进程阻塞了,其他进程啥事也做不了,只能等待,会造成
阅读全文
摘要:go并发编程 一.背景知识介绍 1.进程和线程 进程是程序在操作系统中一次执行的过程,系统进行资源分配和调度的基本单位 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位 一个进程可以创建和撤销多个线程,同一个进程中的多个线程之间可以并发执行 2.并发和并行
阅读全文
摘要:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1: 输入: [ [1,3,1], [1,5,1
阅读全文
摘要:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 示例 1: 输入: 12258 输出: 5 解释: 12258有5种
阅读全文
摘要:go 垃圾回收 本文基于整个go的gc发展,来研究其gc的演变过程,不单针对某个版本的gc,因为go的gc一直在演变 一.GO GC的发展历史 go v1.1 : 标记清除法,整个过程都需要STW go v1.3 : 标记清除法,标记过程仍然需要STW,但是清除过程并行化,gc pause约为几百m
阅读全文
摘要:在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 示例 1: 输入:nums = [3,4,3,3] 输出:4 示例 2: 输入:nums = [9,1,7,9,7,9,7] 输出:1 限制: 1 ⇐ nums.length ⇐ 10000 1 ⇐
阅读全文
摘要:一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例 1: 输入:nums = [4,1,4,6] 输出:[1,6] 或 [6,1] 示例 2: 输入:nums = [1,2,10,4,1,4,3,
阅读全文
摘要:Go内存分配-原理解析 一. 背景介绍 先了解一下Linux系统内存相关的背景知识,有助于我们了解Go的内存分配 1.覆盖技术 在上古时代的内存管理中,如果程序太大,超过了空闲内存容量,就无法把全部程序装入内存中,这个时候诞生出了一种解决方案,即覆盖技术, 简而言之,就是把程序分为若干个块,只把哪些
阅读全文
摘要:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12,
阅读全文
摘要:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加
阅读全文