技术周总结 2024.05.27~06.02(java bean冲突 & 软件工程)

文章目录

一、05.28 周二

1.1)问题01:java 引用的jar包中bean名称冲突了,怎么解决?

在Java项目中,如果引用的JAR包中存在Bean名称冲突,可以考虑以下几种解决方法:

  1. 使用Spring的别名功能 :

    使用Spring的@Qualifier注解或者在XML配置中使用alias来区分不同的Bean。

    java 复制代码
    @Autowired
    @Qualifier("beanName1")
    private MyBean myBean1;
    
    @Autowired
    @Qualifier("beanName2")
    private MyBean myBean2;
  2. 自定义Bean名称 :

    可以在定义Bean时,通过注解或者XML配置自定义Bean的名称。

    使用注解:

    java 复制代码
    @Bean(name = "customBeanName1")
    public MyBean myBean1() {
        return new MyBean();
    }
    
    @Bean(name = "customBeanName2")
    public MyBean myBean2() {
        return new MyBean();
    }

    使用XML配置:

    xml 复制代码
    <bean id="customBeanName1" class="com.example.MyBean"/>
    <bean id="customBeanName2" class="com.example.MyBean"/>
  3. 使用不同的配置文件 :

    将不同的Bean配置在不同的Spring配置文件中,然后根据需要加载相应的配置文件。

    xml 复制代码
    <!-- applicationContext1.xml -->
    <bean id="bean1" class="com.example.MyBean"/>
    xml 复制代码
    <!-- applicationContext2.xml -->
    <bean id="bean2" class="com.example.MyBean"/>
  4. 重命名Bean :

    如果是第三方库中的Bean名称冲突,可以通过扩展配置文件或者自定义配置来重命名Bean。

    java 复制代码
    @Bean(name = "customBeanName")
    public ThirdPartyBean thirdPartyBean() {
        return new ThirdPartyBean();
    }

通过这些方法,可以有效地解决Java项目中引用的JAR包中Bean名称冲突的问题。

1.2)问题02:使用SparkSession将json字符串转成 DataFrame

scala 复制代码
    val jsonString = "{\"id\":1,\"name\":\"光明\"}"
    val ds = sparkSession.createDataset(Seq(jsonString))(Encoders.STRING)
    var newAddDF : DataFrame = sparkSession.read.json(ds)

二、06.01 周六

2.1)问题01:系统架构师考试中的"软件工程"的知识点

中国系统架构师考试(全国计算机技术与软件专业技术资格(水平)考试,简称软考)的"软件工程"部分涵盖了广泛的知识点,主要涉及软件开发生命周期的各个阶段、软件工程的基本原理和方法、常见的软件开发方法和技术等。以下是软件工程部分的一些主要知识点:

1. 软件工程基础知识

  • 软件工程的定义与目标
  • 软件工程的发展历程与现状
  • 软件危机及其解决方法
  • 软件生命周期模型
    • 瀑布模型
    • 增量模型
    • 螺旋模型
    • V模型
    • 敏捷开发模型

2. 软件开发过程

  • 软件需求工程
    • 需求获取
    • 需求分析
    • 需求规格说明书
    • 需求验证
  • 软件设计
    • 概要设计
    • 详细设计
    • 设计模式(如MVC、工厂模式、单例模式等)
  • 软件实现
    • 编码规范
    • 编程语言选择
    • 重构与优化
  • 软件测试
    • 测试类型(单元测试、集成测试、系统测试、验收测试)
    • 测试策略与方法(白盒测试、黑盒测试、灰盒测试)
    • 测试用例设计
    • 自动化测试工具

3. 软件项目管理

  • 项目计划与估算
    • 估算技术(COCOMO模型、功能点分析)
    • 项目计划编制
  • 项目监控与控制
    • 进度管理
    • 成本管理
    • 风险管理
  • 项目组织与团队管理
    • 团队组建与角色分配
    • 团队沟通与协调
  • 项目收尾
    • 验收与评审
    • 项目总结与经验教训

4. 软件质量保证

  • 软件质量模型(ISO/IEC 9126)
  • 质量管理体系(CMMI,ISO 9001)
  • 配置管理
    • 配置项与配置库
    • 版本控制
    • 变更管理
  • 质量保证活动
    • 质量评审
    • 质量控制

