进制

CPU100%问题快速定位思路

强颜欢笑 提交于 2020-02-08 04:39:46
一、CPU 100%问题定位 1、功能问题,通过日志,单步调试相对比较好定位。 2、性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底。 二、故障演练题目 某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点服务,以及若干Java微服务,运维突然收到CPU异常告警。 问:如何定位是哪个服务进程导致CPU过载? 哪个线程导致CPU过载? 哪段代码导致CPU过载? 第一步 最消耗CPU的进程 工具 : top或者 htop(高级) 方法:top -c 显示进程运行详细列表 键入 P (大写P),按照cpu进行排序 如上图,最耗CPU的进程PID为1865 步骤二:找到最耗CPU的线程 工具:top 方法: top -Hp 1865 ,显示一个进程的线程运行信息列表 键入P (大写p),线程按照CPU使用率排序 如上图,进程1865内,最耗CPU的线程PID为2747 步骤三:将线程PID转化为16进制 工具:printf 方法:printf “%x\n” 2747 图示: 如上图,2747对应的16进制是abbn,当然,这一步可以用计算器。 注意:之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。 步骤四:查看堆栈,找到线程在干嘛 工具:pstack/jstack/grep 方法:jstack 10765 |

任意进制之间的转换模板

戏子无情 提交于 2020-02-06 20:15:03
//由m进制转换为n进制 //思路 先由m进制转换为10进制 按权展开式 //再由10进制转换为n进制 辗转相除法,保留每一步的余数 //手动建立映射,便于编写过程 string m2n(string str){ int hashch[256]; for(int i=0;i<=9;i++) hashch[i+'0']=i; for(int i=10;i<=35;i++) hashch['A'+i-10]=i; for(int i=10;i<=35;i++) hashch['a'+i-10]=i; char hashnum[256] for(int i=0;i<=9;i++) hashch[i]=i+'0'; for(int i=10;i<=35;i++) hashch[i]='a'+i-10; int ans=0; for(int i=0;i<str.size();i++) ans=ans*m+hashch[str[i]]; string str=""; while(ans){ str=str+hashnum[ans%n];//这样就实现了逆序存储余数 ans/=n; } // 000abcd1230456 //返回后可能存在前导零 return str; } 来源: CSDN 作者: 栈, 链接: https://blog.csdn.net/qq_924485343

巨大数的输入输出及其简单计算

余生长醉 提交于 2020-02-06 12:33:32
文章目录 一、巨大数的基本概念 二、巨大数的由来`在这里插入代码片` 三、万进制基本概念 四、为什么是万进制而不是十万进制 五、微易码补码的概念 六、引入《微易码补码》的原因 七,用实例局部证实,并推导微易码补码进行加、减法所需执行要点,及其正确性 1.加法的实现 2.减法的实现 3.乘法的实现 八、诚恳承认,由于数学能力不足,无法给出微易码补码正确性的数学证明 九、总结 一、巨大数的基本概念 巨大数的基本概念:位数趋近于无限的数字。 二、巨大数的由来 在这里插入代码片 当前计算机对于数据的处理在一般情况下,只能处理一些固定类型并且固定长度的数据。例如,在对于c语言提供了许多整数类型,int类型(范围:-2147483648~2147483647),float类型(可表示的数据范围是 -3.4E+38 和 3.4E+38)和double类型(可表示的数据范围-1.7E-308~1.7E+308),但是float的有效位数只有7位,double类型的有效位数也只有15位,处理数据不够精确。要处理的数据的位数越多,丢失的信息量也越大。因此我们提供一种对位数超出表示范围的数据的处理工具——也就是这个巨大数的处理工具。 三、万进制基本概念 万进制的原理同二进制十进制是一样的,二进制是逢二进一,同理万进制就是逢万进一。 1,首先用字符串(char hugeNum[ ])存储巨大数。 2

C语言实现任意进制间的转换

