Linux操作系统学习笔记(二十六)内存性能优化

一. 前言  本文将分析内存的性能指标、测试方法、压测工具以及内存常见问题的优化套路。二. Buffer和Cache  通过free或者top命令我们可以发现其将内存分为了buffer和cache等部分。Buffer 和 Cache 的设计目的,是为了提升系统的 I/O 性能。它们利用内存,充当起慢速磁盘与快速 CPU 之间的桥梁,可以加速 I/O 的访问速度。通过man free可以查阅到下面的说明buffers Memory used by kernel buffers (Buffers
分类: 其他 发布时间: 03-09 10:11 阅读次数: 0

Linux操作系统学习笔记(二十七)磁盘I/O性能优化

一. 前言  本文是性能优化系列的最后一篇,将分析磁盘I/O的性能指标、测试方法、常见问题的优化套路等内容。二. I/O性能指标及查询工具  磁盘性能的衡量标准经常用到的包括使用率、饱和度、IOPS、吞吐量以及响应时间等。这五个指标是衡量磁盘性能的基本指标。使用率,是指磁盘处理 I/O 的时间百分比。过高的使用率(比如超过 80%),通常意味着磁盘 I/O 存在性能瓶颈。饱和度,是指磁盘处理 I/O 的繁忙程度。过高的饱和度,意味着磁盘存在严重的性能瓶颈。当饱和度为 100% 时,磁盘无法接受
分类: 其他 发布时间: 03-09 10:11 阅读次数: 0

leetcode解题思路分析(五十二)447 - 453 题

回旋镖的数量给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。返回平面上所有回旋镖的数量。使用哈希表存储每个点到其他点的距离,如果距离相等则可以构成。class Solution {public: int numberOfBoomerangs(vector<vector<int>>&.
分类: 其他 发布时间: 03-09 10:11 阅读次数: 0

leetcode解题思路分析(五十三)454 - 461 题

四数相加给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。将AB视为统一的元素,将和存在哈希表中,然后C和D双重循环,依次求解class Solution {public: int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vect.
分类: 其他 发布时间: 03-09 10:10 阅读次数: 0

解密虚拟内存0x400000以下的地方

一. 前言  最近看CSAPP时,对以前没有仔细注意的一处知识盲区产生了兴趣,所以进行了深入研究,并写下此文一记录。二. 问题  二话不说直接上图。下图是CSAPP第七章的虚拟内存分析图。书中提到在X86-64位Linux系统中,代码段总是从地址0x400000处开始,后面是数据段。堆在数据段之后,通过调用malloc向上增长…  但是0X400000以下呢?为什么没有提到呢?翻遍全书,都没有一处提到0至0X400000处的空间是做什么用的。实际运行以下cat /proc/self/maps
分类: 其他 发布时间: 03-09 10:10 阅读次数: 0

关于GDB运行时No symbol table is loaded. Use the “file“ command.的解决方法

  最近有同学问GDB使用的问题,对此做一个整理。首先,GDB已经报错file找不到了,那可以运行file test检测一下(gdb) file testReading symbols from test...(no debugging symbols found)...done.发现找不到可执行文件,所以问题应该在于编译时候没有加上ggdb3,重新编译一下ty@ubuntu:~$ gcc -ggdb3 -o main main.c编译完成再次执行就没有问题了,问题解决。..
分类: 其他 发布时间: 03-09 10:10 阅读次数: 0

leetcode解题思路分析(五十四)462 - 468 题

最少移动次数使数组元素相等2给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。找到中位数,和中位数的差值就是最小值class Solution {public: int minMoves2(vector<int>& nums) { int res = 0, i = 0, j = nums.size() - 1; sort(nums.begin(.
分类: 其他 发布时间: 03-09 10:10 阅读次数: 0

leetcode解题思路分析(五十五)469 - 475 题

用 Rand7() 实现 Rand10()已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。说白了就是进制转换问题。使用两次rand7,可以生成1-49的数字,其中1-40直接拿来表示1-10,多的数字1-9再次rand7,则组成63个数字,再多的3个可以组成21个,接着组成1个,最后回到循环。// The rand7() API is already defined for you.// int rand7().
分类: 其他 发布时间: 03-09 10:09 阅读次数: 0

leetcode解题思路分析(五十六)476 - 482 题

数字的补数给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。正整数和1异或即按位取反,所以得到恰好大于该数的1111即可class Solution {public: int findComplement(int num) { int ret = 1; while (ret < num) { ret = (ret << 1) + 1; } ret ^= nu.
分类: 其他 发布时间: 03-09 10:09 阅读次数: 0

leetcode解题思路分析(五十七)483 - 493 题

最小的好进制对于给定的整数 n, 如果n的k(k>=2)进制数的所有数位全为1,则称 k(k>=2)是 n 的一个好进制。以字符串的形式给出 n, 以字符串的形式返回 n 的最小好进制。本质上是一道数学题,通过数学公式推导可以得到,设 n可以表示成位数为 s+1,进制为 k 的数,则k<n^ 1/s<k+1。另外由于限制了n的范围,因此可以知道s不可能大于59。由此可得解#define LL long longclass Solution {public: s.
分类: 其他 发布时间: 03-09 10:09 阅读次数: 0

leetcode解题思路分析(五十八)494 - 500 题

目标和给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。按照题意,其实可以分为正整数子集和负整数子集,其和为总和,差值为目标和,所以2倍正整数子集即总和+目标和。因此题目转化为从数组中取一个子集满足和为二分之一的总和+目标和,即经典的01背包问题class Solution {public: int find.
分类: 其他 发布时间: 03-09 10:09 阅读次数: 0

Linux操作系统学习笔记(二十八)深入理解CPU

一. 前言  在前面一些文章中多多少少有提到一些CPU的结构以及对应的寄存器等,但是总觉得不够透彻,所以单开一文详细叙述CPU的各种知识,从而加深对操作系统和性能的理解。本文从最基本的加法器和乘法器切入,随后介绍CPU的基本架构和实现原理,接着介绍各个核心模块的实现细节,最后介绍CPU的一些高级黑科技。二. 加法器和乘法器2.1 门电路和半加器  如果从二极管如何形成高低电平说起,那怕是要说完大部分《模拟电路设计》和《数字电路设计》的知识了,有兴趣的同学可以回顾一下自行研究,我们就从各种基本门电路
分类: 其他 发布时间: 03-09 10:08 阅读次数: 0

Linux操作系统学习笔记(二十九)深入理解存储器

一. 前言  本文延续上文介绍CPU的基本思路,继续探索计算机的存储器,包括寄存器、CPU缓存、内存和硬盘,在深入了解存储器的基础上,我们可以写出性能更为优异的代码。二. 存储分级  存储分级的根本原因还是性价比,即性能和价格的权衡。最快的当然是SRAM(Static Random-Access Memory,静态随机存取存储器),但是其密度较低、存储数据有限、价格偏高。而DRAM(Dynamic Random Access Memory,动态随机存取存储器)的芯片,比起 SRAM 来说,它的密度更高
分类: 其他 发布时间: 03-09 10:08 阅读次数: 0

leetcode解题思路分析(五十九)502 - 508 题

IPO给定若干个项目。对于每个项目 i,它都有一个纯利润 Pi,并且需要最小的资本 Ci 来启动相应的项目。最初,你有 W 资本。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。总而言之,从给定项目中选择最多 k 个不同项目的列表,以最大化最终资本,并输出最终可获得的最多资本。只考虑利润,那么这就是完美的贪心算法了。用小顶堆存资本,大顶堆存利润,循环K次,寻找满足资本的放入利润堆,然后从资本堆pop出去。class Solution {public: int findM.
分类: 其他 发布时间: 03-09 10:08 阅读次数: 0

leetcode解题思路分析(六十)509 - 518 题

斐波那契计算第n项斐波那契可以用动态规划,也可以用公式法class Solution {public: int fib(int n) { if (n == 0) return 0; if (n == 1) return 1; int beforeLast = 0; int before = 1; int now = 0; for (int i = 2; i &lt.
分类: 其他 发布时间: 03-09 10:08 阅读次数: 0

leetcode解题思路分析(六十一)519 - 525 题

随机翻转矩阵题中给出一个 n_rows 行 n_cols 列的二维矩阵,且所有值被初始化为 0。要求编写一个 flip 函数,均匀随机的将矩阵中的 0 变为 1,并返回该值的位置下标 [row_id,col_id];同样编写一个 reset 函数,将所有的值都重新置为 0。尽量最少调用随机函数 Math.random(),并且优化时间和空间复杂度。典型的稀疏矩阵,用哈希表或者桶等方式即可,怎么节约怎么来class Solution {public: int cnt,r,c;//当前有cn.
分类: 其他 发布时间: 03-09 10:07 阅读次数: 0

Linux操作系统学习笔记(三十)docker和k8s的恩怨情仇

一. 简介  之前聊天发现很多小伙伴对docker和k8s了解甚少,所以决定分享一下在docker和k8s背后这些年容器发展的故事,谈不上以史为鉴,但是至少可以从中汲取经验教训,同时也能了解容器及容器编排发展的来龙去脉。二.PaaS和容器  让我们把话题稍稍往前拖一点。在2013年前后,云计算技术已经较为普及,如AWS和盛极一时的OpenStack。而在此时,PasS的观念逐渐深入人心。如下图所示,橙色代表用户自己需要承担的工作,而绿色代表第三方提供的服务,从左到右分别为:自建软件:自己完成所有的
分类: 其他 发布时间: 03-09 10:07 阅读次数: 0

不一样的hello world

一. 简介  最近学习了一些C内联汇编的知识,简单的尝试了一下,发现里面有很多有趣的东西,分享如下。首先说明,本文的内联使用仅为一个小例子,并不规范,另外32位和64位有着较大区别,本文基于64位Ubuntu16.04环境编译。二. 源码介绍  代码本身很简单,包括了三个函数,分别用于打印,退出以及作为函数入口,实际效果为输出Hello world。2.1 print()  打印函数printf()本身其实是调用了write()函数(也可以调用puts()等),这里通过80中断直接调用write(
分类: 其他 发布时间: 03-09 10:07 阅读次数: 0

leetcode解题思路分析(六十二)526 - 532 题

优美的排列假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一个优美的排列。条件:第 i 位的数字能被 i 整除i 能被第 i 位上的数字整除现在给定一个整数 N,请问可以构造多少个优美的排列?求全排列必然可以通过回溯解决。通过回溯解决就可以思考是否存在最优子结构或者通俗的说,是否存在相同的分支。通过记忆的方式剪枝,换个形式表达就是动态规划的数组dp。这里还有.
分类: 其他 发布时间: 03-09 10:07 阅读次数: 0

leetcode解题思路分析(六十三)535 - 541 题

TinyURL 的加密与解密TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk.要求:设计一个 TinyURL 的加密 encode 和解密 decode 的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被加密成一个TinyURL,并且这个TinyURL可以用解密方法恢复成原本的URL。.
分类: 其他 发布时间: 03-09 10:06 阅读次数: 0
今日推荐