My Blog

stay hungry, stay foolish

Java的一些最佳实践

Java Tips

使用BigDecimal.ZERO 代替 new BigDecimal(0) 遇到需要返回空集合的情况,使用Collections.emptyList() 代替 new ArrayList(),减少创建对象开销 使用Google Guava 的Lists.newArrayList(),Maps.newHashMap() 等更高语义层次的工厂方法代替Java中的new 关键字 ...

Tomcat 架构设计

Tomcat 架构设计之源码

Tomcat 架构设计 启动 org.apache.catalina.startup.Bootstrap#main() org.apache.catalina.startup.Bootstrap#init() org.apache.catalina.startup.Bootstrap#initClassLoaders ...

深入理解 Java 虚拟机之垃圾回收

深入理解 Java 虚拟机之垃圾回收

深入理解 Java 虚拟机之垃圾回收 对象是否存活(何时需要被回收)的判定 引用计数算法 给对象分配一个计数器,当有一个地方引用该对象时,计数器值+1,当引用失效时-1.当值为0时表示该对象不再被使用,进行回收。 优点:实现简单、效率较高 缺点:难以解决循环引用问题 可达性分析算法 通过一系列称为 GC Roots 的对象为起始点往下搜索,经过的路径称为引...

深入理解 Java 虚拟机之 JVM 内存

深入理解 Java 虚拟机之 JVM 内存

深入理解 Java 虚拟机之 JVM 内存 Java 内存区域 程序计数器(Program Counter Register) 当前线程执行字节码的行号计数器。字节码解释器工作时通过改变该计数器的值来获取下一条需要执行的字节码指令。常见的功能比如:分支、循环、异常处理、线程恢复等。线程私有。 如果当前线程执行的是一个 Java 方法,该计数器记录正在执行的字节码指令的地址;如...

为什么 Java 中 Map 的 get() 方法参数是 Object 而不是泛型

背景 最近看到一个有意思的话题: Java 中的 Map 的 get() 方法参数为什么是 Object 而不是使用泛型 K ? 后来在网上找到了 Map 的作者(同时也是 Java Collection FrameWork 的作者) Josh Bloch 的一段关于此问题的说明: that they attempted to generify the ge...

一些小目标

Java 实现服务网关 Java 实现 HTTP 服务器 Java 实现 RPC Java 实现数据库 Java 实现 IM Java 实现配置中心 Java 实现日志框架 Java 实现 Web MVC 框架 Java 实现 ORM 框架 Java 实现 MQ Java 实现分布式锁 Java 实现缓存 Java 实现分布式ID J...

LeetCode

twoSum

题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为...

LeetCode

mergeTwoLists

题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] 输出:[0] 提示: ...

LeetCode

maxDepth

题目描述 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 示例: 输入: 给定二叉树 [3,9,20,null,null,15,7], 输出:返回它的最大深度 3 。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/...

LeetCode

intersection-of-two-linked-lists

题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后,链表必须 保持其原始结构。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB =...