FatTiger

FatTiger
Gitlab 无法使用HTTPS进行克隆:The requested URL returned error: 502

Gitlab

Gitlab 无法使用HTTPS进行克隆:The requested URL returned error: 502

问题 使用Gitlab-Runner进行Clone存储库时提示: fatal: unable to access 'http://gitlab-ci-token:xxxxxx@gitlab_domain/project/repo.git/': The requested URL returned error: 502 并且无法使用git clone https://domain/project.git,也返回相同错误。 TL;DR 将Nginx下Gitlab站点配置中passenger_user和passenger_group的用户和用户组设置为具有/var/opt/gitlab/gitlab-workhorse/socket权限的用户和用户组,或者将 /var/opt/gitlab/gitlab-workhorse/socket赋予正确的所有者和访问权限。 原因 我是通过外置Nginx对Gitlab进行反向代理时才出现的问题。查看Gitlab访问日志: unix://var/

By FatTiger
ASP.NET Core 中Session的分布式存储

.NET

ASP.NET Core 中Session的分布式存储

前言 在ASP.NET Core中的Session该如何存储?本文介绍了Session信息在单个应用实例和多个应用实例中的不同存储方式,以及ASP.NET Core在Session数据安全方面做的一些努力。 TL;DR 在ASP.NET Core中使用分布式缓存存储会话时,仅仅将Session进行分布式存储还不够,由于ASP.NET Core的数据安全保护机制,还需要将Data Protection所使用的加密密钥也进行分布式存储,这样才能正确解密Cookies: public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { //将数据保护的秘

By FatTiger
ASP.NET Core 3.0 Razor 修改页面刷新无效

.NET

ASP.NET Core 3.0 Razor 修改页面刷新无效

问题 在ASP.NET Core 3.0中,对Razor页面修改刷新无法展示修改后的内容。 原因 这是由于在ASP.NET Core 3.0中,对Razor视图和Razor页面的运行时编译的支持被移到了单独的程序包中,没有默认启用Razor运行时编译。 解决方案 * 安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 在Startup中启用Razor运行时编译: public class Startup { public Startup(IConfiguration configuration, IWebHostEnvironment env) { Configuration = configuration; Env = env; } public IWebHostEnvironment Env { get; set; } public IConfiguration Configuration { get; } public voi

By FatTiger
单精度浮点数(Float)与双精度浮点数(Double)

单精度浮点数(Float)与双精度浮点数(Double)

前言 对于十进制的整数使用二进制表示很简单,但是对于十进制小数如何使用二进制进行存储?十进制的小数又何如使用二进制小数表示?此文章描述了如何将十进制小数转换为二进制小数以及浮点数再内存中时如何进行存储。 二进制小数 在计算机中,无论什么数据,最终存储都为二进制,对于整数部分很容易表示,但是对于非整数则比较困难。例如,十进制数0.125可表示为二进制0.001,怎么得来的?简单的计算可以用0.125不断乘2,结果小于1将二进制位记为0,结果大于1时将二进制位记为1: 0.125 * 2 = 0.25 二进制位记作 0 0.25 * 2 = 0.5 二进制位记作 0 0.5 * 2 = 1 二进制位记作 1 所以得出结果为0.001 另外可以把可以把十进制数0.125看做1/2/2/2 = 1*2^-3,

By FatTiger
char vs varchar vs nvarchar

MSSQL Server

char vs varchar vs nvarchar

MSSQL Server char(n) vs varchar(n) * n为字节单位而非字符单位,这是有区别的,在单字节编码字符集存储时,n的大小即为字符长度,当所存储的字符无法使用单字节编码字符集表示时则会采用双字节字符集存储,n的大小则是字符的2倍 * char会存储固定字节长度的字符,如果定义char(4)则插入'ab'会被存储为'ab ',超出字节长度的字符串会被截断。实际存储大小总是4 bytes,另外插入'ab '后查询出的结果是会去除末尾空格为'ab' * varchar存储可变字节长度的字符,如果定义varchar(4)则插入'ab'即存储为'ab'而不会向char一样使用空格填充,在检索时也不会去除末尾空格。然而使用varchar(n)

By FatTiger

.NET

ThreadStaticAttribute vs ThreadLocal vs AsyncLocal

前言 在.NET程序里,使用static关键字修饰的变量存在于整个程序的生命周期,这使得它可以被多个线程同时访问,这种方式在某些情况下很好用,但是可能需要加锁来处理线程安全问题,在另一些情况下可能只想在线程内共享变量,多个线程之间的变量互相隔离,这就需要使用ThreadStaticAttribute丶ThreadLocal<T>和AsyncLocal<T> TL;DR 实现方式 跨线程 流向辅助线程 static ✔️ ✔️ AsyncLocal ❌ ✔️ ThreadLocal ❌ ❌ ThreadStaticAttribute ❌ ❌ 流向辅助线程 发生线程上下文切换时,能够保存数据并流向到下一个线程,注意,这是单向数据流,辅助线程上更改数据,并不会影响主线程数据(但是你可以通过引用类型来实现主线程数据的同时更改)。 * 线程上下文切换 * new Thread() * new Task() * Task.Run() * ThreadPool.QueueUserWorkItem() * await

By FatTiger
ASP.NET Core中I/O阻塞与线程池爬山

.NET

ASP.NET Core中I/O阻塞与线程池爬山

线程池爬山算法 * CLR的线程池具有最小线程数和最大线程数的限制,默认最小线程数为CPU的逻辑处理器数量,当同时使用的线程数超过最小线程数后,它以适中的速率(例如每秒1或2个)创建新的线程。这意味着当你的线程数超过最小线程数后,超出部分的线程创建请求则需要进行排队,且越后面的线程等待时间越长。 * CLR设计默认线程池数量与CPU逻辑处理器数量相同是有原因的,两个好处: * 线程数过多的情况下,CPU需要在多个线程间进行切换,这会导致额外的线程切换开销,线程数越多则CPU大部分时间都花在了切换线程上下文上。 * 如果某个方法是阻塞的,那么大量的请求进来会导致线程无限制的被创建,会瞬间消耗大量的内存。 Practice * 我们可以简单的创建一个NET Core Console程序进行验证 static void Main(string[] args) { var processThreads = 0; while (true) { Task.Factory.StartNew(() => {

By FatTiger
在CentOS 8 中使用 Docker 无法访问网络

Linux

在CentOS 8 中使用 Docker 无法访问网络

在CentOS 8上使用Docker时,Docker Build无法还原依赖,错误提示failure resolving xxxxxx,看起来像DNS失效无法还原出域名映射的地址。联想到在CentOS 8上安装Docker时也因为网络问题无法安装,怀疑是firewalld的原因,于是systemctl start firewalld.service停止firewalld,再service docker restart重启Docker服务后,果然就可以还原依赖了。但是机器没有防火墙简直就是裸奔,搜索后发现用firewall-cmd --zone=public --add-masquerade --permanent命令使masquerade允许通过firewall,再firewall-cmd --reload && service docker restart后,一切恢复正常. Quote * How to Install Docker on CentOS 8 * No network connectivity to/from Docker CE container on

By FatTiger

.NET Framework

Globalization and localization in ASP.NET Framework

Globalization and Localization Globalization指将应用程序设计为支持多个语言和文化的过程,Localization则意为将已经Globalization的应用程序设置为特定区域输出的过程。例如将应用程序的输出字符和UI都使用资源文件进行配置,可输出多个不同语言则应用程序已经准备好全球化过程,而根据浏览器语言或者Cookie设置获取特定的区域语言则称之为本地化过程。 Best Practices 新建ASP.NET Framework应用程序后,新建App_GlobalResources文件夹并在下面新建三个资源文件: 其中,Resource.resx为基准资源文件,Resource.en-US则为en-US区域对应的资源文件,Resource.zh-CN则为zh-CN区域对应的资源文件,应当说明的是,所有资源文件的字符串Key应当与Resource.resx资源文件中的Key相一致,Value则为对应区域的本地化字符串。 接下来在Resource.resx中新增一个SYSTEM_NAME用来表示当前系统信息,相应的Resource.e

By FatTiger