不问归期 提交于 2020-02-05 16:01:42
题目描述: 编写代码实现将输入的n进制数转换为x进制,即实现任意进制数转换为另任意进制数。 思路: C语言实现任意进制间的转换可以以十进制为基准,先将需要转换的数字转换成十进制然后再将其转换成目标进制数,这样就实现了任意进制间的转换。 引用函数: int ChangeTen(int n, char str[]); ChangeX(int n, int x); 首先将涉及大于十进制的转换的数挑出来,利用ASCALL码将字符转换成整型或将整型转换成字符 以取余的方式,将十进制数转换成其他进制数,再按照按权展开的方式,将其他进制数转换成十进制数 代码实现 # include <stdio.h> # include <stdlib.h> # include <string.h> int ChangeTen ( int n , char str [ ] ) ; void ChangeX ( int n , int x ) ; int main ( ) { char str [ 100 ] ; //由于待转换数的进制未知,可能存在字母表达,所以用字符串储存 int n , x , s ; printf ( "输入待转换数及其进制:\n" ) ; scanf ( "%s %d" , str , & n ) ; s = ChangeTen ( n , str ) ; printf (

php学习day4---常量与数据类型

↘锁芯ラ 提交于 2020-02-03 00:44:01
今天我学习了php有关常量的知识和数据类型的知识 下面是今天的学习内容: 一、常量   1.常量定义   常量是一个其中存储的数据不会也不应该改变的 “标识符”。通常情况下,常量的定义有两种方法: //第一种方法 //define(“常量名”,“常量值”); define("HH","123"); //第二种方法 //const 常量名=常量值; const HH = 123;   常量的取值方法:两种方法 //直接使用名字,或者通过constant()函数取值 //直接使用其名 echo HH; // HH = 123 //使用constant(“常量名”)函数,注意:常亮名是个字符串 echo constant("HH"); // HH=123   常量有以下几个特点:     1.常量无需$来使用。     2.常量的值不可以改变也不能销毁。     3.具有超全局作用域。     4.常量只能储存标量。   在一个项目中,是由多个人员来共同开发,那么如何判断一个常量是否存在或被别人定义呢? 在这里,我们给出以函数,这个函数就是专门判断常量是不是存在的:        defined(“常量”)     如果存在,返回true,不存在,则返回false   在php当中如果使用一个未定义的常量会报错,但是仍然会将该常量当有值。   预定于常量  

php : 基础(2)

眉间皱痕 提交于 2020-02-03 00:34:59
常量 常量是相对于变量来说的:是一个其中存储的数据不会也不应该改变的“标识符”。 常量的使用,就2个方面:定义,取值。 常量的定义 //常量定义语法1: //define("常量名", 常量值); define("PI", 3.14); define("SCHOOL", "传智播客"); //定义形式2: //const 常量名 = 常量值; const CC1 = 1234; const CC2 = 'abcd'; 常量的使用——取值 也有两种形式:直接使用名字,或通过constant()函数取得其值; //使用形式1:直接使用其名字 echo "<br />常量PI的值是:" . PI; //注意,不能写在引号中 echo "<br />常量SCHOOL为:" . SCHOOL; $s1 = PI * 3 * 3; //求半径为3的圆面积 //使用形式2:使用函数constant()获得一个常量的值: //形式: constant("常量名");//注意:常量名是一个字符串 $s2 = constant("PI") * 3 * 3; echo "<br />s1= $s1, s2 = $s2"; echo "<br />" . SCHOOL . constant("CC1") . constant("CC2"); //取得常量值的灵活性语法: $i = 1; $c1 = "CC

S7-300数据处理基本知识(结尾以MW8+1 ADD指令实训仿真,并用状态表监控及刷写变量)

拥有回忆 提交于 2020-02-02 19:29:38
数据处理基本知识汇总 STEP7 的数据类型包括什么? 基本数据类型 复杂数据类型 用于FB(功能块)的输入,输出参数类型 用于FC(功能)的输入,输出参数类型 基本数据类型是什么? 先列举12种数据类型 数据类型 描述 位数 常用举例 BOOL 二进制位 1 TRUE/FALSE BYTE 字节 8 B#16#2F (16进制的2F) WORD 无符号字 16 W#16#247D (16进制的247D) INT 有符号整数 16 -362 DWORD 无符号双字 32 DW#16#149E857A DINT 有符号双整数 32 L#23 REAL IEEE浮点数 32 20.0 S5TIME SIMATIC时间 16 S5T#1H3M50S TIME IEC时间 32 T#1H3M50S DATE IEC日期 16 D#2015-7-17 TIME_OF_DAY 实时时间 32 TOD#1:10:30.3 CHAR ASCII字符 8 '2A' S7-300寻址方式? 为了防止覆盖问题的产生。 对字节的寻址 可以连续 如 VB0,VB1,VB2,VB3 。 对字的寻址 可以连续 如 VW0 ,VW2,VW4 是2的倍数。 对双字的寻址 可以连续 如 VD0 VD4 VD8 VD12 是 4的倍数 。 如何生成变量表以及变量表的作用?

