解决Blazor Server读取localstorage内容过大无响应的问题 (blog.wixy.cn)
最近在用blazor server对接OpenAI的api,开发自己的ChatGPT网页,这边设计的是聊天内容存储在浏览器的localstorage里面,每次打开网页的时候获取聊天记里并渲染界面。

在开发和使用期间,偶发的会进不进去网站,也没发现有报错,最后清理浏览器缓存解决了问题。

最近这两天使用的比较频繁,发现这个问题出现的概率有点高,最后定位下问题,发现是聊天记录获取的时候出现的问题,在Blazor中调用js的获取数据方法时程序就挂起了,没有继续往下执行,刚开始怀疑是不是存储方法或者json序列化的问题,换了写法,也不能解决问题。
by @技术头条 2023-04-29 20:57 查看详情
Chromium 渲染流水线——字节码到像素的一生 (me.ursb.me)
在开始介绍渲染流水线之前,我们需要先介绍一下 Chromium 的浏览器架构与 Chromium 的进程模型作为前置知识。
by @技术头条 2023-04-29 20:56 查看详情
使用 Dynamic Linq 构建动态 Lambda 表达式 (blog.yuanpei.me)
相信大家都有这样一种感觉,Linq和Lambda是.NET 中一以贯之的存在,从最早的 Linq to Object 到 Linq to SQL,再到 EF/EF Core 甚至如今的.NET Core,我们可以看到Lambda表达式的身影出现地越来越频繁。虽然 Linq to Object 和 Linq to SQL,分别是以IEnumerable<T>和IQueryable <T>为基础来实现的。我个人以为,Lambda呢,其实就是匿名委托的“变种”,而Linq则是对Lambda的进一步封装。在System.Linq.Expressions命名空间下,提供大量关于表达式树的 API,而我们都知道,这些表达式树最终都会被编译为委托。所以,动态创建 Lambda 表达式,实际上就是指从一个字符串生成对应委托的过程,而一旦这个委托被生成,可以直接传递给 Where()方法作为参数,显然,它可以对源数据进行过滤,这正是我们想要的结果。
by @技术头条 2023-04-29 20:56 查看详情
Linux好用命令之watch命令 (wiki.eryajf.net)
watch命令能够将其他命令的输出定时输出到终端,从而实现监听的能力,在我们要对一些命令状态进行实时监听的场景中,有非常好的应用场景。
by @技术头条 2023-04-29 20:55 查看详情
基于Zookeeper的分布式锁原理 (codeyee.com)
临时顺序节点 结合了 “临时节点” 和 “顺序节点” 的特性:在创建节点时 Zookeeper 根据创建的时间顺序给该节点进行编号,并根据该编号的顺序去分配临界资源的访问顺序,当创建节点的客户端与 Zookeeper 断开连接后,临时节点也会被删除。
by @技术头条 2023-04-29 20:54 查看详情
浅淡JAVA虚拟机(JVM) (codeyee.com)
为什么要学习 JVM ?
1、能够明白为什么Java最早期被称为解释型语言,而后来为什么又被大家叫做解释与编译并存的语言(了解JVM中解释器以及即时编译器就可以回答这个问题);
2、你能够理解动态编译与静态编译的区别,以及动态编译相对于静态编译到底有什么好处(JVM JIT);
能够利用一些工具,jmap, jvisualvm, jstat, jconsole等工具可以辅助你观察Java应用在运行时堆的布局情况,由此你可以通过调整JVM相关参数提高Java应用的性能;
3、可以清楚知道Java程序是如何执行的;
4、可以明白为什么Java等高级语言具有可移植性强的特性。 其实这个问题相当于“为什么C/C++程序员需要学体系结构与编译原理?“
5、能够知道你的头发是怎么没有的。
那么来开始吧。

by @技术头条 2023-04-29 20:54 查看详情
浅谈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 查看详情