牛客网50道选择题(2)

本文深入探讨了Java内存模型的工作原理,包括堆内存、栈内存、方法区等区域,以及对象创建、垃圾回收的过程。同时,详细阐述了线程同步的重要性,分析了synchronized关键字、volatile变量、Lock接口以及线程通信(wait/notify)在多线程环境中的应用。通过对这些概念的理解,有助于提升Java并发编程的能力。
摘要由CSDN通过智能技术生成

1
在这里插入图片描述

答案:B
解析:+号两边如果有一边为字符类型 则为字符串连接;如果变为y+z+x 则等价于(y+z)+x 输出47

2
在这里插入图片描述

答案:D
解析:LinkedList是基于双链表的,增加是在尾部增加,增加和删除都只需要修改指针,不需要移动元素;ArrayList插入或删除一个元素的开销不是固定的。在插入时,如果索引正确,容量够,则直接插入,插入位置之后的都需要移动,如果容量不够,还得扩充容量,开销当然不一样。删除操作同理。

3
在这里插入图片描述

答案:C
解析:run()相当于线程的任务处理逻辑的入口方法,它由Java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用;而start()的作用是启动相应的线程(即开启多线程),启动一个线程实际是请求Java虚拟机运行相应的线程,而这个线程何时能够运行是由线程调度器决定的。start()调用结束并不表示相应线程已经开始运行,这个线程可能稍后运行,也可能永远也不会运行。

4
在这里插入图片描述

答案:C
解析:
(1)Eden区,from区,to区:三个区的内存比例可以通过参数【–XX:SurvivorRatio=数字】配置,默认该值为8,即Eden:from:to = 8:1:1
(2)大部分对象创建都是在Eden的(除了个别大对象外,大对象内存可以设置参数【-XX:PretenureSizeThreshold=字节数】配置,超过配置内存的大对象直接进入老年代),from和to不是固定的(可以互换身份,Survivor区),初始化的时候其中一个是空的。
(3)新生代的 Minor GC 中,一个Survivor区中数据复制进去,另个是空的,下一次GC的时候,有数据的是from Survivor,没数据的to Survivor,GC的时候,from区和Eden区的数据都复制到to中。这样from和to就互换身份,一直这么循环处理。
(4)第(3)步中复制一次,所有对象年龄加1,当任意一个对象复制到一定次数(默认15次,可以配置【-XX:MaxTenuringThreshold=数字】参数进行修改)的时候,就被复制到了老年代
(5)提到老年代,再补充一下,新生代 ( Young )、老年代 ( Old )内存比例为=1:2,新生代加老年代就是java堆内存了

5
在这里插入图片描述

答案:B
解析:Java 重载的规则:1、必须具有不同的参数列表;2、可以有不同的返回类型,只要参数列表不同就可以;3、可以有不同的访问修饰符;4、可以抛出不同的异常;5、方法能够在一个类中或者在一个子类中被重载。
方法的重写:1、在子类中可以根据需要对从基类中继承来的方法进行重写。2、重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。3、重写方法不能使用比被重写的方法更严格的访问权限。

6
在这里插入图片描述

答案:C
解析:当类加载时,static静态方法随着类加载而初始化,此时实例对象还未被创建,但是非静态成员变量需要等到实例对象创建才会被初始化,故无法被引用。

7
在这里插入图片描述

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

8
在这里插入图片描述

答案:B
解析:
-s 还原文件的顺序和备份文件内的存放顺序相同。
-t 列出备份文件的内容。
-v 显示指令执行过程。
-f 指定压缩文件
-x 从备份文件中还原文件。

9
在这里插入图片描述

答案:A
解析:.Java三大注解分别是@Override @Deprecated @Suppresswarnings
2.@Override 注解表名子类中覆盖了超类中的某个方法,如果写错了覆盖形式,编译器会报错
3.@Deprecated 表明不希望别人在以后使用这个类,方法,变量等等
4.@Suppresswarnings 达到抑制编译器产生警告的目的,但是不建议使用,因为后期编码人员看不懂编译器提示的警告,不能更好的选择更好的类去完成任务

10
在这里插入图片描述

答案:D
解析:引用类型作为函数的参数时,复制的是引用的地址,不会产生一个新的T;而如果T是值类型,其作为函数实参时会复制其值,也就是产生了一个新的T。

11
在这里插入图片描述

