- 博客(47)
- 收藏
- 关注
原创 ==、=== 与equals和null
【一】==与===var num = 1;var str = '1';var test = 1;test == num //true 相同类型 相同值test === num //true 相同类型 相同值test !== num //false test与num类型相同,其值也相同, 非运算肯定是falsenum == str //true 把st
2017-03-28 20:21:16 234
转载 对用户密码进行加盐处理
按:以下还是炒冷饭,如果您对加盐了解就不用往下看了,以免浪费宝贵时间。如果不了解下文部分细节的话,您可以参考这篇文章:使用MD5对存放在数据库中用户密码进行保护直接对重要数据进行MD5处理后,反向解密确实难度很大,但还是可以找出破绽的,请看下图:如果名为李自成的用户可以查看数据库,那么他可以观察到自己的密码和别人的密码加密后的结果都是一样,那么,别人用的和自己就是同一个
2017-03-22 18:56:03 562
转载 坑爹的Maven
之前没用过Maven,最近在研究Curator的时候,导入别人的工程,但是没有相应的包,需使用Maven解决依赖。于是各种折腾,最后虽然解决了,但中间的坑还不少。尽管网上也有相应的安装教程,但很多都是语焉不详,模棱两可,最后还是决定自己整理一下。一,下载Maven并配置相关的环境变量下载地址如下:http://maven.apache.org/download.cgi#
2017-03-21 23:14:35 197
转载 MySQL存储过程及触发器
一、存储过程存储过程的基本格式如下:-- 声明结束符-- 创建存储过程DELIMITER $ -- 声明存储过程的结束符CREATE PROCEDURE pro_test() --存储过程名称(参数列表)BEGIN -- 可以写多个sql语句; -- sql语句+流程控制 SELECT * FROM employee;END $ -
2017-03-21 23:13:43 218
原创 SQL语法手册
Select用途: 从指定表中取出指定的列的数据语法: SELECT column_name(s) FROM table_name 解释:从数据库中选取资料列,并允许从一或多个资料表中,选取一或多个资料列或资料行。SELECT 陈述式的完整语法相当复杂,但主要子句可摘要为:SELECT select_list [ INTO n
2017-03-21 10:39:03 528
转载 ArrayList 和LinkedList 的优缺点
List是个接口,ArrayList和LinkedList都是List的实现类。 ArrayList是基于数组实现的,而LinkedList是基于链表实现的;数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中
2017-03-18 23:48:28 300
转载 索引和约束
一、 虽然索引引用可以提高数据的查询速度,但是任何事物都有双刃剑,它也有一些缺点:1、 索引会占据一定的磁盘空间,就像有安笔划的查找的目录的书会比没有这种目录的书页数要多一些一样。2、 索引减慢了数据的插入和删除速度。因为每次删除更新数据都要更新索引,一个表拥有的索引越多则写操作的平均性能下降越大。二、 索引是针对字段的,因此创建索引的时候需要指定要在那个字段上创建索引,也
2017-03-17 23:46:18 578
转载 Java中的String类常量池详解
从一个博客上看到的6个题,先看看吧,如果都会了,这部分的知识就掌握的不错啦!输出结果在代码注释后面:test1:package StringTest;public class test1 { /** * @param args */ public static void main(String[] args){ String a = "
2017-03-13 16:46:20 198
转载 mybatis 中的批量添加、删除、修改
现在很多公司和个人开始都会使用到mybatis 框架,而mybatis框架是一个orm框架,所以 数据库的 insert 、update、 delete 那肯定是必须的,但有个问题就是性能的问题。这么说吧:看到有人在使用mybatis批量删除批量添加的时候还在程序中使用for循环来调用方法,这样是没错,但是性能稍微低一点,所以下面看几个批量处理的例子,相对直接在程序中for循环的效率要
2017-03-13 16:30:39 885
转载 mybatis 缓存
在mybatis中提供了两种类型的缓存即 一级缓存和二级缓存,mybatis默认支持一级缓存所以不用配置。首先来看看一级缓存:1、mybatis 中的一级缓存,我们平时如果没有特别写明的话我们是看不到的,但他默认是开启的所以说我们在不知不觉中使用着mybatis的一级缓存。2、mybatis一级缓存的范围是 Sqlsession级别,如果是两个session,或关闭了session
2017-03-13 15:28:37 543
转载 Spring 中常用的两种事务配置方式以及事务的传播性、隔离级别
在前面的文章中总结了spring事务的5中配置方式,但是很多方式都不用而且当时的配置使用的所有参数都是默认的参数,这篇文章就看常用的两种事务配置方式并信息配置事务的传播性、隔离级别、以及超时等问题,废话不说下面就来看看!一、注解式事务1、注解式事务在平时的开发中使用的挺多,工作的两个公司中看到很多项目使用了这种方式,下面看看具体的配置demo。2、事务配置实例(1)
2017-03-13 14:50:13 301
转载 Java动态代理(JDK和cglib)
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为
2017-03-13 10:20:00 161
转载 java 反射机制的基本知识
一下均是来自己看自李兴华老师的视频笔记,他讲的视频挺好的,自己写的估计只能自己看的懂,想更加清楚的了解,请观看他的视频。前天看那个java学习路线的一张图上看了看,里面有一节内容讲的是反射,我就搜集资料视频学了学。我们平常访问普通的方法都是在哪里进行使用new进行创建对象,再利用创建的对象进行访问这个方法。那么我们如何在不使用new关键字的情况下进行访问这些对象
2017-03-12 23:31:16 265
转载 Spring IOC基础
2.1.1 IOC是什么IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好IOC呢?理解好IOC的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:●谁控制谁,控制什么:传统
2017-03-10 18:01:13 207
转载 Spring IOC容器基本原理
2.2.1 IOC容器的概念IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IOC容器进行组装。在Spring中BeanFactory是IOC容器的实际代表者。Spring IOC容器如何知道哪些是它管理的对象呢?这就需要配置文件,Spring IOC容器通过读取配置文件中
2017-03-10 18:00:55 252
转载 Spring IOC的配置使用
1.1.1 XML配置的结构一般配置文件结构如下: import resource=”resource1.xml” /> class=””> class=””> import resource=”resource2.xml” />1、标签主要用来进行Bean定义;2、alias用于定义Bean别名的;3、impor
2017-03-10 18:00:09 365
转载 Java之控制反转和依赖注入
1.简介依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性,下面通过一个例子来引入这一概念。 2.案例1)一般情况下的类耦合Main.javapublic class Main { public static void main(String[] args) { /******** 一般写
2017-03-10 17:59:08 267
原创 int不是默认为0吗?为什么会提示要初始化?
准确地来说,应该是类字段变量是这样,而在方法中的变量需明确初始化,即给它赋值,否则会报错。只要不是类字段和数组,其它变量一律要赋值。 public class IODemo { static int i; public static void main(String[] args) { System.out.println("i = " + i);
2017-03-10 17:28:40 10012 1
转载 Spring事务异常回滚,捕获异常不抛出就不会回滚
最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了....... 为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志。但是这边情况来了,当这个方法异常时候 日志是打印了,但是加的事务却没有回滚。 例: 类似这样的方法不会回滚 (一个方法出错,另一个方法不会回滚) : [html] view p
2017-03-09 23:31:13 219
转载 Spring事务管理只对出现运行期异常进行回滚
使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择声明式的事务管理,在spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作。那么什么是检查型异常什么又是非检查型异常呢?最简单的判断点有两个:1.继承自runtimeexception或error的是非检查型异常,而继承自exceptio
2017-03-09 23:07:40 291
转载 Spring中@Transactional事务回滚
博客园首页新随笔联系管理订阅随笔- 144 文章- 1 评一、使用场景举例二、checked异常和unchecked异常三、@Transactional的使用实例四、Spring中的@Transactional必须要了解的概念转载: Spring中@Transactional事务回滚一、使用场景举例
2017-03-09 23:01:32 294
转载 spring + mybatis @Transactional @Rollback 单元测试
今天我说一个这个单元测试的时候发生的惨案 , 具体的这个方面的配置, 大家在网上可以搜到一大堆 . 我也提供一个源码供大家使用 -- > 附件 我的源码里面的配置以及写法都和网上大神们交代的是一样的 , 但是死活就是不行 . 我将spring的配置过了一遍 , 然而还是没有得到答案 . 之后, 我更换了数据库的datasource ,但还是不行 . 最后我翻山越岭最终再一
2017-03-09 17:11:49 972
转载 Java transient简介
我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个的所有属性和方法都会自动序列化。 然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,诚然,你可以让这个类来实现Exte
2017-03-09 16:37:22 189
转载 spring-spring mvc-mybatis 实现主从数据库配置
一、配置文件1、spring-mybatis.xmlmaster_driverUrl=jdbc:mysql://localhost:3306/shiro?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=truemaster_us
2017-03-09 16:11:17 336
转载 Mybatis批量更新数据库与批量插入数据库(以oracle为例)
一、批量更新1、普通写法(一条记录update一次,性能比较差,容易造成阻塞。不建议使用)update id="updateBatch" parameterType="java.util.List"> foreach collection="list" item="item" index="index" open="" close="" separator=";"
2017-03-09 16:09:54 3481 1
转载 SSM框架下声明式事务管理(注解配置方式)
一、spring-mybatis.xml文件中加入事务管理配置二、在调用的方法上加上@Transactional注解(必须为public方法才行,不要捕捉异常,要让异常自动抛出,否则不能进行事务回滚。方法要写在服务层中在controller中无效) @Transactional @Override public void transaction
2017-03-09 16:06:59 1004
转载 内存溢出(Memory Overflow)和内存泄露(Memory Leak)的区别
内存泄漏指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,就是溢出要点内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件
2017-03-09 14:28:57 821
转载 spring之BeanFactory
spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了。那么它的原理是什么呢?是怎么实现的呢?下面我来简单的模拟一下spring的机制,相信看完之后就会对spring的原理有一定的了解。 spring使用BeanFactory来实例化、配置和管理对象,但是它只是一个接口,里面有一个getBean()方法。我们一般都不直接用BeanFac
2017-03-09 13:09:11 232
转载 Integer与int的种种比较你知道多少?
如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱。所以我对它们进行了总结,希望对大家有帮助。 首先看代
2017-03-09 10:59:55 214
转载 HttpClient Post、get 请求方式
以下代码全部功能完善,并且亲测,线上正在使用,大家可以放心使用,如果有什么问题,可以给我留言。package com.xhrd.dev.util.httpclient;import Java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io
2017-03-09 10:45:01 188
转载 Spring AOP进行日志记录,管理 (使用Spring的拦截器功能获取对action中每个方法的调用情况,在方法调用前
在Java开发中日志的管理有很多种。我一般会使用过滤器,或者是spring的拦截器进行日志的处理。如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个方法的调用。然后进行日志记录。使用过滤器的好处是可以自己选择性的对某一些方法进行过滤,记录日志。但是实现起来有点麻烦。 另外一种就是使用Spring的AOP了。这种方式
2017-03-09 10:34:42 338
转载 JVM(Java虚拟机)优化大全和案例实战
堆内存设置原理JVM堆内存分为2块:Permanent Space 和 Heap Space。Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation
2017-03-09 10:08:16 205
转载 【深入Java虚拟机】之四:类加载机制
类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示: 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为
2017-03-09 10:05:54 148
转载 【深入Java虚拟机】之三:类初始化
类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码。虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化:遇到new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类还没有进行过初始化,则需要先触发其初始化。生成这四条指令最常见的Java代码场景是:使用new关键字实例化对象时、读取或设置一个类的静
2017-03-09 10:05:10 134
转载 【深入Java虚拟机】之二:Class类文件结构
平台无关性 Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使用JRuby等其他语言的编译器也可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要它符合一定的结构,就可以在Java中运行。Java语言中的各
2017-03-09 10:04:22 169
转载 【深入Java虚拟机】之一:Java内存区域与内存溢出
内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。下面详细阐述各数据区所存储的数据类型。 程序计数器(Program Counter Register)
2017-03-09 10:03:15 151
转载 Java中try catch finally语句中含有return语句的执行情况(总结版)
在这里看到了try catch finally块中含有return语句时程序执行的几种情况,但其实总结的并不全,而且分析的比较含糊。但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因。下面来看这几种情况。情况一(t
2017-03-09 09:51:30 187
转载 Java:按值传递还是按引用传递详细解说
前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是Java中到底是否只存在值传递,因为在查阅资料时,经常看到有人说Java只有值传递,但有人说既有值传递,也有引用传递,对于两个观点个人觉得应该是站的角度不同而得出两个不同的说法,其实两个说法其中的原理是一样的,只要咱们懂得其中的原理,那么至于叫什么也就无所谓了
2017-03-09 09:38:17 147
转载 java提高篇(三)-----理解java的三大特性之多态
面向对象编程有三大特性:封装、继承、多态。 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。 继承是为了重用父类代码。两个类若存在IS-A的关系就可以使用继承。,同时继承也为实现多态做了铺垫。那么什么是多态呢?多态的实现机制又是什么?请看我一一为你揭开:
2017-03-09 09:02:36 177
转载 java提高篇(二)-----理解java的三大特性之继承
在《Think in Java》中有这样一句话:复用代码是Java众多引人注目的功能之一。但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情。在这句话中最引人注目的是“复用代码”,尽可能的复用代码使我们程序员一直在追求的,现在我来介绍一种复用代码的方式,也是java三大特性之一---继承。 继承 在讲解之前我们
2017-03-09 09:00:30 131
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人