上海某海外视频平台Android高级工程师视频一面

news2025/5/20 10:10:57

问的问题比较细,有很多小细节在里面,平时真不一定会注意到,做一个备忘:

1.Object类里面有哪些方法?

Object 类是 Java 中所有类的根类,它定义了一些基本方法,供所有类继承和重写

1. 常用方法
1.1 equals(Object obj)
比较两个对象是否“相等”。默认实现是比较对象的引用地址是否相同,
可以在子类中重写实现内容比较。

默认行为:判断引用是否相同。

重写场景:比较内容相等(如 String 类)。

示例:

 String s1 = new String("hello");
 String s2 = new String("hello");
 System.out.println(s1.equals(s2)); // true
1.2 hashCode()
返回对象的哈希码,用于散列存储(如 HashMap、HashSet 等)。
默认实现基于对象地址,常与 equals 一起重写。

约定

如果两个对象通过 equals 方法相等,它们的 hashCode 必须相等。

如果重写 equals,必须重写 hashCode。

示例:

 Object obj = new Object();
 System.out.println(obj.hashCode()); // 输出哈希码
1.3 toString()
返回对象的字符串表示形式。默认实现是对象的类名和内存地址,
可以在子类中重写以提供更有意义的描述。

默认格式:类名@十六进制哈希值

这个 "十六进制哈希值" 是通过调用 hashCode() 方法的结果转换成十六进制表示得来的,
默认hashcode()实现是基于对象的内存地址根据哈希算法计算得出的,
只不过又将结果转换为了16进制

常用场景:日志输出、调试。

示例:

 java复制代码Object obj = new Object();
 System.out.println(obj.toString()); // 类名@哈希码
 ​
 // 重写示例
 @Override
 public String toString() {
     return "Custom String Representation";
 }
1.4 clone()
clone()方法

clone是Java提供的一种方法,用来复制对象。

当你调用一个对象的 clone() 方法时,它会创建一个新的对象。

为什么要实现cloneable接口

默认的 clone() 方法由 Object 类定义。如果一个类希望支持克隆,
它需要实现 Cloneable 接口,告诉 JVM:**“我支持克隆,
你可以调用我的 clone() 方法。”** 否则,调用 clone() 方法时,
会抛出 CloneNotSupportedException 异常。

Cloneable 是一个标记接口,不包含任何方法,只起到一个标记作用。

默认行为:浅拷贝

浅拷贝是 clone() 方法的默认行为,它的特点是:

1、基本数据类型——会直接复制值

2、引用数据类型——只会复制引用,说白了就是只会复制地址。

通俗地说:

浅拷贝创建的新对象的字段内容看起来一样,但是如果字段是引用类型,
它们指向的是同一个内存地址。

改变引用类型字段的内容,会影响原对象和克隆对象。

如何实现深拷贝?

深拷贝是指,不仅要复制对象本身,还要复制对象引用类型字段指向的对象。 
说白了就是克隆对象和原对象完全独立,修改一个不会影响另一个。

1.5 finalize()
在垃圾回收前调用,主要用于释放资源。不推荐使用,因为垃圾回收时间不确定。

不推荐的原因:垃圾回收不保证及时性,finalize 可能不被调用。

示例:

 @Override
 protected void finalize() throws Throwable {
     System.out.println("Finalize called");
 }
2. 线程相关方法
2.1 wait()
让当前线程进入等待状态,直到另一个线程调用 notify() 或 notifyAll()。

必须在同步块(synchronized)中使用。

重载方法

wait():无限等待。

wait(long timeout):等待指定时间。

wait(long timeout, int nanos):等待精确时间。

2.2 notify()
唤醒在当前对象上等待的一个线程(随机唤醒一个)。

2.3 notifyAll()
唤醒在当前对象上等待的所有线程。

3. 其他方法
3.1 getClass()
返回对象的运行时类(Class 对象),用于反射——想要使用反射的话,
第一步就是先获取类对象。

示例:

 Object obj = new Object();
 System.out.println(obj.getClass()); // class java.lang.Object
