Windows部署minio注册成服务在后台保持运行 (jinyu.host)
最近在使用minio做资源存储,要求把minio部署到wondows上使用,发现官方提供的运行命令:.\minio.exe server .\data运行后,关闭cmd窗口,服务就会关闭。

所以需要通过winsw注册服务的方式,把minio注册成服务运行。
by @技术头条 2023-04-29 20:50 查看详情
PDF转图片各种技术方案对接,寻找最优解 (www.ffeeii.com)
在和文档的对接中,少不了文档转换,比如Word转图片、Word转PDF、PDF转图片,方便人员在线浏览等,而安卓手机更不能方便的在线预览PDF的远程链接。为此整理几个常见的PDF转图片方案供大家参考。
by @技术头条 2023-04-29 20:48 查看详情
并发编程锁之synchronized总结 (jinyu.host)
并发编程中数据同步需要依赖锁进行控制,通过ReentrantLock源码分析也对Lock实现锁机制的大致原理有了一个了解,Lock主要是通过编码的方式实现锁,其核心就是:CAS+循环,CAS原子操作需要依赖底层硬件层特殊的CPU指令。这节我们来看下Java中另一种非常常见的实现同步的方式:synchronized。synchronized主要通过底层JVM进行实现,而且JVM为了优化,产生偏向锁、轻量级锁、重量级锁,由于其处于JVM底层实现中,对很多并发编程人员来说能清晰理解它们间的区别还是件困难的事。通过本篇博文,构建出对Java中锁得体系结构,让你对其有个更系统全面的认知。
by @技术头条 2023-04-29 20:48 查看详情
并发编程锁之ReentrantLock总结 (jinyu.host)
在并发编程中一个比较难解决的就是共享资源并发访问控制问题。如果同步做的不好,很容易出现不一致问题,从而导致业务逻辑的错误;但是如果对共享资源控制的过于严格,又很容易对性能造成很大的影响。在并发编程中,一方面多从大牛的源码中学习精巧的思想和结构设计;另一方面要对并发基础知识掌握的足够牢固,你才能游刃有余的结合些设计模式、架构思想做出些高质量的高并发、高性能的系统。并发编程对设计模式、架构设计是非常依赖的,因此,并发编程对经验的积累、知识的积累方面要求是比较高的。

刚才说过,共享资源在并发访问中很容易造成不一致问题,解决方案就是我们所熟知的悲观锁和乐观锁。悲观锁就如其名字一样:悲观锁认为并发访问一定会导致状态不一致问题,所以在并发操作前一定要锁住资源,让并发线程一个接一个串行化去访问。而乐观锁就不一样了,乐观锁认为并发访问在大多数情况下是不会导致状态不一致问题,所以可以放心的去访问,一旦出现问题再说,本质上乐观锁是不会对共享资源添加锁限制的。这是我个人的理解,可能直白不是那么的精准,有关悲观锁、乐观锁的定义可以搜索更准确的官方解释。

