自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (5)
  • 收藏
  • 关注

原创 java并发编程---ThreadLocal

1、ThreadLocal由来    synchronized这类线程同步的机制可以解决多线程并发问题,在这种解决方案下,多个线程访问到的,都是同一份变量的内容。为了防止在多线程访问的过程中,可能会出现的并发错误。不得不对多个线程的访问进行同步,这样也就意味着,多个线程必须先后对变量的值进行访问或者修改,这是一种以延长访问时间来换取线程安全性的策略。    而ThreadLocal类为

2015-08-22 21:44:38 136

原创 java并发编程---volatile

1、并发编程中的三个概念    在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。我们先看具体看一下这三个概念:1.1.原子性原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。一个很经典的例子就是银行账户转账问题:老公去在 ATM 上取钱,老婆在柜台存钱,假设这个账户中有 1000 元。老公首先执行查询

2015-08-22 19:39:45 123

原创 java并发编程---synchronized、Lock

1、引言1.1 什么时候会出现线程安全问题?  在单线程中不会出现线程安全问题,而在多线程编程中,有可能会出现同时访问同一个资源的情况,这种资源可以是各种类型的的资源:一个变量、一个对象、一个文件、一个数据库表等,而当多个线程同时访问同一个资源的时候,就会存在一个问题:由于每个线程执行的过程是不可控的,所以很可能导致最终的结果与实际上的愿望相违背或者直接导致程序出错。举个简单的例子

2015-08-22 16:27:02 706

原创 java并发编程---如何创建线程以及Thread类的使用

1、Java中关于应用程序和进程相关的概念  在Java中,一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认为java.exe或者javaw.exe(windows下可以通过任务管理器查看)。Java采用的是单线程编程模型,即在我们自己的程序中如果没有主动创建线程的话,只会创建一个线程,通常称为主线程。但是要注意,虽然只有一个线程来执行任务,不代表JVM中只有一

2015-08-21 21:24:11 2996

原创 java并发编程---Java内存模型(JMM)

1、引言在讨论Java内存模型和线程之前,先简单介绍一下硬件的效率与一致性。    由于计算机的存储设备与处理器的运算能力之间有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(cache)来作为内存与处理器之间的缓冲:将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中没这样处理器就无需等待缓慢的内存读写了

2015-08-21 19:59:49 942 1

原创 JDBC简介(2)

前篇:JDBC简介(1)1、Connection角色      Connection表示与特定数据库的连接,可以获取到数据库的一些信息,这些信息包括:其表信息,应该支持的SQL语法,数据库内有什么存储过程,此链接功能的信息等等。在一般实际使用情况下,我们关注的Connection的功能有以下几点:1.1 创建可以执行sql语句或者存储过程的对象stateme

2015-08-19 19:53:47 788 1

原创 JDBC简介(1)

1、JDBC工作的基本流程一个基本的JDBC工作流程,分为以下几步:1.加载特定数据库驱动器实现类,并注册驱动器(Driver会注册到DriverManager中);2.根据特定的URL,返回可以接受此URL的数据库驱动对象Driver;3.使用数据库驱动Driver创建数据库连接Connection会话;4.使用 Connection对象创建用于操作sql的Statement

2015-08-19 19:13:49 553

原创 Spring---Spring MVC 应用

1、Hello World入门1.1 前端控制器的配置在我们的web.xml中添加如下配置: chapter2 org.springframework.web.servlet.DispatcherServlet 1 chapter2 / load-on-startup:表示启动容器时初始化该Servlet;

2015-08-18 21:00:30 512

原创 Spring---Spring MVC 简介

1、标准MVC模型概述MVC模型:是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理,使展示与模型分离,流程控制逻辑、业务逻辑调用与展示逻辑分离。首先让我们了解下MVC(Model-View-Controller)三元组的概念:Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行

2015-08-18 20:01:59 156

原创 Spring---AOP原理浅析

1、综述AOP有些特有的概念,如:advisor、advice和pointcut等等,使用或配置起来有点绕,让人感觉有些距离感,其实它的实现就是一组标准的设计模式的组合使用:Factory、Proxy、Chain of Responsibility,只要搞清楚这几个设计模式,读AOP的源码是比较容易的。首先看看ProxyFactoryBean这个类,这是AOP使用的入口,从AO

2015-08-17 19:46:58 1592

转载 Spring---AOP(注解配置)

1、启用对@AspectJ的支持Spring除了支持Schema方式配置AOP,还支持注解方式:使用@AspectJ风格的切面声明。Spring默认不支持@AspectJ风格的切面声明,为了支持需要使用如下配置: 这样Spring就能发现@AspectJ风格的切面并且将切面应用到目标对象。2、声明切面@AspectJ风格的声明切面非常简单,使用@Aspect注解进行

2015-08-17 15:10:12 6115

原创 Spring---AOP应用

1、项目应用1.1 定义目标类1)定义目标接口:public interface IHelloWorldService { public void sayHello(); } 2)定义目标接口实现:public class HelloWorldService implements IHelloWorldService { @Override

2015-08-17 10:45:54 460

转载 Spring---AOP简介

1、引言考虑这样一个问题:需要对系统中的某些业务做日志记录,比如支付系统中的支付业务需要记录支付相关日志,对于支付系统可能相当复杂,比如可能有自己的支付系统,也可能引入第三方支付平台,面对这样的支付系统该如何解决呢?1.1 传统解决方案:1)日志部分提出公共类LogUtils,定义“longPayBegin”方法用于记录支付开始日志,“logPayEnd”用于记录支付结果