3.2 registerNatives()
这是 Object 类中的一个本地方法,用于 JVM 的内部初始化,不需要手动调用。

总结:Object 类的方法清单
方法名	功能描述
equals(Object obj)	判断对象是否相等(默认是比较引用地址)。
hashCode()	返回对象的哈希码(默认基于内存地址)。
toString()	返回对象的字符串表示(默认是类名@哈希值)。
clone()	返回对象的浅拷贝。
finalize()	在垃圾回收前调用(不推荐使用)。
wait()	使线程等待,直到被唤醒。
notify()	唤醒在当前对象上等待的一个线程。
notifyAll()	唤醒在当前对象上等待的所有线程。
getClass()	返回对象的运行时类(反射时常用)。
面试准备提示
equals 和 hashCode 的关系?

如果两个对象相等(equals 返回 true),它们的 hashCode 必须相等。(这是一种约定)

hashCode 不相等时,equals 一定不相等。

toString 在实际开发中的用途?

用于调试和日志输出,重写 toString 提供更有意义的信息。

wait() 和 sleep() 的区别?

wait() 释放锁,必须在同步块中使用。

sleep() 不释放锁,不需要同步块。

finalize 为什么不推荐?

垃圾回收时间不可控,finalize 可能导致资源泄漏或性能问题。

了解这些方法的用法、注意事项及典型面试问题,能帮助你在实际开发和面试中更加游刃有余
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/2301_79819426/article/details/143928329

2.GC Roots对象有哪些?

栈帧中的局部变量和参数
这类对象属于上下文中的对象。当线程在执行方法时,
它会将方法打包成一个栈帧压入到栈中去执行,
方法里用到的局部变量会存放到栈帧的本地变量表中。
只要方法还在执行,还没有出栈,就以为这些本地变量表中的对象还会被访问,
GC 就不能回收。所以,这类对象可以作为 GC Roots。

例如,一个方法中定义的局部变量的引用,如果该方法正在执行中,
那么这些引用的对象会被认为是存活的:

public void test() {
    Object obj = new Object(); // 局部变量 obj 引用的对象可能作为 GC Roots
}
方法区常量池引用的对象
常量池中的对象是全局的,它在整个应用程序运行期间是有效的,
所以,作为 GC Roots 也不过分。

例如,字符串常量 "skjava.com" 存在于常量池中,而常量池中的引用也会被视为 GC Roots。

String str = "skjava.com"; // 常量池中的字符串常量
方法区静态变量引用的对象
静态变量属于类级别的变量,它们在整个应用程序生命周期内都存在。
当类被加载时,静态属性被初始化并持有对象的引用。
同时,Class 对象本身是非常难被回收的,只要 Class 对象不回收,静态属性就不能被回收。

public class Test {
    public static Object staticObj = new Object(); // staticObj 引用的对象可能作为 GC Roots
}
JNI本地方法栈中引用的对象
Java 可以通过 JNI(Java Native Interface)调用本地代码,
而 JNI 中的本地代码可以持有对 Java 对象的引用,这些引用是不能被回收的。
所以,也会被视为 GC Roots。

Java 虚拟机内部的引用
JVM 内部的一些特殊数据结构也可能包含对对象的引用,
例如,某些 JVM 内部的管理结构、类加载器相关的对象等。这些对象也会作为 GC Roots。

被同步锁持有的对象
使用 synchronized 关键字进行同步的对象,会被视为 GC Roots。
这些对象在同步块或者方法执行期间会被 JVM 保留,防止被垃圾回收。回收了,锁咋搞?

synchronized (lockObject) {
    // lockObject 持有锁,被视为 GC Roots
}
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/smart_an/article/details/145236728

3.GET请求和POST请求有什么区别?还有哪些其他请求

[Java网络安全系列面试题] GET 和 POST 的区别在哪里?_get和post请求面试题-CSDN博客

4.Https对比Http有哪些不同?

JAVA面试题分享九十三:HTTPS和HTTP 原理?_java 面试题 ssl握手-CSDN博客

5.客户端在使用HTTPS方式与Web服务器通信流程是什么?

