自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 资源 (3)
  • 收藏
  • 关注

转载 软件架构设计分层模型和构图思考(有史以来最全架构图)

在采用SOA架构进行开发的时候,整体业务系统拆分为4个组件,10类服务域,5类流程,那么在构建的时候重点就是将上述组件,服务域和流程类体现出来。三层架构本身也和一个业务功能实现的完整对应,在数据访问层处理数据获取和持久化操作,在业务逻辑层对业务规则进行处理,在界面展现层进行相应的前端展现和用户交互。集成是配合分解完成的动作,最终分解完成的各个组件或子系统,通过合适的接口设计,最终还能够集成为一个完整的整体,分解仅仅是加速开发和降低问题复杂度,如果分解后的内容无法集成在一起,那么分解就没有任何意义。

2023-02-22 11:30:20 15196 1

原创 如何写好一份PPT

PPT 的第一目的是沟通和传达,它是架在讲者和听者之间的桥梁,辅助两者之间进行更好的传达信息,让听众更容易理解、记忆、行动,从而实现演示目标。

2022-08-05 11:11:47 2405

原创 全面认识包图,组件图,部署图

命名空间,文件夹称为包但在uml中包是1.表达体系结构,2.就是针对类(业务实体类,控制管理类)的划分主要作用就是对类的逻辑划分。与命名空间概念类似。uml2.0后包中只建议包含类或其他的包。同级包名不能冲突use import直接将包引进了进来,use再设计期使用,import在实现时使用。是全部引入。access并不引入包,只是部分引入。整体划分,体系结构充分采用重用构建体系。分离法用的最多。...

2022-05-20 14:04:17 1226

原创 线程安全函数和可重入函数的区别

线程安全: 线程安全函数:在C语言中局部变量是在栈中分配的,任何未使用静态数据或其他共享资源的函数都是线程安全的。 使用全局变量的函数是非线程安全的。 使用静态数据或其他共享资源的函数,必须通过加锁的方式来使函数实现线程安全。 线程安全的(Thread-Safe): 如果一个函数在同一时刻可以被多个线程安全地调用,就称该函数是线程安全的。...

2022-02-14 18:33:37 1030

原创 VS生成事件常用的宏

