带孩子做网站/长沙seo排名收费
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- go学习
- 快捷键及快速生成代码片段
- go基础
- 循环
- 流程控制关键字
- 切片,拷贝
- 函数
- 闭包
- defer语句
- 格式化输出
- go语言随机数rand.seed()
- 包管理
- 并发编程
- goroutine
- channel
- 设计模式
- 工厂模式
- 单例模式
- 抽象工厂模式
- 适配器模式
- 享元模式
- 并发编程
- 协程原理
- 创建协程
- 停止协程
- 线程休眠、协程休眠
- 协程状态
- 协程安全
- 共享变量和临界区
- 协程安全数据类型
- channel通道
- 通道缓冲
- 超时处理
- 非阻塞通道
- 定时器
- Ticker
- 协程同步
- 协程通信方法
- 等待和通知
- go中协程同步和共享内存的方法
- go中锁的类型
- 条件变量Cond
- golang死锁
- 协程池
- golang Context在协程中的使用
- sync.Once
- GMP
- 网络编程
- tcp流行框架
- epoll相关
- 操作系统如何知道数据对应哪个socket
- 如何同时监听多个socket数据
- epoll的原理和流程
- CSRF攻击
- url组成
- Restful风格编程
- HttpRouter
- 单元测试
- 反射
- 时间处理库Carbon
- 一些零碎内容
- zookeeper
- 特点
- 数据模型
- CAP理论
- 选举机制
- Rabbitmq
- 消息中间件
- kafka
- 零碎知识
- seed
- salt
go学习
使用go的一个目的就是解决并发的问题
go语言特点:天生支持高并发 语法简单 内置runtime,支持垃圾回收 可以直接编译成机器码,不依赖其他库 有丰富的标准库,可跨平台编译
快捷键及快速生成代码片段
行注释:shift+/ 块注释:shift+Alt+a 查找文件:ctrl+e
go基础
循环
go中的循环只有for循环,使用更加简洁:for 、for range
流程控制关键字
break continue goto
切片,拷贝
由于数组长度定义好之后不能改变,所以我们可以使用切片的方式来使其可以进行增删改查;赋值的方式是直接将地址赋值,所以我们一般在修改其中一个,另一个也会随之改变;而使用拷贝的方式就只会拷贝其中的值,修改拷贝之后的不会对原有的进行改变
函数
go中的函数就是一级公民,没有类的概念
闭包
闭包+函数+引用环境
defer语句
go语言中的defer语句会将其后便跟随的语句进行延迟处理。且将延迟处理的语句按defer定义的逆序进行执行;
按照其直到return前才会执行的特性,可以用来做资源清理;
用途:关闭文件句柄 锁资源释放 数据库连接释放
格式化输出
%% %字面量
%b 一个二进制整数,将一个整数格式转化为二进制的表达方式
%c 一个Unicode的字符
%d 十进制整数
%o 八进制整数
%x 小写的十六进制数值
%X 大写的十六进制数值
%U 一个Unicode表示法表示的整型码值
%s 输出以原生的UTF8字节表示的字符,如果console不支持utf8编码,则会乱码
%t 以true或者false的方式输出布尔值
%v 使用默认格式输出值,或者如果方法存在,则使用类性值的String()方法输出自定义值
%T 输出值的类型
go语言随机数rand.seed()
go语言中的随机数是通过rand.Seed(种子值seedNum)设置种子值,rand.Intn(n int64)获取小于n的随机数。那么获取随机数n之前,需要设置种子值,作用是同一种子值下,同一n,rand.Intn(n),获取的随机数是相同的。不同种子值,同一n,rand.Intn(n),获取的随机数是不同的。尽量保持种子值的随机性,一般采用系统时间的毫秒值作为种子值,因为系统时间的毫秒值是一直变动的。
包管理
一个文件夹下只能有一个package(这里指直接包含的go文件,如果有子目录,那么子目录和父目录分开谈)
一个package文件不能在多个文件夹下,如果一个go文件需要使用不同目录下的同名package,需要在import这些目录时为每个目录指定一个package别名;多个文件夹下有重名的package,其他他们彼此无关
并发编程
除了使用channel实现之外还可以使用mutex互斥锁
goroutine
Goroutine的创建成本很低,可以轻松创建成千上万个
Goroutine的栈空间会根据需要自动增长或收缩
Goroutine之间的通信通过channel进行,更安全方便
Goroutine可以通过调度器在多个操作系统线程之间进行调度,实现并发执行
channel
channel是Goroutine之间进行通信的管道,用于发送和接收值,作用是实现Goroutine之间的同步和数据传递,通过channel,不同的Goroutine可以安全的共享数据
设计模式
工厂模式
也就是创建一个工厂类负责实例化对象;如工厂负责创建产品,客户端访问工厂类负责实例化具体产品
单例模式
可以保证该系统中,使用该模式的类一个类只有一个实例,即一个类只有一个对象实例:垃圾回收器、数据库连接池都是单例模式
抽象工厂模式
抽象工厂模式是围绕一个超级工厂,创建其他的工厂;在工厂模式中,一个具体的工厂对应一种具体的产品,但是,有时候我们需要工厂可以提供多个产品对象,而不是单一产品对象
适配器模式
适配器模式是作为两个不兼容接口之间的桥梁,将一个类的接口转换为另一个类的接口,使得原本因为接口不兼容而不能一起工作的类可以一起工作
享元模式
减少内存的使用,提高程序的性能;可用sync.Pool实现享元模式,可用于重用和存储对象,对象池可以减少对象的创建和销毁,从而提供程序性能
并发编程
协程原理
1、协程是一种轻量级线程,可以在一个操作系统线程中
2、同时运行多个协程
3、协程的调度和执行由go运行时自动管理,我们无需手动控制线程和协程的创建和销毁
4、协程采用了M:N调度器的模型,M调度器用于管理和调度操作系统线程,N调度器用于管理和调度goroutine
5、当一个goroutine遇到IO操作或者阻塞时,M调度器会将其从操作系统线程中移除,转而将其存放到一个专门的goroutine队列中等待唤醒
创建协程
使用go关键字创建一个协程
停止协程
使用context.Context停止一个协程
使用channel进行协程的关闭
使用布尔变量
线程休眠、协程休眠
线程休眠:可以用time.sleep()来实现
协程休眠:线程休眠的本质是让当前线程进入阻塞状态,而协程休眠就是使用协程来实现非阻塞的休眠
协程状态
分为四种:新建状态 运行状态 阻塞状态 死亡状态
协程安全
协程安全的解决办法:
使用互斥锁
使用读写锁
使用通道
避免共享状态
共享变量和临界区
共享变量指多个线程和协程都可以访问和修改同一个变量,临界区是指在程序执行过程中,访问共享变量的代码块
在编写并发程序时,要仔细设计共享变量和临界区且使用适当的同步机制来保证协程安全,例如添加互斥锁
协程安全数据类型
在使用协程时,要注意哪些数据类型是协程安全的、哪些是不安全的。避免因数据竞争问题导致程序出现异常
基本数据类型、字符串、管道都是协程安全的,可以在多个协程间共享使用
切片虽然是协程安全的,但需要注意在多个协程之间对同一切片进行读写操作时,可能出现数据竞争问题;Map是非协程安全的
channel通道
可以通过make()来创建 可以通过chan来定义
通道缓冲
是发送方可以在接受方准备好接受数据之前发送多个值,而不必等待接收方,当缓冲区满之后就会阻止发送方,直到有空间
超时处理
可以用time.After()实现超时处理
非阻塞通道
select语句和default分支实现了非阻塞通道
定时器
go中可以用time包创建定时器,分为单次定时器和重复定时器
单次定时器:time.After()
重复定时器:time.Tick() time.NewTicker()
Ticker
Ticker类型是一个定时触发的定时器,与Timer类型相似,都是基于是时间的调度器;不过Ticker会重复触发,而Timer只会触发一次
协程同步
指多个协程之间按照一定的顺序执行,从而避免数据竞争和死锁
可以通过协程通信来实现:互斥锁 条件变量 信号量 原子操作
协程通信方法
channel通道 共享内存 waitgroup Mutex互斥锁 Atomic原子操作
等待和通知
可以用以下三种方法:channel sync包中的waitgroup Cond类型来实现
go中协程同步和共享内存的方法
sync.Mutex和sync.Cond channel WaitGroup Atomic Select
golang协程可见性问题也可以用锁和原子操作来保证
go中锁的类型
Mutex RWMutex Cond Once
条件变量Cond
Cond常用方法:
Wait() 等待条件变量,阻塞当前协程,释放锁
Signal() 通知一个等待的协程继续执行,通常与lock()Unlock()一起使用
Broadcast() 通知所有等待的协程继续执行,通常与lock()Unlock()一起使用
golang死锁
发生的原因:
Mutex的嵌套使用 预分配资源不足 通道读写顺序不当
避免死锁的方法:
避免互斥锁的嵌套使用,采用更高级的同步原语:读写锁、条件变量(Cond)等
避免使用全局变量,尽量使用局部变量或者通道传递数据
使用带缓冲区的通道,可避免协程阻塞等待通道的读写操作
使用超时机制
使用可重入函数,避免函数内部调用一个可能会阻塞的函数
协程池
协程池是一个管理和复用协程的技术
golang Context在协程中的使用
例如使用WithTimeout方法创建超时上下文防止后台任务无限期等待
通过使用context可以有效控制协程之间的通信和请求处理,并避免无限期等待和死锁等问题
sync.Once
通过使用Once可以确保一个操作只会被执行一次,避免重复执行导致的问题;例如编写单例模式就可以使用到它
GMP
GMP是golang中调度器的三个重要组成部分之一,是Goroutine执行器
G 代表轻量级线程 M 代表调度器线程 p 代表逻辑处理器
GMP为Golang提供了高效、轻量级的并发模型
GMP调度器的主要任务是将协程绑定到线程上,然后调度器执行线程;为了高效调度,调度器使用了很多优化手段:如抢占式调度
网络编程
tcp流行框架
gRPC
Gnet
TcpServer
Gorilla websocket
epoll相关
网卡将数据写入内存之后,网卡向cpu发出一个中断信号,操作系统便能知道有新数据到来,再通过网卡中断程序去处理数据
进程阻塞不会占用cpu资源是因为进程A阻塞之后,它的引用会被添加到等待队列中,A不会继续往下执行代码,所以也不会占用cpu资源
操作系统如何知道数据对应哪个socket
一个socket对应一个端口号,网络数据包中包含了ip和端口信息,内核可以通过端口号找到对应的socket
如何同时监听多个socket数据
select:西安准备一个数组存放所有需要监视的socket,调用select,如果所有socket都没有数据,就会被阻塞,知道其中有socket接收到数据,select返回并唤醒进程;最后再遍历存放socket的数组,就可以找到就绪的socket
epoll设计思路:(功能分离、就绪列表)
先用epoll_ctl维护等待队列,再用epoll_wait阻塞进程
内核维护一个就绪列表,引用收到数据的socket,当进程别唤醒之后,只要获取就序列表的内容就可以知道哪些socket收到了数据
epoll的原理和流程
创建epoll对象:某个进程调用epoll_create方法时,内核就会创建一个eventpoll对象;由于内核要维护就序列表等数据,而这些数据都可以是eventpoll的成员
维护监视列表 :当socket收到数据后,中断程序会操作eventpoll对象,而不是直接操作进程。
接收数据:当socket收到数据后,中断程序会给eventpoll的“就绪列表”添加socket引用;eventpoll对象相当于是socket和进程之间的中介,socket的数据接收并不直接影响进程,而是通过改变eventpoll的就绪列表来改变进程状态。当程序执行到epoll_wait时,如果rdlist已经引用了socket,那么epoll_wait直接返回,如果rdlist为空,阻塞进程
阻塞和唤醒进程:当socket接收到数据,中断程序一方面修改rdlist,另一方面唤醒eventpoll等待队列中的进程,进程A再次进入运行状态(如下图)。也因为rdlist的存在,进程A可以知道哪些socket发生了变化。
CSRF攻击
在web应用中CSRF是一种常见的安全威胁,为了防御它,可以在cookie中添加CSRF token,每次请求进行验证,来保证安全
url组成
由协议、服务器、端口、路径、查询五部分组成
Restful风格编程
相对于SOAP和XML-RPC,REST更加简单明了;他是一个资源定位、资源操作的风格,只是一种风格;
HttpRouter
HttpRouter是一种轻量级高性能的golang HTTP请求路由器;
gin框架就是以HttpRouter为基础开发的
单元测试
创建测试用例测试函数
可以使用helper函数让报错定位更加准确
setup/teardown视为在调用m.Run()前后做一些额外的准备和回收工作
反射
Go语言中的反射是指在运行时检查程序的结构、变量类型和值,并可以动态地操作它们的能力。反射包(reflect package)提供了一组函数,可以在运行时进行类型检查、获取和修改变量的值、调用方法等。
时间处理库Carbon
一些零碎内容
bcrypt:更加高级的加密算法,密码一般都会用这个加密算法进行加密
访问控制框架: casbin
使用swagger生成api接口文档;它可以根据注释来生成接口文档
jwt:是一种跨域认证解决方案,它规定了一种token实现方式,多用于前后端分离项目中
viper:golang配置管理库,很多项目都用它来构建,像docker等等
新特性工作区workspace;用在一个大型项目分为几个小项目,想要互相导包就需要使用这个工作区,否则不同的项目之间不能互相导包
泛型:就是函数的参数,支持更多的类型,而并不是某一特定的类型
cast:golang类型转换工具;cast.ToString()等等
flag:用flag包处理命令行参数
zookeeper
特点
顺序一致性 原子性 单一视图 可靠性 实时性(伪实时性)
数据模型
树形结构,是由ZNODE节点组成的树形结构
CAP理论
指在一个分布式系统中,一致性、可用性、分区容错性只能同时满足两个
选举机制
使用基于ZAB协议的leader选举机制;节点间相互通信,通过提议和投票确定新的leader,当收到多数节点的票数即成为新的leader
Rabbitmq
消息中间件
基于队列与消息传递技术,在网络环境中提供同步或异步,可靠的消息传输的支撑性软件系统
消息中间件的模式:点对点模式 发布订阅模式
kafka
为了对kafka消息进行分类,保存在kafka中的数据按照主题(topic)进行了逻辑分类;为了实现负载均衡和水平扩展,kafka将主题划分为多个分区(partition),会根据分区规则选择把消息存储在哪个分区中;kafka副本能够对抗部分服务器宕机带来的数据不可用情况
kafka集群中每个服务器被称作broker
kafka不会向消费者推送消息,消费者必须从kafka主题分区中提取消息
消费者组最大的并行度等于该主题的分区数
零碎知识
seed
seed通常用于生成随机数序列,种子的选择对生成的随机数序列具有重要影响。如果使用相同的种子,将获得相同的随机数序列。因此,在实际应用中,通常会使用不可预测的种子,例如使用时间戳或其他随机数来设置种子,以获得更随机的结果。
salt
“salt”(盐)是一种随机生成的数据,用于增加密码哈希的安全性。哈希函数是将输入数据转换为固定长度的输出,通常用于存储密码的散列值。
使用盐可以防止相同的密码在哈希过程中产生相同的散列值。通过将盐与密码组合,并进行哈希运算,可以生成一个唯一的散列值。这样,即使两个用户使用相同的密码,由于使用了不同的盐,最终生成的散列值也会不同。
在Go语言中,可以使用crypto/rand包来生成随机的盐。例如,可以使用rand.Read()函数生成随机的字节切片作为盐。然后,将盐与密码进行组合,并使用哈希函数(如SHA256)对其进行哈希运算,以生成最终的散列值。
相关文章:

golang学习随记
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 go学习快捷键及快速生成代码片段go基础循环流程控制关键字切片,拷贝函数闭包 defer语句格式化输出go语言随机数rand.seed() 包管理并发编程goroutinecha…...

【PCL-6】PCL基于凹凸型的分割算法(LCCP)
凹凸型分割算法适用于颜色类似、棱角分明的物体场景分割。LCCP方法不依赖点云颜色,只使用空间信息和法线信息。 算法流程: 1、基于超体聚类的过分割; 2、在超体聚类的基础上再聚类。 算法思路: 1、基于CC和SC判断凹凸性&…...

多进程并发服务器
文章目录 思路问题多进程并发回环服务器代码客户端代码 思路 每当一个客户端连接服务器后,创建一个子进程负责与该客户端通信,客户端断开连接之后,服务器回收子进程资源。 问题 问题1:父进程阻塞在等待连接(accept())处…...

2021秋招总结
2021 秋招总结 作为星球第一批准备秋招的人,经过这几个月的面试之后,感觉也算是有一些小小的经验了吧,就做一个简单的记录,希望能够为星球中准备秋招的伙伴们提供一些参考吧~ 序 4月初加入星球,到9月底,一…...

Linux6.34 Kubernetes yaml文件详解
文章目录 计算机系统5G云计算第三章 LINUX Kubernetes yaml文件详解一、yaml文件概述1.查看 api 资源版本标签2.写一个yaml文件demo 计算机系统 5G云计算 第三章 LINUX Kubernetes yaml文件详解 一、yaml文件概述 Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式…...

防火墙笔记
什么是防火墙 在计算机网络中是指设置在可信任的内部网络和不可信任的外部网络之间的屏障,通过强化边界控制保障内容安全,同时不妨碍内部对外部的访问。 20世纪80年代,最早的防火墙几乎与路由器同时出现,第一代防火墙主要基于包过…...

使用代码下载开源的大模型文件示例以及中文微调llama资源汇总:
一、下载示例 from huggingface_hub import snapshot_downloadrepo_id "THUDM/chatglm2-6b" local_dir ./chatglm2-6b/ cache_dir local_dir "/cache" while True:try:snapshot_download(cache_dircache_dir,local_dirlocal_dir,repo_idrepo_id,loca…...

Wav2vec2 论文阅读看到的一些问题
Wav2vec2 论文阅读看到的一些问题 这里只是简单的思考一下论文的一些问题,不是论文解读。 Q1. 为什么wav2vec依旧需要Transformer来做推理,而不直接使用VQ生成的内容? A1. Transformer在更长的序列上有更好的编码效果,例如论文也写…...

爬虫学习记录(持续更新)
一、问题记录 1.使用webdriver报错AttributeError: str object has no attribute capabilities 解决:目前使用的selenium版本是4.11.2,可以不必设置driver.exe的路径,selenium可以自己处理浏览器和驱动程序,因此,使用…...

libevent源码学习1---创建event
libevent源码学习1—创建event Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的非阻塞网络库。安装请参考ubuntu下载安装libevent event_base 使用 libevent 函数之前需要分配一个或者多个 event_base 结构体。每个 event_base 结构体持有一个…...

Python类的设计
Python类的设计 # 定义一个闹钟类 class Clock:__cureen_keyNone # 私有成员不能改变和使用def __init__(self, id, price): # 类对象是立即自动执行self.id idself.price pricedef ring(self):import winsound # 内置声音方法winsound.Beep(2000,3000)clock1 Clock(…...

微信小程序的项目解构
视频链接 黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署)_哔哩哔哩_bilibili 接口文档 https://www.escook.cn/docs-uni-shop/mds/1.start.html 1:微信小程序宿主环境 1:常见的宿…...

