程序员基础题先分三层:数据、流程、表示
第一层是数据:变量、常量、数据类型、数组。第二层是流程:顺序、分支、循环、函数、异常处理、递归。第三层是计算机内部表示:二进制、十六进制、补码。按这三层复盘,比按题号背更清楚。
初级题往往不会把概念考得很深,但会考边界:数组最后一个下标是多少,循环什么时候结束,递归什么时候停止,负数补码怎么表示。边界一混,简单题也会错。
| 复盘层次 | 常见考点 | 容易错的点 |
|---|---|---|
| 数据 | 变量、常量、数组、数据类型 | 把变量名相同误认为作用域相同 |
| 流程 | if-else、循环、函数、递归、异常处理 | 不看终止条件和返回值 |
| 表示 | 二进制、十六进制、补码 | 把原码、反码、补码混用 |
| 读题 | 流程图、短路求值、边界条件 | 只看选项,不先模拟执行过程 |
变量、分支和循环:先看它控制了什么
变量用于保存会变化的数据,常量用于保存不应改变的值。分支结构适合处理“满足条件走一条路,不满足走另一条路”的场景;循环结构适合处理重复执行,直到次数达到或条件不满足。
做这类题时,不要只背 if、for、while 的名字。先看题干要表达的是选择、重复,还是保存数据。把程序结构和真实动作对应起来,题目会清楚很多。
数组和函数:下标、返回值最容易丢分
数组题的核心是下标范围。很多语言数组下标从 0 开始,长度为 n 的数组,常见有效下标是 0 到 n-1。访问 n 这个下标,就可能越界。
函数题要看返回值的用途。返回值不是为了让函数名字好看,而是把处理结果交回调用者。异常处理则用于处理运行中可能出现的错误,让程序有机会按预期方式恢复或提示。
递归和短路求值:要模拟执行过程
递归题先问两个问题:什么时候停?每次调用问题有没有变小?如果没有终止条件,函数会不断调用自身,最终可能导致栈溢出。递归不是把循环写得高级一点,而是要有清晰边界。
短路求值题则要看表达式是否已经能确定真假。如果前半部分已经决定结果,后半部分可能不会执行。考试常用这个点考除零、空指针、数组越界等风险。
进制和补码:先写步骤,不要心算硬猜
二进制转十六进制时,可以从右向左每 4 位一组,不足补 0,再把每组转成 0 到 F。这个方法比直接心算稳很多。
补码题要特别小心负数。8 位补码表示负数时,常见步骤是先写正数二进制,再取反加一。题目如果给定位数,一定按定位数处理,不要少写前导位。
相关题目解析
下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。
- 变量和常量有什么区别?变量 / 数据类型
- 什么时候应该使用循环结构?循环结构 / 控制结构
- 数组下标越界通常是什么原因造成的?数组下标越界
- if-else 分支结构适合处理什么问题?分支结构 / if else分支结构
- 程序流程图中的开始和结束通常用什么符号表示?程序流程图 / 程序流程图符号
- 函数返回值主要用来做什么?函数 / 返回值
- 程序中的异常处理主要解决什么问题?异常处理 / try catch
- 局部变量和全局变量主要区别是什么?变量作用域 / 局部变量
- 逻辑表达式中的短路求值是什么意思?短路求值 / 逻辑表达式
- 递归函数为什么必须有明确的终止条件?递归函数 / 终止条件
- 二进制 10110110 转成十六进制是多少?二进制 / 十六进制
- -5 的 8 位二进制补码是多少?补码 / 二进制