答案:A
解析:后台线程就是守护线程,前台线程就是用户线程。
守护线程:是指在程序运行时在后台提供一种通用服务的线程,这种线程并不是必须的。同时守护线程的线程优先级都很低的。JVM中的GC线程就是一个守护线程,只要JVM启动,GC线程就启动了。
用户线程和守护线程几乎没有什么区别,唯一的区别就在于,如果用户线程都已经退出了,只剩下了守护线程,那么JVM直接就退出了。

12
在这里插入图片描述

答案:A
解析:
HttpSessionAttributeListener:可以实现此侦听器接口获取此web应用程序中会话属性列表更改的通知;
HttpSessionBindingListener:当该对象从一个会话中被绑定或者解绑时通知该对象,这个对象由HttpSessionBindingEvent对象通知。这可能是servlet程序显式地从会话中解绑定属性的结果,可能是由于会话无效,也可能是由于会话超时;
HttpSessionObjectListener:没有该接口API;
HttpSessionListener:当web应用程序中的活动会话列表发生更改时通知该接口的实现类,为了接收该通知事件,必须在web应用程序的部署描述符中配置实现类;
HttpSessionActivationListener:绑定到会话的对象可以侦听容器事件,通知它们会话将被钝化,会话将被激活。需要一个在虚拟机之间迁移会话或持久会话的容器来通知所有绑定到实现该接口会话的属性。
HttpSession:当需要为用户端建立一个session时,servlet容器就创建了一个HttpSession对象。其中存储了和本session相关的信息。所以,在一个servlet中有多少个不同用户连接,就会有多少个HttpSession对象。

13
在这里插入图片描述

答案:ABCD

14
在这里插入图片描述

答案:ABCD
解析:
a、Bootstrap ClassLoader/启动类加载器
主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作.
B、Extension ClassLoader/扩展类加载器
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作
C、System ClassLoader/系统类加载器
主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作.
D、 User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)
在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性.

15
在这里插入图片描述

答案:AB
解析:Servlet过滤器的配置包括两部分:第一部分是过滤器在Web应用中的定义,由元素表示,包括和两个必需的子元素;第二部分是过滤器映射的定义,由元素表示,可以将一个过滤器映射到一个或者多个Servlet或JSP文件,也可以采用url-pattern将过滤器映射到任意特征的URL。

16
在这里插入图片描述

答案:C
解析:Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。
yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。
结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。

17
在这里插入图片描述

答案:BC
解析:
1.sleep()方法:在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。sleep()使当前线程进入阻塞状态,在指定时间内不会执行。
2.wait()方法:在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。当前线程必须拥有当前对象锁。如果当前线程不是此锁的拥有者,会抛出IllegalMonitorStateException异常。唤醒当前对象锁的等待线程使用notify或notifyAll方法,也必须拥有相同的对象锁,否则也会抛出IllegalMonitorStateException异常。waite()和notify()必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常。
3.yield方法:暂停当前正在执行的线程对象。yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。yield()只能使同优先级或更高优先级的线程有执行的机会。
4.join方法:join()等待该线程终止。等待调用join方法的线程结束,再继续执行。如:t.join();//主要用于等待t线程运行结束,若无此句,main则会执行完毕,导致结果不可预测

18
在这里插入图片描述

答案:ABC
解析: 同步器是一些使线程能够等待另一个线程的对象,允许它们协调动作。最常用的同步器是CountDownLatch和Semaphore,不常用的是Barrier 和Exchanger

19
在这里插入图片描述

答案:C
解析:前面两数和的平方等于下一个数。

20
在这里插入图片描述

答案:B
解析:2=2 * 1 ^ 2; 12=3 * 2 ^ 2;36=4 * 3 ^ 2;80=5 * 4 ^ 2;150=6 * 5 ^ 2;252=7 * 6 ^ 2。

21
在这里插入图片描述

答案:C
解析:1 ^ 2 - 1 = 0;2 ^ 3 - 2 = 6;3 ^ 4 - 3 = 78;4 ^ 5 - 4 = 1020;5 ^ 6 - 5 = 15620

22
在这里插入图片描述

答案:D
解析:&按位与,对应二进制位均为1结果才为1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0,保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
x&(x-1) 就是从右到左遇到的第一个1后面的(包括1)全都变成 0 ,更直观的:会导致x二进制中的1减少一个。
本题答案:x二进制中有多少位1就会进行多少次与计算。
500的二进制表示是:111110100,共有6个1。所以答案是6。

23
在这里插入图片描述

