Java基础笔试练习(四)(1)

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
D.CountDownLatch

答案:

C

解析:

A、Semaphore:类,控制某个资源可被同时访问的个数;

B、ReentrantLock:类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大;

C、Future:接口,表示异步计算的结果;

D、CountDownLatch: 类,可以用来在一个线程中等待多个线程完成任务的类。

10.下面有关java实例变量,局部变量,类变量和final变量的说法,错误的是?


A.实例变量指的是类中定义的变量,即成员变量,如果没有初始化,会有默认值。

B.局部变量指的是在方法中定义的变量,如果没有初始化,会有默认值

C.类变量指的是用static修饰的属性

D.final变量指的是用final 修饰的变量

答案:

B

解析:

B.定义在类中的变量是类的成员变量,可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型例如int则会默认初始化为0

局部变量是定义在方法中的变量,必须要进行初始化。

被static关键字修饰的变量是静态的,静态变量随着类的加载而加载,所以也被称为类变量

被final修饰的变量是常量

11.关于JAVA的垃圾回收机制,下面哪些结论是正确?


A.程序可以任意指定释放内存的时间

B.JAVA程序不能依赖于垃圾回收的时间或者顺序

C.程序可明确地标识某个局部变量的引用不再被使用

D.程序可以显式地立即释放对象占有的内存

答案:

B

解析:

java提供了一个系统级的线程,即垃圾回收器线程。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲时,自动回收每块可能被回收的内存,GC是完全自动的,不能被强制执行。程序员最多只能用System.gc()来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。当对象的引用变量被赋值为null,可能被当成垃圾。

12.JSP分页代码中,哪个步骤次序是正确的?


A.先取总记录数,得到总页数,最后显示本页的数据。

B.先取所有的记录,得到总页数,再取总记录数,最后显示本页的数据。

C.先取总页数,得到总记录数,再取所有的记录,最后显示本页的数据。

D.先取本页的数据,得到总页数,再取总记录数,最后显示所有的记录。

答案:

A

解析:

1、count(*)得到总记录数

2、计算总页数

3、获取所有记录(个人感觉这一步不需要,可以直接获取指定页数数据)

4、过滤显示本页数据

13.关于访问权限说法正确的是 ? ( )


A.外部类前面可以修饰public,protected和private

B.成员内部类前面可以修饰public,protected和private

C.局部内部类前面可以修饰public,protected和private

D.以上说法都不正确

答案:

B

解析:

(1)对于外部类而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别:public和默认。因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此 private 和 protected 访问控制符对外部类没有意义。

(2)内部类的上一级程序单元是外部类,它具有 4 个作用域:同一个类( private )、同一个包( protected )和任何位置( public )。

(3)因为局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制修饰符修饰。

14.以下代码执行的结果显示是多少( )?


public class Demo {

class Super{

int flag=1;

Super(){

test();

}

void test(){

System.out.println(“Super.test() flag=”+flag);

}

}

class Sub extends Super{

Sub(int i){

flag=i;

System.out.println(“Sub.Sub()flag=”+flag);

}

void test(){

System.out.println(“Sub.test()flag=”+flag);

}

}

public static void main(String[] args) {

new Demo().new Sub(5);

}

}

A.Sub.test() flag=1,Sub.Sub() flag=5

B.Sub.Sub() flag=5,Sub.test() flag=5

C.Sub.test() flag=0,Sub.Sub() flag=5

D.Super.test() flag=1,Sub.Sub() flag=5

答案:

A

解析:

在继承中代码的执行顺序为:

1.父类静态对象,父类静态代码块

2.子类静态对象,子类静态代码块

3.父类非静态对象,父类非静态代码块

4.父类构造函数

5.子类非静态对象,子类非静态代码块

6.子类构造函数

对于本题来说:在只想new Sub(5)的时候,父类先初始化了int flag=1,然后执行父类的构造函数Super(),父类构造函数中执行的test()方法,因子类是重写了test()方法的,因此父类构造函数中的test()方法实际执行的是子类的test()方法,所以输出为Sub.test() flag=1,接着执行子类构造函数Sub(5) 将flag赋值为5,因此输出结果Sub.Sub() flag=5。最终选择了A。

15.Java多线程有几种实现方法?


A.继承Thread类

B.实现Runnable接口

C.实现Thread接口

D.以上都不正确

答案:

AB

解析:

AB.

多线程一共有三种实现方式

方式1:继承Thread类,并重写run()方法

方式2:实现Runnable接口,实现run()方法

方式3:实现Callable接口,线程结束后可以有返回值,但是该方式是依赖于线程池的。

16.在Jdk1.7中,下述说法中抽象类与接口的区别与联系正确的有哪些?


A.抽象类中可以有普通成员变量,接口中没有普通成员变量。

B.抽象类和接口中都可以包含静态成员常量。

C.一个类可以实现多个接口,但只能继承一个抽象类

D.抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法。

答案:

A B C D

解析:

总结一下

  1. 一个子类只能继承一个抽象类,但能实现多个接口

  2. 抽象类可以有构造方法,接口没有构造方法

  3. 抽象类可以有普通成员变量,接口没有普通成员变量

  4. 抽象类和接口都可有静态成员变量,抽象类中静态成员变量访问类型任意,接口只能public static final(默认)

  5. 抽象类可以没有抽象方法,抽象类可以有普通方法,接口中都是抽象方法

  6. 抽象类可以有静态方法,接口不能有静态方法

  7. 抽象类中的方法可以是public、protected;接口方法只有public

