面试问答总结之Java进阶

文章目录

  • 🐒个人主页
  • 🏅JavaEE系列专栏
    • 📖前言:
    • 🎀注解Annotaion (java标注)
      • 🐕内置注解
      • 🐕元注解
    • 🎀对象克隆
      • 🐕如何实现克隆
        • 🐕如何实现深克隆?
        • 🏨统一建模语言(Unified Modeling Language,UML)
      • 🐕类与类关系
      • 🐕面向对象设计原则
        • 🪂 单一职责原则:
        • 🪂 开闭原则:
        • 🪂里氏替换原则:“多态”
        • 🪂接口隔离原则:
        • 🪂依赖倒置原则:
        • 🪂迪米特原则:“封装”
        • 🪂组合复用原则:
    • 🎀Java 设计模式(java design patterns)
      • 🐕为什么要学习设计模式
      • 🪀单例模式:
      • 🪀工厂模式:
      • 🪀原型模式:
      • 🪀代理模式:
      • 🪀模板模式:
      • 🪀策略模式:
    • 🎇持续更新...

🐒个人主页

🏅JavaEE系列专栏

📖前言:

本篇博客主要总结面试中对java进阶部分的考察点

🎀注解Annotaion (java标注)

java中的类,方法,变量,参数和包 都可以使用注解,在编译期间或运行期间会对执行注解的类进行解析,完成特定的功能。

🐕内置注解

在这里插入图片描述

🐕元注解

在这里插入图片描述
在这里插入图片描述

🎀对象克隆

将一个对象数据 复制到另一个对象中去,克隆分为浅克隆和深克隆。浅克隆与深克隆的区别是一个对象的引用属性 复制到另一个对象中去时,只把引用属性地址复制了过去,这叫浅克隆。返回一个新对象。

🐕如何实现克隆

在类上面实现一个 Cloneable 接口,再重写Object类中的Clone()方法
在这里插入图片描述

🐕如何实现深克隆?

方式1: 将引用属性的类也实现 Cloneable 接口,重写clone()方法,再到上一级的克隆方法中调用引用属性类的克隆方法,实现深克隆。 缺点:如果层级太多,深克隆很麻烦。
方式2: 通过序列化方式 对象的输 入输出流,引用类都实现Serializable 接口
在这里插入图片描述

🏨统一建模语言(Unified Modeling Language,UML)

UML建模语言是通过图形符号来帮助开发者表示各个模块、类之间的关系的建模语言。
类图:显示类与类之间的内部关系结构,不显示类中的属性

🐕类与类关系

根据类与类之间的耦合度从弱到强排列,UML 中的类图有以下几种关系:
依赖关系:通过一个类A的属性、方法来调用另一个类B的方法、属性,称A依赖B
关联关系

单向关联:类B作为类A的一个引用变量
双向关联:类B作为类A的一个引用变量,同时类A也作为类B的一个引用变量
自关联:类A内部有一个类A的引用变量

聚合关系:强关联关系,整体与部分的关系,但是部分可以脱离整体而存在。(学校与教师)
组合关系:强关联关系,整体与部分关系,部分不能脱离整体而存在(头和嘴)

继承关系:类继承类
实现关系:类实现类
其中继承和实现的耦合度相等,它们是最强的

🐕面向对象设计原则

🪂 单一职责原则:

一个类只负责一个功能领域内相应的职责,不要负责太多,否则内部耦合性太高,不利于扩展。–提倡“低内聚,高耦合”

🪂 开闭原则:

对扩展开放,对修改关闭。在扩展性能时,不建议修改原来的代码,建议新创建一个类来实现新功能,不改动原来的代码。(生产新产品汽车,创建新类继承Abstract Car实现功能即可 )。

🪂里氏替换原则:“多态”

就是在调用父类的地方,我们可以调用子类对象(多态的思想)。子类重写父类方法,可能会对子类自己原来调用父类方法的执行结果产生影响。
继承优点: 代码可服用性(子类可用父类方法)、可拓展性(方法重写、子类可扩展新方法)
继承缺点: 继承是侵入性的,就必须拥有父类的属性和方法,体系结构复杂。耦合性高(如果修改父类的方法可能会对子类造成影响)

🪂接口隔离原则:

