牛客错题——计算机专业 Java C语言(持续更新)

1、关于Java中的ClassLoader下面的哪些描述是错误的:(    )

A. 默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap, Extension, System
B. 一般的情况不同ClassLoader装载的类是不相同的,但接口类例外,对于同一接口所有类装载器装载所获得的类是相同的
C. 类装载器需要保证类装载过程的线程安全
D. ClassLoader的loadClass在装载一个类时,如果该类不存在它将返回null
E. ClassLoader的父子结构中,默认装载采用了父优先
F. 所有ClassLoader装载的类都来自CLASSPATH环境指定的路径

正确答案: B D F   你的答案: B E F

解析:

A.Java系统提供3种类加载器:启动类加载器(Bootstrap ClassLoader)  扩展类加载器(Extension ClassLoader) 应用程序类加载器(Application ClassLoader). A正确 

B.《深入理解Java虚拟机》P228:对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。这句话可以表达得更通俗一些:比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那么这两个类必定不相等。接口类是一种特殊类,因此对于同一接口不同的类装载器装载所获得的类是不相同的。B错误 

C.类只需加载一次就行,因此要保证类加载过程线程安全,防止类加载多次。C正确 

D. Java程序的类加载器采用双亲委派模型,实现双亲委派的代码集中在java.lang.ClassLoader的loadClass()方法中,此方法实现的大致逻辑是:先检查是否已经被加载,若没有加载则调用父类加载器的loadClass()方法,若父类加载器为空则默认使用启动类加载器作为父类加载器。如果父类加载失败,抛出ClassNotFoundException异常。D错误

E.双亲委派模型的工作过程:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求时,子加载器才会尝试自己去加载。E正确 

F.应用程序类加载器(Application ClassLoader)负责加载用户类路径(ClassPath)上所指定的类库,不是所有的ClassLoader都加载此路径。F错误

 

2、下面哪些写法能在 java8 中编译执行()

A. dir.listFiles((File f)->f.getName().endsWith(“.Java”));
B. dir.listFiles((File f)=>f.getName().endsWith(“.Java”));
C. dir.listFiles((_.getName().endsWith(“.Java”)));
D. dir.listFiles( f->f.getName().endsWith(“.Java”));

正确答案: A D   你的答案: D (错误)

解析:

方法说明:

复制代码
 1 public File[] listFiles(FileFilter filter) {
 2         String ss[] = list();
 3         if (ss == null) return null;
 4         ArrayList<File> files = new ArrayList<>();
 5         for (String s : ss) {
 6             File f = new File(s, this);
 7             if ((filter == null) || filter.accept(f))
 8                 files.add(f);
 9         }
10         return files.toArray(new File[files.size()]);
11     }
复制代码

listFiles(FileFilter fileFilter) 这个方法接收的是一个函数式接口类型的参数,所以可以采用Lambad表达式来替换匿名内部类的繁琐语法

A、D是两种Lambda的写法,一开始没看出来啊A选项,后面仔细一看A选项在Java8之后也是支持的

 

 补充:

Lanbda表达式的主要作用就是代替匿名内部类的繁琐语法, 它由三部分组成:
(1) 形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。
(2) 箭头(→)。必须通过英文中画线和大于符号组成。
(3)代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号,那么那条语句就不要用花括号表示语句结束。Lambda代码块只有一条return语句,甚至可以省略return关键字。Lambda表达式需要返回值,而它的代码块中仅有一套省略了return的语句。Lambda表达式会自动返回这条语句的值。
 

3、以下那些代码段能正确执行

A. public static void main(String args[]) {
    byte a = 3;
    byte b = 2;
    b = a + b;
    System.out.println(b);
  }
B. public static void main(String args[]) {
    byte a = 127;
    byte b = 126;
    b = a + b;
    System.out.println(b);
  }
C. public static void main(String args[]) {
    byte a = 3;
    byte b = 2;
    a+=b;
    System.out.println(b);
  }
D. public static void main(String args[]) {
    byte a = 127;
    byte b = 127;
    a+=b;
    System.out.println(b);
  }

正确答案:AD   你的答案:C

解析:

byte类型的变量在做运算时被会转换为int类型的值,故A、B左为byte,右为int,会报错;而C、D语句中用的是a+=b的语句,此语句会将被赋值的变量自动强制转化为相对应的类型。
 

4、文件目录data当前权限为rwx --- ---,只需要增加用户组可读可执行权限,但不允许写操作,具体方法为:

A. chmod+050data
B. chmod+040data
C. chmod+005data
D. chmod+004data

正确答案: A   你的答案: C

解析:

使用chomd命令改变文件权限。
Linux文件基本权限有9个,owner,group,others三种身份对应各自read,write,execute三种权限。
文件权限字符:“-rwxrwxrwx”三个一组。数字化r:4 w:2 x:1
增加用户组可读,但不可写,第一组和第三组默认为0,只在第二组中添加r-x即可 chomd +050
 

5、变量a是一个64位有符号的整数,初始值用16进制表示为:0Xf000000000000000; 变量b是一个64位有符号的整数,初始值用16进制表示为:0x7FFFFFFFFFFFFFFF。 则a-b的结果用10进制表示为多少?()

A. 1

B. -(2^62+2^61+2^60+1)

C. 2^62+2^61+2^60+1

D. 2^59+(2^55+2^54+…+2^2+2^1+2^0)

正确答案:C  错选:B

解析:

0Xf000000000000000补码为1111000000000000000000000000000000000000000000000000000000000000

0x7FFFFFFFFFFFFFFF补码为0111111111111111111111111111111111111111111111111111111111111111
a-b=a+(-b)=
1111000000000000000000000000000000000000000000000000000000000000+
1000000000000000000000000000000000000000000000000000000000000001=
10111000000000000000000000000000000000000000000000000000000000001(高位溢出舍去)
则结果为
0111000000000000000000000000000000000000000000000000000000000001=2^62+2^61+2^60+1
(这里需要注意的是:题目说的初始化值其实就是计算机内部真实存储的数,而计算机底层实际上就是用补码存储的,不存在原码和反码的说法,这两种码其实是为了让人们更好的理解补码而人为定义的)
实测:

posted @   没有你哪有我  阅读(693)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示