自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Golang死锁发生场景及排查

简单的死锁多发生在函数调用,A函数调用B函数(可能是其他人写的),获取同一把锁,死锁百分百出现。type SafeMap struct { m map[int]int lock sync.RWMutex}func main() { go StartHTTPDebuger() sm := &SafeMap{m: make(map[int]int)} A(sm)}func A(sm *SafeMap) int { sm.lock.Lock() defer sm.loc

2022-04-09 20:58:00 1193

原创 Golang单例模式

sync.Once实现单例模式, 从yml文件获取配置信息。package mainimport ( yml "gopkg.in/yaml.v2" "io/ioutil" "log" "sync")type Config struct { Host string `yaml:"host"` Port int `yaml:"port"`}var ( cfg *Config once = &sync.Once{})// 获取实例对象func GetInstan

2022-04-08 03:29:05 1614

原创 golang的Option选项模式

相信大家在调用一些官方包的函数时,经常会遇到传参为option可选项,尤其是加载配置。当一个函数可选参数较多或者以后需要拓展参数时,不妨使用Option选项模式。package mainimport "fmt"type Config struct { Host string Port int MaxNum int}type Option func(cfg *Config)func WithHost(host string) Option { return func(cfg *Co

2022-03-26 23:10:02 739

原创 【 golang内存逃逸】

golang内存逃逸golang中内存分配有栈(stack)和堆(heap)两种;栈分配:分配速度快,只需要CPU的两个指令“PUSH”和“RELEASE“进行分配和释放。堆分配:分配速度较慢,首先需要找到一块大小合适的内存块,之后还需要gc垃圾回收才能释放。golang中常见的内存逃逸场景1.函数内将局部变量指针返回,被外部引用,其生命周期大于栈,溢出。type User struct {}func NewUser() *User{ user := User{} return &a

2022-03-25 19:06:24 1878

原创 MySQL更新语句执行流程

undolog、redolog、binlog区别与作用undo log(回滚日志)描述及作用:undo log 是引擎层的逻辑日志,记录数据被修改前的值,用于事务失败时rollback,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读。体现事务的原子性。回滚机制:回滚时根据undo记录的日志,进行逆向操作。redo log(重做日志)描述: redo log 是引擎层物理日志,记录的内容是数据页的更改,这个页"做了什么改动"。redo log是循环写的,旧的日志会被新的日志覆盖。.

2021-12-03 19:09:00 116

原创 mysql的explain字段解析

EXPLAIN关键字可以模拟优化器执行SQL查询语句,分析查询语句或者是表结构的性能瓶颈。相关字段含义如下:字段含义id表示执行的优先级,值越大优先级越高(多见于子查询);id值一样的情况下,从上往下顺序执行。select_type表示select的类型,常见取值有simple(简单表,即不使用表连接或者子查询),primary(主查询,即外层的查询),subquery(子查询),union(union关键字后面的select),derived(衍生,from子句的子查询)

2021-10-16 22:39:25 275

原创 go并发模型GPM

线程模型的三种实现方式:用户级线程:M:1对应关系,多个用户态线程对应着一个内核线程,用户态线程的创建、终止、切换、同步等线程工作必须由自身来完成。内核级线程:1:1对应关系,直接调用操作系统的内核线程,所有线程的创建、终止、切换、同步等操作都由内核线程来完成。两级线程:M:N对应关系,这种线程模型会先创建多个内核级线程,然后用自身的用户级线程去对应创建的多个内核级线程,自身的用户级线程需要本身程序去调度,内核级的线程交给操作系统内核去调度。go实现了特殊的两级线程模型,用户调度器实现用户线程到KS

2021-10-16 22:37:44 334

原创 interface与nil比较

go语言中有两种类型的接口,一种是不带方法的接口,底层通过runtime.eface实现(empty face);另一种是带有一组方法的接口,底层通过runtime.iface实现。runtime.eface源码如下:type eface struct { _type *_type //指向类型的指针 data unsafe.Point //指向底层数据}type _type struct { size uintptr // type size ,size 字段存

2021-09-19 21:42:18 200

原创 golang中for range遍历切片

func main() { a := []int{1, 2, 3} var newArr []*int for _, v := range a { newArr = append(newArr, &v) } for _, v := range newArr { fmt.Println(*v) }}$ go run main.go333为什么不是1,2,3呢?原来go语言编译器会在编译阶段会将for range循环转成经典的for i 循环。代码如下:ha :=

2021-09-11 11:19:03 942

原创 重排链表 L0 → L1 → … → Ln-1 → Ln,变成L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

重排链表给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln-1 → Ln请将其重新排列后变为:L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。)链接:https://leetcode-cn.com/problems/reorder-list//重排单向链表func reorderList(head *ListNode) { mid := midNode(he

2021-09-01 11:56:13 328

原创 删除单项链表倒数第n个节点 (双指针法)

删除单项链表倒数第n个节点 (双指针法)type ListNode struct { Val int Next *ListNode}func removeNthFromEnd(head *ListNode, n int) *ListNode { dummy := &ListNode{ Val: -1, Next: head, } slowNode := dummy //慢指针 fastNode := head //快指针 //快指针先向前移动n位 cou

2021-08-31 11:21:11 49

原创 滑动窗口找长度最小的子数组

滑动窗口找长度最小的子数组题目链接:力扣地址给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例:输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。滑动窗口解法:func findSubArrayLen(arr []int, target int) int { i := 0 l := len(arr)

2021-08-28 23:25:05 57

原创 2021-08-19

golang踩坑日记——协程在for循环里引用迭代变量func main(){ wg := sync.WaitGroup{} wg.Add(10) for i := 0; i < 10; i++ { go func() { fmt.Println("Ai: ", i) wg.Done() }() } wg.Wait()}输出结果:Ai: 10Ai: 10Ai: 10Ai: 10Ai: 10Ai: 10Ai: 10Ai

2021-08-19 16:35:53 49

原创 mysql事务

mysql事务事务四大特性原子性:要么全部成功,要么全部失败。一致性:事务前后,数据库的完整性约束没有遭到破坏。隔离性:每个读写事务与其他事务互相分离,互不可见。持久性:事务一旦提交,则其结果就是永久性的。四大隔离级别read uncommitted(读未提交):一个事务读取到其他事务未提交的数据,此现象称为脏读。时间点事务A事务B1开启事务2开启事务3查询数据“张三”,(1,“张三”,18)4修改数据张三,values (1,

2021-03-08 20:17:56 125 1

原创 hystrix-dashboard仪表盘报错:Unable to connect to Command Metric Stream.

最近学习springcloud hystrix组件,启用 HystrixDashboard,输入https://localhost:80/actuator/hystrix.stream后报错:Unable to connect to Command Metric Stream.配置文件加上如下配置management: endpoints: web: expos...

2020-04-21 23:13:30 169

原创 docker容器内使用curl命令,拒绝连接

root@268e5b5bc658:/# curl -v -X POST "http://127.0.0.1:8090/actuator/bus-refresh"* Trying 127.0.0.1...* connect to 127.0.0.1 port 8090 failed: Connection refused* Failed to connect to 127.0.0.1 p...

2020-04-10 22:11:22 8796

原创 springMVC绑定Date

Failed to convert from type [java.lang.String] to type [java.util.Date] for value ‘2019-11-07 23:41:54’; nested exception is java.lang.IllegalArgumentException]]spring mvc数据绑定报错,时间字符串数据与Date类型转换方法:方...

2019-11-08 00:05:49 159

空空如也

空空如也

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

TA关注的人

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