【深入Java】
文章平均质量分 83
钟艾伶
这个作者很懒,什么都没留下…
展开
-
JAVA技术(一)——字节码&反射
Reflection-反射是J2SE1.1就已经提出了,但当时仅支持Introspection自省。在1.2之后开始逐渐成熟,spirng、hibernate等成熟框架都大量使用java反射技术实现。在面向对象设计思想中,使用类这一概念表述一类具有相同属性的对象;而这些属性值具体是什么,由该类的每个实例化对象来确定,每个对象可以有不同的属性值。反之,这些是否属于同一类事原创 2016-04-28 10:50:19 · 3026 阅读 · 0 评论 -
JAVA技术(四)——动态代理
一、程序中的代理使用 试想如何为已经存在的类添加一些新的功能,例如日志、事务处理;这些类已经编写好,数量庞大,且实现相同接口;如果工程允许可能比较粗暴的就是直接向类中添加需要新增的代码逻辑,但现实时:添加这些功能要修改的不是一个两个类。 机智的java君采用代理解决这类繁琐的问题:1、创建一个与目标类实现相同接口的代理类,代理类的每个方法调用目标类的相同方法2、在调原创 2016-05-02 17:05:33 · 750 阅读 · 0 评论 -
JAVA技术(三)——自定义注解
一、Annotation 在java发展到1.8的今天,开发人员对java注解应该都不陌生,无论是SSH框架还是其他java应用,注解的存在为开发人员提供了极大的便利。Java注解是J2SE5.0中提出的新特性,就相当于一个类,使用这个注解就相当于创建了这个类的实例对象,可以加在包、类、方法、参数、成员变量上,应用非常广泛。 J2SE 5.0中提出了@SuppressW原创 2016-05-02 15:30:32 · 805 阅读 · 0 评论 -
JAVA技术(二)——HashSet&hashcode
一、Introspection 作为J2SE5.0提出的新特性,在介绍Introspection (内省)之前,需要先介绍JavaBean,我们常说的JavaBean跟java内省中所特指的JavaBean还是有些不同的。在内省中指的JavaBean是一种特殊的java类,主要用于传递数据信息,使用get、set方法来确定类属性。去掉set、get前缀,剩余的部分就是属性名。JDK中提供了原创 2016-05-02 10:58:23 · 913 阅读 · 0 评论 -
项目管理神器——Maven篇(三)使用Maven管理Eclipse项目创建、编译、打包
一、安装与配置1、将maven插件,直接存放到eclipse---dropins中,重启eclipse。2、重启eclipse后,window——》Preferences中出现【Maven】选项3、配置maven由于maven的核心插件需要使用到jdk,而eclipse是运行在jre上的,所以需要配置maven关联jdk。Eclipse—wind原创 2016-01-05 09:09:30 · 7174 阅读 · 25 评论 -
Struts2 ——应用demo及其常用配置参数
一、先看一个使用Struts 2框架实现的登录demo: 1、创建java web 项目,引入依赖jar包,拷贝到WEB-INF/lib下 commons-fileupload-1.2.1.jar commons-logging-1.0.4.jar freemarker-2.3.15.jar原创 2015-09-02 12:00:39 · 919 阅读 · 4 评论 -
Struts 2 ----Action获取servlet对象及后续重定向操作
Why? Action作为MVC框架中的Control层,一个类似于Servlet的java对象,通过继承Action接口,在execute方法中处理数据和一些相关的业务逻辑,然后把最终处理结果和需要返回的对象放在Servlet对象中【如request或者session】,最后根据配置返回到对应result跳转到指定页面。How?Action通过actionContext获取原创 2015-09-07 10:45:36 · 1459 阅读 · 4 评论 -
java多线程——线程的创建和启用
线程的创建和启用一、通过继承Thread类来创建线程1、继承Thread,重写run方法,run方法的方法体就代表了县城需要执行的任务2、创建Thread子类实例,即创建了线程对象3、调用线程对象.start()方法,启动该线程 //通过继承Thread类来创建线程publicclass FirstThread extends Thread{ priv原创 2015-09-13 10:54:01 · 1237 阅读 · 7 评论 -
java多线程——线程同步问题
试想一个场景:同一个银行账户有1000RMB,两个对象同时对该账户取钱,两人各取800,流程如下:输入帐号、密码,验证成功输入取钱金额,系统比较账户余额和取钱金额验证成功,允许取钱操作,然后,两个人一起开开心心的拿着1.6k回家了。剩下一个余额为-600的账户默默哭泣。这就是我们常说的:多线程并发操作线程安全问题。就取钱例子模拟代码实现:1、定义一个账户原创 2015-09-14 20:58:24 · 1429 阅读 · 6 评论 -
Struts2——Action动态方法调用
对于同一个表单,当用户通过不同的按钮提交同一个表单时,系统需要使用Action的不同方法来处理用户请求,这时Action便需要包含多个控制处理逻辑,即一个action中包含多个方法。例如:login界面有“登录”和“注册”两个按钮,分别触发UserAction中的login和regist方法。MVC模式: 经典MVC模式中,事件由控制器(controller)处理,控制器根据事件类原创 2015-09-20 11:04:41 · 7370 阅读 · 6 评论 -
Struts 2 ——ActionContext和ServletActionContext区别
一、ActionContext 顾名思义,ActionContext是Action执行时的上下文,实质为一个Map容器,用于存放Action在执行时需要用到request\response\session等对象,在action 和jsp间实现数据传递。可通过put,get方法可对ActionContext进行赋值取值操作; 在实际使用中,经常出现Action和JSP原创 2015-10-06 15:30:45 · 1059 阅读 · 7 评论 -
方法里的局部内部类为什么不能访问一般的方法里的局部变量?
从内存中看,当方法里的局部变量所在方法结束时,该变量即在栈内存中消失;而内部类其实是一个类,只有内存中对它的所有引用都消失后,该内部类才"死亡",即内部类的生命周期可能比局部变量长。如果局部内部类能访问一般的局部变量,则在多线程中,可能当方法结束后,局部内部类(是线程类时)还在使用局部变量。为了避免方法内的变量脱离方法而存在的现象发生,于是java规定局部内部类不能访问一般的局部变量。但能访问被f转载 2016-05-03 20:58:36 · 718 阅读 · 2 评论 -
java线程深度解析(一)——java new 接口?匿名内部类给你答案
一、内部类1、内部类初识一般,一个类里主要包含类的方法和属性,但在java中还提出在类中继续定义类(内部类)的概念。内部类的定义:类的内部定义类先来看一个实例public class Out { private int a=1; //定义内部类 class Inner { private int a=12; public void show() {原创 2016-05-03 16:57:36 · 3903 阅读 · 3 评论 -
MAT定位OOM溢出源
前期准备:配置oom自动dump jvm快照:-XX :+HeapDumpOnOutOfMemoryError分析过程:1)MAT中导入java_pid17932.hprof jvm快照,查看histogram 信息注:Shallow Heap:对象自身不包含引用的大小;Retained Heap:对象自身及对象相关引用的大小结论:如图,可得出每个类产生的实例数量(Obje...原创 2018-11-13 16:09:00 · 1850 阅读 · 0 评论 -
Guava —— RateLimiter 接口限流
限流==保险丝策略,可借助框架如spring cloud中Hystrix组件实现。今天介绍使用guava RateLimiter 类实现接口限流。常见限流算法漏桶算法 漏桶(Leaky Bucket)算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),然后就拒绝请求,可以看出漏桶算法能强行限制...原创 2018-09-04 09:57:44 · 1273 阅读 · 0 评论 -
Guava —— Collections
不可变集合不可变集合应用场景1、如果你没有修改某个集合的需求,或者希望某个集合保持不变时,把它防御性地拷贝到不可变集合是个很好的实践。(当某组数据变化不是很频繁,则可以使用不可变对象)2、创建对象的不可变拷贝是一项很好的防御性编程技巧,线程安全(final 属性在对象初始化时就构造好-JVM在构造完对象时可能只是为其分配了引用空间,而各个属性值可能还未初始化完成)3、不需要考虑变化...翻译 2018-08-30 17:33:04 · 199 阅读 · 0 评论 -
Guava —— Base & Cache
一、基础工具基础类型封装 primitives包1、Ints、Doubles、Chars...提供asList、contains、maxmin等方法2、 无符号基础类: 无符号和有符号的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个short能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。db...翻译 2018-08-30 17:01:55 · 288 阅读 · 0 评论 -
JVM 堆、栈信息监测
一、堆信息1、查看堆空间配置信息,jmap –heap +进程id[root@37-33-158 ~]# jmap -heap 65474Attaching to process ID 65474, please wait...Debugger attached successfully.Server compiler detected.JVM version is 25.92-b14...原创 2018-06-01 17:40:02 · 3805 阅读 · 3 评论 -
java8 流及lamdba应用及性能测试Case
java8闪亮新特性函数式编程-lambda表达式及stream流操作。废话不多说,关键在应用。一、引入流1、背景:集合高频使用,API虽丰富,但步骤略繁琐2、流优势:1)声明性方式处理数据集合,直达目的,说明想要完成什么,而非利用循环if如何实现一个操作。2)可组合操作,流水线调用(filter、sorted、map、collect)灵活应对多变需求;行为参数化,根据菜品type、价格、热量筛选...原创 2018-04-17 14:49:44 · 714 阅读 · 1 评论 -
java5特性之(一)静态导入、可变参数、自动拆装箱、
一、Static imports静态导入是J2SE5.0新推出的特性之一,具体实现是再导入包前加上static 关键字,通过静态导入可以减少代码书写,但可读性可能相对变低。具体如下:二、Varargs可变参数的应用是在当方法的参数不确定时,可以通过“... args”的形式,省略中间需要传递的n个参数,在调用这个方法时,java 编译器会为该可变参数创建原创 2016-04-27 20:02:08 · 953 阅读 · 0 评论 -
JAVA Socket 编程
java.net包主要用于进行网络处理、Socket通信、Cookie、URI等网络通信解决方案。 今天主要抛块砖,对于网络编程这块内容进行一个简单的认知性总结。很浅显,网络编程大牛可绕过。一、创建Socket客户端连接到服务器try (Socket s=new Socket(host,port){ InputStream inStream=s.getInputStrea原创 2016-05-16 16:09:55 · 1019 阅读 · 1 评论 -
java核心数据结构(二)——Map类族
Map类族的类图关系: 跟List 和Set 不同的是,Map接口并不继承于Collection接口,它有一套自己的实现。抽象类AbstractMap实现了Map接口,同时有EnumMap、HashMap、WeakHashMap三个实现类,而LinkedHashMap又继承于HashMap.首先关注一下hashTble和hashMap的区别。两者同样实现了Map接口,但原创 2016-05-14 20:17:26 · 860 阅读 · 1 评论 -
java线程深度解析(二)——线程互斥技术与线程间通信
在java多线程——线程同步问题中,对于多线程下程序启动时出现的线程安全问题的背景和初步解决方案已经有了详细的介绍。本文将再度深入解析对线程代码块和方法的同步控制。一、再现多线程下安全问题先看开启两条线程,分别按序打印字符串的实验1、创建一个Output内部类,并给出根据参数name,循环打印出传入字符串2、new 两个线程,分别传入zhongailing、max两个name,原创 2016-05-04 11:11:08 · 981 阅读 · 0 评论 -
java核心数据结构(三)——Set类族
一、Set核心实现类如上图,Set和List是Collection接口的两个分支,比较重要且频繁使用的有HashSet、LinkedHashSet和TreeSet。比较鲜明的特点就是整个Set以及它的实现类中,集合中的元素是不能重复的,还有一个比较有意思的点在于,Set中的主要实现类都是对Map实现类的封装,例如HashSet封装了HashMap,LinkedHashSet封装了L原创 2016-05-14 21:07:05 · 952 阅读 · 1 评论 -
java核心数据结构(一)——List类族
java.util包是Java的实用工具类库。在这个包中,Java提供了一些实用的方法和数据结构。例如,Java提供日期(Data)类、日历 (Calendar)类来产生和获取日期及时间;堆栈(Stack)、向量 (Vector)、哈希表(Hashtable)等数据结构以及随机数(Random)类产生各种类型的随机数。本系列博文将着重分析util包中的相关数据结构:一、总瞰原创 2016-05-14 16:47:15 · 1299 阅读 · 2 评论 -
SSH——Hibernate继承关系映射详解(配置+实例+总结)
继承、泛化、关联是面向对象常见关系,在实际编程中,不少出现它们的身影。Hibernate作为JDBC的良好包装者,对于这些常见关系也通过配置文件得以灵活实现。在Hibernate应用中,实体间继承关系的应用主要有三种策略:1、单表继承:n个继承实体共用1张表2、具体表继承:每个子类分别创建1张表3、类表继承:每个具体类分别创建一张表其中以1、2方式使用居多。下原创 2015-10-12 19:07:32 · 2154 阅读 · 5 评论 -
SSH——Hibernate实体关联映射总结(一)
一、n:11、实体:public class User1 { private int id; private String name; private Group group;{public class Group { private int id; private String name;{2、配置原创 2015-10-19 21:23:13 · 1088 阅读 · 7 评论 -
SSH——Hibernate关联关系映射——复合主键
上篇详解了Hibernate继承关系,这篇我们来研究一下复合主键映射和component映射。一、复合主键映射 实际应用中,也会时常出现一张表id由多个字段构成,这样的主键就是复合主键。同样的,我们通过实例来理解复合主键映射在Hiberbnate中的使用。1、建立实体类FianClass和它的主键存放类FianPeriodPK【FianPeriodPK实体中存放了原创 2015-10-26 19:08:33 · 1067 阅读 · 7 评论 -
Mybatis步步进阶(一)——环境搭建+创建数据库连接
Mybatis作为又一数据持久层框架,不同于hibernate、eclipselink 实现了JPA数据持久API接口,但通过对mybatis 的学习,以mybatis 和hibernate 为例对比,他们异同之处千丝万缕,在已经学习hibernate的基础上,用实践说话。一、下载mybatis并搭建核心架构1、Mybatis下载:https://github.com/mybatis/原创 2015-12-16 14:15:13 · 1978 阅读 · 1 评论 -
SSH——Spring 依赖注入
在上篇博文中介绍了spring控制反转,其中已经实际使用到了依赖注入:在UseManager类中声明了dao,并提供set方法,通过配置。这是依赖注入的常用方式之一,而二便是通过提供声明类的构造方法,在配置文件中使用关联具体dao。一、依赖注入原理依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。原创 2015-11-13 10:17:24 · 1091 阅读 · 4 评论 -
SSH-------java邮件发送
在任何网站或移动app上注册用户大家可能都不会陌生,每次注册后,除了将用户信息入库之外,通常还会有发送激活邮件到注册用户邮箱的操作,这……是如何实现的?要了解该功能的实现,我们先看看关于一、邮件发送相关邮件服务器: 我们日常的接发邮件并非通过账号对账号直接进行,而是由发送者先发送到邮箱服务器,接收者通过域名、账号密码等信息从服务器上下载该用户邮件。常用于U-mail、KXm原创 2015-09-30 10:35:38 · 3509 阅读 · 14 评论 -
Java Web——Filter过滤器
Filter(过滤器技术),常用于web开发中对web资源,如JSP,Servlet,静态图片等进行过滤、拦截的作用。通过过滤器可实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。Filter开发步骤:1、创建java类实现Filter接口,并创建doFilter方法。2、在web.xml文件中使用和元素对编写的filter类进行原创 2015-07-14 22:24:58 · 1020 阅读 · 0 评论 -
java 泛型
java泛型原创 2015-07-26 19:02:13 · 820 阅读 · 0 评论 -
java JDBC应用(一)——PraparedStatement对象
在java JDBC的实际应用中,经常出现PraparedStatement的身影——预编译的 SQL语句的对象。用途:SQL语句被预编译并存储在 PreparedStatement对象中。然后可以使用此对象多次高效地执行该语句。优势:在数据库操作中,PraparedStatement体现出灵活高效率的特点。优势之一:SQL语句预原创 2015-07-10 14:32:17 · 1130 阅读 · 0 评论 -
J2EE核心技术——13规范解读(二)
上篇博客根据J2EE模型对13种核心技术进行分类概括,起到对J2EE核心有个初步认识,具体每个规范的机制和使用,笔者会尽快进行更新。下面接着从分布式、消息、文本三个方面对13规范进行理解。如有不足,请不吝指教。分支二:分布式 1、RMI:什么是远程访问?就像我们利用五楼的计算机可访问四楼计算机的服务,远程访问允许客户机A访问BCD其他计算机的原创 2015-03-08 20:24:27 · 1088 阅读 · 13 评论 -
Mybatis步步进阶(三)——1:N关系配置 && 动态SQL拼接
在hibernate学习中,实体映射关系配置一直都让人比较头疼;一对多、多对一、创建主外键,多的一端负责维护管理外键关系 。。Balabala。。。另外面向对象进行操作的hql语句,当涉及多表主外键关联查询时,hql的书写也是让人比较头疼的。 Mybatis在这两点上都有自己独到的处理方式,下面以【先实例,后总结】的方式为大家逐一道来。一、1:N实体关系配置1、实体关系一原创 2015-12-16 14:16:45 · 4059 阅读 · 3 评论 -
Mybatis步步进阶(二)——SQL的基本配置与执行
Mybatis使用过程中,相对于hibernate更为灵活、简洁之处就在于它利用mybatis封装的标签配置sql语句,在代码中加载配置文件执行sql。咱采取“先做,再总结”方针,方便大家理解。诸位客官请往下看。 现对一个Message实体类进行操作:1、创建实体类/** * @author Max1209 * 实体类 *public class Message { priv原创 2015-12-16 14:16:07 · 2019 阅读 · 2 评论 -
SSH——hibernate 利用注解实现实体关联映射详解
一、JPA:JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中实现数据持久化。同时,它还是JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构。而Hibernate 从3.2开始,就开始兼容JPA,也就是说,除了通过配置xml实现实体关原创 2015-11-02 20:22:09 · 7186 阅读 · 4 评论 -
SSH——hibernate阶段总结(一)
在网上商城中利用SSH框架进行构思,由于对三个框架都还不是很了解,所以程序有些错误也只能先解决。但通过接下来的进一步积累,对于原先遇到的问题以及解决方案有了深入的理解。下面是对于SSH框架中Hibernate的使用概括,先简单总体一览SSH框架:SSH框架图:从上图不难看出,SSH架构也是典型的三层思想的应用:表示层:由stru原创 2015-11-10 10:39:12 · 680 阅读 · 4 评论 -
SSH——Hibernate阶段总结(二)
hibernate基于JDBC的一个成功框架,以配置实现数据库连接、表以及表间关联关系的创建,将实体对象化,以实现数据的CRUD,作为一个轻量级ORM框架,hibernate最为突出的特点即在于:配置灵活,操作简易。下面我们通过简单总结hibernate 4大基础:实体关系映射、hql语句、缓存、JPA注解,进一步体会这个框架的简易灵活之处。笔者在之前的博客中,已经详细解析了关原创 2015-11-10 10:39:59 · 781 阅读 · 4 评论