每个接口只实现单一特定的功能,不要把许多功能设计到一个接口中,可以设计多个接口来定义多个功能。
可以引入“适配器类…mouseAdapter”

🪂依赖倒置原则:

如果有多个同类型的事物时,应该要抽取出来一个公共类。
具体实现细节应该要依赖抽象,具体类依赖抽象类、接口。

🪂迪米特原则:“封装”

尽可能的封装类的信息,对外界只提供public方法,不泄漏其他信息。可以给内部类、属性进行信息共享,尽可能降低类与类之间的耦合度。

🪂组合复用原则:

在某些情况下,A类中只想用到B类中的某个属性、方法
首先考虑组合、聚合关系,在A中关联B,或者方法中依赖B
其次才考虑继承(因为关联关系的继承耦合性大于组合、聚合)
在这里插入图片描述

🎀Java 设计模式(java design patterns)

设计模式概念最早出现在建筑领域,后来被引入到了软件设计领域。是之前的程序员在实际开发中为了解决经常出现的问题而制定的一系列的解决方案。

🐕为什么要学习设计模式

设计模式是面向对象设计原则的实际应用,通过学习设计模式,可以更好的理解系统的架构,理解封装、继承、多态和类与类之间的关系,去提升代码可复用性、可扩展性、可维护性(对于后期项目添加新功能时,改动成本最低)。

🪀单例模式:

解决一个类在程序中保证只能创建一个对象。(任务管理器窗口、控制面板、系统设置,java中的Runtime类-饿汉式单例)
懒汉单例: 第一次类加载时,不创建对象,只有第一次调用对外部提供的创建对象的方法时,才进行创建。
懒汉式单例存在线程安全问题,

如果有两个线程同时进入创建对象的方法中,此时还没有初始化对象,就可能初始化两个对象。如果给方法加synchronized会导致线程访问效率太低,所以这里用到了 双重检索单例 + volatile关键字来解决这个问题。
在这里插入图片描述
在这里插入图片描述

饿汉单例: 第一次类加载时就创建对象,以后直接调用不会创建新的对象,不会存在线程安全问题。但是类初始化阶段创建对象,会延长类初始化的时间。

🪀工厂模式:

简单工厂模式: 有一个工厂类负责生产某一类的产品,这一类的产品会抽取出来一个抽象公共类、或接口,把创建对象与使用对象分离开(Spring框架就是这个思想)它不属于23种设计模式,因为他工厂内代码写死,不满足开闭原则
在这里插入图片描述

工厂方法模式: 在简单工厂模式的基础上,工厂类也进行抽象,一类抽象产品对应一类抽象工厂,是一类具体产品对应一个具体实施的工厂,扩展产品类只需要添加一个生产新产品的工厂和一个新产品类即可。满足开闭原则缺点:增加了额外的代码量。
在这里插入图片描述
抽象工厂模式: 对于工厂方法模式,一个类对应一个产品,但是哪怕产品与产品之间使用联系的,也必须一个类对应一个工厂。(华为手机、华为汽车…)如果产品属于一个“系列”(公司),那么可以按“系列”来划分工厂,一个系列工厂可以生产不同类型、属于公司旗下的产品。抽象工厂定义产品类型,具体工厂实施。
在这里插入图片描述

🪀原型模式:

创建多个相同的对象,每次使用new开销比较大,因为每个对象里面的内容一样,所以我们可以先创建一个对象,其余的使用对象克隆来实现。这样速度很快。

在这里插入图片描述

在这里插入图片描述

🪀代理模式:

目标对象的代理人,(汽车厂中介),除了实现目标对象功能外还能实现一些额外的功能。使目标对象与添加新的功能相隔离,降低耦合度。
静态代理: 需要实现接口 来重写里面的方法并添加相关服务。满足开闭原则,添加一类目标,可以添加一个代理类。不太适合框架使用(代码是写死的,不灵活,不能对任意类代理)。
在这里插入图片描述

