简答题dongr

简答题
1.使用两种不同的编程语言A和B,编写代码逻辑完全相同的1-100求和程序X和Y,在同一台计算机上的分别运算这两段程序,对于CPU来说,这两个X和Y程序执行的机器指令序列是否相同?为什么?
不相同,机器指令序列通常是由0和1的二进制表示形式,不同的语言在转化成不同的二进制是不同的结果.
2.设计一个函数时,有哪些命名特别重要?列举说明
函数名,参数名能回答出“函数参数名”的,得3分
能回答出“参数名要能说明参数的意义或用途”或者“方便理解函数参数”的,得4分
考生能回答出设计函数时的其他注意事项,比如考虑作用域、返回值、局部变量命名、命名不能使用保留字等,酌情给1-7分。考察的是编码规范以及命名规则。
3.如何对引用类型的变量进行拷贝(克隆)?
简单罗列相关概念定义的不得分
■ 回答实现clone方法的,并给出详细做法的,给10分
■ 回答new新对象,然后逐个拷贝成员的,给10分
■ 用代码示例,逻辑有效的,得10分
■ 回答浅拷贝、深拷贝,以及相关概念定义的,不得分
■ 仅回答实现clone方法的,不得分
要对引用类型的变量进行拷贝需要进行深拷贝,重写clone方法,new一个新对象,然后对成员挨个拷贝
4.编译后的可执行程序以二进制代码的形式保存在磁盘上,CPU在执行这个程序时是否还要加载到内存?为什么?
CPU要运行的指令只能保存在内存中(控制器只能从内存中取出指令交由运算器执行),因此在运行程序前要将可执行程序加载到内存。程序运行前需要加载到内存,才能初始化进程。
◇ 程序运行时,操作系统会加载程序到内存。
◇ CPU只能从内存中读取指令执行。
◇ 磁盘上的程序需要经过内存,才能被CPU执行
◇ 其他能体现对程序运行过程理解的回答。
■ 回答的情形不是发生在编译时的,比如空指针、数组越界
5.为什么数字转字符串通常不会抛异常,字符串转数字容易抛异常?
回答数字0~9、小数点、正负号都在字符串范围内,因此都能转换成功。酌情得3-5分
◇ 回答字符串中的字符不一定都是数字中有效的字符,或者不符合数字的格式要求,因此可能转换失败。酌情得3-5分
数字转字符串是确定的,但是字符串转数字的格式是不确定的,可能不符合格式,就会抛出异常
6.如果有一门程序设计语言,任何变量都是全局的,那么使用这种编程语言开发时,程序员会面临哪些挑战?请举出至少两个方面。
线程安全问题
◇ 访问不受限制,定位问题时牵扯范围广,难度大
◇ 变量名不能重复、容易混淆、不好区分
◇ 修改代码时,如对全局变量赋值,影响范围极大,不利于测试
◇ 强耦合
◇ 其他合理的答案
7.如果把一种开发语言中的引用类型都改为值类型,可能会有哪些弊端?
赋值时需要进行对象的创建
◇ 占用更多内存
◇ 性能变差
◇ 引发大量的内存申请和回收处理
值类型更简单,但是不经济,会引发更多的对象创建、内存占用、克隆处理。
8.X博士设计了一种不区分变量“类型”的程序设计语言,这种语言可能会有什么问题呢?
因为没有类型导致操作、处理产生歧义、结果不确定
◇ 无法正确存储信息、分配空间等
◇ 阅读代码时无法确定处理意图
◇ 用代码示例可能的矛盾/歧义
◇ 其他合理的结论
类型是编程语言中的核心概念,是让计算机能正确处理信息的基础条件和必要信息。注意:弱类型语言也有类型,只是支持隐式转换而已。类型约定了信息代表的意义、存储方式以及处理方式。不区分类型,会造成信息存储、处理的歧义。举个例子:200.12,可能是一个小数(数值型),也可能是一个产品型号(字符串),无法界定。
9.通过控制台输出了变量M的值,那么屏幕上显示的M的值,和M在内存中存储的信息是否一样? 结合例子说明为什么?
变量在计算机内部的保存形式,和变量的输出形式之间有区别,存在转换关系。
◇ 日期、时间等变量在输出时会进行格式化
◇ 由于精度原因,对于小数会有误差
◇ 内存中对数据按照字节、二进制方式存储,显示到屏幕上转换成人类容易阅读的格式。
◇ 其他能体现对数据存储和显示理解的回答
题目讲解:
变量是程序设计语言中,对信息的一种保存格式和处理单位,变量输出到屏幕上时,会转换成适宜人理解、阅读的表现形式。比如 java中的日期,底层是用long存储,输出时会被格式化成年月日。
10.有一个0-9数字组成的字符串A,用函数转成整型后得到B,再将B用函数转成字符串C,那么C和A是否相等?举例说明为什么?
答“不一定”,能举例出前边带有0的字符串(比如:A= “099”)或类似情形的,得10分。
■ 回答地址不相等,但是内容/值/EQUALS相等的,得8分。
■ 回答字符串超过一定位数时不同的,不得分,因为第一次转换就会产生异常。
01如果转成整型就是1,再转就是1,不是01.
11.函数内局部变量中所保存的数据,在函数执行完毕后,是否一定会被销毁?为什么?
回答“不一定”,能表达出“保存的内容在栈上会被释放,保存在堆上的不会被立即释放”或者等价意思的,的得10分。
■ 回答“不一定”,能表达出“NEW出来的对象、引用类型的变量、RETURN引用类型的变量不会被立即销毁”或等价意思的,得10分。
■ 回答“一定”,且说明了“局部变量保存在栈中,在函数退出时失效”或等价意思的,得3分。
局部变量在对应的函数生命周期结束后就会被释放,如果存储的内容在栈上,则会被释放,如果所引用的内容存储在堆上,则需要手动释放。
12.某开发语言提供两种集合类型,集合类型A声明时需指定大小且不可变。集合类型B声明不能指定大小,但支持动态添加元素,现在要需要使用集合类型保存1000个整形数字
选择哪一种集合类型执行速度更快?为什么?
回答A类型更快,且解释了A类型一次分配好内存,B类型在添加元素时需要进行更多处理的,或者相类似表达的,
13.有两台计算机A和B,A的内存速度比B快10倍,B的CPU速度比A快10倍,磁盘速度一样,现在用A和B分别压缩相同的1GB大小的文件,那个更快?为什么?
文件压缩处理,属于计算密集型处理,同时由于文件较大,也依赖内存的访问速度,CPU需要持续从内存读取被压缩文件数据,处理后写入磁盘,在内存吞吐量满足一定速度的前提下,CPU越快压缩越快。
14.一个函数需要100个输入参数,应该怎样做才能减少输入参数的个数?
使用结构体:将相关的参数组合成一个结构体,然后传递该结构体作为单个参数。这有助于提高代码的可读性和可维护性。
STRUCT POINT {
INT X;
INT Y;
};
VOID DRAWCIRCLE(STRUCT POINT CENTER, INT RADIUS);
使用指针:通过指针传递参数可以避免函数调用中的参数过多。指针允许函数修改原始数据,而不是使用副本。这可以减少函数调用所需的参数数量。
VOID UPDATEVALUE(INT* PTR);
使用默认参数:为函数参数设置默认值可以使函数更加灵活,减少参数数量。通过省略某些参数,函数将使用默认值。
VOID PRINTMESSAGE(CONST CHAR* TEXT, INT LENGTH = 10);
使用可变参数:在C语言中,可以使用可变参数列表来处理任意数量的参数。通过在函数原型中使用省略号(…),可以传递任意数量的参数给函数。请注意,可变参数列表只能作为函数的最后一个参数。
VOID PRINTVALUES(INT NUMVALUES, …);
使用全局变量:全局变量可以在程序的任何位置访问,因此可以避免在函数调用中传递大量参数。然而,过度使用全局变量可能会导致代码难以理解和维护,因此应谨慎使用。
分解函数:如果一个函数需要传递大量参数,可能是时候将其分解成更小的函数。每个函数应该有一个清晰的职责,并接受尽可能少的参数。这有助于提高代码的可读性和可维护性。
使用数据结构:除了结构体之外,还可以使用数组、列表、集合等数据结构来传递参数。这可以使代码更加简洁、易读和易于维护。
封装:通过将相关功能封装在类或结构体中,可以隐藏内部实现细节,并减少函数调用中的参数数量。封装有助于提高代码的可重用性和可维护性。
避免不必要的参数:仔细审查代码,确保每个传递给函数的参数都是必要的。如果某些参数可以被省略或计算出来,那么应该这样做。这有助于减少代码的复杂性和提高可维护性。
文档和注释:为函数和它们的参数提供清晰的文档和注释,以帮助其他开发人员理解代码的意图和用法。这有助于减少错误和误解,并提高代码的可维护性。
总之,处理C/C++函数调用中的过多参数需要仔细考虑代码的可读性、可维护性和可重用性。通过使用上述方法之一或组合使用多个方法,可以有效地减少函数调用中的参数数量,并提高代码质量。
15.一个函数没有输入参数,但是能够返回数据,那么这个函数可能的业务功能是什么?列举三种可能的情况,
从磁盘/控制台/数据库…获取数据(每种都可得3分,下同)
◇ 获取一个随机数/常量/…
◇ 数据实体的GET方法
◇ 其他合理的回答编程语言中的函数,与数学上的函数有本质区别,一个函数是一段处理逻辑的集合,不一定是对输入参数的计算
16.引用类型变量赋值操作是否会比值类型变量赋值操作更慢(消耗更多CPU时钟)?为什么?
、引用类型赋值仅仅是地址值的赋值
◇ 值类型变量赋值涉及到值内容拷贝(还可能有拆箱装箱),可能更慢
◇ 其他能体现对引用类型赋值操作原理有正确理解的内容
17.两个引用变量的值不相等,那么他们的地址是否 一定不等,为什么?
回答一定不相等,且能够说明以下任何一个要点的,酌情得7-10分。
◇ 如果地址相等值一定相等,所以值不同地址不可能相等。
◇ 反证:如果地址相等,那么值一定不等。
◇ 其他能体现对引用变量本质理解答案,其扣题的。
18.引用类型的变量为“空”时和不为“空”时,变量本身占用的内存大小,是否有区别?为什么?
引用变量占用空间大小固定,与保存(指向)的值无关。
◇ 引用变量本质上保存的是地址,地址占用空间固定。
◇ 引用变量指向的对象占用空间,与引用变量自身占用空间无关
题目讲解:
引用变量占用的内存空间通常是固定大小,同一个变量有指向值,和无指向值,并不影响变量自身占用的内存空间。
19.一台机器在编译大型项目时比较慢,观察发现CPU使用率在5%~30%之间波动,请问如何判断系统瓶颈在哪里??
“根据CPU占用率不高,得出瓶颈不在CPU”的,得3分
回答“瓶颈可能在内存、磁盘”的,得3分
回答“依据内存使用量、磁盘IO量判断瓶颈在内存还是硬盘”的,得4分
因为CPU的使用率不超过30%,CPU利用率不足,瓶颈不在CPU,可能在内部存储器、外部储器或者输入输出设备。
20.有两个引用类型的字符串变量,它们的值相等,它们的地址是否相同?为什么?
回答不等或者不一定,且能够说明以下任何一个要点的,酌情得7-10分。
◇ 地址不同的两个字符串可以保存相同的内容。
◇ 值相等仅代表内容相同,但是内存地址是系统分配的。
◇ 用代码举出合理例子的。
◇ 其他合理的解释说明。
■ 只回答不等或者不一定,但是没有原因解释的,不得分。
21.现在要设计一个支持数组和字符串之间互相转换的函数,请给出设计思路和需要注意的问题?
回答出以下任意一点,或用代码表达出相同意思的,每项得3分,回答3项或以上得10分
◇ 数组转字符串要设置分隔符的
◇ 数组转字符串的分隔符要考虑转义的
◇ 数组转字符串要考虑不同类型的
◇ 字符串转数组时要注意是否能够适配数组的类型的
■ 陈述不扣题的,不得分。
题目讲解:
信息在计算机中的不同表达及其本质。
22.想用数组代替HASHMAP来保存数据,请描述这个数组可能的定义。
按下述得分点累加计算,最多10分

  1. 所描述的结构,能够保存KEY和VALUE,能够保持KEY-VALUE对应关系,得5分。(比如二维数组)
  2. 在1)基础上,所描述结构支持任意KEY类型和VALUE类型的,得5分
  3. 在1)基础上,考虑到HASHMAP中KEY不重复约束的,得5分
  4. 在1)基础上,考虑到数组大小固定、或者数组需要扩容等方面的,得5分
    ■ 其他回答视答题人对两种数据结构的理解程度,酌情1-3分
    题目讲解:
    HASHMAP有KEY和VALUE,可以用两个数组或者数组嵌套其他集合类型实现
    23.举例说明,相同作用域内函数名和变量名重可能会引发什么问题?
    ◇ 系统无法区分,编译报错。
    ◇ 系统无法区分,运行报错
    ◇ (存在某种覆盖约定)代码阅读困难,不容易理解。
    ■ 有恰当的代码例子,且与文字说明匹配的,得3分
    题目讲解:
    变量名和函数名都是标识符,在编译过程中,会把标识符变为地址,这就要求标识符在当前作用域中无歧义,仅代表唯一有效的地址。对此,不同的语言有不同的约定,有的语法上不允许重名,有的约定优先级。
    24.有一个字符串类型的数组,如果修改了其中一个字符串的值,是否会导致数组自身占用的存储空间发生变化?为什么?
    回答不会,且回答原因能够体现下述任一要点的,酌情得7-10分:
    ◇ 引用类型变量中保存的是地址,修改值不影响变量直接占用的存储空间大小。
    ◇ 数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值