Java核心基础与Kotlin协程测试卷及答案_第1页
Java核心基础与Kotlin协程测试卷及答案_第2页
Java核心基础与Kotlin协程测试卷及答案_第3页
Java核心基础与Kotlin协程测试卷及答案_第4页
Java核心基础与Kotlin协程测试卷及答案_第5页
已阅读5页,还剩5页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java核心基础与Kotlin协程测试卷及答案1.重载和重写的区别?[填空题]_________________________________答案解析:

重载:同类中方法名相同、参数列表不同,编译期确定。

重写:子类重写父类方法,参数相同,运行期确定(多态);重写时Activity要调super.onCreate,因为父类要完成Window创建等初始化。2.==、equals、hashCode的关系?[填空题]_________________________________答案解析:

==:基本类型比值、引用比地址。

equals:默认即==,String等重写为比内容。

重写equals必须重写hashCode,否则HashMap/HashSet中"相等"对象哈希不同,破坏去重约定。3.接口和抽象类区别?[填空题]_________________________________答案解析:

抽象类单继承、可有状态和构造器,语义是"是什么";

接口多实现、变量默认publicstaticfinal,Java8起可有default方法,语义是"能做什么"。4.String为什么不可变?String、StringBuilder和StringBuffer的区别?[填空题]_________________________________答案解析:

String不可变是因为内部char[](byte[])final且不暴露修改;

好处:线程安全、hashCode可缓存、常量池复用、安全性。

区别:StringBuilder非线程安全但速度快,StringBuffer加synchronized线程安全但较慢。5.什么是自动拆箱和装箱?[填空题]_________________________________答案解析:

自动装箱是Java自动将原始数据类型(如int)转换成对应的包装类对象(如Integer);自动拆箱则是将包装类对象自动转换回原始数据类型。这简化了代码,但在循环中频繁拆装箱可能引发性能问题和空指针异常。6.数组和链表的区别?[填空题]_________________________________答案解析:

数组:连续内存空间,支持随机访问(查询快O(1)),但插入和删除慢(需移动元素O(n)),大小固定。

链表:离散内存空间,通过指针连接,插入和删除快(O(1)),但不支持随机访问(查询慢O(n)),大小动态可变。7.请解释浅拷贝和深拷贝的区别及实现方式?[填空题]_________________________________答案解析:

浅拷贝:只复制对象本身及其基本类型属性,引用类型属性只复制引用(指向同一对象)。

实现:重写clone()方法。

深拷贝:完全复制对象及其所有引用类型属性,创建全新的独立对象。

实现:重写clone()并递归克隆引用对象,或通过序列化/反序列化实现。8.序列化和反序列化的原理及目的?如何实现?[填空题]_________________________________答案解析:

目的:将对象状态转换为可保持或传输的格式(如字节流),以便网络传输或持久化存储。原理:将对象的字段状态提取并转换为字节流。实现:类实现Serializable接口,使用ObjectOutputStream进行序列化,ObjectInputStream进行反序列化。9.用过设计模式没有?一共有多少种设计模式?你用过哪几种?[填空题]_________________________________答案解析:

GoF定义了23种经典设计模式,分为创建型、结构型和行为型。实际开发中常用的有:单例模式(保证全局唯一实例)、工厂模式(解耦对象创建)、观察者模式(事件监听/回调)、适配器模式(接口兼容)、代理模式(AOP/网络请求封装)等。(此题为开放性问题,结合个人项目经验作答即可)。10.ArrayList和LinkedList区别?[填空题]_________________________________答案解析:

ArrayList基于动态数组,随机访问O(1),插删O(n);LinkedList基于双向链表,插删头部O(1),随机访问O(n)。11.ArrayList扩容机制?[填空题]_________________________________答案解析:

默认容量10,扩容为原来1.5倍(oldCap+oldCap>>1),通过Arrays.copyOf复制数据。12.ArrayList线程安全吗?怎么替代?[填空题]_________________________________答案解析:

不安全:并发add会丢数据、size错乱。替代方案:CopyOnWriteArrayList、Collections.synchronizedList、Vector(旧)。13.HashMap原理?[填空题]_________________________________答案解析:

数组+链表+红黑树(JDK8)。hash=高16位异或低16位;(n-1)&hash定位桶(n为2的幂,位运算代替取模);冲突尾插,链表≥8且数组≥64树化,≤6退化。默认容量16、负载因子0.75,超12扩容2倍。14.创建线程方式有几种?[填空题]_________________________________答案解析:

