深入理解闭包实现原理 (crossoverjie.top)
闭包对于一个长期写 Java 的开发者来说估计鲜有耳闻,我在写 Python 和 Go 之前也是没怎么了解,光这名字感觉就有点”神秘莫测”,这篇文章的主要目的就是从编译器的角度来分析闭包,彻底搞懂闭包的实现原理。
by @技术头条 2023-04-28 22:05 分享 查看详情
终于实现了一门属于自己的编程语言 (crossoverjie.top)
都说程序员的三大浪漫是:操作系统、编译原理、图形学;最后的图形学确实是特定的专业领域,我们几乎接触不到,所以对我来说换成网络更合适一些,最后再加上一个数据库。
这四项技术如果都能掌握的话那岂不是在 IT 行业横着走了,加上这几年互联网行业越来越不景气,越底层的技术就越不可能被替代;所以为了给自己的 30+ 危机留点出路,从今年上半年开始我就逐渐开始从头学习编译原理。
功夫不负有心人,经过近一个月的挑灯夜战,每晚都在老婆的催促下才休息,克服了中途好几次想放弃的冲动,终于现在完成了 GScript 一个预览版。
by @技术头条 2023-04-28 22:05 分享 查看详情
用位运算为你的程序加速 (crossoverjie.top)
位运算在带来程序性能提升的同时也降低代码可读性,所以我们得按需选择是否使用;
再一些底层库、框架代码对性能有极致追求的场景推荐使用,但在业务代码中对数据做加减乘除就没必要用位运算了,只会让后续的维护者一脸懵逼。
by @技术头条 2023-04-28 22:04 分享 查看详情
Java中如何解析SQL语句、格式化SQL语句、生成SQL语句? (blog.didispace.com)
昨天在群里看到有小伙伴问,Java里如何解析SQL语句然后格式化SQL,是否有现成类库可以使用?
之前TJ没有做过这类需求,所以去研究了一下,并找到了一个不过的解决方案,今天推荐给大家,如果您正要做类似内容,那就拿来试试,如果暂时没需求,就先了解收藏(技多不压身)。
by @技术头条 2023-04-28 22:04 分享 查看详情
聊聊数据库的那些索引 (yance.wiki)
作为后端开发工程师随着工作年限的增长,慢慢接触了许多数据库:MySQL、MongoDB、InfluxDB、Elasticsearch(搜索引擎,姑且也算是一种nosql数据库)。随着业务特性不同,我在不同的项目里最终选择了不同的数据库作为核心数据存储。本文主要总结一下,这些数据库中主流存储引擎的底层索引结构。
by @技术头条 2023-04-28 22:03 分享 查看详情
源码阅读——robfig/cron (yance.wiki)
cron一个用于管理定时任务的库,用 Go 实现 Linux 中crontab这个命令的效果。这个包提供的功能相对比较底层,许多分布式任务管理系统中在定时部分使用了这个cron。我最近也用这个包比较多,今天看了一下整体的源码。

by @技术头条 2023-04-28 22:02 分享 查看详情
聊一聊:常见的分布式锁 (yance.wiki)
在分布式系统中,为了实现对互斥资源的安全访问(独占),必须要用到分布式锁。另外在工作中,还有一个应用场景是,在分布式的后台服务中,某些服务只允许单个实例(机器或 Docker)运行,其他的备份机器作为 BackUps 备份节点(比如在笔者的项目中,负责数据同步的逻辑同一时刻只能有一台机器进程来执行),当正在运行的单实例机器(进程)故障后,在线的 BackUps 按照排队顺序,争抢到分布式锁,继续执行,这样也保证了单实例场景的高可用性。
by @技术头条 2023-04-28 22:01 分享 查看详情
MongoDB——TTL索引 (yance.wiki)
MongoDB 有几种很实用的特殊索引,在特定场景中可以达到事半功倍的效果,TTL 索引即其中之一。