我们来看看在Java中是如何实现悲观锁和乐观锁的。悲观锁在Java中就是我们所熟知的锁,实现方式主要分为两种:synchronized和Lock,而乐观锁的实现主要通过CAS操作实现。
by @技术头条 2023-04-29 20:47 查看详情
Docker 调试构建失败的 Dockerfile 的方法 (wiki.eryajf.net)
当我们基于 Dockerfile 构建一个镜像的时候,不可避免的会遇到错误或失败,这个时候,通常我们会核查对应步骤执行的指令,然后调整指令,再次构建镜像,这是一种常规的方法。其实,因为 Docker 底层存储的机制,我们可以直接进入到失败之前成功的那次状态中,然后二次调试我们的指令,从而做到有的放矢地验证。
by @技术头条 2023-04-29 20:44 查看详情
Docker容器如何优雅地访问宿主机网络 (wiki.eryajf.net)
某些时候,我们会有在容器内容访问宿主机某个服务的需求,比如现在 openai 无法直接访问,需要给项目添加代理,我的 chatgpt-dingtalk 项目支持了通过环境变量指定代理地址。
by @技术头条 2023-04-29 20:44 查看详情
如何将个人的GitHub主页配置的优雅好看 (wiki.eryajf.net)
我很早注意到,GitHub当中,你创建一个与自己账号同名的仓库,然后这个仓库的内容会展示在个人主页,换言之,你可以通过装扮这个仓库,来实现个人主页的装扮。
by @技术头条 2023-04-29 20:44 查看详情
GitHub中开源项目维护流程手册 (wiki.eryajf.net)
混迹于互联网,或多或少难免都会与 GitHub 有交互,大多数时候在公司中积累的 git 使用经验都是面向 GitLab 的,也很容易想当然地将过往的经验套到 GitHub 中,而事实上还是有一些差别的,最近开源了几个项目,有一些还涉及到要与外部开发者协同工作,当我真正面对要处理一个 PR 的时候,内心是慌乱的,一时间不知道该从何处下手,这里就整理记录一下这方面的实践。
by @技术头条 2023-04-29 20:44 查看详情
认识并使用一个透明代理http-server (wiki.eryajf.net)
http-server 可以简单理解成一个透明代理。能够让我们方便的在本地对项目以及资源进行调试校验,而不必再起一个 Nginx 来进行代理。
by @技术头条 2023-04-29 20:43 查看详情
手写编程语言-递归函数是如何实现的? (crossoverjie.top)
本篇文章主要是记录一下在 GScript 中实现递归调用时所遇到的坑,类似的问题在中文互联网上我几乎没有找到相关的内容,所以还是很有必要记录一下。
by @技术头条 2023-04-29 20:43 查看详情
通过 Pulsar 源码彻底解决重复消费问题 (crossoverjie.top)
背景最近真是和 Pulsar 杠上了,业务团队反馈说是线上有个应用消息重复消费。而且在测试环境是可以稳定复现的,根据经验来看一般能稳定复现的都比较好解决。messageListener 异步消费的 ackTimeout 的语义是有问题的,需要将加入 UnAckedMessageTracker 处移动到回调函数中同步调用。
by @技术头条 2023-04-29 20:41 查看详情
分布式丛林探险系列之 Redis 主从复制模式 (blog.yuanpei.me)
本文主要分享了 Redis 主从复制模式的相关内容。首先,主从复制可以为 Redis 带来数据冗余、故障恢复、负载均衡以及高可用等方面的收益,单机版的 Redis 是一个符合 CP 的系统,而集群化的 Redis 则是一个符合 AP 的系统,其一致性正是由这篇文章中描述的复制来保证。根据主从节点状态的不同,Redis 中的主从复制,可以分为 全量复制 和 部分复制 两种,全量复制是主节点生成一个快照然后发送给从节点,而部分复制则是从复制缓冲区中筛选出命令然后发给从节点,在此基础上,我们用 Docker-Compose 构建了一个“一主两从”的主从复制方案。
by @技术头条 2023-04-29 20:39 查看详情
通过 Python 预测双十一交易额 (blog.yuanpei.me)
相信只要我说出 最小二乘法 和 线性回归 这样两个关键词,各位就知道我在说什么了!博主从网上收集了从 2009 年至今历年双十一的交易额数据,如果我们将其绘制在二维坐标系内,就会得到一张散点图,而我们要做的事情,就是找到一条曲线或者方程,来对这些散点进行拟合,一旦我们确定了这样一条曲线或者方程,我们就可以预测某一年双十一的交易额。
by @技术头条 2023-04-29 20:38 查看详情
分布式丛林探险系列之 Redis 集群模式 (blog.yuanpei.me)
Redis 的集群模式,本质上是由多个主从复制模式组成的服务器分片技术,它通过哈希槽来管理集群内的节点和数据,而节点间则是通过 TCP 协议互相通信,这使得我们可以从任意节点上查询数据,因为 Redis 集群会帮助我们实现连接的重定向。与此同时,Redis 集群内通过投票来实现故障转移,其触发机制是超过半数的节点认为该节点宕机,即客观宕机,此时,就需要从该节点的从节点中筛选一个继续提供服务,当然,这个筛选还是投票决定的,谁能说这不是一种现实世界的投影呢?
by @技术头条 2023-04-28 22:32 查看详情
gRPC 搭配 Swagger 实现微服务文档化 (blog.yuanpei.me)
整个微服务架构的落地过程中,服务治理是花费时间和精力最多的环节,除了保证接口的稳定性,更多的时候,其实是不同的服务间相互打交道。那么,除了口头传达外,最好的管理接口的方式是什么呢?显然是接口文档。本文分享了两种针对 gRPC 的服务文档化的方案,第一种是由官方提供的 protoc-gen-doc,它可以从 Protobuf 生成 HTML 或者 Markdown 格式的接口文档。第二种是由博主实现的 FluentGrpc.Gateway,它实现了从 Protobuf 到 Swagger 的转换,只需要在项目中引入这个中间件,就可以把 gRPC 带进 Swagger 的世界,不管是查阅接口还是调试接口,都多了一种玩法,如果你还需要给非开发人员提供接口文档,那么,我觉得你还可以试试 YAPI,只需要导入 Swagger 格式的服务描述信息即可。
by @技术头条 2023-04-28 22:31 查看详情
SSL/TLS 加密传输与数字证书的前世今生 (blog.yuanpei.me)
因为一次服务器迁移时被证书苦虐的经历,决定花点时间研究了一下数字证书,本文从 HTTPS 协议入手,引出了对称加密、非对称加密等加密相关的内容,然后讨论了什么是证书,什么是 CA,以及 为什么需要 CA 等内容,现实世界中需要一个为证书权威性、真实性提供担保的组织,这种组织可以签发证书、验证证书、管理证书,利用数字签名的不可篡改、不可抵赖、不可复制、不可伪造等特性,根 CA 可以授权中间 CA 去签发证书,因为整个证书链都是可以追溯的。有了这些知识作为背景,我们分享了如何获得一份自签名证书和 CA 证书,两者本质上没有什么不同,唯一的区别在于其信任度不同。
by @技术头条 2023-04-28 22:31 查看详情
Golang与散列算法 (www.ssgeek.com)
散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。常用于保证数据完整性。
by @技术头条 2023-04-28 22:29 查看详情
Jenkins基于Share Library共享库的最佳实践探索 (wiki.eryajf.net)
古代治学总结有人生三境界,在我看来,Jenkins 使用接入亦有三个阶段,这也是每一个运维人员应用 Jenkins 所必须要经历的。

