1 笨笨的孩子慢慢学stay hungry stay foolish 2 学习,思考,实践,改变

0%

计算机科学。

2020-02-07

计算机可以是一个计算工具,为了实现一个计算而写一行,所以数学系的常用MATLAB进行计算。

计算机本身也是一个机器设计的科学,里面有许多的机制与策略,为了让机器更快更有效率,更稳定,更易用,更易于扩展,更简洁易懂,更开放等等,这些是一种设计的科学和精神。有些代码可以恒久经典,必然有其设计理念的先进。

阅读全文 »

Background

优化原理

参考JS的V8里头的优化说明:

With the x86-64 instruction set, this means we can’t use direct calls: they take a 32-bit signed immediate that’s used as an offset to the address of the call, and the target may be more than 2 GiB away. Instead, we need to rely on indirect calls through a register or memory operand. Such calls rely more heavily on prediction since it’s not immediately apparent from the call instruction itself what the target of the call is.

It should reduce strain on the indirect branch predictor as the target is known after the instruction is decoded, but it also doesn’t require the target to be loaded into a register from a constant or memory.

阅读全文 »

编译、链接和生成的目标文件

基础编译链接知识

gcc编译C程序经过预处理,编译,汇编,链接。

GNU编译器套装(英语:GNU Compiler Collection,缩写为GCC),指一套编程语言编译器。

预编译

image-20220925194018558

预处理就是展开所有的头文件、替换程序中的宏、解析条件编译并添加到文件中。

c语言中条件编译相关的预编译指令,包括 #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined。

阅读全文 »

Introduction

PHP Tracing JIT

PHP 的tracing JIT是PHP中加速效果比较好的,JIT开启的默认配置就是tracing模式。tracing模式会跟踪经常执行的loop或者function,然后将执行路径(trace)编译成机器码,以后再执行此段代码的时候会直接执行机器码,这样更快。

阅读全文 »

JIT buffer重定位

问题背景

PHP8 JIT

Just-In-Time compilation is a hybrid model of interpreter and Ahead-of-Time compilation, that some or all of the code is compiled, often at run-time, without requiring the developer to manually compile it.

阅读全文 »

KMP字符串匹配

找出模式串里后缀和前缀相同的地方。比如test = “aabaabaac” , pattern = “aabaac”, 进行匹配的时候在pattern的最后的字符c处无法匹配,则看pattern的后缀aa和前面test的下标0处的aa相同,可以再针对下标2处的b进行继续匹配。

next数组存的就是当test和pattern匹配不上的时候应该从新从pattern的哪开始重新匹配,图中是next数组计算的过程。next数组的具体过程见图(备注:图红色的字应该是指针不后移):

阅读全文 »

位数交换

第一题就是按照他的先一个数字每两位交换,然后第二步后一个数字的高两位是他前一个数字右移出来的两位,第一个数字的高两位是最后一个数字的低两位。比如输入1 2,输出是1073741824,2147483648。

1、转换成二进制01字符串,二进制字符串填充成32bit长度;

2、交换奇偶位,完成交换操作,比如0001 -> 0010;

阅读全文 »

守护进程

守护进程是在后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行。守护进程脱离终端的主要原因有两点:

(1)用来启动守护进程的终端在启动守护进程之后,需要执行其他任务。

(2)(如其他用户登录该终端后,以前的守护进程的错误信息不应出现)由终端上的一些键所产生的信号(如中断信号),不应对以前从该终端上启动的任何守护进程造成影响。要注意守护进程与后台运行程序(即加&启动的程序)的区别。

阅读全文 »

aiops比赛消费kafka数据

1,在自己电脑上用终端远程登录服务器: ssh user@ip

2,输入docker image 查看镜像情况:

3,启动docker

1
docker run -it aiops_0705 /bin/bash

4,Python执行consumer.py ,consumer.py的kafka的数据怎么取的:对于平台指标和业务指标,解析后的data的主要内容为从指标类型到数据列表的字典;对于调用链数据,则只有一条调用链数据。对data的访问就是对python中dict的访问。

阅读全文 »