2021 01-21

容器编排系统K8s之包管理器Helm基础使用

  前文我们了解了k8s上的hpa资源的使用,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14293237.html;今天我们来聊一下k8s包管理器helm的相关话题;   helm是什么?   如果我们把k8s的资源清单类比成centos上的rpm包,那么helm的作用就如同yum;简单讲helm就是类似yum这样的包管理器,它能够让我们在k8s上部署应用变得简单,我们需要部署某些应用到k8s上,我们直接使用helm就可以完成一键部署;有了helm工

2021 01-21

浅谈踢人下线的设计思路!(附代码实现方案)

前言 前两天写了一篇文章,主要讲了下java中如何实现踢人下线,原文链接:java中如何踢人下线?封禁某个账号后使其会话立即掉线! 本来只是简单阐述一下踢人下线的业务场景和实现方案,没想到引出那么多大佬把小弟喷的睁不开眼睛,为了避免大家继续喷我,特再写下此篇文章,彻底讲清楚各种场景下踢人下线的设计思路,如有不足之处还请各位大佬轻喷! 好了废话不多说,正文开始 正文 如果把踢人下线比喻成拆房子,那么在学会拆房之前,我们必须要了解这座房子是怎么盖起来的,不同的盖法对应不同的拆法,不能混为一谈 对于目

2021 01-21

三种梯度下降算法的区别(BGD, SGD, MBGD)

前言 我们在训练网络的时候经常会设置batch_size,这个batch_size究竟是做什么用的,一万张图的数据集,应该设置为多大呢,设置为1、10、100或者是10000究竟有什么区别呢? #手写数字识别网络训练方法 network.fit( train_images, train_labels, epochs=5, batch_size=128) 批量梯度下降(BatchGradientDescent,BGD) 梯度下降算法一般用来最小化损失函数:把原始的数据网络喂给网络,网络会进行一定

2021 01-21

【JAVA并发第三篇】线程间通信

线程间的通信 JVM在运行时会将自己管理的内存区域,划分为不同的数据区,称为运行时数据区。每个线程都有自己私有的内存空间,如下图示: Java线程按照自己虚拟机栈中的方法代码一步一步的执行下去,在这一过程中不可避免的会使用到线程共享的内存区域堆或方法区。为了防止多个线程在同一时刻访问同一个内存地址,需要互相告知自己的状态以避免资源争夺。 线程的通信方式主要分为三种方式:①共享内存②消息传递③管道流 共享内存:线程之间通过对共享内存的读-写来实现隐式通信。Java中的具体实现是:volatile

2021 01-21

C# 合并和拆分PDF文件

一、合并和拆分PDF文件的方式    PDF文件使用了工业标准的压缩算法,易于传输与储存。它还是页独立的,一个PDF文件包含一个或多个“页“,可以单独处理各页,特别适合多处理器系统的工作。PDF文件结构主要可以分为四个部分:首部、文件体、交叉引用表、尾部。PDF操作类库非常多,如下图所示,常用的类库有:Spire.Pdf、iTextSharp。 二、使用Spire.Pdf合并和拆分PDF文件    使用Nuget添加Spire.Pdf

2021 01-21

WeihanLi.Npoi 1.14.0 Release Notes

WeihanLi.Npoi1.14.0ReleaseNotes Intro 周末更新了一下项目,开始使用可空引用类型,并且移除了net45的支持,仅支持netstandard2.0 Changes Removenet45Support 基础库打算移除net45的支持,因为很多基础的API,在netstandard2.0中是有的,但是net45是没有的,所以很多时候需要为net45专门写一些代码来实现类似的功能,而且随着.NETCore的开发者越来越多,.NETCore越来越成熟,所以打算抛弃ne

2021 01-20

MySQL锁机制

一、概述 1,锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制 在数据库中,除传统的计算机资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源 如何保证数据并发访问的一致性、有效性是所有数据库必须解決的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。 2,锁的分类 a)数据操作的类型 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响 写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁 b)数据操作的颗粒度 行

2021 01-20

避免用using包装DbContext【翻译】

  EF和EFCore的DbContext类实现IDisposable接口。因此,很多最佳编程实践中都建议你将它们放在一个using()块中。不幸的是,至少在Web应用程序中,这样做通常不是一个好主意。  我与许多从.NETFramework迁移到.NETCore和.NET5的客户一起工作,其中一些客户在旧版应用程序中并没有使用依赖项注入,或者没有一直使用它。结果导致他们的DbContext类有大量的实例。这样做有很多问题,其中最重要的是它导致了紧耦合。&

2021 01-20

vagrant up报错【io.rb:32:in `encode': "\x95" followed by "\"" on GBK (Encoding::InvalidByteSequenceError)】

vagrantup报错【io.rb:32:in`encode':"\x95"followedby"""onGBK(Encoding::InvalidByteSequenceError)】 这几天在学习虚拟机的相关知识,在使用VirtualBox和Vagrant创建虚拟机时踩了一些坑,在网上搜索到的解决方案虽然给了我一些帮助,但是没有完全解决问题。现在就将我的问题记录下来,希望给新入坑的人一些帮助。 第一步,安装VirtualBox和Vagrant。没啥问题,顺利进行(注意:安装VirtualBo

2021 01-20

PHP设计模式之装饰器模式(Decorator)

PHP设计模式之装饰器模式(Decorator) 装饰器模式 装饰器模式允许我们给一个类添加新的功能,而不改变其原有的结构。这种类型的类属于结构类,它是作为现有的类的一个包装 装饰器模式的应用场景 当我们要画一个圆形时候,我们创建一个圆形类,正方形又创建一个类,椭圆、长方形。。。。,而又当我们要给这些图形上色的时候,如果我们使用继承的方法,那我们的项目中类文件将随指数级增长。这个时候要是我们使用装饰器类,我们就可以巧妙的使用聚合代替继承解决如此多类文件的问题。而且还可以使代码更加灵活,代码重