浅谈JAVA并发机制 (codeyee.com)
有四种使用线程的方法:
1、实现 Runnable 接口;
2、实现 Callable 接口;
3、继承 Thread 类;
4、通过线程池的方式去创建线程。

实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以理解为任务是通过线程驱动从而执行的。
by @技术头条 2023-04-29 20:53 查看详情
解决java的http请求库dongliu.requests请求结果中文乱码的问题 (codeyee.com)
在这之前了解到并且使用的 java 的 http 库都是 okhttp 、httpclient、RestTemplate 等,虽然这些库也简化了很多原生求的复杂配置过程,但对于一些需求还是需要自行去封装。操作体验和开发效率上都差了很多。
by @技术头条 2023-04-29 20:51 查看详情
【Python并发编程】线程池与进程池 (codeyee.com)
在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多,这会对服务端主机带来巨大的压力,甚至于不堪重负而瘫痪。
by @技术头条 2023-04-29 20:51 查看详情
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 查看详情