nowcoder刷题错题总结(1)

这篇博客是对nowcoder上一些编程题目错误答案的总结,包括内存回收、数据结构(如树的节点计数)、浮点数表示、类型转换、正则表达式、Java对象封装、排序算法复杂度等方面的问题,旨在帮助读者理解和纠正编程中的常见误区。

01.下列哪些语句关于内存回收的说明是正确的? ( )
在这里插入图片描述
解析:

A:错。程序员不必须创建一个线程来释放内存。可以运行GC的函数System.gc()来释放内存,但根据Java语言规范定义,该函数不保证JVM的垃圾收集器一定会执行;
B:对。对象的释放是有GC决定和执行的。在Java中,内存分配是由程序完成的,而内存的释放是有GC完成的。
C:错。由B选项的解析可知
D:错。垃圾回收机制很佛系,具体什么时候回收垃圾、释放对象不能确定。因为不同的JVM
实现者可能使用不同的算法管理GC,JVM调用GC的策略也很多。所以有不确定性。
不可以指定时间,System.gc(),只是提醒JVM可以进行一次Full GC,但是什么时候真正执行,还是不知道的。

02.在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶节点个数是()
在这里插入图片描述
解析:

基本定义:度为0的结点成为叶子(leaf)或终端结点。
总节点个数为:根节点+子节点
根节点个数为1,子节点个数为20*4+10*3+1*2+10*1 = 122
所以总结点个数为123个。
只有叶节点度数为0,其他结点都有度数。由题意得其他结点总数为20+10+1+10 =41个
故叶节点(终端节点)=123-41=82个。

03.若阶码的底为 2 ,则规格化浮点数的尾数 M 应满足条件()
在这里插入图片描述
解析:

规格化数:在浮点数中,为了在尾数中表示最多的有效数据位,同时使浮点数具有唯一的
表示方式,浮点数的编码应当采用一定的规范,规定尾数部分用纯小数给出,而且尾数的
绝对值应大于或等于1/R(R为阶码的底数或基数),并小于或等于1,即小数点后的第一位不为零。

 浮点数都是近似表示的,精度由尾数决定,数的表示范围大小由R、E决定。为了提高精度
需要使尾数的有效位数尽可能占满可用的位数。这种措施称为浮点数的规格化。规格化要求尾数:
1/R<=|M|<1
R=2时: 1/2<=|M|<1 即2^(-1)<=|M|<2^0
将一个浮点数转换为规格化的过程,称为浮点数规格化。
右规:尾数右移一位,阶码+1
左规:尾数左移一位,阶码-1

这种表示的规范称为浮点数的规格化表示法。不符合这种规定的数据可通过修改阶码并同时移动尾数的方法使其满足这种规范。

所以本题阶码的底数为2,尾数M的绝对值应该满足   1/2 <= |M|<=1 。

04.C/C++中,t为int类型,进入下面的循环之前,t的值为0

while(t=1)
{
      -------
}

则以下叙述中正确的是
在这里插入图片描述
解析:

这个表达式是赋值表达式,将1赋给t,t一直为1(真)
1.如果在Java语言环境下,会报错Type mismatch: cannot convert from int to boolean,说明不合法,编译不会通过。应选C。
2.如果在C/C++语言环境下,赋值返回1。应选B。

05.正则表达式中,表示匹配非数字字符的字符是()?
在这里插入图片描述
解析:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

06.经过强制类型转换以后,变量a,b的值分别为多少?

short a =128;
byte b =(byte) a;

在这里插入图片描述
解析:

-------------------------------------------------------------------------------
int占4个字节,32位
byte占1个字节,8位
所以强转时会截断。前24位
---------------------------------------------------------------------------
在内存中表示形式( 注意java中是以补码表示一个数,所以表示形式是补码,不是原码! ):
int a = 3       00000000  00000000  00000000 00000011 (强转byte时前面24个0被截断)
byte b = 3      00000011
int a = -3      11111111  11111111   11111111   11111101 (强转byte时前面24个1被截断)
byte b = -3     11111101
----------------------------------------------------------------------------
1、Java中用补码形式表示
2、第一位正负位,1表示负,0表示正。
3、原码:一个数的二进制表示。
                 3的原码00000011   -3的 原码 10000011
4、反码:负数原码按位取反(符号位不变)。正数原码本身。
                3的反码00000011   -3的反码11111100
5、补码:正数是原码本身。负数反码加1。
	                 3的补码是00000011  -3的补码是11111101
-------------------------------------------------------------------------------
已知负数的补码,求负数:
补码-1=反码,反码按位取反=该负数绝对值
已知负数,求负数的补码:
1、负数原码除了符号位,按位取反(不含符号位),加1。
2、负数绝对值的补码(也就是原码),按位取反(含符号位),加1
java int 128转为byte,值:
128为正数,补码为10000000(前面24个0省略),变成byte,只剩下10000000(byte为1个字节),因为开头是1,所以为负数。即1个负数的补码是10000000。反码是01111111,原码是1000000。是128.因为是负数,所以是-128。
-------------------------------------------------------------------------------

07.final、finally、finalize三个关键字的区别是()
在这里插入图片描述
解析:

final:可用来定义变量、方法传入的参数、类、方法。
finally:只能跟在try/catch语句中,并且附带一个语句块,表示最后执行。
finalize:是垃圾回收器操作的运行机制中的一部分,进行垃圾回收器操作时会调用finalize方法,因为finalize方法是object的方法,所以每个类都有这个方法并且可以重写这个方法,在这个方法里实现释放系统资源及其他清理工作,JVM不保证此方法总被调用。

08.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近()
在这里插入图片描述
解析:

哈夫曼树是贪心算法的应用,选取集合中两个权值最小的元素自底向上的构成树,所以权值较大的结点离根较近。

09.Java 语言用以下哪个类来把基本类型数据封装为对象()
在这里插入图片描述
解析:

java的数据类型分为两大类:基本类型和引用类型;
基本类型只能保存一些常量数据,引用类型除了可以保存数据,还能提供操作这些数据的功能;

为了操作基本类型的数据,java也对它们进行了封装, 得到八个类,就是java中的基本类型的封装类;他们分别是: 
八种基本类型: byte short    int   long float double    char    boolean

对应的包装类 : Byte Short Integer Long Float Double Character Boolean

10.快速排序与堆排序的平均时间复杂度相同,这种说法()
在这里插入图片描述
解析:
在这里插入图片描述
11.设一组权值集合W={2,3,4,5,6},则由该权值集合构造的哈夫曼树中带权路径长度之和为()。
在这里插入图片描述

解析:

在这里插入图片描述

假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:

(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);

(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;

(3)从森林中删除选取的两棵树,并将新树加入森林;

(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值