自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一次sql请求,返回分页数据和总条数

日常搬砖,总少不了需要获取分页数据和总行数。一直以来的实践是编码两次sql请求,分别拉分页数据和totalCount。最近我在思考:常规实践为什么不是 在一次sql请求中中执行多次sql查询或多次更新,显而易见的优势:① 能显著减低“客户端和服务器之间的网络往返次数”,提高吞吐量② 简化客户端代码逻辑1. mysql 默认单sql请求单语句mysql客户端选项client_multi_statem...

2024-08-13 17:15:48 1097

原创 在浏览器输入网址,Enter之后发生了什么?

在浏览器输入网址,Enter之后发生了什么?很多八股文会给出:1.DNS Resolution2.Establishing a Connection3.Sending an Http Request4.Receiving the HTTP Response5.Rendering the Web Page但今天我斗胆插入第0.9步URL Parsing,URL( uniform resou...

2024-04-23 22:17:30 669 1

原创 async/await 贴脸输出,这次你总该明白了

出来混总是要还的最近在准备.NET Go核心能力的深度对比.note, 关于.NET/Go的异步实现总感觉没敲到点上。async/await是.NET界老生常谈的话题,每至于此,状态机又是必聊的话题,但是状态机又是比较晦涩难懂的话题。[一线码农大佬]在博客园2020年写的《await,async 我要把它翻个底朝天,这回你总该明白了吧[1]》手把手实现了异步状态机,这篇文章很是经典, 但是评论区很...

2024-04-16 07:37:59 718

原创 "家长进校园"之《计算机和人工智能》

半个月前报名了一年级的“家长进校园”活动,如履薄冰,左思右想、ppt做了几个晚上,不知道该如何同孩子们讲我们现在做的事情。上周五上台前,还很是忐忑,不过真的上台了,倒是完全放开了。上台也没有想象的那么可怕, 小朋友们也很新奇,反应也很激烈,算是相互配合吧。思考点1. 受众 & 形式:•一年级•ppt图片2. 目标:•计算机科普•立足知识、智力时代,促小朋友打好基础•宣...

2024-03-26 11:34:57 461

原创 缓存一梭子,程序员的快乐就是这么简单

缓存也是一把梭项目的标配,从业多年,有事无事set/getCache来一梭子。夜深人静的时候,头脑里冷不丁出现一些问题,我竟一时无法自圆其说1. 已经有cpu多级缓存、操作系统page cache,那为什么还需要定义应用缓存?2. 应用的多个副本缓存了同一份数据库数据, 怎么保证这些多副本的缓存一致性? 1.缓存在计算机体系中的地位2.缓存和缓冲的区别3...

2024-02-21 20:52:36 779

原创 .NET领域最硬核的gRPC 核心能力一把梭

前言,本文定位为.NET方向 grpc核心能力一把梭,全篇是姿势性和结论性的展示, 方便中高级程序员快速上手.NET Grpc。有关grpc更深层次的前世今生、底层原理、困惑点释疑请听下回分解, 欢迎菜鸟老鸟们提出宝贵意见。grpc宏观目标:高性能rpc框架grpc框架实现宏观目标的底层3协议http2通信协议, 基础能力proto buffer:打解包协议==> 二进制proto bu...

2024-01-15 16:56:06 927

原创 tcpdump必知必会

1.tcpdump原理 & 在tcp协议栈的位置 2.tcpdump用法•基于协议、主机、端口过滤•使用and or逻辑运算符做复杂的过滤操作•tcpdump Flags1. tcpdump原理linux中非常有用的网络工具,运行在用户态。数据包到达网卡,经过数据包过滤器bpf筛选后,拷贝至用户态的tcpdump程序。tcpdump抓包“抓” 这个动作是由数据包过滤器bpf...

2023-11-09 19:48:02 157

原创 不能显式拦截ajax请求的302响应?

记录工作中早该加深印象的一个小小小case:ajax请求不能显式拦截 302响应。我们先来看一个常规的登录case:1.浏览器请求资源,服务器发现该请求未携带相关凭据(cookie或者token)2.服务器响应302,并在响应头Location写入重定向地址, 指示浏览器跳转到登录页3.浏览器跳转到登录页,提交身份信息,回调到原业务站点,服务端利用Set-Cookie响应头种下cookie或...

2023-10-01 18:08:05 223

原创 我大意了,没有闪。

本文的诞生,是有感于一线码农大佬前几日公众号发文《Dictionary.Clear 和 new Dictionary() 有什么不同?》,里面有两个栗子让我虎躯一震。1. 无心插花voidExample1(){varnewDict=newDictionary<string,string>();newDict.Add("key1","value1...

2023-08-19 08:30:40 153

原创 从斐波那契数列重温时间复杂度

(1) 函数调用存在压栈过程,会在线程栈(一般2M)上留下栈帧,斐波那契人递归算法:是函数自己调用自己,在终止条件后栈帧开始收敛,但是在此之前有可能已经撑爆线程栈。有些童鞋可能没意识到指数型的威力,举个例子, 斐波那契递归算法,第20个数字需要2^20次运算;一个老生常谈的思路是递归,另外是循环,今天借此机会回顾并演示时间复杂度在编程中的重要性。斐波那契 递归算法 1,1,2,3,5,8,13,21,34,55。从第1个数字移动到第n-2个数字时, 第n-2个数字。时间复杂复高,指数型O(2^n);

2023-08-16 10:26:42 106

原创 重温斐波那契数列,再看时间复杂度的重要性

•开题引入斐波那契•代码演示:递归、循环•递归 vs 循环•时间复杂复高,指数型O(2^n);推导过程•占用线程堆栈, 可能导致栈满异常•压测演示​打入门软件开发,斐波那契数列便是绕不过去的简单编程算法。一个老生常谈的思路是递归,另外是循环,今天借此机会回顾并演示时间复杂度在编程中的重要性。斐波那契 递归算法 1,1,2,3,5,8,13,21,34,55递归算法的应用场景是:•将大...

2023-08-16 07:46:58 86

原创 golang中降本增效的常规实践

最近一年各大中小厂都在搞"优化",说到优化,目的还是"降本增效",降低成本,增加效益(效率)。技术层面,也有一些降本增效的常规操作。比如池化、io缓冲区技术golangC#eg.池化技术snnc.PoolObjectPool前端切图仔,归入前端资源池 , 随用随取字节数组缓冲区bytes.BufferList---io缓冲区bufioBufferStream适度超前,赛道埋伏池化技术 sync.P...

2023-07-28 08:49:01 230 1

原创 不会写单元测试的程序员不是一名合格的滴滴司机

go内置了一套单元测试机制:利用go test测试命令和一套按照约定方式编写的测试函数, os:比C#单元/基准测试要方便很多。在包目录内,所有以_test.go为后缀名编写的go文件不会参与go build的编译过程.本文所有的代码均放置在带缓冲区的异步写日志库[1]。go test 一共三种测试函数:•标准测试函数, 函数以Test为前缀,用于测试逻辑行为正确性, go test 会报告测试...

2023-07-10 17:03:49 72

原创 自古以来,同步/异步都是八股文第一章

成文耗时2小时,阅读8min,有用指数拉满。 好久没上线了,今天记录编程中老掉牙的几个关键术语,一个言简意赅的术语定义包含主谓宾定状补, 我们应从貌似雷同的术语中体会到不同术语的表象行为、侧重点。下面给出的3对技术术语,都是很核心、易混淆的概念点,但是多少还是有些表象、侧重点的不同。书读百遍其义自见,请关注最下方给出的微软官方技术文献, 自勉!!1. 同步/异步、 阻塞/非阻塞阻塞操作不...

2023-06-27 20:34:38 100

原创 自古以来,反射也是兵家必争之地

成文耗时1小时,阅读5min,有用指数5颗星。 这几天收到一个战术性需求,将一大坨字段序列化为特定格式的字符串。大概是下表:序号字段名描述是否必填0logVersion日志版本是1productName产品是2serviceName服务是.........25extend3扩展字段3否26extend4扩展字段3否27extend5扩展字段3否控制点1 : 必填字段少,若可...

2023-05-25 07:33:29 760

原创 Go编程快闪之logrus日志库

成文耗时1小时,阅读3min,有用指数4颗星。golang中常见的日志包是logrus, 根据logrus的胚子和我们的生产要求,给出一个生产可用的logrus实践姿势。主谓宾定状补logrus是一个结构化的、可插拔的、兼容golang标准log api的日志库。快速过一下能力•支持对output=TTY增加关键字颜色•内置JSONFormatter和TextFormatter(默认)两种Fo...

2023-05-24 16:13:00 533

原创 粘包/拆包问题一直都存在,只是到TCP就拆不动了。

•OSI open-system-Interconnection•TCP/IP 5层协议栈•应用层和操作系统的边界是 系统调用 ,对应到网络编程是socket api•TCP/UDP 概况•TCP粘包问题•结合TCP/IP报头再回顾,柳暗花明OSI开放系统互联定义了网络框架,以层为单位实现协议,同时控制权逐层传递。OSI实际并没有落地,TCP/IP5层协议栈是目前主流的落地实现。TCP...

2023-05-08 08:10:27 252

原创 你认为的.NET数据库连接池,真的是全部吗?

一般我们的项目中会使用1到2个数据库连接配置,同程艺龙的数据库连接被收拢到配置中心,由DBA统一配置和维护,业务方通过某个字符串配置拿到的是开箱即用的。DBA能在对业务方无侵入的情况下,让大规模微服务实例切换数据库连接,之后DBA要求, 那么问题来了: **dotnet程序怎么清空数据库连接?

2023-03-30 16:56:57 817 1

原创 流量调度、微服务可寻址性和注册中心

前言现代计算机基于计算、存储和调度的体系, 于是现代架构都是围绕这三大话题不断演进。在基础架构部, 也是主要为了解决这三个难题,为业务事业部提供透明的、高可用、可快速伸缩的三大能力, 我们组主要负责 [流量调度] 这个话题,下面是一些宏观的技术笔记。在单体结构, 流量调度是直观且无感的(DNS+Nginx就可以完成一次流量调度)。演进到微服务结构(服务粒度变得更细、服务伸缩更灵活(上下线更加频繁)...

2023-03-23 08:00:32 153

原创 问道Golang,6月龄必知必会(二)

在我看来,golnag有许多反直观的设计,而且这些设计通常不能自圆其说,导致gohper一而再再而三的调入陷阱。网上也有很多gohper总结了一些笔记,我再提炼精简一下,挂在脑图树上便于记忆。值类型包括:所有integer、所有float、bool、string、数组和structure引用类型包括:指针、slice、map、chan、interface1. map需要先先初始化,才能使用issu...

2023-03-12 16:41:11 152

原创 摸鱼快报:golang net/http中的雕虫小技

以后会开一个板块,摸鱼快报,快速记录这几周开发中雕虫小技, 也算一个错题集。1. 向开发环境localhost:3000种植cookie前端使用Create React App脚手架,默认以localhost:3000端口启动;后端使用golang-gin框架,使用8034端口启动。登录模块走的是sso,前后端分离,后端需要向前端写入认证cookiec.SetSameSite(http.SameS...

2023-01-13 18:18:17 774 1

原创 你认识的C# foreach语法糖,真的是全部吗?

本文的知识点其实由golang知名的for循环陷阱发散而来,对应到我的主力语言C#, 其实牵涉到闭包、foreach。为了便于理解,我重新组织了语言,以倒叙结构行文。先给大家提炼出一个C#题:观察for、foreach闭包的差异左边输出 5个5;右边输出0,1,2,3,4, 答对的、不屑看题的同学都可以出门右转了。闭包是在词法环境中捕获自由变量的头等函数, 题中关键是捕获的自由变...

2022-11-21 07:53:18 228

原创 Go语言正/反向代理的姿势

先重温一下什么叫反向代理,正向代理。鹅厂二面,nginx回忆录[1]所谓正向,反向代理取决于代理的是出站请求,还是入站请求。正向代理:代理的出站请求, 客户端能感知到代理程序,架构上距离客户端更近。反向代理:代理的是入站请求,客户端认为代理程序就是服务器,客户端感知不到代理逻辑,架构上距离服务端更近。前几天利用golang实现反向代理程序[2],引出了Host请求头在反代中的关键作用。代理程序预置...

2022-11-07 08:41:47 812

原创 两将军问题和TCP三次握手

两将军问题,又被称为两将军悖论、两军问题, 是一个经典的计算机思想实验。首先, 为避免混淆,我们需要认识到两将军问题虽然与拜占庭将军问题相关,但两者不是一个东西。拜占庭将军问题是一个更通用的两将军问题版本, 通常在分布式系统故障容错、区块链中广泛讨论也会犹豫。1.两将军问题两支军队,驻扎在两个山头,准备攻击山谷里的同一伙敌人,两将军只有同时发起进攻才能获胜,两将军约定攻击时间的的唯一方式是派遣信使...

2022-10-10 06:36:06 699

原创 面向对象五大设计原则

最近在看七牛云许式伟的架构课,重温了面向对象五大设计原则(SOLID),扣理论文字找出处。(当然许老板是不可能深聊这么低级的内容,????)注意区分设计原则和设计模式。设计原则更为抽象和泛化;设计模式也是抽象或泛化的良好实践,但是它们提供了更具体和实用的底层建议。面向对象5大设计原则Single Responsiblity Principle单一职责原则Open/Closed Principle开闭原...

2022-09-28 07:29:03 256

原创 ConcurrentDictionary字典操作竟然不全是线程安全的?

好久不见,马甲哥封闭居家半个月,记录之前遇到的一件小事。标题不准确,实际上ConcurrentDictionary<TKey,TValue>绝大部分api都是线程安全且原子性的[1],唯二的例外是接收工厂函数的api:AddOrUpdate、GetOrAdd,这两个api不是原子性的,需要引起重视。All these operations are atomic and are thre...

2022-09-16 06:26:04 360

原创 Go语言反向代理的姿势

正向代理的血案前几天打算使用golang做一个代理程序,golang标准库net/http/httputil已经提供了这样的能力。一把梭之后发现必然返回403 Forbidden, 我直接在target里面填上游服务实例ip就可以正确返回。给一个向代理百度官网的简化示例,大家可以体会一下:packagemainimport("fmt""log""net/htt...

2022-08-29 08:21:13 1082

原创 自古以来,代理程序都是兵家折戟之地

反向代理的血案前几天打算使用golang做一个代理程序,golang标准库net/http/httputil已经提供了这样的能力。代理的是入站请求,应为反向代理,一把梭之后发现必然返回403 Forbidden, 我直接在target里面填上游服务实例ip就可以正确返回。给一个向代理百度官网的简化示例,大家可以体会一下:packagemainimport("fmt""l...

2022-08-29 08:21:13 108

原创 使用curl指令发起websocket请求

昨日的文章没指出websocket请求协商切换的精髓,删除重发。前文相关:•.NET WebSockets 核心原理初体验[1]•SignalR 从开发到生产部署避坑指南[2]tag:浏览器--->nginx--> server其中提到nginx默认不会为客户端转发Upgrade、Connection标头[3], 因为为了让被代理的后端服务器知道客户端要升级协议,故要在nginx上...

2022-08-08 13:17:50 7490

原创 深入解读Golang信道

信道是一个golang goroutine之间很关键的通信媒介。理解golang的信道很重要,这里记录平时易忘记的、易混淆的点。1. 基本使用刚声明的信道,零值为nil,无法直接使用,需配合make函数进行初始化ic:=make(chanint)ic<-22//向无缓冲信道写入数据v:=<-ic//从无缓冲信道读取...

2022-07-09 08:00:45 440

原创 ConfigurationManager姿势快闪

最近一个祖传代码是使用.NET Fx写就的,我在使用控制台程序获取配置时有些折腾。下面记录一些管理配置文件的姿势:ConfigurationManager用于在客户机应用程序中获取配置信息;对于web项目,请使用WebConfigurationManager类。ConfigurationManager使用姿势添加app.config文件<configuration&...

2022-06-08 21:08:18 207

原创 Golang方法接收者

[定义]:golang的方法(Method)是一个带有receiver的函数Function,Receiver是一个特定的struct类型,当你将函数Function附加到该receiver, 这个方法Method就能获取该receiver的属性和其他方法。[面向对象]:golang方法Method允许你在类型上定义函数,是一个面向对象的行为代码, 这也有一些益处:同一个...

2022-06-01 08:46:45 1141

原创 源码解读etcd heartbeat,election timeout之间的拉锯

转一个我在知乎上回答的有关raft election timeout/ heartbeat interval 的回答吧。答:准确来讲:election是timeout,而heartbeat 是interval, 这样就很容易理解了。heartbeat interval 是leader 安抚folower的时间,这个时间间隔是体现在leader上,是leader发送心跳的...

2022-05-24 18:11:55 591

原创 站在前人的肩膀上重新透视C# Span<T>数据结构

先谈一下我对Span的看法, Span是指向任意连续内存空间的类型安全、内存安全的视图,可操作的滑动窗口。Span和Memory都是包装了可以在pipeline上使用的结构化数据的内存缓冲器,他们被设计用于在pipeline中高效传递数据。定语解读这里面许多定语,值得我们细细揣摩:1. 指向任意连续内存空间:支持托管堆,原生内存、堆栈, 这个可从Span的几个重载...

2022-05-07 07:59:16 148

原创 利用etcd选举sdk实践master/slave故障转移

本次记录[利用etcd选主sdk实践master/slave故障转移], 并利用etcdctl客户端验证选主sdk的工作原理。master/slave高可用集群本文目标在异地多机房部署节点,slave作为备用实例启动,但不接受业务流量, 监测到master宕机,slave节点自动提升为master并接管业务流量。基本思路各节点向etcd注册带租约的节点信息, 并各自维持心...

2022-04-19 07:45:57 273

原创 使用自旋算法实现“两个线程轮流打印0到100奇偶数?”

点击上方蓝字进行关注两个线程轮流打印0到100奇偶数?前文通过《go信道/C#自动重置事件的方式》对两个线程进行了通信, 网上有人不依赖(线程同步)自行完成了该题, 我觉得这种方法很巧妙。本次循环不该打印时,让线程代码自旋;等待另外的线程递增而引起本线程再次进入业务代码。volatilestaticinti=0;publicstaticvoidMain(...

2022-03-28 10:35:23 187

原创 三分钟掌握Actor和CSP模型

点击上方蓝字进行关注前文传送门:《三分钟掌握共享内存模型和 Actor模型》, 一直想比较Actor模型与golang的CSP模型,经过一段时间的实战记录了本文。ActorvsCSP模型•传统多线程的的共享内存(ShareMemory)模型使用lock,condition等同步原语来强行规定进程的执行顺序。•Actor模型,是基于消息传递的并发模型, 强调的是...

2022-03-26 08:39:24 1558

原创 字节一面:go的协程比线程轻量,体现在哪?

01用户态和内核态Linux整个体系分为用户态和内核态(或者叫用户空间和内核空间), 那内核态究竟是什么呢?本质上我们所说的内核态, 它是一种特殊的软件程序,特殊在哪?统筹计算机的硬件资源...

2022-03-12 07:47:37 806

原创 Gopher必读:HttpClient的两个坑位

http是我们最常见的客户端/服务端传输协议,在golang中,默认的net/http包有一些坑位,需要调整以获得更加性能。在golang程序中,我也遇到因为不合理使用 http clie...

2022-03-02 08:06:12 380

原创 GO的优雅终止姿势

最近优化了一版程序:用到了golang的优雅退出机制。程序使用etcd的election sdk做高可用选主,需要在节点意外下线的时候,主动去etcd卸任(删除10s租约), 否则已经下线...

2022-02-24 18:56:26 1118

空空如也

空空如也

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

TA关注的人

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