以下内容是具体宏说明:VS预生成事件命令行 和 生成后事件命令行宏说明$(ConfigurationName) 当前项目配置的名称(例如,“Debug|Any CPU”)。$(OutDir) 输出文件目录的路径,相对于项目目录。这解析为“输出目录”属性的值。它包括尾部的反斜杠“\”。$(DevEnvDir) Visual Studio 2005 的安装目录(...

2022-01-19 19:05:34 873

原创 从 VS 的 dumpbin 目录谈 x86、xi386、x86-64、amd64...

翻开VS的dumpbin.exe、cl.exe的存放目录,你会惊奇的发现,居然存在这么多个分支!  什么amd64、amd64_arm、amd64_x86、arm、x86_amd64、x86_arm???故事的起源Refer:cl.exe and directories under bin, host, targets? In general, the format of the directory name is “host_target” so “amd64_arm”...

2022-01-06 10:16:37 1248

转载 计算机中内存、cache和寄存器之间的关系及区别

计算机中内存、cache和寄存器之间的关系及区别

2021-12-20 19:31:36 3043

原创 使用Windbg分析C++虚函数表原理

要想学好C++,就得熟悉C++对象模型。如果能利用好调试工具,比如windbg、GDB等,就能够更快速的掌握C++对象模型原理。本系列文章是通过windbg来深入分析C++对象原理,以便更好的理解C++相关知识点。

2021-12-17 10:05:10 694

转载 CSG与BRep比较

计算机中表示三维形体的模型,按照几何特点进行分类,大体上可以分为三种:线框模型、表面模型和实体模型。如果按照表示物体的方法进行分类,实体模型基本上可以分为分解表示、构造表示CSG(Constructive Solid Geometry)和边界表示BREP(Boundary Representation)三大类。

2021-12-09 19:53:02 1267 4

原创 C++中的lambda表达式和函数对象

lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读。但是从本质上来讲,lambda表达式只是一种语法糖,因为所有其能完成的工作都可以用其它稍微复杂的代码来实现。但是它简便的语法却给C++带来了深远的影响。如果从广义上说,lamdba表达式产生的是函数对象。在类中,可以重载函数调用运算符(),此时类的对象可以将具有类似函数的行为,我们称这些对象为函数对象(Function Object)或者仿函数(Functor)。相

2021-12-01 20:07:11 1062

原创 函数包装器

• 类模板声明// MS C++ 2013template<class _Fty> class function;template<class _Fty> class function : public _Get_function_impl<_Fty>::type { ... }// GCC 4.8.2template<typename _Signature> class function;template&

2021-12-01 19:57:13 247

原创 图说C++对象模型:对象内存布局详解

0.前言文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局、虚表指针、虚基类指针等有深入了解的朋友可以慢慢看。本文的结论都在VS2013上得到验证。不同的编译器在内存布局的细节上可能有所不同。文章如果有解释不清、解释不通或疏漏的地方,恳请指出。1.何为C++对象模型?引用《深度探索C++对象模型》这本书中的话:有两个概念可以解释C++对象模型:语言中直接支持面向对象程序设计的部分。 对于各种支持的底层实现机制。直接支持面向对象程序设计,包括了构造函数、析构函数、

2021-11-30 14:29:24 580

原创 架构师必须要知道的几个开发期质量属性

易理解性(Understandability)。尤指设计被开发人员理解的难易程度。可扩展性(Extensibility)。可扩展性是指为适应新需求或需求的变化为软件增加功能的能力。我们在实际工作中,经常将可扩展性称为灵活性。可重用性(Reusability)。可重用性是指重用软件系统或其一部分能力的难易程度。可测试性(Testability)。可测试性是指对软件测试以证明其满足需求规约的难易程度。在实际工作中主要指进行单元测试、插桩测试等的难易程度。可维护性(Maintain

2021-11-08 16:55:04 572

原创 架构师必须要知道的几个运行期质量属性

安全性(Security)。安全性指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力。高安全性意味着“同时兼顾”,这是因为有些攻击的目的是使软件系统拒绝向合法用户提供服务,而不是非法访问。易用性(Usability)。不少文献也称之为可用性,但为了避免和持续可用性(Availability)混淆,本书采用非常流行的“易用性”的叫法。指软件系统易于使用的程度持续可用性(Availability)。不少文献也称之为可用性,但为了避免和易用性(Usability)混淆,本书采用“持续可用性”的

2021-11-08 16:50:51 544

原创 踏入数学天堂的钥匙-微积分

微积分有多重要相信大家多多少少心里都有点数,搞数学的不会微积分就跟中学生不会“加减乘除”一样,基本上啥都干不了。牛顿是物理学界的封神人物,然而牛顿还凭借着微积分的发明,跟阿基米德、高斯并称为世界三大数学家,这是何等荣耀?这又从侧面反映出微积分是何等地位?除了重要,很多人对微积分的另一个印象就是难。在许多人眼里,微积分就是高深数学的代名词,就是高智商的代名词,许多家长一听说谁家孩子初中就学了微积分,立马就感叹这是别人家的天才。其实不然,微积分并不难,它的基本思想甚至是非常简单的,不然也不会有那...

2021-10-29 20:59:17 821

原创 运用五视图方法进行软件架构设计--实战三

1. 什么是架构设计?  架构设计就是一个系统的草图。 软件架构就是对软件从整体到部分的描述,从开发到运行再到后期扩展的描述,从性能和安全可靠性进行描述。2. 架构设计为了解决什么问题?  解决开发之初,也就是逻辑设计阶段的问题 —— 系统如何开发,如:整个系统融合为一个系统开发,还是从业务角度将系统拆分为几个独立的子系统。  解决即将进入开发时的问题 —— 数据是如何持久化的、数据库如何选型、非数据库文件的存储格式是怎样等像这样的存储方案的确定。  解决开发过程中的...

2021-10-25 23:52:53 270

原创 运用五视图方法进行软件架构设计--实战二

一、架构五视图是什么1、逻辑架构  逻辑架构关注的是功能,包含用户直接可见的功能,还有系统中隐含的功能。或者更加通俗来描述,逻辑架构更偏向我们日常所理解的“分层”,把一个项目分为“表示层、业务逻辑层、数据访问层”这样经典的“三层架构”。2、开发架构  开发架构则更关注程序包,不仅仅是我们自己写的程序,还包括应用程序依赖的SDK、第三方类库、中间件等。尤其是像目前主流的Java、.NET等依靠虚拟机的语言和平台,以及主流的基于数据库的应用,都会比较关注。和逻辑架构有紧密的关联。3、运行

2021-10-25 23:21:41 1279

原创 运用五视图方法进行软件架构设计--实战一

摘要软件架构是从宏观上说明一套软件系统的组成与特性,包括软件可以提供什么样的功能,软件代码的层次结构,软件的部署与网络结构,软件的数据结构,软件的性能特征。上面说到的几个方面就可以用五视图法来表示。五视图法做架构设计的步骤是逻辑架构->数据架构->开发架构->运行架构->物理架构。一、五视图介绍(一)逻辑架构设计着重考虑功能需求系统应当向用户提供什么样的服务,关注点主要是行为或职责的划分。逻辑架构关注的功能,不仅包括用户可见的功能,还应当包括...

2021-10-25 20:59:29 2583

原创 架构设计中的方法学

架构设计是一种权衡(trade-off)。一个问题总是有多种的解决方案。而我们要确定唯一的架构设计的解决方案,就意味着我们要在不同的矛盾体之间做出一个权衡。我们在设计的过程总是可以看到很多的矛盾体:开放和整合,一致性和特殊化,稳定性和延展性等等。任何一对矛盾体都源于我们对软件的不同期望。可是,要满足我们希望软件稳定运行的要求,就必然会影响我们对软件易于扩展的期望。我们希望软件简单明了,却增加了我们设计的复杂度。没有一个软件能够满足所有的要求,因为这些要求之间带有天生的互斥性。而我们评价架构设计的好坏的依据,

2021-10-22 15:34:39 602

转载 系统架构设计师如何进行架构设计

9.1 软件架构概述9.1.1 软件架构的定义定义1:软件或计算机系统的软件架构是该系统的一个(或多个)结构,而结构有软件元素、元素的外部可见属性及他们之间的关系组成。定义2:软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式及这些模式的约束组成。定义3:软件架构是指一个系统的基础组织,它具体体现在:系统的构件,构建之间、构件和环境之间的关系,以及知道其设计和烟花的原则上。为更好的理解软件架构的定义,特作如下说明:架

2021-10-22 14:45:50 4154

原创 最经典的两种软件架构模式

什么是架构模式?根据维基百科中的定义:An architecture pattern is a general,reusable solution to a commonly occurring problem in software architecture within a given context.那么,在软件研发领域,最经典的两种架构设计模式,即微内核架构模式和 Pipe-Filter 架构模式,下面我们就来聊一聊这两种架构模式。一、Pipe-Filter 架构模式Pipe

2021-10-22 11:02:43 781

原创 如何编写一份合格的架构设计文档

在软件开发中,作为一名工程师,经常会遇到需要技术设计文档的场景。比如项目验收时,需要技术设计文档作为验收材料;进行岗位晋升时,需要技术设计文档作为晋升材料;解决遗留系统问题时,如果有设计文档会使问题得到更快速的解决 ......总之,作为一位软件工程师,会编写一份合格的架构设计文档是必备技能。今天,根据最近的学习,对如何编写架构设计文档做一个简单的总结。主要从三个方面进行介绍: 谁需要编写架构设计文档 为什么需要架构设计文档 架构设计文档应该包含哪些内容 谁需要

2021-10-22 10:08:32 7719 1

原创 软件概要设计如何写(文档恐惧症的程序猿必读)

一般说来,需求分析属于软件定义方面而概要设计、详细设计属于软件开发的阶段按照传统软件工程的软件过程,区别如下:1.需求分析--产生 软件功能规格说明书,需要确定用户对软件的需求,要作到明确、无歧义。不涉及具体实现方法。用户能看得明白,开发人员也可据此进行下面的工作(概要设计)2.概要设计--产生 软件概要设计说明书,说明系统模块划分、选择的技术路线等,整体说明软件的实现思路。并且需要指出关键技术难点等。3.详细设计--产生 软件详细设计说明书,对概要设计的进一步细化,一般由...

2021-10-21 20:20:15 33217 4

原创 谷歌软件工程师是怎样写设计文档的?

谷歌软件工程文化的主要元素之一就是通过设计文档定义软件设计。在开始项目编码工作之前,软件系统或应用程序的作者会创建这些相对非正式的文档。设计文档记录了高级实现策略和关键设计决策,并且重点记录了这些决策之间的权衡考虑。作为软件工程师,我们的工作本质上不是生产代码,而是解决问题。非结构化文本,类似设计文档的形式,也许是在项目早期解决问题比较好的工具,因为它易于理解、更简洁,且以比代码更高的层次来沟通问题和方案。除软件设计的原始文档外,设计文档还实现了软件开发周期中的如下功能:在早期发现设计问题,而那

2021-10-21 16:27:32 160

原创 如何写好一份软件开发设计文档

设计文档- 也被称作技术规范和实现手册,描述了你如何去解决一个问题,是确保正确完成工作最有用的工具,其目的是迫使你对设计展开缜密的思考,并收集他人的反馈,进而完善你的想法,同时在软件交付和交接的过程中,能让其他人更通俗易懂的了解之前的设计目的和思路目录:一、什么是软件开发设计文档 二、为什么要写软件开发设计文档 三、写软件开发设计文档需要注意些什么 四、怎么写好一份开发设计文档一、什么是软件开发设计文档设计文档 - 也被称作技术规范和实现手册,描述了你如何去解决一个问题,是确保.

2021-10-21 16:08:30 36705 2

原创 软件设计的不同模型:瀑布式、快速原型法、迭代式(敏捷)

自从1968年提出“软件工程”概念以来,软件开发领域对于借鉴传统工程的原则、方法,以提高质量、降低成本的探索就从未停止过。而在这个过程中,提出了许多不同的软件开发模型,典型的有:瀑布式,快速原型法,以及迭代式开发等。瀑布式模型是由W.W.Royce在1970年最初提出的软件开发模型,在瀑布模型中,开发被认为是按照需求分析,设计,实现,测试 (确认), 集成,和维护顺序的进行。快速原型法 快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行..

2021-10-21 15:03:49 2506

原创 Visual Studio Debug :远程调试(小白必读)

什么是远程调试?我们平时,特别是自学的新手在刚一开始的时候,都是本地编译、本地调试,本机编译好的程序就直接在本机执行。但是有些情况下,你本机编译好的程序,需要放到另一台机器(目标机)上运行。此时,你可以在本地的 VS 环境中,对运行在目标机上的程序进行远程调试。C# 项目和http://ASP.NETweb 服务器的远程调试方法略有不同,本文不做讲解。1. 原理目标机:负责执行目标程序。安装和运行远程工具 (Remote Debugger),等待来自开发...

2021-10-19 19:14:14 13770 1

原创 使用Windbg分析dump文件定位软件异常的方法!

1、前言Windbg是微软开发的在Windows平台下强大的用户态和内核态调试工具,是Windows系统排查软件异常的一大利器,使用Windbg能极大的提高我们排查问题的效率,Windbg可以快速分析出软件崩溃、死循环、死锁等多种异常。很多时候,如果仅仅通过排查代码或者添加打印去排查软件的异常崩溃,效率会很低,特别是代码量比较大的大项目,查起来会更加费劲。并且有些软件异常不是必现的或很难复现的,更不利于问题的排查。我们可以在工程代码中引入谷歌的CrashReport库,给软件安装异常捕获机制,当

2021-09-26 10:33:38 5330

原创 从哲学的角度来看面向对象中的主体客体思维

01 为什么面向对象难以理解?面向对象是应用软件设计比较好的方式,可以指导用计算机解决现实中的业务问题,因此是软件开发中的一种主流方式。不过,用好面向对象则比较困难,即使有数年经验的软件工程师也难说能很好驾驭。大多数人往往是照猫画虎,没有理解软件开发的 “骨相”。背后的原因为面向对象是对现实业务的抽象,需要使用者对现实有深入的理解,于是面向对象带有一定的哲学认识论的色彩。实际上,现代英语、现代法律、面向对象编程都和近代哲学有关,而近代哲学被称为“主体性哲学”,“主体” 概念和主客体关系是非常

2021-09-14 10:53:23 549

原创 一篇文章讲明白领域驱动建模(DDD)

何为DDDDDD不是架构设计方法,不能把每个设计细节具象化,DDD是一套体系,决定了其开放性,体系中可以用任何一种方法来解决这些问题,但是如果一些关键问题没有具体方案落地,可能让团队无所适从。有的小伙伴觉得DDD太虚了,具体在我们进行业务代码编写落地中DDD主要解决什么问题呢?总结起来说主要目的有两点:建立业务术语,统一PM/RD/QA需求沟通术语。 梳理业务边界,将业务领域逻辑内聚。搞定DDD要解决的问题如何进行领域建模 如何识别Bounded Context 如何在战术层面寻

2021-09-09 21:53:11 2609

原创 一篇文章说清楚shared_ptr,unique_ptr的区别和关系

一. shared_ptr的基本用法(一)与unique_ptr的比较 比较 shared_ptr unique_ptr 备注 初始化 ①shared_ptr<T> sp; sp.reset(new T()); ②shared_ptr<T> sp(new T()); ③shared_ptr<T> sp1 = sp;//拷贝...

2021-09-03 15:46:59 8810

转载 C++11:右值引用、移动构造、std::move, 以及使用emplace_back代替push_back

最近在写一段代码的时候,突然很好奇C++11中对push_back有没有什么改进以增加效率,上网搜了一些资料,发现果然新增了emplace_back方法,比push_back的效率要高很多。1、右值引用C++11引入了右值引用,用&&表示右值引用,如int &&a = add(1,2)。先了解下什么是左值和右值,简单的说,下面的表达式:int a = 10;等号“=”左边的a为左值,右边的10为右值;当然这只是表面的定义,进一步说,左值是有固定...

2021-08-27 14:59:43 2003 1

原创 常用Qt线程同步的几种方法

一、QMutex类 QMutex类就像一把锁,在互斥量之前上锁(QMutex::lock()),然后在使用完互斥量之后解锁(QMutex::unlock())。比如下面的代码: void someMethod() { mutex.lock(); qDebug()<<"Hello"; qDebug()<<"World"; mutex.unlock(); } class Thread1...

2021-08-19 14:37:29 836

转载 如何正确使用QTcpSocket的readyRead信号?

一、问题描述:你之所以会来看我这篇文章,大概是遇到了一下几个问题:1、使用QTcpSocket时,readyread函数没有触发,或者触发了,但是触发次数不是自己想象的那样。2、readyread槽函数中,接收到的数据不对。我们先看一下Qt官方文档的说法:官方文档中对readyread函数解释很简短: This signal is emitted once every time new data is available for reading from the device'..

2021-08-11 13:55:58 4450 2

转载 C++ 进程间通信详解

一,C++ 常用进程间通信管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。 命名管道(namedpipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;Linu.

2021-06-22 15:11:13 10027

转载 判断有向图是否有回路的另外一种方法--拓扑排序

#include <iostream>#include <string>#include <queue>using namespace std;typedef struct Edgenode{ int adjvex; struct Edgenode *next;}Edgenode;typedef struct Vertexnode{ string data; Edgenode *firstedge;}Vertexn...

2021-05-25 15:03:15 910

转载 如何判断图中是否有环,如果有输出每条环

题目】试写一个求有向图G中所有简单回路的算法【思路】方法一:DFS搜索,直到搜索到已经遍历到的结点–>说明:找到了回路判断该回路是否已经搜索到了(重复吗?)不重复,放入结果集方法二:DFS搜索,只往结点编号大的结点搜索–>这样就不会重复寻找搜索到和第一个位置上的结点相同–>搜索到了路径找到后放入结果集【测试数据】123456对应ABCDEF文章目录方法一:用ALGraph举例方法二:用MGraph举例方法一的完整代码方法二的完整代码方法一:用ALGr

2021-05-25 14:52:47 697

原创 十本数据结构与算法书籍推荐

学计算机的人是幸福的,因为在这个领域中有如此多的通俗易懂(相对来说)的经典好书,你需要做的只是坚持把它们一本一本读下去而已。在这里列出一些我看过或者准备看的算法书籍,以供参考。第一名原书名:The Art of Computer Programming中文名:计算机程序设计艺术作者:Donald E.Knuth难度:★★★★★个人评价:★★★★★推荐程度:★★★本书是算法分析的经典名作(用经典不太恰当,应该是圣经或史诗),被科学美国人列为20世纪12大科学名著之一(和Di.

2021-05-20 23:02:21 12073

原创 有向图的表示、存储及DFS/BFS实现(C++)--丰富注释+功能完整版

1 基本概念1.1 图的定义  图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:                   G=(V,E)  其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。  注:  在线性表中,元素个数可以为零,称为空表;  在树中,结点个数可以为零,称为空树;  在图中,顶点个数不能为零,但可以没有边。1.2 图的存储结构  考虑图的定义,图是由顶点和边组成的,分别考虑如何存储顶点、如何存储边。1.2.1 邻接矩阵

2021-05-18 15:59:15 2412 1

原创 深入浅出介绍哈希表

为什么要使用哈希表查找和插入是查找表的两项基本操作,对于单纯使用链表,数组,或二叉树实现的查找表来说,这两项操作在时间消耗上仍显得比较昂贵。 以查找为例:在数组实现的查找表中,需要用二分等查找方式进行一系列的比较后,才能找到给定的键值对的位置。而二叉树的实现中也存在着一个向左右子树递归查找的过程。 而现在,我们希望在查找/插入/删除这三项基本操作里, 能不通过比较,而是通过一个哈希函数的映射,直接找到键对应的位置,从而取得时间上的大幅优化, 这就是我们选用哈希表的原因。相比起哈希表,其他的查找.

2021-05-07 10:28:50 320

常用日语900句

常用的日语句式,是学习日语同学的经典教材

2012-06-21

OpenGL入门经典教材

nehe的opengl教程还是一个很不错的教程。配合这个代码应该很快能够入门,掌握。这个代码是win下的,不过除了gui核心的都是一样

2012-06-21

Head First 设计模式(中文版).pdf

1,事关要紧的模式 2,何时使用某个模式,为何使用该模式 3,如何在自己的设计中马上采用这些模式 4,何时不该使用模式 5,模式是基于某些面向对象的原则设计出来的

2012-06-01

空空如也

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

TA关注的人

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