当前位置: 首页 > news >正文

Java学习-Java基础

1.重写与重载的区别

  • 重写发生在父子类之间,重载发生在同类之间
  • 构造方法不能重写,只能重载
  • 重写的方法返回值,参数列表,方法名必须相同
  • 重载的方法名相同,参数列表必须不同
  • 重写的方法的访问权限不能比父类方法的访问权限更低

2.接口和抽象类的区别

  • 接口是interface,抽象类是abstract
  • 接口的权限修饰符必须是public,抽象类可以是public default protected
  • 接口是被实现的,可以进行多继承,抽象类是用来被继承的,只能是单继承
  • 接口里面可以不有构造方法,抽象类里面可以有构造方法

3.权限修饰符

  • public:全局都可以使用
  • default:不同包的子类可以使用
  • protected:同一个包内可以使用
  • private:同一个类内可以使用

4.深拷贝与浅拷贝

  • 浅拷贝:拷贝对象的引用,新对象的引用类型属性与原始对象共享同一个对象。
  • 深拷贝:拷贝所有引用类型的属性,使原始对象和拷贝对象完全独立。
  • 在 Java 中,默认的 clone() 方法是浅拷贝,需要手动实现深拷贝。

5.强软弱虚

  • 强引用定义:Object obj=new Object();,这里obj就是对Object对象的强引用。不会被垃圾回收,内存不足,JVM 抛出OOM。
  • 软引用定义:通过SoftReference类来实现。当内存不足时,垃圾回收器会回收这些对象。应用场景:常用于实现内存敏感的缓存。
  • 弱引用定义:使用WeakReference类来创建。垃圾回收规则:无论当前内存是否充足,弱引用关联的对象都会被回收。应用场景:常用于解决内存泄漏问题,例如在ThreadLocal中使用弱引用存储键,当外部强引用消失时,ThreadLocal中的弱引用对象能被及时回收。
  • 虚引用定义:通过PhantomReference类实现,且必须和引用队列(ReferenceQueue)联合使用垃圾回收规则:在任何时候都可能被垃圾回收器回收。应用场景:主要用于在对象被垃圾回收时进行一些额外的清理操作,例如管理直接内存(DirectMemory),在对象被回收时释放其占用的直接内存。

6.super和this的区别

  • super是指代调用父类的构造方法,方法,成员变量等
  • this是指代类本身,可以调用本类的构造方法,方法,变量
  • 使用super调用构造方法的时候,必须放在第一行,保证父类先进行加载
  • 使用this调用本类其他构造方法时候也必须放在第一行,避免部分加载的情况

7.sleep和wait区别

  • sleep属于Thread类中的方法
  • sleep释放cpu给其它线程不释放锁资源 sleep(1000) 等待超过1s被唤醒
  • wait属于Object类中的方法释放cpu给其它线程,同时释放锁资源
  • wait(1000) 等待超过1s被唤醒wait() 一直等待需要通过notify或者notifyAll进行唤醒wait 方法
  • wait必须配合 synchronized 一起使用,不然在运行时就会抛出IllegalMonitorStateException异常

8.自动拆装箱 int和Integer区别

  • 装箱:将基本类型转换成包装类对象
  • 拆箱:将包装类对象转换成基本类型的值

为什么引入自动装拆箱功能?

主要是用于java集合中,List list=new ArrayList();list集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象。

Integer-128和+127的问题

Integer对-128到127之间的数字进行缓存,如果在这个范围比较直接取出缓存对象进行比较,如果超出了范围就新建对象,所以说==在范围内有效,超出范围就要用equals

==和equals区别

  • ==比较的是两个基本数据类型的值或者引用数据类型的地址
  • equals没重写之前比较的是两个对象的地址,重写一般比较对象属性的值

String能被继承吗

  • 不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。
  • 为了安全。String 类中有native关键字修饰的调用本地方法,如果方法可以重写,可能被植入恶意代码,破坏程序。Java 的安全性也体现在这里。