5. 软件工程方法与工具

  • 面向对象方法
    • 面向对象分析(OOA)
    • 面向对象设计(OOD)
    • 面向对象编程(OOP)
  • 结构化方法
    • 结构化分析(SA)
    • 结构化设计(SD)
    • 结构化编程
  • 软件建模工具(如UML)
  • 集成开发环境(IDE)
  • 配置管理工具(如Git, SVN)
  • 项目管理工具(如JIRA, Microsoft Project)

6. 软件维护与演化

  • 软件维护的类型(纠错性维护、适应性维护、完善性维护、预防性维护)
  • 软件再工程
  • 软件逆向工程
  • 软件重构与优化

7. 软件过程改进

  • 软件过程评估
  • 软件过程改进模型(如CMMI,SPICE)
  • 持续集成与持续交付(CI/CD)

8. 软件工程前沿

  • 云计算与软件工程
  • 大数据与软件工程
  • 人工智能与软件工程
  • 微服务架构与DevOps

9. 软件工程实践

  • 实例分析与案例研究
  • 软件工程工具与实践
  • 软件开发最佳实践

10. 法律与道德

  • 知识产权保护
  • 软件工程师职业道德

考试涉及的知识点较为全面,建议考生在复习时全面覆盖这些内容,并结合历年真题进行针对性练习。

2.2)问题02:净室软件工程

净室软件工程(Cleanroom Software Engineering)是一种旨在提高软件质量并减少缺陷的软件开发方法。它借鉴了制造业中的净室理念,通过严格的设计和验证过程来防止缺陷的产生,而不是依赖后期的测试和调试来发现和修正缺陷。

净室软件工程的主要特点

  1. 预防为主的理念

    净室软件工程强调在软件开发的早期阶段,通过严格的规范和方法来预防缺陷的产生,而不是在后期发现和修复缺陷。

  2. 形式化的规格说明

    使用数学或形式化的方法来描述软件的需求和功能。这些形式化的规格说明为软件的设计和验证提供了一个精确的基础。

  3. 结构化的开发过程

    净室软件工程采用迭代和增量式开发方法,通过分阶段的增量构建逐步开发出完整的软件系统。

  4. 严格的验证和审核

    在每个开发阶段进行严格的验证和审核,以确保设计和实现都符合规格说明。验证过程通常包括审查、模拟和形式验证等方法。

  5. 统计质量控制

    通过统计方法控制和评估软件的质量和可靠性。净室软件工程采用统计抽样技术来评估软件的缺陷率和可靠性,从而确保产品的高质量。

净室软件工程的开发过程

净室软件工程的开发过程通常包括以下几个阶段:

  1. 需求分析

    使用形式化方法进行需求分析,生成精确的需求规格说明。

  2. 功能规格说明

    根据需求规格说明,编写形式化的功能规格说明。功能规格说明应明确描述软件的外部行为。

  3. 设计

    基于功能规格说明,进行软件的详细设计。设计过程通常包括模块划分、接口设计和数据结构设计。

  4. 代码实现

    根据设计说明,编写代码。净室软件工程强调代码的清晰和简洁,并遵循严格的编码规范。

  5. 验证和审核

    在每个阶段进行严格的验证和审核,确保设计和实现符合规格说明。常用的验证方法包括代码走查、模拟和形式验证。

  6. 统计质量控制

    通过统计方法评估软件的缺陷率和可靠性,确保产品的高质量。通常采用统计抽样技术来评估软件的质量。

净室软件工程的优点和缺点

优点

  • 高质量和高可靠性:通过严格的规范和验证方法,净室软件工程能够显著提高软件的质量和可靠性。
  • 预防缺陷:强调在开发的早期阶段预防缺陷的产生,从而减少后期的缺陷修复成本。
  • 可预测性:通过统计质量控制,能够对软件的质量和可靠性进行准确的预测和评估。

缺点

  • 高成本和高要求:净室软件工程需要投入大量的时间和资源进行严格的规范和验证,开发成本较高。
  • 复杂性:形式化的规格说明和验证方法需要开发人员具备较高的技术水平和数学素养。
  • 适用范围有限:净室软件工程适用于对质量和可靠性要求极高的软件项目,但对于快速开发和迭代的软件项目可能不太适用。

结论

净室软件工程是一种通过严格的规范和验证方法来预防缺陷、提高软件质量和可靠性的软件开发方法。尽管其实施成本较高,但在对软件质量和可靠性要求极高的领域(如航空、航天、医疗等)具有重要应用价值。

