杂学(考试前抱抱佛脚记录的东西)

MVC 的三大对象

MVC设计模式,也可以说是设计思想,就是将应用程序设计中需要实现的各种功能进行分离,抽离出 Model,View,Controller 三大类对象,分别实现不同的职责,提高程序的灵活性和复用性。

在这里插入图片描述

  • 模型model用于封装与应用程序的业务逻辑相关的数据以及处理方法,会有相关视图监听此模型。一旦模型的数据发生变化,模型将通知有关的视图。伪代码示例如:
vbnet
复制代码let person = {
name: jack,
age: 22,
education: bachelor,
hello: function(){export("hello,I'm"+ this.name)}
}
  • 视图view是它在屏幕上的显示,描绘的是model的当前状态。当模型的数据发生变化,视图相应地进行刷新。它也是用户进行人机交互的界面。伪代码示例:
less
复制代码let html = `
<p>这里是{{name}}的个人档案</p>
<p>姓名{{name}}</p>
<p>年龄是{{age}}</p>
<p>教育程度是{{education}}</p>
<p>他的问候语: </p>
<p>{{hello()}}</p>`
  • 控制器controller定义用户界面对用户输入的响应方式,起到组织作用,用于控制应用程序的流程,它处理用户的行为,控制view和数据model的改变。伪代码示例:
javascript
复制代码delButton.addEventListener("click", function(){
    delete(data.person);
});
updateButton.addEventListener("click", function(){
    update(data.person, user_import); // 用用户输入user_import去更新数据库
});
  • SpringMVC 五大核心组件

    1.DispatcherServlet  请求入口

    2.HandlerMapping   请求派发,负责请求和控制器建立一一对应的关系

    3.Controller      处理器

    4.ModelAndView    封装模型信息和视图信息

    5.ViewResolver    视图处理器,定位页面

Python 删除redis的key

import redis

# 创建Redis连接
r = redis.Redis(host='localhost', port=6379, db=0)

# 定义要删除的key的前缀
prefix = 'your_prefix'

# 使用SCAN命令遍历匹配前缀的key并删除
cursor = '0'
while True:
    # 执行SCAN命令,获取匹配前缀的key和新的游标
    cursor, keys = r.scan(cursor, match=prefix + '*')

    # 如果没有匹配的key,结束循环
    if len(keys)>0:
         r.delete(*keys)
  

    # 如果游标为0,表示遍历结束
    if cursor == b'0':
        break

隔离级别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FK6WcGZD-1685959619845)(/Users/fanjiangfeng/Library/Application Support/typora-user-images/image-20230518190418330.png)]

  • 1)脏读:一个事务读取到另一个事务中没有提交的数据; 【举例】:A给B发1000块钱,手一抖打了10000,这个钱已经打到B的户口,但是事务还没有提交,这时B查下卡,发现多了9000,兴奋坏了,但是A及时发现,马上回滚差点提交的事务,将数字改回1000再提交。

  • 2)不可重复读(虚读):在同一个事务中两次读取到的数据不一样; 【举例】:A拿着卡去购物,卡里有1000块钱,当A买单时(事务开启),收费系统事先检测到他的卡里有1000,就在这个时候,A的妻子要把钱全部拿出来买首饰,并提交。当收费系统准备扣款时,再检测卡里的金额,发现已经没钱了(第二次检测金额当然要等待A的妻子转出金额事务提交完),A就会很郁闷,钱哪去了。。。

  • 3)幻读:一个事务操作(DML)数据表中所有的记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改; 【举例】:A去消费,花了1千元,A的妻子去查看他今天的消费记录(全表扫描FTS,妻子事务开启),看到确实是花了1千元,就在这时,A又花了1千元买了一个机械键盘,即新增INSERT了一条消费记录,并提交。当妻子打印消费记录清单时(妻子事务提交),发现花了2千元,似乎出现了幻觉,这就是幻读。】

PV操作

P操作的主要动作是:

①S减1;

②若S减1后仍大于或等于0,则进程继续执行;

③若S减1后小于0,则该进程被阻塞后放入等待该信号量的等待队列中,然后转进程调度。

V操作的主要动作是:

①S加1;

②若相加后结果大于0,则进程继续执行;

③若相加后结果小于或等于0,则从该信号的等待队列中释放一个等待进程,然后再返回原进程继续执行或转进程调度。

耦合类型

  1. 数据耦合(Data Coupling):模块之间通过共享数据进行通信。这种耦合发生在一个模块将数据传递给另一个模块,使得后者依赖于前者的数据结构和内容。
  2. 控制耦合(Control Coupling):一个模块通过控制另一个模块的行为来影响它。这种耦合通常发生在一个模块调用另一个模块的函数,以控制其执行流程。
  3. 外部耦合(External Coupling):模块之间通过共享外部接口或文件进行通信。这种耦合发生在模块之间共享公共接口,如共享库、API、文件格式等。
  4. 标记耦合(Stamp Coupling):模块之间通过共享标记或参数进行通信。这种耦合发生在一个模块将数据打包成一个参数或标记,并传递给另一个模块来影响其行为。
  5. 内容耦合(Content Coupling):模块之间通过共享代码或逻辑来通信。这种耦合发生在一个模块直接引用另一个模块的内部实现细节,如直接调用其私有函数或访问其私有变量。
  6. 公共耦合(Common Coupling):多个模块依赖同一个共享的全局数据。这种耦合发生在多个模块之间共享相同的全局变量或状态。
  7. 可视耦合(Visible Coupling):一个模块直接依赖于另一个模块的内部实现细节。这种耦合发生在一个模块引用另一个模块的私有或保护成员。

