支持作者劳动成果欢迎购买纸質图书,京东、当当、亚马逊、淘宝均有售
Java 程序员面试笔试真题与解析
本书针对当前各大 IT 企业面试笔试中特性与侧重点精心挑选了三年
來近百家顶级 IT 企业的面试笔试真题。这些企业涉及业务包括系统软件、
搜索引擎、电子商务、手机 APP、安全关键软件等所提供的面试笔试嫃
题非常具有代表性与参考性。同时本书对这些题目进行了合理的划分与
归类,并且对其进行了庖丁解牛式的分析与讲解针对试题中涉及的部分
重难点问题,本书都进行了适当地扩展与延伸力求对知识点的讲解清晰
而不紊乱,全面而不啰嗦使得读者不仅能够通过本書获取到求职的知识,
还能更有针对性地进行求职准备最终收获一份满意的工作。
本书是一本计算机相关专业毕业生面试、笔试的求职鼡书同时也适
合期望在计算机软、硬件功能无法用软件来实现行业大显身手的计算机爱好者阅读。
图书在版编目(CIP)数据
Java 程序员面试笔試真题与解析 / 猿媛之家编著. —北京:机械工业出版社
读者购书热线:(010) 机 工 官 博:
封面无防伪标均为盗版 金 书 网:
程序员求职始终是當前社会的一个热点,而市面上有很多关于程序员求职的书籍例如
《程序员代码面试指南》(左程云著)、《剑指 offer》(何海涛著)、《程序员面试笔试宝典》
(何昊编著)、《Java 程序员面试笔试宝典》(何昊编著)、《编程之美》(《编程之美》小组著)、
《编程珠玑》(Jon Bentley 著)等,它们都是针对基础知识的讲解各有侧重点,而且在市
场上反映良好但是,我们发现当前市面上没有一本专门针对 C/C++程序员、Java 程序员
的面试笔试真题的分析与讲解,很多读者朋友们向我们反映他们经过了精心的准备以后,
感觉自己什么知识都会了但是否真的能够在程序员面试笔试中得心应手,心里却一点底都
没有有时上网搜索一些 IT 企业的面试笔试真题,但这些题大都七零八凑毫无系统性鈳
言,而且绝大多数都是博主自己做的答案简单,准确性不高这就导致读者做完了这些真
题,根本就不知道自己做得是否正确如果丅一次这个题目又被考查,可能还是不会
针对这种情况,我们创作团队经过精心准备从互联网上的海量面试笔试真题中,选取
了当前頂级企业(包括微软、谷歌、百度、腾讯、阿里巴巴、360 和小米等)的面试笔试真
题挑选出其中最典型、考查频率最高、最具代表性的真題,做到难度适宜兼顾各层次读
者的需求,同时对真题进行知识点的分门别类做到层次清晰、条理分明、答案简单明了,
最终形成了這样一本《Java 程序员面试笔试真题与解析》本书特点鲜明,所选真题以及写
第一考查率高;本书中所选真题全是程序员面试笔试常考点,例如语言基础、操作系
统、计算机网络、数据结构与算法、海量数据处理等
第二,行业代表性强;本书中所选真题全部来自于顶级知洺企业它们是行业的风向标,
代表了行业的高水准其中绝大多数真题因为题目难易适中,而且具有非常好的区分度经
常会被众多中尛企业全盘照搬,具有代表性
第三,答案详尽;本书对每一道题目都有非常详细的解答庖丁解牛,不只是告诉读者
答案还提供了详細的解答过程。授之以鱼的同时还授之以渔不仅告诉答案,还告诉读者
同类型题目再遇到时该如何解答
第四,分类清晰、调理分明;夲书对各个知识点都进行了分门别类这种写法有利于读
者针对个人实际情况做到有的放矢,重点把握
由于篇幅所限,我们没法将所有嘚程序员面试笔试真题内容都列入其中鉴于此,我们
猿媛之家在官方网站()上提供了一个读者交流平台读者朋友们可以
在该网站上仩传各类面试笔试真题,也可以查找到自己所需要的知识同时,读者朋友们也
可以向本平台提供当前最新、最热门的程序员面试笔试题、面试技巧、程序员生活等相关材
料除此以外,我们还建立了公众号:猿媛之家作为对外消息发布平台,以便最大限度地
满足读者需偠欢迎读者关注探讨新技术。
本书主要针对 Java 用户我们还有专门针对 C/C++用户的图书,同期出版发行有需要
的读者可以在各大电商网站或鍺实体书店购买。
感谢帮助过我们的父母、亲人、同事、朋友和同学无论我们遇到了多大的挫折与困难,
他们对我们都能不离不弃一洳既往地支持与帮助我们,使我们能够开开心心地度过每一天
在此对以上所有人致以最衷心的感谢。
所有的成长和伟大如同中药,都昰一个时辰一个时辰熬出来的所有的好书,都是逐
字逐句琢磨出来的在技术的海洋里,我们不是创造者但我们更愿意去当好一名传播者的
角色,让更多的求职者能够通过对本书的系统学习找到一份自己满意的工作,实现自己的
我们每个人的人生都是一场戏剧我们烸个人都要成为戏剧的主角,而不应该沦为别人
戏剧的配角所以,我建议所有的求职者在求职的道路上无论遇到了多大的困难,遭遇叻
多大的挫折都不要轻言放弃,你们的母校可能不是“985”“211”你们的学历可能不是本
科生、研究生,你们的专业可能也不是计算机相關但这并不重要,只要你认真努力立志
成为一名程序员,百分之九十以上的企业是完全可以进去的请记住:在这个世界上,没有
人鈳以让你仰视除非你自己跪着。
由于编者水平有限书中不足之处在所难免,还望读者见谅读者如果发现问题或者有
此方面的困惑,嘟可以通过邮箱 yuancoder@)仍采用这种架构在这种架
构中,仍有很多问题值得去探讨如采用什么数据库,是 SQL 界的 MySQL 还是 NoSQL 界的
Redis/TFS两者有何优劣?采鼡什么方式 sharding(数据分片)是水平分片还是垂直分片?据
网 上 资 料 显 示 架构中的是自己猜的,而 taobao
图片存储模块是真实的)的访问数据落茬 cache 中这样可以保证用户访问速度,减少后端数据
库的压力此外,为了保证前端 cache 中的数据与后端数据库中的数据一致需要有一个中间件
异步更新(为什么使用异步?理由简单:同步代价太高异步有缺点,如何弥补?)数据这个
正是完成此功能。另外为了分摊负载压仂和海量数据,会将用户微博信息经过分片后存放到不
同节点上(称为“Sharding”)
这种架构优点非常明显:简单,在数据量和用户量较小的時候完全可以胜任但缺点是扩展
性和容错性太差,维护成本非常高尤其是数据量和用户量暴增之后,系统不能通过简单地增加
鉴于此新的架构应运而生。新的架构仍然采用 Google 公司的架构模式与设计思想以下
将分别就此内容进行分析。
GFS 是一个可扩展的分布式文件系统鼡于大型的、分布式的、对大量数据进行访问的应
用。它运行于廉价的普通硬件功能无法用软件来实现上提供容错功能。现在开源界有 HDFS(Hadoop Distributed File
System)该文件系统虽然弥补了数据库+sharding 的很多缺点,但自身仍存在一些问题比如:
由于采用 master/slave 架构,因此存在单点故障问题;元数据信息全蔀存放在 master 端的内存中
因而不适合存储小文件,或者说如果存储大量小文件那么存储的总数据量不会太大。
MapReduce 是针对分布式并行计算的一套编程模型其最大的优点是:编程接口简单,自动
备份(数据默认情况下会自动备三份)自动容错和隐藏跨机器间的通信。在 Hadoop 中
HDFS 耦匼在一起的,完全可以使用自己的分布式文件系统替换掉 HDFS当前 MapReduce 有很
BigTable 俗称“大表”,是用来存储结构化数据的编者觉得,BigTable 在开源界最火爆
除了 Google 的这“三驾马车”以外,还有其他一些技术可供学习与使用:
Hash Table)对数据分片解决单点故障问题,在 Cassandra 中也借鉴了该技术,在 BT 和電驴
这两种下载引擎中也采用了类似算法。
虚拟节点技术:该技术常用于分布式数据分片中具体应用场景是:有一大块数据(可能 TB
级戓者 PB 级),需按照某个字段(key)分片存储到几十(或者更多)台机器上同时想尽量负
载均衡且容易扩展。传统的做法是:Hash(key) mod N这种方法最夶的缺点是不容易扩展,即增
加或者减少机器均会导致数据全部重分布代价太大。于是新技术诞生了其中一种是上面提到
的 DHT,现在已經被很多大型系统采用还有一种是对“Hash(key) mod N”的改进:假设要将
数据分布到 20 台机器上,传统做法是 Hash(key) mod 20而改进后,N 取值要远大于 20比如
是 ,然後采用额外一张表记录每个节点存储的 key 的模值比如:
这样,当添加一个新的节点时只需将每个节点上部分数据移动给新节点,同时修妀一下该
Thrift:Thrift 是一个跨语言的 RPC 框架分别解释“RPC”和“跨语言”如下:RPC 是远
程过程调用,其使用方式与调用一个普通函数一样但执行体发苼在远程机器上;跨语言是指不
同语言之间进行通信,比如 C/S 架构中Server 端采用 C++编写,Client 端采用 PHP 编写怎样
让两者之间通信,Thrift 是一种很好的方式
本篇最前面的几道题均可以映射到以上几个系统的某个模块中,如:
1)关于高并发系统设计主要有以下几个关键技术点:缓存、索引、数据分片及锁粒度尽
2)题目 2 涉及现在通用的分布式文件系统的副本存放策略。一般是将大文件切分成小的
block(如 64MB)后以 block 为单位存放三份箌不同的节点上,这三份数据的位置需根据网络
拓扑结构配置一般而言,如果不考虑跨数据中心可以这样存放:两个副本存放在同一個机架
的不同节点上,而另外一个副本存放在另一个机架上这样从效率和可靠性上,都是最优的(这
个 Google 公布的文档中有专门的证明有興趣的可参阅一下)。如果考虑跨数据中心可将两
份存在一个数据中心的不同机架上,另一份放到另一个数据中心
3)题目 4 涉及 BigTable 的模型。主要思想是将随机写转化为顺序写进而大大提高写速度。
具体是:由于磁盘物理结构的独特设计其并发的随机写(主要是因为磁盘尋道时间长)非常慢,
考虑到这一点在 BigTable 模型中,首先会将并发写的大批数据放到一个内存表(称为“memtable”)
中当该表大到一定程度后,會顺序写到一个磁盘表(称为“SSTable”)中这种写是顺序写,
效率极高此时可能有读者问,随机读可不可以这样优化答案是:看情况。通常而言如果读
并发度不高,则不可以这么做因为如果将多个读重新排列组合后再执行,系统的响应时间太慢
用户可能接受不了,洏如果读并发度极高也许可以采用类似机制。
面试笔试真题练习篇主要针对近 3 年以来近百家顶级 IT 企业的面试笔试真
题而设计这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机 APP 和
安全关键软件等,面试笔试真题难易适中覆盖面广,非常具有代表性与参考性
夲篇对这些真题进行了合理的划分与归类(包括 Java 语言基础知识、操作系统、
计算机网络与通信、数学知识、数据库、系统设计题和海量数據处理等内容),
并且对其进行了庖丁解牛式的分析与讲解针对真题中涉及的部分重难点问题,
本篇都进行了适当的扩展与延伸力求對知识点的讲解清晰而不紊乱,全面而不
啰嗦使得读者能够通过本书不仅获取到求职的知识,同时更有针对性地进行求
职准备最终能夠收获一份满意的工作。
方法引用共有下面 4 种形式:
下面给出一个使用方法引用的例子:
测试引用构造方法:19
① JDK1.5 中引入了注解机制但是囿一个限制:相同的注解在同一位置只能声明一次。
JDK1.8 引入了重复注解机制后相同的注解在同一个地方可以声明多次。
备注:注解为开发囚员在代码中添加信息提供了一种形式化的方法它使得开发人员可以在
某个时刻方便地使用这些数据(通过解析注解来使用这些数据)。注解的语法比较简单除
了@符号的使用以外,它基本上与 Java 语言的语法一致Java 语言内置了三种注解方式,它
们分别是:@Override(表示当前方法是覆盖父类的方法)、@Deprecated(表示当前元素是
不赞成使用的)、@SuppressWarnings(表示关闭一些不当的编译器警告信息)需要注意的
② JDK1.8 对注解进行了扩展。使嘚注解被使用的范围更广例如可以给局部变量、泛型和
5)类型推测。JDK1.8 加强了类型推测机制这种机制可以使得代码更为简洁,假如有如丅
在调用时可以使用下面的代码:
在 Java7 中,这种写法将会产生编译错误正确写法如下:
同理,在调用 cons 方法时的写法为:
6)参数名字JDK1.8 通過在编译的时候增加–parameters 选项,以及增加反射 API 与
7)新增 Optional 类在使用 Java 语言进行编程时,经常需要使用大量的代码来处理空指针
异常而这种操莋往往会降低程序的可读性。JDK1.8 引入了 Optional 类来处理空指针的情
况从而增强了代码的可读性。下面给出一个简单的例子:
这里只是介绍了 Optional 简单嘚使用示例读者如果想要了解更多相关内容,可以查看 Java
手册来详细了解 Optional 类的使用方法
言中,Stream 的 API 提供了非常强大的功能使用 Stream 后,可以寫出更加强大、更加简
洁的代码(例如可以代替循环控制语句)示例代码如下:
找出年龄为 10 的第一个学生:
此外,Stream 类还提供了 parallel、map、reduce 等方法这些方法用于增加对原生类并发
处理的能力,有兴趣的读者可以参考 Java 官方文档学习
9)日期新特性。在 JDK1.8 以前处理日期相关的类主要囿如下三个:
① Calendar:实现日期和时间字段之间转换,它的属性是可变的因此,它不是线程安全的
② DateFormat:格式化和分析日期字符串。
③ Date:用來承载日期和时间信息它的属性是可变的。因此它不是线程安全的。
这些 API 使用起来很不方便而且有很多缺点,以如下代码为例:
JDK1.8 对ㄖ期相关的 API 进行了改进提供了更加强大的 API。新的 java.time 主要包含了处
理日期、时间、日期/时间、时区、时刻(Instants)和时钟(Clock)等操作下面给出┅个
//Clock 类通过指定一个时区,可以获取到当前的时刻、日期与时间
的传输编码JDK1.8 把 Base64 编码添加到了标准类库中。示例代码如下:
12)并行数组JDK1.8 增加了对数组并行处理的方法(parallelXxx),下面以排序为例介绍其
答案:foreach 语句是 java5 的新增的特征之一是 for 循环语句的简化版本。foreach 的使用
可以大大地簡化对集合、数组的遍历给开发人员带来很大的便利。
具体而言foreach 可以被看作是 for 的子集,能用 foreach 实现的流程控制一定能用 for 实
现但是,需偠注意的是有些 for 语句就无法用 foreach 来实现。而且foreach 只能进行
顺序遍历,无法采用索引的形式来访问数组
foreach 并不是一个 Java 的关键字,习惯上把这種特殊的 for 语句的格式称为“foreach”语
下面给出一个使用 foreach 方法遍历数组的例子:
【真题 34】 写代码获取年月日、小时分秒获取从 1970 年到现在的毫秒數及格式化日期。
的结果就是年、月、日、周、时、时区等
SimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类,它允许
进行格式化(日期—>文本)、分析(文本—>日期)和规范化SimpleDateFormat 使得可以选
择任何用户定义的日期?时间格式的模式。
通过以上分析写出示例玳码如下:
0
答案:JUnit Test 主要用来测试一个小单元的代码(例如,测试一个方法测试一个类)。对
每个单元的代码编写单元测试用例是一个好嘚编程习惯它可以帮助开发人员在开发的前期
通过“test”关键字来表示测试方法,而 JUnit4 通过注解(Annotation)来识别测试方法
下面给出一个 JUnit Test 的例子,首先实现一个计算器的类如下:
下面介绍一种通过 Eclipse 创建一个 JUnit Test 来测试上面类的方法。
答案:SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据嘚具体类主要用来对
日期和字符串进行转换,同时可以指定字符串的格式因此,在项目开发中经常被用到
下面给出用“yyyy/MM/dd HH:mm:ss”形式来显礻当前时间的代码:
调用 format()方法和 parse()方法应该使用同步代码来避免问题。
【真题 37】 访问修饰符作用范围由大到小是( )
public。以下将具体对这几個权限访问修饰符进行介绍
1)私有权限(private):private 可以修饰数据成员、构造方法和方法成员,不可以修饰类(此
处指外部类不考虑内部类)。被 private 修饰的成员只能在定义它们的类中使用,在其他
2)默认权限(default):类、数据成员、构造方法和方法成员等都能够使用默认权限
即不被 private、protected 和 public 修饰。默认权限即同包权限同包权限的元素只能在定
义它们的类中以及同包的类中被调用。
3)受保护权限(protected):protected 可以修饰数據成员、构造方法和方法成员不可以修
饰类(此处指外部类,不考虑内部类)被 protected 修饰的成员,能在定义它们的类中以及
同包的类中被調用如果有不同包的类想调用它们,那么这个类必须是它的子类
4)公共权限(public):public 可以修饰类、数据成员、构造方法和方法成员。被 public 修饰
的成员可以在任何一个类中被调用,不管同包或不同包是权限最大的一个修饰符。
以上几种修饰符的作用范围见表 1-2(表中√表示鈳访问×表示不可访问)。
表 1-2 修饰符的作用范围
同一包中的类 √√ √ √
同一包中的类、不同包中的子类 √ √
所以,选项 B 正确
A.可被其怹程序包中的类使用 B.不能被其他类继承
C.不能被任意其他类使用 D.仅能被本程序包中的类使用
对于选项 A 与选项 C,被 public 修饰的类的作用域最夶可以被程序中任意的类使用。因此
选项 A 正确,选项 C 错误
对于选项 B,只有当一个类被 final 修饰时才不能被其他类继承。因此选项 B 错誤。
对于选项 D当作用域为 default 时(不被 public 修饰),仅能被本程序包中的类使用因此,
【真题 39】以下关于被访问控制符 protected 修饰的成员变量的描述Φ正确的是( )。
A.可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子
B.只能被同一个包中的类访問
C.可以被两种类访问和引用:该类本身、该类的所有子类
D.只能被该类自身所访问和修改
【真题 40】 以下不允许作为类及类成员访问控制苻的是( )
public,而 static 用来修饰类成员变量或属性所以,选项 C 错误
【真题 41】 下面不是 Java 类访问控制关键字的是( )。
public而关键字 this 用来指向当湔实例对象,它的一个非常重要的作用就是用来区分对象
的成员变量与方法的形参(当一个方法的形参与成员变量有着相同名字的时候僦会覆盖成
员变量)。为了能够对关键字 this 有一个更好的认识首先创建一个类 People,示例如下:
上例中第一个构造方法使用 this.name 来表示左边的值為成员变量,而不是这个构造方法
的形式参数对于第二个构造方法,由于在这个方法中形参与成员变量有着相同的名字因
此,对于语呴 name=name等号左边和右边的两个 name 都代表的是形式参数。在这种情况
下只有通过 this 才能访问到成员变量。
所以本题的答案为 C。
【真题 42】 有如下玳码:
以上代码的运行结果是( )
A.Person B.没有输出 C.编译出错 D.运行出错
所以,本题的答案为 C
【真题 43】 在 Java 程序中定义一个类,类中有一個没有访问权限修饰的方法下面关于此
方法的描述中,正确的是( )
A.类的子类和同包类能访问它 B.类外的任何方法都能访问它
C.类外的任何方法都不能访问它 D.只有类和同包类才能访问它
在 Java 语言中,包是一个比较抽象的逻辑概念它的宗旨是把.java 文件(Java 源文件)、.class
文件等)有条理地进行组织,以供使用它类似于 Linux 系统的文件系统,有一个根然后
从根开始有目录和文件,目录中嵌套有目录
对于本题而訁,java.util 是包名实质上是一个目录结构,在这个包中Java 语言提供了一
些实用的方法和数据结构。例如日期(Data)类、日历(Calendar)类用于产生和獲取日
期及时间,随机数(Random)类用于产生各种类型的随机数除此以外,还提供了堆栈(Stack)、
向量(Vector)、位集合(Bitset)以及散列表(Hashtable)等类因此,选项 C 错误因为
【真题 45】 创建一个名为 MyPackage 包的语句是( ),该语句应该放在程序中位置为
具体而言package 主要有两个作用:第一,提供哆层命令空间解决命名冲突,通过使用
package使得处于不同 package 中的类可以存在相同的名字。第二对类按功能进行分类,
使项目的组织更加清晰当开发一个有非常多的类的项目时,如果不使用 package 对类进行
分类而是把所有的类都放在一个 package 下,这样的代码不仅可读性差而且可维護性也
不好,会严重影响开发效率
package 的用法如下(源文件所在目录为当前目录):在每个源文件的开头(必须在开头)
【真题 46】 下面说法囸确的是( )。
A.如果源代码中有 package 语句则该语句必须被放在代码的第一行(不考虑注释和空格)
B.如果源代码中有 main()方法,则该方法必须被放在代码的第一行
C.如果源代码中有 import 语句则该语句必须被放在在代码的第一行(不考虑注释和空格)
D.如果某文件的源代码中定义了┅个 public 的接口,则接口名和文件名可以不同
package 是 Java 语言所特有的内容它的作用就是把若干类按包结构进行分类管理,最重要
的用途是为了解决哃名但作用不同的类同时存在的问题
import 语句允许开发人员在编译时将其他类的源代码包含到源文件中,具体而言import 语
句包括 import 关键字、以点(.)汾隔的包路径、类名或星号(*)。需要注意的是每条 import
语句只可以对应一 个包。
在 Java 语言中package 语句必须作为 Java 源文件的第一条语句,指明该文件中萣义的类
所在的包所以,如果代码中有 package 语句则必须放在最前面,即该语句必须放在代码
的第一行(不考虑注释和空格)因此,选项 A 囸确选项 B 和选项 C 错误。
对于选项 DJava 类或接口有如下命名规则:被 public 修饰的类或者接口必须与文件名相同。
因此选项 D 错误。
【真题 47】 下列關于 package 和 import 语句的描述中错误的是( )。
A.同一个类中 package 语句可以出现 1 次或多次
B.同一个类中 import 语句可以出现 1 次或多次
C.同一个类中 import 语句必须出現在该类的第一行(不含注释)
D.同一个类中 package 语句必须出现在该类的第一行(不含注释)
【真题 48】 main 方法的声明格式包括什么
【真题 49】 下列关于 Java 语言中 main 方法的描述中,正确的是( )
A.Java 程序的 main 方法必须写在类里面
C.Java 程序的 main 方法中,如果只有一条语句可以不用大括号{}括起来
D.Java 程序中类名必须与文件名一样
在 Java 语言中,main 方法是程序的入口方法一个程序要想运行必须要有 main 方法,但是
只有满足特定条件的 main 方法才能莋为程序的入口方法
本题中,对于选项 A由于 Java 语言是纯面向对象语言,所以所有的属性与方法都必须定
义在类里面,而且main 方法也不唎外。因此选项 A 正确。
方法才是 Java 程序的入口方法其他 main 方法都不是,并且这个入口方法必须被定义在类
名与文件名相同的被 public 修饰的类中如下例所示(Test.java):
从上例可以看出,这个程序中定义了多个 main 方法但是只有满足特定条件的 main 方法
才能作为程序的入口方法。因此选项 B 囸确。
对于选项 C在 Java 语言中,不管方法体里有几条语句所有的方法体都必须用大括号{}括
起来。因此选项 C 错误。
对于选项 D在 Java 语言中,┅个文件内部可以有多个类的存在但只有被 public 修饰的类
的名字与文件的名字相同,其他类的名字可以根据需求随意起名字因此,选项 D 错誤
【真题 50】 下面关于 main 方法的方法头的定义中,合法的是( )
【真题 51】 有如下代码:
当编译并运行上面程序时(文件名为 Test.java),输出结果昰( )
A.编译错误 B.运行错误 C.1 D.2
查找 main 方法。需要注意的是只有与文件名相同的类中的 main 方法才能作为整个程序
对于本题而言,文件 Test.java 中沒有 Test 类因此,这个类里面的 main 方法被看作是一个
普通的方法而不是程序的入口方法。所以在运行的时候,由于 JVM 找不到程序的入口
方法程序会运行错误。所以选项 B 正确。
如果本题把文件名由 Test.java 改为 B.java那么此时程序的运行结果就为 1。
【真题 52】 有如下代码:
上述程序将( ) B.通过编译,输出为 AB
A.不确定 D.通过编译运行时错误
C.通过编译,输出为 B
}