String a = “abc” String a = new String(“abc”),在内存中的区别

  • String a = “123"会先检查常量池中是否有"abc”,有的话直接让a指向这个字符串,没有的话就创建放入常量池
  • String a = new String(“abc”)是在堆内存中创建String对象

常量池的作用以及工作原理

  • 缓存字符串对象,避免字符串重复创建,节省空间
  • 当创建字符串时候,JVM先检查常量池,存在就复用,不存在就创建并放入
  • 对于new的字符串对象,也可以通过intern方法放入常量池

String buffer和String builder区别

  • StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,效率低。
  • StringBuilder 没有这个修饰,可以被认为是线程不安全的。效率高

为什么有了String还要StringBuilder

  • String是不可变的,每次对String进行修改都会创建新的对象,消耗资源
  • StringBuilder是可变的,能在原有对象上修改内容,节省时间

final、finally、finalize

  • final:修饰符(关键字)有三种用法:修饰类、变量和方法。修饰类时,意味着它不能再派生出新的子类,即不能被继承,修饰变量时,该变量使用中不被改变,即为常量。修饰方法时,不能在子类中被重写。
  • finally:通常放在try…catch的后面构造终执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码都能执行
  • finalize:Object类中定义的方法,这个方法是由垃圾收集器在销毁对象时调用的

Object中有哪些方法(说出5个即可)

  • protected Object clone()—>创建并返回此对象的一个副本。
  • boolean equals(Object obj)—>指示某个其他对象是否与此对象“相等
  • protected void finalize()—>当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
  • Class<? extendsObject> getClass()—>返回一个对象的运行时类。
  • int hashCode()—>返回该对象的哈希码值。
  • void notify()—>唤醒在此对象监视器上等待的单个线程。
  • void notifyAll()—>唤醒在此对象监视器上等待的所有线程。
  • String toString()—>返回该对象的字符串表示。

线程的状态生命周期

  • 新建状态(New) :线程对象被创建后,就进入了新建状态。Thread thread = new Thread()。
  • 就绪状态(Runnable): 调用了该对象的start()方法,从而来启动该线程。随时准备被CPU调度执行。
  • 运行状态(Running):线程获取CPU权限进行执行。
  • 阻塞状态(Blocked):等待阻塞 – 通过调用线程的wait()方法,让线程等待某工作的完成。同步阻塞 – 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。其他阻塞 – 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
  • 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

IO流分为哪两种

  • 字节流和字符流字节流里面有inputstream和outputstream,字符流里面有reader和writer

BIO NIO AIO区别

  • BIO:阻塞式IO,传统的同步阻塞 I/O 模型,每个连接都需要一个独立的线程进行处理。
  • NIO:非阻塞IO,采用多路复用(Selector 机制),一个线程可以处理多个连接,不需要为每个连接创建独立线程。采用 Buffer 进行数据读写,Channel 负责数据传输
  • AIO:异步非阻塞IO,采用异步回调(基于事件驱动),I/O 操作完成后会自动触发回调方法,无需等待。适用于高并发、高吞吐的场景,如高性能 Web 服务器。

反射是什么

在Java运行时环境中,对于任意一个类,可以知道这个类有哪些属性和方法。对于任意一个对象,可以调用它的任意一个方法。

Class.forName()和ClassLoader.loadClass()有什么区别?

  • Class.forName()默认会触发类的静态代码块(static{}执行)。适用于 JDBC 驱动加载(注册数据库驱动时)。
    仅加载类,不执行静态代码块。
  • ClassLoader.loadClass(“com.example.MyClass”)适用于框架动态加载类(如插件机制)

GET和POST的区别

  • 参数 :GET:用于获取数据请求参数会显示在 URL 上。POST:用于提交数据数据放在请求体中传输。
  • 安全性 :GET:参数暴露在 URL 中,不安全。POST:参数在请求体中,相对安全。
  • 数据长度 :GET:URL 长度有限制,传输的数据量较小。不同浏览器和服务器对 URL 长度限制不同,一般不超过 2KB。POST:理论上无数据长度限制,可传输大量数据。
  • 缓存 :GET:请求会被浏览器主动缓存,下次相同请求可能直接从缓存获取数据。POST:默认不会被缓存。

