Java 并发编程笔记
写在前面的话 并发编程最早的实践都在操作系统里。 理论和实践之间是有鸿沟的,要弥合这种鸿沟,通常需要我们去学习别人的实践。比如并发的标准设计思想来自于操作系统里的管程,我们应当学习管程,进而了解标准的并发模型。 juc.xmind Java 线程状态 线程状态列举 NEW 没有启动过的线程。 RUNNABLE 正在执行的线程。 可以被执行但没有拿到处理器资源。 BLOCKED blocked 其实是 blocked waiting。 1 等待 monitor,进入 synchronized method/block 2 或者等 wait()/await()以后再次进入 synchronized method/block(注意这一点,解除 wait 以后以后不是直接 runnable,而是进入 blocked,但这一步非常短暂,几乎不可能用程序观察到)。 WAITING 在调用这三种不计时方法以后,线程进入 waiting 态: Object.wait Thread.join LockSupport.park 我们经常在文档里看到的 thread lies dormant...
SRE-谷歌运维揭秘
SRE-谷歌运维揭秘.xmind
Unix 与 coredump
coredump 是什么 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。 我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。 core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景。 为什么会产生coredump文件 core产生的原因很多,比如过去一些Unix的版本不支持现代Linux上这种gdb直接附着到进程上进行调试的机制,需要先向进程发送终止信号,然后用工具阅读core文件。在Linux上,我们就可以使用kill向一个指定的进程发送信号或者使用gcore命令来使其主动出core并退出。 如果从浅层次的原因上来讲,出core意味着当前进程存在BUG,需要程序员修复。 从深层次的原因上讲,是当前进程...
基本编程范式、模型和风格
盒子模型 表达式由一系列盒子组成,这些盒子相互决定位置和大小。 流水线模型 模式-动作范式 一系列的输入会被每个模式所检查,模式匹配时,执行相应的输入。 复杂流程总-分架构 流程被分为:step1、step2、step3;stage1、stage2、stage3;phase1、phase2、phase3。 数据只要可以在同层内串联,每一层就可能被抽象成 step。如果 step 的输入输出是无关的,则需要使用 context 模式;否则使用 stream 模式,每个 step 可以由<T,R>指定输入输出类型,每个 step 的输出会成为下一个阶段的输入。。每一步如果可以在实现上变化,可以使用策略模式,如果需要实现差异化的聚合,需要使用组合模式。 我们使用 Step 的时候最好先指定<T,R>。
蔡康永的说话之道
阅读本来是赏心悦目的事情。 透过说话,懂得把别人放在心上,这就是我相信的、蔡康永的说话之道。 做自己和没礼貌,常在一线之间。刺耳并不等于简单的“直”。 把话练好,是最划算的事情。把话练好,就是练练把人放在心上。 你有没有能力想象听你讲话的人是什么心情,想听到什么。 练习说话很方便。说话其实就关乎你和别人的想法的交流。单单研究话是没有用的,研究人和人的想法有用。 我们心里其实藏了很多,我们自己都没法搞清楚的事情。 我们应当尽量把我们相信的事,和我们说的话变为一体。 能够打动别人的话,包含了很多“生命能量”,而不只是巧言令色,别有居心。 梦想拥有天使的外表,不如修炼一颗天使的心。与其嫉恶如仇,不如隐恶扬善。 已经很讨人喜欢的你,在未来会更讨人喜欢 转述第三方的赞美,更可信。 你说什么样的话,你就是什么样的人 人把自己内心深处的想法隐藏起来,只会让自己错乱、分裂。 说话和想法的因果有时候会反直觉。 不要简单责备人,修复问题的效果不一定好。 外表好不好看,绝对不是人生的决胜点 讨不讨人喜欢,还比较重要一点。甚至超越一般的、基于能力的量化评价标准。 别人并不是为了伺候你而存在...
基本业务架构设计方法
如何实现自己的 validation 123456789101112131415161718192021222324252627282930313233343536373839// 抛出异常private void validateParam(Map<String, String> paramValues) { boolean validate = MapUtils.isEmpty(paramValues) || !paramValues.containsKey(ParamConstant.CUSTOMER_N0) || StringUtils.isEmpty(paramValues.get(ParamConstant.CUSTOMER_N0)); if (validate) { throw new DataBusinessException(ResultCodeEnum.PARAM_NULL); } ...
如何写系统规划
列出背景 列出现状。 列出当前组织的 okr,分析机会和挑战。 将当前系统的视图勾勒出来,要能理解信息流和资金流。 列出痛点,分析需要实现的技术能力。 对标 对标其他团队的成功经验。 分析背景和成功原理。 要有架构图。 解决方案 要有目标架构图 有问题拆解:什么服务,是什么问题域的解空间,拥有什么能力,建设路径分几期,需要多少人力成本。 全团队分工: 本团队产品怎么分工 本团队后端怎么分工 本团队前端怎么分工 本团队数据怎么分工 本团队算法怎么分工 其他团队怎么分工 里程碑 按照绝对时间拆解 按照任务事件拆解 如何画简单的架构图 水平分层极其重要,每一层左边在层次里会有层次说明。 要用圆角都用圆角,要用直角都用直角。 重点:要填满整个空间: 深底色配白字。 模块之间的应该要直,不然应该优美、松弛。 图像应该紧凑,不留缝隙。 越处于背景之中,颜色越浅。 有时候,利用立体图形是好的。 要有阴影。 要玻璃化。
如何排查线上问题
cpu 偏高问题排查 cpu偏高问题排查.xmind 数据库问题排查 数据库问题排查.xmind
如何做一个优秀的系统 owner
协同 勇气 务实 细节 坚持 科技 担当 创新
如何实现正确的微基准测试
原问题 FROM:《How do I write a correct micro-benchmark in Java?》 Tips about writing micro benchmarks from the creators of Java HotSpot: Rule 0: Read a reputable paper on JVMs and micro-benchmarking. A good one is Brian Goetz, 2005. Do not expect too much from micro-benchmarks; they measure only a limited range of JVM performance characteristics. Rule 1: Always include a warmup phase which runs your test kernel all the way through, enough to trigger all initializations and compilations before timi...