自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

编程宝库

codebaoku.com

  • 博客(47)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 如何在 ASP.NET Core 中构建轻量级服务

在 ASP.NET Core 中处理 Web 应用程序时,我们可能经常希望构建轻量级服务,也就是没有模板或控制器类的服务。轻量级服务可以降低资源消耗,而且能够提高性能。我们可以在 Startup 或 Program 类中创建这些轻量级服务或 API。 1. 使用 VS2022 创建 ASP.NET Core 项目我们在 Visual Studio 2022 中创建一个 ASP.NET Core 项目。按照以下步骤在 Visual Studio 2022 中创建一个新的 ASP.NET Co

2021-12-08 08:14:10 515

原创 详解 .Net6 Minimal API 的使用方式

随着 .Net6 的发布,微软也改进了对之前 ASP.NET Core 构建方式,使用了新的 Minimal API 模式。以前默认的方式是需要在 Startup 中注册 IOC 和中间件相关,但是在 Minimal API 模式下你只需要简单的写几行代码就可以构建一个 ASP.NET Core的Web 应用,可谓非常的简单,加之配合 c# 的 global using 和 Program 的顶级声明方式,使得 Minimal API 变得更为简洁,不得不说 .NET 团队在 .NET 上近几年下了不少功夫

2021-12-02 18:58:50 4067

原创 如何使用Docker构建开发环境

我们在开发中都会遇到这样的问题:在本地开发好功能后,部署到服务器,或者其他人拉到本地接着开发时,会出现功能无法使用的情况。这些异常情况,大多数时候是因为系统不同而导致的依赖差异。因此,为了解决这个问题,就产生基于 Docker 构建统一开发环境的需求。有关 docker 的基本知识,可以参照 docker教程。1. 使用 Docker 的好处部署方便我们平常搭建环境常常需要耗费很长时间。对于团队协作时来说,每有新人进来,都需要浪费这些可以避免的时间。而且搭建环境时,也常常会产生的各种问题,导致

2021-12-02 12:04:05 4872

原创 Visual Studio 远程调试步骤

在工作中有时候需要在服务器的环境下远程调试,例如调试微信相关服务的时候。1. 下载远程调试工具网址:https://visualstudio.microsoft.com/zh-hans/downloads/下载后直接安装至完成。启动Remote Debugger:如果只是短时间测试,可以选择无身份验证,为了安全,工具自动设置了空闲时间,即多久没有操作会自动关闭此功能。2.新建测试项目建了一个简单的HelloWorld项目,简单几句代码,加上断点。发布debug到远程服务器。双击He

2021-11-25 10:40:26 579

原创 ASP.NET 使用 Dispose 释放资源的四种方法

Dispose 和 Finalize 是运行的 .NET 和 .NET Core 应用程序释放占用的资源的两种方法。通常,如果应用程序中有非托管资源,应该显式地释放这些资源占用的资源。由于 Finalize 的非确定性,以及在性能方面的成本很高,因此 Dispose 方法的使用频率远高于 Finalize。其实,我们可以在一个实现了 IDisposable 接口的类型上使用 Dispose 方法。本文中提供的代码示例均默认运行在 Visual Studio 2022。 1. 使用 VS20

2021-11-24 12:14:12 1496

原创 如何解决 ASP.NET Core 中的依赖问题

依赖性注入是一种技术,它允许我们注入一个特定类的依赖对象,而不是直接创建这些实例。使用依赖注入的好处显而易见,它通过放松模块间的耦合,来增强系统的可维护性和可测试性。依赖注入允许我们修改具体实现,而不必改变依赖于它们的依赖类型。ASP.NET Core 很重视依赖注入技术。ASP.NET Core 中内置的依赖注入提供功能模块,并不像 StructureMap 和 Ninject 等IoC(控制反转)容器那样功能丰富,但它速度快,易于配置,而且易于使用。我们可以使用它在 ASP.NET Core 中注

2021-11-23 07:11:12 1957

原创 C# 从 UTF-8 流中读取字符串的正确方法

