这篇文章的起因是这样的,在上周五凌晨很苦逼得参加双十一压测值班的时候,有个业务方突然打电话来说我们提供的客户端存在内存泄漏问题导致线上应用持续full gc,本来已经快要睡着的我立马就精神起来了,一通排查,最终定位到了确实是客户端有个bug会导致部分数据会被一直持有进入老年代之后gc不掉,从而就导致了老年代的频繁gc,具体bug暂且不表,有一个很奇怪的现象引起了我的注意,那就是从监控系统上来看,这个应用平均一分钟full gc次数高达十多次,按照我之前的理解full gc时是会stop the world的,stop the world的频率这么高,那么应用自身的服务已经跪掉了啊,但是看这个应用的业务指标监控,居然一切正常,这就有点超出我的理解能力了,后面为了解决这个疑问,针对什么是full gc,以及如何查看full gc的次数等查阅了很多资料,总算搞懂了full gc这个概念,在查资料的过程中发现中文社区里面包含太多错误的信息了,而且大多都是抄来抄去的,非常误导人,因此打算写一篇文章,对一些错误观点进行纠正。
以ae.c/aeProcessEvents(其中包含文件事件分派器)为主的源码让我受益匪浅。该函数作用是完成事件处理的一次循环。 ae_epoll.c/aeApiPoll函数讲述了redis如何用epoll实现事件监听
不记得在哪看过这样一组数字:至少9/10的创业者第一次创业会遭受失败,他们还有至少4/5的几率第二次创业仍然失败(数字未经严格论证)。
首先,此篇文章会有很多地方会和 RocketMQ 比较,不太熟悉 RocketMQ 可以去看看我之前写的RocketMQ基础概念剖析&源码解析,先有个大概的印象,可能会帮助你更好的理解 Kafka。
架构设计是基于架构原则和目标给出问题解决方案的过程。架构和设计遵循相同的原则和方法,只是解决问题的规模和层次不同,而这规模和层次没有明显界限。
本文没有什么高深的东西,就是写几个CSS样式经常遇见的东西,可能大部分都已经知道怎么解决了,当做小白文浏览就好。
开源网络框架杂谈 上文聊了iOS系统网络请求框架的基本使用,我们了解到,对于一个网络请求,我们需要对其进行大量的设置,比如网络请求方式、数据可解析格式、缓存方式等等;而且网络请求成功以后的回调方式也不是特别友好
架构设计是基于架构原则和目标给出问题解决方案的过程。架构和设计遵循相同的原则和方法,只是解决问题的规模和层次不同,而这规模和层次没有明显界限。
互联网是什么相信不用在这里赘述,大家平时“网上冲浪”都离不开它。本篇文章中我们就来翻译翻译,什么 ** 的叫 ** 的网络。
ChatGPT 去年的早期阶段其实已经火过一轮,为什么过完个年突然又热度飙升……这个问题是很值得考虑的。外加微软 New Bing 的上线,我觉得或许是微软入局炒作了舆论?但是看 ChatGPT 用户增长还挺稳定,所以也许只是我的阴谋论想象吧。
最近遇到了一个要在js里处理uint64位数字的问题,折腾了一下,记录一下,有经验的小伙伴欢迎交流。
internalLockLeaseTime / 3, TimeUnit.MILLISECONDS); ee.setTimeout(task); } 当没有显式指定锁过期时间时候,就默认 key 过期时间 30s,然后定时任务每 10
TL;DR: Markdown 的真正价值不在于贮存,在于流通。为了实现 Markdown 的流通价值,插入网络图片是较优的选择。
最近最热点的新闻或者全球的焦点应该是俄乌战争。 俄乌历史上其实是兄弟,同根同源,今天的俄罗斯发源于基辅罗斯,两家加上白俄罗斯是同胞兄弟。所以今天俄乌战斗,有点像大哥(俄罗斯)带着二哥(白俄罗斯)揍三弟(乌克兰)的感觉。 下面一小段这个民族的小历史: 基辅罗斯,正式名称为罗斯(古东斯拉夫语:Рѹ́ськаѧ землѧ,Рѹ́сь,希腊语:Ῥωσία,拉丁语:Ru(s)ia, Rucia, Ruzia, Rut(h)enia,俄语:Киевская Русь,乌克兰语:Ки́ївська Русь,白俄
资源 workrave ——摸鱼小助手 workrave是一个提醒你休息的小程序,每工作45分钟就会提醒你休息10分钟;连续打字或用鼠标3分钟就提醒你休息一下手指。
涉及到点: 1、功能点; 2、故障模式; 3、故障影响; 4、严重程度; 5、故障原因; 6、故障概率; 7、风险程度; 8、已有措施; 9、规避措施; 10、解决措施; 11、后续规划 总结 故障管理模型个人觉得就像一个金字塔
10、 关于持续集成框架 持续集成框架,业界有一些开源的方案,其实如果可以,运维可以和开发一起来构建整个持续集成环境,从源代码管理、编译、测试(单元、自动化)、发布和部署、到监控整体价值链来看待,这个非常有意义
图5 判断上传文件是否为png格式 可以看到: avatar.png: 十进制: [137, 80, 78, 71, 13, 10, 26, 10] 十六进制为:0x89, 0x50, 0x4E, 0x47 , 0x0D, 0x0A, 0x1A, 0x0A avatar.jpg: 十进制: [137, 80, 78, 71, 13, 10, 26, 10] 十六进制为:0x89, 0x50, 0x4E, 0x47 -16字节) 宽度:17-20字节(4 bytes)高度: 21-24字节(4 bytes) gif GIF89(1-6字节) GIF尺寸是反着存储宽度:第8字节+第7字节(2 bytes)高度: 第10 图10 每个切片返回上传的进度 完整代码 // index.js const uploadPromise = uploadChunkList.map(async ({ name, file }) =>
本篇文章聊聊消息队列相关的东西,内容局限于我们为什么要用消息队列,消息队列究竟解决了什么问题,消息队列的选型。
"spotlessExport"); HHOOK hook = SetWindowsHookEx(WH_KEYBOARD, hookProc, library, 0); Sleep(10