JAVA面试题分享九十三:HTTPS和HTTP 原理?_java 面试题 ssl握手-CSDN博客

面试官又问了一个很好的问题:为什么客户端还要产生一个密钥?

答:如果客户端不随机产生一个密钥,拿到公钥就可以直接破解发送的数据了。

6.你是怎么做WebView的性能优化的?

秒开WebView?Android性能优化全攻略_android webview优化-CSDN博客

7.除了锁,还有其他线程安全的方式吗?

Java中的线程安全是如何保证的?_java保证线程安全的方式-CSDN博客

8.Http的Response Code有哪些?

Http请求Response Code含义_responsecode-CSDN博客

9.了解LruCache吗?底层数据结构是怎样的?

小程序【面试官的宝典】里面Android基础部分有讲到。

10.Synchonized锁方法和锁this有什么区别?

都是对象锁,没什么本质的不同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2326431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前后端数据序列化:从数组到字符串的旅程(附优化指南)

🌐 前后端数据序列化:从数组到字符串的旅程(附优化指南) 📜 背景:为何需要序列化? 在前后端分离架构中,复杂数据类型(如数组、对象)的传输常需序列化为字符…

idea报错:程序包不存在

这里的程序包是我们项目里自己写的,idea却报错不存在。 解决方法: 参考这位大佬的方法,OK。

spring boot 整合redis