答案:A
解析:20/9=20/9 ;4/3=24/18;7/9=28/36;4/9=32/72;1/4=36/144;40/288=5/36

24
在这里插入图片描述

答案:C
解析:从左到右,后一个数依次是前一个数的:0.5倍、1倍、1.5倍、2倍、2.5倍、3倍

25
在这里插入图片描述

答案:C
解析:1 ^ 3 + 3 = 4;2 ^ 3 + 3 = 11;3 ^ 3 + 3 = 30;4 ^ 3 + 3 = 67;5 ^ 3 + 3 = 128

26
在这里插入图片描述

答案:A
解析:3=3/1;2=4/2;5/3=5/3;3/2=6/4;
分母为1 2 3 4 可知第五个数的分母为5
分子为3 4 5 6 可知第五个数的分子为7

27
在这里插入图片描述

答案:C
解析:整个数列规律为:(5-3)x(6-3)=6;(6-3)x(6-3)=9;(6-3)x(9-3)=18;(9-3)x(18-3)=90

28
在这里插入图片描述

答案:B
解析:如果用n表示台阶的级数,an表示某人走到第n级台阶时,所有可能不同的走法,容易得到:
① 当 n=1时,显然只要1种跨法,即a1=1。
② 当 n=2时,可以一步一级跨,也可以一步跨二级上楼,因此,共有2种不同的
跨法,即a2=2。
③ 当 n=3时,可以一步一级跨,也可以一步三级跨,还可以第一步跨一级,第二步跨二级或第一步跨二级,第二步跨一级上楼,因此,共有4种不同的跨法,即a3=4。
④ 当 n=4时, 分三种情况分别讨论跨法:
如果第一步跨一级台阶,那么还剩下三级台阶,由③可知有a3 =4(种)跨法。
如果第一步跨二级台阶,那么还剩下二级台阶,由②可知有a2 =2(种)跨法。
如果第一步跨三级台阶,那么还剩下一级台阶,由①可知有a1 =1(种)跨法。
根据加法原理,有a4= a1 +a2 +a3 =1+2+4=7
类推 ,有:
a5= a2 +a3+a4 =2+4+7=13
a6= a3 +a4+a5 =4+7+13=24
a7= a4 +a5+a6=7+13+24=44
a8= a5 +a6 +a7 =13+24+44=81
a9= a6+a7+a8 =24+44+81=149
a10= a7 +a8 +a9=44+81+149=274
a11=a8+a9+a10=81+149+274=504
一般地,有an=an-1+an-2+an-3

29
在这里插入图片描述

答案:B
解析:
奇数项 5 = 1 ^ 2 + 4,21 = 4 ^ 2 + 5,() = 5 ^ 2 + 6 = 31
偶数项 7 = 2 ^ 3 - 1,25 = 3 ^ 3 - 2

30
在这里插入图片描述

答案:A
解析:奇数项:3/7 5/9 7/11 分子以2递增 分母同理;偶数项:5/8 8/11 11/14 分子以3递增 分母同理 。

31
在这里插入图片描述

答案:D
解析:每三个数字相加分别是1+2+1=4 2+1+6=9 1+6+9=16 6+9+10=25 9+10+?=19+? 4 9 16 25 19+?分别是2 3 4 5 6的平方 36-19=17

32
在这里插入图片描述

答案:D
解析:c=5*b-a,相邻三个数分别为a,b,c

33
在这里插入图片描述

答案:C
解析:2 + 2 + 0 = 2 ^ 2;2 + 0 + 7 = 3 ^ 2;0 + 7 + 9 =4 ^ 2;7 + 9 + 9 = 5 ^ 2;9 + 9 + x = 6 ^ 2
得:x=18

34
在这里插入图片描述

答案:B
解析:2+5+6=13 256+13=269;2+6+9=17 269+17=286;2+8+6=16 286+16=302;3+0+2=5 302+5=307

35
在这里插入图片描述

答案:D
解析:1 - 3 ^ 3 = -26;2 - 2 ^ 3 = -6;3 - 1 ^ 3 = 1;4 - 0 ^ 3 = 4;5 - (-1) ^ 3 = 6;6 - (-2) ^ 3 = 14

36
在这里插入图片描述

答案:A
解析:差值为 0 9 24 49
分别为1 ^ 1 - 1,3 ^ 2,5 ^ 2 - 1,7 ^ 2,下一个差值应为 9 ^ 2 - 1 = 80
即80+87=167

37
在这里插入图片描述

