软件构造复习的一些经验笔记

news/2024/7/21 5:14:35/文章来源:https://blog.csdn.net/qq_34168477/article/details/139280516

软件构造复习的一些经验笔记

术语解释

  • LSP原则(里氏替换原则)

什么是LSP原则,就是A类继承B类,A类应该比B类的spec(规约)更强

换句话说:你爹会做鱼香肉丝,你爹的手艺遗传给了你,所以你肯定会做鱼香肉丝,而且你还有可能比你爹做的鱼香肉丝更好吃

  • 防御性拷贝

什么是防御性拷贝,防御性拷贝就是我传给客户端数据的时候,不能直接把原来的数据给他,我得复制一个新的,把新的给他。因为万一客户把我旧的数据改变了,我手里只有这一份数据,我在用这个数据的时候就成了被改变了的数据了。所以我不得不复制一份新的给他,防止他给我改变了我的数据。

  • AF是啥,RI是啥

AF

想象一下你有一个玩具箱(表示域R),里面有很多不同形状和颜色的积木。这些积木代表的是你玩具箱里的具体玩具。

现在,你想用这些积木来搭一个漂亮的城堡(抽象域A)。城堡就是你心里想象出来的东西,是用积木搭出来的。这时候,你需要一个“魔法配方”,告诉你哪些积木可以搭成城堡。这就是AF,抽象函数。

抽象函数(AF)就像一个魔法配方,它告诉你怎么样用玩具箱里的积木搭成你心里想象的城堡。

RI

想象你的玩具箱里的积木有一些规则,比如:

1.积木不能破损,要完整的。

2.不能有超过50块积木。

这些规则确保了你的玩具箱里的积木是好的,可以用来搭城堡。这些规则就是RI,表示不变量。

表示不变量(RI)就像玩具箱里的规矩,确保里面的积木是完好和正确的,这样你才能用这些积木搭成你想要的城堡。

重要知识

hashCode和equals方法

  • hashCode方法返回对象的哈希码值,它是一个整数。哈希码通常用于散列表中的散列算法,例如Java中的HashMapHashSet等集合。
  • equals方法用于判断两个对象是否相等。它是从Object类继承而来的,默认实现是比较对象的内存地址。
  • 根据Java的规范,hashCodeequals方法必须满足以下条件:
    1. 如果两个对象相等(即 equals(Object obj) 返回 true),那么它们的哈希码值必须相等。即对于任何两个对象 ab,如果 a.equals(b)true,那么 a.hashCode() == b.hashCode() 也必须为 true
    2. 如果两个对象的哈希码值相等,它们并不一定相等。即对于任何两个对象 ab,如果 a.hashCode() == b.hashCode()truea.equals(b) 不一定为 true
    3. 如果对象在equals比较中不相等,那么它们的hashCode值不要求一定不相等,但好的hashCode实现应该尽量避免这种情况。为了提高散列表的性能,不相等的对象尽量具有不同的哈希码值。

异常

在Java编程中,异常分为两大类:checked异常unchecked异常。这两类异常的主要区别在于它们的处理方式以及在编译时和运行时的行为。下面是详细的解释:

Checked异常
定义

Checked异常是那些在编译时就必须处理的异常。这意味着,如果某个方法可能会抛出checked异常,那么该方法要么必须在方法签名中声明该异常,要么必须在方法体内通过try-catch块进行处理。

特点
  • 编译时检查:编译器会强制检查这些异常是否被处理。
  • 必须处理:如果不处理checked异常,代码将无法通过编译。
  • 典型例子IOException, SQLException, ClassNotFoundException 等。
示例代码
java复制代码import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;public class CheckedExceptionExample {public static void main(String[] args) {try {File file = new File("non_existent_file.txt");FileReader fr = new FileReader(file);} catch (FileNotFoundException e) {e.printStackTrace();}}
}

在上面的例子中,FileNotFoundException是一个checked异常,必须通过try-catch块处理,否则编译器会报错。

Unchecked异常
定义

Unchecked异常是那些在编译时不强制要求处理的异常。它们通常是由程序中的逻辑错误或程序员的疏忽引起的。这类异常在运行时才会抛出。

