@Async注解默认使用 LinkedBlockingQueue 队列,这个队列如果我们不指定队列数量,默认数量上限为 Integer.MAX_VALUE。如果线程池执行任务过慢,任务将会一直堆积在队列中。由于我们队列可以认为是无界的,可以无限制添加任务,这就导致内存占用越来越高,直到 OOM 爆仓。
Srinath 通过不懈的努力最终总结出了30条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或部门。Srinath 认为架构师应该扮演的角色是一个引导者,讨论发起者,花草修建者,而不是定义者和构建者。Srinath 为了解决团队内部的架构纷争和抉择,制定了以下30条原则,这些原则被成员们广泛认可,也成为了新手架构师的学习途径。
关系型的结构化存储存在一定的弊端,因为它需要预先定义好所有的列以及列对应的类型。但是业务在发展过程中,或许需要扩展单个列的描述功能,这时,如果能用好 JSON 数据类型,那就能打通关系型和非关系型数据的存储之间的界限,为业务提供更好的架构选择。
MemReduct是国外一款专业的内存清理软件,现在越来越多的软件由于硬件的普遍发展,对内存的使用都开始肆无忌惮起来,这对内存比较小的老电脑来说就非常不友好了,即使新电脑也会受不了,如果你的电脑也因为常常内存不足而卡顿,就来下载这款软件试试吧。也可以安装在服务器上,定期整理内存,保持内存空间舒畅。
ArrayList是线程不安全的,于是JDK新增加了一个线程并发安全的List——CopyOnWriteList,中心思想就是copy-on-write
,简单来说是读写分离:读时共享、写时复制(原本的array)更新(且为独占式的加锁)
,而我们下面分析的源码具体实现也是这个思想的体现。
在使用spring框架的日常开发中,bean之间的循环依赖太频繁了,spring已经帮我们去解决循环依赖问题,对我们开发者来说是无感知的,下面具体分析一下spring是如何解决bean之间循环依赖,为什么要使用到三级缓存,而不是二级缓存
CTF(Capture The Flag)中文翻译就是夺旗比赛,这是网络安全领域技术人员之间进行技术竞技的一种比赛形式。
在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为“第0个迭代”要做的事情。但是,当项目运行了一段时间之后再来反观,我总会发现一些不足的地方,要么测试分类没有分好,要么基本的编码架子没有考虑周全。
微信access_token分为两种,一种是网页授权access_token,一种是全局接口调用凭证。有关这两个区别,可以查看微信网页授权access_token和普通access_token区别。今天主要来说获取全局接口调用凭证access_token的坑,下面是官方文档的一些内容,其中非常重要的本文已经加了标记。
今天咱们来谈一谈 java 的 list 集合吧
不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
@NotEmpty 用在集合类上面、@NotBlank 用在String上面、@NotNull 用在基本类型上
一份好的设计文档需要提供清晰的问题描述、整体的概要设计、涵盖各个细节的详细设计等。