牛客刷题日记(2021-10-27)

牛客刷题日记(2021-10-27)



题目:

以下关于Object类的说法正确的是()
Java中所有的类都直接或间接继承自Object,无论是否明确的指明,无论其是否是抽象类。
Java中的接口(interface)也继承了Object类
利用“==”比较两个对象时,Java调用继承自Object的equals方法,判断是否相等。
如果类的定义中没有重新定义toString()方法,则该类创建的对象无法使用toStrig()方法。```

解析:

Object 是基类 Java中的所有的类都直接或间接的继承;所以A对
从一个class派生的必然是另一个class。Object是一个class,如果interface继承自Object,那么interface必然是一个class,所以B错
利用equals()方法进行比较时 会调用== 可以看equals()方法的源码,可以这样说, == 比equal更加强大,所以C错
toString()方法是Object类中 即使不重写也能使用 所以D错


题目:

使用mvc模式设计的web应用程序具有以下优点,除了?
可维护行强
可扩展性强
代码重复少
大大减少代码量

解析:

答案:D
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVC只是将分管不同功能的逻辑代码进行了隔离,增强了可维护和可扩展性,增强代码复用性,因此可以减少代码重复。但是不保证减少代码量,多层次的调用模式还有可能增加代码量


题目:

下面有关java实例变量,局部变量,类变量和final变量的说法,错误的是?
实例变量指的是类中定义的变量,即成员变量,如果没有初始化,会有默认值。
局部变量指的是在方法中定义的变量,如果没有初始化,会有默认值
类变量指的是用static修饰的属性
final变量指的是用final 修饰的变量

解析:

B.
定义在类中的变量是类的成员变量,可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型例如int则会默认初始化为0
局部变量是定义在方法中的变量,必须要进行初始化,否则不同通过编译
被static关键字修饰的变量是静态的,静态变量随着类的加载而加载,所以也被称为类变量
被final修饰发变量是常量


题目:

下列说法正确的是( )
volatile,synchronized 都可以修改变量,方法以及代码块
volatilesynchronized 在多线程中都会存在阻塞问题
volatile能保证数据的可见性,但不能完全保证数据的原子性,synchronized即保证了数据的可见性也保证了原子性
volatile解决的是变量在多个线程之间的可见性、原子性,而sychroized解决的是多个线程之间访问资源的同步性

解析:

synchronized关键字和volatile关键字比较:
volatile关键字是线程同步的轻量级实现,所以volatile性能肯定比synchronized关键字要好。但是volatile关键字只能用于变量而synchronized关键字可以修饰方法以及代码块。synchronized关键字在JavaSE1.6之后进行了主要包括为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁以及其它各种优化之后执行效率有了显著提升,实际开发中使用 synchronized 关键字的场景还是更多一些。
多线程访问volatile关键字不会发生阻塞,而synchronized关键字可能会发生阻塞
volatile关键字能保证数据的可见性,但不能保证数据的原子性。synchronized关键字两者都能保证。
volatile关键字主要用于解决变量在多个线程之间的可见性,而 synchronized关键字解决的是多个线程之间访问资源的同步性。


题目:

class Base
{
     
    public void method()
    {
     
        System.out.println("Base");
    } 
}
class Son extends Base
{
     
    public void method()
    {
     
        System.out.println("Son");
    }
    
    public void methodB()
    {
     
        System.out.println("SonB");
    }
}
public class Test01
{
     
    public static void main(String[] args)
    {
     
        Base base = new Son();
        base.method();
        base.methodB();
    }
}
问这个程序的输出结果。
Base SonB
Son SonB
Base Son SonB
编译不通过

解析:

答案:D
Base base = new Son();
这句new 了一个派生类,赋值给基类,所以下面的操作编译器认为base对象就是Base类型的
Base类中不存在methodB()方法,所以编译不通过


题目:

已知x >= y and y >= z 为真,那么x > z or y = z 值为
真
假
无法确定
x y z同为正数时为真

解析:

答案应该是C
条件可以简单分析为数学不等式 x>=y>=z,那么x>z不一定为true
当x>z为true,后面的条件忽略,结果为真;
当xz,x>z为fslae,继续判断后一个条件
如果z
0,则y=z为false,结果为假;
如果z!=0,则y=z为true,结果为真;
所以,最后的结果是不确定的。


题目:

在java语言中,如果你编写一个多线程序,可以使用的方法是()
扩展类Thread
实现Runnable接口
扩展类 Runnable
实现接口Thread

解析:

1.继承Thread类(Override它的run方法)
2.实现Runnable接口(实现run方法)
3.使用ExecutorService、Callable、Future实现有返回结果的多线程


题目:


finalfinally、finalize三个关键字的区别是()
final是修饰符(关键字)可以修饰类、方法、变量
finally在异常处理的时候使用,提供finally块来执行任何清除操作
finalize是方法名,在垃圾收入集器将对象从内存中清除出去之前做必要的清理工作
finally和finalize一样都是用于异常处理的方法

解析:

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


题目:

下列关于JAVA多线程的叙述正确的是()
调用start()方法和run()都可以启动一个线程
CyclicBarrierCountDownLatch都可以让一组线程等待其他线程
Callable类的call()方法可以返回值和抛出异常
新建的线程调用start()方法就能立即进行运行状态

解析:

A,start是开启线程,run是线程的执行体,run是线程执行的入口。
B,CyclicBarrier和CountDownLatch都可以让一组线程等待其他线程。前者是让一组线程相互等待到某一个状态再执行。后者是一个线程等待其他线程结束再执行。
C,Callable中的call比Runnable中的run厉害就厉害在有返回值和可以抛出异常。同时这个返回值和线程池一起用的时候可以返回一个异步对象Future。
D,start是把线程从new变成了runnable


题目:

下面属于JSP内置对象的是?
out对象
response对象
application对象
page对象

解析:

答案:ABCD
这些都是JSP内置对象
JSP内置对象有:
1.request对象
客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
2.response对象
response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
3.session对象
session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.
4.out对象
out对象是JspWriter类的实例,是向客户端输出内容常用的对象
5.page对象
page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
6.application对象
application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
7.exception对象
exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
8.pageContext对象
pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
9.config对象
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)


题目:

以下关于JAVA语言异常处理描述正确的有?

throw关键字可以在方法上声明该方法要抛出的异常。
throws用于抛出异常对象。
try是用于检测被包住的语句块是否出现异常,如果有异常,则捕获异常,并执行catch语句。
finally语句块是不管有没有出现异常都要执行的内容。
在try块中不可以抛出异常

解析:

Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。
throw用于抛出异常。
throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。
try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
cacth用于捕获从try中抛出的异常并作出处理。
finally语句块是不管有没有出现异常都要执行的内容。


题目:

下面描述属于java虚拟机功能的是?
通过 ClassLoader 寻找和装载 class 文件
解释字节码成为指令并执行,提供 class 文件的运行环境
进行运行期间垃圾回收
提供与硬件交互的平台

解析:

java虚拟机功能:
通过 ClassLoader 寻找和装载 class 文件
解释字节码成为指令并执行,提供 class 文件的运行环境
进行运行期间垃圾回收


题目:

Java的集合框架中重要的接口java.util.Collection定义了许多方法。选项中哪个方法是Collection接口所定义的(       )
int size()
boolean containsAll(Collection c)
compareTo(Object obj)
boolean remove(Object obj)

解析:

  1. size():返回集合中元素的个数
  2. add(Object obj):向集合中添加一个元素
  3. addAll(Colletioncoll):将形参coll包含的所有元素添加到当前集合中
  4. isEmpty():判断这个集合是否为空
  5. clear():清空集合元素
  6. contains(Object obj):判断集合中是否包含指定的obj元素 ①判断的依据:根据元素所在类的equals()方法进行判断
    ②明确:如果存入集合中的元素是自定义的类对象,要去:自定义类要重写equals()方法
  7. constainsAll(Collectioncoll):判断当前集合中是否包含coll的所有元素
  8. rentainAll(Collectioncoll):求当前集合与coll的共有集合,返回给当前集合
  9. remove(Objectobj):删除集合中obj元素,若删除成功,返回ture否则
  10. removeAll(Collectioncoll):从当前集合中删除包含coll的元素
  11. equals(Object obj):判断集合中的所有元素 是否相同
  12. hashCode():返回集合的哈希值
  13. toArray(T[] a):将集合转化为数组①如有参数,返回数组的运行时类型与指定数组的运行时类型相同。
  14. iterator():返回一个Iterator接口实现类的对象,进而实现集合的遍历。
  15. 数组转换为集合:Arrays.asList(数组)

题目:

在JAVA中,下列哪些是Object类的方法()
synchronized()
wait()
notify()
notifyAll()
sleep()

解析:

A synchronized Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
B C D 都是Object类中的方法
notify(): 是唤醒一个正在等待该对象的线程。
notifyAll(): 唤醒所有正在等待该对象的线程。
E sleep 是Thread类中的方法

wait 和 sleep的区别:
wait指线程处于进入等待状态,形象地说明为“等待使用CPU”,此时线程不占用任何资源,不增加时间限制。
sleep指线程被调用时,占着CPU不工作,形象地说明为“占着CPU睡觉”,此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制。


题目:

以下哪些类是线程安全的()
Vector
HashMap
ArrayList
StringBuffer
Properties

解析:

答案:ADE
A,Vector相当于一个线程安全的List
B,HashMap是非线程安全的,其对应的线程安全类是HashTable
C,Arraylist是非线程安全的,其对应的线程安全类是Vector
D,StringBuffer是线程安全的,相当于一个线程安全的StringBuilder
E,Properties实现了Map接口,是线程安全的

https://www.nowcoder.com/test/question/done?tid=49522788&qid=16019#summary


题目:

下面哪个语句是创建数组的正确语句?( )
float f[][] = new float[6][6];
float []f[] = new float[6][6];
float f[][] = new float[][6];
float [][]f = new float[6][6];
float [][]f = new float[6][];

解析:

在Myeclipse中敲了一下,确实ABDE都可以。也就是说数组命名时名称与[]可以随意排列,但声明的二维数组中第一个中括号中必须要有值,它代表的是在该二维数组中有多少个一维数组。
牛客刷题日记(2021-10-27)_第1张图片


题目:

关于身份证号,以下正确的正则表达式为(      )
isIDCard=/^[1-9]\d{
     7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{
     3}$/;
isIDCard=/^[1-9]\d{
     7}((9\d)|(1[0-2]))(([0|1|2]\d)|3[9-1])\d{
     3}$/;
isIDCard=/^[1-9]\d{
     5}[1-9]\d{
     3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{
     4}$/;
isIDCard=/^[1-9]\d{
     5}[1-9]\d{
     3}((9\d)|(1[9-2]))(([0|1|2]\d)|3[9-1])\d{
     4}$/;

解析:

正确选项
A选项:isIDCard=/^ [1-9] \d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}KaTeX parse error: Undefined control sequence: \d at position 24: …IDCard=/^[1-9] \̲d̲ ̲{5}[1-9]\d{3}((…/
:起始符号,x表示以x开头
: 结 束 符 号 , x :结束符号,x x表示以x结尾
[n-m]:表示从n到m的数字
\d:表示数字,等同于[0-9]
X{m}:表示由m个X字符构成,\d{4}表示4位数字
15位身份证的构成:六位出生地区码+六位出身日期码+三位顺序码
18位身份证的构成:六位出生地区码+八位出生日期码+三位顺序码+一位校验码
C选项的构成:
[1-9]\d{5}:六位出生地区码,出生地区码没有以0开头,因此第一位为[1-9]。
[1-9]\d{3}:八位出生日期码的四位年份,同样年份没有以0开头。
((0\d)|(1[0-2])):八位出生日期码的两位月份,| 表示或者,月份的形式为0\d或者是10、11、12。
(([0|1|2]\d)|3[0-1]):八位出生日期码的两位日期,日期由01至31。
\d{4}:三位顺序码+一位校验码,共四位。
A选项的构成:
[1-9]\d{7}:六位出生地区码+两位出生日期码的年份,这里的年份指后两位,因此没有第一位不能为0的限制,所以合并了。
后面的与C选项类似了。
好吧其实我也是第一次知道身份证还有15位的。


你可能感兴趣的:(牛客刷题,mvc,java,java-ee)