2.3)问题03: 逆向工程的含义

在计算机科学和软件工程中,逆向工程(Reverse Engineering)指的是对软件或硬件产品进行分析以理解其设计和实现细节的过程。逆向工程的主要目的是通过对成品的研究,推导出系统的功能和结构。这个过程通常用于多种目的,例如修复缺陷、分析恶意软件、安全评估、系统兼容性分析以及学习和理解系统的工作原理等。

逆向工程的目的

  1. 修复和维护:当源代码不可用或遗失时,通过逆向工程来理解系统的工作原理,帮助修复缺陷和维护系统。
  2. 安全分析:分析软件或硬件系统的安全性,发现潜在的漏洞和安全隐患。
  3. 兼容性和互操作性:了解系统的接口和协议,以便开发与其兼容的系统或设备。
  4. 恶意软件分析:研究恶意软件(如病毒、木马)的行为和影响,帮助开发防御和修复措施。
  5. 学习和教育:通过逆向工程来理解复杂系统的设计和实现,提升技术能力和知识。
  6. 性能优化:通过分析系统的实现,找到性能瓶颈并进行优化。

逆向工程的方法和工具

方法
  1. 静态分析:不运行程序,直接分析程序的代码和数据。常用方法包括反汇编和反编译。
  2. 动态分析:在运行时对程序进行分析,观察程序的行为和状态变化。常用方法包括调试和运行时监控。
  3. 协议分析:对网络通信协议进行逆向工程,以理解数据交换的格式和流程。
  4. 文件格式分析:分析文件格式和数据结构,以理解和解析文件内容。
工具
  1. 反汇编工具:如IDA Pro、Ghidra,用于将二进制代码转换为汇编代码。
  2. 反编译工具:如JD-GUI、JEB,用于将二进制代码转换为高级语言代码(如Java、C等)。
  3. 调试器:如OllyDbg、WinDbg,用于在运行时分析和调试程序。
  4. 网络分析工具:如Wireshark,用于捕获和分析网络通信数据。
  5. 文件分析工具:如010 Editor,用于分析和编辑二进制文件。

逆向工程的法律和伦理问题

逆向工程在法律和伦理方面具有一定的争议性。不同国家和地区对逆向工程的法律规定不同。在进行逆向工程时,需要注意以下几点:

  1. 版权和专利法:逆向工程可能涉及对受版权和专利保护的软件和硬件的分析,需要遵守相关法律。
  2. 软件许可协议:许多软件许可协议中禁止逆向工程,违反协议可能导致法律纠纷。
  3. 信息安全和隐私:在进行逆向工程时,应注意保护信息安全和个人隐私,不得非法获取和利用他人的数据。
  4. 商业道德:逆向工程应以合法和合伦理的方式进行,不得用于侵权、盗版或其他不正当竞争行为。

结论

逆向工程是一种强大的技术手段,广泛应用于软件和硬件的分析、维护、安全评估等领域。尽管其具有合法和正当的用途,但在使用时需要谨慎,遵守相关法律法规和伦理规范。

相关推荐
wkj0018 分钟前
接口实现类向上转型和向上转型解析
java·开发语言·c#
qqxhb9 分钟前
零基础设计模式——行为型模式 - 观察者模式
java·观察者模式·设计模式·go
寒士obj36 分钟前
类加载的过程
java·开发语言
无名之逆39 分钟前
大三自学笔记:探索Hyperlane框架的心路历程
java·开发语言·前端·spring boot·后端·rust·编程
Chuck1sn41 分钟前
我把 Cursor AI 整合到 Ruoyi 中,从此让 Java 脚手架脱离人工!
java·vue.js·后端
水木石画室44 分钟前
Spring Boot 常用注解面试题深度解析
java·spring boot·后端
hweiyu001 小时前
tomcat指定使用的jdk版本
java·开发语言·tomcat
百锦再1 小时前
.NET 类库开发详细指南c
java·log4j·.net·net·dot
梦境虽美,却不长1 小时前
C语言 学习 宏命令(预处理) 2025年6月9日14:41:39
c语言·开发语言·学习
橘子夏与单车少年k1 小时前
疏锦行Python打卡 DAY 27 函数专题2:装饰器
开发语言·python