答案:B
解析:1x1=1 即:1 ;2x2=4=1+3 即:13 ;3x3=9=4+5 即:45 ;4x4=16=1+6+9 即:169 ;5x5=25 =7+9+9=8+8+9 即:799或889

38
在这里插入图片描述

答案:D
解析:行列交点即为两个图案重叠的结果,1C右下角少了一个黑点

39
在这里插入图片描述

答案:B
解析:简单来说,完全互补品就是需要同时使用才可以正常发挥功能的2个物品,对于A,薯条和汉堡2种商品不用互相配套使用,所以错误,对于B,眼镜框必须要搭配眼镜片一起使用才有价值。所以是完全互补品。对于C,因为毛笔和墨汁没有固定同时使用的比例(注意:是固定同时使用,毛笔的墨水没干时不需要墨汁),所以不是完全互补品,只能算是普通互补品,对于D,数码相机不需要胶卷,不是互补品

40
在这里插入图片描述

答案:A
解析:B:收益的主体是县政府不属于“个体”
C:无“政策、法规的变动”
D:无“政策、法规的变动”

41
在这里插入图片描述

答案:D
解析:关键点在于:解决冲突

42
在这里插入图片描述

答案:B
解析:根据线头超出的数量可以看出:
列1 列2 列3
第一行 : 5 7 17
第二行: 3 9 15
第三行: 1 11 13
每一列都是从上到下递减(加)2.

43
在这里插入图片描述

答案:BC
解析:设只会做A、只会做B、只会做C、既会做A又会做B、既会做A又会做C、既会做B又会做C的人数分别为:A、 B、 C、 AB、 AC、 BC.
(A , B, C, AB, AC, BC都是非负整数),则由已知条件得:
A+B+C+AB+AC+BC=24①
A=2C ②
C=3AB ③
B=AB+BC-1 ④
AB>1 ⑤
欲求C+AC+BC。联合①②③④得11AB+AC+2BC=25 ⑥,显然AB<=2,又由⑤知AB=2; ⑥变为AC+2BC=3⑦;有两种情况:(1)AC=1,BC=1 (2)AC=3,BC=0;均成立,所以C+AC+BC=6+AC+BC=8或9。

44
在这里插入图片描述

答案:D
解析:奇数位置以2递增,偶数位置以5递减

45
在这里插入图片描述

答案:A
解析:奇数部分是2的递增序列,偶数部分是2的递减数列

46
在这里插入图片描述

答案:D
解析:设总量30x,那么甲的效率为30x÷10=3x,乙的效率为30x÷10=2x。
在乙休息期间,甲多做 5/33x=5x
两个人实际一起合作做了 (30x-5x)/(3x+2x)=5
所以甲在合作期间比乙多做5
(3x-2x)=5x
所以甲一共多做5x+5x=300,得x=30
所以最后总量为30*30=900

47
在这里插入图片描述

答案:D
解析:首先选出26-50共25个数,肯定不会有他们的二倍的数在集合中.同时可以去掉13-25,因为他们的二倍全在26-50中。
剩下1-12.此时类似原问题,选择7-12共6个数(他们的二倍已经被去掉了).同时去掉4-6,也因为他们的二倍都在7-12中。最后可以选择1,3两个数。
这样总共有25+6+2=33个

48
在这里插入图片描述

答案:B
解析:顺序表查询长度与顺序表遍历长度有关,概率越大,其在顺序表中所占长度越长,概率越大 应放在前面

49
在这里插入图片描述

答案:D
解析:第一次:high1=18,low1=1,medium1=(high1+low1)/2=9:A[3]<A[9],进行下一轮比较
第二次:high2=medium1-1=8,low2=1,medium2=(high2+low2)/2=4:A[3]<A[4],进行下一轮比较
第三次:high3=medium2-1=3,low3=1,medium3=(high3+low3)/2=2:A[3]>A[2],进行下一轮比较
第四次:由于A[4],A[2]都比较与A[3]比较了:A[2]<A[3]<A[4],故直接取A[3],下标为3

50
在这里插入图片描述

答案:A
解析:链表只能顺序找,不能随机访问。数组可以随机访问。

51
在这里插入图片描述

答案:B
解析:ASL = (n/s + s)/2 + 1:(200/4+4)/2+1=28

52
在这里插入图片描述

答案:D
解析:Trie树,又称单词查找树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。对于Trie树(字典树)来说,能在O(len)的时间内查出该单词是否存在,而且空间占用少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值