- 博客(49)
- 收藏
- 关注
转载 多线程下解决资源竞争的7种方法
前言 一般情况下,只要涉及到多线程编程,程序的复杂性就会显著上升,性能显著下降,BUG出现的概率大大提升。多线程编程本意是将一段程序并行运行,提升数据处理能力,但是由于大部分情况下都涉及到共有资源的竞争,所以修改资源对象时必须加锁处理。但是锁的实现有很多种方法,下面就来一起了解一下在C#语言中几种锁的实现与其性能表现。一、c#下的几种锁的运用方式1、临界区,通...
2019-08-13 23:51:00
633
转载 B树概述与简单应用示例(C#)
引言: 天不生仲尼,万古如长夜。在计算机科学中,也有一个划时代的发明,B树(多路平衡查找树)及其变体(B树,b*树,b+树);由德国科学家(鲁道夫·拜尔 Rudolf Bayer),美国科学家(爱德华·M·麦克特 Edward Meyers McCreight)于1970年共同发明;B树这种数据结构特别适合用于数据库与文件系统设计中,是人类精神财富的精华部分,B树不诞生,计...
2019-05-30 20:19:00
625
转载 Docker应用:Kubernetes(容器集群)
阅读目录:Docker应用:Hello WorldDocker应用:Docker-compose(容器编排)Docker应用:Kubernetes(容器集群)前言: 终于出第三篇了,上个月就已经弄好了,一直没弄上来,步入正题之前有3个建议给想要学习Kubernetes的同学。 1、在国内因为防火墙的原因,你是不可能在Docker上在线开启的Kub...
2019-04-15 20:58:00
261
转载 Docker应用:Docker-compose(容器编排)
阅读目录:Docker应用:Hello WorldDocker应用:Docker-compose(容器编排)前言: 昨天完成了Docker入门示例(Docker应用:Hello World),示例只是粗略展示了单机应用在Docker中部署的大概流程;但是即使先不考虑大型项目关联的多个应用服务,单单只是单机应用部署来说,过程也是略为复杂。 因为现在...
2019-02-26 19:56:00
171
转载 Docker应用:Hello World
前言: 最近学习了Docker相关技术点,国内关于Docker的资料大多是基于Linux系统的,但是我对Linux又不熟(实际上没用过,掩面哭笑.Jpg)。好在在Win10下也是支持Docker的,而且是支持Linux和Windows两种容器。 在Win10下运行容器和在Linux下是有一些区别的,很多命令都不一样、容器网络也不一样,刚开始我就不明白这点,搭建应用总是错误...
2019-02-25 20:28:00
130
转载 使用内存映射开发高性能进程间消息通信组件
一、背景 项目开发中免不了各模块或系统之间进行消息通信,目前热门的消息中间件有Redis、RabbitMQ、Kafka、RocketMQ等等。以上几种组件中Redis在消息队列方面表现还可以,但是如果涉及发布订阅功能,就不行了,最近项目就使用了redis的发布订阅,每秒只能发出几千条,虽然目前绰绰有余,但是瓶颈可以预期。 其余的几种都是比较重量级的消息中间件,什么跨平...
2019-01-06 15:24:00
126
转载 .net环境下跨进程、高频率读写数据
一、需求背景1、最近项目要求高频次地读写数据,数据量也不是很大,多表总共加起来在百万条上下。单表最大的也在25万左右,历史数据表因为不涉及所以不用考虑,难点在于这个规模的热点数据,变化非常频繁。数据来源于一些检测设备的采集数据,一些大表,有可能在极短时间内(如几秒钟)可能大部分都会变化,而且主程序也有一些后台服务需要不断轮询、读写某种类型的设备,所以要求信息交互时间尽...
2018-04-29 18:04:00
78
转载 使用C#开发Android应用之WebApp
近段时间了解了一下VS2017开发安卓应用的一些技术,特地把C#开发WebApp的一些过程记录下来,欢迎大家一起指教、讨论,废话少说,是时候开始表演真正的技术了。。1、新建空白Android应用2、拖一个WebView控件进来3、打开模拟器Genymotion,选择一个系统版本,启动4、加载网页4.1打开MainActivity.cs...
2018-04-06 00:40:00
297
转载 分布式事务之消息补偿解决方案
一、数据库本地事务先看看数据库事务的定义:单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行这个比较容易理解,操作过数据库的一般都懂,既是业务需求涉及到多个数据表操作的时候,需要用到事务要么一起更新,要么一起不更新,不会出现只更新了部分数据表的情况,下边看看数据库事务的使用1 begin tran2 begin try 3 ...
2018-01-20 20:33:00
291
转载 项目架构开发:数据访问层之UnitOfWork (补充)
应lisansi同学回复(项目架构开发:数据访问层之UnitOfWork)要求,补上Dapper的DbContext实现 1 using Dapper.Contrib.Extensions; 2 using HG.Infrastructure.Common; 3 using System; 4 using System.Collections.Generic; 5...
2018-01-16 14:59:00
162
转载 图形化控件开发 - 矩形控件
最近这段时间,公司需要做一个图形化配置工具。主要是有以下一些要求:1、针对一些底层的智能设备(智能楼宇的控制器),通过COM口连接上,并通过相关协议读取参数值2、支持一些基本的逻辑运算,以及公司业务的一些特性“点”,一种点可以看成一个图形化控件3、参数在图形化工具上显示出来,工程人员直接设置图形属性设置参数值、连线等4、支持在线和离线2种工作方式,设置好参数后直接在界...
2017-10-21 13:29:00
328
转载 c# Activex开发之HelloWorld
最近需要在Web上使用WinFrom程序,所以要用到Activex技术将WinFrom程序变成插件在Web运行一、创建用户控件1.1 新建用户控件项目1.2 在界面上拉一个label,Text赋值为“HelloWorld”1.3 加上guidusing System;using System.Windows.Forms;using...
2017-07-08 21:22:00
88
转载 高并发场景之RabbitMQ篇
上次我们介绍了在单机、集群下高并发场景可以选择的一些方案,传送门:高并发场景之一般解决方案但是也发现了一些问题,比如集群下使用ConcurrentQueue或加锁都不能解决问题,后来采用Redis队列也不能完全解决问题,因为使用Redis要自己实现分布式锁这次我们来了解一下一个专门处理队列的组件:RabbitMQ,这个东西天生支持分布式队列。下面我们来用Rabbit...
2017-04-02 18:38:00
188
转载 高并发场景之一般解决方案
今天我们来了解一下一些高并发的业务场景如何做到数据一致性的。一、场景:1、有数据表:ConCurrency,1 CREATE TABLE [dbo].[ConCurrency](2 [ID] [int] NOT NULL,3 [Total] [int] NULL4 )2、初始值:ID=1,Total = 03、现要求每一次客户...
2017-04-02 02:13:00
246
转载 任务调度之集群(基于Quartz.net)
上一篇我们完成了任务调度的持久化,传送门:任务调度之持久化(基于Quartz.net)这篇我们来完成Quartz.net的一个比较优秀的功能,即集群;集群可以提高任务调度服务的容灾性,当一个节点宕机后,其他节点会自动补上去,把超时的Job继续执行下去。当然了,某个Job同一时刻只会运行在一个节点上,他们是通过数据库锁实现的。1、集群依赖于数据表之前2张我们介绍的...
2017-03-29 00:19:00
192
转载 任务调度之持久化(基于Quartz.net)
上一篇我们了解了任务调度及他的远端管理方式,传送门:任务调度及远端管理(基于Quartz.net)这篇我们要完成任务调度的持久化功能,即新增修改删除之类的功能,这必须得要有的,不然都不知道后台都有什么作业在跑一、Job的CURD1.1 、新建Job表 1 CREATE TABLE [dbo].[Job]( 2 [Id] [uniqueidentifi...
2017-03-27 23:52:00
153
转载 任务调度及远端管理(基于Quartz.net)
这篇文章我们来了解一些项目中的一个很重要的功能:任务调度可能有些同学还不了解这个,其实简单点说任务调度与数据库中的Job是很相似的东西只不过是运行的物理位置与管理方式有点不一样,从功能上来说我觉得还是差不多的,存储过程有很大的局限性,耦合性也太高,所以最好把系统的一些Job放在代码层,于是就有了Quartz.net,我们本篇就是针对Quartz.net的二次开发...
2017-03-26 22:49:00
115
转载 项目架构开发:集群部署
上一章我们完善了服务层的设计,传送门:项目架构开发:服务层(下)这次我们来完成项目的单机部署与集群部署,我们来看看单机部署与登录单机部署很简单,这里就不演示了,要注意的是我们用的是session来保存登录信息虽然Session不安全,比如sessionid被截获那就可以在任何地方用你的账号登录;但是大多数企业内部系统都无需那么高的安全级别,所以这个不用太担心;现...
2017-03-21 01:26:00
124
转载 项目架构开发:服务层(下)
之前我们已经完成了服务层,因为当时展现层还没有出来,所以只做了简单介绍。传送门:项目架构开发:服务层(上)这次我们通过一个维护系统用户的场景来介绍一下服务层真正的设计用意。1、新增用户场景新增用户可能会有以下步骤实现以上需求,开发人员一般情况下可能就是以上蓝红黑紫绿几种选择1、有些写在Controllers、有些写在Application...
2017-03-19 15:11:00
131
转载 项目架构开发:异常处理及日志
上一篇我们完善了多层开发的效率问题,传送门:项目架构开发:展现层(下)这次我们完成架构的异常处理功能,异常处理一般都与日志分不开的,因为分析及定位问题需要一些详细信息;稍微正规一点的公司,都会分开发、测试及生产环境。在本地及测试环境出BUG了,问题很好解决调试跟踪问题,三下五除二就搞完了;但是在生产环境出问题,基本上是不允许直连数据库调试的;这时候如何没有足够的异常...
2017-03-18 16:53:00
338
转载 项目架构开发:展现层(下)
上一章我们完成了项目的展现层的一个表的CURD,从此UI层到数据库的通道打通了;传送门:项目架构开发:展现层(上)这章我们还是讲CURD,不过内容重复的话就没意思了,这次我们想办法提高代码编写的效率;先来看看从UI层到DataAccess一共要写多少个类文件,服务层就先不算在里边了1、DataAccessLayer这部分是一次性的工作,完成后之后几乎不用修改,...
2017-03-13 23:39:00
92
转载 项目架构开发:展现层(上)
上次我们创建了项目的服务层,服务层在业务逻辑简单,或项目运行初期不是很容易体现出他的价值;传送门:项目架构开发:服务层(上)服务层专门处理非业务逻辑的一些功能,比如缓存、异常处理、组织多个应用逻辑等;这次我们搭建最上层的展现层,用到的知识面包括以下:asp.net mvc5 + bootstrap+ autofac +AutoMapper这次我们没有用服务层,而是直接调用...
2017-03-13 00:40:00
466
转载 项目架构开发:服务层(上)
上一次(即昨天),我们完成了业务逻辑层的演示;传送门:项目架构开发:业务逻辑层之领域驱动失血模型设计上虽然还不是太优雅,但是距离真正的OO编程又更近了一步,而且也保留了事务脚本模式的简单快捷的特性只要后续把Model层丰富起来,那就算是掌握了另一种软件开发模式,而且也是整个思想上的转变。本章我们来完成在业务逻辑层之上的服务层;服务层并不是必须的,在有一定复杂度...
2017-03-09 23:49:00
242
转载 项目架构开发:业务逻辑层之领域驱动失血模型
前边我们构建了个数据访问层,功能虽然简单,但是基本够用了。传送门:项目架构开发:数据访问层这次我们构建业务逻辑层业务逻辑是一个项目、产品的核心,也是现实世界某种工作流程在代码层面的体现。所以,业务逻辑的合理组织构造,或更真实地反映现实业务操作,对项目的成功与否非常重要现在业界对业务逻辑层的开发,一般会参考Martin Fowler大师提出来的针对业务层开发的四种模式...
2017-03-08 22:19:00
104
转载 项目架构开发:数据访问层之UnitOfWork
接上文项目架构开发:数据访问层之IQuery本章我们继续IUnitOfWork的开发,从之前的IRepository接口中就可以看出,我们并没有处理单元事务,数据CUD每次都是立即执行的,这样有一些不好的地方,比如数据访问次数会增多,一笔数据的完整性无法保证比如:批量新增2条记录,只有一条成功,这样的情况就应该Rollback;可能有人已经想到用数据库自带的事务保...
2017-03-05 21:57:00
219
转载 项目架构开发:数据访问层之Query
接上文项目架构开发:数据访问层之Repository上一章我们讲了IRepository接口,这张我们来讲IQuery根据字面意思就可以知道,这次主要讲数据查询,上一章我们只针对单表做了查询的操作,多表联查并没有实现其实对于任何一个项目来说,多表联查都是比较麻烦的地方,因为项目的“读”操作,特别是多表的“读”,至少占据所有“读”的一半以上然而至今,据我所知还没...
2017-03-05 21:56:00
215
转载 项目架构开发:数据访问层之Repository
接上文项目架构开发:数据访问层之Logger本章我们继续IRepository开发,这个仓储与领域模式里边的仓储有区别,更像一个工具类,也就是有些园友说的“伪仓储”,这个仓储只实现单表的CURD与Query,都是通过主键ID或拉姆达表达式进行操作的,返回的都是单表的实体或实体集合,多表的在IQuery接口中再讲;虽然如此,但是如果与“活动记录”开发模式搭配的话,会...
2017-03-05 16:23:00
184
转载 项目架构开发:数据访问层之Logger
接上文项目架构开发:数据访问层之Cache本章我们继续ILogger的开发ILogger.cs 1 public interface ILogger 2 { 3 void Info(object message); 4 void Info(object message, Exception e);...
2017-03-05 09:20:00
89
转载 项目架构开发:数据访问层之Cache
数据访问层简单介绍数据访问层,提供整个项目的数据访问与持久化功能。在分层系统中所有有关数据访问、检索、持久化的任务,最终都将在这一层完成。来看一个比较经典的数据访问层结构图大概可以看出如下信息1、有缓存、日志、异常处理、数据CRUD、查询及数据事务等功能2、无缝对接如EF、ADO.NET、NH、Dapper等数据访问技术3、对外只开放接口层,隐藏具体实现,这样...
2017-03-04 18:49:00
118
转载 微信公众号平台接口开发:菜单管理
官方菜单功能介绍请求接口:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN新增菜单管理类 1 public class MenuFirstLayerModel 2 { 3 public string name { get;...
2017-02-21 21:03:00
143
转载 关系型数据库:设计范式介绍
范式简单说明1NF:每一列都是不可分割的原子数据项2NF:消除非主属性对码的部分函数依赖3NF:消除非主属性对码的传递函数依赖详细解析查看百度百科:数据库范式如何理解这几个范式的含义?光看字面意思就非常的晦涩!这几种范式有什么意义呢?可以简单理解为是一种设计标准。一般我们是如何设计表字段呢? 似乎并没有什么硬性的要求,可以把一个表搞成几个表,反过...
2017-02-19 20:12:00
111
转载 微信公众号平台接口开发:成为开发者
公众号种类想要进行公众号开发,首先要程序开发者。注册地址:https://mp.weixin.qq.com/一共有4种账号类型,我们要学习的是订阅号和服务号,这2中账号功能都一样的,只是服务号开放的功能更多订阅号之前是可以申请认证的,现在关闭订阅号认证了,所以现在订阅号功能很有限,有点鸡肋。接口权限查看地址:https://mp.weixin.qq.com/a...
2017-02-18 16:00:00
190
转载 微信公众号平台接口开发:基础支持,获取微信服务器IP地址
官方说明目前看不出来这个接口有哪些具体运用,但是既然有这个接口,那我们就试试能不能用访问接口修改WeCharBase.cs,新增以下2个方法 1 public static string ServerIPs 2 { 3 get { return GetServerIPs(); } 4 ...
2017-02-18 16:00:00
249
转载 微信公众号平台接口开发:基础支持,获取access_token
新建Asp.net MVC 4.0项目WeChatSubscript是项目UI层WeChatTools是封装操作访问公众号接口的一些方法类库获取AccssToken我们要的得到AccessToken,这是所有接口访问的基础,我们看看官方给出的接口调用文档很简单明了,grant_type=client_credential,这是固定的不会变appid与se...
2017-02-18 16:00:00
310
转载 微信公众号平台接口开发:发送客服消息
官方接口介绍发送文本信息参数有4个,access_token这个就不用介绍了,就是之前得到的那个AccessToken,就是在这个接口里边当中参数用的touser是关注了公众号的微信用户的openid,这个其实就是就是第一篇:微信公众号平台接口开发:成为开发者,里边的关注了测试账号的账户我们再看一篇,就是圈起来的那个IDmsgtype=text是固定的...
2017-02-18 15:59:00
231
转载 asp.net权限认证篇外:集成域账号登录
在之前的我们已经讲过asp.net权限认证:Windows认证,现在我们来讲讲域账号登录,这不是同一件事哦,windows认证更多的是对资源访问的一种权限管控,而域账号登录更多的是针对用户登录的认证,他一般与forms认证结合一起使用demo就用之前的asp.net权限认证:Forms认证1、改一下LoginController,如下 1 pub...
2017-02-08 11:24:00
174
转载 asp.net权限认证:OWIN实现OAuth 2.0 之简化模式(Implicit)
简化模式定义通过客户端的后台服务器,与“服务提供商”的认证服务器进行认证。(和授权码模式差不多哦)1、用户访问客户端,后者将前者导向认证服务器。2、用户选择是否给予客户端授权。3、假设用户给予授权,认证服务器会直接向客户端发送访问令牌(access token)。4、Client拿着access token去访问Resource资源注意:红色字体部分是与授权码模式最根本的区别...
2017-02-03 21:58:00
210
转载 asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)
授权码模式定义通过客户端的后台服务器,与“服务提供商”的认证服务器进行认证。1、用户访问客户端,后者将前者导向认证服务器。2、用户选择是否给予客户端授权。3、假设用户给予授权,认证服务器首先生成一个授权码,并返回给用户,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。4、客户端收到授权码,附上早先的"重定向URI",向认...
2017-02-01 22:41:00
530
转载 asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)
客户端模式定义用户向客户端提供用户名密码。客户端使用这些信息,向“服务提供商” 进行认证。先上密码模式的工作流程图:密码模式和客户端模式差不多,但是此时User已经非常信任Client,以至于连User的认证口令都给Client;这通常用在用户对客户端高度可信的情况下出现这种情况。认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式注意...
2017-01-31 23:14:00
513
转载 asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)
客户端模式定义客户端使用自己的名义,而不是用户的名义,向“服务提供商” 进行认证。如何理解这句话? 乍一看,定义有点拗口,刚接触的童鞋可能完全不知所云。没关系,我们先把他的工作流程图画出来,如下:据上图,可以得出一个大概的结论1、用户(User)通过客户端(Client)访问受限资源(Resource)2、因为资源受限,所以需要授权;而这个授权是Clie...
2017-01-30 20:28:00
274
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人