Java基础:JDK8 HashMap源码及数据结构分析

HashMap 是 Java 中非常重要的集合类型,其具有快速存储,快速查找(时间复杂度非常低,非效非常高),自动扩容等特点,在实际开发中经常用到。

关于 HashMap 特性,底层原理也是面试中被问到概率极高的问题,因为 HashMap 涉及到好几个基本数据结构及相关算法知识,如组数,链表,二叉树及变种,Hash算法等。所以有必要对其深入理解。

阅读更多

线程异常处理及异常传递

可以给线程指定异常处理类来捕获异常进行自定义处理。

线程中的异常可通过线程组异常处理来实现异常传递,线程组 ThreadGroup 实现了 Thread.UncaughtExceptionHandler 接口。

阅读更多

Java基础:JDK 8 之 LocalDate,LocalTime,LocalDateTime 使用

因为 Date 实在不方便,特别是在日期计算时难用,并且格式化是非线程安全的。

JDK 8 提供 LocalDate, LocalTime, LocalDateTime 可以更方便操作日期时间,是线程安全的。

在 JDK 8 出来之前,大多会使用第三方库 Joda 来操作日期时间,GitHub joda-time

国内工具类 Hutool 也提供了日期时间工具类,可以方便操作。

阅读更多

Utils-获取真实IP地址

获取真实 IP 地址。一次项目中有记录请求方的 IP,某天收集到的 IP 地址全是相同的,后面定位到问题是在阿里云启用了 SLB(负载均衡),收集到的全是负载均衡服务器的 IP,而不是用户端的 IP,后面改为判断从 x-forwarded-for 中取。

阅读更多

Java基础:Java 注解(Annotation)及使用

Java 注解(Annotation)是 JDK 1.5 引入的特性,与类、接口、枚举是在同一等级。它可以作用在类、属性、方法、局部变量、方法参数上,用于对这些元素进行说明,注释,解释。

注解在功能上可以看成是一个接口,注解实例就是一个实现该接口的动态代理类,可在方便在程序运行期间通过反射获取该字段或方法的注解的实例,来决定下一步如何处理。

阅读更多

理解 Jdk Lock 的使用

JDK 1.5 新增了 ReentrantLock 类,可以实现线程之间的同步互斥,相比 synchronized ,在扩展功能上更加强大,在使用上更加灵活。

ReentrantLock 还具有嗅探锁定、多路分支通知等功能。

阅读更多

线程间通信-wait/notify/join/ThreadLocal/线程状态

  在将某一任务拆份成多个子任务,使用多线程执行这些子任,就涉及到线程通信,才能使用多子任变成一个整体。

  线程间通信后,系统之间的交互性会更强大,在提高 CPU 利用率时还有助于对各线程任务的把控和监督。

阅读更多

理解 synchronized 同步锁的使用

非线程安全 是在多个线程对同一个对象中的实例变量进行并发访问,读取的数据不一致,即数据被意外修改过,出现了脏读

synchronized 是 Java 中的关键字,是一种同步锁,可以修改方法、代码块、静态方法、类,使多线程以排队方式进行同步处理。

阅读更多