L1-3 宇宙无敌加法器 (20分) java

余生长醉 提交于 2020-02-02 04:22:56
地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个 PAT 星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是 7 进制数、第 2 位是 2 进制数、第 3 位是 5 进制数、第 4 位是 10 进制数,等等。每一位的进制 d 或者是 0(表示十进制)、或者是 [2,9] 区间内的整数。理论上这个进制表应该包含无穷多位数字,但从实际应用出发,PAT 星人通常只需要记住前 20 位就够用了,以后各位默认为 10 进制。 在这样的数字系统中,即使是简单的加法运算也变得不简单。例如对应进制表“0527”,该如何计算“6203 + 415”呢?我们得首先计算最低位:3 + 5 = 8;因为最低位是 7 进制的,所以我们得到 1 和 1 个进位。第 2 位是:0 + 1 + 1(进位)= 2;因为此位是 2 进制的,所以我们得到 0 和 1 个进位。第 3 位是:2 + 4 + 1(进位)= 7;因为此位是 5 进制的,所以我们得到 2 和 1 个进位。第 4 位是:6 + 1(进位)= 7;因为此位是 10 进制的,所以我们就得到 7。最后我们得到:6203 + 415 = 7201。 输入格式: 输入首先在第一行给出一个 N 位的进制表(0 << < N ≤

PAT甲级 1019 General Palindromic Number (20分)

。_饼干妹妹 提交于 2020-02-02 02:41:58
1019 General Palindromic Number (20分) 题目链接: PAT A 1019 题目大意:一个数如果正着读反着读结果都一样,那么这个数就被称为回文数。现在给出一个十进制数n和一个进制b,要求判断n在b进制下是不是回文数。 思路分析:这题很简单,直接求出b进制下的数并转换为字符串,然后调用reverse函数反转与之比较,如果相同就是回文数,否则不是。 坑点:一开始直接用string存储,发现有两个测试点过不去,原因是这道题进制可能比较大,如果是下面这种测试数据: 609468183 236 对应输出应该为: No 46 86 180 71 而我的输出为: No 6 4 6 8 0 8 1 1 7 这是因为进制比较大,46应该算一个字符,而我用string存储相当于把他们分开了,所以要改用vector存储,这样就没有问题了。 错误代码:(测试点2,测试点4过不去) # include <iostream> # include <algorithm> using namespace std ; int main ( ) { int n , b ; cin >> n >> b ; string num , temp ; while ( n ) { num + = to_string ( n % b ) ; n / = b ; } temp = num ;

PAT乙1022:D进制的A+B

假如想象 提交于 2020-02-02 01:17:40
问题描述: 输入两个非负 10 进制整数 A 和 B (≤2​30​​−1),输出 A+B 的 D (1<D≤10)进制数。 输入格式: 输入在一行中依次给出 3 个整数 A、B 和 D。 输出格式: 输出 A+B 的 D 进制数。 输入样例: 123 456 8 输出样例: 1103 代码: 唯一需要注意的是,不能漏掉0这个情况 #include <iostream> using namespace std; int main()//求余,反向输出 { int A, B, D, sum; cin >> A >> B >> D; sum = A + B; char ch[35]; int i = 0; if (sum == 0)//可以去掉这步,用do while进行替代,如果忘记这个,会扣2分 cout << "0"; else { while (sum) { ch[i++] = sum % D + '0'; sum /= D; } i--; for (int j = i; j >= 0; j--) cout << ch[j]; } return 0; } 来源: CSDN 作者: Crazy_Tommy 链接: https://blog.csdn.net/qq_35454197/article/details/104136807