我们下面的代码是从一个流 stream 中读取 UTF-8 编码的字符串。我们可以先考虑一下其中存在的潜在问题。string ReadString(Stream stream){ var sb = new StringBuilder(); var buffer = new byte[4096]; int readCount; while ((readCount = stream.Read(buffer)) > 0) { var s = Enc

2021-11-22 07:53:17 2649 2

原创 Java将增加虚拟线程,挑战Go协程

我们知道 Go 语言最大亮点之一就是原生支持并发,这得益于 Go 语言的协程机制。一个 go 语句就可以发起一个协程 (goroutin)。协程本质上是一种用户态线程,它不需要操作系统来进行调度,而是由用户程序自行管理和调度。它寄存于线程中,系统开销极小,可以显著的提高性能和并发能力。使用协程的优点是运行效率高、编程简单、结构清晰。目前,原生支持协程的语言不是很多。Oracle 本周提交的一份JDK增强建议(JEP)草案要求将虚拟线程作为Java标准版的一部分进行预览。虚拟线程类似于 Go 语言的协程

2021-11-19 09:21:03 439

原创 如何提高C# StringBuilder的性能

本文探讨使用C# StringBuilder 的最佳实践,用于减少内存分配,提高字符串操作的性能。在 .NET 中,字符串是不可变的类型。每当你在 .NET 中修改一个字符串对象时,就会在内存中创建一个新的字符串对象来保存新的数据。相比之下,StringBuilder 对象代表了一个可变的字符串,并随着字符串大小的增长动态地扩展其内存分配。String 和 StringBuilder 类是你在 .NET Framework 和 .NET Core 中处理字符串时经常使用的两个流行类。然而,每个类都有其优

2021-11-18 10:51:10 735

原创 Go iota 原理和源码剖析

iota 是 Go 语言的一个保留字,用作常量计数器。由于 iota 具有自增特性,所以可以简化数字增长的常量定义。iota 是一个具有魔法的关键字,往往令初学者难以理解其原理和使用方法。本文会从书写方法、使用场景、实现原理以及优缺点等各方面剖析 iota 关键字。1. 书写方法正确写法:const ( FirstItem = iota SecondItem ThirdItem)// 或者const SingleItem = iota错误写法:var FirstItem =

2021-11-17 12:13:49 300

原创 数据分片的原则和经验

本文提供了一些数据分片的一些原则和经验,遵循这些提示,有助于确保数据正确的分片,而不是阻碍你的应用程序的可扩展性。新的 SaaS 初创公司很少考虑如何扩展他们的应用程序。当然,他们会设想有一天他们会需要扩张,并将纳入计划,但他们很少在早期就为可扩展性设计他们的应用程序。相反,他们更经常关注于完成他们可以销售的功能。但是,考虑扩展的时间应该在最开始的时候–在你的第一个客户注册你的服务之前。随着公司推出一个又一个的功能,并且客户不断注册,业务就会增长。随着业务的增长,扩展最终成为一个关注点。当一个新的Sa

2021-11-16 10:53:58 2289

原创 Go defer 特性和使用场景

golang 的 defer 语句用于延迟调用。defer 会在当前函数返回之前执行 defer 注册的函数。比如 defer func_defer() 这样语句会让你注册一个函数变量到 defer 的全局链表中,在 defer 语句所在的函数退出之前调用。defer 可以代替其它语言中 try…catch… 语句,也可以用来处理释放资源等收尾操作,比如关闭文件句柄、关闭数据库连接等。defer 还能用于 panic 的 recovery。1. defer 的特性我们先深入的剖析下 defer 具有的

2021-11-15 16:43:02 342

原创 Go defer 原理和源码剖析

Go 语言中有一个非常有用的保留字 defer,defer 语句可以调用一个函数,该函数的执行被推迟到包裹它的函数返回时执行。defer 语句调用的函数,要么是因为包裹它的函数执行了 return 语句,到达了函数体的末端,要么是因为对应的 goroutine 发生了 panic。在实际的 go 语言程序中,defer 语句可以代替其它语言中 try…catch… 的作用,也可以用来处理释放资源等收尾操作,比如关闭文件句柄、关闭数据库连接等。1. 编译器编译 defer 过程defer dosome

2021-11-12 14:47:38 1077

原创 Go语言并发模型 G源码分析

Go 的线程实现模型,有三个核心的元素 M、P、G,它们共同支撑起了这个线程模型的框架。其中,G 是 goroutine 的缩写,通常称为 “协程”。关于协程、线程和进程三者的异同,可以参照 “进程、线程和协程的区别”。每一个 Goroutine 在程序运行期间,都会对应分配一个 g 结构体对象。g 中存储着 Goroutine 的运行堆栈、状态以及任务函数,g 结构的定义位于 src/runtime/runtime2.go 文件中。g 对象可以重复使用,当一个 goroutine 退出时,g 对象会被

2021-11-09 15:34:30 726

原创 go语言包、变量、init初始化顺序

一个完整的 go 语言可运行程序,通常会包含引用的包、变量、init 函数以及 main 函数几个部分。包、变量、常量、init 函数以及 main 函数初始化顺序如下图所示:在一个 go 语言程序中,初始化顺序规则如下:引入的包当前包中的变量、常量当前包的 init 函数main 函数初始化顺序说明:在 go 源程序中,每一个被 import 的包,按照在源文件中出现顺序初始化。如果当前包有多个 init 函数在不同的源文件中,则按照源文件名以字典序从小到大排序,小的先被执行到。

2021-10-19 11:30:40 903

原创 Go1.17 新特性:为什么能够使程序提速

在 Go1.17 发布后,我们惊喜的发现 Go语言 又又又优化了,编译器改进后产生了约 5% 的性能提升,也没有什么破坏性修改,保证了向前兼容。他做了些什么呢,好像没怎么看到有人提起。为此今天煎鱼带大家来解读两新提案:《Proposal: Register-based Go calling convention》《Proposal: Create an undefined internal calling convention》本文会基于提案讲解和拆解,毕竟分享新知识肯定要从官方资料作为事实基准出

2021-09-01 14:24:48 504 1

原创 C# ArrayPool 源码解读之 byte[] 池化

一:背景1. 讲故事最近在分析一个 dump 的过程中发现其在 gen2 和 LOH 上有不少size较大的free,仔细看了下,这些free生前大多都是模板引擎生成的html片段的byte[]数组,当然这篇我不是来分析dump的,而是来聊一下,当托管堆有很多length较大的 byte[] 数组时,如何让内存利用更高效,如何让gc老先生压力更小。不知道大家有没有发现在 .netcore 中增加了不少池化对象的东西,比如: ArrayPool,ObjectPool 等等,确实在某些场景下还是特别实用的

2021-09-01 10:07:55 694

原创 Go 结构体方法指针和值的区别

众所周知,Go struct 定义方法时使用指针还是值的区别就是在方法内修改属性值时,用值定义的方法所做的修改只限于方法内,而指针则没有这个局限。文章如果到这里就结束了,那么就很平平无奇了,于是我打算带大家去做个无聊但是值得思考的实验。在开始之前,先写段简单的代码跑一下前面说到的东西,顺便让大家熟悉一下接下来实验代码的一些编码规则,哦对了,以下代码写于 2021.08,Go 版本是 1.16.5,如果你看到这篇文章的时候 Go 已经更新了很多个版本了,可能就不适用了。废话不多说,上代码:package

2021-08-31 11:20:22 1128

原创 使用Electron+Vue开发跨平台桌面应用

虽然B/S是目前开发的主流,但是C/S仍然有很大的市场需求。受限于浏览器的沙盒限制,网页应用无法满足某些场景下的使用需求,而桌面应用可以读写本地文件、调用更多系统资源,再加上Web开发的低成本、高效率的优势,这种跨平台方式越来越受到开发者的喜爱。Electron是一个基于Chromium和 Node.js,使用 HTML、CSS和JavaScript来构建跨平台应用的跨平台开发框架,兼容 Mac、Windows 和 Linux。目前,Electron已经创建了包括VScode和Atom在内的大量应用。环

2021-08-31 10:09:22 488

原创 Oracle JDK下载登录 无需注册Oracle账号

我们在下载Oracle JDK的时候,Oracle要求在下载JDK前,你必须同意 Oracle 许可协议,然后使用 Oracle 账号登录后方可下载,整个下载过程非常繁琐。为了省却这些繁杂的手续,有些网站提供了共享Oracle账号,可以直接使用,所有账号都已经实际验证。Oracle JDK下载 免注册账号地址:http://java.sousou88.com/spec/tool_account.html...

2020-12-22 13:28:16 3410 3

转载 Java内存模型分析

本文首发于个人公众号:卯时卯刻,文章地址为:Java内存模型深入分析0x01 内存模型产生的历史背景曾经,计算机的世界远没有现在复杂,那时候的cpu只有单核,我们写的程序也只会在单核上按代码顺序依次执行,根本不用考虑太多。后来,随着技术的发展,cpu的执行速度和内存的读写速度差异越来越大,人们很快发现,如果还是按照代码顺序依次执行的话,cpu会花费大量时间来等待内存操作的完成,这造成了cpu的巨大浪费。为了弥补cpu和内存之间的速度差异,计算机世界的工程师们在cpu和内存之间引入了缓存,虽然

2020-12-07 17:04:19 146

转载 JDK下载应该选择哪个版本?教你选择最好的JDK版本

我们在使用Java编程的时候,通常绕不开Java JDK使用。所以,我们下载Java JDK的时候,就会面临着诸多选择。不仅要在多家知名厂商实现的JDK中做出选择,还要在特定JDK中选择哪个迭代版本。这对于多年使用Java进行开发的“老”程序员,自然不是问题,因为他们都会固定的使用某个特定的成熟版本,一般不会轻易改变。但是对于新开发者来讲,就会无从下手,实在不知道选择哪个厂商的发布的JDK,也不知道该选择哪个版本。是使用Oracle JDK,OpenJDK还是AdoptJDK?是使用JDK15,JDK8还是

2020-11-23 13:45:45 31095 1

原创 JDK下载哪家快?推荐3个国内java jdk镜像站

我们在日常进行Java开发中,可能都会遇到下载JDK,但是Oracle官方的下载条件非常苛刻,需要手动同意license。历史版本需要手动登录,所以有时候不得不先进行注册,然后才能下载。更麻烦的是下载地址位于国外,下载速度慢。其它OpenJDK分发版中,AdoptOpenJDK算是半官方了,有良好的API,直接下载就可以,但是它是从GitHub上下载的,S3的速度又很慢,所以下载速度也不快,有时候还会404。其实国内已经有了相关的镜像网站,不仅内容全,而且速度快。我这里收集了常用的3个镜像站:1、清

2020-11-16 14:26:42 67431 8

转载 怎么实现在海量分库分表数据中进行分页查询

有些头部电商的数据规模达到一定程度之后,比如淘宝或者美团的日订单量可能有几千万。在这样数据规模下,数据库面临很大的压力。通常,当数据库达到一定规模后需要对数据进行切分,对数据库或者表进行切分,有的需要纵向切分,有的需要横向切分。伴随着库表切分之后,对于数据库的查询就增加很大的难度,比如我们常会遇到分页查询。通常我们把分表使用的字段称作shardingkey,比如订单表按照用户ID,那么如果查询条件中不带用户ID查询怎么做分页?一、唯一主键一般我们数据库的主键都是自增的,那么分表之后主键冲突的问题就是

2020-11-09 17:32:45 624

原创 进程、线程和协程的区别和联系

在面试中,经常会有面试官问题“进程、线程和协程的区别”这个问题,这也是大学课程操作系统中最基本的知识。我们通常对此都说上几句,但细节又不是特别深入明了。我整理了一下相关的内容,加上自己的理解,与君共享。1. 进程1.1 定义​ 进程是计算机中程序的一次运行活动,是操作系统进行资源分配和调度的基本单位。每一个进程都拥有自己的地址空间,一般包括代码段、数据段、堆和栈。其中,代码段用来存放处理器执行的代码;数据段存放全局和静态变量;堆用来存放动态分配的内存;栈用来存放局部变量、函数参数和寄存器的值等。1

2020-11-08 07:46:26 298

原创 微服务 · 如何进行服务限流和熔断

一、服务雪崩​ 微服务架构是将单个应用程序被划分成各种小而连接的服务,每一个服务完成一个单一的业务功能。相对于传统的单体服务,微服务具有隔离性、技术异构性、可扩展性以及简化部署等优点。通常一个应用由多个微服务组成,微服务之间的数据交互需要通过远过程调用的方式完成。​ 下图是一个微服务之间互相调用的场景:​ 微服务A调用微服务B、C和D,微服务C又调用微服务E。假设某一时刻,微服务E变为不可用。微服务C需要等待微服务E返回结果,于是请求就会逐渐堆积在微服务C,形成阻塞。随着微服务C堆积的请求不断

2020-11-07 10:36:38 1228 2

原创 码农和规矩

说实话,作为码农,我很烦规矩,经常遇到文档、注释、规范等等各种各样的枷锁。Talk is cheap. Show me the code,这多好。上个月某天,我让运维的同事去清理一下nginx日志,文件目录位于/data/nginx/logs。于是他很快ssh到服务器,键盘耍得贼溜,眼花缭乱地执行了:rm -rf / data/nginx/logs过了一会儿,然后他一副生无可恋的样子,扭头小心翼翼地跟我说:我现在离职,公司能不找我麻烦吗?我莫名其妙地看着他,吃错药了吧,我又看看屏幕,忽然明

2020-11-06 17:26:34 208 1

原创 Java才是世界上最好的语言,完全可以替代C++

高频交易高频交易是指从那些人们无法利用的极为短暂的市场变化中寻求获利的计算机化交易,比如,某种证券买入价和卖出价差价的微小变化,或者某只股票在不同交易所之间的微小价差。在高频交易中,自动化应用程序每天处理几亿个市场信号,在全球各地的交易所发送上千万个订单。为了保持业务竞争力,响应时间必须始终保持在微秒级,尤其是在黑天鹅异常事件等高峰期。高频交易系统的典型系统结构一般是这样:金融交易信号将转换成内部市场数据格式(交易使用TCP、UDP等各种协议)和多种格式(如二进制、SBE、JSON、FIX等)。然后

2020-11-05 22:37:55 1315

原创 微服务 · 如何解决链路追踪问题

一、链路追踪​ 微服务架构是将单个应用程序被划分成各种小而连接的服务,每一个服务完成一个单一的业务功能,相互之间保持独立和解耦,每个服务都可以独立演进。相对于传统的单体服务,微服务具有隔离性、技术异构性、可扩展性以及简化部署等优点。​ 同样的,微服务架构在带来诸多益处的同时,也为系统增加了不少复杂性。它作为一种分布式服务,通常部署于由不同的数据中心、不同的服务器组成的集群上。而且,同一个微服务系统可能是由不同的团队、不同的语言开发而成。通常一个应用由多个微服务组成,微服务之间的数据交互需要通过远过程

2020-11-05 15:42:23 901 1

原创 轻松学习区块链5 - 工作量证明POW

MiniBC区块链V004 - 工作量证明POW共识算法在整个区块链工作过程中,会有很多的机器加入其中,每一台机器成为一个节点,它们互相协作,来共同维护区块链的安全和数据的一致。其中,生成新的区块就是一项很重要的工作。因为新的区块里面包含很多新产生的重要数据,比如交易信息等。为了让这项工作有序和可控,通常会在所有节点上通过竞争选出一个节点,由这个胜出的节点负责打包新产生的数据,并通知和传播给其...

2019-05-20 13:00:32 651

原创 轻松学习区块链4 - 区块链浏览器与人机交互

MiniBC区块链V003 - 区块链浏览器与人机交互工作目标区块链浏览器是用户通过浏览器的方式查看区块链的所有信息。我们本节的目标就是实现这一功能。我们不仅提供查看功能,还提供了了管理功能。在真实的区块链项目中,一般会提供多种交互方式,比如提供客户端命令行方式、websocket方式等等,最终由区块链server提供统一的rpc服务。我们目前先实现浏览器方式,以后会逐步扩充。Http S...

2019-05-19 23:00:26 3153

原创 轻松学习区块链1 - 初识MiniBC区块链

MiniBC区块链源码地址: https://github.com/wangshizebin/minibc1、什么是区块链区块链从仅从技术层面来讲,是按照时间顺序将数据块连接在一起的链式数据结构。它采用了密码学的知识和p2p网络技术构建了一个数据不可篡改、不可伪造的分布式数据账本。它带来的最为直接的变化就是去中心化的信任,这是它对于社会的最本质的改变。它是21世纪最具革命性的技术之一,目前...

2019-05-17 12:51:56 3444

原创 设计模式之享元模式

 1         享元模式的日常应用面向对象的思想确实很好地解决了抽象性的问题,以至于在面向对象的眼中,万事万物一切皆对象。不可避免的是,采用面向对象的编程方式,可能会增加一些资源和性能上的开销。不过,在大多数情况下,这种影响还不是太大,所以,它带来的空间和性能上的损耗相对于它的优点而言,基本上不用考虑。但是,在某些特殊情况下,大量细粒度对象的创建、销毁以及存储所造成的资源和性能上的损耗,可能

2009-04-03 12:57:00 20836 18

原创 设计模式之单例模式

1        单例模式的日常应用我们在浏览BBS、SNS网站的时候,常常会看到“当前在线人数”这样的一项内容。对于这样的一项功能,我们通常的做法是把当前的在线人数存放到一个内存、文件或者数据库中,每次用户登录的时候,就会马上从内存、文件或者数据库中取出,在其基础上加1后,作为当前的在线人数进行显示,然后再把它保存回内存、文件或者数据库里,这样后续登录的用户看到的就是更新后的当前在线

2009-04-02 09:22:00 9869 7

原创 发展之道:简单与专注

为什么要讲这样一个话题,主要源于最近碰到的几件事情。一个朋友想要做网站,给我讲了讲他的初步方案,毫无疑问,这是一个非常宏伟的综合性的网站,但我只听了一部分就让他打住了。我问他:你的网站到底跟别人有什么不同?他说:我的网站很专业很全面。我说:这没有意义,如果你还没有找到跟别人不同的话,建议你不要浪费那个精力和投入了。    如果个人或者小公司去做综合类网站,这是很不靠谱的事。现如今小网站的存活之

2009-03-25 16:02:00 6234 10

原创 设计模式之观察者模式

目前的例子,暂时都是java语言书写,稍后,我会补上.net和php语言版。•1 什么是观察者模式 我们在日常生活中有很多观察者模式应用的场景。比如,凡是去过银行营业大厅办理业务的人,大多会有这么一段经历:办理业务之前,先要在营业大厅的门口领取一个排队号,然后你就可以在休息区等待叫号,当轮到自己办理业务的时候,某个柜台上方悬挂的小显示屏就会出现“请XXX号到XX柜台办理业务”。有的时候,某

2009-03-23 16:30:00 18452 19

原创 架构师之路(7)---里氏代换原则

4 里氏代换原则(Liskov Substitution Principle, LSP)4.1 什么是里氏代换原则    里氏代换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的OOPSLA大会上发表的一篇文章《Data Abstraction and Hierarchy》里面提出来的,主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时

2009-03-16 23:56:00 10971 27

原创 架构师之路(6)---OOD的开闭原则

2 开闭原则(Open-Closed Principle,OCP)2.1 什么是开闭原则    开闭原则是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段。    1988年,Bertrand Meyer在他的著作《Object Oriented Software Construction》中提出了开闭原则,它的

2009-03-12 23:25:00 7531 8

原创 也谈IT人员流失问题

一个公司或者团队都会遇到过人员流失的问题,可能小公司可能更为严重。最可怕的是团队中重要成员的流失,将对公司的业务或者项目造成不小的麻烦。究竟怎么看待这个问题呢?很多人都发表过自己的见解,争论也很大。    俗话说:“屁股决定脑袋”,其实大家的立场不同,结论自然不同。    很多管理者,会抱怨员工没有职业道德,经不住诱惑;有的人抱怨猎头太可恨,扰乱IT就业市场;还有的人指责同行不厚道,拿

2009-03-11 13:52:00 7443 18

原创 架构师之路(5)---面向对象的设计原则

1 OO的设计原则     采用面向对象的分析和设计思想,为我们分析和解决问题提供了一种全新的思维方式。我们在拿到需求之后(略去OOA,以后补全),接下来的问题就是:如何对系统进行面向对象的设计呢?    按照软件工程的理论,面向对象的设计要解决的核心问题就是可维护性和可复用性,尤其是可维护性,它是影响软件生命周期重要因素。通常情况下,软件的维护成本远远大于初期开发成本。    一个可

2009-03-10 17:04:00 10299 21

delphi实现自动发帖和验证码识别

delphi实现自动发帖和验证码识别 请配合我的文章 blog.csdn.net/wanghao72214

2009-02-03

互联网产品的交互设计方法.pdf

互联网产品的交互设计方法 互联网产品的交互设计方法 互联网产品的交互设计方法

2009-02-01

高端BT用户选择网站的原则.ppt

高端BT用户选择网站的原则 高端BT用户选择网站的原则 高端BT用户选择网站的原则

2009-02-01

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除