本文简单介绍使用java8特性是如何另辟蹊径解决设计模式原来试图解决的问题的。 1、策略模式 策略模式代表了解决一类算法的通用解决方案,可以在运行时选择使用哪种方案。 使用java8后可以看出ValidationStrategy是一个函数接口了而且它还与Predicate具有同样的函数描述。 2、2 JAVA8方式 使用Lambda表达式同样也可以解决这些问题(创建算法框架,让具体的实现插入某些部分)。想要插入的不同算法组件可以通过Lambda表达式或者方法引用的方式实现。 3、2 JAVA8方式 Observer接口的所有实现类都提供了一个方法:notify。新闻到达时,它们都只是对同一段代码封装执行。Lambda表达式的设计初衷就是要消除这样的僵化代码。 java8后可以像引用方法一样引用构造函数。
这篇文章的起因是这样的,在上周五凌晨很苦逼得参加双十一压测值班的时候,有个业务方突然打电话来说我们提供的客户端存在内存泄漏问题导致线上应用持续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实现事件监听
上周和一个投资人见面,聊了很多创业的事情。我虽然目前不在创业的节奏,几年内也不太会重返创业领域(需要花时间陪孩子,为孩子营造好的环境),但还是很关注创业圈的一举一动。我们聊到了一个观点:就创业而言,成功者下次基本还会成功,失败者下次很大程度还会失败。 作为一个曾经的失败者,我对此深表赞同(这是实事求是,而非灭自己威风)。我认为我下一个项目失败的几率可能还会很大,不是因为我由于之前的失败而感到恐惧,而是因为我还没有机会去趟很多未知的沟沟坎坎。 这就跟玩街机游戏三国志类似。一个币打通关的人,下次只要不是掉以轻心
首先,此篇文章会有很多地方会和 RocketMQ 比较,不太熟悉 RocketMQ 可以去看看我之前写的RocketMQ基础概念剖析&源码解析,先有个大概的印象,可能会帮助你更好的理解 Kafka。
架构设计是基于架构原则和目标给出问题解决方案的过程。架构和设计遵循相同的原则和方法,只是解决问题的规模和层次不同,而这规模和层次没有明显界限。
本文没有什么高深的东西,就是写几个CSS样式经常遇见的东西,可能大部分都已经知道怎么解决了,当做小白文浏览就好。
开源网络框架杂谈 上文聊了iOS系统网络请求框架的基本使用,我们了解到,对于一个网络请求,我们需要对其进行大量的设置,比如网络请求方式、数据可解析格式、缓存方式等等;而且网络请求成功以后的回调方式也不是特别友好
架构设计是基于架构原则和目标给出问题解决方案的过程。架构和设计遵循相同的原则和方法,只是解决问题的规模和层次不同,而这规模和层次没有明显界限。
互联网是什么相信不用在这里赘述,大家平时“网上冲浪”都离不开它。本篇文章中我们就来翻译翻译,什么 ** 的叫 ** 的网络。
ChatGPT 去年的早期阶段其实已经火过一轮,为什么过完个年突然又热度飙升……这个问题是很值得考虑的。外加微软 New Bing 的上线,我觉得或许是微软入局炒作了舆论?但是看 ChatGPT 用户增长还挺稳定,所以也许只是我的阴谋论想象吧。
nodejs和后台通信的时候,经常会碰到后台需要uint64类型的字段,但是js里又无法表示这么大的数字,以前我们没办法,但是新版V8支持了BigInt,让我们看到了一线生机。 this.toString(); } JSON.stringify(BigInt('11111111111111111111111111')); 大功告成(奇怪的是chrome 76.0.3809.100 V8 7.6.303.29已经不需要这个hack了,但是我的nodejs v14.6.0 V8 8.4.371.19反而会报错)。 在toJSON里返回字符串,V8会把两个字符串加起来,从而消除了BigInt值的两个引号,如果是直接传字符串,则V8是str = str + '"字符串"'。 ,没有特殊处理,需要我们只能绕过V8,自己解析,已经有了现成的库(https://github.com/sidorares/json-bigint)。
TL;DR: Markdown 的真正价值不在于贮存,在于流通。为了实现 Markdown 的流通价值,插入网络图片是较优的选择。
Redisson 是一个基于 Netty 通信框架的高性能 Redis 客户端, 实现了分布式和可扩展的 Java 数据结构,提供很多分布式相关操作服务以及大量便利的工具方法,让开发者可以把精力放在开发业务,避免重复造轮子。
最近最热点的新闻或者全球的焦点应该是俄乌战争。 俄乌历史上其实是兄弟,同根同源,今天的俄罗斯发源于基辅罗斯,两家加上白俄罗斯是同胞兄弟。所以今天俄乌战斗,有点像大哥(俄罗斯)带着二哥(白俄罗斯)揍三弟(乌克兰)的感觉。 下面一小段这个民族的小历史: 基辅罗斯,正式名称为罗斯(古东斯拉夫语:Рѹ́ськаѧ землѧ,Рѹ́сь,希腊语:Ῥωσία,拉丁语:Ru(s)ia, Rucia, Ruzia, Rut(h)enia,俄语:Киевская Русь,乌克兰语:Ки́ївська Русь,白俄
workrave是一个提醒你休息的小程序,每工作45分钟就会提醒你休息10分钟;连续打字或用鼠标3分钟就提醒你休息一下手指。(具体的时间可以在软件设置里面修改。)
涉及到点: 1、功能点; 2、故障模式; 3、故障影响; 4、严重程度; 5、故障原因; 6、故障概率; 7、风险程度; 8、已有措施; 9、规避措施; 10、解决措施; 11、后续规划 总结 故障管理模型个人觉得就像一个金字塔
8、关于运维标准化(非常重要) 没有什么比运维标准化带来的基础架构简化更重要的了。
文件类型的信息一般是头文件里前8个字节 我们看一下上面那张图avatar.jpg,第一行头信息里有什么? ? 图4 文件的16进制信息 通过vscode的插件hexdump可以查看到该文件头部信息前8个字节为:89 50 4E 47 0D 0A 1A 0A。 通过前8个字节证明了即使图片后缀为 jpg,但文件类型仍然为 png 以下列举一些常见的文件格式前字节标识信息(可从网上查阅或用 vscode 读取) 文件类型 规则 hex(十六进制) png 前8个字节 个字节,返回一个无符号的 8 位整数 bufferUint8Array.push(dataView.getUint8(i)) } } // 这里生成包含文件信息的二进制数据,但不允许直接读写 (`文件: ${file.name} 的前8个字节十进制为, ${bufferUint8Array}`); // 用获取到的字节和图片头信息进行对比 const isPNG =
本篇文章聊聊消息队列相关的东西,内容局限于我们为什么要用消息队列,消息队列究竟解决了什么问题,消息队列的选型。