Java核心基础
文章平均质量分 65
墨丶亦轩
这个作者很懒,什么都没留下…
展开
-
【Java基础】泛型记录概要
泛型记录概要泛型出现重要原因之一:创造容器类泛型主要目的之一:指定容器持有什么类型的对象,保证编译的正确性泛型简单实例class GenericsClass<T>{ private T property; public GenericsClass(T property){}}元组(tuple)基本概念 又称数据传送对象或者信使。将一组对象直接打包存储于其中的一个单一对象,只允许往这个原创 2017-05-05 15:44:15 · 470 阅读 · 0 评论 -
【设计模式】Lambda实现工厂模式
简单原始例子public interface Shape { void draw();}public class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); }}转载 2017-04-01 16:15:50 · 626 阅读 · 0 评论 -
【设计模式】行为型模式——策略模式(Strategy Pattern)
策略模式定义 实现某一个功能有多条途径,每一条途径对应一种算法,此时我们可以使用一种设计模式来实现灵活地选择解决途径,也能够方便地增加新的解决途径策略模式的主要目的是将算法的定义与使用分开,也就是将算法的行为和环境分开策略模式优点策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。策略模式提供了管理相关的算法族的办法。策略原创 2017-04-01 15:58:19 · 354 阅读 · 0 评论 -
【设计模式】结构型模式——适配器模式(Adaper Pattern)
适配器模式定义 将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系适配器优点将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无须修改原有代码。原创 2017-03-31 17:44:36 · 250 阅读 · 0 评论 -
【Java基础】线程笔记——显式锁StampedLock
首先了解悲观锁和乐观锁概念 悲观锁:假设会发生并发冲突,屏蔽一切可能违反数据完整性的操作 读取悲观锁:在读取之前先判断以下,数据有无修改。 乐观锁:假设不会发生并发冲突,只在提交操作前检查是否违反数据完整性的操作 读取乐观锁:在读取之前不需要判断数据是否被修改,只需读取自己的数据StampedLock StampedLock是基于能力的锁,很好的实现悲观锁和乐观锁的逻辑。原创 2017-03-24 17:39:12 · 395 阅读 · 0 评论 -
【Java基础】线程笔记——显式锁Lock和ReentrantLock
Lock Lock是一个接口提供了无条件的、可轮询的、定时的、可中断的获取锁操作包路径import java.util.concurrent.locks.Locklock() //获取锁,如果线程不可用,将禁用当前线程,并且在获取锁之前,该线程一直处于休眠状态lockInterruptibly() //如果当前线程未被中断,获取锁;如果锁可用,获取锁tryLock() //仅在锁为空闲状态原创 2017-03-24 16:50:12 · 270 阅读 · 0 评论 -
【Java基础】线程笔记——线程安全
线程不安全 线程操作一个数据结构出现修改和串行的情况,没有保证数据的一致性 典型例子:在实际开发中项目service和servlet都是单实例共享变量,极易出现多个用户数据串掉的情况,从而导致数据出错public class ThreadA extends Thread{ private Count count; public ThreadA(Count count){原创 2017-03-24 14:15:24 · 208 阅读 · 0 评论 -
【Java8】Guava——Optional
Optional使用场景 调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法。我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数表示可能为null的T类型引用 一个Optional<>实例可能包含非null的引用(我们称之为引用存在),也可能什么也不包括(称之为引用缺失)OfOptional.of(T) //为非null的值创建一个Opti原创 2017-03-08 11:51:13 · 414 阅读 · 0 评论 -
【Java基础】线程笔记——ThreadApi
线程的中断机制第一种方法: Thread.stop() (已废弃) 【缺点】线程不安全,已不再使用第二种方法: Thread.interrupt()当一个线程运行时,另一个线程可以调用对应的 Thread 对象的 interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。如果只是单纯的调用 interrupt()方法,线程并没有实际被中断,会继续往下执行原创 2017-03-24 13:42:15 · 227 阅读 · 0 评论 -
【Java基础】线程笔记——创建线程的3种方式
最直接——继承Thread类public class ThreadA extends Thread { @Override public void run() { try { Thread.sleep(500L); } catch (InterruptedException e) { e.printStack原创 2017-03-24 10:49:37 · 218 阅读 · 0 评论 -
【设计模式】创建型模式——建造者模式(Builder Pattern)
建造者模式定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 例如: 王者荣耀内的英雄角色。他们有多个组成部分(技能、着装、五官等)构成一个复杂的角色对象。但每个角色的组成部分又有差异,但创建步骤都大同小异。最后将各组成部分装配成一个完整的人物。模式优点在建造者模式中, 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创原创 2017-03-31 13:23:51 · 504 阅读 · 0 评论 -
【Java基础】线程笔记——synchronized
synchronizedpublic class ThreadA extends Thread{ private Count count; public ThreadA(Count count){ this.count = count; } @Override public void run() { count.add();原创 2017-03-24 15:24:47 · 208 阅读 · 0 评论 -
【Java基础】线程笔记——原子操作:atomic
atomic不会阻塞线程。是加强版的volatile原子操作。主要用于高并发环境高效程序处理了解volatile修饰变量易变的、不稳定的从内存种获取值读取/写入不需要锁提供了内存可见性,但是没提供原子性。不适用高并发场景volatile与加锁机制主要的区别:前者只提供了内存可见性。后者还提供了原子性atomic处理类java.util.concurrent.atomic基本类: At原创 2017-03-27 11:03:16 · 254 阅读 · 0 评论 -
【Java基础】线程笔记——线程安全的单例模式的写法
线程安全,高并发性能不高public class SingletonOne { private static SingletonOne instance; private static ReentrantLock lock = new ReentrantLock(); private SingletonOne(){ } public static SingletonOn原创 2017-03-27 11:07:22 · 255 阅读 · 0 评论 -
【Java】深入理解JVM学习笔记(三) —— GC收集器和内存分配
判断对象是否存活引用计数算法 很多判断对象是否存活的方式就是引用计数算法:给对象添加一个引用计数器,每当一个地方引用它,计数器+1;引用失效,计数器-1。 任何时刻计数器为0的对象是不可能再被使用的。 Java虚拟机没有使用主流的引用计数法管理内存。主要原因是难以解决对象之间相互循环引用的问题classA.instance = classBclassB.instance = classA原创 2017-04-17 14:26:05 · 511 阅读 · 0 评论 -
【java基础】 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO
PO(persistant object) 持久对象 在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了。通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 中应该不包含任何对数据库的操作。DO(Domain Obje转载 2017-04-06 15:59:25 · 265 阅读 · 0 评论 -
【java8】语法对比
map foreach以前的方式for (Map.Entry<String, String> map : paramsMap.entrySet()) {params.add(new BasicNameValuePair(map.getKey(), map.getValue()));}java8paramsMap.forEach((key,value) -> params.add(new Basi原创 2017-03-28 17:28:08 · 1255 阅读 · 1 评论 -
【Java】深入理解JVM学习笔记(二) —— 对象
【问题一】程序通过new一个普通对象的时候,虚拟机进行了哪些操作? 解答: ①首先检查这个指令的参数是否能在常量池中定位到这个类引用 ②并且检查这个符号引用代表的类是否被加载、解析、初始化过③若没有加载,必须执行相应类的类加载过程④虚拟机为新生对象分配内存(对象所需内存大小,在类加载时间可以完全确定)④ 分配内存 为对象分配大小相当于把一块确定大小的内存从Java堆中划分出来。假设J原创 2017-04-13 16:12:41 · 242 阅读 · 0 评论 -
【Java】Servlet3规范学习笔记
Servlet3新增功能异步处理支持新增的注解支持可插性支持注解Filter@WebFilter(filterName = "myFilter", urlPatterns="/*", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD})public class MyFilter impleme原创 2017-04-18 17:35:37 · 1549 阅读 · 0 评论 -
【设计模式】行为型模式——命令模式(Command Pattern)
模式定义 将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。模式优点(1) 降低系统的耦原创 2017-04-18 16:35:09 · 346 阅读 · 0 评论 -
【设计模式】行为性模式——模板方法模式(Template Method Pattern)
模式定义 定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。模式优点(1) 在父类中形式化地定义一个算法,而由它的子类来实现细节的处理,在子类实现详细的处理算法时并不会改变算法中步骤的执行次序。 (2) 模板方法模式是一种代码复用技术,它在原创 2017-04-18 14:03:05 · 317 阅读 · 0 评论 -
【设计模式】结构型模式——组合模式(Composite Pattern)
组合模式定义 组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。 组合模式为处理树形结构提供了一种较为完美的解决方案,它描述了如何将容器和叶子进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器和叶子。模原创 2017-04-05 11:42:40 · 273 阅读 · 0 评论 -
【Java】深入理解JVM学习笔记(一) —— JVM数据区域
JVM结构图程序计数器 是一块较小的内存空间。当前线程所执行的字节码的行号指示器。字节码解释器工作原理 通过改变计数器的值来选取下一条需要执行的字节码指令。分支、循环、跳转、异常处理、线程恢复等操作都需要依赖计数器JAVA多线程实现方式 线程之间轮流切换并分配处理器执行时间实现的运行Java方法时,执行虚拟机字节码指令地址。 运行Native方法时,计数器则为空(undefine原创 2017-04-13 14:57:50 · 384 阅读 · 0 评论 -
【设计模式】创建型模式——原型模式(Prototype Pattern)
原型模式的定义 使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。注意:通过克隆方法所创建的对象是全新的对象,它们在内存中拥有新的地址,通常对克隆所产生的对象进行修改对原型对象不会造成任何影响,每一个克隆对象都是相互独立的。通过不同的方式修改可以得到一系列相似但不完全相同的对象模式优点当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过原创 2017-04-01 13:45:19 · 339 阅读 · 0 评论 -
【Java基础】线程笔记——线程安全集合类
HashTableConcurrentHashMapCopyOnWriteHashTableHashTable特点 1. 和HashMap都是散列表,储存键值对映射 2. 继承Dictionary、实现Serializable、Clone、Map接口 3. 初始容量(哈希表创建容量)和加载因子(哈希表中桶的数量),是影响性能的关键因素。默认加载因子0.75 4. 哈希表的方法都是同步的原创 2017-03-27 11:53:14 · 301 阅读 · 0 评论 -
【设计模式】结构性模式—— 代理模式(Proxy Pattern)
代理模式定义 给某一个对象提供一个代理,并由代理对象控制对原对象的引用。它是一种对象结构型模式代理模式的优点代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。远程代理使得客户端可以访问在远程机器上的对象,远程机器 可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。虚拟代理通过使用一个小对象来代表一个大对象,可以减少系 统资源的消耗,对系统进行优化并提高运行速原创 2017-03-31 11:18:08 · 326 阅读 · 0 评论 -
【java基础】线程笔记——AQS(AbstractQueuedSynchronizer)
AQS : java.util.concurrent.locks.AbstractQueuedSynchronizer 研究java.util.concurrent并发包的突破口(例如: ReentrantLock核心是内部类Sync,然而Sync继承AQS)AQS核心 通过一个共享变量来同步状态,变量的状态由子类去维护,线程阻塞队列的维护线程阻塞和唤醒 共享变量的修改都是通过U原创 2017-04-10 11:07:30 · 285 阅读 · 0 评论 -
【java基础】线程笔记——LockSupport
LockSupportLocalSupport类特性不可实例化private LockSupport() {} // Cannot be instantiated.LockSupport的方法都是静态方法私有变量 private static final sun.misc.Unsafe UNSAFE; private static final long parkBlocker原创 2017-04-10 09:45:02 · 508 阅读 · 0 评论 -
【Java基础】关于异常
Throwable是Java中所有错误或异常的超类。它的两个子类是Error和Exception。Error 是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。可能在执行原创 2017-03-21 11:16:53 · 171 阅读 · 0 评论 -
【Java基础】关于字符串
String和CharSequence的区别String 实现CharSequence接口,也就是说String也是CharSequence类型。CharSequence是一个可读序列(readable),对访问不同种类的序列,提供了一个统一的、只读的接口(etc.StringBuffer和StringBuilder实现CharSequence接口)CharSequence接口方法,只包括以下原创 2017-03-21 10:36:17 · 219 阅读 · 0 评论 -
Java多线程学习笔记
基础概念【一】什么是pu核心数?线程数?① 宽(32位/64位CPU位宽) : 更大的cpu一次能处理更大范围的数据运算和支持更大容量的内存 ② 多核心(单芯片多处理器,简称CMP):其思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片中,各个处理器并行处理不同的线程 ③ 多线程(简称SMT):可复制多个处理器上的结构状态,让同一处理器的多个线程同步执行并共享处理器上的资源核心数原创 2017-03-06 18:03:24 · 281 阅读 · 0 评论 -
ActiveMQ学习笔记(一)—— HelloWorld
HelloProducer.class// 生产者的主要流程 Connection conn = null;//1.初始化连接工厂ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://172.16.41.156:61616");// 2.创建Connection conn = factory.createConnecti转载 2017-03-06 16:09:24 · 288 阅读 · 0 评论 -
【Java8】Guava——Object方法和排序
ObjectsEqualString str = "test";Objects.equal(str,null) //return falseObjects.equal(null,str) //return falseObjects.equal(str,"test") //return trueObjects.equal(null,null) //return trueHashCode 对原创 2017-03-08 14:12:29 · 1882 阅读 · 0 评论 -
jvm调优笔记(二)—— GC策略&内存申请、对象衰老
JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类堆内存GC JVM(采用分代回收的策略),用较高的频率对年轻的对象(young generation)进行YGC,而对老对象(tenured generation)较少(tenured generation 满了后才进行)进行Ful原创 2017-03-02 18:10:43 · 267 阅读 · 0 评论 -
jvm调优笔记(一)
java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)方法栈&本地方法栈: 线程创建时产生,方法执行时生成栈帧方法区 存储类的元数据信息 常量等堆 java代码中所有的ne原创 2017-03-02 18:06:03 · 266 阅读 · 0 评论 -
Java序列化
什么是序列化 序列化 (Serialization)是指将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。简而言之序列化 将数据结构或对象转换成二进制串的过程反序列化 将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程具体例子public static voi转载 2017-03-02 18:01:49 · 252 阅读 · 0 评论 -
Java反射机制
Java反射机制作用1.编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息。 2.运行期实例化对象,调用方法,通过调用 get/set 方法获取变量的值。(常用)Java6的反射机制例子 //得到MyObject所有方法 Method[] methods = MyObject.class.getMethods(); for(原创 2017-03-02 15:05:30 · 345 阅读 · 0 评论 -
【Java基础】线程笔记——多线程交互:线程阀
线程阀是线程与线程之间相互制约和交互的一种机制基础概念Queue:保存一组元素,采用FIFO(先进先出)原则Deque:保存一组元素,采用先进后出原则(栈结构),双端队列主要用于栈操作阻塞队列:支持两个附加操作的队列。队列中元素为空时,获取元素的线程会等待队列变成非空;队列元素满时,存储元素的线程会等待队列变成可用(常用于生产者和消费者场景)。生产者往队列添加元素。消费者取出队列元素。阻塞原创 2017-03-27 18:03:16 · 473 阅读 · 0 评论 -
【设计模式】面向对象原则
对于面向对象语言设计的软件,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一 面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则7种常用的面向对象设计原则单一职责原则(Single Responsibility Principle, SRP) 一个类只负责一个功能领域中的相应职责(换句话说,一个类而原创 2017-03-23 17:00:41 · 389 阅读 · 0 评论 -
【Java基础】线程笔记—— 线程池
什么是线程池?目的:减少对象创建和销毁的时间 Java线程池实现Java高并发、Java多线程、可管理的统一调度器 Executors是线程的工厂类(工具类):方便快速的创建线程池创建线程池常见的3种方法newSingleThreadExecutor 创建单线程的线程池 newFixedThreadPool 创建固定大小的线程池 newCachedThreadPool 创建可缓存线程原创 2017-03-28 11:31:47 · 259 阅读 · 0 评论