特点
  • 运行时检查:编译器不强制检查这些异常是否被处理。
  • 不强制处理:程序员可以选择处理或不处理unchecked异常。
  • 典型例子NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException 等。
示例代码
java复制代码public class UncheckedExceptionExample {public static void main(String[] args) {int[] numbers = {1, 2, 3};System.out.println(numbers[3]); // 这将抛出ArrayIndexOutOfBoundsException}
}

在上面的例子中,ArrayIndexOutOfBoundsException是一个unchecked异常,程序不会在编译时提醒处理这个异常,但它会在运行时抛出。

异常的继承关系

在Java的异常层次结构中:

  • java.lang.Throwable
    

    是所有异常的根类。

    • java.lang.Exception
      

      是所有checked异常的父类。

      • java.lang.RuntimeException是所有unchecked异常的父类。

因此,checked异常是Exception的直接子类(但不包括RuntimeException及其子类),而unchecked异常是RuntimeException及其子类。

Iterable接口和Iteator接口

  1. 用途
    • Iterable:定义一个集合可以被迭代,但不提供具体的迭代实现。实现Iterable接口的类可以使用增强型for循环。
    • Iterator:提供具体的迭代功能,可以在迭代过程中删除元素。
  2. 方法
    • Iterable只有一个方法iterator(),返回一个Iterator对象。
    • Iterator有三个方法:hasNext()next(),和remove(),用于遍历和修改集合。
  3. 关系
    • 实现Iterable接口的类必须提供一个iterator()方法,该方法返回一个Iterator对象。
    • Iterator接口提供了实际的迭代行为,是遍历集合元素的工具。

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

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

相关文章

新零售收银解决方案:传统门店超市的数字化-亿发

在数字化浪潮的推动下,零售行业正经历着前所未有的变革。阿里巴巴提出的“新零售”概念,不仅仅是一个商业口号,它代表了一种全新的商业模式和运营理念。随着时代的进步和消费需求的不断升级,新零售的兴起已成为行业发展的必然趋势…

【算法】递归、搜索与回溯——汉诺塔

题解:汉诺塔(递归、搜索与回溯算法) 目录 1.题目2.题目背景(拓展了解)3.题解4.参考代码5.细节6.总结 1.题目 题目链接:LINK 2.题目背景(拓展了解) 汉诺塔问题是一个通过隐式使用递归栈来进行实现的一个经典问题,该问题最早的发明人是法国…

科技引领未来:高速公路可视化

高速公路可视化监控系统利用实时视频、传感器数据和大数据分析,通过图扑 HT 可视化展示交通流量、车速、事故和路况信息。交通管理人员可以实时监控、快速响应突发事件,并优化交通信号和指挥方案。这一系统不仅提高了道路安全性和车辆通行效率&#xff0…

景源畅信电商:做抖音运营怎么开始第一步?

在数字化时代的浪潮中,抖音作为一款短视频平台迅速崛起,成为许多人表达自我、分享生活的重要舞台。随着用户量的激增,如何做好抖音运营,尤其是迈出成功的第一步,成为了众多内容创作者和品牌主们关注的焦点。接下来&…

动态规划之买卖股票大集合

目录 引言 1.只能进行一次买卖股票(最多只能买一股股票) 2.可以进行多次股票买卖,且没有手续费(最多只能买一股股票) 3.可以进行多次股票买卖,但是有冷冻期,无手续费(最多只能买一…

深入探究Java自动拆箱与装箱的实现原理

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

对北京新发地当时菜品三十天内价格分布式爬取(1)---(获取当时菜品数据并构建请求数据推入redis)

本次项目网页url 北京新发地: http://www.xinfadi.com.cn/priceDetail.html 我们首先创建一个爬虫用于收集url与请求的data然后b,c,d使用RedisCrawlSpider来对数据进行分布式爬取 在此篇中我们仅介绍爬虫a 一.获取当天所有菜品数据 这是一条请求的负载我们只需要对pubDateSta…

nginx 安全配置

1、前言 前后端分离后,nginx 作为跨域转发工具在日常应用中越来越广泛,它的安全性不能不能忽略。 2、nginx 安装相关说明 2.1 直接下载安装包 在nginx官网下载编译好的安装包,链接地址为nginx: download。如果是linux系统,直接使…

通过date命令给日志文件添加日期

一、背景 服务的日志没有使用日志工具,每次重启后生成新日志文件名称相同,新日志将会把旧日志文件冲掉,旧日志无法保留。 为避免因旧日志丢失导致无法定位问题,所以需要保证每次生成的日志文件名称不同。 二、解决 在启动时&am…

SpringSecurity登录和校验流程简述

认证: 验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户 授权: 经过认证后判断当前用户是否有权限进行某个操作 一、入门案例实现 搭建springboot工程后,创建启动类和Controller,引入SpringSecurity依…

总结 HTTP 协议的基本格式

一、HTTP 是什么 HTTP ( 全称为 " 超文本传输协议 ") 是一种应用非常广泛的 应用层协议 . HTTP 诞生与 1991 年 . 目前已经发展为最主流使用的一种应用层协议 . HTTP 协议目前有三个大版本: HTTP / 1 和 HTTP / 2 都是基于TCP 传输控制协议传输数据。最新版本的…

揭秘:如何使用Python统计女友生日还剩几天?

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:为何需要统计生日天数? 二、需求分析与准备 1. 用户输入格…

【JVM】一次JVM内存泄露分析处理

一次内存泄露分析 背景情况 编写了一个大数据基础组件的可用性监控程序,采用Bootstrap监测端口的方式,使得方法常驻(main线程常驻),通过一个调度线程ScheduledThreadPoolExecutor,定时的调动监测任务。 …

卢文岩博士受邀参与中国科学院大学校友论坛 解码DPU核心价值

近日,第五届中国科学院大学校友创新论坛正式举行,本次论坛聚焦科技前沿领域,旨在搭建高端对话平台,促进产学研深度融合。在大算力时代——AI技术前沿沙龙上,中科驭数高级副总裁、CTO卢文岩博士受邀分享《DPU——连接算…

代码随想录算法训练营第十四天(py)| 二叉树 | 递归遍历、迭代遍历、统一迭代

1 理论基础 1.1 二叉树的种类 满二叉树 只有度为0和2的节点,且度为0的节点在同一层。 深度为k,有2^k-1个节点 完全二叉树 除了最底层可能没填满,其余每层节点数都达到最大。并且最底层节点全部集中在左边。 二叉搜索树 是一个有数值…

农业场景下的slam论文汇总

文章目录 概述2020基于SLA M 技术的高杆环境下小型植保车自主行驶系统研究【M】基于语义 SLAM 的农田感知系统研究[M]Ground-Level Mapping and Navigating for Agriculture Based on IoT and Computer VisionCanopy Density Esti…

线性插值的频域特性

1、抽取和插值的简单说明 抽取和插值是变采样过程中常用的两种手段,其中抽取的目的是降低数据的采样率,以降低对系统存储深度或计算量的要求。插值的目的是提高数据的采样率,以提高系统的计算精度。 M M M倍抽取通常是通过每隔 M M M…

解决GoLand无法Debug

goland 调试的的时候提示如下错误 WARNING: undefined behavior - version of Delve is too old for Go version 1.22.3 (maximum supported v 其实个原因是因为正在使用的Delve调试器版本太旧,无法兼容当前的Go语言版本1.22.3。Delve是Go语言的一个调试工具&#…

【前端笔记】记录一个能优化Echarts Geo JSON大小的网站

前端在使用Echarts等可视化图表库会不可避免遇到的问题,渲染地图的数据太大。 而有那么一个网站能给予这个问题一个解决方案:链接在此 使用方法很简单,首先先进入网站,如果进入了会是这个页面: 接着,选择一…

Linux文本文件管理003

★排序、去重、统计★ 1)排序 sort -n按照数值排序 -r降序排列 2)去重 uniq 过滤相邻、重复的行 -c 对重复行计数 3)统计 wc 统计文件中的字节数、单词数、行数 -l 显示行数 今天通过使用grep、awk、cut指令和上面几个选项提取文本文件…