【Archaius技术专题】「Netflix原生态」动态化配置服务之微服务配置组件变色龙
前提介绍 如果要设计开发一套微服务基础架构,参数化配置是一个非常重要的点,而Netflix也开源了一个叫变色龙Archaius的配置中心客户端,而且Archaius可以说是比其他客户端具备更多生产级特性,也更灵活。*在NetflixOSS微服务技术栈…...

python条件分支和循环语句
python中没有{}的写法,一般时通过缩进的方式来确定分支和循环需要执行的代码块。 if 需要判断的条件表达式:条件成立时的动作 elif 需要判断的条件表达式:条件成立时的动作 else:动作for 变量 in 迭代对象:动作 示例: while 退出条件:动作...

工具推荐:Wireshark网络协议分析工具(对比tcpdump)
文章首发地址 Wireshark是一款开源的网络协议分析工具,可以捕获网络数据包并对其进行详细的分析和解释。下面是Wireshark的详细介绍: Wireshark 工作原理 Wireshark通过捕获网络接口上的数据包,将其转换为可读的格式,并在界面…...

[OnWork.Tools]系列 04-快捷启动
简介 主要功能是将常用的软件拖动到软件中,实现快速点击启动,结合软件设置中的设置的快捷键,可以快速呼出对应的面板,使用快捷键快速启动应用 拖拽内容 拖拽快捷方式到面板,双击快速打开 拖拽文件方式到面板,双击快速打开 拖拽文件夹到面板双击快速打开 拖拽项目调整顺序 右…...

