2k 2 分钟

# 斯坦福编程范式 CS107_8 # 关于内存 当我们执行下述命令时: int *arr = malloc(40*sizeof(int));我们都为以为返回的是 160 字节的内存,但实际上要比 160 多。在堆上,这段内存块开始的时候,会有一部分内存被用来记录这个内存块的大小。 当我们执行如下命令时: int *arr = malloc(100*sizeof(int));// 当你觉得 100 个 int 类型的有点多,60 个就足够了,你尝试执行下面的代码free(arr+60);以上是动态的申请空间。当执行 free...
1.8k 2 分钟

# 斯坦福编程范式 CS107_10 # 考虑完整的函数 (带有参数) 考虑申请一个如下的函数: void foo(int bar,int *baz){ char snink[4]; short *why;}函数的传入变量和函数体内声明的局部变量在内存空间中是很近的。参数和局部变量的内存空间之间用了 4 字节进行分割,并且参数从右往左是从高地址到低地址的,所以 baz 的地址在 bar 之上。中间的四字节也十分重要,其中存储着调用函数的某些信息,它会告知我们是哪块代码调用了 foo 。 考虑使用 main 函数进行案例: int main(int...
1.8k 2 分钟

# 斯坦福编程范式 CS107_9 # C 语言与汇编语言的对照 int i =10;int j =i+7;j++;上述代码在汇编中的形式为: M[R1+4] = 10; //store operation R2 = M[R1+4]; //load operation R3 = R2 + 7; //ALU operation M[R1] = R3; //store operation R2 = M[R1]; R2 = R2 + 1; M[R1] = R2; 大写的 M 代表整个 RAM,将整个 RAM 看作是一个非常大的字节数组,R1 存储的是基地址,4...
204 1 分钟

# C++ Primer 11.06 # 推荐序 书籍推荐 by 孟岩 C++ 标准程序库 Effctive C++ C++ Concurrency in Action // 开发并发程序 Linux 多线程服务端编程 // 以服务端开发提升 C++ 开发水平 # 前言 本书的第 Ⅰ 和 Ⅱ 部分都需要完全掌握。本书每一章都有一个总结或者术语表为结束,二者共同回顾了本章的大部分学习重点,必要将其作为个人备忘录,以便自查。 本书提供的大量程序示例的源码可以通过该网址获得
1.2k 1 分钟

# 算法 11.06 # 面试题 01.01. 判定字符是否唯一 实现一个算法,确定一个字符串 s 的所有字符是否全都不同。 示例 1: 输入: s = "leetcode" 输出: false 示例 2: 输入: s = "abc" 输出: true 限制: 0 <= len(s) <= 100 s[i] 仅包含小写字母 如果你不使用额外的数据结构,会很加分。 方法一: 通过 & 操作,我们可以去判断某个状态我们是否做过标记 例:x & (1...
2.3k 2 分钟

# 斯坦福编程范式 CS107_6 # 实现一个整型的栈(下) 在 C 语言中结构体中的所有内容都是隐式的 public ,无法像 C++ 那样,实现 private protect 之类的限定词进行限制,但是我们可以假装里面的内容是不可见的,并要求通过我们定义的函数对其中的内容进行操作。 下面内容在 stack.h 文件中 typedef struct{ int *elems; int logicalLen; // 已经使用的内存 int alloclength; // 申请的内存大小}stack;void StackNew(stack *s);void...
4.4k 4 分钟

# C++ 常见的数据结构 # 数组 数组是将相同类型的元素存储于连续内存空间的数据结构,其长度不可变。 如下图所示,构建此数组需要在初始化时给定长度,并对数组每个索引元素赋值,代码如下: // 初始化一个长度为 5 的数组 array int array[5]; // 元素赋值 array[0] = 2; array[1] = 3; array[2] = 1; array[3] = 0; array[4] = 2; 或者可以使用直接赋值的初始化方式,代码如下: int array[] = {2, 3, 1, 0,...
2.7k 2 分钟

# 斯坦福编程范式 CS107_3 # 1. 大端存储,小端存储 端模式(Endian)的这个词出自 Jonathan Swift 书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,** 从圆头开始将鸡蛋敲开的人被归为 Big Endian,从尖头开始将鸡蛋敲开的人被归为 Littile Endian(这句话最为形象)。** 小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业 Big Endian 和 Little Endian 也几乎引起一场战争。在计算机业界,Endian...
1.5k 1 分钟

# 斯坦福编程范式 CS107_4 # 使用 C 做出类似 C++ 中模板的效果 还是第三节中的交换函数,因为中间变量 temp 被声明为 int,所以系统就隐式默认这个在进行 4 字节的复制,所以我们不可能使用之前的函数进行 double 类型或者其他类型变量的交换。我们可以通过通用的指针类型 void * 来达到不提前限制类型的效果,它说明指向没有任何类型信息的某些东西。 但如果你按照下述内容进行编码运行,就会出现问题 void swap(void *vp1,void *vp2){ void temp = *vp1; *vp1 = *vp2; *vp2 =...
1.9k 2 分钟

# 斯坦福编程范式 CS107_5 # 接着上节课的例子 void *lsearch(void *key, void *base,int n,int elemSize,int (*cmpfn)(void *,void *)){ for(int i=0;i<n;i++){ void *elemAddr = (char*)base + i * elemSize; if(cmpfn(key,elemAddr) == 0) //cmpfn 函数就是比较传入的地址中的内容是否一样 return elemAddr; } return...
4.8k 4 分钟

# WEB 学习 2023.10.23 # 信息泄露 # 备份文件下载 # PHPINFO 打开环境直接浏览器搜索 ctf 即可找到对应的 flag: ctfhub{5deb0c24242cf420fed9cfa1} # 网站源码 当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。 # 0x01 提示 常见的网站源码备份文件后缀 tar tar.gz zip rar 常见的网站源码备份文件名 web website backup back www wwwroot temp # 0x02 使用...
1.3k 1 分钟

# 李宏毅 2023 春机器学习课程 # ChatGPT 原理刨析 ChatGPT 不是联网的,并且目前的回答对于 2021 年以后的信息不太准确。 ChatGPT 所做的就是 文字接龙(语言模型),获得文字的几率,所以每一次的输出结果可能并不相同,并且在每次选出一个词之后,再将该词语加入到输入之后,继续进行处理,获得下一个文字,直到获得 end。 为了使 ChatGPT 具有根据历史记录进行回答的能力,其实每一次都会将历史记录也和当前的问题一起丢入输入当中 这个函数 fff 的参数大概会有 1700 亿个参数。 ChatGPT 的训练过程: # ChatGPT 关键技术 预训练 预训练...