摘要: 一. 声明 该节主要介绍SignalR的一些理论知识,代码量很小,在后续章节编写中,会不断回来更新该节,完善该节的介绍;待该系列结束时,该节会和目录章节合并。 下面的理论介绍相对枯燥,但对于后面的理解有一定意义,不感兴趣的朋友可以右上角离开了,从下一节开始,正式开始撸代码。 原计划三天更新一篇,结果 阅读全文
posted @ 2018-07-08 10:16 Yaopengfei 阅读(6959) 评论(19) 推荐(19) 编辑
摘要: 一. 说在前面的话 该篇文章为实时通讯系列的第一节,基于WebSocket编写了一个简易版聊天样例,主要作用是为引出后面SignalR系列的用法及其强大方便之处,通过这个样例与后续的SignalR对比,可以体会到用原生的WebSocket编程的不灵活以及繁琐之处。(PS:下面那个案例 编写+调试 用 阅读全文
posted @ 2018-07-04 18:02 Yaopengfei 阅读(10234) 评论(19) 推荐(13) 编辑
摘要: 一. 同步VS异步 1. 同步 VS 异步 VS 多线程 同步方法:调用时需要等待返回结果,才可以继续往下执行业务 异步方法:调用时无须等待返回结果,可以继续往下执行业务 开启新线程:在主线程之外开启一个新的线程去执行业务 同步方法和异步方法的本质区别: 调用时是否需要等待返回结果才能继续执行业务 阅读全文
posted @ 2018-07-02 07:53 Yaopengfei 阅读(31429) 评论(49) 推荐(38) 编辑
摘要: 一. 各类概念和指令介绍 1. NVM (1). 全称:Node Version Manager,是一款针对Nodejs的版本管理工具,由于Node的版本很多,很多时候我要需要依赖多个版本,并且要求可以自动切换,这个时候采用NVM来管理Node再合适不过了。 (2). 下载地址:https://gi 阅读全文
posted @ 2018-06-29 07:41 Yaopengfei 阅读(1959) 评论(4) 推荐(7) 编辑
摘要: 一. 开篇说明 EF的性能问题一直以来经常被人所吐槽,究其原因在于“复杂的操作在生成SQL阶段耗时长,且执行效率不高”,但并不是没有办法解决,从EF本身举几个简单的优化例子: ①:如果仅是查询数据,并不对数据进行增、删、改操作,查询数据的时候可以取消状态追踪。 ②:用什么查什么,比如一张表有100多 阅读全文
posted @ 2018-06-26 07:38 Yaopengfei 阅读(10954) 评论(26) 推荐(15) 编辑
摘要: 一. NuGet 1. 获取当前项目已经安装的类库:Get-Package 2. 安装指定版本:install-package <程序包名> -version <版本号> 3. 安装最新版本:install-package <程序名> 4. 正常卸载:uninstall-package <程序包名> 阅读全文
posted @ 2018-06-25 10:29 Yaopengfei 阅读(318) 评论(1) 推荐(0) 编辑
摘要: 一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "、"每天的0点需要统计前一天的考勤记录"、"每个月的1号计算上个月的库存情况"、"定时初始化数据供其它业务使用"、"每隔2分钟轮询查数据库看某业务是否被审核通过,并提示用户" 等等。 以上需求在开发中 阅读全文
posted @ 2018-06-23 07:46 Yaopengfei 阅读(10645) 评论(26) 推荐(33) 编辑
摘要: 一. 静态和非静态 1. 概念介绍 ① 静态类(被static修饰) vs 普通类(没有被static修饰) ② 静态成员:被static修饰的成员,比如:静态方法、静态字段等 ③ 普通成员(实例成员):不被static修饰的成员,比如:普通方法、普通字段 2. 运行机制 ① 静态成员在程序运行的时 阅读全文
posted @ 2018-06-22 11:39 Yaopengfei 阅读(1710) 评论(3) 推荐(6) 编辑
摘要: 一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并发问题,后面随着处理的系统业务越来越复杂,多线程再也回避不了了,也就借此机会深入研究了一下.Net中 阅读全文
posted @ 2018-06-21 07:35 Yaopengfei 阅读(8966) 评论(24) 推荐(28) 编辑
摘要: 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模式,ViewState功不可没,通过的控件的拖拽和绑定,很快就可以搭建出来一个Web项目,其开发速度远胜Java、PHP,当年Web项目并不很重视体验, 阅读全文
posted @ 2018-06-20 07:38 Yaopengfei 阅读(11455) 评论(11) 推荐(27) 编辑
摘要: 一. 谈情怀 从第一次接触开发到现在(2018年),大约有六年时间了,最初阶段连接数据库,使用的是【SQL语句+ADO.NET】,那时候,什么存储过程、什么事务 统统不理解,生硬的将SQL语句传入SQLHelper类中,后来知道还要注意SQL注入,引入参数化的方式,现在回想一下,那个阶段简直Low到 阅读全文
posted @ 2018-06-19 07:56 Yaopengfei 阅读(11105) 评论(18) 推荐(22) 编辑
摘要: 一. 回顾历史 回顾个人发展历程,自2012年初次接触开发至今(2018年)已经有六个年头,这期间陆陆续续学习并掌握了不少技术,C#语言、ORM框架、多线程技术、设计模式、前端技术、MVC、MVVM框架思想等等,每种技术随着多次使用,随着不断的反思,逐渐经历 “了解→理解→掌握→精通 ”这么一个过程 阅读全文
posted @ 2018-06-15 11:41 Yaopengfei 阅读(10739) 评论(25) 推荐(33) 编辑
摘要: 111 阅读全文
posted @ 2018-06-11 09:32 Yaopengfei 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 一. C# 6.0 新语法 1. 自动属性初始化可以赋值 1 /// <summary> 2 /// 自动属性初始化 3 /// </summary> 4 public class UserInfor 5 { 6 public string userId { get; set; } = "12345 阅读全文
posted @ 2018-05-19 22:03 Yaopengfei 阅读(1572) 评论(1) 推荐(4) 编辑
摘要: 一. 各类数据结构比较及其线程安全问题 1. Array(数组): 分配在连续内存中,不能随意扩展,数组中数值类型必须是一致的。数组的声明有两种形式:直接定义长度,然后赋值;直接赋值。 缺点:插入数据慢。 优点:性能高,数据再多性能也没有影响 特别注意:Array不是线程安全,在多线程中需要配合锁机 阅读全文
posted @ 2018-05-08 11:36 Yaopengfei 阅读(3279) 评论(2) 推荐(1) 编辑
摘要: 1 阅读全文
posted @ 2018-05-05 18:49 Yaopengfei 阅读(477) 评论(0) 推荐(0) 编辑
摘要: 1. http https (ajax) 2. 总结一下同一个项目下 前后交互的集中提交方式 (.Net特有的 EasyUI封装的) 3. 跨域请求的几种形式 3. HttpClient 4. WebService 5. WebAPI(重点) 6. socket 7. websocket (重点)+ 阅读全文
posted @ 2018-04-19 17:36 Yaopengfei 阅读(2787) 评论(3) 推荐(0) 编辑
摘要: 一. 什么是设计模式 纠结了好久,今天终于下定决心开始写设计模式系列,因为这个系列章节确实不好写,在这之前,也看了好多关于设计模式的博客、视频、书籍等,最后结合自己的理解,亲自动手实操代码,完成该章节。 我也和我同行的朋友交流了一下关于设计模式,对设计模式的理解,可以分为这么几个层次: ①:根本不知 阅读全文
posted @ 2018-04-03 16:10 Yaopengfei 阅读(1430) 评论(6) 推荐(2) 编辑
摘要: 一. IIS部署 比如在MVC框架中集成了Quartz.Net定时调度,此时该调度系统会随着MVC框架被挂在IIS下,IIS会进程回收,所以大部分开发都会遇到Quartz挂在IIS下一段时间不好用。 补充:IIS可以设置定时自动回收,默认回收是1740分钟,也就是29小时。IIS自动回收相当于服务器 阅读全文
posted @ 2018-03-20 22:20 Yaopengfei 阅读(5838) 评论(7) 推荐(6) 编辑
摘要: 背景: 默认情况下,Quartz.Net作业是持久化在内存中的,即 quartz.jobStore.type = "Quartz.Simpl.RAMJobStore, Quartz",这种模式有以下弊端: ① 想在A服务器上控制B服务器上已经发布了的job和trigger不方便; ② 很难实现Web 阅读全文
posted @ 2018-03-16 08:31 Yaopengfei 阅读(4551) 评论(13) 推荐(6) 编辑
摘要: 一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上控制这个Scheduler。 2. 猜想: A服务器上的Scheduler需要有地址、需要有端口、需要有名称(实际上也是如此)。 3. 需求: 一个控制台程序作为服务端运行A服务器 阅读全文
posted @ 2018-03-15 14:54 Yaopengfei 阅读(2880) 评论(7) 推荐(7) 编辑
摘要: 一. 简介 揭秘: SimpleThreadPool是Quartz.Net中自带的线程池,默认个数为10个,代表一个Scheduler同一时刻并发的最多只能执行10个job,超过10个的job需要排队等待。 二. 四种配置方案 1. NameValueCollection的方式 需要利用StdSch 阅读全文
posted @ 2018-03-13 20:54 Yaopengfei 阅读(4590) 评论(5) 推荐(5) 编辑
摘要: 一. 简介 1. 什么是哑火 由于某些原因导致触发器(trigger)在该触发的时候没有得到触发,后续对应的解决策略即为哑火策略。(个人理解) 2. 哑火触发的条件 ①:所有的工作线程都在忙碌,导致某些trigger得不到触发.(如:simplethreadpool 默认是10个工作线程,但我有15 阅读全文
posted @ 2018-03-12 15:23 Yaopengfei 阅读(3426) 评论(2) 推荐(7) 编辑
摘要: 背景介绍及其使用 该章节主要补充介绍,在前一章四类触发器的基础上配合六大Canlander来动态删减某些时间,来满足更多的应用场景。 1. DailyCalendar:动态排除某天的某些字段. (需求:每天8-23点执行,每隔1s执行一次,但是21-22点这个区间不执行) 2. WeeklyCale 阅读全文
posted @ 2018-03-11 20:43 Yaopengfei 阅读(2392) 评论(2) 推荐(5) 编辑
摘要: 一. WithSimpleSchedule(ISimpleTrigger) 1. 用途:时、分、秒上的轮询(和timer类似),实际开发中,该场景占绝大多数. 2. 轮询的种类:永远轮询和限定次数轮询. 3. 参数中的几个函数: A.执行间隔: ①.WithInterval(TimeSpan tim 阅读全文
posted @ 2018-03-10 23:39 Yaopengfei 阅读(4063) 评论(5) 推荐(5) 编辑
摘要: 一. 简介 1. 几个类型: ①:TriggerBuilder:用来创建ITrigger实例 ②:ITrigger:触发器实例 2.常用的几个方法 ①.StartNow:Trigger马上触发. ②.StartAt和EndAt:设置Trigger触发的开始时间和结束时间 (省略设置开始时间的话,默认 阅读全文
posted @ 2018-03-09 13:08 Yaopengfei 阅读(3942) 评论(0) 推荐(2) 编辑
摘要: 一. 五大构件 引言: Quartz.Net的五大构件 1. 调度器:Scheduler 2. 作业任务:Job 3. 触发器: Trigger 4. 线程池: SimpleThreadPool 5. 作业持久化:JobStore 二. Scheduler详解 1. 创建Scheduler的两种方式 阅读全文
posted @ 2018-03-08 08:47 Yaopengfei 阅读(6035) 评论(4) 推荐(3) 编辑
摘要: 一. 时间的类型 1. 背景 这里为什么要介绍时间类型呢,明明是定时调度篇,原因是在定时任务中,任务什么时间开始执行,什么时间结束执行,要用到各种各样的时间模式,虽然这不能算是一个复杂的问题,但在正式介绍Quartz.Net之前,还是很有必要补充一下的,该章节就是解决这类问题的。 2. 时间类型 时 阅读全文
posted @ 2018-03-07 09:51 Yaopengfei 阅读(5130) 评论(2) 推荐(1) 编辑
摘要: 一. 前奏-Timer类实现定时任务 在没有引入第三方开源的定时调度框架之前,我们处理一些简单的定时任务同时都是使用Timer类, DotNet中的Timer类有三个,分别位于不同的命名空间下,分别是: ①.位于System.Windows.Forms里,即定时器控件,不过多介绍了 ②.位于Syst 阅读全文
posted @ 2018-03-06 08:14 Yaopengfei 阅读(4741) 评论(6) 推荐(2) 编辑