自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 收藏
  • 关注

转载 【无标题】

Qt-OpenCV开发环境搭建(史上最详细)

2024-03-05 12:19:16 71

原创 Qt5中OpenCV3.4.6的安装与配置(亲测)

链接:https://pan.baidu.com/s/1GTpA8Mt1DwSS4cjFs-ElFg?pwd=6666软件列表清单。

2023-08-04 18:48:19 557 1

原创 .NET Apache Spark做基于商品推荐系统如此简单

.NET大数据终于上线了,花业余时间来帮把自己做推荐系统使用的算法分享一波

2022-11-05 12:51:24 6521 1

原创 WPF开发冷风机组态及应用

冷风机组件开发和应用VS2022.NET6框架冷风机组件开发演示WPF主界面设计WPF主界面托板设计<Window x:Class="WpfConsolePannel.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xml

2022-05-28 18:01:35 932

原创 WPF开发温度计工业组态

1、工控温度计组件效果演示工控上位机温度计组件设计与开发2、画温度计边框<Rectangle StrokeThickness="7" RadiusX="40" RadiusY="15" Fill="White" /><Rectangle StrokeThickness="7" RadiusX="40" RadiusY="15"> <Rectangle.Effect> <DropShadowEffect ShadowDepth="0"

2022-05-20 10:55:07 1061

原创 Spark 之 故障排除(二)

Spark 之 故障排除(二)这是我参与更文挑战的第12天,活动详情查看:更文挑战故障排除四:解决算子函数返回NULL导致的问题在一些算子函数里,需要我们有一个返回值,但是在一些情况下我们不希望有返回值,此时我们如果直接返回NULL,会报错,例如Scala.Math(NULL)异常。如果你遇到某些情况,不希望有返回值,那么可以通过下述方式解决:返回特殊值,不返回NULL,例如“-1”;在通过算子获取到了一个RDD之后,可以对这个RDD执行filter操作,进行数据过滤,将数值为-1的数据给过

2021-06-14 01:00:20 26770 1

原创 Spark 之 解决数据倾斜(一)

介绍Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量不同导致的不同task所处理的数据量不同的问题。例如,reduce点一共要处理100万条数据,第一个和第二个task分别被分配到了1万条数据,计算5分钟内完成,第三个task分配到了98万数据,此时第三个task可能需要10个小时完成,这使得整个Spark作业需要10个小时才能运行完成,这就是数据倾斜所带来的后果。注意,要区分开数据倾斜与数据量过量这两种情况,数据倾斜是指少数task被分配了绝大

2021-06-14 00:56:25 26743

原创 golang-context

标题golang-context1. context 常用方法,以及各种适用于什么场景1.1 context含有的方法 var ctx context.Context var cancel context.CancelFunc // 1,传递key,value的值 ctx = context.WithValue(context.Background(), "key", "value") // 2,超时控制timeout ctx, cancel = context.WithTimeout(co

2021-06-11 15:49:18 26500 1

原创 Go的内存管理(最新学习)

标题Go的内存管理内存管理的设计内存空间有堆区和栈区。栈一般存储局部变量,方法有关的数据,由编译器自动管理,。堆用来存放对象,java和go都是通过垃圾收集器回收,不需要手动对内存进行释放和管理。内存管理一般包含三个组件应用程序内存分配器垃圾收集器内存分配器应用程序通过内存分配器申请内存,内存分配器从堆中初始化相应的内存区域。分配方法内存分配器一般包含两种分配方法线性分配器空闲链表分配器线性分配器Java就是使用的线性分配器的思想。使用线性分配器时,只需要在内存中维护一

2021-06-11 15:30:03 26594

原创 限流算法, 以 Golang 方式

限流算法, 以 Golang 方式速率限制在 Web Server、TCP 通讯、API 交互等领域中,速率限制,Rate Limit,一般是面向请求次数、流量等参数进行速率控制。有的时候它又被称作流量控制。谈论流量控制时,大抵上要考虑到如下两个方面:恒定速率(Constant Bit Rate,CBR)变速速率(Varible Bit Rate,VBR)这并不是 TCP 通讯专有的概念。事实上,速率控制是个跨越多学科存在的通用概念。例如在音视频播放时(特别是在流媒体播放时),解码速率也是需

2021-06-11 15:12:01 27295 1

原创 grpc-go客户端源码分析

