- 博客(79)
- 资源 (6)
- 收藏
- 关注
原创 使用Radzen Blazor组件库开发的基于ABP框架炫酷UI主题
使用Radzon Blazor开发的基于ABP框架的UI样式主题,已经提供了基本的功能:登录(支持多租户)、角色管理、用户管理、权限分配、租户管理、多语言切换、免费主题样式切换、侧边栏菜单等
2024-10-19 11:40:56
1227
原创 使用GitLab自带的CI/CD功能在K8S集群里部署项目(四)
本地搭建K8S集群环境其实没那么复杂,大家可以去我主页找相关教程学习一下,多动手实验。
2024-05-10 21:35:26
1899
原创 使用GitLab自带的CI/CD功能在远程服务器部署项目(三)
在.gitlab-ci.yml文件中我们通过ssh登录到应用服务器,然后使用docker命令进行部署,当然也可以使用docker compose命令部署,甚至可以使用k8s来部署,以后有机会将继续介绍如何通过k8s来部署。(3)编写.gitlab-ci.yml文件,引用全局的CI/CD变量,将eshop.webapi镜像推送到阿里云私人镜像仓库,ssh到应用服务器从阿里云私人镜像仓库下载镜像并部署该镜像容器。在GitLab服务器上执行以下命令,会在/root/.shh/目录下生成两个文件
2024-05-10 21:23:59
2092
原创 使用GitLab自带的CI/CD功能在本地部署.Net8项目(二)
对于Runner的创建、注册以及配置都比较简单,多个项目可以共享同一个Runner,也可以创建一个全局的Runner供所有项目使用。.gitlab-ci.yml 文件是 GitLab CI/CD 的核心配置文件,用于定义项目的持续集成和持续交付流程。它使用 YAML 格式,包含了一系列的指令和参数,用于描述构建、测试、部署等任务的执行方式和条件
2024-05-09 21:56:42
1214
1
原创 通过Docker Compose部署GitLab和GitLab Runner(一)
使用 Docker Compose 来快速部署 GitLab 和 GitLab Runner。Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,它通过一个 YAML 文件来配置服务的运行方式。
2024-05-09 21:44:03
1169
原创 并发原理—如何保证多条指令的原子性(二)
通过引入一个标志位,让CPU去争抢设置标志位。这些CPU通过原子性指令来设置标志位,由于是原子操作,那么只有一个CPU能设置成功,也即只有设置标志位成功的线程可以执行方法代码,设置失败的其他线程则要排队进入阻塞队列。
2022-09-26 08:17:10
286
2
原创 并发原理 — CPU原子性指令(一)
只有CPU提供了原子性指令,上层应用才能够根据这些指令来设计出指令段与指令段之间的原子性操作。这是一种自底向上的设计,没有CPU最底层的支持,上层应用根本就无法解决并发问题。应用程序使用自身语言提供的并发操作函数库,比如java的juc包,而这些函数库又会封装OS的系统调用或者使用glibc库,OS的系统调用最终会使用CPU提供的原子性指令。
2022-09-21 08:21:31
1390
原创 聊聊计算机之Intel CPU的MESI协议
on-chip:每个CPU有好几个物理核,它们分布在CPU上,称为on-chipon-chip first cache:每个核内的一级缓存on chip branch table:每个核内都有一个分支预测表chip没有缓存的时候,直接读写内存数据,不存在数据不一致的情况i486处理器增加了L1缓存,往L1写入的同时,会写入内存,即“双写”,称为Write-through(直写)技术奔腾处理器增加了MESI技术。core1把数据写入了自己的L1缓存中,还未写入内存。此时core2读取此数据发现数据状态无效,那
2022-09-18 17:33:04
550
原创 k8s实战之MySQL单实例部署
前面我们学习了k8s入门系列文章,了解了k8s的一些基础概念以及怎么使用。本篇文章将进行一个小小的实战,使用k8s来部署单机版的mysql数据库,基本涵盖到前面讲到的Namespace、Pod、Deployment、Service、PV、PVC、Secret等资源对象。我们先画一张结构图来表示整个部署的逻辑流程,如图所示:一、一步一步来规划1.创建namespace,把mysql部署在单独的名称空间中名称空间的用法可以参考文章:k8s入门之namespace(三)kubectl create namespa
2022-05-08 18:37:34
8386
3
原创 k8s入门之Secret(十)
Secret与ConfigMap都是用来存储配置信息的,不同之处在于ConfigMap是明文存储的,而Secret用来保存敏感信息,如:密码、OAuth令牌,ssh key等等。Secret常用有三种类型:Opaque:使用base64编码格式存储密码等信息,加密性很弱。kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息(仓库地址、登录用户名密码)。kubernetes.io/service-account-token:用来创建服务账号(Ser
2022-04-21 22:05:19
936
原创 k8s入门之ConfigMap(九)
ConfigMap是k8s的配置管理工具,通常用来保存明文的配置信息,以key-value形式传递配置。一、使用命令创建ConfigMap对象1.通过--from-literal参数创建kubectl create configmap mycm1 --from-literal=appid=order-app --from-literal=appsecret=dfdg12342(1)查看创建结果kubectl get secret(2)使用describe命令查看详情kubectl describe secr
2022-04-18 21:50:48
458
原创 k8s入门之PV和PVC(八)
某些应用是要持久化数据的,如果直接持久化在pod所在节点,当pod因为某种原因重建或被调度另外一台节点,是无法访问到之前持久化的数据,所以需要一个公共存储数据的地方,无论pod删除重建或重新调度到其他节点都能访问原来的数据,使用nfs就可以到达此目的。一、安装nfs1.在k8sMaster主节点上安装nfs服务端apt install -y nfs-kernel-serversystemctl start nfs-serversystemctl enable nfs-serversystemctl s
2022-04-16 07:43:17
2034
原创 k8s入门之Ingress(七)
Ingress 的功能其实很容易理解:所谓 Ingress,就是 Service 的“Service”,代理不同后端 Service 而设置的负载均衡服务。一、安装ingress1.查找ingress安装文件从github上查看ingress对应k8s版本的deploy文件,链接地址是:https://github.com/kubernetes/ingress-nginx/tree/main/deploy/static/provider/baremetal2.点击Raw按钮可得到该文件的url链接https
2022-04-14 18:25:34
3903
原创 k8s入门之Service(六)
将一组pod公开为网络服务,通过service代理,可以实现负载均衡一、ClusterIP此方式只能在集群内访问1.使用命令暴露已存在的pod(1)继续使用前面章节的案例,查看名称为nginx的deploy下的podkubectl get pod -n dev -owide进入每个pod容器,更改index.html内容kubectl exec nginx-6799fc88d8-2rf2c -it /bin/bash -n devcd /usr/share/nginx/html/rm -rf index
2022-04-14 07:45:54
3708
原创 k8s入门之Deployment(五)
Deployment控制器通常用来部署无状态的应用,这样可以在任意的节点上扩容或者删除,而不用考虑数据的问题,它可以管理pod对象。一、多副本1.使用命令行方式创建Deployment在dev名称空间下创建3个副本的nginx podkubectl create deployment nginx --image=nginx --replicas=3 -n dev监控创建进度kubectl get deploy -n dev -w可以看到副本可用数量从0变到32.查看Deployment的描述kubectl
2022-04-13 23:28:45
4420
原创 k8s入门之pod(四)
pod是k8s项目中的最小编排单位,它是运行中的一组(一个或多个)容器,这些容器共享存储、网络、调度等资源,pod是一个逻辑概念,同一个名称空间下不同pod可以通过ip互相访问。一、通过命令行方式管理1.创建在dev名称空间下创建名称为mynginx的pod,如果不指定-n参数,则默认创建在default名称空间下kubectl run mynginx --image=nginx -n dev2.查看dev名称空间下所有pod的简单信息kubectl get pod -n dev创建pod需要时间,尤其是节
2022-04-13 18:25:38
4168
1
原创 k8s入门之namespace(三)
namespace的作用就是用来隔离资源,将同一集群中的资源划分为相互隔离的组。同一名称空间内的资源名称要唯一,但不同名称空间时没有这个要求。有些k8s资源对象与名称空间没有关系,例如 StorageClass、Node、PersistentVolume 等。一、使用命令行管理1.创建kubectl create ns test2.获取kubectl get ns3.删除该名称空间下所有的资源都将被一起删除kubectl delete ns test二、使用yaml文件管理1.创建新建一个yaml文件vi
2022-04-13 07:02:49
810
原创 k8s入门之集群搭建(二)
一、准备三台节点从上篇文章k8s入门之基础环境准备(一)安装的Ubuntu虚拟机克隆出三台虚拟机,如图所示启动这三台虚拟机节点,分别做如下配置虚拟机名称IPHostName k8sMaster 192.168.59.110k8sMaster k8sWorker01 192.168.59.111k8sWorker01 k8sWorker02 192.168.59.112k8sWorker02 二、操作系统相关参数设置注意:三台节点都要执行以
2022-04-12 22:34:52
1091
2
原创 k8s入门之基础环境准备(一)
一、在虚拟机中安装Ubuntu20.04.4系统1.下载Ubuntu20.04.4服务器版本系统下载链接地址如下:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.042.在Vmware Workstation中安装该版本的系统(安装步骤略),注意虚拟机网络使用NAT模式二、配置Ubuntu系统1.设置root密码sudo passwd2.设置静态IP(1)查看网卡设备号ip a(2)更改网络配置文件首先查看网关IP地址:通过VMwa
2022-04-11 20:49:24
900
原创 DropDownList无刷新级联
1.两级联:在一个下拉列边框(ID:ddlBuildName)中选择楼栋名称,在另一个下拉列表框(ID:ddlRoomNo)中无刷新的自动加载该栋楼的房间列表。其中ddlBuildName的数据是通过强类型DataSet绑定的。ddlRoomNo的数据是根据ddlBuildName的选值通过JQuery无刷新加载的。楼栋名称:
2010-11-22 00:09:00
2937
1
原创 AJAX实现无刷新分页
<br />1.新建T_PingLun表的强类型DataSet,在其中添加两个方法,一个是得到评论的总条数SelectCount,SQL语句如下:<br />SELECT COUNT(*) FROM T_PingLun <br /> <br />另一个是根据客户端传过来的当前页码数来选择第startRowIndex条到第endRowIndex条评论的方法GetPageData,具体SQL语句如下:<br /> <br />select * from( SELECT Id, Comment, Cre
2010-11-18 18:42:00
492
原创 高效分页
<br />1.在强类型DataSet中增加两个方法:<br />a.计算数据库中记录的总数目,方法名为QueryCOunt():SELECT COUNT(*) FROM T_News<br />b.取第n条到第m条的数据,要有两个参数:在DataSourceObject的属性中取<br />MaximumRowsParameterName的值maximumRows和StartRowIndexParameterName的值startRowIndex。<br />把此方法命名为GetPagedData():<
2010-11-12 00:34:00
421
原创 关于图片上传
<br />案例:产品展示页面,可以新增产品和编辑产品:<br />1.在apsx页面放一个<img ...>控件,把它的src属性设为<br />src='<%#ResolveClientUrl("~/upload/images/"+Eval("PicPath")) %>',其中~/upload/images/为图片上传到的文件夹,然后需要把"~/upload/images/"+Eval("PicPath")转换为客户端的路径<br />2.再在<img ...>控件后放一个上传文件的控件<br /><a
2010-11-12 00:29:00
340
原创 无刷新实现不同货币值之间的转换
1.通过创建XMLHTTP对象,向服务器发出一个请求并得到服务器返回的数据,这样页面就不会刷新了。首先在服务器端创建一个货币转换程序(一般处理程序ashx):context.Response.ContentType = "text/plain"; //amount:人民币值 int amount = Convert.ToInt32(context.Request["amount"]); string moneytype = con
2010-11-12 00:23:00
605
原创 ListView中的bug
问题解决了,原来是ListView中的Bug,我用的是VS2008。1.当我没有注释掉以下代码时:AmountTextBox.Attributes["onfocus"] = "calcAmount('" + AmountTextBox.ClientID + "','" + PriceTextBox.ClientID + "','" + CountTextBox.ClientID + "')";插入模块InsertI
2010-11-09 13:18:00
1360
原创 ListView控件的ItemCreated与ItemDataBound事件的区别
<br /><br />ListView的诸事件中的ItemCreated事件和ItemDataBound事件有如下区别:<br />1.ItemCreated事件发生在ItemDataBound事件之前<br />2.ItemCreated事件所做的工作是初始化各个模板Template中的控件。<br />3.ItemDataBound事件在ItemCreated初始化控件后再对需要进行数据绑定的控件进行绑定。<br />4.要动态的为ListView添加控件,必须在ItemCreated事件期间进行。<
2010-11-06 15:27:00
760
原创 DOM----nodeType nodeValue nodeName
将HTML DOM中几个容易常用的属性做下记录:nodeName、nodeValue 以及 nodeType 包含有关于节点的信息。nodeName 属性含有某个节点的名称。元素节点的 nodeName 是标签名称属性节点的 nodeName 是属性名称文本节点的 nodeName 永远是 #text文档节点的 nodeName 永远是 #document注释:nodeName 所包含的 XML 元素的标签名称永远是大写的nodeValue对于文本节点,nodeValue 属性包含文本。对于属性节点,nod
2010-10-26 23:47:00
431
原创 用一般处理程序(ashx)实现验证码功能
<br />验证码本质就是一幅图片,即先创建一副图片,然后在图片上随机的画上一些字符,这些字符都保存在Session中。通过对比用户输入的字符串就可知道正确与否。<br /><%@ WebHandler Language="C#" Class="YZM" %>using System;using System.Web;using System.Drawing;using System.Text;public class YZM : IHttpHandler,System.Web.Sess
2010-10-23 10:03:00
1045
1
原创 HttpHandler实现文件下载
<br /> <br />如果HttpHandler输出的是html、txt、jpeg等类型的信息,那么浏览器会直接显示,如<br />果希望弹出保存对话框,则需要添加Header:string encodeFileName =<br />HttpUtility.UrlEncode("过滤词.txt"); Response.AddHeader("Content-Disposition",<br />string.Format("attachment;filename=/"{0}/"", encodeFile
2010-10-23 09:52:00
619
转载 关于cookie和session的一些简单原理
<br /><br /> <br />用asp.net的高层api写过很多web,但是对session和cookie一直属于半懂不懂的状态,这几天啃了点,总结一下,不对的地方大家指正。<br /> 关于session:这个东西应该不是一个通用的产物,只不过各种服务器端技术都包括了这个,servlet有、asp有、asp.net有、php也有,原理大概相同。<br />关于cookie:这个应该算是一个标准了,各个浏览器都支持标准的cookie,js支持cookie的读写。<br /> session,字面理
2010-10-20 10:55:00
687
原创 全国省市数据库
<br /><br />--不足:23山东和16山东重复<br />--创建DBPromary数据库 <br />create database DBPromary<br />use DBPromary<br />go<br />--创建promary表<br />create table promary<br />(<br /> proID int primary key,<br /> proName varchar(50) not null<br />)<br />-------------------
2010-10-17 16:17:00
388
原创 禁用输入法非数字及粘贴
<br /><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title>无标题页</title> <mce:script type="text/javascript"><!--
2010-10-08 22:53:00
457
原创 Javascript实现评分
<br /><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title>无标题页</title> <mce:script type="text/javascript"><!--
2010-10-06 10:22:00
615
原创 DataList控件实现分页
<br />using System;using System.Configuration;using System.Data;using System.Data.SqlClient;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;
2010-09-10 10:11:00
396
原创 addEventListener设置监听器
<br /> <br />W3C DOM裡用来新增触发事件的函数叫AddEventListener,不过我一直不知道这个函数的第三个参数是要做什麼用的,总是随便设,也没发现差异再哪,前两天看ppk on javascript终於看到说明了,至於很久以前就有的DOM的标準文件,我其实根本没去找过这个参数的资讯。<br />这个参数叫做useCapture,是一个boolean值,就是true or false,如果送出true的话就是瀏览器会使用Capture方式,false的话是Bubbling,只有在特定
2010-09-08 10:34:00
691
原创 获取浏览器和操作系统信息
<br /><html> <head> <mce:script language='javascript'><!-- function getBrowserInfo() { var browserRE=/(firefox|opera|msie|safari).?([0-9]/.?)+/; return navigator.userAgent.toLowerCase().match(browserRE)[0]; } function ge
2010-09-07 10:45:00
508
原创 无法打开.csproj
<br />无法打开“F:/Project/Class/Data.csproj”,因为此版本的应用程序不支持其项目类型(.csproj)。若要打开它,请使用支持此类型项目的版本。<br />解决方法:运行devenv.exe /resetskippkgs即可
2010-09-05 19:13:00
1267
原创 “震屏”效果
<br /><html> <head> <mce:script language='javascript'><!-- window.resizeTo(400,400); var loop=0; var timer; var offX; var offY; var dir=1; timer=setInterval(function() { window.moveTo(500,180); if(loop>10
2010-09-05 16:09:00
1105
原创 控制语句
<br /><html> <head> <mce:script language="javascript"><!-- /*var rand=parseInt(Math.random()*3); var input=2; if(input==rand) { alert('right'); } else { alert('wrong'); }*/ ///////////// /*var sco
2010-09-04 19:24:00
318
FlatLab – Bootstrap 3 Responsive Admin Template
2015-05-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人