
软件工程
文章平均质量分 54
许野平
非常喜欢软件设计这份工作,有不错的数学基础,喜欢读书、摄影与音乐。
展开
-
体感游戏开发:硬件配置的基本要求
总的来说,开发体感游戏所需的硬件配置应根据具体需求和预算进行权衡和选择。以上建议仅供参考,实际配置可能因个人喜好和项目需求而有所不同。开发体感游戏所需的硬件配置可能会因游戏的具体需求、目标平台以及开发者的个人偏好而有所不同。原创 2024-11-07 10:04:18 · 366 阅读 · 0 评论 -
UTC是什么?
UTC是许多国际时间标准的基础,包括GMT(格林尼治标准时间),尽管GMT在历史上是先于UTC出现的,并且两者在大多数情况下可以互换使用,但UTC是更加精确和科学的标准。UTC是基于国际原子时(TAI)的时间标准,并且考虑了地球自转的不均匀性进行微调,以保持与天文时间(如平太阳时)的近似一致。在编程和计算机系统中,UTC时间也经常被使用,因为它提供了一种可靠的方式来表示和比较时间,而不受地区夏令时或时区变化的影响。在需要全球时间同步的场合,如国际通信、航空航天、金融交易等领域,UTC是不可或缺的。原创 2024-09-19 16:47:36 · 1200 阅读 · 0 评论 -
Rust: Warp RESTful API 如何得到客户端IP?
在使用 Rust 的 Warp 框架来创建 RESTful API 时,如果你想要获取客户端的 IP 地址,通常需要在处理 HTTP 请求的函数中查看请求的头部或者底层连接的信息。不过,Warp 本身并不直接提供一个简便的 API 来直接获取客户端的 IP 地址,因为这取决于请求是如何被路由到 Warp 应用的(比如是否使用了负载均衡器、反向代理等)。获取到的 IP 地址(这通常是直接连接到你的 Warp 实例的最后一个设备的 IP 地址,可能是一个反向代理或负载均衡器的 IP 地址)。原创 2024-09-11 19:02:18 · 656 阅读 · 0 评论 -
Rust:Restful API 服务程序开发详述
hyper库提供了低级别的HTTP/1和HTTP/2协议支持,可以用于构建高性能的HTTP客户端和服务器。它利用Rust的类型系统来确保代码的正确性,并与Rust的异步生态系统无缝集成,支持异步非阻塞I/O。Warp 建立在 hyper 和 Tokio 这两个异步 Rust 运行时之上,因此它自动继承了 HTTP/1 和 HTTP/2 支持、异步功能以及 hyper 被认为是最快之一的 HTTP 实现。原创 2024-09-03 21:39:07 · 1944 阅读 · 0 评论 -
SOLID:软件系统设计的五个基本原则
例如,单一职责原则可以指导我们使用策略模式来将不同的算法封装在独立的类中,从而使得它们可以互相替换。:在软件中,如果 S 是 T 的子类型,那么程序中使用 T 类型的对象的地方都可以用 S 类型的对象来替换,而不会改变程序的期望行为。这意味着代码应该依赖于接口或抽象类,而不是具体的实现类,从而提高系统的可维护性和可扩展性。也就是说,新的功能应该通过添加新代码来实现,而不是修改现有的代码。总之,SOLID 原则并不是五种设计模式,而是一套指导面向对象设计和编程的原则,有助于我们更好地选择和实施设计模式。原创 2024-06-27 15:56:46 · 501 阅读 · 1 评论 -
了解一下:免费的安装程序制作软件
这些软件都是免费且功能强大的安装程序制作工具,你可以根据自己的需求选择适合的工具来制作安装程序。原创 2024-05-19 20:03:27 · 542 阅读 · 0 评论 -
中间件的概念及示例
中间件是一种软件技术,它在分布式系统中起着至关重要的作用。定义与位置中间件是位于应用系统和系统软件之间的一类软件。它使用系统软件提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用。中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。功能与作用中间件能够屏蔽底层操作系统的复杂性,为上层应用程序提供一个简单、统一的开发和运行环境。中间件可以实现资源的共享和功能的共享,使得不同的应用程序能够互相通信和协作。原创 2024-05-18 11:06:16 · 689 阅读 · 0 评论 -
多层架构中的数据类型在何处定义?
定义了与数据库交互所需的数据模型和实体。在分层架构设计中,确实存在一种倾向,即将相邻两层之间共享的数据类型或数据传输对象(DTOs)放在被依赖层(或称为下层)定义。这样做的好处是减少了层与层之间的耦合,并提高了代码的可维护性和复用性。它可能会使用来自业务逻辑层的数据类型来展示信息,但通常不会定义共享的数据类型。:处理业务规则和逻辑,并可能会定义一些特定于业务的数据类型。总的来说,将相邻两层之间共享的数据类型或对象放在被依赖层(通常是下层)进行定义,这样做有助于提高代码的可维护性、复用性和清晰性。原创 2024-05-11 22:33:07 · 329 阅读 · 1 评论 -
常见的十二种软件架构
这些架构风格各有优缺点,适用于不同的应用场景和需求。在选择合适的软件架构时,需要根据项目的具体需求和约束进行综合考虑。、**并发架构(Concurrent Architecture)**等也是常见的软件架构风格。原创 2024-05-11 18:47:40 · 761 阅读 · 0 评论 -
三层架构中使用“别名”和“包装类”简化数据跨层传输
在软件开发中,确实可以通过定义“别名”或“包装类”来简化或抽象数据层的复杂数据类型,以便在业务层或表现层中使用。无论你选择哪种方法,关键都是确保业务层和表现层与数据层之间的松耦合,以便能够灵活地应对未来的更改和需求。原创 2024-05-11 17:28:04 · 286 阅读 · 0 评论 -
三层架构慎用跨层公用数据类型
在大多数情况下,更推荐通过定义专门的数据传输对象(DTOs)或视图模型来在不同层之间传递数据,以确保各层之间的松散耦合和独立性。虽然共享数据类型可以减少代码冗余和提高数据一致性,但也可能导致层与层之间的耦合度增加,从而降低了系统的可维护性和可扩展性。:即使定义了公共数据类型,也应该尽量减少层与层之间直接的数据类型依赖。例如,可以使用适配器模式或工厂模式来转换或创建所需的数据类型,而不是直接在层之间传递公共数据类型。这样,各层可以实现或继承这些接口或抽象类,并根据需要添加额外的逻辑或属性,而不会影响其他层。原创 2024-05-11 17:26:11 · 164 阅读 · 0 评论 -
三层架构中表现层与数据层的隔离问题
在三层架构(表现层、业务逻辑层、数据访问层)中,理想情况下,表现层应该对数据访问层(数据层)的数据结构定义是不可见的。这种设计有助于实现关注点分离(Separation of Concerns, SoC),使得各层之间保持松散耦合,从而提高系统的可维护性和可扩展性。在三层架构中,数据访问层的具体实现和数据结构对业务逻辑层是可见的,但对表现层应该是隐藏的。表现层应该只关心数据的表示和用户的交互,而不关心数据的具体存储方式和结构。这样,如果底层数据结构发生变化,只需要修改数据访问层和可能受影响的业务逻辑层代码,原创 2024-05-11 17:24:26 · 548 阅读 · 0 评论 -
256线程的CPU有哪些型号?
除了AMD的EPYC系列,目前市场上其他主流的CPU,如Intel的Xeon系列或AMD的Ryzen Threadripper系列,虽然也提供多线程技术,但它们的线程数通常没有达到256线程这么高的水平。值得注意的是,线程数并不是衡量CPU性能的唯一指标。在选择CPU时,还需要考虑其他因素,如核心数、主频、缓存大小、功耗以及具体的应用需求等。最后,随着技术的不断进步,未来可能会有更多具有256线程或更多线程的CPU型号出现,因此在选择时请务必参考最新的产品信息和技术规格。原创 2024-04-14 01:59:25 · 553 阅读 · 0 评论 -
如何查看git管理了哪些文件?
除了上述命令行方式,你还可以使用图形界面工具来查看Git管理的文件。常见的Git图形界面工具有GitKraken、SourceTree等。这些工具可以提供更直观的方式来查看和管理Git仓库中的文件。请注意,以上命令在Git的命令行界面中执行。如果你还没有安装Git,需要先安装并配置好Git环境。总的来说,通过以上方法,你可以方便地查看Git管理了哪些文件,并了解这些文件的状态和最新提交情况。原创 2024-04-08 17:02:40 · 1375 阅读 · 0 评论 -
软件系统中 state 与 status 的区别
它是一个更为宽泛且深入的概念,用于描述系统或程序在整体上或某个具体功能点上的当前状况。例如,在一个用户登录的系统中,“state”可能指的是用户当前是否已登录、用户的权限级别等。此外,“state”还常用于描述对象的状态,如一个对象可能处于“可用”或“不可用”的状态。总的来说,“state”是一个更为宽泛且深入的概念,用于描述系统或程序在整体上或某个具体功能点上的当前状况;在软件系统中,“state”和“status”虽然都关联到系统的状态,但它们在使用和语境上有着明显的区别。原创 2024-04-01 16:07:01 · 2749 阅读 · 0 评论 -
git 查看文件夹结构树
很多文本编辑器和集成开发环境(IDE)都集成了Git功能,并且会提供一个侧边栏或面板来展示项目的文件结构树。如果你将代码托管在GitHub、GitLab或Bitbucket等在线服务上,它们通常会在仓库页面提供一个可视化的文件结构树。在Git中,没有直接的命令可以像文件系统那样展示一个可视化的文件结构树。如果你更喜欢图形化的界面,那么使用Git扩展工具或在线Git托管服务可能更适合你。虽然这不是一个可视化的树,但你可以使用Git命令和。命令,它会显示当前目录下的文件和文件夹结构。(如果你的系统已经安装了。原创 2024-03-30 17:59:30 · 1276 阅读 · 2 评论 -
git 代码库查看方法
这些命令可以帮助你更好地了解和管理你的Git代码库。根据你的具体需求,你可能还会发现其他有用的Git命令和选项。这两个命令会显示暂存区(也就是你即将提交)的更改。在Git中,你可以使用多种命令来查看代码库(repository)的内容。这个命令会显示提交历史记录,包括每个提交的哈希值、作者、日期和提交消息。如果你想查看仓库中某个具体文件的内容,但不使用文本编辑器打开它,你可以使用。这个命令会显示指定文件在最新提交中的内容。这个命令会显示涉及该文件的所有提交。这个命令会列出你已经配置的远程仓库及其URL。原创 2024-03-30 17:51:31 · 805 阅读 · 0 评论 -
git 实际是一款小巧好用的源代码管理工具
以前一直以为 git 是 github 的专用工具,或者是类似 github 的管理工具,以为这个软件用起来会很麻烦。很早以前也用过svn等其他的一些源代码管理工具,也是被这类软件的复杂性和对硬盘空间野蛮增长的占用给吓住了。所以,宁愿自己用文档压缩软件进行备份和管理。最近实在受不了 vscode 的反复提示,下载安装了 git。顺手一试,我的乖乖,原来是一款小巧的的源代码管理。只需要两三条常用命令,就能满足我这个独行侠自己的代码管理需求。原创 2024-03-29 16:53:23 · 262 阅读 · 0 评论 -
Git代码库的基本结构
它使用四种类型的对象来存储文件和目录的数据以及提交的元数据,并通过唯一的 SHA-1 哈希值来标识和检索这些对象。首先,Git 的数据结构主要基于四种类型的对象:Blob(二进制大对象)、Tree(树对象)、Commit(提交对象)和 Tag(标签对象)。这些对象都存储在 Git 的对象数据库中,并且每个对象都由一个唯一的 SHA-1 哈希值来标识。除了对象数据库外,Git 的代码库还包括一个引用数据库,其中包含指向各种对象的引用。例如,分支和标签实际上是存储在引用数据库中的特殊类型的引用。原创 2024-03-28 14:59:52 · 665 阅读 · 0 评论 -
从 Git 代码库恢复源代码文件
这将使你的工作区处于“分离 HEAD”状态,意味着你不在任何特定的分支上。如果你打算进行更改并提交,最好创建一个新的分支。记得在进行任何更改之前先备份你的代码,以防万一出现意外情况。6. 现在,你的工作区已经更新为所选分支或提交的源代码。7. 如果你对源代码进行了更改并希望将它们提交回仓库,你需要先添加更改,然后提交。这将从指定的仓库 URL 克隆源代码到当前目录下的一个新文件夹中。或者,如果你要恢复到特定的提交,可以使用提交的哈希值或引用。命令将更改添加到暂存区,然后使用。原创 2024-03-28 14:44:19 · 1020 阅读 · 0 评论 -
建立远程 Git 代码仓库
这通常涉及到在服务器上安装Git,并配置一个裸仓库(bare repository)来作为远程仓库。要在 Git 中建立远程代码库,你通常需要在代码托管平台上创建一个新的远程仓库,然后将本地仓库与之关联。如果你打算通过SSH协议访问你的远程仓库,你需要确保服务器已经配置好了SSH服务,并且你有一个SSH密钥对用于身份验证。在你的本地机器上,你可以将你的本地Git仓库与刚刚创建的远程仓库关联起来。如果克隆成功,那么你的远程仓库就已经设置好了。这是作为远程仓库的理想选择,因为远程仓库通常不需要检出文件。原创 2024-03-25 21:44:09 · 1959 阅读 · 0 评论 -
Git 的数据安全性问题
Git 的工作原理是在本地存储仓库的完整副本,并且所有的版本控制操作(如提交、分支、合并等)都首先在本地进行。:当你将代码推送到远程仓库(如 GitHub、GitLab、Bitbucket 等)时,你需要确保远程仓库本身是安全的。大多数 Git 托管服务都提供了细粒度的访问控制功能,允许你管理谁可以读取、写入或管理你的仓库。然而,作为开发者,你应该采取适当的安全措施来保护你的代码和数据。:如果你的项目依赖于第三方库或开源组件,确保你了解这些组件的来源,并审查它们的安全性和许可证要求。原创 2024-03-25 21:37:29 · 567 阅读 · 0 评论 -
Git 入门教程
简单的 Git 入门教程,涵盖了 Git 的基本用法和常用命令。通过学习和实践,你将能够更深入地了解 Git 的强大功能和灵活性,并将其应用于你的项目中。在开始使用 Git 之前,你需要在你的计算机上安装 Git。你可以从 Git 官方网站(https://git-scm.com/)下载适用于你操作系统的 Git 安装包,并按照安装向导进行安装。要开始使用 Git 管理你的代码,你需要在你的项目目录中创建一个 Git 仓库。现在,你可以开始添加和提交代码更改到 Git 仓库。原创 2024-03-25 21:36:07 · 992 阅读 · 0 评论 -
算法思路太复杂,静思两天无从下手...
虽然技术路线已经确定,但是要写成一个复杂并行的算法实现,感觉大脑乱得很。但我也知道,大部分底层的工作我都已经完成了,现在就差最后一击,一个宏大、高性能的算法就能完成。忽然想到极限编程的一句格言,“先写一个错误的算法实现”,然后在一个错误的框架上修正打磨吧!思路再三整理,算法还是太复杂了!原创 2024-03-13 16:08:13 · 325 阅读 · 0 评论 -
从农业到宗教——软件产品开发的五种境界
2010年,在从重大的职业生涯挫折中重新爬起来之后,有感而发,一气呵成写了这篇博客。转眼间十几年过去了,我本人也在敲了40年代码后光荣退休,但感觉这篇文章对于新一代程序员们应该仍有借鉴意义,于是再次贴出来,供大家或做参考,或批评指正!十几年软件研发的沧桑岁月,和一度险濒于破产的痛苦经历,让俺对软件产品开发有了更深层的体会。新年到来之际,写出来和大家作个交流。原创 2024-01-08 11:24:13 · 1739 阅读 · 0 评论 -
在 ubuntu 20 上安装 redmine
步骤1、更新系统首先,通过apt在终端中运行以下命令,确保所有系统软件包都是最新的。sudo apt updatesudo apt upgrade步骤2、安装数据库在Ubuntu 20.04上安装MariaDB。系统更新后,使用以下命令在Ubuntu系统上安装MariaDB Server:sudo apt install software-properties-common mariadb-server mariadb-client安装服务器后,以下命令可用于停止,启动和重新启动数据库服原创 2021-11-18 15:10:27 · 2065 阅读 · 1 评论 -
WinRar:资料备份存档的得力工具
我以前喜欢把每年的资料整理成 iso 光盘影像文件保存,这个格式是只读的,不会再使用的过程中意外被破坏。可是如今,每年需要归档的资料数量越来越大,而 iso 文件的上限目前是 50G,远远不能满足我的要求,于是我想寻找更合适的工具。经过多方面的搜索比较,发现最好用的工具竟然是自己电脑上一直在用的 WinRar 程序。下面我来说说这款软件的优点。1. 归档和备份的区别资料归档和备份是两个完全不同的概念。资料归档:一般是说,资料不会被频繁修改了,甚至不会频繁使用了,可以整理一下放在安全的地方备用了。原创 2021-04-05 12:02:09 · 1186 阅读 · 0 评论 -
在CentOS中使用 MySQL 的 Docker 镜像
在CentOS中使用 MySQL 的 Docker 镜像1.下载 MySQL 的 Docker 镜像 docker pull mysql也可以指定版本号 docker pull mysql:5.62.运行MySQL并指定 root 的登录密码 docker run -p 3306:3306 -v $PWD/conf/my.cnf:/etc/mysq...原创 2018-01-28 22:06:36 · 1961 阅读 · 0 评论 -
问题:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
问题:Cannot connect to the Docker daemon. Is the docker daemon running on this host?重新启动 centOS 后,发现 Docker 命令会出现 Cannot connect to the Docker daemon. Is the docker daemon running on this host? 这个提示,研究了一原创 2017-09-02 16:56:57 · 11821 阅读 · 0 评论 -
搭建Docker(CentOS7)
搭建Docker(CentOS7)作者 许野平 2017-08-17 济南凡事都有第一次,Linux系统下的工具得慢慢熟悉。今天找了好几份安装教程都无法完成安装,Linux真的要我崩溃。忽然发现阿里云服务器提供了详尽的帮助文档和论坛,让我喜出望外。这篇文章仔细介绍了如何在阿里云服务器下安装Docker,试验了几次,还是不成功。后来发现要求操作系统需要7.2版本以上,于是在控制台选择更换操作系统。阿里原创 2017-08-17 20:13:11 · 783 阅读 · 0 评论 -
Go (Golang) 语言读取 http.Request 中 body 的内容
不罗嗦了,直接贴代码,不晓得为什么搞这么复杂,是不是因为担心 body 内容一次接受不全,所以搞了个接口来读取其中的内容?import ( ... "io/ioutil" ...)...func myPost(w http.ResponseWriter, r *http.Request) { s, _ := ioutil.ReadAll(r.Bod...原创 2018-04-24 17:52:06 · 83465 阅读 · 5 评论 -
用 Go 语言编写 RESTful API
github.com/drone/routes 资源给出了一个简单的 REST 框架,因为 Go 语言提供了非常方便的内置 HTTP 框架,所以自己写一个这样的框架应该不困难,这里是我做的读书和试验笔记,留着做个参考。下面是我摘录的部分代码:package mainimport ( "fmt" "net/http" "github.com/drone/rout...原创 2018-04-01 11:18:56 · 3880 阅读 · 0 评论 -
RESTful API 背后的哲学思想
RESTful API 背后的哲学思想去年参加 IBM 产品培训,第一次听说 REST API 这个概念。REST API的全称是RESTful API,原以为是 IBM 专有技术,咨询培训讲师后才了解到,这是最近越来越火的一种远程服务调用策略(RPC)。后来读了几本书,了解了一下,发现这种方法极简的形式背后蕴藏着深刻的哲学思想,它不仅解决了困惑我多年的思想问题,也是一种非常实用的方法。希望您原创 2017-08-12 18:04:06 · 1109 阅读 · 0 评论 -
微信小程序入门第一步
入门第一步,并编手工写一个比开发工具提供的还要简单的 HelloWorld 程序,揭示小程序的本质。原创 2020-04-08 19:07:36 · 465 阅读 · 0 评论 -
TortoiseSVN 下载、安装详解
下载官网:https://tortoisesvn.net/downloads.html我选择下载 64-bit 版本,下载完成,得到安装程序:TortoiseSVN-1.13.1.28686-x64-svn-1.13.0.msi安装安装没啥说,一路 Next 到结束,然后查看开始菜单:使用原创 2020-05-14 18:39:09 · 2338 阅读 · 0 评论 -
VisualSVN Server 的下载、安装详解
一、下载 VisualSVN Server百度一下 VisuaSVN server:第一个就是官网下载链接。(注意,不要搜索 VisualSVN,我不小心在这个官网下载了VisualSVN-VS2019-7.2.0.vsix,其实发现这个是 Visual Studio 用的一个插件,是 VisualSVN 的客户端,据说是个收费项目,暂时不要管它。)点击 download 下载后,选择 32 位还是 64 位版本:我用的是 64 位 win10,选择 64-bit 后,下载得到 VisualS原创 2020-05-12 11:11:07 · 2353 阅读 · 0 评论 -
MVP模式的一点思考:简化系统架构,而不是搞的更复杂
最近打算写一个“纯正”的 MVP 程序,结果发现越搞越复杂,发现很容易陷入 Presenter 滥用的陷阱。今天清理一下思路,写个小总结。1. Presenter 必须访问 Model一个合理的调用流程应该是 A-B-C-D,或者 A-B-C,或者A-B。也就是说,View 需要访问 Model 时,才需要向 Presenter。如果不需要访问 Model, 则完全不必访问 Presente...原创 2019-12-30 16:22:36 · 545 阅读 · 1 评论 -
忽然感悟到 Golang 语言中的通道 chan 的重要意义
我发现 Haskell、Erlang 这类函数式程序设计语言,都是采用了通道来锁定资源,利用通讯共享数据,最根本的原因,就是确保代码的“可验证性”。原创 2019-01-20 21:15:24 · 946 阅读 · 0 评论 -
软件产品设计的五种境界
十几年软件研发的沧桑岁月,和一度险濒于破产的痛苦经历,让俺对软件产品开发有了更深层的体会。新年到来之际,写出来和大家作个交流。 一、农业境界 刚参加工作,朋友问我,你能用电脑干啥?我口出狂言,只要你想得出来的,我都能做得到。其实,我说这话相当无知。 柏拉图曾经说过,人的知识犹如一个圆,圆内是你已经知道的,圆外是你还不知道的,圆周就是你已经知道的还没解决的问题原创 2010-01-03 18:54:00 · 6613 阅读 · 4 评论 -
软件工程——从艺术走向科学
引 言我单枪匹马时,曾经是个好程序员。当带领团队时,却搞得一败涂地。如何改变被动局面,带出最优秀的团队?这篇文章以我亲身的经历,写下我和我的团队在软件工程管理和软件系统设计与开发方面的学习历程,也许,这有助于您了解我们的软件开发过程或者给您带来一点点启示。一、艺术与科学很久以前读过一本书,讨论了艺术与科学的区别。作者认为,艺术不能仅仅局限于音乐、美术、戏剧等传统领域。凡是那些凭借天才的原创 2007-06-10 13:10:00 · 3543 阅读 · 7 评论