- 博客(96)
- 收藏
- 关注
原创 C# 手动写入日志,过大写入新文件
老项目没有用logf4j等日志框架,使用的是手动写入文件的方式存储日志。当日志过大会出现写入缓慢问题。下面采用IO异步写入以及文件过大分片等方式解决问题。
2024-09-13 16:52:30
533
原创 【C#】递归移动拷贝目录
当我们需要移动目录时,不能的简单的Directory.Move,这个方法不能支持递归迁移目录需要我们进行递归进行迁移void Main(){ string sourcePath = @"D:\费用报销"; string destinationPath = @"D:\文档\费用报销"; // 确保源路径存在 if (!Directory.Exists(sourcePath)) { Console.WriteLine("源目录不存在。"); return; } // 创建目标目
2024-05-28 15:05:38
365
原创 【WPF】使用Behavior以及ValidationRule实现表单校验
校验异常可以有多种展现形式和方法。可以在提交按钮时候,判断异常字符串是否为空,不为空弹窗。可以行为中使用GalaSoft.MvvmLight中的Messenger进行发布订阅(注册消费)。例如下面这样当ErrorMsg被赋值时,会触发 Messenger.Default.SendViewModol中setif (!// 发送消息stringget {} set {if(!
2023-12-26 16:46:32
2381
原创 WPF 全局异常处理
在Application中存在三种异常事件EventHandler其中是在异常由应用程序引发但未进行处理时发生,但无法捕获多线程异常专门捕获所有线程中的异常(不包括Task)捕获Task中的异常这些异常Handler可以在应用程序出现异常是记录日志,或者挽回应用程序奔溃的问题。
2023-12-19 16:04:33
1396
原创 C# UDP
UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。这样就极大地减少了系统开销,降低了流媒体的误码率和丢包率,并保证了流媒体播放的平滑性。
2023-12-11 14:38:58
833
原创 Modbus入门
Modbus是典型的半双工模式,有且只有一个master,请求由master发出,slave响应。其中 Slave相当于服务器(Modbus Slave),Poll相当于客户端(Modbus Master)。Modbus的存储区有:输入线圈(布尔,只读,代号1区),输入寄存器(寄存器,只读,代号3区),输出线圈(读写,布尔,代号0区),输出寄存器(寄存器,读写,代号4区)modbus使用范围广泛,广泛应用于各类仪表,PLC等。基本配置,配置完选择ok,接下来只要配置要使用的接口方式(网卡,串口等)
2023-11-07 10:31:13
1521
1
原创 S7 PLC SIM (TIA Portal) v15.1安装不了,一直要求重启
S7 PLC SIM (TIA Portal) v15.1安装不了,一直要求重启
2023-10-20 08:37:57
2557
2
原创 Asp.Net 6.0 集成 AutoMapper 初入
在后端开发中,对外接口时通常使用的实体是DTO,用于数据传输使用。在DTO到数据访问层的时候,需要进行DTO实体到DAO实体类的转换。这时,我们使用AutoMapper可以简化这个转换对象的过程。
2023-09-14 12:02:52
492
原创 【WPF】数据绑定,资源字典
将数据与视图分开,创建MainViewModel .cs 作为数据源的处理MainWindow.xaml,MainWindow.xaml.cs是UI文件
2023-05-26 09:17:30
1323
1
原创 【声卡驱动】安装realtek high definition audio后重启电脑被自动卸载替换成系统自带的realtek auto
安装realtek high definition audio后重启电脑被自动卸载替换成系统自带的realtek auto
2022-10-27 22:02:58
4010
原创 动态定时任务与动态生成class代码
动态定时任务原理采用定时任务线程池ThreadPoolTaskScheduler来实现定时任务。动态定时任务就是可以配置的,而不是写死在代码中。所以我们要将其写入到数据库中,然后暴露接口就可以进行配置比如创建、启动、结束任务。数据库脚本DROP TABLE IF EXISTS `tb_task`;CREATE TABLE `tb_task` ( `task_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT N
2022-05-16 14:58:28
485
原创 nginx配置https
从腾讯云下载nginx版本证书由于nginx在docker中安装的,所以我们需要开启80端口和443端口映射。docker nginx 安装# 拉取镜像docker pull nginx# 启动一个默认容器 --rm 即停止容器中自动删除容器docker run --rm --name nginx1 -p 80:80 -d nginx# 拷贝default.conf 到宿主机目录 方便日后修改conf # 在镜像中 /etc/nginx/nginx.conf 中 include了 def
2022-05-09 14:02:38
629
原创 安装minikube
下载minikubecurl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudo install minikube-linux-amd64 /usr/local/bin/minikube依赖环境minikube需要VirtualBox环境安装 VirtualBox# 下载地址https://download.virtualbox.org/virtualbox/6.1.34/
2022-05-04 01:13:50
2664
原创 ssh-copy-id 命令快速实现ssh远程免密登录
用ssh-copy-id将公钥复制到远程机器中将本地公钥拷贝至 用户名为root的远程主机上ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.150.128/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/var/jenkins_home/.ssh/id_rsa.pub"/usr/bin/ssh-copy-id: INFO: attempting to log in with
2022-04-29 11:09:43
4071
1
原创 使用Jenkins从gitlab拉取代码并部署以及gitlab更新代码后自动构建
使用Jenkins从gitlab上拉取代码,使用ssh。创建Jenkins服务器的SSH密钥对;为相应的Gitlab用户添加密钥对的公钥,相当于Jenkins拉取代码时,使用的是该Gitlab用户,拥有其相应的代码克隆权限;Jenkins添加密钥对的私钥,实现基于key的连接;将Gitlab项目的SSH克隆地址配置到相应的Jenkins任务中,在构建时将代码拉取到Jenkins服务器的相应目录,为接下来的测试、部署等操作做好准备。首先进入Jenkins 容器中docker exec -it
2022-04-29 10:49:47
8773
3
原创 服务器改用ssh文件登录
首先在服务器生成密钥ssh-keygen -t rsa -b 4096将 id_rsa.pub的内容导入到 authorized_keys文件中,这样远程登录时用id_rsa文件登录会与authorized_keys中的文件进行验证。cat id_rsa.pub >> authorized_keys关闭ssh密码登录在 /etc/ssh 下的sshd_config 配置以下两个为noPasswordAuthenticationChallengeResponseAuthe
2022-03-09 22:04:28
757
原创 Maven多模块打包
在类似如下的场景中进行打包 lottery-rpc 将出现报错,原因是没办法将 lottery-common 一起打包进去。<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ht
2022-02-18 23:43:31
1693
原创 在maven本地仓库导入jar包
# Dfile jar包所在位置 DgroupId 指定groupId DartifactId 指定artifactId Dversion 指定版本 mvn install:install-file -Dfile=C:\Users\zlf\Desktop\mybatis-main\target\mybatis.jar -DgroupId="cn.bugstack.middleware" -DartifactId=mybatis -Dversion="1.0.0" -Dpackaging=jar
2021-11-13 22:32:19
594
原创 docker 安装 redis
安装 redis通过docker search redis和docker pull redis下载redis镜像创建挂载配置文件夹mkdir -p /usr/local/java/redis/confmkdir -p /usr/local/java/redis/data配置在创建的conf目录下,创建一个redis.conf文件,并将下面内容写入# 配置保护protected-mode no# 持久化appendonly yes# 密码requirepass 123456
2021-11-07 21:03:05
533
原创 CAS实现原子操作的三大问题
在Java中可以通过锁和CAS的方式实现原子操作。CAS实现原子操作的三大问题1.ABA问题CAS需要在操作值的时候,检测值有没有发生变化,如果没有发生变化则更新。但是如果一个值原来是A,变成B,又变成A,那么使用CAS进行检查时会发现它的值没有发生变化,但实际上却发生了变化了。ABA问题的解决思路是使用版本号。在变量前面追加上版本号,每次变量更新的时候把版本号加1,那么A-》B-》A 就会变成 1A-》2B-》3A。从Java1.5 开始,JDK的Atomic 包里提供了一个类 AtomicSt
2021-09-28 11:44:01
124
原创 多线程分段下载文件
原理先获取文件大小,然后分段分配任务给线程下载在开始多线程下载前得先得知下载文件的大小,如果在之前的流程中并没有告知文件大小则可以使用HTTP请求方法 HEAD,这个请求方法类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头,在头部中可以找到字段content-length就是文件大小了。得知文件长度后应分割需要下载的起止位置以便之后使用。有具体位置后就可以启动多线程发送网络请求,在网络请求中使用HTTP协议的头部标志Range,这个标志的使用方法是Range:bytes=star
2021-09-14 01:21:08
635
原创 GC 基础
如何定位垃圾1. 引用计数法为对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。在两个对象出现循环引用的情况下,此时引用计数器永远不为 0,导致无法对它们进行回收。正是因为循环引用的存在,因此 Java 虚拟机不使用引用计数算法。2. 根可达算法(可达性分析算法)以 GC Roots 为起始点进行搜索,可达的对象都是存活的,不可达的对象可被回收。Java 虚拟机使用该算法来判断对象是否可被回收,GC Roots 一般包含以下内容:
2021-08-27 15:19:34
167
原创 volatile
volatile 如何来保证可见性?当有 volatile 变量修饰的共享变量进行写操作时会多出一行汇编代码。lock add1 .. ...通过查 IA-32 架构软件开发者手册可以知道,lock 前缀的指令在多核处理器下会发生 两件事。将当前处理器缓存行的数据写回到系统内存。这个写回内存的操作会使其他cpu里缓存了该内存地址的数据无效。为了提高处理速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部缓存(L1、L2 或其他)后再进行操作,但操作完不知道何时会写到内存。如果声
2021-08-17 09:54:14
136
原创 docker-conpose 入门
docker-compose 安装官方地址githubLinux 下安装sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose要安装其他版本的 Compose,请替换 1.29.1将可执行权限应用给docker-composesudo chmod +x /usr
2021-08-12 14:35:12
728
原创 filebeat + logstash 发送日志至kafka 入门
filebeat官方文档配置文件 filebeat.ymlfilebeat.inputs:# Each - is an input. Most options can be set at the input level, so# you can use different inputs for various configurations.# Below are the input specific configurations.- type: log # Change to tru
2021-07-27 15:34:36
1047
原创 mysql集群搭建(使用docker 一主一从)
mysql集群搭建my.cnf 配置文件配置在 /etc/mysql/my.cnf 中 (拿一个举例)(docker中需要先进入开启的容器,docker exec -it 容器名称 /bin/bash)[mysqld]#启用二进制日志log-bin=mysql-bin#服务器唯一ID,一般取IP最后一段server-id=131重启mysql ,这边我使用docker,所以先退出 容器 执行 exit执行 docker restart 容器名称 重启容器建立帐户并授权slave
2021-07-19 21:17:08
253
1
原创 使用mysqldump 导出sql数据
mysqldump -uusername -ppassword --databases 数据库名 --tables 表名 --where "add_time >= '2021-07-15 00:00:00'" > ~/temp/IpcOrderConsumption/t_order_7_15.sql# --where 是要导出数据的条件
2021-07-16 15:10:30
3969
原创 一个定时demo
import lombok.SneakyThrows;import java.util.concurrent.*;import java.util.concurrent.atomic.AtomicInteger;/** * Created with IntelliJ IDEA. * * @Auther: zlf * @Date: 2021/07/10/18:18 * @Description: */public class main { public static Sche
2021-07-10 21:09:20
97
原创 Vue.js使用矢量图
安装依赖npm i svg-sprite-loader --save目录结构创建 svg-icon 组件<template> <svg :class="svgClass" aria-hidden="true"> <use :xlink:href="iconName"/> </svg></template><script>export default { name: 'SvgIcon', pro
2021-06-02 21:40:41
712
1
原创 CIDR 计算网络地址、子网掩码、广播地址
题干16.158.165.91/22 这个 CIDR 求一下这个网络的第一个地址、子网掩码和广播地址。首先我们先计算网络号/22 可知 前22位为网络位,后10位为主机位。网络号就是 主机位为0,即 16.158.<101001><01>.91 => 16.158.<101001><00>.0 => 16.158.164.0第一个地址就是 16.158.<101001><00>.1 ,即 16.158.164.1
2021-05-12 18:13:19
4362
原创 maven识别包下的xml
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes
2021-05-06 10:10:33
154
原创 SpringBoot 集成WebSocket
什么是WebSocketWebSocket 是一种网络通信协议,很多高级功能都需要它。我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?因为 HTTP 协议有一个缺陷:通信只能由客户端发起。如果我们想要服务器给客户端发信息,只能由客户端建立长连接这种消耗性能的操作。WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技
2021-05-02 00:25:28
274
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人