自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Go 并发实战核心编程【一】

Go 并发实战核心编程【一】1. 需求启动一个goroutine,将1-10000的数字放入chan中启动4个goroutine从chan中读取数字,并计算是不是素数是素数就讲结果放入结果chan中最后遍历结果chan,打印素数集合2. 思路这道题思路很简单,首先明确一个点就是这个需求有三种类型的goroutine:第一种类型就是生产者,它主要负责数据的生产;第二种类型就是消费者,他主要负责消费数据做加工;第三种类型就是main goroutine,他主要负责调度这些goroutine并且等待他们退出。明确

2022-04-30 21:36:10 809 2

原创 简历中的项目到底该如何写?面试中该如何介绍项目?看这篇就足够了

简历中的那些项目 前言前几天有人私信问我,说项目这块没啥亮眼的地方,感觉面试官没啥可问的,就直接让他写算法了。后来看群里的问题有很多很相似,那么我抽时间和几位大佬聊了下,在他们面试候选人的过程中更看重项目的什么,聊完之后我总结了下,所以才有了这边文章。1. 一个群友的面经群友说:面试官让他介绍最近在做的项目。他的回答是:他们做的这个项目是XXX,主要是面向XXX用户提供的功能,这个项目已经上线一年了,基本没出过什么问题。然后呢面试官没听出什么亮点,也不知道候选人具体做了什么,就继续追问:你在其中做了什么?.

2022-01-25 15:49:34 13895 3

原创 分布式锁的一些细节问题,值得收藏

聊聊后端面试那些事 分布式锁问题我看在技术大群里面有人问分布式锁问题,说是被面试官各种刁难,我是实在看不下去了,面试官意思很明确,你们有造火箭的经验吗,有的话来他们公司造自行车,没有的话:今天面试就到这里了!但是说实话面试官没必要因为这个问题继续追问,没啥意思,但是又不得不问,确实有些企业用到分布式锁了。没办法,逼迫你必须得背会它。接下来就说下群友面试碰到的问题,因为候选人可能自己已经掌握了实现分布式锁的原理,但是被面试官问到细节可能就不清楚了,因此给大家讲下这块。1. setnx+expire+del问.

2022-01-21 16:05:48 860

原创 Nacos服务注册和发现以及配置管理技术分享,Go中接入非常简单极易上手

Nacos服务发现注册和配置管理分享1. 为什么使用Nacos“因为现在主流公司已经开始推荐使用nacos了,nacos的两大主要作用:一个是服务注册发现,一个是配置管理。”2. Nacos是什么?3. Nacos的结构和组件4. 了解几个Nacos概念5. Nacos角色6. 安装部署安装和部署特别简单,支持单机部署和集群部署,详情可参考nacos的官网。部署完成之后页面长这个样子:对上面几个名词做下解释:7. 配置管理可以从页面导入配置,如下图所示,在dev环境下,新建两个配置文件:service1.

2022-01-19 16:24:46 1553

原创 Go中按次序交替打印1212...,你知道它背后的设计模式吗

