- 博客(507)
- 资源 (23)
- 收藏
- 关注
原创 static_cast和dynamic_cast的区别
static_cast//用法:static_cast < type-id > ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。②用于基本数据类型之间的转换,如把int转换成char,
2022-05-30 17:37:28
4900
原创 NIO 主从Reactor服务
NIO 主从Reactor服务模型如下:方案说明:Reactor主线程 MainReactor 对象通过select 监听连接事件, 收到事件后,通过Acceptor 处理连接事件当 Acceptor 处理连接事件后,MainReactor 将连接分配给SubReactorsubreactor 将连接加入到连接队列进行监听,并创建handler进行各种事件处理当有新事件发生时, subreactor 就会调用对应的handler处理handler 通过read 读取数据,
2022-03-30 18:44:29
375
原创 单 Reactor 多线程
单 Reactor 多线程方案:1)Reactor 对象通过 select 监控客户端请求事件,收到事件后,通过 dispatch 进行分发2)如果是建立连接请求,则由 Acceptor 通过 accept 处理连接请求,然后创建一个 Handler 对象处理完成连接后的各种事件3)如果不是连接请求,则由 Reactor 对象会分发调用连接对应的 Handler 来处理4)Handler 只负责响应事件,不做具体的业务处理,通过 read 读取数据后,会分发给后面的 Worker 线程池的某个线程
2022-03-30 14:27:21
621
原创 单 Reactor 单线程
Reactor模式原理Reactor模型是相对传统IO机构来说的,也就是NIO模型, NIO模型之所以可以优化,得益于它是基于事件,基于异步,不像传统IO,是阻塞的Reactor模型分为几个组件,分别是Reactor、Acceptor、HandlerReactor组件负责分发事件,如果是连接那么交给Acceptor;如果是读写事件那么交给HandlerAcceptor负责处理连接事件(获取新连接,注册到Selector上,注册读写事件,绑定Handler)Handler负责处理读写事件(使用ch
2022-03-24 15:23:22
1279
2
原创 NIO 高性能服务 Discard Server + Client
DiscardServerNIOpackage com.company;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import
2022-03-19 16:38:48
201
原创 c# 调用 cmd及bash
CMDusing System;using System.Diagnostics;namespace ConsoleApp{ class Program { static void Main(string[] args) { Process p = new Process(); //设置要启动的应用程序 p.StartInfo.FileName = "cmd.exe";
2022-02-15 11:11:12
422
原创 HashTable、HashSet、Dictionary
HashTable哈希表(HashTable)表示键/值对的集合。在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key-value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key-value键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对,任何非 null 对象都可以用作键或值。在哈希表中添加一个ke
2022-02-12 14:12:57
225
原创 Dockerfile 多阶段构建原理
多个 FROM 指令的意义多个 FROM 指令并不是为了生成多根的层关系,最后生成的镜像,仍以最后一条 FROM 为准,之前的 FROM 会被抛弃,那么之前的FROM 又有什么意义呢?每一条 FROM 指令都是一个构建阶段,多条 FROM 就是多阶段构建,虽然最后生成的镜像只能是最后一个阶段的结果,但是,能够将前置阶段中的文件拷贝到后边的阶段中,这就是多阶段构建的最大意义。# 编译阶段FROM golang:1.10.3COPY server.go /build/WORKDIR /build
2022-01-14 10:03:25
533
原创 NET5 使用 NLOG 记录EFCORE SQL信息
安装依赖 <ItemGroup> <PackageReference Include="NLog" Version="4.7.13" /> <PackageReference Include="NLog.Schema" Version="4.7.13" /> <PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" /> </ItemGroup>配置p.
2022-01-05 13:44:46
625
原创 NET5集成 NLOG
安装包 <ItemGroup> <PackageReference Include="NLog" Version="4.7.13" /> <PackageReference Include="NLog.Schema" Version="4.7.13" /> <PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" /> </ItemGroup>prog.
2021-12-28 18:58:29
531
原创 .NET5 集成 JWT
安装包 <ItemGroup> <PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.15.0" /> <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.15.0" /> </ItemGroup>编写库usin.
2021-12-21 17:01:18
480
原创 PGSQL在Ubuntu上安装
基础安装$ sudo apt-get update$ sudo apt-get install postgresql postgresql-client$ sudo /etc/init.d/postgresql start # 开启$ sudo /etc/init.d/postgresql stop # 关闭$ sudo /etc/init.d/postgresql restart # 重启对外访问/etc/postgresql/9.5/main/postgresql.con
2021-12-20 13:58:40
1263
原创 NET5 WEB API集成Mysql运行
准备NETCORE WEBAPI使用的.net版本为 .NET5安装对应的库 <PackageReference Include="EFCore.NamingConventions" Version="5.0.2" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.13" /> <PackageReference Includ
2021-12-15 20:18:59
589
原创 visual studio 常用快捷键
最常用的快捷键Ctrl+E+C=注释代码Ctrl+E+U=取消注释代码Ctrl+E+D=格式化全部代码Ctrl+Shift+A=新建类Ctrl+R+G=删除无效UsingCtrl+H=批量替换Ctrl+G=跳转到指定行Ctrl+E+E=在交互窗口中运行选中代码(很实用)Alt+Enter=快速引用shift+F9=监控(代码运行时)shift+F6=生成(当前类库)F6=生成(整个解决方案中类库)Shift+F12=查找所有引用Tab+Tab=代码联想
2021-11-26 14:23:56
1374
原创 springcloud loadBalancer 源码深入
LoadBalancerClientServiceInstanceChooser 定义根据服务ID获取服务实例的接口。LoadBalancerClient 继承 ServiceInstanceChooser 并新增了一些负载均衡客户端需要的方法。BlockingLoadBalancerClient 默认的负载均衡客户端实现方法;这个实现方法依赖 LoadBalancerClientFactory 工厂类,这个工厂类的 getInstance 方法返回一个异步的 ReactiveLoadBalanc
2021-07-02 16:24:13
689
原创 springcloud nacos 源码深入
对nacos从服务注册的源码进行剖析。服务注册AutoServiceRegistrationConfiguration:一个空实现,用来标注服务的自动注册。@Configuration(proxyBeanMethods = false)@EnableConfigurationProperties(AutoServiceRegistrationProperties.class)@ConditionalOnProperty(value = "spring.cloud.service-registry
2021-07-01 15:30:40
393
原创 Seata分布式事务
SeataSeata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。两阶段提交协议的演变:一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。二阶段:提交异步化,非常快速地完成,回滚通过一阶段的回滚日志进行反向补偿。环境搭建下载地址https://github.com/seata/seata/releases/download/v1.4
2021-05-06 17:14:18
684
2
原创 @Configuration proxyBeanMethods 属性详解
@Configuration注释中的proxyBeanMethods参数是springboot1.0,升级到springboot2.0之后新增的比较重要的内容,该参数是用来代理bean的。1.理论首先引出两个概念:Full 全模式,Lite 轻量级模式。Full(proxyBeanMethods = true) :proxyBeanMethods参数设置为true时即为:Full 全模式。 该模式下注入容器中的同一个组件无论被取出多少次都是同一个bean实例,即单实例对象,在该模式下SpringBo
2021-04-26 11:43:02
1819
原创 SpringCloud Gateway + Spring Security
父模块pom.xml<?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="http://maven.apache.org/POM/4.0.0 http://maven.apache
2021-04-15 14:24:47
8291
15
原创 kafka介绍与深入
Kafka概述什么是Kafka?Apache Kafka是一个分布式发布订阅消息系统/队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。Kafka适合离线、在线的消息消费。 Kafka的消息保留在磁盘上,并在集群内复制以防止数据丢失。 Kafka构建在ZooKeeper同步服务之上。 它可以与Apache Storm、Apache Spark非常好地集成,并用于实时流式数据处理。支持的客户端语言:C/C++PythonGo (AKA golang).NETNode.js
2021-04-02 17:17:29
202
原创 SpringCloud Oauth2认证 数据库+JWT版本
强烈建议先看基础版本再看数据库版本,不然很多东西无法理解。强烈建议先看基础版本再看数据库版本,不然很多东西无法理解。强烈建议先看基础版本再看数据库版本,不然很多东西无法理解。基本版本地址:https://zhexiao.blog.csdn.net/article/details/115261019Spring Cloud Oauth2 集成Spring Cloud版本<dependency> <groupId>org.springframework.boot<
2021-03-27 14:46:55
852
原创 SpringCloud Oauth2认证 基础版本
理解什么是OAUTH2OAuth2是什么OAuth 就是一种授权机制,数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。授权机制和密码机制的区别:(1)令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。(2)令牌可以被数据所有者撤销,会立即失效。密码一般不允许被他人撤销。(3)令牌有权限范围(scope)。对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是
2021-03-27 10:28:21
773
原创 从pom读取参数变量到yml配置使用
比如我们在pom中配置了一些属性,希望可以直接读取到yml里面作为配置使用。<artifactId>config-center</artifactId><packaging>jar</packaging><properties> <application.name>${artifactId}</application.name></properties>下面我希望直接使用 @xx@ 来读取p
2021-03-24 17:50:07
4556
3
原创 kafka 发送、接收大消息解决办法 - Spring Cloud Stream + Kafka
kafka默认发送和接收的消息是1M大小,如果要发送或者接收超过1M大小的数据,则需要修改以下配置。Broker: message.max.bytes and replica.fetch.max.bytesProducer: max.request.sizeConsumer: max.partition.fetch.bytes注意: message.max.bytes必须小于等于replica.fetch.max.bytes实例:server.propertiesbroker.id=1m
2021-03-22 13:47:40
988
原创 Java NIO + ByteArrayOutputStream 读取文件数据并转为字节数组
package com.zhexiao.kafka.component;import org.apache.kafka.common.utils.Bytes;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;import java.io.*;import java.nio.ByteBuffer;import java.nio.chann
2021-03-22 10:34:28
1991
原创 SpringCloud Bus+Kafka 实现配置刷新
Spring Cloud 基础版本pom.xml<!--springboot依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.0.RELEASE</version> <ty
2021-03-17 19:22:51
532
原创 Centos 安装 docker
Centos 安装 dockerDocker安装Centos 7移除旧版本$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \
2021-03-16 16:10:06
189
原创 Centos7 包安装Mysql 5.7
下载Mysql安装包$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz删除系统自带的 mariadb$ rpm -qa|grep mariadb$ sudo rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64创建Mysql用户组$ cat /etc/group |grep mysql$ sudo g.
2021-03-15 20:01:33
98
3
原创 Centos7修改yum镜像源
sudo mv /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.baksudo wget -O /etc/yum.repos.d/centos.repo http://mirrors.aliyun.com/repo/Centos-7.reposudo yum clean allsudo yum makecachesudo yum -y update
2021-03-15 16:39:27
311
原创 SpringCloud Nacos 配置中心搭建
部署Nacos本地服务通过官方下载对应的包后,通过命令启动nacos服务。默认用户名和密码都是 nacos 。编写配置中心的配置信息新增配置SpringCloud配置父Cloud版本这个是整个SpringCloud的版本。 <!--springboot依赖--> <dependency> <groupId>org.springframework.boot</groupId&
2021-03-10 14:35:48
270
原创 自定义编写Redis缓存注解
下面我会自定义一个注解方法,可以直接在方法上面使用,达到的效果如下:如果redis缓存没有数据,则执行方法体内的操作如果redis缓存存在数据,则直接读取缓存数据,不执行方法体操作核心代码如下RedisCacheAnnotation支持在方法上面使用这个注解来缓存返回数据到Redis。package com.zhexiao.cache.component;import java.lang.annotation.ElementType;import java.lang.annotatio
2021-03-03 11:01:41
440
2
原创 解决jackson2无法反序列化LocalDateTime的问题
import com.fasterxml.jackson.annotation.JsonAutoDetect;import com.fasterxml.jackson.annotation.PropertyAccessor;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature;import com.fasterxml.jackson.d
2021-03-03 09:53:18
1422
2
原创 com.netflix.zuul.exception.ZuulException: Hystrix Readed time out
在Zuul网关配置:ribbon: ReadTimeout: 60000zuul: host: connect-timeout-millis: 60000 socket-timeout-millis: 60000hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 60000pom配置
2021-03-01 18:57:27
224
原创 Ubuntu Maven打包项目
maven安装与配置下载mavenhttps://downloads.apache.org/maven/maven-3/3.6.3/binaries/ 下载zip包安装unzip并解压$ sudo apt-get install unzip$ unzip apache-maven-3.6.3-bin.zip配置环境变量$ sudo vim /etc/profileexport M2_HOME=/home/vagrant/apache-maven-3.6.3export M2=$
2021-02-01 20:20:09
557
原创 贪心算法
贪心算法的概念所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。基本思路建立数学模型来描述问题。把求解的问题分成若干个子问题。对每一子问题求解,得
2021-01-27 17:13:23
162
原创 NIO 读取中文文件并解决乱码问题
package com.zhexiao.convert.component;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile;import java.io.*;import java.nio.ByteBuffer;import
2021-01-20 10:05:08
577
原创 多线程的一些基本概念
什么是java多线程?进程与线程进程当一个程序被运行,就开启了一个进程, 比如启动了qq,word程序由指令和数据组成,指令要运行,数据要加载,指令被cpu加载运行,数据被加载到内存,指令运行时可由cpu调度硬盘、网络等设备线程一个进程内可分为多个线程一个线程就是一个指令流,cpu调度的最小单位,由cpu一条一条执行指令并行与并发并发:单核cpu运行多线程时,时间片进行很快的切换,线程轮流执行cpu并行:多核cpu运行多线程时,真正的在同一时刻运行多线程难在哪里单线程只有一
2021-01-18 15:44:16
308
原创 四种常见的限流算法实现 窗口实现、桶实现
固定窗口使用计数器在周期内累加访问次数,当达到设定的阈值时就会触发限流策略。下一个周期开始时,清零重新开始计数。此算法在单机和分布式环境下实现都非常简单,可以使用Redis的incr原子自增和线程安全即可以实现。图解:这个算法常用于QPS限流和统计访问总量,对于秒级以上周期来说会存在非常严重的问题,那就是临界问题,如下图:可以发现:我们设置的限流策略是1分钟限制计数100。在第一个周期最后5秒和第二个周期的开始5秒,请求的计数都是88;则在10秒时间内的请求计数达到了176次,已经远远超过之
2021-01-13 11:31:53
532
2
原创 Java 有限状态机
Java 有限状态机编写代码的时候,有时会遇见较为复杂的swith…case…和if…else…语句;这一刻有时会想到状态机,用有限状态机替换swith…case…和if…else…。状态机优点:降低程序的复杂度提高程序的可维护性状态机模式体现了开闭原则和单一职责原则每个状态都是一个子类,增加状态就要增加子类;修改状态只要修改一个类就行了缺点:使用状态机子类会增多,也就是类膨胀,这点需要程序员在开发中自己衡量。举个例子我们每天都乘坐电梯,电梯有四种状态:开门、关门、运行、停止。定
2021-01-11 18:51:39
618
2
算法图解 - 算法的基本操作
2018-06-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