自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 gorm 输出sql到文件

最近写项目的时候碰到个问题需要sql调出来看看,然后发现sql被淹没了 ,后面想着把sql输出到文件里这样就不会淹没了,主要是注册gorm的时候用自定义的打印方法 由于他源码是调用的本身自带的Printf方法,所以很简单,自己创建个就好了。

2023-01-04 17:44:56 1590 1

原创 k8s节点亲和性权重控制调度(阿里云k8s重新部署失败)

一般驱逐pod都是用的污点,但是我们的pod已经在运行了,这里我就用的亲和性来调度了。按照上面的示例给对应的节点打上不同的标签 然后给对应的pod设置yaml就好了。我用的是.spec.affinity.nodeAffinity来设置的。上面的是k8s的文档 几乎所有都能在上面找到。

2022-12-26 11:22:16 446

原创 跟着阿昌学习day3-【go基础知识】Content(上下文)探究

go基础知识

2022-09-18 00:28:45 699

原创 跟着阿昌学习day2-【go基础知识】结构体比较

go基础知识

2022-09-16 22:33:17 1142

原创 跟着阿昌学习day1-【docker入门】代码打包运行

docker入门

2022-09-15 23:54:49 699

原创 【docker入门】docker 安装本地环境

docker入门

2022-08-19 07:38:33 938

原创 mysql 两段式提交

mysql 两段式提交

2022-06-22 17:54:18 554

原创 mysql 三个日志总结

mysql 三个日志总结

2022-06-22 17:20:02 242

原创 golang gc (三色标记法+混合写屏障)归纳

随着对go语言的深入学习,逐渐了解到了go的gc实现,晚上关于go gc的发展及过程的文章非常的多,这里我就不继续整了,我就单独总结一下gc的几个知识点吧

2022-06-21 23:06:25 1119

原创 go 内存逃逸

接触go后就经常碰到一个概念 就是内存逃逸,今天就来分析一下内存逃逸一:什么叫内存逃逸首先go的变量要不在栈上要不在堆上,栈上的变量会在函数销毁的时候就释放了,堆上的就要靠gc算法来了,我们一般说从栈逃逸到堆上或者一开始直接就在堆上的变量内存叫做内存逃逸二:什么时候会内存逃逸 引起内存逃逸的关键就是,编译器在编译的时候无法确定确定变量的生命周期,只能在运行时控制了函数返回了局部变量的指针 发送指针或者带有指针的数据进channel 在切片上存储指针或...

2022-04-28 17:29:20 2674 1

原创 gorm自定义语句 (自定义字段相等之类的)

最近开发时碰到个要给一个字段赋值为另一个字段的值 但是直接些的时候总数会产生引号,找了很久发现gorm有gorm.Expr可以原生的展示需要的语句 所有就愉快的解决了

2022-04-22 12:12:12 518

原创 go csp 并发 channel 通道方案

