Java、C++、Rust 的区别 C/C++ 完全相信而且惯着程序员,让大家自行管理内存,可以编写很自由的代码,但一 不小心就会造成内存泄漏等问题,导致程序崩溃。 Java/Golang 完全不相信程序员,但也惯着程序员。所有的内存生命周期都由 JVM 运行 时统一管理。 在绝大部分场景下,你可以非常自由的写代码,而且不用关心内存到底是 什么情况。 内存使用有问题的时候,我们可以通过 JVM 来进行信息相关的分析诊断和 调整。 这也是本课程的目标。 Rust 语言选择既不相信程序员,也不惯着程序员。 让你在写代码的时候,必须清楚明白 的用 Rust 的规则管理好你的变量,好让机器能明白高效地分析和管理内存。 但是这样 会导致代码不利于人的理解,写代码很不自由,学习成本也很高
java进阶训练营 项目源码获取
SpuDetailVO spuDetailVO = new SpuDetailVO();
CompletableFuture infoFuture = CompletableFuture.supplyAsync(() -> {
Spu spu = this.baseMapper.selectById(id);
spuDetailVO.setSpu(spu);
return spu;
}, executor);
CompletableFuture skuFuture = CompletableFuture.runAsync(() -> {
List skuList = skuMapper
.selectList(new QueryWrapper().eq("spu_id", id));
spuDetailVO.setSkuList(skuList);
}, executor);
CompletableFuture imgFuture = infoFuture.thenAcceptAsync((res) -> {
Long spuId = res.getId();
List spuImgList = spuImgMapper
.selectList(new QueryWrapper().eq("spu_id", spuId));
spuDetailVO.setSpuImgList(spuImgList);
}, executor);
CompletableFuture imgDetailFuture = infoFuture.thenAcceptAsync((res) -> {
Long spuId = res.getId();
List spuDetailImgList = spuDetailImgMapper
.selectList(new QueryWrapper().eq("spu_id", spuId));
spuDetailVO.setSpuDetailImgList(spuDetailImgList);
}, executor);
try {
CompletableFuture.allOf(infoFuture, skuFuture, imgFuture, imgDetailFuture).get();
} catch (Exception e) {
e.printStackTrace();
log.error("线程异常:{}",e.getMessage());
}
return spuDetailVO;
}
什么是字节码? Java bytecode 由单字节(byte)的指令组成,理论上最多支持 256 个操作码(opcode)。 实际上 Java 只使用了200左右的操作码, 还有一些操作码则保留给调试操作。 根据指令的性质,主要分为四个大类: 1. 栈操作指令,包括与局部变量交互的指令 2. 程序流程控制指令 3. 对象操作指令,包括方法调用指令 4. 算术运算以及类型转换指令
@Override
public List makeTree() {
List categoryList = this.baseMapper.selectList(null);
List collect = new ArrayList<>();
for (Category category : categoryList) {
if (category.getParentId() == 0) {
category.setCategoryList(getChildren(category, categoryList));
collect.add(category);
}
}
return collect;
}
private List getChildren(Category root, List all) {
List collect = new ArrayList<>();
for (Category c : all) {
if (c.getParentId().equals(root.getId())) {
c.setCategoryList(getChildren(c, all));
collect.add(c);
}
}
return collect;
}



