自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(509)
  • 资源 (5)
  • 收藏
  • 关注

原创 【源码阅读】Golang中的go-sql-driver库源码探究

在上篇文章中我们知道,database/sql只是提供了驱动相关的接口,并没有相关的具体实现,具体内容是由第三方实现的,如,本章中我们主要是探究这个驱动实现库的具体实现。以及它是如何与database/sql一起作用的。

2024-05-01 18:30:10 805 2

原创 【源码阅读】 Golang中的database/sql库源码探究

在golang中,我们比较熟悉的mysql相关的库就是database/sql,这是golang的内置库,该标准库没有具体实现,只列出第三方库需要实现的具体内容。也就是说,这个库只是定义了接口,并没有具体的实现。Go语言为开发数据库驱动定义了一些标准接口,使用标准接口开发的代码,在迁移数据库时,不需要做任何修改(当然双方数据库都遵守标准接口)。下面我将基于golang1.19的源码探究这个库的实现。

2024-04-28 21:48:01 1230

原创 【Kafka】Kafka再平衡机制及相关参数

再平衡是指的是Consumer Group 下的 Consumer 所订阅的Topic发生变化时 发生的一种分区重分配机制。也就是说,再平衡也就是一种协议,它规定了如何让消费组下的所有消费者来分配 Topic 中的每一个分区。举个栗子:一个 Topic 有 100 个分区,一个消费者组内有有 20 个消费者,在协调者的控制下让消费者组内的每一个消费者分配到 5 个分区,这个分区分配的过程就是再平衡。

2023-09-09 21:40:54 2620 1

原创 【Redis】Lua脚本在Redis中的基本使用及其原子性保证原理

在介绍Eval命令执行过程中,第一步会在Lua环境中生成一个Lua脚本对应的函数,形如:f_dfdugndgub320433,只要脚本对应的函数在Lua中定义过,那么即使不知道脚本的内容本身,客户端也是可以根据脚本的SHA1来调用脚本对应的函数,从而达到执行脚本的目的,这也就是EvalSHA命令的实现原理。如果Lua脚本比较耗时,甚至Lua脚本存在问题,那么此时Lua脚本的执行会阻塞Redis,直到脚本执行完毕或 者外部进行干预将其结束,就可以使用。字典,关闭现有的Lua环境并重建一个新的Lua环境。

2023-09-08 21:12:04 1862 2

原创 【Kafka】Kafka的重复消费和消息丢失问题

在Kafka中,生产者(Producer)和消费者(Consumer)是通过发布订阅模式进行协作的,生产者将消息发送到Kafka集群,而消费者从Kafka集群中拉取消息进行消费,无论是生产者发送消息到Kafka集群还是消费者从Kafka集群中拉取消息进行消费,都是容易出现问题的,比较典型的就是消费端的重复消费问题、生产端和消费端产生的消息丢失问题。下面将对这两个问题出现的场景以及常见的解决方案进行讲解。

2022-11-29 23:33:12 15994

原创 【Kafka】Kafka基础架构及相关概念

在以前的定义中,Kafka被定义为一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域,类似的产品主要有ActiveMQ、RabbitMQ、RocketMQ…,当然我们知道kafka的作用远不止用于消息队列,Kafka作为消息队列主要是基于点对点模式和基于发布订阅消费者主动拉取数据,消息收到后清除消息。消费者消费数据之后,不删除数据。每个消费者相互独立,都可以消费到数据。缓存/消峰、解耦和异步通信。缓冲/消峰。

2022-11-27 23:03:20 1856

原创 【Kafka】Golang中使用Kafka基于发布订阅模式实现消息队列

在以前的定义中,Kafka被定义为一个分布式的基于**发布/订阅**模式的**消息队列**(Message Queue),主要应用于大数据实时处理领域,当然我们知道kafka的作用远不止用于消息队列,kafka作为消息队列主要是基于点对点模式和基于发布订阅模式

2022-09-03 17:41:51 2255

原创 【Kafka】Docker安装kafka、搭建kafka集群

docker安装kafka、搭建kafka集群进行测试

2022-09-02 11:11:09 3620

原创 【gRPC】gRPC中拦截器的介绍及使用

