八股文-面向对象的理解
近年来,IT行业的环境相较以往显得有些严峻,因此一直以来,我都怀有一个愿望,希望能够创建一个分享面试经验的网站。由于个人有些懒惰,也较为喜欢玩乐,导致计划迟迟未能实现。然而,随着年底的临近,考虑到当前环境下许多开发者可能面临裁员等问题,我决定加速建设这个面试经验分享网站,以便为大家提供学习的平台,共同面对职场的挑战。
当然,我们建设这个网站的目标并非仅仅是为了背诵一些标准答案,而是以面试八股文为切入点,拓展我们的知识广度,构建起一个独特的知识体系。通过这个过程,我们希望能够在职业发展的道路上更为深入地理解行业趋势,形成自己独到的见解,在内卷的道路上越走越卷。
网站地址:http://blog.xiuji.mynatapp.cc/
那么作为一名java开发者,我们还是以面向对象来开启我们的知识分享吧。

面向对象的理解
面向对象编程(Object-Oriented Programming,OOP)是一种程序设计方法,其核心思想是将问题抽象为由若干个对象,通过这些对象之间的调用、配合及协调,共同完成当前的问题。
面向对象的三大基本特征:封装、继承和多态。
面向对象的五大基本原则:单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖反转原则。
面向对象的三大基本特性
面向对象编程(Object-Oriented Programming,OOP)有三大基本特征,它们是封装(Encapsulation)、继承(Inheritance)、和多态(Polymorphism);

- 封装
封装是面向对象编程的基本原则之一,它指的是将数据和操作数据的方法封装在一个单元内,即一个类中。封装通过访问控制修饰符(如private、protected、public)来限制对类的成员的访问。这种封装性能够隐藏对象的内部实现细节,只暴露必要的接口,提高了代码的安全性和可维护性。
- 继承
继承是一种机制,允许一个类(子类)基于另一个类(父类)的定义来构建。子类继承了父类的属性和方法,同时可以通过扩展或修改来增加或改变其行为。继承促进了代码的重用,通过建立类的层次结构,提高了代码的可维护性和扩展性。
- 多态
多态性是指同一个方法在不同的对象上产生不同的行为。在面向对象编程中,多态性有两种主要形式:编译时多态(静态多态)和运行时多态(动态多态)。
编译时多态: 通过方法的重载实现,同一个类中的多个方法拥有相同的名称但不同的参数列表。
运行时多态: 通过方法的覆盖实现,子类可以提供对父类方法的不同实现。
这三大特征共同构成了面向对象编程的基本框架,使得代码更易理解、扩展和维护。
面向对象的五大基本原则
面向对象编程(Object-Oriented Programming,OOP)有五大基本原则,通常被称为SOLID原则;