第一阶段:初接触,有很多不熟悉不了解,应用场景也大多是依赖手工点点点维护的 free style 或者 maven 风格的项目,通过配置一些参数,结合脚本进行项目的构建与发布。这种维护方式其实也是 Jenkins 在 1.0 时代的普遍使用姿势。它的最大弊端在于一切参数都要配置化,当维护的项目数量增多的时候,又遇到某些普遍性需要更改的地方,那么维护起来就是一场灾难了。

第二阶段:慢慢往后深入,接触越来越多,逐渐开始了解 pipeline,亦即 Jenkins 在 2.0 时代提出的一个新概念:配置即代码,或者说代码即配置。我们可以不必点点点勾选过多地配置项,只需通过代码定义即可实现相同的效果。只不过据我了解,很多人在这个阶段,因为对流水线基础语法掌握程度不够,因此还有很多人是手工配置参数,然后再结合 Jenkinsfile 来进行构建发布的,其实这种方式,并没有真正体悟到 2.0 的设计精髓,自然也无法吃到这波技术红利了。

第三阶段:你不应该满足于维护大量 Jenkinsfile 的现状中,过多的 Jenkinsfile 就像一个又一个肥大的肿块儿一般,对于后期的二次维护,都是极大的挑战。你可能听过共享库,渐渐你开始了解共享库,尝试共享库,最后将同一个类别的 Jenkinsfile 进行逻辑抽象,每个项目都变成了另外一种变相的参数化构建,从而接入项目只需配置对应的 引导文件 即可,这种方式能够极大地简化 Jenkins 的运维使用难度,对项目交付效率的提升有极大的帮助。

过往的 Jenkins 文章中,我已经写过不少第一阶段,第二阶段的概念或者实践,今天这篇文章,将会针对第三阶段的内容,结合以往的实践,手摸手教会你共享库最佳实践这堂课。
by @技术头条 2023-04-28 22:28 查看详情
大厂自研跨端框架技术揭秘 (me.ursb.me)
本文将围绕跨端框架技术的主题,分析其技术目标和 3 种演进方向,接着揭秘业内的自绘跨端方案的技术实现——包括 Kun、WebF、TDF、Weex 2.0、Waft 与 MiniX 等方案,分析各自的特点与不足,总结跨端框架的研发思路与技术要点,最终分享对跨端框架发展趋势的思考。

分享过程中,会穿插介绍跨端框架的脚本引擎的选型与技术难点、业内各跨端框架各自的困境、分享 Debugger 原理以及一核多生态的工程化思路。
by @技术头条 2023-04-28 22:25 查看详情
前端开发中的大小写敏感问题 (me.ursb.me)
大小写敏感(case sensitivity)是软件开发领域的议题,指同一个“词”拼写的大小写字母的不同可能会导致不同效果的场景。

接下来,我们谈谈前端开发领域中一些常见的大小写敏感/不敏感的场景。
by @技术头条 2023-04-28 22:25 查看详情