2015-08-16 21:09:34 515

原创 Spring---IOC原理浅析

1、简介IoC 容器:最主要是完成了对象的创建和依赖的管理注入等等。所谓控制反转,就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。具体描述IOC容器使用过程:IOC容器---水桶BeanFactory---最

2015-08-14 21:33:50 595

原创 Spring---IOC应用(注解装配)

1、简介Spring容器默认禁用注解装配。所以在基于注解的自动装配前,我们需要再Spring配置中启用它。注册注解处理器:方式一:bean 方式二: 命名空间<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSc

2015-08-14 17:16:18 209

原创 Spring---IOC应用

1、概述1.1 Spring IoC容器如何知道哪些是它管理的对象呢?这就需要配置文件,Spring IoC容器通过读取配置文件中的配置元数据,通过元数据对应用中的各个对象进行实例化及装配。一般使用基于xml配置文件进行配置元数据,而且Spring与配置文件完全解耦的,可以使用其他任何可能的方式进行配置元数据,比如注解、基于java文件的、基于属性文件的配置都可以。1.2 Spring

2015-08-13 21:37:23 2771

原创 Spring---IOC简介

1、引言1.1 为什么需要IoC容器(1)应用程序主动控制对象的实例化及依赖装配A a = new AImpl(); B b = new BImpl(); a.setB(b); 本质:创建对象,主动实例化,直接获取依赖,主动装配 缺点:更换实现需要重新编译源代码           很难更换实现、难于测试           耦合实例生产者和实例消费者

2015-08-13 17:30:47 2735 1

原创 java基础--JavaBean、POJO、DAO、EJB

1、POJO    POJO(Plain Old Java Object)这种叫法是Martin Fowler、Rebecca Parsons和Josh MacKenzie在2000年的一次演讲的时候提出来的。按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它。PO

2015-08-12 17:46:02 1090

原创 数据结构---二叉排序树(BST)

1、二叉排序树简介二叉排序树又称“二叉查找树”、“二叉搜索树”。二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树:1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;3. 它的左、右子树也分别为二叉排序树。二叉排序树通常采用二叉链表作为存储结构。中序遍历二叉排序树可得到一个

2015-08-10 20:32:12 1133

原创 java容器类---TreeMap、TreeSet

1、TreeMap 简介TreeMap是基于红黑树实现的,这里只对红黑树做个简单的介绍,红黑树是一种特殊的二叉排序树,关于二叉排序树,红黑树通过一些限制,使其不会出现二叉树排序树中极端的一边倒的情况,相对二叉排序树而言,这自然提高了查询的效率。红黑树的基本性质如下:1、每个节点都只能是红色或者黑色2、根节点是黑色3、每个叶节点(NULL节点,空节点)是黑色的。4、如果一

2015-08-10 16:08:59 939

原创 java容器类---LinkedHashMap、LinkedHashSet

1、LinkedHashMap简介1.1 LinkedHashMap数据结构   LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashmap的节点一一串成了一个双向循环链表,因此它保留了节点插入的顺序,可以使节点的输出顺序与输入顺序相同。LinkedHashMap是Map

2015-08-10 13:18:17 633

原创 java容器类---Hashtable

1、Hashtable简介(1)Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。(2)Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。(3)Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneable接口,能被克

2015-08-08 21:35:47 1330

原创 java容器类---Vector

1、Vector简介(1)Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。(2)Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。(3)Vector实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆,实现了

2015-08-08 11:34:45 3701

原创 java容器类---LinkedList

1、LinkedList简介(1)LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。(2)LinkedList同样是非线程安全的,只在单线程下适合使用。(3)LinkedList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了Cloneable接口,能被克隆。

2015-08-07 21:51:11 205

原创 java容器类---ArrayList

1、ArrayList 简介(1)ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。(2) ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的C

2015-08-07 19:20:27 1070

原创 java基础---枚举(enum)

1、关于java enumenum 一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用 ”==” 来替换 equals 。是一种好的习惯。 JDK1.5 之前没有 Enum 这个类型,那时候一般用接口常量来替代。有了 JavaEnum 之后,可以更贴近的表示这种常量。注:enum--关键字,用来定义枚举,类似c

2015-08-07 15:44:50 149

原创 java基础---注解(Annotation)

1、什么是注解(Annotation)?(1)用一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。(2)注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,

2015-08-06 20:38:22 684

今日头条算法原理.doc

曹欢欢博士(今日头条算法架构师)公开讲解今日头条推荐系统原理

2019-05-17

程序员编程艺术

围绕“面试”、“算法”、“编程”三个主题的程序员编程艺术系列(简称TAOPP系列)从今年4月写第一篇起,至今快有一年。近1年的创作中,写了二十七章,共计22篇文章。这是本人的第4大原创作品,不过与之前微软面试100题系列,红黑树系列,及十三个经典算法研究系列相比,编程艺术系列的某些篇文章的作者除了我本人自己,或多或少还得到了不少朋友的支持,我把这些朋友组织起来,成立了一个工作室,它的名字叫做编程艺术室

2016-04-08

MySQL技术内幕:SQL编程(带书签)

《MySQL技术内幕:SQL编程》是畅销书《MySQL技术内幕:InnoDB存储引擎》的姊妹篇,深刻揭示了MySQL中SQL编程的精髓与奥秘,能为开发者和DBA们利用SQL语言解决各种与开发和管理相关的MySQL难题提供很好的指导和帮助。

2015-09-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除