软件质量与管理 Review

软件工程发展

  • 软件开发的四大本质难题:不可见性、复杂性、可变性、一致性。
    • 除了不可见性以外,其他三个本质难题因项目而异。
    • 四大本质难题互相促进,可以缓解,但是不能够彻底解决。
  • 软件发展的三大阶段
    • 软硬件一体化:50 年代到 70 年代
      • 特点:软件支持硬件完成计算任务、功能单一、复杂度有限、几乎没有需求变更。
      • 开发方法:线性顺序过程、三思而后行(Measure twice,cut once)、编码和改错(code and fix)。
    • 软件成为独立的产品:70 年代到 90 年代
      • 特点:软件摆脱硬件的束缚(操作系统)、功能强大(个人电脑的出现)、需求多变、兼容性要求、来自市场的压力。
      • 开发方法:形式化方法、结构化程序设计和瀑布模型
    • 网络化和服务化:90 年代中期至今
      • 特点:功能更复杂、规模更大、用户数量急剧增加、快速演化和需求不确定、分发方式的变化、进一步的服务化和网络化、盛行开源和共享精神
      • 开发方法:迭代式开发、敏捷开发(XP、Scrum、KanBan)、开源软件开发方式、DevOps
阅读更多
LLM 应用开发框架

前言

最近在美团实习,主要做的是 LLM 开发框架相关的一些工作。想要对这两个月以来的一些工作做一些总结和记录。这个方向还是一个比较新而且最近也比较热的话题,感兴趣的同学或者有想要做这方面的一些实践的同学可以联系我。

阅读更多
LangChain Learning

What is LangChain

LangChain 是一个使用 Python 开发的,用于开发由语言模型(language models)驱动的应用程序的框架。LangChain 的开发旨在让开发人员不单单是通过 API 来使用 LLM 模型,而且还可以:

  1. 具有数据感知能力:将语言模型连接到其他数据源
  2. 具有主体性:允许语言模型与环境交互

因此,LangChain 框架的设计目标就是支持这些类型的应用程序。

阅读更多
Java Agent 技术简单介绍

1 什么是 Java Agent

阅读更多
G1 Garbage Collector

HotSpot Architecture

HotSpot JVM 架构主要有以下几个部分组成:

  1. Class Loader Subsystem
  2. Runtime Data Areas
    1. Method Area
    2. Heap
    3. Java Threads
    4. Program Counter Registers
    5. Native Internal Threads
  3. Execution Engine
    1. JIT Compiler
    2. Garbage Collector
  4. Native Method Inteface
阅读更多
Spring Boot Starter 探究

What is Starter is Spring Boot

首先我们需要了解一下 Spring Boot 中 starter 的概念,Spring Boot 相比 Spring 有以下几个优势:

  1. 创建独立(standalone)的 Spring 应用程序
  2. 相比 Spring,Spring Boot 不需要再打包为 war 然后部署到 Tomcat 的服务器上。Spring Boot 内嵌 Tomcat、Jetty 或者 Undertow
  3. 提供可选的 starter 来简化项目的构建配置
  4. 自动配置 Spring 相关 Bean 和第三方库的相关配置
  5. 无需生成代码,无需 XML 配置
  6. 提供监控(metrics)、运行状况检查、外部化配置的功能

从上面 Spring Boot 的 features 我们可以发现,starter 实际上是为 Spring Boot 提供了一个简化项目构建配置的能力,可以让使用者将精力放在业务逻辑的开发中,而不需要去烦恼如何对一些依赖进行配置,因为这些配置都已经通过 starter 集成到了 Spring Boot 当中,可以作为 Spring Boot 开箱即用的部分,starter 中的 Bean 都已经注入到了 IOC 容器当中,而不需要我们再去手动配置。

阅读更多
Spring 循环依赖

什么是循环依赖

在 Spring 中,循环依赖有如下的几种形式(箭头代表依赖关系)

  1. BeanA -> BeanB -> BeanA(依赖形成闭环关系)
  2. BeanA -> BeanA(自己依赖自己)
阅读更多
文件管理

文件的概念

  • 文件是具有符号名的,在逻辑上具有完整意义的一组相关信息项的序列
  • 文件(document)与计算机文件(file)
  • 文件名是由字母、数字和其他符号组成的一个字符串,其格式和长度因系统而异
阅读更多
操作系统 -- 设备管理

设备管理概述

I/O 设备

  • I/O 设备,又称输入输出设备、外围设备、外部设备、外设:用于计算机系统与外部世界(如用户、其他计算机或设备)的信息交换或存储。
  • I/O 擦欧总:内存和外设间的信息传送操作
    • 影响计算机系统的通用性和可扩充性
    • 影响计算机系统综合处理能力及性价比的重要因素
阅读更多
Java SPI

前言

在面向对象的设计原则中,一般推荐模块之间基于接口编程,通常情况下调用方模块是不会感知到被调用方模块的内部具体实现。一旦代码里面涉及到具体实现类,就违反了开闭原则。如果需要替换一种实现,就需要修改代码。

阅读更多