尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

爱奇艺2019秋招C方向笔试题解析:C语言基础与底层原理

爱奇艺2019秋招C方向笔试题解析:C语言基础与底层原理 笔试真题这种东西往往比市面上绝大多数教程都值得反复咀嚼。尤其是大厂的校招C方向笔试题题目看着基础实际每个选项都在挖坑考的是你写代码的肌肉记忆和底层理解。爱奇艺2019秋招C方向笔试题A这套题流传挺广的我自己当年也拿它当过复习提纲后来帮别人辅导校招时又翻出来用过好几遍。这套题覆盖了C语言里最容易丢分的几个大块指针、数组、字符串、内存管理、结构体以及经典的日期计算、文件读写这类编程大题。这篇文章我打算换个讲法——不把题目当成考题去一道一道对答案而是把这些题背后的考察逻辑拆开来讲。你要知道出题人到底在考你什么为什么会在这个地方设陷阱以及你在笔试环境下应该怎么快速反应。这样无论你最后遇到的是爱奇艺的题还是其他大厂的题思路都是通用的。全文会涉及不少C语言代码片段适合正在准备秋招的应届生、想查漏补缺的初级开发以及带新人的技术负责人参考。1. 先说清楚这套题到底在筛什么基础、底层、边界意识1.1 校招C方向笔试的定位和日常写业务代码完全是两码事很多同学在学校里用C语言写课程设计代码跑通就完事。但校招笔试题不是让你把功能实现而是通过短短一两个小时快速判断你脑中是否建立了完整的C语言心智模型。爱奇艺这套2019年的题A卷非常典型它没有故意出偏题怪题问的都是C语言里最常见、最核心的知识点但每个点都往深一层去问。这套题给我最深的印象是它不要求你掌握某个冷门库函数而是考验你对内存指针类型这些底层概念的理解。比如选择题里关于数组名和指针的区别光靠背数组名是常量指针这种结论是不够的你要理解sizeof(arr)和sizeof(arr[0])为什么不同arr1和arr1到底跳过了多少个字节。这里顺便说一下很多热词搜索里出现c语言一般用什么编程软件vscode c语言环境配置说明现在很多同学是在VS Code或者Visual Studio里写C的。日常练习用什么环境无所谓但笔试时通常是在牛客网这类在线平台上完成编译环境可能是老版本的GCC默认不开某些扩展。所以平时练习最好用命令行gcc -Wall -Wextra来编译把自己逼得严格一点笔试时就不会因为警告信息而慌乱。1.2 考点分布每年翻来覆去就是这几座山我把这套题和近几年其他大厂的C方向笔试题放在一起对比过考点高度重叠基本就是下面这几类考点方向常见出题形式对应的核心能力指针与数组选择题、程序输出题理解指针运算与数组底层布局字符串处理手写函数、编程大题边界控制、\0处理内存管理找错题、选择题malloc/free、内存泄漏、悬垂指针结构体与联合体计算sizeof、内存对齐对齐规则、位域文件读写编程大题fopen/fread/fwrite 的正确使用运算优先级选择题表达式求值顺序经典算法日期计算、排序逻辑思维、边界测试你把这个表格打印出来贴在墙上然后对着每个方向去自查发现自己哪里薄弱就补哪里。爱奇艺这套A卷基本也是按照这个维度来命题的所以我后面几个章节会按照这些考点逐个展开把原理讲透。1.3 时间分配笔试不是做研究先拿稳拿分题我记得爱奇艺这套题有选择题、填空题或者程序填空还有编程大题。根据网上流传的版本选择题大概有10到20道编程大题大概2到3道。很多人的问题是时间不够编程大题来不及写。以我当时做这类题的经验最合理的时间安排是选择题和填空题控制在20到25分钟内完成遇到拿不准的先标记不要死磕。编程大题先做最有把握的那道优先保证拿到大部分测试点的分数。每道编程题留出至少5分钟来检查边界情况比如数组长度为0、输入为负数、文件打开失败等。在线判题系统的规则往往不是全对才给分而是按通过的测试点给分。这意味着哪怕你只写出了一个能处理正常输入的版本也能拿到一部分分数。所以千万不要因为某道题没完全想清楚就直接放弃先把暴力解法写上再慢慢优化。2. 选择题里的高频陷阱运算符优先级、const与数组名的深层语义2.1 !()c语言是啥——逻辑非和括号组合永远是选择题的常客搜索热词里有!()c语言是啥?这个问题本身也很有意思因为很多C语言初学者第一次看到!(x 0 y 0)这种表达式时会懵。其实!是C语言的逻辑非运算符!()表示对括号内整个表达式的逻辑值取反。如果括号内的表达式为真非0那么!()的结果就是0如果括号内为假0结果就是1。在爱奇艺这套题里运算符优先级和结合性的考查方式是多种多样的最常见的坑有这几种int a 1, b 2, c 3; int r1 a b b c; // 先算 ab再算 bc最后 结果为0 int r2 a b c; // 先算 bc 为0再把0赋值给ar2为0 int r3 a || b c; // 优先级高于 ||先算 bc再算 a||...结果为1一个非常实用的记忆方法是单目运算、算术运算、关系运算、逻辑运算、赋值运算优先级从高到低排。其中逻辑非!是单目运算优先级很高只低于、--这类自增自减而赋值运算符优先级最低几乎任何其他运算符都比它先执行。对于!(a b)这种写法千万不能理解成!a b后者是先对a取逻辑非再和b比较。这两个表达式的差别很大选择题里特别喜欢在这种地方做文章。2.2 const的两种修饰方式背结论不如理解语义C语言里const的考法几乎每套笔试题都会出现。最经典的就是const int *p和int * const p的区别。前者是指向常量的指针意味着不能通过p修改它所指向的值后者是常量指针意味着p本身不能再指向别处。int a 5, b 9; const int *p1 a; // p1指向const int不能通过p1修改a // *p1 7; // 错误不能修改 p1 b; // 合法p1自身可以改变 int * const p2 a; // p2是常量指针不能改指向 *p2 7; // 合法可以修改a // p2 b; // 错误p2不能重新指向光记住这两条还不算完笔试还喜欢考const在函数参数中的应用。比如void func(const char *str)这个const是告诉调用者这个函数不会修改你传入的字符串。如果函数内部试图修改str指向的内容编译器会直接报错。这是一种接口契约。另外要特别注意const int * const p这种双重修饰表示指针本身和指向的内容都不可修改。这种形式在嵌入式C代码里很常见用来保护硬件寄存器映射地址。爱奇艺这样的互联网公司虽然不做嵌入式但C方向笔试偶尔也会借着这种题来考察你对类型修饰符的理解深度。2.3 字符数组与字符串sizeof和strlen的差别是送分题也是送命题热搜词里c语言字符数组和c语言字符串频繁出现说明这是C语言初学者过不去的坎。字符数组和字符串的差别核心就在于\0这个字符串结束标志。char s1[] hello; // 实际上占用6个字节最后一个是\0 char s2[] {h,e,l,l,o}; // 占用5个字节没有\0 char s3[] {h,e,l,l,o,\0}; // 占用6个字节效果和s1一样笔试题目中典型的问题是这样的printf(%zu %zu, sizeof(s1), strlen(s1)); // 6 5 printf(%zu %zu, sizeof(s2), strlen(s2)); // 5 (危险strlen可能越界)s2因为没有\0strlen(s2)会一直向后找直到在栈上的某个位置碰到一个0字节才停止。这个行为是未定义的笔试时如果选项里有可能越界结果不确定那它往往是正确答案。理解这一点后你就明白为什么很多字符串操作的笔试题都会反复强调要在字符数组末尾手动补\0因为标准库函数几乎都依赖这个结束标志。如果笔试题里让你实现一个strlen最简单的版本就是用一个循环去数直到遇到\0为止。2.4 while与do-while的区别看似简单但很多人说不清c语言while和do-while区别能成为高频热搜词说明这个问题比我们想象中更容易让面试官追问。严格来说while是先判断后执行如果条件一开始为假循环体一次都不执行do-while是先执行后判断循环体至少执行一次。int i 10; while (i 5) { // i5为假一次都不执行 i; } do { i; // 无论条件如何先执行一次 } while (i 5);这段代码执行完后while版本里i仍然是10而do-while版本里i会变成11。笔试里如果出程序输出题这种差异就是考点。另外在代码风格上建议把do-while用在至少需要执行一次初始化或操作的场景比如菜单显示、链表尾部插入的第一个节点等。2.5 冒泡排序的内外层边界基础算法反而最考验细节搜索热词里冒泡排序c语言也是高频词因为很多校招笔试编程题的第一小题会让你用冒泡排序或者直接考你某个冒泡排序变种的输出。冒泡排序的实现虽然简单但内外层循环的边界控制有没有写对代码里一眼就能看出来。void bubble_sort(int arr[], int n) { for (int i 0; i n - 1; i) { // 外层n-1趟 int swapped 0; for (int j 0; j n - 1 - i; j) { // 内层每趟少比一次 if (arr[j] arr[j 1]) { int tmp arr[j]; arr[j] arr[j 1]; arr[j 1] tmp; swapped 1; } } if (!swapped) break; // 优化如果这趟没有交换说明已经有序提前结束 } }这里值得注意的细节有两个。一是外层的i n - 1因为n个元素最多需要n-1趟比较二是内层的j n - 1 - i因为每一趟冒泡都会把当前未排序部分的最大值送到最后下一趟就不必再比较那个已经到位的元素。选择在笔试里默写排序算法时这种加上swapped标志位提前退出的优化非常加分但前提是你必须确保不会因此写错边界条件。3. 手写代码题的核心场景字符串逆序、文件读写与scanf的坑3.1 字符串逆序笔试频率最高的手写题之一要求是又快又对字符串逆序c语言pta是热词字符串逆序在C方向笔试题里出现的频率简直可以排前三。编程题经常直接要求你实现一个函数把传入的字符串原地逆序不允许额外分配数组。最标准的解法是双指针void reverse_str(char *s) { if (s NULL) return; int left 0; int right strlen(s) - 1; while (left right) { char tmp s[left]; s[left] s[right]; s[right] tmp; left; right--; } }这里有几个隐藏考点。第一必须先判断s是否为NULL否则strlen(NULL)会直接段错误。第二right要从strlen(s) - 1开始而不是strlen(s)因为最后一个有效字符前面正好是\0。第三如果字符串为空字符串strlen(s)为0right为 -1left right不成立循环不会执行这样是安全的。如果是进阶版题目比如要求逆序句子中的单词比如hello world变成world hello思路就是先整体逆序再逐个单词逆序。这类题目考的其实是同一个原理的灵活运用你在笔试前把这两种写法都练熟性价比很高。3.2 文件读写操作从fopen到fwrite的完整模板c语言文件读写操作代码是热词说明很多同学对文件操作不熟练。爱奇艺这套题里有可能直接出编程题也有可能放到填空题里让你补全代码。文件操作的核心是记住每个函数的返回值都要检查这是大厂笔试特别看重的一点。#include stdio.h #include stdlib.h int main(void) { FILE *fp fopen(data.txt, r); if (fp NULL) { perror(fopen); exit(EXIT_FAILURE); } char buf[256]; while (fgets(buf, sizeof(buf), fp) ! NULL) { fputs(buf, stdout); // 把读取的每一行输出到终端 } if (ferror(fp)) { perror(fread error); } fclose(fp); return 0; }写文件时常用fwrite和fprintf。fwrite适合写二进制数据原型是size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);它返回实际写入的元素个数必须和nmemb比较来确认是否写成功。还有一个容易被忽略的点fclose之后不要把FILE *指针留着再次使用因为文件描述符可能已被复用。笔试如果出找出下列代码中的错误这种fclose后继续使用指针的选项是标准的陷阱。3.3 scanf死循环问题线上笔试环境的经典翻车现场很多同学在做在线笔试题时会遇到scanf读入失败陷入死循环的情况。比如需要读入一个整数但用户不小心输入了字母scanf返回0而不消耗输入后面的代码用这个未被赋值的变量去计算导致结果错乱。规范的写法是检查scanf的返回值int n; if (scanf(%d, n) ! 1) { // 处理输入错误 while (getchar() ! \n); // 清空输入缓冲区 // 然后重新读或者直接报错退出 }笔试环境里一般输入数据都是保证格式正确的但你写的程序难免要处理文件末尾没有更多数据的情况所以while (scanf(%d, n) ! EOF)这种读入模式必须非常熟练。如果想读入一行字符串尽量不要用gets因为它不安全在C11标准里已经被移除了用fgets更安全。但要注意fgets会把换行符也读进来通常需要手动去掉结尾的\n。3.4 C库字符串函数的手写实现思路笔试常考但要注意边界c语言字符串函数和c语言字符数组操作函数是热搜词。笔试有时会直接让你实现strcpy、strcat、strcmp这些库函数。很多同学觉得这些函数太简单但实际写起来丢分的大有人在。以strcpy为例最简单的版本是char *my_strcpy(char *dest, const char *src) { if (dest NULL || src NULL) return NULL; char *ret dest; while ((*dest *src) ! \0) ; return ret; }这里有几个考点。返回值必须是最开始保存的dest而ret的存在就是为了保存它。循环内部先赋值再判断等于把\0也复制过去了。另外src应该用const char *修饰这也是函数接口设计的一部分。不过在实际使用中更推荐使用strncpy但它也有自己的问题如果src比n短strncpy会用\0填充剩余部分如果src比n长strncpy不会自动追加\0这就非常容易被忽视。所以笔试时要看清楚题目到底让你实现哪个函数以及是否要求考虑目标缓冲区的大小。4. 内存管理与结构体大厂笔试最看重的底层素养4.1 malloc、calloc、realloc、free的区别不止是名字不同c语言内存管理是热搜词也是C方向笔试题和面试考察的重点。关于动态内存分配有几个核心点必须清晰malloc(size)分配size字节的内存不初始化内容是不确定的。calloc(n, size)分配n个大小为size的元素并且把分配的内存全部清零。realloc(ptr, new_size)调整之前分配的内存大小如果新大小小于旧大小多余部分会丢失如果扩大新增加部分的内容是不确定的。free(ptr)释放内存释放后指针应该置为NULL。笔试中常见的陷阱是int *p malloc(10 * sizeof(int)); if (p NULL) { // 处理内存不足 } // 忘记释放内存 - 内存泄漏 free(p); free(p); // 二次free未定义行为可能崩溃防止二次释放的正确做法是free(p); p NULL;。因为对NULL执行free是安全的C标准明确说明这是无操作。养成这个习惯可以避免很多悬垂指针问题。4.2 内存泄漏与悬垂指针面试官最爱追问的两种错误互联网大厂的C方向笔试虽然以选择题为主但编程大题里的内存管理问题会直接影响评分。常见的错误模式有三种内存泄漏分配了内存但没有释放。比如函数内部malloc一块内存返回给调用者后调用者忘记释放。悬垂指针指向的内存已经被释放。比如int *p malloc(sizeof(int)); free(p); *p 42; // 使用了悬垂指针未定义行为越界访问访问了分配范围之外的内存。这种错误在笔试题里通常不会直接写出来而是通过char buf[10]; strcpy(buf, too long string);这种形式来体现。判断一段代码是否有内存问题的基本方法就是每个 malloc 都要对应一个 free并且保证 free 之后代码不会再访问那块内存。这个习惯在笔试时能帮你快速排除掉很多错误选项。4.3 结构体内存对齐计算sizeof的完整步骤c语言结构体是热搜词结构体相关的笔试题中最经典的就是计算sizeof(struct)。很多人不理解为什么结构体的大小不等于所有成员大小的总和因为CPU访问内存时是按对齐单位来读取的。以64位Linux系统为例默认对齐规则是每个成员按自身大小对齐结构体的总大小必须是最大成员对齐数的整数倍。看一个例子struct Example { char a; // 偏移0 int b; // 对齐到4所以偏移是4a后面有3个填充字节 char c; // 偏移8 }; // 总大小12因为9不是4的整数倍所以补到12计算步骤很简单找最大对齐数这里是int的4字节。每个成员的偏移量必须是自身大小的整数倍。结构体总大小必须是最大对齐数的整数倍。如果把成员顺序改成int b; char a; char c;大小就变成8字节因为两个char可以连续排放4116再补到8字节的整数倍就是8。这就是面试常说的调整成员顺序可以减少内存填充。笔试时如果能看出这种优化点说明你对结构体内存布局是真理解了。4.4 栈上数组和堆上数组生命周期与大小限制完全不同网上常有人问 为什么我定义一个很大的数组程序会崩其实就是在栈上分配了过多内存。在主流平台上线程栈大小一般是8MB左右栈上开int a[1000000]就是4MB可能勉强能过但再大就容易栈溢出。堆上分配则自由得多只要系统内存够用几十甚至几百MB都行。void func(void) { int a[1000000]; // 栈上分配可能栈溢出 int *p malloc(1000000 * sizeof(int)); // 堆上分配没问题 // 用完之后 free(p) }了解这一点对笔试的查错题非常有帮助。如果代码里出现了一个很大的局部数组然后程序在运行时崩溃了你要能迅速联想到局部变量分配在栈上可能超过了栈大小限制。在嵌入式C的开发场景中这个知识点更关键因为嵌入式环境的栈空间往往更小。5. 编程大题的完整拆解日期计算、数组处理与嵌入式C的综合题思路5.1 经典日期题输入年月日计算这是这一年的第几天这个题目在热词里明确出现了而且是从两种方法优化的角度来搜索的。题目描述通常是输入一个日期的年、月、日计算并输出这天是该年的第几天。最直观的思路是先把前几个月的天数累加再加上当前月的日数然后判断是否闰年。判断闰年时要注意普通年份能被4整除且不能被100整除是闰年世纪年份必须能被400整除才是闰年。方法一使用一维数组每到一个月份临时判断闰年去改2月的天数。int days_in_month[] {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int day_of_year(int year, int month, int day) { int leap (year % 4 0 year % 100 ! 0) || (year % 400 0); int total day; for (int i 0; i month - 1; i) { total days_in_month[i]; if (i 1 leap) total 1; // 2月在闰年加一天 } return total; }方法二用一个二维数组直接把平年和闰年的每月天数存起来查表即可。static const int days[2][12] { {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; int day_of_year(int year, int month, int day) { int leap (year % 4 0 year % 100 ! 0) || (year % 400 0); int total day; for (int i 0; i month - 1; i) { total days[leap][i]; } return total; }笔试时建议用第二种因为不容易漏掉闰年的判断而且代码更清晰。这里还有一个常见的变形题给定一年中的第几天和年份求对应的月日。这种题就是反过来查表属于同一类考点。把这两道题放在一起练日期相关的逻辑基本能拿下了。5.2 数组处理类编程题排序、去重、与多边形面积计算热搜词里出现了c语言多边形这通常对应的是计算多边形面积的问题。如果你在编程大题里遇到给定n个顶点坐标求多边形面积思路一般是用鞋带公式Shoelace formula或者三角形剖分计算。代码不复杂double polygon_area(double x[], double y[], int n) { double area 0.0; for (int i 0; i n; i) { int j (i 1) % n; area (x[i] * y[j] - x[j] * y[i]); } if (area 0) area -area; return area / 2.0; }这里要注意的是顶点顺序如果是逆时针给出计算结果为正顺时针则结果为负所以取绝对值。这个公式在选择题里也偶尔出现因为可以用很短的代码算出面积考察对循环取模边界的理解。另外数组去重也是常见题。要求把数组中的重复元素去掉返回去重后的数组长度。思路有排序后原地去重和哈希法两种。在笔试环境中如果限制C语言哈希需要自己实现一个简单的数组计数所以排序后去重更常用int remove_duplicates(int arr[], int n) { if (n 0) return 0; // 先排序略 int j 1; for (int i 1; i n; i) { if (arr[i] ! arr[j - 1]) { arr[j] arr[i]; } } return j; }5.3 嵌入式C综合题热敏电阻温度传感器的C语言实现热词里有热敏电阻制作温度传感器的c语言虽然爱奇艺这类互联网公司的笔试题不太会直接考传感器硬件但嵌入式方向的C笔试题会考而且思路可以迁移到一般的编程大题上。这道题通常的思路是通过ADC读取热敏电阻的电压值然后根据分压电路和热敏电阻的阻值-温度关系通常是Steinhart-Hart方程计算温度。在C语言中最常见的工程做法是查表法因为直接计算公式可能涉及浮点运算在MCU上执行较慢。把阻值和温度的关系做成一个查表数组通过线性插值来计算中间值。float get_temperature(float resistance) { // 查表假设table_res[i] 和 table_temp[i] 对应 for (int i 0; i TABLE_SIZE - 1; i) { if (resistance table_res[i] resistance table_res[i 1]) { float ratio (resistance - table_res[i]) / (table_res[i 1] - table_res[i]); return table_temp[i] ratio * (table_temp[i 1] - table_temp[i]); } } return -1.0f; // 超出范围 }这道题考察的重点其实是你应该知道不能用复杂的数学函数硬算而要选择适合嵌入式环境的查表加插值方案。笔试时看到类似实现一个空调控温模块的C程序这种题本质都是在考你如何把现实问题抽象成C语言代码如何处理浮点和整形的精度问题以及如何设计合理的函数接口。5.4 在线判题的时间限制C/C 1000ms其他语言翻倍意味着什么热词中出现了[gesp202603 七级] 物流网络和[gesp202503 六级]环线题目标签里明确写了时间限制: c/c 1000ms,其他语言 2000ms。这种限制在校招笔试的在线判题系统里也很常见。C/C 的时间限制之所以比解释型语言宽松两倍是因为编译型语言本身执行效率就高。但这也提醒我们笔试程序设计时不能只追求能跑还要在意时间复杂度和常数优化。比如冒泡排序在数据量小的时候没问题如果数据量到10万O(n^2)的算法就一定会超时。所以编程大题如果涉及排序优先写快速排序或者直接调用qsort自己实现时要注意递归深度和O(n log n)的平均复杂度。在线判题环境还有一个特点程序从标准输入读取数据把结果输出到标准输出不能有多余的提示语句。很多同学在本地测试时习惯了printf(请输入:)在提交时忘了删掉结果那些输出被当成答案的一部分导致格式错误。我建议平时练习时就用命令行重定向的方式模拟判题./a.out input.txt output.txt养成不带任何多余输出的习惯。6. 备考期间的实战建议与容易忽略的细节6.1 开发环境的选择VS Code、Eclipse CDT 与在线判题的区别热词里出现vscode c语言环境配置和eclipse安装c语言插件说明不少同学正在折腾本地开发环境。VS Code 配置C语言环境的核心是装好C/C扩展并安装编译器Windows 下推荐 MinGW-w64macOS 下用 Xcode Command Line Tools 自带的 clangLinux 下用 gcc。配置好tasks.json和launch.json之后按 F5 就能编译调试。不过要提醒的是本地环境的编译选项通常比较宽松有的同学用了-stdc99有的用了默认的 GNU11但校招笔试的在线编译环境一般是你不可控的。所以建议在练习时就带上-Wall -Wextra -stdc99这些参数主动把警告当成错误来对待。平时代码里不要使用gets、itoa这类非标准函数否则可能在其他平台上编译不过。6.2 代码规范与自测习惯笔试中怎么快速检查边界编程大题写完之后千万不要立刻交卷一定先花1到2分钟在脑子里跑一遍测试用例。最值得检查的边界包括输入的最小值 / 最大值。比如日期题中的1月1日和12月31日。数组长度为0或1的情况。指针参数可能为NULL的情况。文件操作返回NULL或写入失败的情况。如果时间充裕可以在本地把这几组测试数据实际跑一遍验证输出是否符合预期。这个习惯能帮你发现很多隐藏的bug。C语言的笔试环境里没有IDE的自动补全和智能提示所以核心库函数的函数签名要记牢。比如strcmp返回0表示相等返回正数表示第一个字符串更大返回值不一定是1或-1而是比较到不同字符时对应的ASCII差值。很多人在这个细节上吃亏。6.3 常见误区总结刷题多但不总结等于白刷很多人准备笔试时喜欢疯狂刷题但刷完后不整理错题不回顾知识点同一类坑反复踩。我见过不少同学在牛客网上刷了上百道题笔试成绩却不理想原因就是题目稍微变形就认不出来了。我的建议是建立自己的错题本按知识点分类每道错题记录三件事考点是什么、我错在哪、正确思路是什么。整理完后再把这些题目讲给别人听如果能讲明白说明你真的掌握了。这种方法比单纯刷题有效得多。6.4 最后的冲刺安排以这套爱奇艺题为中心做扩展如果你离笔试还有两到三周可以把经典的校招C方向笔试题当作中心来复习。以这套爱奇艺2019年C方向笔试题A为例做完后不要对完答案就结束而要问自己这道选择题考察的是哪个知识点我在多少分钟内做出来的如果这题变一下条件我还会不会把每一道题对应的知识点都列出来然后对照我上面提到的考点表进行查漏补缺。比如字符串逆序练熟了就接着练习单词反转、回文判断、最长公共前缀这些变体日期计算练熟了就练判断两个日期之间的天数、给定第几天求日期这些变体。这样才是真正的举一反三。根据我个人的经验秋招笔试的难度这几年虽然在上涨但C语言方向的核心考察范围并没有太大变化仍然是那几座大山。与其焦虑题目多变不如把基础原理真正吃透。这份爱奇艺2019年的笔试题之所以值得反复做就是因为它每一道题都能勾起一个值得深入的知识点。你如果能按照这个思路去复盘等到笔试时看到任何题目都能在几秒钟内判断出它到底在考什么自然也就能从容应对了。
返回列表