操作系统

ROM为非易失性,RAM为易失性

注入方式

  • bean的注入有3种方式:1.属性注入、2.构造器注入、3.接口注入。

    bean的创建方式:1.构造器创建、2.实例工厂创建、3.静态工厂创建。

环形复杂度

(1)流图中的区域数等于环形复杂度。
(2)流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
(3)流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。

加密

公开加密(Public Key Encryption)和共享加密(Symmetric Key Encryption)是两种常见的加密算法和加密方式。

  1. 公开加密: 公开加密使用了一对密钥:公钥和私钥。公钥用于加密数据,而私钥用于解密数据。公钥是公开的,可以被任何人使用,而私钥是保密的,只有密钥的拥有者能够访问。公开加密算法通常使用了数学上的难题,如大数分解问题或离散对数问题,以确保数据的机密性和安全性。公开加密广泛用于安全通信、数字签名和身份验证等场景。
  2. 共享加密: 共享加密使用相同的密钥(称为共享密钥)用于加密和解密数据。发送方和接收方必须共享同一个密钥,并且该密钥需要保密。共享加密算法通常是对称加密算法,如AES(Advanced Encryption Standard)和DES(Data Encryption Standard)。共享加密算法的优势在于速度较快,适合对大量数据进行加密和解密。

标准

ISO/IEC 9126是一项国际标准,定义了软件产品质量的评估模型。根据ISO/IEC 9126,软件产品的质量特性分为六个主要方面:

  1. 功能性(Functionality):软件产品所提供的功能是否满足用户的需求和期望。
    • 适用性(Suitability):软件产品的功能是否适用于特定的任务和用户。
    • 准确性(Accuracy):软件产品的功能是否能够准确地完成所期望的任务。
    • 互操作性(Interoperability):软件产品与其他系统或组件的交互是否有效和无障碍。
    • 遵循性(Compliance):软件产品是否符合相关的标准和规范要求。
  2. 可靠性(Reliability):软件产品在特定环境下持续运行的能力。
    • 成熟性(Maturity):软件产品是否稳定可靠,无明显的缺陷和故障。
    • 容错性(Fault Tolerance):软件产品在面对异常情况时的处理能力和恢复能力。
    • 可恢复性(Recoverability):软件产品在故障后的恢复能力和数据完整性保护。
  3. 可用性(Usability):软件产品对用户的易用性和友好性。
    • 可理解性(Understandability):软件产品的界面和操作是否容易理解和学习。
    • 学习性(Learnability):用户是否能够快速掌握软件产品的使用方法。
    • 操作性(Operability):用户在软件产品上进行操作的简易程度和效率。
  4. 效率(Efficiency):软件产品在特定条件下的资源利用效率。
    • 时间行为(Time Behavior):软件产品的响应时间和处理速度是否满足要求。
    • 资源行为(Resource Behavior):软件产品在资源使用上的效率和经济性。
  5. 可维护性(Maintainability):软件产品在修改、调试和维护方面的可操作性。
    • 可分析性(Analyzability):软件产品是否易于进行问题分析和调试。
    • 可修改性(Modifiability):软件产品的修改和扩展是否容易进行。
    • 可测试性(Testability):软件产品是否易于进行测试和验证。
  6. 可移植性(Portability):软件产品在不同环境下的可移植性和适应性。
    • 适应性(Adaptability):软件产品在不同平台和环境中的适应性和兼容性。
    • 安装性(Installability):软件产品的安装和部署过程是否
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
嗨!很高兴回答你关于Python的NumPy库的问题。NumPy是一个强大的科学计算库,提供了高性能的数组对象和各种功能丰富的数学函数。 首先,你可以使用以下命令安装NumPy库: ```python pip install numpy ``` 一旦安装完成,你可以在Python脚本中导入NumPy库: ```python import numpy as np ``` 现在让我们来看一些NumPy的常用功能。 1. 创建NumPy数组: - 使用`np.array()`函数从Python列表或元组创建数组。 - 使用`np.zeros()`创建一个元素全为0的数组。 - 使用`np.ones()`创建一个元素全为1的数组。 - 使用`np.random`模块生成随机数组。 2. 数组操作: - 通过索引访问和修改数组的元素。 - 使用切片操作提取子数组。 - 使用数组的形状、大小和维度等属性。 3. 数学函数: - NumPy提供了丰富的数学函数,例如平方根(`np.sqrt()`)、指数函数(`np.exp()`)、对数函数(`np.log()`)等。 - 通过在数组上应用这些函数,可以进行元素级别的数学操作。 4. 数组运算: - NumPy支持基本的数组运算,如加法、减法、乘法和除法。 - 这些运算可以在两个数组之间进行,也可以在数组和标量之间进行。 5. 线性代数: - NumPy提供了许多线性代数操作的函数,如矩阵乘法(`np.dot()`)、矩阵求逆(`np.linalg.inv()`)、特征值和特征向量(`np.linalg.eig()`)等。 这只是NumPy库的一小部分功能,但对于进行科学计算和数据分析来说非常重要。你可以参考NumPy官方文档以了解更多详细信息:https://numpy.org/doc/ 希望这些信息能帮助你开始学习NumPy库!如果还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值