继承Thread类、实现Runnable接口、实现Callable接口(有返回值配FutureTask)、使用线程池(生产环境推荐)。15.sleep和wait区别?[填空题]_________________________________答案解析:

sleep是Thread静态方法,不释放锁,时间到自动醒;wait是Object方法,须在同步块内调用,释放锁,需notify唤醒。16.synchronized三种用法?[填空题]_________________________________答案解析:

实例方法(锁this)、静态方法(锁Class)、代码块(锁指定对象)。底层:monitorenter/monitorexit+ACC_SYNCHRONIZED。锁升级:偏向→轻量级(自旋)→重量级,不可逆。17.synchronized和Lock的区别?[填空题]_________________________________答案解析:

1.用法:synchronized是关键字,自动释放锁;Lock是接口(如ReentrantLock),需手动加锁和释放锁(finally中unlock)。2.灵活性:Lock支持公平锁、可中断等待、超时获取锁;synchronized不支持。3.性能:在竞争不激烈时synchronized优化后性能很好,激烈时Lock性能更优。18.volatile作用?[填空题]_________________________________答案解析:

①可见性:写立即刷主存,读失效缓存;②禁止指令重排(内存屏障)。不保证原子性,i++仍会丢更新。经典场景:DCL单例防new三步重排。19.如何保障线程安全?[填空题]_________________________________答案解析:

1.使用同步机制:synchronized、Lock。2.使用原子类:AtomicInteger等CAS操作。3.使用线程安全容器:ConcurrentHashMap、CopyOnWriteArrayList。4.使用不可变对象:final、String。5.避免共享状态:使用ThreadLocal。20.线程池7参数和执行流程?[填空题]_________________________________答案解析:

核心线程数、最大线程数、空闲存活时间、单位、任务队列、线程工厂、拒绝策略。流程:核心未满新建→核心满入队→队列满建非核心→达到最大走拒绝策略(Abort/CallerRuns/Discard/DiscardOldest)。21.Java的四大引用分别是什么?有什么作用?[填空题]_________________________________答案解析:

强引用(不回收)、软引用(内存不足回收,适合做缓存)、弱引用(下次GC必回收,如LeakCanary)、虚引用(仅用于回收通知)。22.GC怎么判定对象可回收(垃圾回收机制)?[填空题]_________________________________答案解析:

可达性分析:从GCRoots(栈引用/静态变量/常量/JNI)出发不可达即回收。算法:标记清除/复制(新生代Eden:S0:S1=8:1:1)/标记整理(老年代)。23.协程是什么?[填空题]_________________________________答案解析:

可挂起的轻量级并发;挂起不阻塞线程;结构化并发:父子作用域联动,父取消子全取消。24.launch和async区别?[填空题]_________________________________答案解析:

launch无返回值返回Job;async有返回值返回Deferred,await()取结果。25.launch的try-catch包里面还是外面?[填空题]_________________________________答案解析:

里面。外面捕获不到异步异常。也可用CoroutineExceptionHandler。26.协程启动模式CoroutineStart有几种?分别是什么[填空题]_________________________________答案解析:CoroutineStart.DEFAULT

自动调度启动(默认)CoroutineStart.LAZY

延迟调度CoroutineStart.UNDISPATCHED

立即调度CoroutineStart.ATOMIC

立即调度,在遇到第一个挂起之前,不可取消的27.Flow冷流和热流区别?[填空题]_________________________________答案解析:

冷流flow{}:有collect才执行,每个收集者独立跑一遍。热流StateFlow/SharedFlow:独立于消费者存在,多方共享,StateFlow保最新值去重,SharedFlow可重放。28.热流StateFlow和ShardFlow有什么区别?[填空题]_________________________________答案解析:ShardFlow通用事件流可配置缓冲区与重放数量(`replay`默认为0),支持多播,默认不去重适合事件总线(如Toast提示、页面导航、埋点上报等一次性事件),无需订阅者获取历史状态StateFlow状态容器流创建时强制要求初始值,始终持有“最新值”(其`replay`固定为1)且自动去重(连续相同的值会被忽略)适合UI状态管理(如MVI/MVVM架构中的界面状态),确保UI始终能获取到最新且有效的状态29.SupervisorJob干什么?[填空题]___________________________

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论