动态代理: 我们不需要手动的创建代理类,只需要编写一个动态处理器即可,由动态处理器创建代理对象,代理对象再执行功能。分为jdk代理、cglib代理
jdk代理: 动态代理的实现方式是通过反射来实现的,动态处理器需要实现InvocationHandler接口,实现获取代理对象的方法,传入参数为目标类的类加载器, 获取目标类的接口、动态处理器,从而生成一个代理对象。代理对象再使用invok()方法执行相关功能。缺点:目标对象仍然需要实现接口
在这里插入图片描述
在这里插入图片描述
cglib代理: 引入此jar包后,它底层采用了字节码技术,为目标类创建一个子类,并在子类中采用方法拦截技术拦截父类调用的所有方法,顺便植入横切逻辑代码(AOP)。目标类不能是final修饰的,否则会报错。
如果方法被final/satic修饰或私有化,则此方法不会被子类拦截(因为没有被继承)。即不会执行额外的代理服务。
spring中两种动态代理的方式都实现了,它会根据目标类是否实现了接口,来选择使用哪一种动态代理。 默认采用cglib代理方式。

🪀模板模式:

将一段流程,(预约、挂号、诊断、出院)流程固定的写到父类里面,像“诊断” 每个人看病的情况都不一样,就定义一个默认方法/抽象方法,用一个子类来重写一下即可。
在这里插入图片描述

🪀策略模式:

在这里插入图片描述

(剩下的设计模式就不列举了…)

🎇持续更新…

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

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

相关文章

C#,最小代价多边形三角剖分MCPT(Minimum Cost Polygon Triangulation)算法与源代码

1 最小代价多边形三角剖分算法 凸多边形的三角剖分是通过在非相邻顶点(角点)之间绘制对角线来形成的,这样对角线就不会相交。问题是如何以最小的代价找到三角剖分的代价。三角剖分的代价是其组成三角形的权重之和。每个三角形的重量是其周长…

LLM春招准备(1)

llm排序 GPT4V GPT-4V可以很好地理解直接绘制在图像上的视觉指示。它可以直接识别叠加在图像上的不同类型的视觉标记作为指针,例如圆形、方框和手绘(见下图)。虽然GPT-4V能够直接理解坐标,但相比于仅文本坐标,GPT-4V在…

蓝桥杯练习题——dp

五部曲(代码随想录) 1.确定 dp 数组以及下标含义 2.确定递推公式 3.确定 dp 数组初始化 4.确定遍历顺序 5.debug 入门题 1.斐波那契数 思路 1.f[i]:第 i 个数的值 2.f[i] f[i - 1] f[i - 2] 3.f[0] 0, f[1] 1 4.顺序遍历 5.记得特判 …

Web前端---表格和表单

1.表格概述 表格标记&#xff1a;<table></table> 表格标题标记&#xff1a;<caption></caption> 表头&#xff1a;<th></th>------heading 行标记&#xff1a;<tr></tr>-----r是row 列标记&#xff1a;<td></t…

数据可视化原理-腾讯-散点图

在做数据分析类的产品功能设计时&#xff0c;经常用到可视化方式&#xff0c;挖掘数据价值&#xff0c;表达数据的内在规律与特征展示给客户。 可是作为一个产品经理&#xff0c;&#xff08;1&#xff09;如果不能够掌握各类可视化图形的含义&#xff0c;就不知道哪类数据该用…

快速搭建Vue前端框架

快速搭建Vue前端框架 安装Vue Vue官方安装过程:https://cli.vuejs.org/zh/guide/installation.html 二.创建Vue工程 2.2 安装淘宝镜像 安装淘宝镜像&#xff08;会让你安装Vue的速度加快&#xff09;&#xff1a; npm config set registry https://registry.npm.taobao.or…

CMU 10-414/714: Deep Learning Systems --hw0

hw0 宏观上的步骤: softmax loss: 实现softmax loss代码 概念 softmax就是将结果映射到0~1之间,且所有结果相加为1(概率形式)cross-entropy loss就是计算 p ( x ) log ⁡ q ( x ) p(x)\log {q(x)} p(x)logq(x),此值可用于衡量实际输出与期望输出的距离,进而衡量预测模…

Qt 实现橡皮擦拭显示图片

1.简介 在一些游戏中看见类似解密破案的效果&#xff0c;使用手触摸去擦拭图片上的灰尘&#xff0c;然后显示最终的图片&#xff0c;所以也想试试Qt实现的效果。大家有自己想做的效果&#xff0c;都可以尝试。 以下是效果展示图。 可以控制橡皮擦的大小&#xff0c;进行擦拭…

