摘要: 1.AOP简介 AOP,面向切面编程,往往被定义为促使软件系统实现关注点的分离的技术。系统是由许多不同的组件所组成的,每一个组件负责一块特定的功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经 阅读全文
posted @ 2018-11-19 21:38 StoneGeek 阅读(13579) 评论(1) 推荐(0) 编辑
摘要: 一、定义 堆的定义 堆其实就是一棵完全二叉树(若设二叉树的深度为h,除第 h 层外,其它各层 (1~h 1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边), 定义为:具有n个元素的序列(h1,h2,...hn),当且仅当满足(hi =h2i,hi =h2i+1)或(hi=h2i, 阅读全文
posted @ 2018-09-17 15:35 StoneGeek 阅读(20700) 评论(2) 推荐(1) 编辑
摘要: 1、有继承关系的加载顺序 关于关键字static,大家 都知道它是静态的,相当于一个全局变量,也就是这个属性或者方法是可以通过类来访问,当class文件被加载进内存,开始初始化的时候,被static修饰的变量或者方法即被分配了内存,而其他变量是在对象被创建后,才被分配了内存的。 所以在类中,加载顺序 阅读全文
posted @ 2018-09-14 17:38 StoneGeek 阅读(18147) 评论(1) 推荐(3) 编辑
摘要: 一、ACID 1、事务及其ACID属性 原子性:事务是一个原子操作单位,其对数据的修改,要么全部执行,要么全部不执行。 一致性:在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,数据库的完整性约束没有被破坏。比如A向B转账, 阅读全文
posted @ 2018-09-04 17:38 StoneGeek 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 一、概述 二叉树的遍历分为两种,第一种是层序遍历,从根节点开始,依次向下,对于每一层从左向右遍历。第二种是先、中、后序遍历,遍历顺序都是相对于父节点,也就是先遍历父节点、中间遍历父节点、最后遍历父节点 二、层序遍历 层序遍历用到了队列 算法步骤 初始时,根节点入队列 然后,while循环判断队列不为 阅读全文
posted @ 2018-09-03 10:24 StoneGeek 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 一、网络编程概述 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。 java.net包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。 java.net包中提供了两种常见的网络协议的支持 阅读全文
posted @ 2018-08-18 20:35 StoneGeek 阅读(527) 评论(0) 推荐(0) 编辑
摘要: 概述 在我们学习Java的IO流之前,我们都要了解几个关键词 同步与异步(synchronous/asynchronous): 同步 是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调用返回,才会进行下一步;而 异步 则相反,其他任务不需要等待当前调用返回,通常依靠事件、回调等机 阅读全文
posted @ 2018-08-16 17:37 StoneGeek 阅读(65476) 评论(4) 推荐(14) 编辑
摘要: 一、Comparable和Comparator的详解 Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Compar 阅读全文
posted @ 2018-08-09 16:46 StoneGeek 阅读(1668) 评论(0) 推荐(1) 编辑
摘要: 一、两大基类 1、Collection表示一个组纯数据,该集合继承了Iterable,Iterable是遍历集合的工具,即我们通常通过Iterator迭代器来遍历集合,我们说Collection依赖于Iterable,是因为Collection的实现类都要实现iterator()函数,返回一个Ite 阅读全文
posted @ 2018-08-09 15:11 StoneGeek 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 一、LinkedList简介 由于LinkedList是一个实现了Deque的双端队列,所以LinkedList既可以当做Queue,又可以当做Stack,在将LinkedList当做Stack时,使用pop()、push()、peek()方法需要注意的是LinkedList内部是将链表头部当做栈顶 阅读全文
posted @ 2018-08-05 18:58 StoneGeek 阅读(1636) 评论(0) 推荐(0) 编辑
摘要: 一、ArrayList源码分析 1、全局变量 (1)默认容量(主要是通过无参构造函数创建ArrayList时第一次add执行扩容操作时指定的elementData的数组容量为10) private static final int DEFAULT_CAPACITY = 10; (2)空的对象数组(当 阅读全文
posted @ 2018-08-05 15:49 StoneGeek 阅读(947) 评论(0) 推荐(0) 编辑
摘要: ConcurrentHashMap是HashMap的高并发版本,是线程安全的,而HashMap是非线程安全的 一、底层实现 底层结构跟hashmap一样,都是通过数组+链表+红黑树实现的,不过它要保证线程安全性,所以在源码上要复杂一些 线程安全是通过CAS和synchronized实现的 源码分析 阅读全文
posted @ 2018-08-04 17:38 StoneGeek 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 前言 在高并发的应用当中,最关键的问题就是对共享变量的安全访问,通常我们都是通过加锁的方式,比如说synchronized、Lock来保证原子性,或者在某些应用当中,用voliate来保证变量的可见性,还有就是通过TheadLocal将变量copy一份,称为局部变量(线程私有)等等。现在我们学习一种 阅读全文
posted @ 2018-08-04 12:55 StoneGeek 阅读(925) 评论(0) 推荐(0) 编辑
摘要: 前言 多个线程访问同一个类的synchronized方法时, 都是串行执行的 ! 就算有多个cpu也不例外 ! synchronized方法使用了类java的内置锁, 即锁住的是方法所属对象本身. 同一个锁某个时刻只能被一个执行线程所获取, 因此其他线程都得等待锁的释放. 因此就算你有多余的cpu可 阅读全文
posted @ 2018-08-03 18:52 StoneGeek 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 一、ThreadLocal简介 ThreadLocal是线程的局部变量,是每一个线程所单独持有的,其他线程不能对其进行访问 ,通常是类中的private static字段。 我们知道有时候一个对象的变量会被多个线程所访问,这时就会有线程安全问题,当然我们可以使用synchorinized 关键字来为 阅读全文
posted @ 2018-08-02 12:32 StoneGeek 阅读(720) 评论(0) 推荐(0) 编辑