聊聊后端面试那些事 让你goroutine交替打印1212...首先这道题看似是两个goroutine交替打印,实则是有很多细节需要考虑,而且背后的设计模式就是生产者消费者模式。代码演示下简单的生产者消费者模式:package mainimport "fmt"func main() { done := make(chan bool) //控制结束退出的信号 ch := mak.

2022-01-18 14:21:08 285

原创 k8s两种部署架构,你们是哪一种?为什么面试官会问你你们怎么部署微服务的呢?

k8s部署的两种策略干货:domain+slb+ingress+svc+pod 模式gateway+registry+pod 模式通过这篇文章我们可以看出,为啥上篇文章需要讲解网关了,因为这篇文章需要用到它,网关很重要哦。还有一个问题就是面试官老是会问你们的部署架构是怎样的,其实这个问题挺简单的,只不过各大公司业务不同,体量不同还有场景不同选择的部署架构有差别,但是总体而言基于k8s的部署无非就这两种,只不过细节上略有差别,今天主要聊聊这两种最基本的基础部署架构。1. 名词介绍1. ingressingre

2022-01-16 19:54:38 2117

原创 Go中都是值传递

聊聊后端面试那些事 Go中都是值传递我看在技术大群里面有人问我,到底值类型,引用类型以及指针类型有什么区别?为什么别人说函数传参是引用传递或者值传递,有的人说是指针传递?想要彻底搞清楚这个问题,你得先通过表现来理解一下,然后在深入源码理解下你很快就会明白的。所以网上说的有可能都是错误的,大家千万别被误导!我们接下来重点解决函数传递参数到底是值传递还是其他类型传递!三者区别值类型 就是变量赋值的时候将直接获得一个真实的数据副本,请大家再次看清楚,真实的"数据"副本。比如var int a = 10,b:=a.

2022-01-15 08:59:41 513

原创 服务稳定性SLA-2015年阿里双十一惨痛的教训

聊聊后端面试那些事 服务稳定性618&&双11作为研发,尤其是后端研发,每年在618或者双11的时候压力特别大,他们祈求服务不要出故障,交易能正常进行,而且期望用户体验非常棒而不是卡顿404等。但是有时候就是事与愿违,比如在2015年11月11日傍晚,大部分用户反馈购物失败的情况,负责双11技术保障的阿里云计算总裁胡晓明回应称,零点开始5分钟内巨量的访问涌入,并创建交易、支付,这相当于一次黑客攻击,对全世界任何公司都是挑战。双11前,公司做过大量压力测试,网络繁忙的情况是在预料之内,好在很.

2022-01-14 10:20:22 566

原创 聊聊后端面试那些事

聊聊后端面试那些事 面试到底要怎么准备面试官心里简历必须真实简历上写的最近的项目必须做到熟悉你掌握的技术必须做到知根知底具备做事的能力简历上没有的软技能态度和心态候选人心里我要刷题 top100?我要准备自我介绍我要熟悉项目我要把数据库相关知识掌握我要把NoSQL相关知识掌握我要把语言层面的知识掌握我要把态度摆端正PK环节面试官问你的问题肯定是你要具备的,但是你具体掌握到什么程度就看你造诣有多深,但是如果问你的问题你确实不知道,那么这个时候你去问下周边小伙伴知不知道,如果不知道那么可能是面试官他想知道你知.

2022-01-13 11:01:41 515

原创 Go微服务架构实战[完整]

Go微服务架构实战本系列文章主要是针对云原生领域微服务架构的实战,包括网关,k8s,etcd以及grpc等相关技术的应用,同时也会把服务发现与注册,熔断,降级,限流以及分布式锁等加入到系列当中作为补充,课程的最后也会安排分布式链路追踪框架的学习,监控平台的搭建以及灰度发布等技术服务,所以总体来讲,课程范围涉及技术领域较广,知识面比较宽,大家下来各取所需尽量做到熟悉和应用,之后有时间了在研究下源码,乐哉!1. 微服务架构上篇1. grpc技术介绍2. grpc+protobuf+网关实战3. etcd技术介绍

2022-01-12 10:39:20 2076 1

原创 Go微服务架构实战 下篇:1. gRPC + Opentracing + Zipkin实现分布式链路追踪系统

Go微服务架构实战Go微服务架构实战目录1. 微服务架构上篇1. grpc技术介绍2. grpc+protobuf+网关实战3. etcd技术介绍4. 基于etcd的服务发现与注册5. 基于etcd的分布式锁实战2. 微服务架构中篇1. k8s架构介绍2. 基于k8s的容器化部署3. 基于k8s的Deployment工作负载4. 基于k8s的ingress实战5. 基于ingress和service实现灰度发布6. 常见的服务治理策略3. 微服务架构下篇分布式链路追踪实战干货:什么是APM什么是Opentr

2022-01-11 17:16:41 953

原创 Go微服务架构实战 中篇:6. 微服务治理策略

Go微服务架构实战Go微服务架构实战目录1. 微服务架构上篇1. grpc技术介绍2. grpc+protobuf+网关实战3. etcd技术介绍4. 基于etcd的服务发现与注册5. 基于etcd的分布式锁实战2. 微服务架构中篇1. k8s架构介绍2. 基于k8s的容器化部署3. 基于k8s的Deployment工作负载4. 基于k8s的ingress实战5. 基于ingress和service实现灰度发布6. 常见的服务治理策略干货:服务容错: 故障转移/快速失败/故障恢复等流量控制:滑动时间窗口/令

2022-01-11 12:35:01 1318

原创 Go微服务架构实战 中篇:5. k8s基于ingress和service实现金丝雀发布和蓝绿发布

Go微服务架构实战Go微服务架构实战目录1. 微服务架构上篇1. grpc技术介绍2. grpc+protobuf+网关实战3. etcd技术介绍4. 基于etcd的服务发现与注册5. 基于etcd的分布式锁实战2. 微服务架构中篇1. k8s架构介绍2. 基于k8s的容器化部署3. 基于k8s的Deployment工作负载4. 基于k8s的ingress实战5. 基于ingress和service实现灰度发布关于灰度发布有好几种方式,比如蓝绿发布,滚动发布以及金丝雀发布。基于它们的表现形式不同,可以在不同

2022-01-10 12:07:22 1333 1

原创 Go并发调度进阶-循环调度,不是你理解的死循环

Go并发调度进阶3. 循环调度所有的GMP初始化工作都已经完成了,是时候启动运行时调度器了。我们已经知道,当所有准备工作都完成后, 最后一个开始执行的调用就是runtime.mstart了。mstart主要功能:确定执行栈的边界启动mstart1设置退出线程标记osStack=true调用mexit(osStack)退出线程再来看下mstart1:如果当前m并非m0,那么要求绑定p开始调用schedule()开始调度所以我们可以看到调度循环schedule无法返回,因此最后一个mexit目前还不会被执行,因

2022-01-09 12:21:51 503

原创 Go微服务架构实战 中篇:4. 基于ingress的限流,路径匹配和重写实战

Go微服务架构实战Go微服务架构实战目录1. 微服务架构上篇1. grpc技术介绍2. grpc+protobuf+网关实战3. etcd技术介绍4. 基于etcd的服务发现与注册5. 基于etcd的分布式锁实战2. 微服务架构中篇1. k8s架构介绍2. 基于k8s的容器化部署3. 基于k8s的Deployment工作负载4. 基于k8s的ingress实战到现在为止我们的服务都是跑在集群内部的,为了让集群外部也能访问,那么我们需要让服务外化,但是因为minikube在mac上是网络不通的,所以我们我们直

2022-01-08 20:58:46 2524

原创 Go并发调度进阶-GMP初始化,最难啃的有时候耐心看完还是很简单的

Go并发调度进阶2. GMP初始化1. M的初始化M 只有自旋和非自旋两种状态。自旋的时候,会努力找工作;找不到的时候会进入非自旋状态,之后会休眠,直到有工作需要处理时,被其他工作线程唤醒,又进入自旋状态。// src/runtime/proc.gofunc mcommoninit(mp *m, id int64) { _g_ := getg() ... lock(&sched.l

2022-01-07 16:11:12 342

原创 Go微服务架构实战 中篇:3. 扩缩容、自愈和故障转移、滚动更新以及回退能力

Go微服务架构实战Go微服务架构实战目录1. 微服务架构上篇1. grpc技术介绍2. grpc+protobuf+网关实战3. etcd技术介绍4. 基于etcd的服务发现与注册5. 基于etcd的分布式锁实战2. 微服务架构中篇1. k8s架构介绍2. 基于k8s的容器化部署基于k8s的Deployment工作负载主要是利用Deployment资源对象实现的,包括一下功能:多副本集扩缩容自愈和故障转移滚动更新回退能力接下来详细了解下操作过程1. 多副本集deploy.yaml中只需修改一下replica

2022-01-06 12:22:46 976

原创 Go微服务架构实战 中篇:2. 基于k8s部署服务和注册中心,验证服务注册和发现

Go微服务架构实战本系列文章主要是针对云原生领域微服务架构的实战,包括网关,k8s,etcd以及grpc等相关技术的应用,同时也会把服务发现与注册,熔断,降级,限流以及分布式锁等加入到系列当中作为补充,课程的最后也会安排分布式链路追踪框架的学习,监控平台的搭建以及灰度发布等技术服务,所以总体来讲,课程范围涉及技术领域较广,知识面比较宽,大家下来各取所需尽量做到熟悉和应用,之后有时间了在研究下源码,乐哉!上篇已经完成,大家可以看下,我这里贴出来了,中篇从这周开始陆续为大家产出,因为太耗费精力,所以还望大家多多

2022-01-05 07:58:29 2049

原创 Go微服务架构实战-中篇 1. k8s架构介绍

Go微服务架构实战本系列文章主要是针对云原生领域微服务架构的实战,包括网关,k8s,etcd以及grpc等相关技术的应用,同时也会把服务发现与注册,熔断,降级,限流以及分布式锁等加入到系列当中作为补充,课程的最后也会安排分布式链路追踪框架的学习,监控平台的搭建以及灰度发布等技术服务,所以总体来讲,课程范围涉及技术领域较广,知识面比较宽,大家下来各取所需尽量做到熟悉和应用,之后有时间了在研究下源码,乐哉!上篇已经完成,大家可以看下,我这里贴出来了,中篇从这周开始陆续为大家产出,因为太耗费精力,所以还望大家多多

2022-01-03 11:31:31 1670 1

原创 Go的slice扩容不是全部都按照1.25扩容的,还有内存对齐的概念,别再被忽悠了

Go的slice扩容机制扩容说实话,我看到别的文章中说slice的扩容很简单,小于1024,按照两倍去扩容;大于等于1024,按照1.25去扩容;像这样不负责任的文章误导初学者使我非常不爽,今天就给大家带来源码级别的slice扩容机制,别怕,一切都是那么简单。1. 先看一个例子(<1024)package mainimport "fmt"func main() { s1 := make([]int, 1023)

2022-01-01 06:00:26 467

原创 CPU缓存读写以及一致性问题,你大学课堂睡过去的现在再温习下,绝对受益颇多

cpu存取数据cpu存取数据大致可以认为是下图的流程(此处图比较简单)cpu拿到需要的内存地址,之后这个地址会被mmu转换成真正的物理地址,接下来会去查接下来查L1 cache,L1 cache不命中查L2 cache,L2 cache不命中查L3 cache,L3 cache不能命中查内存。其实现在查到内存还算完,现在有了虚拟内存,内存其实也是一层cache,是磁盘的cache,也就是说查内存也有可能不会命中,因为内存中的数据可能被虚拟内存系统放到磁盘中了,如果内存也不能命中就要查磁盘。为什么需要cach

2021-12-31 11:25:38 598 1

原创 Go并发调度-调度器设计理念从何而来?为何如此高效?

Go并发调度进阶1. 调度器的基本设计原则和概念我们首先了解一下调度器的设计原则及一些基本概念来建立对调度器较为宏观的认识。理解调度器涉及的主要概念包括以下三个:G: Goroutine,即我们在 Go 程序中使用 go 关键字创建的执行体;M: Machine,或 worker thread,即传统意义上进程的线程;P: Processor,即一种人为抽象的、用于执行 Go 代码的处理器。只有当 M 与一个 P 关联后才能执行 Go 代码。除非 M 发生阻塞或在进行系统调用时间过长时,没有与之关联的 P。

2021-12-30 14:56:21 261

原创 RedisJson特性让我放弃了MongoDB,也让我放弃了Hash,我就问你们香不香?

说说RedisJson 重磅特性[公众号:堆栈future]干货:redis支持json文档存储了,你可以放弃mongodb了?1. mongodb介绍MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据NoSQL存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于JSON对象

2021-12-29 12:14:14 852

原创 面试官:聊聊Redis有哪些特性,不要慌,把你知道的都告诉他

说说Redis有哪些特性[公众号:堆栈future]1. Redis简介Redis是一款基于ANSI C语言编写的,BSD许可的key-value存储组件,它的所有数据结构都存在内存中,可以用作缓存、数据库和消息中间件。Redis是Remote dictionary server的缩写,即远程字典服务,一个Redis实例可以有多个存储数据的字典,客户端可以通过select来选择字典即DB进行数据存储。也就是我们常见的16个DB,每个DB是一个数据字典。2. Redis 特性一图胜千言。同为K-V存储组件,M

2021-12-28 10:55:45 743

原创 2021-我的年终总结不一样

新年倒计时04天新的一年 新的篇章点击关注 · 我们一起过元旦01到年末了,今天这个日子比较特殊,索性提前来一个个人年终总结。2019年12月27号-2021年12月27号:结婚三周年啦!!!这三年里我和我媳妇从两个人的小家庭走到三个人的小family,因为2020年10月10号的早晨我们的孩子出生啦,从他降临到这个世界上以后,我们的情绪几乎都被他牵动,他哭我们全家环绕安慰;他笑,我们全家跟着笑;他闹,我们全家跟着一起闹;哈哈哈,这样可爱的小生命反而使得我们更加期待未来的每一天。三周年,我最大的感受就是我媳

2021-12-27 12:28:57 135

原创 Redis实例发生故障,而Redis使用RDB机制,事务的原子性能否得到保证?

Redis实例发生故障,而Redis使用的RDB机制,事务的原子性还能否得到保证?干货:[公众号:堆栈future]Redis事务Redis原子性保证当Redis采用RDB机制保证数据可靠性时,Redis会按照一定的周期执行内存快照。一个事务在执行过程中,事务操作对数据所做的修改并不会实时地记录到RDB中,而且,Redis也不会创建RDB快照。我们可以根据故障发生的时机以及RDB是否生成,分成三种情况来讨论事务的原子性保证。假设事务在执行到一半时,实例发生了故障,在这种情况下,上一次RDB快照中不会包含事务

2021-12-26 10:25:22 457

原创 Redis del bigkey即使开启了lazyfree,为什么还是阻塞的,但是别人又不阻塞?why

Redis del bigkey之后为啥还是阻塞的呢?明明开启了lazyfree,为啥别人立马可以删除?干货:[公众号:堆栈future]lazyfree redis 4.0引入lazyfree-lazy-user-del 6.0引入为什么del删除bigkey是阻塞的lazy-free是4.0新增的功能,但是默认是关闭的,需要手动开启。你开启之后,然后用del删除一个几万的key,发现命令阻塞在那里了,你很郁闷,我都开启了,为撒还阻塞呢?莫非在逗我?先说答案:你用错了命令,在你开启lazyfree之后,你

2021-12-25 08:34:32 703

原创 Redis Cluster通过hash slot映射数据,但是如何把两个key映射到同一个slot中呢?

Redis Cluster Hash Slot和Hash Tag介绍干货:[公众号:堆栈future]Redis Cluster介绍Redis Cluster Hash Slot原理Redis Cluster Hash Tag原理Redis Cluster集群介绍你可以这么理解,就是切片集群或者分片集群,用来存储大量数据的。为什么redis要使用它呢?redis的Master-Slave集群不行吗?这个也可以很简单的理解,因为后者是主备存储,前者是集群存储。主备存储目的就是两个,一个就是防止主从任意一个节点

2021-12-24 12:29:14 2259

原创 AOF有哪些潜在的阻塞点

AOF有哪些潜在的阻塞点1. Redis采用fork子进程重写AOF文件时,有潜在的阻塞风险1. fork子进程fork子进程,fork这个瞬间一定是会阻塞主线程的(注意,fork时并不会一次性拷贝所有内存数据给子进程),fork采用操作系统提供的写实复制(Copy On Write)机制,就是为了避免一次性拷贝大量内存数据给子进程造成的长时间阻塞问题。但fork子进程需要拷贝进程必要的数据结构,其中有一项就是拷贝内存页表(虚拟内存和物理内存的映射索引表),这个拷贝过程会消耗大量CPU资源,拷贝完成之前整个

2021-12-23 10:06:39 480

原创 Redis单线程处理IO请求性能瓶颈有哪些

Redis单线程处理IO请求性能瓶颈1. 请求在server中延迟较久1. 操作bigkey写入一个bigkey在分配内存时需要消耗更多的时间,同样,删除bigkey释放内存同样会产生耗时;2. 使用复杂度过高的命令例如SORT/SUNION/ZUNIONSTORE,或者O(N)命令,但是N很大,例如lrange key 0 -1一次查询全量数据;3. 大量key集中过期Redis的过期机制也是在主线程中执行的,大量key集中过期会导致处理一个请求时,耗时都在删除过期key,耗时变长;4..

2021-12-22 09:54:27 205 1

原创 k8s两种部署架构,你们是哪一种?为什么面试官会问你你们的服务是怎么部署的呢?

domain+slb+ingress+svc+pod 模式gateway+registry+pod 模式

2021-12-12 09:42:46 590

原创 什么是API网关,它和BFF到底有什么区别呢

网关模式是BFF模式吗Facade模式与网关模式又有什么区别API网关不只是代理或者路由

2021-12-11 09:47:18 2309

原创 双十一赠送书籍

https://mp.weixin.qq.com/s?__biz=MzUzMTUxMzYyNQ==&mid=2247484834&idx=1&sn=b8004fabe4e808154370fccd52449874&chksm=fa402dd4cd37a4c2643459f2ed9420b984f74033ecfb3a6512dbf4e5ecbc5c3f22b249117f6e#rdhttp://进群就送书籍 看哪个好就直接拿走...

2021-11-11 12:01:10 197

原创 基于etcd的服务发现与注册

1. 微服务架构上篇4. 基于etcd的服务发现与注册1. LB方案介绍构建高可用、高性能的通信服务,通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均衡实现所在的位置不同,通常可分为以下三种解决方案:1.1 集中式LB(Proxy代理模式)在服务消费者和服务提供者之间有一个独立的LB,通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy等实现。LB上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务时,它向LB发起请求,由LB以某

2021-09-22 18:04:45 2557

原创 golang踩坑 3.接口值是否等于nil

就像雨总会停,雾总会散,同样地没有谁会一直失败。详细请点击微信公众号:golang踩坑 3.接口值是否等于nil1. 前言这篇文章我们就来聊聊接口值等于nil这种常见类型零值的判断,有些童鞋在用的过程中难免会犯错,犯错之后又不知如何改正,那么接下来我就给大家把这个坑填上。2. 接口值是否等于nil具体类型的nil值, 赋值给接口值变量后, 被判定不为nil。funcmain(){//*bytes.Buffer,零值为nilvarb*byte...

2021-08-23 19:16:01 394

原创 golang踩坑 2.goroutine闭包和遍历字符串字符

我们都生活在阴沟里,但仍有人仰望星空。——奥斯卡王尔德详细请点击微信公众号:golang踩坑 2.goroutine闭包和遍历字符串字符1. 前言这篇文章我们来聊聊在循环中使用Goroutine中捕获参数的问题和使用下标获取字符串的字符问题,这两个问题在项目中比较常见,大家记得要规避。2. Goroutine中捕获参数goroutine中捕获的循环变量, 都为循环最后的值。funcmain(){fori,v:=range[]string{"a",...

2021-08-23 19:13:32 316

原创 golang踩坑 1.slice传参和for range赋值

好想卖掉房子去环游世界,可是房东死活不同意。1. 前言这篇文章我们来聊聊slice当作参数传递的时候会出现什么问题。还有for range在遍历赋值的时候会出现什么问题。2. slice传参packagemainimport"fmt"funcmain(){slice:=[]int{1,2}fmt.Printf("data:%v,len:%d,cap:%d\n",slice,len(slice),cap(slice))updateslice(s...

2021-08-23 19:07:18 1623 1

空空如也

空空如也

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

TA关注的人

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