人月神话-软件项目管理
软件项目管理–人月神话
软件的设计是降低熵的过程,而开发是增加熵的过程,任何决策都有后果。
增加人手不能加快进度项目延期项目延期的原因有很多,最大的原因可能是产品经理这个人不够熟练,亦或者是需求在变更
如果项目延期,那么增加人手或许并不能加快进度,新人加入项目里面,需要有熟悉项目的时间,熟悉项目就需要技术骨干去带新人,而技术骨干去带新人就会使技术骨干的工作时间减少,工作时间减少就容易去拖延项目的进度,一般这种时候就是工作流程出现了问题,出现工作流程的问题需要去对工作流程去做优化,或者就是增加工作时间,也就是加班,在很多情况下,加班比加人要靠谱
如果必须要加人,那么应该去指定一个老成员去当新人的导师,所谓老带新,避免一个集体的沟通成本,并且要让新人去负责一个相对来说比较独立的模块,让新成员去熟悉代码或者做一个独立的功能,这样新人也就能快速上手项目,并能够给项目带来一些贡献
人月的非线性随着团队的人员增多,每个人负责的工作也就越少,而沟通成本却是指数级别上升,为了尽可能去避免沟通成本,那么最好的方法就是去解耦合,互相依赖越少越好,这也就要去做好并行和先后的管理,
小的开发团队能够保持一 ...
代码规范
Python代码规范一、目标
统一代码风格、命名规范,增强代码可读性和可维护性,供日常开发工作中时参考,以提高团队协作的开发效率。
以下编程规范以Python为标准,其他语言可参考变通
二、编程规约
每一条规范前有【强制】或【推荐】的标签,可以针对性地根据自己需求遵守规范内容
2.1 项目规约
【强制】文件结构
123456789101112131415161718192021222324252627|- main (存放启动项目入口文件)|- app(存放和运行时前后端、数据库交互的控制器文件)|- model |- data (存放数据、数据集处理等文件) |- model.py (存放模型调用、API接口、本地模型训练等文件) |- deploy (存放模型部署相关文件)|- scripts |- internal (存放内部api处理文件) - routers.py (路由模块) - dependencies.py (依赖项模块) |- external (存放外部处理文件) ...
2024年终总结
2024年年终总结前言今年过得很快 尤其软件马上就要“毕业了” 回想一下大学两年半生活,其实时间弹指之间,我们从一群对大学充满憧憬的大学生,变成了一群老油条,回想两年来的学习生活 有遗憾,也有欢快。话说这还是我第一年写年终总结,
今年都干了什么今年年初 我给迪迪搭建了Blog 看了一些博客挂载相关的内容 但是寒假的很长时间 我没有干很多事情 而是去一个Mc服玩了大半个寒假 ,然后看完了计算机网络的课程,刷了一点Pandas相关的算法题 大概20道 然后好长时间没用,忘完了
三月份开始正式参与课题,开始在IEEE上查看论文,煞有其事的每天看一下以前人的工作,然后每周会去开组会,一开始的调研,每周的汇报,使我有一些压力。太理老学长不知道在哪爬了一堆券五块钱就能买到芝士帕尼尼加一杯豆浆,早上七点半送到东门门口 ,过上了一段吃早饭的健康生活,三月中旬,孙若轩在美团实习被抓,导员以他们把你当廉价劳动力,学生时期就是应该好好学习为由强制他离职,并给家长打电话来学校,签字挨处分。给就业党泼了一盆冷水。也是在三月,我写下了第一版简历。
三月中旬送走了第一个去实习的同学,三四月的时候还在一起刷题 每天刷 ...
locust学习
Locust学习
最近修复一个内存泄漏的bug ,低并发情况下很难复现 因此,在运维老哥的建议下,我学习了Locust 进行压力测试,以达到复现内存泄漏的问题
一、前言当我们做Web系统性能测试方案时,压力模拟工具的选择通常是一个绕不开的环节。对于大部分互联网公司的业务规模和测试资源投入,JMeter这个老牌开源性能测试工具能够满足大部分测试需求,它也可能是世面上书籍、博客教程丰富程度仅次于LoadRunner的性能测试工具。然而当我们的场景需要模拟的并发用户数以千为单位时,使用JMeter的成本越来越大,甚至超出我们掌握的资源。此时,我们开始寻找更低成本的方案,而Locust,为这样的方案带来了一种可能。
Locust是开源、使用Python开发、基于事件、支持分布式并且提供Web Ul进行测试执行和结果展示的性能测试工具。而它之所以能够在资源占用方面明显优于JMeter,一个关键点在于两者模拟虚拟用户的方式不同,JMeter通过线程来作为虚拟用户,而Locust借助gevent库对协程的支持,以greenlet来实现对用户的模拟,相同配置下Locust能支持的并发用户数相比JMe ...
操作系统
操作系统
第一章、引论操作系统的主要功能
处理机的管理
储存器的管理
设备管理
文件管理
接口管理
操作系统的特征
并发: 两个或多个事件在同一事件间隔内发生
共享: 系统中的资源可供内存中多个并发执行的进程共同使用
虚拟:把一个物理上的实体变成若干个物理上的对应物
异步:在多道程序的环境下 运行程序走走停停,以不可知的速度向前推进
操作系统在计算机系统中处于计算机硬件和用户之间的位置
操作系统的基本类型有实时操作系统 批处理操作系统以及分时操作系统
实时操作系统:
优先处理紧急事务,实时性、可靠性
批处理操作系统:
多道批处理并发执行,提高资源利用率
分时操作系统:
允许用户与计算机直接交互
第二章 、进程的描述与控制
进程 :动态的程序的一次执行过程
[进程创建, 创建原语].(1)过程:① 为新进程分配一个唯一的进程标识号,并申请一个空白的 PCB.若 PCB 申请失败,则进程创建失败②为进程分配运行所需的资源,如内存、文件、I/O设备、CPU 时间等,这些资源或从 Os 获得,或从父进程获得.若资源不足,则处于创建态,等待内存资源③ ...
Docker学习
Docker学习Docker 是一个应用打包、分发、部署的工具你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。
打包、分发、部署打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在 Windows/Mac/Linux。
重要概念:镜像、容器镜像:可以理解为软件安装包,可以方便的进行传播和安装。容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。
Docker 命令镜像1234567891011121314151617181920212223242526272829docker images #查看镜像#从服务器拉取镜像拉取镜像docker pull 镜像名 #拉取最新版本的镜像docker pull 镜像名:tag #拉取镜像,指定版 ...
Golang学习
Golang速成
golang里的main函数必须要导入package main
1package main
导包1234import( "fmt" "time")
函数 函数的{ 一定是 和函数名在同一行的,否则编译错误
golang中的表达式,加”;”,和不加 都可以,建议是不加
12345func(){ fmt.println("hello Go!") time.sleep(1*time.Second)}
变量的声明方式12345678910111213141516func main(){//方法-:声明一个变量 默认的值是0var a intfmt.Println("a=",a)fmt.Printf("type ofa=&T\n",a)//方法二:声明一个变量,初始化一个值var b int = 100fmt.Printin("b =",b)fmt.Printf("type of b=&am ...
redis学习
Redis学习
什么是 Redis?Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理信息)、Stream(流),并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。除此之外,Redis 还支持事务 、持久化、Lua 脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式,内存淘汰机制、过期删除机制等等。
为什么用 Redis 作为 MySQL 的缓存?主要是因为 Redis 具备「高性能」和「高并发」两种特性。
1、Redis 具备高性能
假如用户第一次访问 MySQL 中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据缓存在 Redis 中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了, ...
Langchain学习
Langchain学习
LangChain是一个框架,用于开发由大型语言模型(LLM)驱动的应用程序。
LangChain 简化了 LLM 应用程序生命周期的每个阶段:
开发:使用LangChain的开源构建块和组件构建应用程序。使用第三方集成和模板开始运行。
生产化:使用 LangSmith 检查、监控和评估您的链条,以便您可以自信地持续优化和部署。
部署:使用 LangServe 将任何链转换为 API。
LLM 支持的最强大的应用程序之一是复杂的问答 (Q&A) 聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 (RAG) 的技术。
什么是RAG?RAG 是一种使用额外数据增强 LLM 知识的技术。
LLM 可以对广泛的主题进行推理,但他们的知识仅限于他们接受培训的特定时间点之前的公共数据。如果要构建可以推理私有数据或模型截止日期后引入的数据的 AI 应用程序,则需要使用模型所需的特定信息来增强模型的知识。引入适当信息并将其插入模型提示符的过程称为检索增强生成 (RAG)。
LangChain有许多组件,旨在帮助构建Q& ...