文章目录前言一、服务端拦截器1、一元拦截器:UnaryInterceptor2、流式拦截器:StreamInterceptor3、实现服务端拦截器一、客户端拦截器1、一元拦截器:WithUnaryInterceptor2、流式拦截器:WithStreamInterceptor3、实现客户端拦截器前言本次主要介绍在gRPC中使用拦截器,包括一元拦截器和流式拦截器,在拦截器中添加JWT认证,客户端登录之后会获得token,请求特定的API时候需要带上token才能访问。由于代码中我们使用了grpc-gate

2022-05-07 21:59:31 2234 1

原创 【gRPC】批量操作、服务端、客户端、双向流介绍及使用案例

前言在之前的文章中,我们通常的做法都是客户端请求—服务端响应的模式,客户端收集好所有的请求信息,发送到服务端,服务端对信息进行业务处理之后再返回最终响应结果。在更多的场景中,我们传输的数据包非常大,比如,客户端需要查询大量用户的积分,然后再拿着这堆用户的积分做其他处理,如果按照之前的做法,传输的数据包会非常大,这会占用大量的带宽,并且服务端需要等待客户端全部发送之后,才能进行处理及响应。在本文中,我们将介绍gRPC的流模式,根据流传输的方向,可以分为客户端流、服务端流以及双向流,而这里所谓的 “流” 就是

2022-04-27 11:17:34 1508

原创 【gRPC】双向认证下grpc-gateway原理及简单使用

前言在上一篇文章自签CA、服务端和客户端双向认证中,我们了解了双向认证并进行了实践,本篇文章将基于双向认证,使用gRPC-Gateway提供http请求处理的api,这样便于提供gRPC和RESTful风格的API。官方地址:https://github.com/grpc-ecosystem/grpc-gatewaygrpc-gateway原理gRPC-Gateway是Protocol Buffers编译器协议的一个插件。它读取Protobuf服务定义并生成一个反向代理服务器,该服务器将RESTful

2022-04-24 16:31:13 2529

原创 【gRPC】自签CA、服务端和客户端双向认证

前言在上一篇文章Protobuf中间文件介绍、使用、Go新版本TLS证书认证问题中,我们简单使用了grpc的单项认证,客户端和服务端使用的证书都是由ca证书签发给服务端的,在本文中,我们进行双向的认证,利用ca证书给客户端和服务端都签发一份证书,服务端会验证客户端的证书,同时客户端也会验证服务端的证书。一、双向认证1.1 CA根证书生成在openssl的bin目录下新建一个配置文件ca.conf,文件内容如下:[ req ]default_bits = 2048distinguis

2022-04-22 22:19:33 1980 2

原创 【gRPC】Protobuf中间文件介绍、使用、Go新版本TLS证书认证问题

文章目录前言gRPC初体验前言初学gRPC,跟着B站go语言grpc框架实战Up主进行学习,其中视频中的坑还是比较多的,比如版本方法废弃,获取库地址废弃等,本文基于该视频整理了前三讲的实战内容。gRPC初体验gRPC是Google开发的高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。本身它不是分布式的,所以需要进一步的开发。gRPC支持Java、C++、G

2022-04-21 22:05:12 2314

原创 【Gin】Gin框架中间件

前言Gin中的中间件和我们通常所认识的中间件如缓存中间件(Redis)、消息中间件(Kafaka、MQ)等不一样,Go语言中的中间件更像Spring中的拦截器,根据作用范围又分为全局中间件和局部中间件,下面对中间件这部分进行介绍。一、中间件在Gin框架中,gin.Default()默认使用了Logger和Recovery中间件,其中Logger中间件将日志写入gin.DefaultWriter,即使配置了GIN_MODE=release。而Recovery中间件会recover任何panic。如果有p

2022-04-15 11:22:20 3032

原创 【Gin】Gin框架路由介绍