Cookie 和Session的区别

  • Cookie 是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。以后浏览器再给特定的 web 服务器发送请求时,同时会发送所有为该服务器存储的cookie
  • Session 是存储在 web 服务器端的一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的
  • Web 页面之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去

Http和Https的区别

  • 端口: http默认是80,https默认是443
  • 安全性: http传输不加密不安全,https传输进行加密,相对安全
  • 证书: http没有证书,https有权威机构发布的证书

Http1.0和Http1.1区别

  • http1.0使用的是短连接,每个请求-响应都会新建一个 TCP 连接,请求结束后立即断开(无连接)
  • http1.1使用的是长连接,支持持久连接,可复用 TCP 连接,减少建立连接的开销
  • http1.0:仅支持 GET、POST、HEAD
  • http1.1支持PUT、DELETE、OPTIONS、TRACE等请求

TCP和UDP有什么区别

  • TCP面向连接的,UDP不是
  • TCP保证可靠,UDP不保证(收到消息不确认)
  • TCP传输字节流,UDP传输报文
  • TCP传输准确性比较高的东西(文件,邮件),UDP适用一些比如视频,语音,直播

TCP三次握手,四次挥手

  • 第一次握手:客户端发送SYN给服务端,告诉服务端,请求连接,客户端进入等待回复状态
  • 第二次握手:服务端收到了请求,返回给客户端SYN+ACK包,说明可以进行连接,服务端进入等待
  • 第三次握手:客户端收到了服务端返回来的可以连接信息,重新给服务端发送ACK,建立连接
  • 第一次挥手:客户端发送报文告诉服务端需要断开连接,进入等待回复
  • 第二次挥手:服务端接收到断开连接请求,发送给客户端收到了请求并告诉等一会,然后处理服务端自己的事情第三次挥手:服务端处理完事情,再次发送报文给客户端,告诉可以断开连接了
  • 第四次挥手:客户端发送报文说可以断开了,服务端断开,客户端等一会也断开

浏览器输URL到页面展示过程

  • 浏览器输入URL浏览器经过DNS解析出URL转换成IP地址
  • 浏览器得到IP地址后,通过一个随机端口向服务端发起TCP连接(握手)
  • 浏览器发送get请求,服务器接受到请求返回http响应报文浏览器收到报文后,渲染html

相关文章:

  • Day23-Web开发——Linux
  • 18.电源滤波器的量化选型方法
  • 前端面试 js
  • 顺风车app订单系统框架设计
  • Cursor的使用与安装
  • 基于ART光学跟踪系统打造具有开创性的人车互动VR解决方案
  • css面板视觉高度
  • C语言数据结构—数组(cpu内存与指针)
  • CSS 内容超出显示省略号
  • 计算机视觉算法 segment anything 论文解读
  • Docker容器跑定时任务脚本
  • Spring 与 ActiveMQ 的深度集成实践(四)
  • UE 新建一个自带光照的场景
  • 【Linux系统】静态库与动态库
  • DLMS COSEM 数据对象 与 ASN.1 BER 编码 —— 详解一览
  • 视觉/深度学习/机器学习相关面经总结(2)(持续更新)
  • 【C++ 类和数据抽象】消息处理示例(2)
  • 展销编辑器操作难度及优势分析​
  • 微博安卓版话题热度推荐算法与内容真实性分析
  • Linux CentOS 安装Python 3.8.0
  • 朝鲜证实出兵俄罗斯协助收复库尔斯克
  • 从“网点适老化”到“社区嵌入式”,“金融为老上海模式”如何探索?
  • 女乘客遭顺风车甩客、深夜丢高速服务区,滴滴霸道回应:赔五百元
  • 张译、惠英红分获第二十届中国电影华表奖优秀男、女演员奖
  • 去年立案侦办侵权假冒案件3.7万起,公安部公布13起案例
  • 独家丨前华金证券宏观首席秦泰加盟华福证券,任研究所副所长