- 博客(33)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 Java并发学习(5)并发容器——ConcurrentHashMap
ConcurreentHashMap的实现原理与使用ConcurrentHashMap是线程安全且高效的HashMap。为什么要使用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。线程不安全的HashMap在多线程环境下,使用Ha...
2018-12-20 00:00:07
200
原创 Spring入门(5) Spring MVC 起步
跟踪Spring MVC的请求在请求离开浏览器时①,会带有用户所请求内容的信息,至少会包含请求的URL。请求旅程的第一站是Spring的DispatcherServlet。与大多数基于Java的Web框架一样,SpringMVC所有的请求都会通过一个前端控制器(front controller)servlet。前端控制器是常用的Web应用程序模式,在这里一个单实例的Servlet将请求委托给...
2018-12-19 20:43:17
154
原创 Java并发学习(4)Java内存模型基础
Java内存模型的基础并发编程模型的两个关键问题在并发编程种,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程种,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间没有公共状态,...
2018-12-12 21:06:32
212
原创 Spring入门(2) Bean和Spirng模块
容纳Bean在Spring中,应用对象生存于Spring容器中,如图所示,Spring容器可以创建、装载、配置这些Bean,并且可以管理它们的生命周期。Spring的容器实现Bean工厂(org.springframework.beans.factory.BeanFactory):最简单的容器,提供基本的DI支持;应用上下文(org.springframework.context.Ap...
2018-12-11 23:04:08
182
原创 Sping入门(1) 了解依赖注入(DI)和应用切片(AOP)
Sping是一个开源框架,最早由Rod Johnson创建,并在《Expert One-on-ONe; JE22 Design and Development》这本著作中进行了介绍。Spring是为了解决企业级应用开发的复杂性而创建的,使用Spring可以让简单的JavaBean实现之前只有EJB才能完成的事情。但Spring不仅仅局限于服务器端开发,任何Java应用都能在简单性、可测试性和松耦合...
2018-12-11 23:03:48
388
转载 从 Velocity 到 Thymeleaf:浅谈模板迁移
谨以此文献给那些将要从 Velocity 跳到 Thymeleaf 这个坑的人。——欧雷提到 Thymeleaf,想必大家对这个名字比较陌生,如果是在几天前我也是闻所未闻。然而,大佬突然一声令下:「我们要把仓储管理系统分离出去,用 Spring Boot 进行开发。」相伴而来的就是后端模板引擎的变更——不再支持 Velocity 了!在接到这个消息后,第一时间到官网看下这首次听到的东西长...
2018-11-26 17:44:34
3209
1
原创 SSM框架中的前后端分离
认识前后端分离在传统的web应用开发中,大多数的程序员会将浏览器作为前后端的分界线。将浏览器中为用户进行页面展示的部分称之为前端,而将运行在服务器,为前端提供业务逻辑和数据准备的所有代码统称为后端。由于前后端分离这个概念相对来说刚出现不久,很多人都是只闻其声,不见其形,所以可能会对它产生一些误解,误以为前后端分离只是一种web应用开发模式,只要在web应用的开发期进行了前后端开发工作的分工就是...
2018-11-26 11:37:43
9321
2
原创 git和svn使用
各种版本控制工具的简单比较特性CVSSVNGIT并发修改支持支持支持并发提交不支持支持支持历史轨迹不支持更名支持更名支持更名分布式不支持不支持支持SVNSVN服务端安装下载地址:https://www.visualsvn.com/server/download/双击安装包,安装,选择好安装地址,选中这两项。nex...
2018-11-06 09:23:06
1013
原创 JDK源码分析(5)Vector
JDK版本Vector简介/** * The {@code Vector} class implements a growable array of * objects. Like an array, it contains components that can be * accessed using an integer index. However, the size of a...
2018-11-06 00:05:57
112
转载 Spring IoC原理
内作业要求,查阅IoC原理。我曾经做的DI(IoC)相关知识:https://blog.csdn.net/tangzongpi6936/article/details/82795014这里转发别人的博文,写的挺不错的:https://blog.csdn.net/it_man/article/details/4402245IOC(DI):其实这个Spring架构核心的概念没有这么复杂,更不...
2018-11-05 16:57:45
134
原创 Java并发学习(3)原子操作的实现原理
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。原子操作的实现原理原子(atomic)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。在多处理器上实现原子操作就变得有点复杂。1....
2018-10-24 21:55:53
222
原创 Java并发学习(2)synchronized的实现原理与应用
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。synchronized的实现原理与应用在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对synchronized进行了各种优化之后,...
2018-10-24 21:52:32
130
原创 Java并发学习(1)volatile的实现原理与应用
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。volatile的应用在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性...
2018-10-24 21:49:54
170
原创 Spring学习(4) 最小化Spring XML配置
Spring提供了几种技巧,可以帮助我们减少XML的配置数量。自动装配(autowiring)有助于减少甚至消除配置元素和元素,让Spring自动识别如何装配Bean的依赖关系。自动检测(autodiscovery)比自动装配更进了一步,让Spring能够自动识别哪些类需要被装配成Spring Bean,从而减少对元素的使用。当自动装配和自动检测一起使用时,它们可以显著减少Spring的...
2018-10-24 09:42:16
121
原创 Spring学习(3) 装配Bean
声明Bean创建Spring配置从Spring3.0开始,Spring容器提供了两种配置Bean的方式。传统上,Spring使用一个或多个XML文件作为配置文件,而Spring3.0还同时提供了基于Java注解的配置方式,我们首先来关注传统的XML文件配置方式在XML文件中声明Bean时,Spring配置文件的根元素是来源于Spring beans命名空间所定义的元素。以下为一个典型的Spr...
2018-10-24 09:39:08
93
原创 JDK源码分析(4)HashMap
HashMapHashMap简介HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。值得注意的是HashMap不是线程安全的,如果想要线程安全的HashMap,可以通过Collec...
2018-10-14 20:30:47
139
原创 JDK源码分析(3)HashSet
HashSetHashSet简介HashSet特点非线程安全允许null值添加值得时候会先获取对象的hashCode方法,如果hashCode 方法返回的值一致,则再调用equals方法判断是否一致,如果不一致才add元素。注意: 对于HashSet中保存的对象,请注意正确重写其equals和hashCode方法,以保证放入的对象的唯一性。HashSet源码public cla...
2018-10-14 20:01:52
108
原创 JDK源码分析(2)LinkedList
LinkedList简介LinkedList属性public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable,
2018-10-14 19:08:37
124
原创 JDK源码分析(1)ArrayList
ArrayList简介ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功...
2018-10-14 16:09:46
253
转载 SpringMVC中JSP页面不显示EL表达式的原因
问题描述在Spring MVC开发中, 开发人员可能会设置某个值到 model 中, 并通过EL表达式在JSP显示, 例如: ${msg}, 但并没有解析为对应的 “value”, 输出结果还是老样子: ${msg}。也就是说JSP中 的 EL 不起作用了,为什么呢?SpringMVC的Controller代码如下:import javax.servlet.http.HttpServle...
2018-10-06 16:11:48
260
原创 JVM学习(5) 内存分配与回收策略
Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。对象的内存分配,往大方向上讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分配),对象主要分配在新生代地Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中,分配地规则并不是百分百固定地,其细节取决于...
2018-10-01 20:19:28
186
原创 JVM学习(4) 垃圾收集器
如果说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大的差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。这里讨论的收集器基于Sun HotSpot虚拟机1.6版Update 22,这个虚拟机包含的所有收集器如图所示:图中...
2018-10-01 16:05:35
125
原创 JVM学习(3) 垃圾收集算法
由于垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,因此不打算过多地讨论算法地实现,只是介绍几种算法地思想及其发展过程。标记-清除算法最基础地收集算法是“标记-清除”(Mark-Sweep)算法,算法分为”标记“和”清除“两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记地对象,它地标记过程其实在前一节讲述对象标记判定时已经基本介绍过了...
2018-09-30 17:46:39
164
原创 JVM学习(2) 对象已死?
概述说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史远远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就在思考GC需要完成的三件事:那些内存需要回收?什么时候回收?如何回收?经过半个世纪的发展,内存的动态分配与内存回收技术已经...
2018-09-30 01:12:02
109
原创 JVM学习(1) 自动内存管理机制
Java内存区域与内存溢出异常Java和C++之间有一堵由内存动态分配和垃圾手机技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。概述对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝,又是从事最基础工作的劳动人民——既有用每一个对象的“所有权”,又担负着每个对象生命开始到终结的维护责任。对Java程序员来说,在虚拟机的自动内存管理机制的帮助下,不再...
2018-09-26 17:56:31
122
原创 Java核心技术-并发
多任务(multitasking):在同一时刻运行多个程序的能力。并发执行的进程数目并不是由CPU数目制约的。操作系统将CPU的时间片分配给每一个进程,给人并发处理的感觉。多线程程序在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务。通常,每一个任务称为线程(thread),它是线程控制的简称。可以同时运行一个以上线程的程序称为多线程程序(multithreaded)。多进程与多线程...
2018-09-20 22:34:30
237
原创 Java核心技术-映射
集是一个集合,它可以快速地查找现有的元素。但是,要查看一个元素,需要有要查找元素的精确副本。这不是一种非常通用的查找方式。通常,我们知道某些键的信息,并想要查找与之对应的元素。映射(map)数据结构就是为此设计的。映射用来存放键/值对。如果提供了键,就能够查找到值。基本映射操作Java类库为映射提供了两个通用的实现:HashMap和TreeMap。这两个类都实现了Map接口。散列映射对键进行...
2018-09-18 00:45:15
180
原创 Java核心技术-具体的集合
除了Map结尾的类之外,其他都实现了Collection接口,而以Map结尾的类实现了Map接口。链表在Java程序设计语言中,所有链表实际上都是双向链表的(double linked)——即每个节点还存放着指向前去节点的引用。从链表中间删除一个元素是一个很轻松的操作, 即需要更新被删除元素附近的链接。在链表中添加或删除元素时,绕来绕去的指针可能已经给人们留下了极坏的印...
2018-09-17 10:43:44
180
原创 Spring实战-第一次内作业-Java反射和注解
第一次内作业详细理解Java反射机制反射是什么反射的作用用一句简单的话来讲就是可以对代码进行操作的代码,这个特性经常在被用于创建JavaBean中,通常造轮子的人会用到这个特性,而应用程序员用到这个特性的场景则较少。能够分析类能力的程序就叫做反射,简单来说就是可以对代码进行操作的代码。反射机制的功能极为强大,可以用来:在运行时分析类的能力在运行时查看对象实现通用的数组操作...
2018-09-14 19:11:44
322
原创 Java核心技术-继承
super关键字public Manager(String name, double salary, int year, int month, int day){ super(name, salary, year, month, day); bonus = 0;}这里的关键字super具有不同的含义。语句super(n, s, year, month, day);是“...
2018-09-04 00:32:31
168
原创 tomcat+Java+Maven在centos7中安装
tomcat安装我这里安装tomcat7,8或者其他版本同。https://tomcat.apache.org/download-70.cgi?Preferred=http%3A%2F%2Fapache.claz.org%2Fmkdir - p ~/javacd ~/javawget http://apache.claz.org/tomcat/tomcat-7/v7.0.90/...
2018-08-29 23:38:33
164
转载 设计模式是什么鬼(初探)
“世界处处不设计” 有物混成,先天地生。寂兮寥兮,独立而不改,周行而不殆,可以为天地母。吾不知其名,字之曰道,强为之名曰大。大曰逝,逝曰远,远曰反。道是什么?道可道,非常道。道不明,说不尽的才算是道,它是自然法则的终极抽象。但至少在某一方面,它是各种事物如何组织在一起以及进行沟通互动的原始规律。而在软件设计中,各个模块之间怎样组织通信成为一个优雅健壮的整体,以便保证良好的可重用性和扩展...
2018-08-19 16:21:48
213
原创 IDEA快捷键
查找相关快捷键双击shift 在项目的所有目录查找,就是你想看到你不想看到的和你没想过你能看到的都给你找出来 ctrl+f 当前文件查找特定内容 ctrl+shift+f 当前项目查找包含特定内容的文件 ctrl+n 查找类 ctrl+shift+n 查找文件 ctrl+e 最近的文件 alt+F7 非常非常频繁使用的一个快捷键,可以帮你找到你的函数或者变量或者类的所...
2018-08-14 00:00:02
93
python可视化文本框问题
2017-10-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人