- 单一职责原则(Single Responsibility Principle,SRP)
一个类应该只有一个引起变化的原因,即一个类应该只负责一项工作。这意味着一个类应该只有一个责任,如果一个类有多个责任,那么在需求变化时可能需要修改多个地方,导致系统更加脆弱。
- 开放封闭原则(Open/Closed Principle,OCP)
软件实体(类、模块、函数等)应该对扩展是开放的,但对修改是封闭的。这意味着当需要添加新功能时,应该通过扩展现有代码而不是修改已有代码。
- 里氏替换原则(Liskov Substitution Principle,LSP)
子类型必须能够替换掉它们的基类型,而程序仍然能够工作。这意味着派生类必须能够替代其基类,而不引起任何错误或异常。
- 接口隔离原则(Interface Segregation Principle,ISP)
一个类不应该强迫客户端(调用它的类)依赖它们不使用的方法。接口应该小而专一,而不是大而全,这有助于减少对无关方法的依赖。
- 依赖反转原则(Dependency Inversion Principle,DIP)
高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象。抽象不应该依赖于具体,具体应该依赖于抽象。这鼓励使用接口和抽象类来实现松耦合,降低模块之间的依赖性。
这五大原则共同构成了一个强大的设计理念,帮助开发者编写可维护、可扩展、灵活的面向对象代码。在实际开发中,遵循这些原则有助于构建更加健壮、可靠的软件系统。
总结
Java的面向对象编程提供了强大而灵活的设计思想,使得开发者可以更好地组织和设计代码。理解这些核心概念,并能够正确地应用于实际项目中,是成为一名熟练Java开发者(职业码农)的关键。
相关文章:
八股文-面向对象的理解
近年来,IT行业的环境相较以往显得有些严峻,因此一直以来,我都怀有一个愿望,希望能够创建一个分享面试经验的网站。由于个人有些懒惰,也较为喜欢玩乐,导致计划迟迟未能实现。然而,随着年底的临近…...
LeetCode【238】除自身意外的数组的乘积
题目: 思路: https://zhuanlan.zhihu.com/p/109306706?utm_id0 代码: int n nums.length;int[] l new int[nums.length];int[] r new int[nums.length];l[0] 1;r[n-1] 1;for (int i1;i<nums.length;i) {l[i] l[i-1] * nums[i-1]…...
c语言从入门到实战——基于指针的数组与指针数组
基于指针的数组与指针数组 前言1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组 前言 指针的数组是指数组中的元素都是指针类型,它们指向某种数据类型的变量。 1. 数组名的理解 我们在使用指针…...
AUTOSAR汽车电子嵌入式编程精讲300篇-面向车载CAN网络的路由和ECU刷写方法
目录 前言 研究现状 车载CAN的“高层协议”研究现状 车载ECU刷写方法研究现状...
软考 系统架构设计师系列知识点之云计算(3)
接前一篇文章:软考 系统架构设计师系列知识点之云计算(2) 所属章节: 第11章. 未来信息综合技术 第6节. 云计算和大数据技术概述 4. 云计算的发展历程 根据云计算的定义和内涵,这里将从虚拟化技术、分布式技术和软件应…...
【万字长文】Python 日志记录器logging 百科全书 之 日志过滤
Python 日志记录器logging 百科全书 之 日志过滤 前言 在Python的logging模块中,日志过滤器(Filter)用于提供更细粒度的日志控制。通过过滤器,我们可以决定哪些日志记录应该被输出,哪些应该被忽略。这对于复杂的应用…...
redis基线检查
1、禁止使用 root 用户启动 | 访问控制 描述: 使用root权限来运行网络服务存在较大的风险。Nginx和Apache都有独立的work用户,而Redis没有。例如,Redis的Crackit漏洞就是利用root用户权限替换或增加authorize_keys,从而获取root登录权限。 加固建议: 使用root切换到re…...
第五章ARM处理器的嵌入式硬件系统设计——课后习题
1ARM处理器的工作状态 ARM处理器有两种工作状态。具体而言,ARM处理器执行32位ARM指令集时,工作在ARM状态,当ARM处理器执行16位thumb指令集时候,工作在thumb状态。 1ARM指令特点 1一个大的,统一的寄存器文件。 2基于…...
Python - GFPGAN + MoviePy 提高人物视频画质
目录 一.引言 二.gif_to_png 三.gfp_gan 四.png_to_gif 五.总结 一.引言 前面我们介绍了 GFP-GAN 提高人脸质量 与 OCR 提取视频台词、字幕,前者可以提高图像质量,后者可以从视频中抽帧,于是博主便想到了将二者进行结合并优化人物 GIF …...
uniapp插件开发
安装android studio:安装目录下bin下的此文件,是用来修改分配给android studio的占用内存。 Android 11足够用。 创建新项目: 目录结构介绍: UI组件介绍:在设计程序界面时可以使用可视化拖拽的方式,没有必要…...
11 Go的作用域
概述 在上一节的内容中,我们介绍了Go的映射,包括:声明映射、初始化映射、操作映射等。在本节中,我们将介绍Go的作用域。在Go语言中,作用域是指变量的可见性范围,它定义了变量在程序中的生命周期和可访问性。…...
RabbitMQ之消息应答和持久化
文章目录 前言一、消息应答1.概念2.自动应答3.消息应答方法4.Multiple 的解释5.消息自动重新入队6.消息手动应答代码7.手动应答效果演示 二、RabbitMQ持久化1.概念2.队列如何实现持久化3.消息实现持久化4.不公平分发5.预取值 总结 前言 在RabbitMQ中,我们的消费者在…...
【分享】Excel“只读方式”的两种模式
查阅Excel表格的时候,担心不小心修改了内容,可以给Excel设置以“只读方式”打开,这样就算修改了内容也不能直接保存表格。Excel表格可以设置两种“只读方式”,一起来看看吧! “只读方式” 1: 打开Excel表…...
华为与美团达成合作,正式启动鸿蒙原生应用开发。
11月13日,华为宣布与美团以HarmonyOS为基础进行产业创新、技术应用、商业发展等方面展开全面合作,全力支持美团启动开发鸿蒙原生应用工作。 自9月25日华为宣布全新HarmonyOS NEXT蓄势待发、鸿蒙原生应用全面启动以来,已有金融、旅行、社交等…...
The 8th China Open Source Conference Successfully Concludes
由开源社主办的第八届中国开源年会(COSCon23)于 2023年10月29日在成都圆满收官。本次大会,为期两天,线下参会报名逾千人次,在线直播观看人数总计 168610 人,直播观看次数达 248725 次,官网累计浏…...
【星海出品】SDN neutron (四) 流分析
Neutron框架之流分析 1.控制端neutron-server通过wsgi接收北向REST API请求,neutron-plugin通过rpc与设备端进行南向通信。 2.设备端agent则向上通过rpc与控制端进行通信,向下则直接在本地对网络设备进行配置。 3.Neutron-agent的实现很多,彼…...
数据分析法宝,一个 SQL 语句查询多个异构数据源
随着企业数据量呈现出爆炸式增长,跨部门、跨应用、跨平台的数据交互需求越来越频繁,传统的数据查询方式已经难以满足这些需求。同时,不同数据库系统之间的数据格式、查询语言等都存在差异,直接进行跨库查询十分困难。 原生跨库查…...
解决:element ui表格表头自定义输入框单元格el-input不能输入问题
表格表头如图所示,有 40-45,45-50 数据,且以输入框形式呈现,现想修改其数据或点击右侧加号增加新数据编辑。结果不能输入,部分代码如下 <template v-if"columnData.length > 0"><el-table-colu…...
Android 透明度设置
目录 一、透明度对照表 二、透明度介绍 三、透明度设置 3.1 xml设置 3.2 代码设置 一、透明度对照表 注:00是完全透明,FF就是完全不透明 我们的UI小姐姐就喜欢给「不透明度」,这个需要自己判断一下。 完全透明:0% HEX: 00 透明度:1%…...
python语言的由来与发展历程
Python语言的由来可以追溯到1989年,由Guido van Rossum(吉多范罗苏姆)创造。在他的业余时间里,Guido van Rossum为了打发时间,决定创造一种新的编程语言。他受到了ABC语言的启发,ABC语言是一种过程式编程语…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