grpc-go客户端源码分析代码讲解基于v1.37.0版本。和grpc-go服务端源码分析一样,我们先看一段示例代码,const ( address = "localhost:50051" defaultName = "world")func main() { // Set up a connection to the server. conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())

2021-06-11 15:02:30 27306 2

转载 Spark 系列(一)—— Spark 简介

Spark 系列(一)—— Spark 简介一、简介Spark 于 2009 年诞生于加州大学伯克利分校 AMPLab,2013 年被捐赠给 Apache 软件基金会,2014 年 2 月成为 Apache 的顶级项目。相对于 MapReduce 的批处理计算,Spark 可以带来上百倍的性能提升,因此它成为继 MapReduce 之后,最为广泛使用的分布式计算框架。二、特点Apache Spark 具有以下特点:使用先进的 DAG 调度程序,查询优化器和物理执行引擎,以实现性能上的保证;多语

2021-06-08 00:34:39 31392

转载 Spark性能调优-RDD算子调优篇

Spark性能调优-RDD算子调优篇RDD算子调优1. RDD复用在对RDD进行算子时,要避免相同的算子和计算逻辑之下对RDD进行重复的计算,如下图所示:对上图中的RDD计算架构进行修改,得到如下图所示的优化结果:2. 尽早filter获取到初始RDD后,应该考虑尽早地过滤掉不需要的数据,进而减少对内存的占用,从而提升Spark作业的运行效率。本文首发于公众号:五分钟学大数据,欢迎围观读取大量小文件-用wholeTextFiles当我们将一个文本文件读取为 RDD 时,输入的每一行

2021-06-08 00:27:40 31626

原创 Golang面向并发的内存模型

Golang面向并发的内存模型在早期,CPU都是以单核的形式顺序执行机器指令。Go语言的祖先C语言正是这种顺序编程语言的代表。顺序编程语言中的顺序是指:所有的指令都是以串行的方式执行,在相同的时刻有且仅有一个CPU在顺序执行程序的指令。随着处理器技术的发展,单核时代以提升处理器频率来提高运行效率的方式遇到了瓶颈,目前各种主流的CPU频率基本被锁定在了3GHZ附近。单核CPU的发展的停滞,给多核CPU的发展带来了机遇。相应地,编程语言也开始逐步向并行化的方向发展。Go语言正是在多核和网络化的时代背景下诞生

2021-06-07 11:04:40 39394

原创 gRPC-go源码(2):ClientConn

gRPC-go源码(2):ClientConn摘要在上一篇文章中,我们聊了聊gRPC是怎么管理一条从Client到Server的连接的。我们聊到了gRPC拥有Resolver,用来解析地址;拥有Balancer,用来做负载均衡。在这一篇文章中,我们将从代码的角度来分析gRPC是怎么设计Resolver和Balancer的,并会从头到尾的梳理一遍连接是怎么建立的。1 DialContextDialContext是客户端建立连接的入口函数,我们看看在这个函数里面做了哪些事情:func DialCo

2021-06-07 10:59:46 39615

原创 gRPC-go源码(1):连接管理

gRPC-go源码(1):连接管理1 写在前面在这个系列的文章中,我们将会从源码的层面学习和理解gRPC。整个系列的文章的计划大概是这样的:我们会先从客户端开始,沿着调用路径逐步分析到服务端,以模块为粒度进行学习,考虑这个模块是为了解决什么问题,然后思考gRPC应该怎么去解决这个问题。在分析完这部分的架构设计后,我们会在接下来的一篇文章中研究具体的代码实现。因此,这个系列的文章不会像之前的源码分析那样贴一大段的代码,然后加上注释。这样做不但使得阅读成本很高,而且很难学到除了代码实现以外的东西。我们

2021-06-07 10:49:03 39841

原创 Golang的调度模型

Golang中的内存模型The Go memory model specifies the conditions under which reads of a variable in one goroutine can be guaranteed to observe values produced by writes to the same variable in a different goroutine.翻译过来就是说,Go内存模型通过定义以下的条件,来保证在一个goroutine可以观察到另外

2021-06-07 10:28:18 39416

原创 Golang Web入门(4):如何设计API

Golang Web入门(4):如何设计API摘要在之前的几篇文章中,我们从如何实现最简单的HTTP服务器,到如何对路由进行改进,到如何增加中间件。总的来讲,我们已经把Web服务器相关的内容大概梳理了一遍了。在这一篇文章中,我们将从最简单的一个main函数开始,慢慢重构,来研究如何把API设计的更加规范和具有扩展性。1 构建一个Web应用我们从最简单的开始,利用gin框架实现一个小应用。在这这篇文章中,我先不使用MySQL和Redis,缓存和持久化相关的内容我将在以后的文章中提到。在这个系列中,我

2021-06-07 10:11:04 39950

原创 Golang Web入门(3):如何优雅的设计中间件

Golang Web入门(3):如何优雅的设计中间件摘要我们上篇文章已经可以实现一个性能较高,且支持RESTful风格的路由了。但是,在Web应用的开发中,我们还需要一些可以被扩展的功能。因此,在设计框架的过程中,应该留出可以扩展的空间,比如:日志记录、故障恢复等功能,如果我们把这些业务逻辑全都塞进Controller/Handler中,会显得代码特别的冗余,杂乱。所以在这篇文章中,我们来探究如何更优雅的设计这些中间件。1 耦合的实现方式比如我们要实现一个日志记录的功能,我们可以用这种简单粗暴的

2021-06-07 09:47:32 39664

原创 Golang Web入门(2):如何实现一个RESTful风格的路由

Golang Web入门(2):如何实现一个RESTful风格的路由摘要在上一篇文章中,我们聊了聊在Golang中怎么实现一个Http服务器。但是在最后我们可以发现,固然DefaultServeMux可以做路由分发的功能,但是他的功能同样是不完善的。由DefaultServeMux做路由分发,是不能实现RESTful风格的API的,我们没有办法定义请求所需的方法,也没有办法在API路径中加入query参数。其次,我们也希望可以让路由查找的效率更高。所以在这篇文章中,我们将分析httprouter这个

2021-06-07 09:38:38 39960

原创 Golang Web入门(1):自顶向下理解Http服务器

Golang Web入门(1):自顶向下理解Http服务器摘要由于Golang优秀的并发处理,很多公司使用Golang编写微服务。对于Golang来说,只需要短短几行代码就可以实现一个简单的Http服务器。加上Golang的协程,这个服务器可以拥有极高的性能。然而,正是因为代码过于简单,我们才应该去研究他的底层实现,做到会用,也知道为什么这么用。在本文中,会以自顶向下的方式,从如何使用,到如何实现,一点点的分析Golang中net/http这个包中关于Http服务器的实现方式。内容可能会越来越难理解,

2021-06-07 09:32:01 39767 1

原创 Golang入门(4):并发

Golang入门(4):并发摘要并发程序指同时进行多个任务的程序,随着硬件的发展,并发程序变得越来越重要。Web服务器会一次处理成千上万的请求,这也是并发的必要性之一。Golang的并发控制比起Java来说,简单了不少。在Golang中,没有多线程这一说法,只有协程,而新建一个协程,仅仅只需要使用go关键字。而且,与Java不同的是,在Golang中不以共享内存的方式来通信,而是以通过通信的方式来共享内存。这方面的内容也比较简单。1 线程与协程在Golang中,并发是以协程的方式实现的。在Java

2021-06-07 09:28:45 39850 4

原创 Golang入门(3):一天学完GO的进阶语法

摘要在上一篇文章中,我们聊了聊Golang中的一些基础的语法,如变量的定义、条件语句、循环语句等等。他们和其他语言很相似,我们只需要看一看它们之间的区别,就差不多可以掌握了,所以作者称它们为“基础语法”。在这篇文章中,我们将聊一聊Golang的一些语言特性,这也是Golang和其他语言差别比较大的地方。除此之外,还有一部分内容是关于Golang的并发,这一部分将在下一篇文章中介绍。1 结构体在Java中,我们已经体会过了面向对象的方便之处。我们只需要将现实中的模型抽象出来,就成为了一个类,类里面定义了

2021-06-07 09:19:17 41261 2

原创 Golang入门(1):安装与配置环境变量的意义

摘要在几年前学习Java的时候,环境的配置就会劝退一部分的初学者。而对于Golang来说,也需要从环境的配置开始学起。这一篇文章将从如何安装Golang开始讲起,随后将会提到Golang中的环境变量GOROOT和GOPATH的配置以及这两个环境变量起到什么样的效果。下面开始:安装和其他语言的安装类似,golang的安装我们也可以采用三种方式进行,从简单到复杂依次是通过可执行文件的安装、官方二进制包安装和源码编译安装。我们可以在这里获取最新版本的go安装文件。在这里解释一下,其实二进制文件的安装和

2021-06-06 00:36:06 65351 2

原创 Golang入门(2):一天学完GO的基本语法

摘要在配置好环境之后,要研究的就是这个语言的语法了。在这篇文章中,作者希望可以简单的介绍一下Golang的各种语法,并与C和Java作一些简单的对比以加深记忆。因为这篇文章只是入门Golang的第二篇文章,所以本文并不会对一些指令进行深挖,仅仅只是停留在“怎么用”的程度,至于“为什么是这样”,则涉及到了具体的应用场景和汇编指令,作者将会在以后的文章中进行介绍。1 导包总所周知,“Hello World”是程序员的一种仪式感。而这一行“Hello World”,一定会涉及到输入输出相关的方法。所以,如

2021-06-06 00:31:15 75408 7

原创 gRPC-go 入门(1):Hello World

gRPC-go 入门(1):Hello World摘要在这篇文章中,主要是跟你介绍一下gRPC这个东西。然后,我会创建一个简单的练习项目,作为gRPC的Hello World项目。在这个项目中,只有很简单的一个RPC函数,用于说明gRPC的工作方式。此外,我也会跟你分享一下我初次接触gRPC所遇到的一些坑,主要是在protocol buffer的proto-gen-go插件上面。简单介绍在这一节的内容中,我将简单的跟你介绍一下gRPC这个东西。 RPC的全称是Remote Procedur

2021-06-06 00:29:01 65684 4

转载 Python多线程(自学必备 超详细)

多线程技术多任务1.1 多任务的概念多任务:在同一时间内执行多个任务[可以把每个任务理解为生活当中的每个活]1.2 现实生活中的多任务操作系统可以同时运行多个任务。比如,你一边打游戏,一边和队友沟通,这就是多任务操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。单核cpu是并发的执行多任

2021-06-06 00:22:14 65546 2

原创 ORM中的事务和锁、Ajax异步请求和局部刷新、Ajax文件上传、日期时间类型的Json、多表查询图书系统

一、ORM中的事务和锁事务事务要确保原子性"""事务 ACID 原子性:不可分隔的最小单位 一致性:跟原子性是相辅相成 隔离性:事务之间相互不干扰 持久性:事务一旦确认永久生效 事务的回滚 rollback 事务的确认 commit"""# 目前是需要from django.db import transactionwith transaction.atomic(): 开启事务 # sql1 # sql2 # 的with代码块中写的

2021-06-06 00:19:15 66783 1

原创 views视图函数-模板语法

一、Django基础–views视图函数“这是我参与更文挑战的第2天,活动详情查看: 更文挑战”视图 CBV和FBVFBVfunction based view ,平常用函数写的就是FBVCBVclass based view ,用面试对象的方式就是CBV from django.views import Viewclass xxx(View): def dispatch(self, request, *args, **kwargs): return super()

2021-06-06 00:16:24 65027

转载 Django基础-Web框架-URL路由

Django基础-Web框架-URL路由一、Django基础–Web框架MVC和MTV框架MVC把Web应用分为模型(M)、视图(V)、控制器(C)三层,他们之间以一种插件式的,松耦合的方式联系在一起。模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接收用户的输入调用模型和视图完成用户的请求。MTVDjango的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:M 代表模型(Model): 负

2021-06-06 00:09:55 64488

原创 Django模型层--多表操作

三种表关系:一对一、一对多、多对多。一、创建模型OneToOneField() 一对一ForeignKey() 一对多 多对一ManyToManyField() 多对多#添加外键 一对多 多对一class Book(models.Model):name = models.CharField(max_length=32)# 添加外键ForeignKeypublishers = models.ForeignKey(Publisher, on_delete=models.CASCAD

2021-06-06 00:05:55 64543 2

转载 云原生分布式应用运行时 Dapr 在阿里的实践

Dapr 是什么?Dapr是一个开源、可移植、事件驱动的云原生分布式应用运行时,它使开发人员能够轻松地构建运行在云平台和边缘的弹性而微服务化的无状态和有状态的应用程序,从而降低基于微服务架构构建现代云原生应用的准入门槛。Dapr 的名字来源于分布式应用运行时( Distributed Application Runtime)的缩写。为什么我们选择Dapr?在阿里巴巴,Java 使用非常广泛,不仅仅业务应用大量使用 Java,大量中间件和基础能力的服务器端也是使用 Java 开发。在过去十几年间,我们

2021-06-03 00:28:19 77927

原创 避免从单体到分布式单体

回顾:从单体到微服务到Function在过去几年间,微服务架构成为业界主流,很多公司开始采用微服务,并迁移原有的单体应用迁移到微服务架构。从架构上,微服务和单体最大的变化在于微服务架构下应用的粒度被“拆小”:将所有业务逻辑都在一起的单体应用,按照领域模型拆分为多个内聚而自治的“更小”的应用。而Function则在拆分上更进一步,拆分粒度变成了“单个操作”,基于 Function 逐渐演进出现 FaaS 形态和 Serverless 架构。在微服务和 serverless 的喧嚣中,也逐渐出现了很多质疑

2021-06-03 00:21:07 77386 1

原创 HashMap中的hash算法的几个思考

HashMap中哈希算法的关键代码//重新计算哈希值static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);//key如果是null 新hashcode是0 否则 计算新的hashcode}//计算数组槽位 (n - 1) & hashHashMap的细节我们不谈,只看这个哈希算法的细节(h = ke

2021-06-02 23:58:44 77758

转载 POLL原理分析与java实战

在linux2.5.44首次引入epoll,它设计的目的旨在取代既有的select、poll系统函数,让需要大量操作文件描述符的程序得以发挥更优异的性能(wikipedia example: 旧有的系统函数所花费的时间复杂度为O(n), epoll的时间复杂度O(log n))。epoll实现的功能与poll类似,都是监听多个文件描述符上的事件。epoll底层是由可配置的操作系统内核对象建构而成,并以文件描述符(file descriptor)的形式呈现于用户空间(from wikipedia: 在操作系

2021-06-02 23:51:30 77821

原创 【Kubernetes】浅析基本概念和原理

摘要:本文从 Kubernetes (K8S) 的几个核心概念入手,对 K8S 的整体架构设计进行了概括性分析,进而对 K8S 的认证、授权、准入控制的相关内容进行了介绍。1 核心概念和架构设计1.1 概念与层级关系Image 镜像的运行得到 Container 容器。Pod 内可以有一个或者多个容器,Pod 中的容器运行在一台机器上且共享网络,有一个唯一的 IP,每个 Pod 中会有一个 Pause 容器,Pause 容器作为根容器,将 Pod 中的其他容器连接在一起。Pod 会负责内部容器的健康

2021-05-30 12:45:04 88377 1

原创 K8S 核心组件 kubelet 与 kube-proxy 分析

kubeletkubelet 进程用于处理master 下发的任务, 管理pod 中的容器, 注册 自身所在的节点.节点管理启动参数说明--register-node #如果设置为true 则会向api server 注册自身node,如果设置为false 需要管理员手工配置--api-server # api server 的位置 ip 地址或域名--kubeconfig # kubeconfig 文件, 用于访问 api server 的安全配置文件--cloud-provider: #云

2021-05-30 12:38:54 91120

原创 containerd客户端工具nerdctl的使用

containerd客户端工具nerdctl的使用一、安装containerdyum install containerd.io cri-tools -y出现异常:Delta RPMs disabled because /usr/bin/applydeltarpm not installed.yum provides '*/applydeltarpm' yum install deltarpm -y启动containerd并设置开机自动启动systemctl enable conta

2021-05-30 12:18:38 113783 1

原创 kubeadm部署K8S集群并使用containerd做容器运行时

kubeadm部署K8S集群并使用containerd做容器运行时前言去年12月份,当Kubernetes社区宣布1.20版本之后会逐步弃用dockershim,当时也有很多自媒体在宣传Kubernetes弃用Docker。其实,我觉得这是一种误导,也许仅仅是为了蹭热度。dockershim是Kubernetes的一个组件,其作用是为了操作Docker。Docker是在2013年面世的,而Kubernetes是在2016年,所以Docker刚开始并没有想到编排,也不会知道会出现Kubernetes这个

2021-05-30 11:29:52 111625

原创 构造方法注入和设值注入有什么区别

请注意以下明显的区别:(1)设值注入支持大部分依赖注入,如果我们仅需要注入int、string和long型的变量,不要用设值方法注入。对于基本类型,如果没有注入,可以为基本类型设置默认值。构造方法注入不支持大部分依赖注入,因为在调用构造方法时必须传入正确的构造参数,否则会报错。(2)设值注入不会重写构造方法的值。如果我们对同一个变量同时使用了构造方法注入和设值注入,那么构造方法将不能覆盖设值注入的值。很明显,因为构造方法只在对象被创建时被调用。(3)在使用设值注入时还不能保证某种依赖是否已经被注入,也

2021-05-30 11:27:41 110577

Halcon联合C#实现车牌智能识别

Halcon联合C#实现车牌智能识别 里面提供了课程中使用所有素材 绝对的原创 欢迎下载

2023-07-31

Halcon联合C#实现模板定位+IC元件引脚间距测量与统计实战

Halcon联合C#实现模板定位+IC元件引脚间距测量与统计实战

2023-07-31

Halcon的3D点云数据处理案例,基于Halcon联合C#实现

Halcon的3D点云数据处理案例,基于Halcon联合C#实现

2023-07-31

空空如也

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

TA关注的人

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