1.在pom文件中添加spring-boot-starter-data-redis依赖启动器 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2.编写三个实体类 RedisHash("p…

进程间信号

进程间信号 信号的认识信号的产生进程对信号的处理机制普通信号的处理机制实时信号的处理机制 信号集操作函数信号的捕捉 信号的认识 信号的概念&#xff1a;  信号是一种软件中断&#xff0c;它用于通知进程一个异步事件的发生。  这些事件可能来自系统内部&#xff08;如硬…

2011-2019年各省地方财政国债还本付息支出数据

2011-2019年各省地方财政国债还本付息支出数据 1、时间&#xff1a;2007-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区、年份、地方财政粮油物资储备管理等事务 4、范围&#xff1a;31省 5、指标说明&#xff1a;地方财政的国债…

2025华为软件精英挑战赛2600w思路分享

这里写自定义目录标题 得分展示对象定义请求价值计算时间同步删除操作完整思路 得分展示 对象定义 // 将一个磁盘划分为多个基于标签聚合的区块 class Block{ public:int tag 0; // 区块标签int start_pos;int end_pos;int id;int use_size 0;int v;// 为区块确定范围Bloc…

WEB安全-CTF中的PHP反序列化漏洞

什么是序列化&#xff1f; 简单来说序列化是将数组或对象转换成字符串的过程&#xff0c;这样的好处是利于对象存储与传输&#xff0c;在PHP中&#xff0c;序列化函数是serialize()&#xff0c;反序列化是unserialize() 无类序列化 无类序列化顾名思义就是不包含class的序列…

【论文阅读】Co2l: Contrastive continual learning

原文链接&#xff1a;[2106.14413] Co$^2$L: Contrastive Continual Learning 阅读本文前&#xff0c;需要对持续学习的基本概念以及面临的问题有大致了解&#xff0c;可参考综述&#xff1a; Wang L, Zhang X, Su H, et al. A comprehensive survey of continual learning: …

OpenMCU(五):STM32F103时钟树初始化分析

概述 本文主要描述了STM32F103初始化过程系统时钟的初始化,主要描述了系统时钟的初始化&#xff0c;AHB总线时钟&#xff0c;APB总线时钟等的初始化。 硬件板卡3d图 时钟树 STM32F103的时钟树&#xff0c;如下所示: 时钟源选择 从STM32F103的时钟树框图&#xff0c;我们可以…

ISIS报文

IS-IS 报文 目录 IS-IS 报文 一、报文类型与功能 二、报文结构解析 三、核心功能特性 四、典型应用场景 五、抓包数据分析 六、总结 IS-IS&#xff08;中间系统到中间系统&#xff09;协议报文是用于链路状态路由协议中网络设备间交换路由信息的关键载体&#xff0c;其设…

首屏加载时间优化解决

&#x1f916; 作者简介&#xff1a;水煮白菜王&#xff08;juejin/csdn同名&#xff09; &#xff0c;一位前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 高德AMap专栏 &#xff0c;记录一下平时学习在博客写作中记录&#xff0c;总结出的一些开发技巧✍。 感…

RabbitMQ--延迟队列事务消息分发

目录 1.延迟队列 1.1应用场景 1.2利用TTL死信队列模拟延迟队列存在的问题 1.3延迟队列插件 1.4常见面试题 2.事务 2.1配置事务管理器 3.消息分发 3.1概念 3.2应用场景 3.2.1限流 3.2.2负载均衡 1.延迟队列 延迟队列(Delayed Queue)&#xff0c;即消息被发送以后, 并…

Linux服务器组建与管理

#!/bin/bash #判断是否是root用户if [ "$USER" ! "root" ]; then echo "不是root用户&#xff0c;无法进行安装操作" exit 1 fi#关闭防火墙systemctl stop firewalld && systemctl disable firewalld && echo "防火墙已经关…

设计模式 Day 2:工厂方法模式(Factory Method Pattern)详解

继 Day 1 学习了单例模式之后&#xff0c;今天我们继续深入对象创建型设计模式——工厂方法模式&#xff08;Factory Method&#xff09;。工厂方法模式为对象创建提供了更大的灵活性和扩展性&#xff0c;是实际开发中使用频率极高的一种设计模式。 一方面&#xff0c;我们将简…

自动驾驶浪潮下,HMI 设计如何保障安全与便捷?

自动驾驶系统与 HMI 设计的关联性 自动驾驶系统涵盖了一系列复杂的传感器技术、算法以及执行机构。从激光雷达、摄像头等环境感知传感器&#xff0c;到用于处理海量数据的人工智能算法&#xff0c;再到控制车辆行驶的动力与转向执行系统&#xff0c;各部分协同工作&#xff0c…

瑞昱RTD2556QR显示器驱动芯片

一、概述 RTD2556QR芯片是由Realtek公司精心研发的一款高性能显示驱动芯片&#xff0c;专为满足现代显示设备对高分辨率、多功能接口及稳定性能的需求而设计。该芯片凭借其卓越的技术特性和广泛的应用领域&#xff0c;在显示驱动市场中占据重要地位。它集成了多种先进的功能模…

rustdesk 客户端使用

配置中继服务器 RustDesk 搭建-CSDN博客 配置客户端&#xff0c;服务端&#xff08;控制方&#xff0c;被控方&#xff09; 1.下载rustdesk.exe(windows为例) 2.完成后如下 3.配置

碳化硅 MOSFET三相逆变电路损耗新算法

基 于 碳 化 硅 MOSFET三相逆变电路损耗新算法 摘 要 提出了一种三相逆变电路功率开关器件损耗计算的新方法.为了达到将高频电力电子电路和实时仿真算 法 相 结 合 应 用 于 嵌 入 式 实 时 仿 真 平 台 的 目 的 &#xff0c;针 对 工 程 应 用 中 逆 变 器 损 耗 计 算 的 实…

增加等IO状态的唤醒堆栈打印及缺页异常导致iowait分析

一、背景 在之前的博客 在计算进程D状态持续时间及等IO的时间遇到的一处问题-CSDN博客 里&#xff0c;我们修复了一处在抓取D状态及等IO状态堆栈的监控程序的一处时间计算bug&#xff0c;在这篇博客里&#xff0c;我们进一步丰富监控程序&#xff0c;在进程iodelay被唤醒时&am…

新能源汽车空调系统(R134A)性能评估(一)

国内外主流空调系统厂家&#xff1a;贝尔、德尔福、空调国际、法雷奥、电装、松芝、杰信、新电、豫新等 泛亚汽车的空调电子部是比较优秀的整车空调研发团队。 空调系统综合试验台架是一套由试验室、风量测定装置、空气调和器、空气温度测定装置、湿度测定装置、加热器试验辅助…