大家好,今天我们对java面试题 和最近我面试所遇到的一些面试的难题 (总结反思一下java中的一些必问题)
常见的一些java面试题:
1:悲观锁和乐观锁的区别 悲观锁 在拿数据的时候 默认会被修改 所以他只会允许一个线程去取数据 所以线程锁阻塞的 当一个线程执行结束 才会 释放锁 被另外一个线程 获取数据 悲观锁的一般适用于读 常用的锁为 共享锁和 排他锁 ; 乐观锁 默认 不会被修改 所以在拿数据的时候不会上锁 我们的数据在被修改的时候会发送指令给用户决定 一般适用于多读少写 可以提高吞吐量
2: 面向对象的4大特性 封装 ,继承 ,多态,抽象
封装: 指的是将一个数据 包围和保护 起来不会被外界随便访问 然后只受自己定义的界面设置,封装简单来说可以提高接口的安全性
继承: 继承在面向对象当中指的是 基类的数据 被另外一个类 也可以说基类的子类 他拥有这个基类所有的方法和属性 在继承中一个基类可以被多个子类继承
抽象: 指的是一个数据无关的方面 添加了这个方法更生动的去对数据进行描述这个目标的相关方面
抽象分为 过程抽象和数据抽象
多态: 指的是不同类的对象对同一个方法和消息做出响应 多态包括参数多态和包涵多态
多态具备 抽象 行为共享 对象共享 灵活,代码共享等特性
3:重载和重写
重写 :当一个基类 被子类继承以 会继承该基类的所有方法 所以当我们在子类中对该方法的重新实现叫做重写 重写的特点是包含基类的属性 同参同名同返回值
重载: 重载具多态性 ,重载指的是在同一个类中的同名的方法 不同参数值 返回值也可以不同 的函数叫做重载 重载具备多态的特点 能够使用同名的方法拥有不同的参数
异常:
Throwable 是所有异常的父类 包含 error 和Exception 2种异常
error 是jvm 无法去预期的异常 所以在程序运行的过程中 如果遇到这种异常 我们的程序无法做出判断和指令 顶多只能显示异常信息
Execption 是一种可以被捕捉的异常 在程序运行出现这种异常中可以被抛出解决的恢复程序正常运行
java中一共包含2种异常 chekedExacption 和runtime Exacption
cheked 异常一般是 IO异常和数据库 sql的异常 一般需要适用catch块去解决抛出
而runtime Exaeption 属于运行异常 一般交给虚拟机处理 出现运行异常 程序会一层层的往上抛出 如果是多线程则被Theand.run 抛出 如果是单线程则被 main 抛出 抛出的方法有很多 因为是继承Exeaption的原因所以正常来说也可以被catch处理块 处理抛出
包装类 : 的封装和拆装 正常的包装数据类型有这些 byte Byte double Double char Charter falot Falot
shoit Shoit 等 通过new 的方式将基本类型转换为包装类 通过包装类的vualeof 方法转换为基本类型 名为拆装
JVM垃圾回收机制和了解 如果要了解JVM是怎么回收的 就必须要了解JVM 是一个内存空间 通过类加载器组建 分配类空间 在内存区 运行内存分配一共有5大区域 分别为,方法区,java堆 ,java盏区,和程序计数器还有本地方法栈,
方法区内存储的是常量池构,造函数,变量
java栈 负责存储方法的返回值和局部变量表 和操作栈 每一个方法运行的过程到结束 记录了从进栈到出栈的过程 、
java堆 是一个存储对象和实列对象 的区域 这一块是GC操作的主要区域
java本地方法栈 和java栈相同 但是是存储JVM native 初始方法的
程序计数器 用于保存当前线程的地址 一般在多个线程中保存线程地址以便还原
然后我们在了解一下内存分配
分为动态内存和静态内存 静态内存他是存储方式是系统一次性分配的 的不需要指定的存储大小 而动态的内存 需要指定他的内存大小
然后就是GC垃圾回收机制了
垃圾回收主要针对的是 java堆区域
垃圾回收有很多中算法:如 引用计数法、标记压缩法、复制算法、分代、分区的思想。
如:引用计数算法和可达性分析算法… (太晚了,下一章在聊 2021-11-4 0.12)



