- 博客(57)
- 收藏
- 关注
原创 windows安装及使用protobuf
到https://github.com/protocolbuffers/protobuf/releases下载对应安装包。继续在cmd里运行 go version查看版本号,确保golang的环境变量也配置好了,要不然后边会非常麻烦。编写proto文件时,在头部加上这句,指定文件生成路径,"/"指在当前包下。把解压的文件路径到bin目录下一整个复制,添加到环境变量path目录下。下载这两个插件是分别生成pb.go和grpc.pb.go文件的。下载之后解压到自己需要放的位置。新建一个文件xxx.proto。
2024-08-01 16:30:06
384
原创 git submodule 使用
这个命令会初始化并更新子模块。如果子模块尚未被初始化,则–init会初始化它;如果子模块已经初始化,则–init会更新它。初始化父仓库:如果你还没有创建父仓库,先创建它。这个选项会递归地初始化和更新子模块中的子模块。
2024-08-01 16:09:22
358
原创 mysql索引命名规则
另外,MySQL还支持自动命名索引,如果没有显式指定索引名称,则MySQL会根据表名、列名和索引顺序自动生成索引名称。但是,建议显式命名索引,以便更好地管理和理解索引的用途。需要注意的是,索引命名规则没有严格的规定,可以根据个人或团队的偏好和约定进行自定义。关键是保持一致性和可读性,使得其他开发人员能够轻松理解和维护代码。MySQL索引的命名规则通常是根据一些约定和最佳实践来命名,以提高索引的可读性和维护性。
2023-06-19 11:53:54
2815
原创 golang redis set集合使用
Set 是一个无序的字符串集合,每个元素都是唯一的。这个例子展示了如何使用 Go 语言的 github.com/go-redis/redis 库来操作 Redis Set。如果删除成功,返回删除的元素数量。3、判断元素是否存在:使用 SISMEMBER key element 命令检查一个元素是否存在于 Set 中。4、获取 Set 中的所有元素:使用 SMEMBERS key 命令获取 Set 中的所有元素。5、获取 Set 中的元素数量:使用 SCARD key 命令获取 Set 中的元素数量。
2023-04-18 11:08:39
617
原创 gorm update返回受影响行数
在这个示例中,我们定义了一个 updateUserEmail 函数,该函数接受数据库连接、用户 ID 和新的电子邮件地址作为参数。然后,我们使用 db.Model(&user) 指定要更新的模型,并使用 Where(“id =?接下来,我们调用 Updates 方法并传入一个包含要更新的字段的映射。如果 RowsAffected 等于 0,表示没有行受到影响,可能是因为没有找到具有指定 ID 的用户。在 GORM 中,你可以使用 Updates 方法更新数据库记录并获取受影响的行数。
2023-04-12 09:59:18
1484
原创 prometheus client_golang 使用详解
在这里,我们引入了 Prometheus 客户端库,并定义了一个简单的 HTTP 服务器。接下来,我们将定义一些 Prometheus 指标,例如计数器(Counter)、仪表(Gauge)和直方图(Histogram)。// Counter 示例 var httpRequestsTotal = prometheus . NewCounterVec(prometheus . CounterOpts {
2023-03-31 14:31:32
2156
原创 golang应用程序使用prometheus监控
Prometheus 是一个开源的监控和警报工具包,用于收集和处理应用程序和系统的指标数据。Go 语言(Golang)是一种快速、简洁和并发友好的编程语言,非常适合开发高性能的后端服务。为了使用 Prometheus 监控 Go 语言编写的应用程序,你需要用到 Go 客户端库。
2023-03-30 14:29:16
1093
原创 Prometheus 和 Grafana使用
Prometheus 和 Grafana 是两个用于监控和分析系统性能的流行工具。它们通常一起使用,以便更好地收集、可视化和理解系统指标。
2023-03-30 11:58:56
463
原创 RPC和HTTP的区别
RPC调用和HTTP调用协议RPC是通常基于TCP/IP协议HTTP基于HTTP协议效率RPC 比 HTTP效率高复杂度RPC 比 HTTP复杂。涉及RPC框架,服务注册与发现,服务治理。长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。RPC 通常在大型网站中使用。小型网站直接使用HTTP就可以...
2021-11-04 18:35:36
242
原创 DeprecationWarning: count is deprecated. Use Collection.count_documents instead
python警告: 提示count方法已经过时,更换为count_documents原写法:count = udisk_db["t_chunk_repair_task"].find({"id":id}).count()修改后的写法:count = udisk_db["t_chunk_repair_task"].count_documents({"id":id})警告消失
2021-08-06 18:26:20
970
原创 Linux安装JDK1.8(附安装包下载地址!)
Linux-jdk1.8下载地址点击下载 jdk1.8-linux提取码:h40h1、将安装包上传至Linux服务器2、创建安装文件夹创建install mkdir -p /export/install3、解压到install文件夹中tar -zxvf /jdk-8u144-linux-x64.tar.gz -C /export/install/4、配置环境变量4.1 编辑文件vim /etc/profile.d/java.sh4.2 将内容复制到文件中export J
2021-07-08 11:40:49
15796
4
原创 实现mongodb远程连接
1、配置mongodb.conf查看是否有mongodb.conffind / -name mongodb.conf如果没有,在mongodb安装目录下创建mongodb.confvi mongodb.conf插入下列内容:dbpath = /usr/local/mongodb/data/db #数据文件存放目录 logpath = /usr/local/mongodb/logs/mongodb.log #日志文件存放目录 port = 27017 #端口 fork = tru
2021-06-18 18:30:05
804
1
原创 Mac版Idea完全卸载
解决方法如下:删除~/Library/Preferences/jetbrains.jetprofile.asset.plist删除~/Library/Caches/JetBrains删除~/Library/Application\ Support/JetBrains删除~/Library/Logs/JetBrains总结:删除操作使用 rm -rf,所有的代码如下(xxx替换成自己的用户名):rm -rf /Users/xxx/Library/Preferences/jetbrains.
2021-06-09 14:13:32
2087
原创 git合并某次提交到当前分支
有的时候,在develop分支开发,是大家公用的开发分支,但是只想合并自己提交的到master,如何操作呢?那就要用cherry-pick了。语法 :git cherry-pick commitid首先,git log查看自己提交的log,找到版本号,如最近的版本号是 9caedb2313425a953cb59bf36878f539465e2b20例如:git cherry-pick 9caedb2313425a953cb59bf36878f539465e2b20如果想合并多个提交到当前分
2021-01-28 13:49:38
389
原创 supervisor常用命令使用
简介supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。1.启动任务supervisorctl start 【服务名】2.查看单个任务状态supervisorctl status 【服务名】3.
2021-01-05 16:25:39
408
1
原创 go语言:go(goroutine)如何控制异步
Go 语言是一种并发编程语言,在 Go 里有一个非常重要的关键字 go(goroutine),一般我们可以用它做一些异步,并发的任务。goroutine 用来调用函数,当某个函数被 go 关键字调用后,go 就会创建一个类似协程的东西,来执行这个函数,这样可以轻易的实现并发。示例:package mainimport ( "fmt")func main() { go work1() go work2() fmt.Println("[全部完成]")}func work1(){ fmt
2020-12-16 16:34:22
6705
1
原创 sync.WaitGroup用法说明
WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组、团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行。WaitGroup能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成。WaitGroup总共有三个方法:Add(delta int),Done(),Wait()。简单的说一下这三个方法的作用。Add:添加或者减少等待goroutine的数量;Done:相当于Add(
2020-12-16 16:01:24
4669
原创 Docker删除镜像
1、通过 ID 删除镜像docker rmi (image id)如:docker rmi 62aa7aaf9ba02、删除镜像的限制docker rmi 62aa7aaf9ba0报这个错的时候,说明通过该镜像创建的容器未被销毁,镜像是无法被删除的~此时,需要停止容器docker stop 64023b01b7e7然后删除容器最后再删除镜像这样,镜像就被正常删除了3、清理镜像我们在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命
2020-09-10 15:52:43
477
转载 group by和select的使用
GROUP BY的用法1、group by概述:简单来说:将数据库的数据用’by’后面接的规则进行分组,即将一个大数据库分成一个个相同类型数据在一起的小区域。2、group by的语法:SELECT column_name, function(column_name) //此处的function()函数是指SQL中的一些聚合函数,例如:MAX(),MIN(),SUM(),AVG(),COUNT()等等FROM table_nameWHERE column_name operator value
2020-08-14 15:04:32
9129
转载 golang 遍历时元素指针问题(转载)
问题golang 执行for 遍历时取value的指针时容易出错代码实现package mainimport (“log”“time”)type student struct {Name stringAge int}func main() {m := make([]*student, 3)stus := []student{student{Name: “sa”, Age: 10},student{Name: “sb”, Age: 11},student{Name: “sc
2020-07-06 17:24:27
548
原创 Mysql大小写敏感引发的bug
首先对大小写敏感的情况如下:MySQL 在 Linux 下数据库名、表名、列名、别名大小写规则是这样的: 1、数据库名与表名是严格区分大小写的; 2、表的别名是严格区分大小写的; 3、列名与列的别名在所有的情况下均是忽略大小写的; 4、变量名也是严格区分大小写的;MySQL 在 Windows 下都不区分大小写。...
2020-07-01 16:34:21
149
原创 Eureka注册中心
服务治理是微服务架构体系中,不可或缺的重要的一部分。SpringCloud 中对 Netflix Eureka 进行了再封装,将其作为默认的推荐的服务注册中心。Spring Cloud Eureka 是一个基于 Rest 的服务,提供了基于 Java 的客户端,非常方便快捷的使用。 **它主要包括两个组件:Eureka Server 和 Eureka Client** Eureka C...
2020-01-09 17:24:14
109
原创 oracle死锁级别locked_mode
1级锁有:Select,有时会在v$locked_object出现。2级锁有:Select for update,Lock For Update,Lock Row Shareselect for update当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select f...
2019-12-31 11:51:52
14514
原创 oracle数据库死锁解决
第一步:查询是哪张表死锁,确认你要操作的表是否死锁select b.owner,b.object_name,a.session_id,a.locked_mode from vKaTeX parse error: Expected 'EOF', got '#' at position 120: …,b.sid,b.serial#̲,logon_time fro…locked_object a,v$...
2019-12-31 11:47:44
413
原创 java同步与异步的异同
Java中交互方式分为同步和异步两种,异同情况如下:同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。 区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C...
2019-08-16 10:35:53
216
转载 HashMap原理深入理解
hashing(散列法或哈希法)的概念散列法(Hashing)是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。对比:Hashtable、HashMap、TreeMapHashtable 是早期Java类库提供的一个哈希...
2019-07-23 10:23:54
72
转载 HBase详解(很全面)
【转自:http://jiajun.iteye.com/blog/899632】一、 简介historystarted by chad walters and jim2006.11 G release paper on BigTable2007.2 inital HBase prototype created as Hadoop contrib2007.10 First useable...
2019-06-18 11:31:43
181
原创 关于TCP三次握手,这是我见过最好的解读了,通俗易懂
关于TCP协议三次握手的问题,在面试中是最为常见的知识点之一,得到了很多面试官的青睐,如果这个知识点没有掌握好,面试官要是问得深入一点,求职者往往会不知所措。为什么建立连接需要三次握手?首先非常明确的是两次握手是最基本的。第一次握手,客户端发了个连接请求消息到服务端,服务端收到信息后知道自己与客户端是可以连接成功的,但此时客户端并不知道服务端是否已经接收到了它的请求,所以服务端接收到消息后的应...
2019-06-04 11:23:58
638
1
原创 面试系列:JVM工作原理
答题:对于JVM的理解,在我看来有两个重要部分:第一是Java代码编译和执行的整个过程:开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行。Java代码编译和执行的整个过程包含了以下三个重要的机制:1)Java源码编译机制:Java代码编译...
2019-06-03 17:59:02
1052
原创 Oracle表中有数据情况下修改某个字段的精度
一开始建表时候没注意精度问题,后来需求中要求保留三位小数(之前两位),在有数据情况下不能直接使用alter解决思路:先在该表中新增一个临时字段,将之前是需要修改的字段的值赋给临时字段,然后删除需要修改的字段后重新新增三位小数的字段,再将临时字段中的值赋给它,删除临时字段实例:表名-T_AP_DISTRI_SCALE需要修改的字段-N_ACCOUNT_PRICE临时字段-col1alte...
2019-05-31 10:39:22
800
转载 高性能数据库连接池的内幕
大家可能会有这样疑问:连接池类似于线程池或者对象池,就是一个放连接的池子,使用的时候从里面拿一个,用完了再归还,功能非常简单,有什么可讲的。可能还会有这样的疑问:高性能这么高大上,一个小小的连接池,如何跟高大上靠上边的。本主题将会全面介绍连接池原理,高性能的设计,优化实践,现有连接池的瓶颈及解决方案。同时也会介绍唯品会自研数据库连接池产品(代号:Caelus)为什么要有连接池先看一下连接池...
2019-05-29 11:35:11
148
原创 Linux远程管理协议
RFB、RDP、Telnet和SSH目前,常用的远程管理协议有以下 4 种:RDP(remote desktop protocol)协议:远程桌面协议,大部分 Windows 系统都默认支持此协议,Windows 系统中的远程桌面管理就基于该协议。RFB(Remote FrameBuffer)协议:图形化远程管理协议,VNC 远程管理工具就基于此协议。Telnet:命令行界面远程管理协议,...
2019-05-22 20:12:54
970
转载 什么是高并发 ,详细讲解
个人分类: java编程中的问题所属专栏: JAVA结合其他开发语言做项目一、什么是高并发高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用...
2019-05-17 11:14:46
189
原创 oracle查询表中所有列
select * from user_tab_columns where table_name = ‘表名’查询表中列数select count(*) from user_tab_columns where table_name = ‘表名’向表中添加列alter table 表名 add (列名 字段属性 null(不为空,默认可为空))...
2019-05-09 10:27:29
3135
原创 线程池ThreadPoolExecutor实现原理
一、 为什么要使用线程池在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题。因此,在大多数并发框架中都会使用线程池来管理线程,使用线程池管理线程主要有如下好处:1、降低资源消耗。通过复用已存在的线程和降低线程关闭的次数来尽可能降低系统性能损耗;2、提升系统响应速度。通过复用线程,省去创建线程的过程,因此整体上提升了系统的响应速度;3、提高线程的可管理性。线程是稀缺资...
2019-05-07 13:51:20
149
原创 CountDownLatch计数器使用
CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类,可以把它看成是一个计数器,其内部维护着一个count计数,只不过对这个计数器的操作都是原子操作,同时只能有一个线程去操作这个计数器,CountDownLatch通过构造函数传入一个初始计数值,调用者可以通过调用CounDownLatch对象的cutDown()方法,来使计数减1;如果调用对象上的a...
2019-05-07 13:43:21
629
原创 Java--Callable与返回值future
package com;import java.util.concurrent.*;/**Callable and Future用法Callable可以被ExecutorService的submit方法使用,可以取线程执行的返回值;Future是返回值的封装类型:get()方法阻塞当前线程直到获取到返回值isDone()方法判断线程是否执行完成isCanc...
2019-05-07 13:40:30
723
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人