摘要:
mysql中的explain命令可以查看sql语句是否使用了索引,用了什么索引,有没有全表扫描,帮助我们优化查询语句 查看索引 SHOW INDEX FROM 表名 EXPLAIN explain出来的信息有10列,主要介绍type、key、Extra这几个字段 id select 查询的序列号,表 阅读全文
摘要:
介绍 索引是帮助 MySQL 高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引。 优点 大大提高了查询速度,降低数据库的IO成本 通过索引列对数据进行排序,降低数 阅读全文
摘要:
互斥锁 一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫"互斥锁"(Mutual exclusion,缩写 Mutex)。实现了互斥锁对象有:Monitor,Mutex,SpinLock 信号量 还有些房间,可以同时容纳n个人,比如 阅读全文
摘要:
Hashtable、Dictionary:使用方式类似,都是存储键值对 Hashtable: Hashtable存储键值对,key、value都是object类型 Hashtable是线程安全的,线程安全实现方式:Hashtable类中有个类SyncHashtable ,封装Hashtable实例, 阅读全文
摘要:
通过分析源码可以更好理解List<T>的工作方式,帮助我们写出更稳定的代码。 List<T>源码地址: https://github.com/dotnet/corefx/blob/master/src/System.Collections/src/System/Collections/Generic 阅读全文
摘要:
不使用表达式树,使用强类型生成where子句,好处是性能高,相比表达式树生成的sql,10倍+ 目前只支持生成where条件、查询语句,后期会增加生成Update SQL 支持生成Sqlserver、Mysql语句 where子句支持相等、比较大小、Between、Like、In操作 sql语句支持 阅读全文
摘要:
如果直接使用如下方式扩展系统函数,常常会导致冲突,有可能和系统函数重名或第三方引用的js也扩展了此函数 Array.prototype.first=function(){}; 安全扩展系统函数: var ArrayEx = (function(){ function ArrayEx(array){ 阅读全文
摘要:
目的: 将多个资源文件(css、js)捆绑在一个文件中 压缩文件,去除空格换行,减小文件体积 步骤: 1、在NuGet下载 BuildBundlerMinifier 包 2、在项目根目录创建配置文件,如下: [ { "outputFileName": "wwwroot/js/info.min.js" 阅读全文
摘要:
一. 前言 1.关于JWT的Token过期问题,到底设置多久过期? (1).有的人设置过期时间很长,比如一个月,甚至更长,等到过期了退回登录页面,重新登录重新获取token,期间登录的时候也是重新获取token,然后过期时间又重置为了1个月。这样一旦token被人截取,就可能被人长期使用,如果你想禁 阅读全文
摘要:
简介 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的,所以存储引擎也可以被称为表引擎。 MySQL默认存储引擎是InnoDB。 相关操作 -- 查询建表语句 show create table account; -- 建表时指定存储引擎 CREATE 阅读全文
摘要:
介绍 读写锁的概念很简单,允许多个线程同时获取读锁,但同一时间只允许一个线程获得写锁,因此也称作共享-独占锁。在C#中,推荐使用ReaderWriterLockSlim类来完成读写锁的功能。 某些场合下,对一个对象的读取次数远远大于修改次数,如果只是简单的用lock方式加锁,则会影响读取的效率。而如 阅读全文
摘要:
自旋锁(spinlock) 是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 什么情况下使用自旋锁 自旋锁非常有助于避免阻塞,但是如果预期有大量阻塞,由于旋转过多,您可能不应该使用自旋锁。当锁是细粒度的并且数 阅读全文
摘要:
KestrelServer Kestrel 是一个跨平台的适用于 Kestrel。 Kestrel 是 Web 服务器,默认包括在 ASP.NET Core 项目模板中。 如何使用 可以单独使用 Kestrel,也可以将其与反向代理服务器(如 IIS、Nginx 或 Apache)结合使用。 反向代 阅读全文
摘要:
引言 使用HTTP(超文本传输)协议访问互联网上的数据是没有经过加密的。也就是说,任何人都可以通过适当的工具拦截或者监听到在网络上传输的数据流。但是有时候,我们需要在网络上传输一些安全性或者私秘性的数据,譬如:包含信用卡及商品信息的电子订单。这个时候,如果仍然使用HTTP协议,势必会面临非常大的风险 阅读全文
摘要:
单体架构 应用程序就是一个项目,在一个进程中运行 单体架构的优点是开发简单、集中管理、没有分布式损耗 微服务架构 微服务架构是一种架构风格,旨在通过将单体程序的功能分解到各个离散的服务中心以实现对解决方案的解耦 DDD是一个很好的应用于微服务架构的方法论。 微服务架构特点: 一组小的服务 独立进程、 阅读全文
摘要:
1 阅读全文
摘要:
ConfigureServices方法中添加: public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(CookieAuthenticationDefaults.Authentic 阅读全文
摘要:
实现IApplicationModelConvention接口: public class NameSpaceVersionRoutingConvention:IApplicationModelConvention { private readonly string apiPrefix; priva 阅读全文
摘要:
定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 类图 应用场景 避免产生多个对象消耗过多的资源(特别是一个对象需要频繁的创建和销毁时); 提供一个全局访问点,常常被用来管理系统中共享的资源(作为一个Manager)。 实现方式 延迟初始化(懒汉模式) 适用于单线程应用程序 阅读全文
摘要:
volatile特点: 保证可见性,可见性是指当一个线程修改了共享变量的值,其他线程可以立即得知 保证有序性? 不保证原子性(需要使用悲观锁or乐观锁) 线程栈: 每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值信息。当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存 阅读全文
摘要:
实现线程的本地存储,也就是线程内可见。这些数据都是存放在线程环境块中,是线程的空间开销 有以下几种方式 线程数据槽 已过时,建议使用ThreadStaticAttribute static void Main(string[] args) { var slot = Thread.AllocateDa 阅读全文
摘要:
BenchmarkDotNet 是一个强大的. NET 库, 可用于性能测试,Benchmark 可以精准简单的测试应用程序性能,它为每个测试方法生成一个独立的项目, 执行此项目的多个启动, 并运行测试方法,以保证测试的精准性。 时间可以精确到微秒(us)、纳秒(ns),还可以测试内存使用情况 要想 阅读全文
摘要:
Refit可以进行强类型的客户端调用 Refit 是一个类型安全的 REST 开源库,是一套基于 RESTful 架构的 .NET 客户端实现,内部使用 HttpClient 类封装,可通过 Refit 更加简单安全地访问 Web API 接口,要使用 Refit 框架,只需要在项目中通过 NuGe 阅读全文
摘要:
简介 Parallel类是对线程的抽象,提供数据与任务的并行性。 在同步状态下简化Task的使用,也就是使用For、Foreach、Invoke方法时,调用者线程是阻塞的。 并行方法 Parallel对象提供了3个静态方法来实现 数据和任务的并行 Parallel.For Parallel.ForE 阅读全文
摘要:
重要对象 JwtSecurityToken 代表一个jwt token,可以直接用此对象生成token字符串,也可以使用token字符串创建此对象 SecurityToken JwtSecurityToken的基类,包含基础数据 JwtSecurityTokenHandler 创建、校验token, 阅读全文
摘要:
使用位类型枚举,可以组合枚举值,如果需要多个枚举值,可以用位枚举 枚举添加[Flags],标识位枚举 案例: [Flags] enum Styles { white=1, yellow=2, grean=4, blue=8, gray=16, orange=32, pink=64, red=128, 阅读全文
摘要:
什么是状态模式 状态模式是一种行为型设计模式,它主要用来解决对象在不同状态下的行为问题。在状态模式中,一个对象的内部状态改变时,它的行为也会随之改变。实现状态模式的关键是将对象的不同状态抽象成独立的类,然后将这些状态类与原有对象关联起来组成一个状态机。 状态模式应用场景 当一个对象的行为取决于内部状 阅读全文
摘要:
实体 public class SlaveConfiguration { public string ConnectionString { get; set; } public int Weight { get; set; } public int Attach { get; set; } } 轮巡 阅读全文
摘要:
性能接近硬编码,推荐使用 /// <summary> /// 高性能对象映射 /// </summary> /// <typeparam name="TSource"></typeparam> /// <typeparam name="TTarget"></typeparam> public sta 阅读全文
摘要:
自己写了一个缓存代理,使用代理模式,支持指定函数、支持按参数缓存,原创 后续会支持缓存异步数据 CacheProxy: function CacheProxy(obj,proxyMethods){ var _cache={}; var _getType=Object.prototype.toStri 阅读全文
摘要:
定义 策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换 个人理解类似委托的作用,将算法通过客户端传入,起到订制的作用 Demo 客户端: IActive active = new HighActive(); decimal payPrice = new ActiveExecut 阅读全文
摘要:
概述 将一个复杂对象的构建与其表示分离,将一个复杂对象的构建过程抽象出来。 当构造函数参数有多个,且这些参数可选,考虑使用建造者模式。因为它的构建过程比较复杂, 建造者模式与工厂模式的区别:两者都是用来创建对象,封装复杂创建过程,但是建造者模式可以让客户端参与建造过程 案例: 这是我在项目中应用建造 阅读全文
摘要:
定义 模板方法定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板方法是一种代码复用的基本技术,在类库中尤为重要,因为他们提取了类库中的公共行为。模板方法导致一种反向的控制结构,这种结构就是传说中的“好莱坞法则”,即“ 阅读全文
摘要:
ajax二次封装 var _ajax = function (opt) { var defaultOption = { type: "POST", data: { "key": _const.TOKEN }, dataType: 'JSON', cache: false, error: functi 阅读全文
摘要:
js中只有函数有作用域,所以用函数模拟一个命名空间 function CartNamespace(){ function LoginBox(){/*登录弹窗*/ this.show=function(){}; } function ShopCartBusiness(){/*购物车业务*/ var _ 阅读全文
摘要:
本篇是我学习反射的一个应用小场景而做的学习笔记,主要是一个小的总结 使用技术:泛型、反射、表达式树... 客户端调用: static void Main(string[] args) { var connection = new SqlConnection("Data Source=.;User I 阅读全文
摘要:
公共的发布订阅组件,不需要再在组件中写发布订阅相关逻辑,用于模块间解耦,支持排序、传参,原创~ EventContainer:发布-订阅公共组件 Array.prototype.sort = function (fn) {//数组排序 var temp; fn = fn || function (a 阅读全文
摘要:
缓存穿透 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。 解决方案: 接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截; 从缓存取不到的数据,在数据库中也没有 阅读全文
摘要:
正文 在开发AspNet Core应用的时候,我们经常会为该应用公布一个特殊的检测接口出来。该接口的目的很简单,告诉外界程序当前程序现在是可以访问或者不能访问的,便于外界做出相应的操作,比如监控报警,页面通知用户稍作等待等。 在AspNet Core 2.2 之前,如果我们要实现一个这样的检测接口, 阅读全文
摘要:
场景 一个对象A,希望它的某些状态在发生改变时通知到B(或C、D)。常见的做法是在A中定义一个事件(或委托),当状态改变时A去触发这个事件。而B直接订阅这个事件 这种设计有点问题,B由于要订阅A的事件,所以B得完全引用A,其实有时候没必要,因为我只关心A的状态变化而已 解决方案就是加个中间层Chan 阅读全文