17.根据下面这个程序的内容,判断哪些描述是正确的:( )


public class Test {

public static void main(String args[]) {

String s = “tommy”;

Object o = s;

sayHello(o); //语句1

sayHello(s); //语句2

}

public static void sayHello(String to) {

System.out.println(String.format(“Hello, %s”, to));

}

public static void sayHello(Object to) {

System.out.println(String.format(“Welcome, %s”, to));

}

}

A.这段程序有编译错误

B.语句1输出为:Hello, tommy

C.语句2输出为:Hello, tommy

D.语句1输出为:Welcome, tommy

E.语句2输出为:Welcome, tommy

F.根据选用的Java编译器不同,这段程序的输出可能不同

答案:

CD

解析:

18.Java特性中,abstract class和interface有什么区别()


A.抽象类可以有构造方法,接口中不能有构造方法

B.抽象类中可以有普通成员变量,接口中没有普通成员变量

C.抽象类中不可以包含静态方法,接口中可以包含静态方法

D.一个类可以实现多个接口,但只能继承一个抽象类。

答案:

A B D

解析:

接口中的成员变量被隐式的声明为public static final ,jdk1.8后接口中可以有静态方法而且存在方法体

19.关于下面代码片段叙述正确的是()


代码片段:

byte b1=1,b2=2,b3,b6;

final byte b4=4,b5=6;

b6=b4+b5;

b3=(b1+b2);

System.out.println(b3+b6);

A.输出结果:13

B.语句:b6=b4+b5编译出错

C.语句:b3=b1+b2编译出错

D.运行期抛出异常

答案:

C

解析:

C.被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了。而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。Java中的byte,short,char进行计算时都会提升为int类型。

20.下列那些方法是线程安全的(所调用的方法都存在)


A.

public class MyServlet implements Servlet {

public void service (ServletRequest req, ServletResponse resp) {

BigInteger I = extractFromRequest(req);

encodeIntoResponse(resp,factors);

}

}

B.

public class MyServlet implements Servlet {

private long count =0;

public long getCount() {

return count;

}

public void service (ServletRequest req, ServletResponse resp) {

BigInteger I = extractFromRequest(req);

BigInteger[] factors = factor(i);

count ++;

encodeIntoResponse(resp,factors);

}

}

C.

public class MyClass {

private int value;

public synchronized int get() {

return value;

}

public synchronized void set (int value) {

this.value = value;

}

}

D.

public class Factorizer implements Servlet {

private volatile MyCache cache = new MyCache(null,null);

public void service(ServletRequest req, ServletResponse resp) {

BigInteger i = extractFromRequest(req);

BigInteger[] factors = cache.getFactors(i);

if (factors == null) {

factors = factor(i);

cache = new MyCache(i,factors);

}

encodeIntoResponse(resp,factors);

}

答案:

A C D

解析:

A:没有成员(没有共享资源),线程安全;

B:假设存在线程1和线程2,count初始值为0,当线程1执行count++中count+1(此时未写回最终计算值),这时线程2执行count++中读取count,发生数据错误,导致线程1线程2的结果都为1,而不是线程1的结果为1,线程2的结果为2,线程不安全;

C:成员私有,对成员的set get方法都加重量级锁,线程安全; D:volatile有两个作用:可见性(volatile变量的改变能使其他线程立即可见,但它不是线程安全的,参考B)和禁止重排序;这里是可见性的应用,类中方法对volatile修饰的变量只有赋值,线程安全; 欢迎指正。

推荐


大厂笔试内容集合(内有详细解析) 持续更新中…

ProcessOn是一个在线作图工具的聚合平台~

文末


欢迎关注个人微信公众号:Coder编程

欢迎关注Coder编程公众号,主要分享数据结构与算法、Java相关知识体系、框架知识及原理、Spring全家桶、微服务项目实战、DevOps实践之路、每日一篇互联网大厂面试或笔试题以及PMP项目管理知识等。更多精彩内容正在路上~

新建了一个qq群:315211365,欢迎大家进群交流一起学习。谢谢了!也可以介绍给身边有需要的朋友。

文章收录至
Github: https://github.com/CoderMerlin/coder-programming
Gitee: https://gitee.com/573059382/coder-programming
欢迎关注并star~
微信公众号

最后

小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

程序员代码面试指南 IT名企算法与数据结构题目最优解

这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!

image.png

《TCP-IP协议组(第4版)》

本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。

本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。

image.png

Java开发手册(嵩山版)

这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**

image.png

MySQL 8从入门到精通

本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。

image.png

Spring5高级编程(第5版)

本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

image.png

JAVA核心知识点+1000道 互联网Java工程师面试题

image.png

image.png

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

image.png
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

[外链图片转存中…(img-Nhcpk82j-1714682099304)]

Spring5高级编程(第5版)

本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

[外链图片转存中…(img-4vtSA6tG-1714682099304)]

JAVA核心知识点+1000道 互联网Java工程师面试题

[外链图片转存中…(img-dDEJbJsF-1714682099305)]

[外链图片转存中…(img-linzhiTi-1714682099305)]

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

[外链图片转存中…(img-7Pz5UGfb-1714682099305)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值