JDK 的广泛分支
Oracle Hospot JDKjava 8 特定版本以后就不再免费了。
现有的JDK8,2019.1之前的更新都可以免费获取正常使用。
Oracle JDK11是一个长期支持的版本,用于商业环境需要付费。
Azul Zulu builds of OpenJDKZulu 是Azul公司基于OpenJDK发布的Java SE产品,它没有Oracle JDK对使用场景上的诸多限制,可以放心免费下载和使用。它的核心部分就是原汁原味的OpenJDK,没有任何额外的改动——Azul有时候也会对OpenJDK做bug fix,但这些都是通过提交回到OpenJDK去然后再进入到Zulu Java SE产品中的。它与“自己下载OpenJDK源码,自己build”的最大区别是:Azul会在每次发布Zulu产品之前进行充分的测试,build出来的二进制版本符合Java的兼容性测试;同时,Azul有与Oracle签订合作协议,在critical security fix的方面会比公开发布的OpenJDK源码要更早获得补丁,提前做好build与测试工作,基本上可以跟Oracle在同一时间发布打了se ...
Java 并发编程笔记
写在前面的话并发编程最早的实践都在操作系统里。
理论和实践之间是有鸿沟的,要弥合这种鸿沟,通常需要我们去学习别人的实践。比如并发的标准设计思想来自于操作系统里的管程,我们应当学习管程,进而了解标准的并发模型。
juc.xmind
Java 线程线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件 I/O),又可以独立调度(线程是 CPU 调度的最基本单位)。主流的操作系统都提供了线程的实现,但 Java 的线程实现却在关键方法上大量使用 Native(这也就意味着,不能使用平台无关的实现),其中主要包括三种方法:
内核线程实现。
用户线程实现(Green Thread)。
用户线程加轻量级线程实现。
线程实现内核线程实现内核线程(Kernel Thread,KLT)就是直接由操作系统内核(Kernel)支持的线程,这种线程由内核来完成线程切换,内核通过操纵调度器(Scheduler)对线程进行调度,并负责将线程的任务映射到各个处理器上。每个内核线程可以被看做是内核的一个分身,这样操作系统就有能力处理多件事 ...
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 可以由指定输入输出类型,每个 step 的输出会成为下一个阶段的输入。。每一步如果可以在实现上变化,可以使用策略模式,如果需要实现差异化的聚合,需要使用组合模式。
我们使用 Step 的时候最好先指定。
蔡康永的说话之道
阅读本来是赏心悦目的事情。
透过说话,懂得把别人放在心上,这就是我相信的、蔡康永的说话之道。
做自己和没礼貌,常在一线之间。刺耳并不等于简单的“直”。
把话练好,是最划算的事情。把话练好,就是练练把人放在心上。
你有没有能力想象听你讲话的人是什么心情,想听到什么。
练习说话很方便。说话其实就关乎你和别人的想法的交流。单单研究话是没有用的,研究人和人的想法有用。
我们心里其实藏了很多,我们自己都没法搞清楚的事情。
我们应当尽量把我们相信的事,和我们说的话变为一体。
能够打动别人的话,包含了很多“生命能量”,而不只是巧言令色,别有居心。
梦想拥有天使的外表,不如修炼一颗天使的心。与其嫉恶如仇,不如隐恶扬善。
已经很讨人喜欢的你,在未来会更讨人喜欢
转述第三方的赞美,更可信。
你说什么样的话,你就是什么样的人
人把自己内心深处的想法隐藏起来,只会让自己错乱、分裂。
说话和想法的因果有时候会反直觉。
不要简单责备人,修复问题的效果不一定好。
外表好不好看,绝对不是人生的决胜点
讨不讨人喜欢,还比较重要一点。甚至超越一般的、基于能力的量化评价标准。
别人并不是为了伺候你而存在的。要提供一 ...
基本业务架构设计方法
如何实现自己的 validation123456789101112131415161718192021222324252627282930313233343536373839// 抛出异常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
协同
勇气
务实
细节
坚持
科技
担当
创新