CRMCHAT修复获取客户ip信息,地区信息

CRMCHAT修复获取客户ip信息&#xff0c;地区信息-TP源码网原因&#xff1a; 因pv.sohu.com/cityjson?ieutf-8接口已无法正确获取ip信息&#xff0c;导致后台站点统计无法正确获取用户ip信息&#xff0c;无法获取地区信息 修改 注释掉无用接口地址 修复ip信息 也可以使用&…

NLP评价指标

一、分类任务常见评估&#xff1a; 准确度(Accuracy) 评估预测正确的比例&#xff0c;精确率(Precision) 评估预测正例的查准率&#xff0c;召回率(Recall) 评估真实正例的查全率。如果是多分类&#xff0c;则每个类别各自求P、R最终求平均值。 TP&#xff08;True Positives…

11. Nginx进阶-HTTPS

简介 基本概述 SSL SSL是安全套接层。 主要用于认证用户和服务器&#xff0c;确保数据发送到正确的客户机和服务器上。 SSL可以加密数据&#xff0c;防止数据中途被窃取。 SSL也可以维护数据的完整性&#xff0c;确保数据在传输过程中不被改变。 HTTPS HTTPS就是基于SSL来…

【Unity】Node.js安装与配置环境

引言 我们在使用unity开发的时候&#xff0c;有时候会使用一些辅助工具。 Node.js就是开发中&#xff0c;经常会遇到的一款软件。 1.下载Node.js 下载地址&#xff1a;https://nodejs.org/en 2.安装Node.js ①点击直接点击Next下一步 ②把协议勾上&#xff0c;继续点击…

【lua】lua内存优化记录

这边有一个Unity项目用的tolua&#xff0c; 游戏运行后手机上lua内存占用 基本要到 189M&#xff0c; 之前峰值有200多。 优化点1 加快gc频度&#xff1a; 用uwa抓取的lua内存&#xff0c; 和unity的mono很像&#xff0c;内存会先涨 然后突然gc一下&#xff0c;降下来。 这样…

java数据结构与算法刷题-----LeetCode687. 最长同值路径

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 深度优先&#xff0c;用下面的儿子判断2. 深度优先&#xff0…

UI 自动化测试实战(二)| 测试数据的数据驱动

数据驱动就是通过数据的改变驱动自动化测试的执行&#xff0c;最终引起测试结果的改变。简单来说&#xff0c;就是参数化在自动化测试中的应用。 测试过程中使用数据驱动的优势主要体现在以下几点&#xff1a; 1.提高代码复用率&#xff0c;相同的测试逻辑只需编写一条测试用例…

服务器后端是学习java还是php

没有绝对的"最好"语言&#xff0c;每种后端语言都有其适用的场景和特点。以下是几种常用的后端语言&#xff1a; 1. Java&#xff1a;Java是一种通用且强大的语言&#xff0c;广泛用于企业级应用和大型系统。它有很好的性能和可靠性&#xff0c;并且具有优秀的生态系…

光辐射测量(1)基本介绍+辐射度量、光辐射度量基础

基本情况&#xff1a;本门课就是对“三度学”进行学习。“三度学”包括辐射度学、光度学、色度学。主要掌握其基本概念、原理、物理量的互相转换关系、计算分析方法、测量仪器与测试计量方法等。 三者所覆盖的范围如图。 辐射度学&#xff1a; 辐射度学是一门研究电磁辐射能测…

自测-5 Shuffling Machine(python版本)

文章预览&#xff1a; 题目翻译算法python代码oj反馈结果 题目 翻译 shuffle是用于随机化一副扑克牌的过程。由于标准的洗牌技术被认为是薄弱的&#xff0c;并且为了避免员工通过不适当的洗牌与赌徒合作的“内部工作”&#xff0c;许多赌场使用了自动洗牌机。你的任务是模拟一…

H5小游戏,象棋

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境&#xff0c;解压后浏览器直接打开。有需要的订阅后&#xff0c;私信本人&#xff0c;发源码&#xff0c;含60小游戏源码。如五子棋、象棋、植物大战僵尸、贪吃蛇、飞机大战、坦克大战、开心消消乐、扑鱼达人、扫雷…

C++:Vector的使用

一、vector的介绍 vector的文档介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以…