摘要: 一. MySQL的备份和恢复 1. 命令行导入导出SQL 通过管理员的身份cmd命令进入dos窗口。 (1). 导出命令: mysqldump -u账户 -p密码 数据库名称>脚本文件存储地址 。 eg:mysqldump -uroot -p123456 ypftest> C:/XXXX.sql ( 阅读全文
posted @ 2017-07-16 23:42 Yaopengfei 阅读(769) 评论(1) 推荐(0)
摘要: 一. 插入 1. 全字段插入 (1). 标准格式 insert into tableName (c1,c2,c3 ...) values (x1,x2,x3,...) 可以省略: insert into tableName values (x1,x2,x3,...) (2). 插入多条数据 inse 阅读全文
posted @ 2017-07-16 23:41 Yaopengfei 阅读(381) 评论(0) 推荐(0)
摘要: 一. 综述 查询操作主要从两个方面来说:单表查询和多表查询。 多表查询包括:笛卡尔积、外键约束、内连接查询、外链接查询、自连接查询。 二 . 案例设计 1. 设计产品表(product)。包括:主键id、产品名称(productName)、分类编号(dir_id)、零售价(salePrice)、供应 阅读全文
posted @ 2017-07-16 22:26 Yaopengfei 阅读(511) 评论(0) 推荐(0)
摘要: 一. 前言 1. 简介 就查询而言,可以简单的分为:单表查询 和 多表查询。 单表查询包括:简单查询、过滤查询、结果排序、分页查询、聚集函数。 多表查询包括:笛卡尔积、外键约束、内连接查询、外链接查询、自连接查询。 2. 数据准备 (1). 用到的表: 产品表(product)。包括:主键id、产品 阅读全文
posted @ 2017-07-15 11:53 Yaopengfei 阅读(1594) 评论(3) 推荐(0)
摘要: 一. MySQL操作 1. 数据库相关操作 (1). 查看有哪些数据库: show databases; (2). 使用指定数据库: use 数据库名称; (3). 查看指定数据库中有哪些表: show tables; (4). 创建指定名称的数据库: create database 数据库名称; 阅读全文
posted @ 2017-07-15 10:00 Yaopengfei 阅读(450) 评论(1) 推荐(0)
摘要: 1. MySQL中的数据库分类 2. MySQL中的存储引擎 MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。 MyI 阅读全文
posted @ 2017-07-11 20:33 Yaopengfei 阅读(463) 评论(0) 推荐(0)
摘要: 一. Linux 和 docker安装 1. Centos8.0 下安装MySQL5.7 (rpm包) 详见: https://www.cnblogs.com/yaopengfei/p/13766324.html 2. Centos Stream 9 下安装MySQL8.4 (压缩包形式) 详见:h 阅读全文
posted @ 2017-07-10 21:32 Yaopengfei 阅读(711) 评论(1) 推荐(1)
摘要: 1. 单例模式的作用 保证多个进程内,(即使多线程访问)该对象的实例只有一个,而且只会被创建一次。 2. 单例模式什么时候用? 该对象的构造函数非常耗时,实例化一次该对象,需要非常长的时间,这样如果每次都去创建,会消耗很多资源。 3. 单例模式的代价 private static Singleton 阅读全文
posted @ 2017-07-08 22:57 Yaopengfei 阅读(438) 评论(0) 推荐(0)
摘要: 1. 简介 严格意义上的说,简单工厂不属于23中设计模式,这里抛砖引玉,引出后面的工厂方法和抽象工厂两种设计模式。 简答工厂违背:单一职责原则、开闭原则、迪米特法则。 2. 核心代码 1 /// <summary> 2 /// 简单工厂类 3 /// </summary> 4 public clas 阅读全文
posted @ 2017-07-08 21:41 Yaopengfei 阅读(449) 评论(0) 推荐(0)
摘要: 1. 背景 在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。 2. 定义 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 3. 解决方案 当软件需要变化时,尽量通过扩 阅读全文
posted @ 2017-07-04 19:42 Yaopengfei 阅读(312) 评论(0) 推荐(0)
摘要: 1. 背景 类与类之间的关系越密切,耦合度越大,当一个类发生变化时,对另一个类的影响也越大。 2. 定义 一个类应该对其它类保持最少的了解。 3. 解决方法 尽量降低类与类之间的耦合。 4. 迪米特法则的核心 低耦合 5.迪米特法则深究 只与直接的朋友通信。 每个对象都会与其他对象有耦合关系,只要两 阅读全文
posted @ 2017-07-04 19:41 Yaopengfei 阅读(884) 评论(0) 推荐(0)
摘要: 1. 背景 类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类B和类D来说不是最小接口,则类B和类D不得不去实现它们不需要的方法。 2. 定义 一个类对另一个类的依赖应该建立在最小的接口上,不应该依赖他不需要的接口。 3. 解决方案 将臃肿的接口I拆分为独立的几个接口,类A和类C分别于 阅读全文
posted @ 2017-07-04 19:40 Yaopengfei 阅读(430) 评论(0) 推荐(0)
摘要: 1. 背景 类A是高层代码,类A直接依赖B,如果要将类A改为还要依赖C,则必须修改类A的代码来实现。在实际场景中,类A是高层,负责业务逻辑,类B和类C是低层模块,负责基本的原子操作,假如修改A,会给程序带来不必要的风险。 2. 定义 高层模块不直接依赖低层模块,二者都应该依赖其抽象(抽象类或接口), 阅读全文
posted @ 2017-07-01 20:54 Yaopengfei 阅读(711) 评论(0) 推荐(0)
摘要: 1. 背景 有一个功能p1,由类A完成,现在需要将功能p1进行扩展,扩展后的功能为p3,p3由原功能p1和新功能p2组成,而新功能p3和p2均由类A的子类B来完成,子类B在完成新功能p2的同时,可能会导致原有的功能p1故障。 2. 定义 所有引用基类的地方能透明的使用其子类对象进行替代。 3. 对应 阅读全文
posted @ 2017-07-01 09:17 Yaopengfei 阅读(679) 评论(0) 推荐(0)
摘要: 1. 背景 类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。 2. 定义 不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 3. 宏观上 类层次上存在单一职责原则,同样方法层次上也存在单一职责 阅读全文
posted @ 2017-07-01 09:16 Yaopengfei 阅读(936) 评论(1) 推荐(0)
摘要: 一. 基本概念 1. 什么是特性? MSDN官方给出的定义时:公共语言运行时允许添加类似关键字的描述声明,叫做特性,它对程序中的元素进行标注,如类型、字段、方法和属性等。Attribute和Microsoft .Net Framework文件的元数据(metadata)保存在一起,可以用来向运行时描 阅读全文
posted @ 2017-06-28 08:37 Yaopengfei 阅读(1772) 评论(0) 推荐(0)
摘要: 1. 线程的异常处理 我们经常会遇到一个场景,开启了多个线程,其中一个线程报错,导致整个程序崩溃。这并不是我们想要的,我需要的结果是,其中一个线程报错,默默的记录下,其它线程正常进行,保证程序整体可以走下来。 解决方案:给函数体加try-catch,只让报错线程异常,其它线程可以正常进行。 运行结果 阅读全文
posted @ 2017-06-25 11:23 Yaopengfei 阅读(422) 评论(8) 推荐(0)
摘要: 1. 方法名前只有async,但是方法中Task实例前没有await关键字,该方法和普通方法没有什么区别,但是会报一个警告。 结果: 2. 用法:方法名前加async,如果方法无返回值,用async Task 代替async void ,await放到Task实例前面,表示执行完Task线程后,方可 阅读全文
posted @ 2017-06-23 20:02 Yaopengfei 阅读(437) 评论(0) 推荐(0)
摘要: 一. Task开启多线程的三种形式 1. 利用TaskFactory下的StartNew方法,向StartNew传递无参数的委托,或者是Action<object>委托。 2. 利用Task.Run()开启多线程,能向其中传递无参数的委托,有参数的可以使用 Task.Run(()=>{ TestTh 阅读全文
posted @ 2017-06-23 20:00 Yaopengfei 阅读(657) 评论(0) 推荐(0)
摘要: 一. Thread多线程 1. 两种使用方式 通过F12查看Thread后,发现有两类构造函数,ParameterizedThreadStart和ThreadStart,其中 ThreadStart:无参无返回值的委托 ParameterizedThreadStart:无返回值,但是有一个objec 阅读全文
posted @ 2017-06-23 19:59 Yaopengfei 阅读(387) 评论(0) 推荐(0)
摘要: 一. BeginInvoke最后两个参数的含义 倒数第二个参数:指该线程执行完毕后的回调函数;倒数第一个参数:可以向回调函数中传递参数。 下面以一段代码说明: 结果: 二. 异步调用的三种书写 在上述代码中,我们发现BeginInvoke中,除了我们介绍的最后两个参数外,还有一个参数,传递进去了na 阅读全文
posted @ 2017-06-20 19:24 Yaopengfei 阅读(579) 评论(0) 推荐(0)
摘要: 一. 综述 经过两个多个周的整理,异步多线程章节终于整理完成,如下图所示,主要从基本概念、委托的异步调用、Thread多线程、ThreadPool多线程、Task、Parallel并行计算、async和await、线程特殊处理、委托赋值的几种形式等九个方面来介绍异步多线程。 二. 基本概念的梳理 1 阅读全文
posted @ 2017-06-17 16:07 Yaopengfei 阅读(427) 评论(0) 推荐(0)
摘要: 一. IO读写 这里主要包括文件的读、写、移动、复制、删除、文件夹的创建、文件夹的删除等常规操作。 注意:这里需要特别注意,对于普通的控制台程序和Web程序,将"相对路径"转换成"绝对路径"的方法不一致。 (1). 在web程序中,可以使用HttpContext.Current.Server.Map 阅读全文
posted @ 2017-06-11 20:49 Yaopengfei 阅读(2350) 评论(1) 推荐(0)
摘要: 一. 泛型委托 所谓的泛型委托,即自定义委托的参数可以用泛型约束,同时内置委托Func和Action本身就是泛型委托。 将上一个章节中的Calculator类中的方法用自定义泛型委托重新实现一下。 1 public class Calculator2 2 { 3 //传统解决方案一:在该类中声明多个 阅读全文
posted @ 2017-06-11 16:18 Yaopengfei 阅读(1401) 评论(0) 推荐(0)
摘要: 一. 委托发展史和基本用法 说起委托,每个人可能都会对他有不同的理解,结合实战中委托的使用,我对其理解是:委托和类一样,是用户的一个自定义类型,委托可以有参数、有返回值,委托的关键字是delegate,委托是方法的抽象,有了委托的存在,使得方法可以作为参数传递给另一个方法,同时调用委托的时候,委托所 阅读全文
posted @ 2017-06-07 21:27 Yaopengfei 阅读(2266) 评论(1) 推荐(2)
摘要: 一. 覆盖/写 1. 关键字:new 2. 含义:子类继承父类中的普通方法,如果在子类中写了一个和父类中完全相同的方法,子类中会报警告(问是否显式的隐藏父类的中的方法),如果在子类中的方法前加上new关键字,则警告消失。 注意: * 虽然可以不使用 new 修饰符来隐藏成员,但将收到编译器警告。 如 阅读全文
posted @ 2017-06-04 11:46 Yaopengfei 阅读(2338) 评论(2) 推荐(0)
摘要: 一. 面向对象思想 1. 面向过程(OP)和面向对象(OO)的区别: (1):面向过程就是排着用最简单的代码一步一步写下去,没有封装,当业务复杂的时候,改动就很麻烦了 (2):面向对象将复杂的业务分离出来几个类,然后将业务封装到类中的方法进行实现,很简洁。 2. 面向对象的三大特征 (1). 封装: 阅读全文
posted @ 2017-06-04 11:45 Yaopengfei 阅读(3734) 评论(2) 推荐(6)
摘要: 一. Lambda和linq入门 lambda表达式又叫点标记,linq表达式又叫查询表达式,下面有三个简单的案例说明一下二者的基本用法,详细用法会在后续章节中更新。 二. 事例 1. 准备学生信息。 2. 查找年龄小于30岁的学生 lambda代码如下: linq代码如下: 3. 部分字段查找测试 阅读全文
posted @ 2017-06-03 21:30 Yaopengfei 阅读(438) 评论(0) 推荐(0)
摘要: 一. 匿名类 1. 传统的方式给类赋值,需要先建一个实体类→实例化→赋值,步骤很繁琐,在.Net 3.0时代,微软引入匿名类的概念,简化了代码编写,提高了开发效率。 匿名类的声明语法: var obj=new {字段赋值}; 代码如下: 运行结果如下: 2. 匿名类的属性都是只读的 3. 匿名类的属 阅读全文
posted @ 2017-05-30 18:36 Yaopengfei 阅读(1274) 评论(0) 推荐(0)
摘要: 一. 加载dll,读取相关信息 1. 加载程序集的三种方式 调用Assembly类下的三个方法:Load、LoadFile、LoadFrom。 1 //1.1 Load方法:动态默认加载当前路径下的(bin)下的dll文件,不需要后缀 2 Assembly assembly = Assembly.L 阅读全文
posted @ 2017-05-22 20:42 Yaopengfei 阅读(2795) 评论(0) 推荐(1)