## 0. 阅读完本文你将会学会- 写出更优雅高效的Java代码## 1. 前言周六逛B乎的时候正好刷到这样一个问题 **"Java开发手册(黄山版)怎么样?"**,我仔细一看这不是孤尽老师的著作吗?居然已经更新到了黄山版。上次... 等外不要在条件判断中执行其它复杂的语句,将复杂逻辑判 断的结果赋值给一个有意义的布尔变量名,以提高可读性。这条推荐性规约也是我推崇备至的。因为业务需要,我们可能在if语句中写出非常复杂的逻辑表达式。与、...
到底什么是模块化? 简单来说就是,对于 一个复杂的应用程序,与其将所有代码一股脑儿地放在一个文件中,不如按照一定的语法,遵循确定的规则(规范)将其拆分到几个互相独立的文件中 。 这些文件应该具有原子特... 实现模块化最常见的手段就是通过立即执行函数(IIFE) ,构造一个私有作用域,再通过闭包(从某种角度上看,闭包简直就是一个天生解决数据访问性问题的方案),将需要对外暴露的数据和接口输出。我们称之为**IIFE 模式**...
而降温的关键是要找到“升温点”,而golang就提供了非常好用的工具来帮助我们来定位程序中的很多问题,它就是**pprof** **。**# pprof简介pprof提供运行时程序的profiling,profiling一般翻译为画像。在互联网中,... 后边的Total samples是样本数采集的时间执行`top`命令可以可以看到占用量逆序排列的函数,如下。![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e228aaa492dc4006b52418d8cfa066e6~tplv-k3u1fbpfcp-zo...
强制执行垃圾回收以及跟踪内存分配以定位**内存方面的问题*** Battery:会监控 CPU、网络无线装置和 GPS 传感器的使用情况,并直观地显示其中每个组件消耗的电量,了解应用在**哪里耗用了不必要的电量*** Netwo... 介绍高阶函数之前,我们先看一个向函数内传入回调接口的例子。一般来说,需要先定义一个回调接口,调用函数传入接口实现的实例,函数进行一些处理之后执行回调,借助Lambda 表达式可以对接口的实现进行简化。```jav...
主要是项目交付中,产品存在的一些问题必须研发那边改进的,我负责推动这方面的状态。总的来说,身份职位是一位DBA,会一点应用开发,会一点工程测试,会一点写作!## 回首2023转眼间将近新年,回首2023年的工作生活,感觉自己碌碌无为,虽然学习了某些技术 ,熟悉了一些工具框架,但是搞的东西没有起色,没有实现自由财务,世界没有因为我的存在而进行改变。信息行业中存在哪些亟待解决的事情?从信息建设的方案的初衷出发,大概分...
问题描述二、方案选型三、技术方案 1. 项目结构 2. 核心组件 3. 增强原理四、方案实现 1. 定义插件 2. 实现拦截器五、方案测试 1. 普通方法 2. 异步方法... 我选择代码织入技术而不是AOP,原因是可以避免创建大量的代理类增加元空间的内存占用,另外代码织入技术更底层一些,能实现的能力更强,此外内联代码会随着原方法一起执行,性能也更好。有了具体的技术选型的方案之...
这样的话会遇到很多生命周期相关的问题。 Rust 允许自行实现 Runtime 来调度任务和执行 syscall;并提供了 Future 等统一的接口;另外内置了 async-await 语法糖从面向 callback 编程中解放出来。![picture.im... 这种基于事件的触发机制在 cpp 里面常常会以 callback 的形式遇见。Callback 会打断我们的连续逻辑,导致代码可读性变差,另外也容易在 callback 依赖的变量的生命周期上踩坑,比如在 callback 执行前提前释放了它会引...
微服务是一种将复杂应用拆分为微小的服务单元,每个服务单元都可以独立升级甚至替换,从而实现快速交付和迭代的文化。字节跳动是对微服务技术使用得非常极致的企业之一:伴随业务的迅速扩张,微服务以其灵活迭代、... 但是能揭示部分问题也比没有指标强。当衡量 CPU 时,业界有很多成熟的算法,比如将 workload 的使用关系和资源挂钩,这需要该领域的专家协助执行,我们目前采用的方式是单核 QPS。当然,不同类型服务的请求特征是不...
那到底什么是复杂度?John Ousterhout教授在书中明确指出,复杂度是指那些使得软件难以理解和修改的因素。复杂的系统通常具备三个明显特征,由John教授抽象为以下三个方面: 1. **变更放大(Change amplificat... 幸运的是答案是否定的。软件工程已经发展了60多年,我们遇到的问题,前辈们肯定也遇到过,我们有充分的理论和方法来对抗系统的逐渐混乱。如下图所示,虽然系统复杂度上升是无法避免的,但是适时的重构可以减缓系统混乱的...
过长的函数和参数。这一章还提醒我们要警惕意料之外的改变,不要过多使用全局变量和传递可变的对象,以免带来复杂难以追踪的 *bug*。在有了类之后,我们应该多使用类来记录数据,而不是使用过多的参数或者单纯使用字符串来记录所有属性。## 构筑测试体系这一章主要讲了如何编写测试。最重要的应该是让测试自动进行,因为人很容易忘记进行这个步骤。我觉得我们可以把测试放在编译之后立即执行,确保每一次编译都能通过单元测试。...
所以Leakcanary只适合在线下测试环境中分析内存问题,不适合带着上线。# 2 KOOM原理分析那么既然Leakcanary不能带到线上,那么针对线上问题该如何分析呢?bugly只能分析Crash或者ANR,所以快手团队针对这些问题,研发了KOOM线上内存监控组件。在此之前我们思考几个问题:(1)对于线上APM,它需要非常高的实时性吗?如果出现内存泄漏就一定要立刻dump内存快照吗?(2)dump内存快照是否能够在子线程中执行,而不阻塞主线程;(3)对于...
`pre-main`:main() 函数之前,即操作系统加载 App 可执行文件到内存,然后执行一系列的加载 & 链接等工作,最后执行至 App 的 `main()` 函数;- `post-main`:`main()`函数之后,即从`main()`开始,到`appDelegate`的`... 然后在运行时(从磁盘加载到内存中,是一个镜像文件),会将真正的地址给符号(即在内存中将地址与符号进行绑定,是 `dyld` 做的,也称为动态库符号绑定),一句话概括:绑定就是给符号赋值的过程。#### 面试题扩展- `lo...
为了解决上述问题,云原生数仓(以下简称云数仓)应运而生。 与传统方案不同的是:云数仓借助于云平台的基础资源,实现了资源的动态扩缩容,并最大化利用资源,从而达到 Pay as you go 按实际用量付费的模式。 ... 一是地理信息数据处理能力,业务需要丰富的geo函数,用于整合海量的历史气象数据,对目标点位/区域实现天气预测;二是高时效性查询需求,风场、云层预测等模型需要实时查询能力,快速做到结果反馈;最后,由于查询的接口众...