如何将项目挂后台运行?【nohup和tmux】
挂后台运行,防止霸屏。 线上的程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息。 一.nohup--挂后台运行的命令 //nohup--英文全称no hang up,可以后台运行指定命令 //hello.log是指将日志输出到hello.log文件 …...

什么是进程、线程、协程
什么是进程? 我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序…...

Python爬虫——selenium_访问元素信息
from selenium import webdriver# 创建浏览器对象 path files/chromedriver.exe browser webdriver.Chrome(path)# 访问地址 url https://www.baidu.com browser.get(url)input browser.find_element_by_id(su)获取元素属性 .get_attribute(class)print(input.get_attribu…...

Linux 文件基本属性
Linux 文件基本属性 Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。 为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。 在 Linux 中我…...

CSS 盒模型是什么?它包含哪些属性?标准盒模型/怪异盒模型
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 盒模型⭐ 标准盒模型⭐ 怪异盒模型⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感…...

VB+SQL光盘信息管理系统设计与实现
摘 要 我的毕业设计课题为“光盘管理系统”,该系统完成光盘相关信息的输入、保存和维护、是按照方便用户、容易操作、确保数据一致完整的原则进行设计。这次毕业设计的开发工具是Visual Basic 6.0,操作平台是Windows2000 Professional中文版,选用的数据库后台是SQL server2…...

MySQL5.7数据库、Navicat Premium1.6可视化工具安装教程【详细教程】
文章目录 一、MySQL、Navicat、注册机地址二、安装(一)、MySQL安装(二)、Navicat Premium安装(三)、集活Navicat Premium 三、遇到的问题1、Are you sure your navicat has not beenpatched/modified befor…...

JVM 调优实例
点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ JVM提供了多种垃圾回收器,可以根据应用程序的需求选择最适合的垃圾回收器。例如,如果应用程序需要更快的响应时间,可以选择并行垃圾回收…...

Python numpy中的correlate相关性详解
看代码看见这个方法,记录一下,这个是人家官网的链接np.correlate 云里雾里的,其实就是两个数组点乘,不同模式就是错位点乘,直接看代码 a是原本的数组,v就是滤波器,对应相乘 import numpy as …...

用python实现xmind用例转换为excel/csv用例
from xmindparser import xmind_to_dict from openpyxl import Workbook# 解析XMind文件 xmind_file path/to/xmind/file.xmind xmind_data xmind_to_dict(xmind_file)# 创建Excel文件 excel_file path/to/excel/file.xlsx wb Workbook() ws wb.active# 定义用例表格的列名…...

论文浅尝 | 面向多步推理任务专业化较小语言模型
笔记整理:张沈昱,东南大学硕士,研究方向为自然语言处理 链接:https://github.com/FranxYao/FlanT5-CoT-Specialization 动机 本文的动机是探索如何在多步推理任务中通过大型语言模型提升较小的语言模型的性能。作者认为࿰…...

基于Java的新闻全文搜索引擎的设计与实现
中文摘要 本文以学术研究为目的,针对新闻行业迫切需求和全文搜索引擎技术的优越性,设计并实现了一个针对新闻领域的全文搜索引擎。该搜索引擎通过Scrapy网络爬虫工具获取新闻页面,将新闻内容存储在分布式存储系统HBase中,并利用倒…...

golang 自定义exporter - 端口连接数 portConnCount_exporter
需求: 1、计算当前6379 、3306 服务的连接数 2、可prometheus 语法查询 下面代码可直接使用: 注: 1、windows 与linux的区分 第38行代码 localAddr : fields[1] //windows为fields[1] , linux为fields[3] 2、如需求 增加/修改/删除…...

MoveTowards详解
MoveTowards详解(Unity中的方法) 介绍 MoveTowards是Unity引擎中的一个方法,用于在两个点之间进行平滑移动。它可以使游戏对象从当前位置移动到目标位置,通过在每一帧更新位置,实现平滑的移动效果。 方法 MoveTowa…...