前言从Java转Go,初学Gin框架,最关心的操作就是接收请求与返回响应的问题,本文主要简单介绍一下Gin框架的基本使用。Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点,对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。Go中下载Gin比较简单,通过go get即可拉取到本地(前提是本

2022-04-14 22:02:51 2101

原创 最长上升子序列(序列长度+序列输出)

一、LIS的定义:最长上升子序列(Longest Increasing Subsequence),简称LIS,也有些情况求的是最长非降序子序列,二者区别就是序列中是否可以有相等的数。假设我们有一个序列 b i,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们也可以从中得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N,但必

2020-07-18 20:54:02 7715 2

原创 HDU1233(基础最小生成树 prim和 kruskal)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233prim算法:算法从任意一个顶点开始,每次选择一个与当前顶点集最近的一个顶点,并将两顶点之间的边加入到树中。Prim算法在找当前最近顶点时使用到了贪婪算法。代码实现:#include&lt;bits/stdc++.h&gt;using namespace std;const in...

2018-08-04 19:31:51 1799

原创 采用C/S架构完成用户注册并连接Mysql数据库(界面winform)

语言:C#开发平台:VS2017对于C/S架构的一些基本交互我前面已经写过了,这里就不再赘述,C#并没有直接连接数据库的东西,需要导入数据库的插件才能驱动数据库操作,using MySql.Data.MySqlClient;也就是引如这个命名空间,这个空间来自Mysql下的一个dll插件,需要自己导入,具体操作:在VS里面找到视图-&gt;解决方案资源管理器-&gt;引用-&gt;右击添加引用-&...

2018-06-23 12:27:55 3943 4

原创 图的几种存储方式(邻接矩阵+邻接表+vector)

最近看到数据结构真的是头大,刚好想到之前自己因为不会存图被xxx怒怼,又没有学过数据结构,作为一个acmer来说,怎么能不会这种操作呢。然后现在来总结一下图的存储方式。图的分类有很多,这里不再赘述。来看一个一般的无向图:通俗地讲,一张图是由边、顶点集构成,每条边上可能还会有相应的边权(带权的),这里讲带权的。然后想我们怎样存储它呢,下面介绍几种存储方式。1、邻接矩阵图的邻接矩阵...

2018-05-03 22:18:52 7027

原创 C#套接字编程实现客户端和服务器通信以及传输文件

花了很久时间,终于把这个搞完了,虽然不是很完美,但是自己感觉还是可以将就用的。主要功能:1、实现客户端服务器一对一聊天以及传输文件。2、实现群聊功能。3、每一个form2里面用子窗体显示所对应父窗体传输文件进度条。4、在线列表能够及时显示当前在线客户以及删除掉线的客户端。需要注意一点的就是父窗体操作子窗体需要将子窗体上的控件属性设置为public类型,比如子窗体名字叫For...

2018-01-21 13:23:11 2157 2

原创 C#实现服务器和客户端之间通信

TCP 套接字编程服务器端实现步骤:1、使用Socket类创建套接字。2、利用Bind方法将创建的套接字绑定到指定的地址结构。3、利用Listen方法设置套接字为监听模式,使得服务器进入被动打开状态。4、接受客户端的连接请求。5、接收、应答客户端的数据请求。6、终止连接。客户端实现步骤:1、使用Socket类创建套接字。2、调用Connect方法建立一个与...

2018-01-06 18:45:08 23785 16

原创 hdu6222(递推规律+java大数)

A triangle is a Heron’s triangle if it satisfies that the side lengths of it are consecutive integers t&#8722;1, t, t+ 1 and thatits area is an integer. Now, for given n you need to find a Heron’s...

2017-11-05 10:11:57 2652

原创 hdu 6165(dfs or bfs or tarjan+topsort)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6165题意:一张有向图,n个点,m条边,保证没有重边和自环。询问任意两个点能否满足任何一方能够到达另外一方。思路:枚举每个点,预处理搜出与这个点相连接的所有点,看看能不能搜出一条链出来,当然要注意一种情况,u-v,v-u这种也是可行的,特殊处理一下。代码:#includeusing

2017-08-22 19:29:20 1153

原创 容斥原理(模板+例题)

网上找来方便自己看,理解。容斥原理:在计数时,必须注意无一重复,无一遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。也可表示为设S为有限集,

2017-08-05 22:07:05 5754

转载 素筛讲解及模板(线性筛)

本文链接:http://blog.csdn.net/sjf0115/article/details/8693756方法一[cpp]view plaincopy//判断是否是一个素数intIsPrime(inta){//0,1,负数都是非素数if(a

2017-08-02 19:46:21 8284 4

转载 ACM 各大OJ平台以及题目分类

本文章转自:http://blog.csdn.net/liujiuxiaoshitou/article/details/7  OJ是Online Judge系统的简称,用来在线检测程序源代码的正确性。著名的OJ有RQNOJ、URAL等。国内著名的题库有北京大学题库、浙江大学题库等。国外的题库包括乌拉尔大学、瓦拉杜利德大学题库等。简介:  Online Judge系统(简

2017-06-15 11:22:13 32347 6

原创 PowerOj 2459(树状数组+离线处理)

题意:寻找区间内不同元素个数。思路:想要找每个区间内元素不同元素个数,可以写莫队,但可能会被卡。下一种思路,对于[L,R],利用树状数组,寻找距离R最近的点即可。代码: #include<bits/stdc++.h>using namespace std;const int maxn=1e5+5;int a[maxn],c[maxn];int ans[ma...

2017-04-30 09:54:10 676

转载 spfa、Dijkstra、Floyd算法最短路算法详解

本文章为转载,这里找点哪里找点凑齐的,这样可以方便进行了解几种算法相同点和不同点spfa部分转自:http://blog.csdn.net/maxichu/article/details/45309463  spfa:适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有

2017-04-17 19:39:25 1375

原创 PowerOJ 1799(spfa求最短路+路径输出)

西科大新成立了一个WS旅行社。现在在全校范围内招收导游,旅行社为前来应聘的同学设计了一道难题:给应聘者一张地图,看他能否很快的计算出从出发点到达终点的最短路径,这个问题,相信对于来自西科大的你来说,是轻而易举的事情,但是作为旅行社的社长,Bearboy 还要求应聘者能够在地图中画出这条最短路。Input 输入的第一行为一个整数T(T组测试数据对于每一组测试数据,第一行为两个整数 N

2017-04-17 16:24:16 763

原创 【源码阅读】Sony的go breaker熔断器源码探究

在微服务时代,服务和服务之间调用、跨部门调用都是很常见的事,但这些调用都存在很多不确定因素,如核心服务A依赖的部门B服务挂掉了,那么A本身的功能将会受到直接的影响,而这些都会影响着我们本身为用户提供的产品功能表现,因此,做好服务调用的熔断降级措施是非常有必要的。在golang开发中,我们经常都会使用到一个组件gobreaker,用非常少量的代码实现了服务熔断功能,下面我们将对gobreaker的源代码进行分析。

2024-07-20 16:03:02 440 1

原创 【LeetCode】LCR 124. 推理二叉树

思路:有前备知识我们很快能发现,先序主要作用是确定根,先序中的每个节点都会顺序的成为从上往下的子树的根节点;而通过先序中确定的根节点,在中序序列中,我们能够将二叉树进行初步划分左右子树,然后继续找先序中的根,继续划分左右子树,划分这个过程可以借助递归完成。这样,在找寻到一个根节点的时候,通过这个根节点所在中序中的位置确定下一次划分的区间。:某二叉树的先序遍历结果记录于整数数组 preorder,它的中序遍历结果记录于整数数组 inorder。

2024-06-16 17:14:45 327 1

原创 【LeetCode】191. 位1的个数

也很简单的思路,就是直接计算这个数的二进制位中1的个数,不过不是先求出所有二进制位再来计算,而是通过位移动的方式。题目区间中很明显一点就是这个数是个32位的,因此我们最多会移动32次来检查结果,并且我们知道,要检查一个数的二进制位中某位为1,我们只需要将这个数和2的幂次方结合进行。:题意很简单就不说了,这里先说一种最简单的解法,首先我们知道一点:n&(n-1)相当于把是将n的二进制位中最低位的1变为了0,其它位保持不变,因此可以利用这个特性进行解答。

2024-04-21 20:24:32 365

原创 【LeetCode】187. 重复的DNA序列

出现次数大于等于2次,因此我们可以直接使用hash结构记录每个子串出现的次数,边记录边统计答案即可。

2024-04-21 19:46:46 241 3

原创 【LeetCode】3. 无重复字符的最长子串

思路:典型的 双指针+hash,定义两个指针left,right,用于维护一个没有重复字符的区间,这个区间内的字符都是没有重复的,初始时候left和right都指向同一个位置,right指针会在遍历字符串时候一直++,在right++的过程中会将每个字符添加到hash结构中,left++的条件是当right++遇到了重复字符的时候,开始进行区间去重(更新left的位置,使得[left,right]没有重复字符),跑到下一个使得当前区间[left,right]没有重复字符的位置。

2024-04-21 17:52:29 291

原创 【计算机网络】四层负载均衡和七层负载均衡

首先我们知道,在计算机网络中,常用的协议分层方式:OSI和TCP/IP,以及实际生产中使用的协议划分方式。应用层:对软件提供接口以使程序能使用网络服务,如事务处理程序、文件传送协议和网络管理等。表示层:程序和网络之间的翻译官,管理数据的解密加密数据转换、格式化和文本压缩。会话层:负责在网络中的两节点之间建立和维持通信,以及提供交互会话的管理功能。传输层:提供建立、维护和拆除传送连接的功能;选择网络层提供最合适的服务;在系统之间提供可靠的透明的数据传送,提供端到端的错误恢复和流量控制。网络层。

2024-03-31 17:36:43 917

原创 【LeetCode】23. 合并 K 个升序链表

顺序合并的效率并不高,这样做就类似于阻塞操作,合并前面的链表的时候,无关的链表啥事儿都干不了,因此,我们可以考虑进行分治,先递归地划分区间两两合并,最后再将总的合并起来。顺序合并思路很简单,就是顺序地将这K个链表两两地进行合并。

2023-11-05 17:23:09 728

原创 【LeetCode】210. 课程表 II——拓扑排序

题解:从题目描述来看,很容易就知道是拓扑排序问题了,问题在于如何存图,如何解答,存图方式比较多,邻接表、邻接矩阵,解方面:遍历、搜索、以及队列都能完成该题的解答,实现方面很多时候还是会依赖一些语言特性,比如java、c++中有队列,可以将度为0的点放进队列中,每次出队一个去边,而在golang中数据结构支持相对匮乏,因此可以采用遍历或者搜索方式完成。可能会有多个正确的顺序,你只要返回 任意一种 就可以了。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1]。

2023-09-10 17:21:13 1420 1

原创 【Golang】golang中http请求的context传递到异步任务的坑

在golang中,context.Context可以用来用来设置截止日期、同步信号,传递请求相关值的结构体。与 goroutine 有比较密切的关系。

2023-06-02 20:54:06 1582

原创 【开发工具】适用于Windows的Linux子系统一一WSL安装使用教程

Windows Subsystem for Linux(简称WSL)是一个在Windows 10\11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。优势:开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。

2023-03-24 20:56:12 5573 1

原创 【牛客网】 JZ48 最长不含重复字符的子字符串

这个题是比较容易想到two pointer(双指针)的,再加上hash标记一下区间内存在的元素即可,右指针会一直往后走,在遇到相同的元素时候,才开始让左指针走,直到走到没有重复为止。

2023-03-18 17:41:37 137

Java面试手册.zip

常见Java基础面试题、JVM、Redis、Java并发编程、MySQL等面试题

2021-06-18

InformationManage.rar

原生Servlet+JSP完成的员工管理小案例,数据库Mysql,供参考。

2020-11-11

Spring基本知识点教程+案例演示

这个文档涵盖了spring的知识点,可以帮助初学者迅速入门spring,对于学习spring真的很有帮助的。若文档下载有什么问题,尽请留言解决

2019-12-25

JDK1.8中文百度.CHM

JDK1.8中文百度.CHM JDK1.8中文百度.CHM JDK1.8中文百度.CHM JDK1.8中文百度.CHM JDK1.8中文百度.CHM JDK1.8中文百度.CHM 自我感觉超好用的,上传上来大家共享。

2017-09-25

数字信号处理教程习题分析与解答+清华程佩青第四版+课后习题答案

数字信号处理教程习题分析与解答+清华程佩青第四版+课后习题答案 数字信号处理教程习题分析与解答+清华程佩青第四版+课后习题答案 数字信号处理教程习题分析与解答+清华程佩青第四版+课后习题答案

2017-09-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除