自从转go后 经常看到go提倡的csp处理并发,一直没有太了解,一是没有碰到对应的需求,二是网上搜csp并发都是些概念,有代码示例的少之又少,不过里一直有个疙瘩,这个csp并发到底是咋回事,最近花了点时间了解了下,下面的代码一看就能看懂了package mainimport ( "fmt")func main() { // 创建3个channel,A,B和Exit A := make(chan bool) B := make(chan bool) Exi...

2022-02-28 09:25:55 204

原创 go泛型出来前怎么写通用的方法

go没有泛型一直以来都为人诟病,好在go的泛型已经接近完成了 最快在1.18版本就要正式出来了(有点小激动),那么在泛型没出来前要怎么写通用的方法呢,相信大家都经常碰到过明明需要的功能都差不多 就是因为里面的类型是string 和 int不同,硬是要写两个方法,感觉这样非常不优雅且方便,于是研究了下通过反射可以实现类似泛型的功能(当然指常见的) 话不多说上代码// 数组转字符串 (泛型出来前准备) ps:[1,2,3,4] => 1,2,3,4func ArrayToString(arr i

2022-01-27 17:45:10 313

原创 go range 遍历为啥是乱序的

最近碰到map遍历无序的问题,感觉有点坑,后面感觉不管怎么样的储存结构,存进去了顺序应该就定死了的,不至于会变,然后在学习的过程中发现这是因为map的结构扩容会导致数据顺序与扩容前不同,也就是说如果你数据是不动的,那理论上遍历顺序也是一样的,但是因为有这个扩容情况存在,导致go的团队直接将map的遍历改成随机了,直接杜绝了程序员依赖遍历顺序的这种情况...

2022-01-12 17:24:40 755

原创 go 并发锁的方法

直接上代码var wg sync.WaitGroupwg.Wait()wg.Add(1)defer wg.Add(-1)一开始是这么想的 因为go宣传用csp处理并发所以就想着用协程等待的方法实现,后面感觉如果同事进入wait方法还是有bug的 ,于是开始找cas锁,最后发现go的核心库是有这个并发锁的 愉快的使用了var lock sync.Mutexlock.Lock()defer lock.Unlock()...

2022-01-12 17:12:45 364

原创 Lock wait timeout exceeded; try restarting transactio 解决方法

今天突然碰到这个报错,字面意思是锁定等待超时;尝试重新启动事务处理后面查出来是因为代码开启了事务但是没有提交,最后愉快的解决//所有事务SELECT * FROM information_schema.INNODB_TRX;先查出所有在运行的事务 然后删除对应的线程id kill 线程id 就好了...

2021-12-15 16:28:44 833

原创 golang 返回有序json字段

最近写go语言的时候发现返回的json数据总是排好序了的,对于特定的需求这个有点麻烦,后面研究发现map结构json的时候有进行排序因为急着用 就先用了二维切片先返回了,后面发现map遍历的时候是无序的 可能因为这个原因就导致json的时候排序了 下面介绍方法了方法也很简单 就是用结构体转json 这时候结构就还是结构体的顺序// 创建结构体 type person struct { Bc int Abc int D int C int ...

2021-12-02 18:21:13 1181

原创 go 中 结构体 map互转

go中用gorm查询的时候往往会用到结构体来定义返回的列表 但是有时候需要拓展字段返回的时候就会觉得很麻烦了 研究了下发现通过转json可以实现结构体和map的互转 代码如下 // 结构体转map param是需要转换的结构体 var PosOrders map[string]interface{} str, _ := json.Marshal(param) _ = json.Unmarshal([]byte(str), &PosOrders) // map转结构......

2021-11-29 15:52:48 1611

原创 gorm+goroutine 协程请求mysql

最近公司要优化一些比较慢的接口,然后就找到慢的sql 加索引优化,然后发现有一类的问题都是属于count比较慢的 表数据虽然只有几百万但是sql中用了or加了索引也是很慢,最后决定先用协程将列表和count异步请求,这样就将程序时间限制在执行count中了,因为查列表的时间大大的少于count时间。 先上第一波代码 var wg sync.WaitGroup wg.Add(1) // 协程 go func(dbq *gorm.DB) { // ...

2021-11-16 10:13:57 1225

原创 mysql find_in_set与like

日常开发中,我们会碰到一对一 一对多 多对多的情况,这里我们就单独把一对多拿出来研究下,一般来说一对多可以用一张表记录一对多的关系,但是有时候直观展示还有表结构的时候会有点复杂,这时我们就会用另一种方案,用一个字段 然后用逗号把一对多的关系存到主表上,这样就相当于我们把关系表并入到主表里了,这时候我们就能开开心心的在主表里就能看到从表的关系了 有利也有弊,如果我们用了逗号拆分关系表,这时候如果想只查某一个关系的时候就麻烦了由于无法区分 我们只能用like %% 来查询...

2021-11-08 12:10:12 2428

原创 go 中Interface{} 转string

func GetInterfaceToString(value interface{}) string { // interface 转 string var key string if value == nil { return key } switch value.(type) { case float64: ft := value.(float64) key = strconv.FormatFloat(ft, 'f', -1,.

2021-10-28 15:39:45 9236

原创 go 中Interface{} 转int

go中interface类型很好用,但是有时候用了就没办法作为键值了 这点就比较头痛了,这里介绍一种转换方法,非常好用​func GetInterfaceToInt(t1 interface{}) int { var t2 int switch t1.(type) { case uint: t2 = int(t1.(uint)) break case int8: t2 = int(t1.(int8)) break case uint8: t2 = in...

2021-10-28 15:37:57 10692

原创 支付宝,微信支付回调一直请求问题

今天突然碰到个一直回调的问题,如图后面研究发现是因为新增退款的时候没有返回success给支付宝微信,支付宝微信回调没有收到success,下面是支付宝的解释注意返回的success不能有双引号,...

2021-09-09 10:53:15 393

原创 翻转单向链表

首先我们了解下单向链表的结构如图 head往后的节点上一个存着值val一个存着next表示下一个节点翻转我们一般有两种方法1 遍历法public static Node reverseList(Node node){ Node pre = null; Node next= null; while(node){ // 备份next next = node.next; // 断节点 node.next.

2021-09-08 17:01:00 94

原创 java传参传的是引用还是值

经常听别人说java传的都是值,但是又会经常碰到传对象进去方法,方法中修改对象,方法外的对象也会改,经过了解发现java所有对象传的都是值,不过这个值是原来堆中对象的一份引用的拷贝,当然有几种特殊情况1.传char int 这类基础类型 由于基础类型是直接在栈里,不存在引用情况,所以当参数是基础类型的时候会复制一份新的值传过去,这时再怎么改变都跟原来的值无关了2.传的是integer,string这类的常用引用类型 string integer这类...

2021-09-06 16:54:25 167

原创 Elasticsearch,Elasticsearch-head,kibana后台启动

装了这三个软件后有一次突然挂了,这里记录一下后台启动的命令Elasticsearch 直接在es安装目录 运行 bin/elasticsearch即可Elasticsearch-head直接在安装目录 运行 npm run start &即可kibana 直接在安装目录 运行 bin/kibana即可...

2021-09-06 14:41:02 392

原创 io nio 和aio介绍

我们正常传统的通过流读取文件是阻塞式的 效率比较低,今天就来了解下java io的几种方式对比对比总结 BIO NIO AIO IO方式 同步阻塞 同步非阻塞 异步非阻塞 API使用难度 简单 复杂 复杂 可靠性 低 高 高 吞吐量 低 高 高 BIO适用于连接较少,对服务器资源消耗很大,但是编程简单。是同步阻塞的。举例:你到餐馆点餐,然后在那儿等着,什么也做不了,只...

2021-09-02 16:31:01 245

原创 php composer自动加载原理

php的包依赖工具现在是开发必备的,但是它是怎么加载到我们的项目里的呢,具体流程是 autoload.php 通过ClassLoader加载autoload_static.php (静态映射)初始化并通过spl_autoload_register注册;然后就是最核心的部分了,composer 实现自动加载的秘密,如何把获取到的命名空间转换为对应的文件目录。ClassLoder 的 register() 函数将 loadClass() 函数注册到PHP的 SPL 函数堆栈中,每当PHP遇...

2021-09-01 16:10:22 253

原创 spring bean中BeanFactory与ApplicationContext区别

spring 中可以通过beanfactory 和ApplicationContext 这两个类进行创建bean组件两者的具体区别是什么呢1.beanfactory 延迟注入,当使用某个bean的时候才会注入,所以启动时会更快,启动后占用更少的内存2.applicationcontext 会一次性创建所有的bean,不但有beanfactory功能且扩展了以下功能1) 国际化(MessageSource) 2) 访问资源,如URL和文件(Re...

2021-08-30 15:48:28 183

原创 高并发场景的几种处理方法

作为后端开发,高并发场景是一个绕不过去的坎,今天就来整理下常见的几种思路(暂时不考虑分布式的情况)一.并发锁 首先我们要知道高并发下会出现某一个时刻流量猛增,还有就是如果是抢购之类的库存类并发可能会导致超卖库存为负数之类的,对于并发锁来说主要是解决抢购超卖问题的,并不能很好的解决流量猛增给服务器带来的压力,有时候甚至会加重服务器的压力,所以我们并发量小及服务器配置比较高的时候可以用并发锁来处理,下面就介绍几种常用的并发锁 1.synchronize(同...

2021-08-25 15:44:57 5872

原创 java jvmGC

我们都知道java是依靠jvm进行跨平台的,具体流程是.java文件→编译器(javac)→.class字节码文件→解释器→运行这其中将字节码解释成对应平台的执行集的工作就是交给jvm,这样我们只需要专注写代码,jvm帮我们将操作系统和硬件都隔离开了,所以说,我们为了写的代码都是运行在jvm上的,内存操作也都是通过jvm的,所以我们今天要谈的垃圾回收就要通过jvm来讲。一、jvm内存结构 垃圾回收其实就是对jvm内存中无用的对象进行删除,其中jvm运行时内存主要分为5块它们...

2021-08-18 16:30:52 264

原创 nginx负载均衡的几种方法介绍

随着项目越来越大,越来越复杂,一台机器已经无法再满足项目所需的性能要求了,所以就发展出了多台机器分担一个项目,下面我们就来介绍一下负载均衡的几种方式, 首先我们用nginx做负载均衡,思路是用一台主的nginx服务器做网关,将请求转发给其他子服务器,这样我们就能使用多台服务器的性能了,(注意:所有的子服务器数据库最好用一个远程的,session问题可以用redis来代替)一、轮询 这是nginx负载均衡默认的方法,顾名思义,就是按照子服务器顺序一个个的...

2021-08-17 16:13:59 937

原创 bean 自定义初始化,销毁的几种方法

我们都知道bean在声明式定义中可以通过xml文件注入还有@bean,@Component注解来定义bean,不过在spring4以后已经渐渐开始提倡使用注解方式来声明bean了,这里我们就按照注解方式声明来讲了我们都知道bean的生命周期要经历 获取bean名→无参实例化→依赖注入(属性赋值)→(BeanPostProcessor)初始化前→初始化→(BeanPost...

2021-08-09 14:21:37 741

原创 http三次握手与四次挥手

我们都知道http协议是无状态的,且只能通过客服端向服务器发起请求,所有每次请求将伴随着一次的连接的开启与关闭。那么具体是怎么个流程保证开启和关闭正常进行的呢,这就要引出我们今天要谈的三次握手(连接)和四次挥手(断开连接)了三次握手: 三次握手主要是用来建立http协议的期间主要过程是1:客户端发送了一个带有SYN的Tcp报文到服务器,这个三次握手中的开始。表示客户端想要和服务端建立连接。2:服务端接收到客户端的请求,返回客户端报文,这个报文带有SYN和AC...

2021-08-06 11:33:21 524

原创 回文算法的几种情况

先梳理一下简单的一些回文算法的邀请,一般会有四种需求,1.判断字符串是否是回文串2.取出字符串中最长的回文串或者回文串长度3.将字符串分割为一个回文串4.列出字符串中所有回文串的可能我们一个个来(这里就用php来实现,主要是提供思路)一 字符串是否是回文串 这个其实很简单,只需要把字符串翻转对比一下是否相等就能判断了实现:function partition($s) { $s = strval($s); // 是不是回文 ...

2021-08-05 18:19:41 503

原创 redis分布式锁的正确方式

网上找分布式锁的时候发现有两种错误的方式很普遍的流传着,这里就介绍一种比较正确的redis实现分布式锁的方法吧,首先让我们来看看两种错误示范错误一:使用setnx + key过期来实现 介绍下redis的setnx(key,value)方法是SET IF NOT EXIST,意思是只有当key不存在的时候才能设置,这样我们的我们就能当一台机器一台机器通过setnx 获取到锁了,其他的机器就没办法获取了,然后通过给他key设置expire(过期时间)来防止死锁,但是这种情况...

2021-07-23 14:53:34 149

原创 mysql索引简单总结

我们都知道现在mysql索引一般都用的b+树结构,上次我们总结了索引的结构,这次我们来实际看看索引在什么时候不触发以及怎么查看索引吧总结了下:mysql索引一般有下面几种情况不触发如果条件中有 or ,即使其中有条件带索引也不会命中(这也是为什么尽量少用or的原因) like查询是以%开头,如果是int型索引不会命中,字符型的命中 'test%' 百分号只有在右边才可以命中 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引 没有查询条件,或者查询条件...

2021-07-22 09:21:25 354

原创 IOC容器(控制反转)

容器化现在是一种趋势,不过与docker那种运行环境容器化不一样 ioc容器一般是指应用本身不负责依赖对象的创建和维护,依赖对象的创建和维护是由外部容器负责的称为控制反转(容器化)。简单来说就是对对象实例的松耦合,防止因为类的依赖过于复杂实例化复杂,一般来说就是先注册类到容器里 ,想用的时候再通过容器进行调用...

2021-07-21 16:47:20 156

原创 redis数据结构(编码)

众所周知,redis作为一个nosql有5种数据类型,那么redis 是怎么存储这些数据的呢redis可以用object encoding命令进行查询内部编码类型一.stringint:8个字节的长整型。 embstr:小于等于39个字节的字符串。 raw:大于39个字节的字符串。二.hashziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个),    同时所有值都小于hash-max-ziplist-valu

2021-07-21 14:18:19 209

原创 redis持久化策略

众所周知,redis基于内存的一个nosql,但是它也是支持持久化的,平常会备份到硬盘里,然后开机后就从硬盘里恢复到内存里,这样一来就不得不提它两个持久化策略了一.RDB (默认)1.介绍 rdb快照是redis默认的持久化方法,它主要的流程是如果在指定时间内,redis数据改变了多少次就触发子进程去备份 则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis 重启会通过加载dump.rdb文件恢复数据。一般默认有900秒修改...

2021-07-21 13:52:14 1218

空空如也

空空如也

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

TA关注的人

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