Java|使用Java注解

这个注解完成了一个 Servlet 代理多个请求。

ServletMapping 注解

1@Target({ElementType.METHOD})
2@Retention(RetentionPolicy.RUNTIME)
3@Documented
4@Inherited
5public @interface ServletMapping {
6    String value() default "";
7}

Linux 安装 Nodejs 教程

Linux 安装 Nodejs 教程。

深入理解Java多线程(四):锁、锁工具、并发容器

JUC 提供了一套锁对象,分别是:Lock 接口、AbstractQueuedSynchronizaer(队列同步器)、ReentrantLock、ReentrantReadWriteLock、Condition、LockSupport。

深入理解Java多线程(三):JUC基础篇

这篇文章主要侧重讲 JUC 的多数类的使用,文章里贴了很多练习的代码,可以通过代码更加深刻的了解这些类的功能。

这篇文章主要总结了 volatile、原子类、ReentrantLock、CountDownLatch、CyclicBarrier、Phaser、Semphore、Exchanger 的使用,然后进行了一些对比。

深入理解Java多线程(二):多线程问题学习总结

学了一段时间多线程方面的知识了总感觉掌握的知识有些散乱,在网上搜了一些面试问题总结梳理一下。

多线程

java 中有几种方法可以实现一个线程?

Java 中有四种方式实现一个线程。

  1. 通过实现一个 Runnable
  2. 继承 Thread 并重写 run 方法
  3. 继承 Callable,用 Future 接收可以实现异步调用
  4. 使用线程池(executer)提交作业

如何停止一个正在运行的线程?

使用 suspend 可以挂起一个线程,使用 stop 可以终结一个线程,但这些方法已经不推荐使用,存在安全性问题,停止一个线程最好的方式是让它自然结束,常用的方式是使用一个 volatile 变量来控制线程是否继续运行。

suspend、stop 不再推荐使用的原因是容易引发死锁,当一个线程持有锁的时候它被挂起或暂停掉了,此时锁还没有释放,其他线程无法获取所就会出现思索,最好的方式是让线程自然结束。

深入理解Java多线程(一):线程基础知识总结

Java 线程的实现

Java 线程在 JDK1.2 之前,是基于称为“绿色线程”的用户线程实现的,而在 JDK 1.2 中,线程模型替换为基于操作系统原生线程模型来实现,因此,在目前的 JDK 版本中,操作系统支持怎样的线程模型,在很大程度上决定了 Java 虚拟机的线程是怎样映射的,这点在不同平台上没有办法达成一致,虚拟机规范中也并未限定 Java 线程需要使用哪种线程模型来实现。

举个例子,对于 Sun JDK 来说,它的 Windows 版与 Linux 版都是使用一对一的线程模型实现的,一条 Java 线程就是映射到一条轻量级进程之中,因为 Windows 和 Linux 系统提供的线程模型就是一对一的。

总结:java 线程与操作系统线程是一对一的,在 linux 上通过调用 pthread 库创建线程。

SMART 是什么

SMART 可以指导我们置顶目标,评估目标的合理性,符合 SMART 原则的目标一般都是务实的,如果你也在苦恼于置顶目标、拆解目标不妨试试。

所谓 SMART 原则,即:

  1. 目标必须是具体的(Specific)

  2. 目标必须是可以衡量的(Measurable)

  3. 目标必须是可以达到的(Attainable)

  4. 目标必须和其他目标具有相关性(Relevant)

  5. 目标必须具有明确的截止期限(Time-based)

SMART 原则一 S(Specific)——明确性   所谓明确就是要用具体的语言清楚地说明要达成的行为标准。明确的目标几乎是所有成功团队的一致特点。很多团队不成功的重要原因之一就因为目标定的模棱两可,或没有将目标有效的传达给相关成员。

SMART 原则二 M(Measurable)——衡量性   衡量性就是指目标应该是明确的,而不是模糊的。应该有一组明确的数据,作为衡量是否达成目标的依据。

SMART 原则三 A(Attainable)——可实现性   目标是要可以让执行人实现、达到的,如果上司利用一些行政手段,利用权利性的影响力一厢情愿地把自己所制定的目标强压给下属,下属典型的反映是一种心理和行为上的抗拒:我可以接受,但是否完成这个目标,有没有最终的把握,这个可不好说。一旦有一天这个目标真完成不了的时候,下属有一百个理由可以推卸责任:你看我早就说了,这个目标肯定完成不了,但你坚持要压给我。

SMART 原则四 R(Relevant)——相关性   目标的相关性是指实现此目标与其他目标的关联情况。如果实现了这个目标,但对其他的目标完全不相关,或者相关度很低,那这个目标即使被达到了,意义也不是很大。

SMART 原则五 T(Time-based)——时限性   目标特性的时限性就是指目标是有时间限制的。例如,我将在 2005 年 5 月 31 日之前完成某事。5 月 31 日就是一个确定的时间限制。没有时间限制的目标没有办法考核,或带来考核的不公。上下级之间对目标轻重缓急的认识程度不同,上司着急,但下面不知道。到头来上司可以暴跳如雷,而下属觉得委屈。这种没有明确的时间限定的方式也会带来考核的不公正,伤害工作关系,伤害下属的工作热情。

Java|深入理解Java集合框架

Java 集合实现了常用数据结构,是开发中最常用的功能之一。

Java 集合主要的功能由三个接口:List、Set、Queue 以及 Collection 组成。

常见接口:

  • List : 列表,顺序存储,可重复
  • Set :集合,与数学中的集合有同样的特性:元素不能重复
  • Queue:队列
  • Collection:所有 Java 集合的接口,定义了“集合”的常用接口

Java|内部类总结

一、什么是内部类?

内部类是在一个类中的类,类的声明可在类中或方法中。

内部类的特点

优点:

  • 内部类可以方便的访问外部类的隐式成员变量
  • 一个类作为内部类是一种很好的信息隐藏,例如静态内部类需要使用 类名.内部类 引出,成员内部类使用 对象.内部类 引出
  • 内部类可以实现单继承的局限性

缺点:

  • 结构复杂

结构复杂体现下内部类的访问、内部类中使用外部类的成员变量等方面。

Java|Lambda、函数式接口使用

Lambda 是 JDK8 的新特性,Lambda 让 Java 支持了函数式的编程,如 JS 那样可以在参数中使用函数(JS 中函数是对象)。

这些特性是 Java8 的一些特性,使用这些特性能够简化我们的代码,让代码更清晰。