过期特定数据是一种常见场景,对 IoT 设备日志、网站 session 等数据而言,我们一般只关心一定时间内的数据,过期数据需要及时删除,TTL 索引很适合用于该场景。

by @技术头条 2023-04-28 22:01 分享 查看详情
S3协议入门 (yance.wiki)
S3是AWS服务最早推出的几项服务之一,也是使用最为频繁的几个AWS服务之一。官网文档以及网上文章零零散散看了不少,实际使用中也用过S3的大多数功能,但“纸上得来终觉浅,绝知此事要躬行”,决定给自己挖个坑,结合已读资料和实际使用经验,系统地来梳理一下S3的已有功能。
by @技术头条 2023-04-28 22:01 分享 查看详情
git 整体提交记录(rabase)后合并(merge) (blog.frytea.com)
无论是 rebase 还是 merge 都是一项危险操作,请确保充分理解的命令的含义,并确保每一行代码无误后再继续。如果不确定,请一定记得做好数据备份!!!
by @技术头条 2023-04-28 22:00 分享 查看详情
浅议 EF Core 分库分表及多租户架构的实现 (blog.yuanpei.me)
这篇博客主要探讨了 EF 在分库、分表及多租户架构上实施的可能性。分库、分表的目的是为了提高数据库的查询性能,在这个过程中,我们可以考虑范围、Hash和配置三种路由策略,它们各自有自己的优缺点,需要使用者结合业务场景去衡量。虽然分库、分表在面对百万级别以上的数据时,不失为一种提高性能的方案,可世间万物都是双刃剑,它同样带来了一系列新的问题,譬如跨库写带来的分布式事务问题,跨库读带来的Join、Count()、排序、分页等问题,数据迁移问题等等,而如果希望通过Hash(Id)来进行拆分,还需要解决全局Id唯一的问题。所以说,这是一个没有标准答案的问题,需要使用者自己去进行取舍。多租户架构、读写分离均可以看作是特殊的分库场景,EF Core 中新增的HasQueryFilter()方法则帮助我们解决了单数据库的多租户架构问题。
by @技术头条 2023-04-28 21:59 分享 查看详情
ASP.NET Core 搭载 Envoy 实现微服务身份认证(JWT) (blog.yuanpei.me)
本文主要分享了如何利用 Envoy 实现容器级别的 JWT 认证服务,在实现过程中,我们分别了解了 JWT 和 JWKS 这两个概念。其中,JWT 即JSON Web Token,是目前最为流行的跨域认证方案,一个 JWT 通常由 header、payload 和 signature 三个部分组成,JWT 的 JSON 主要体现在header和payload这两个 JSON 对象上,通过 Base64Url 算法实现串化,而 signature 部分则是由header和payload按照签名函数进行生成,主要目的是防止数据篡改。JWKS 可以利用密钥或者公/私钥对令牌进行验证,利用这一原理,Envoy 中集成了 JWKS ,它表示一组可以校验任意 JWT 的公钥,同样是一个 JSON 对象。为了获得可用的 JWKS,我们可以通过 Identity Server 4 或者 Keycloak 中提供的地址来获得这一信息,方便起见,本文选择了更为便捷的 Keycloak。最终,我们实现了一个通用的、容器级别的认证网关,调用方在消费这些 API 资源时都必须带上从认证中心获得的令牌,进而达到保护 API 资源的目的,更好地保障系统和软件安全。
by @技术头条 2023-04-28 21:59 分享 查看详情
Flutter 产物分析与减包方案 (me.ursb.me)
在混合开发场景下,Flutter 的包增量略大一直是被大家诟病的一点,但 Google 官方明确表示了 Flutter 不会支持动态化,而且目前 Flutter SDK 官方还没有提供一套定制方案。因此想要瘦身,那么只能自己动手丰衣足食了。
所谓减包,前提条件是必须知道产物内容有什么?产物里有哪些部分可以减?被减掉的部分我们要怎么加回来?因此本文将围绕“产物分析”与“减包方案”两个主题来分别论述 iOS 与 Android 两端的 Flutter 减包原理与方案。
by @技术头条 2023-04-28 21:58 分享 查看详情
使用三年后我来聊聊双拼输入法 (blog.wangmao.me)
改变来自于一篇文章,做少数派中的少数派:双拼输入快速入门,当时工作中空闲时间比较充裕,索性就开始了练习,在练习半小时后我意识到双拼将改变我的输入习惯,并且进一步提升我的打字速度。我更换了我所有设备上的输入法换成了双拼输入法,一方面是用于练习,另一方面是切断自己后路——「不会打字你就别聊天」。
by @技术头条 2023-04-28 21:56 分享 查看详情
再话 AOP,从简化缓存操作说起 (blog.yuanpei.me)
本文分享了通过 AOP 来简化缓存操作的一种思路,考虑到常规的缓存代码写法,读/写缓存与业务代码严重耦合在一起,而博主心目中的缓存应该像水、电、煤气一样普普通通,你只需要告诉我哪些数据需要缓存,而无需关心这些数据怎么缓存。基于这样一种考虑,博主基于DispatchProxy实现了一个针对缓存的 AOP 方案,我们只需要在接口上打上[Cachable]标签,它会自动对方法的返回值进行缓存,从而简化我们平时使用缓存的流程。
by @技术头条 2023-04-28 21:54 分享 查看详情
你不可不知的容器编排进阶技巧 (blog.yuanpei.me)
本文分享了Docker及Docker-Compose中的进阶使用技巧,主要探索了服务编排场景下容器的启动顺序、健康检查、网络模式三类问题。默认情况下,Docker-Compose的depends_on选项,取决于容器是否处于running状态,因此,当我们有多个服务需要启动时,实际上启动顺序并不会受到depends_on选项的影响,因为此时容器都是running的状态。为了解决这个问题,官方提供了 wait-for-it 的方案,这是一种利用 Netcat 对TCP和UDP进行检测的机制,当检测条件被满足的时候,它会执行由用户指定的启动脚本。从这里看,其实已经有了一点健康检查的影子,而官方的健康检查,则允许用户使用更加自由的命令或者脚本去实现检测逻辑,所以,从这个角度上来讲,HEALTHCHECK结合depends_on,这才是实现容器启动顺序控制的终极方案。Docker的网络是一个相对复杂的概念,所以,这里就是简单的介绍了下常见的四种网络模式,更深入的话题比如网络驱动等,还需要花时间去做进一步的探索。
by @技术头条 2023-04-28 21:54 分享 查看详情
golang数据类型转换汇总 (wiki.eryajf.net)
golang作为强类型语言,我们在日常开发过程中,遇到类型转换的场景也非常多,本文整理我在工作开发中遇到过的类型转换实践。
by @技术头条 2023-04-28 21:53 分享 查看详情
Istio 升级后踩的坑 (crossoverjie.top)
本次定位修复 Istio 升级后带来的指标系统问题收获巨大,之前对 Istio 一直只停留在理论阶段,只知道他可以实现传统微服务中对接口粒度的控制,完美弥补了 k8s 只有服务层级的粗粒度控制;
这两周下来对一个现代云原生监控系统也有了系统的认识,从 App->Pod->sidecar->VictoriaMetrics(Prometheus)->Grafana 这一套流程中每个环节都可能会出错;
所以学无止境吧,幸好借助公司业务场景后续还有更多机会参与实践。
by @技术头条 2023-04-28 21:52 分享 查看详情
为什么企业要做大规模敏捷? (insights.thoughtworks.cn)
软件工程里一个重要的指标就是“可用的软件”,所以如何在提高代码质量,最大程度地减少软件中的Bug同时,平衡软件迭代速度与交付效率是我今天想跟大家讨论的问题。
by @Thoughtworks 2023-04-26 14:59 分享 查看详情