自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 Hibernate Validator验证注解说明

服务器端的数据验证,对于一个WEB应用来说是非常重要的,而Spring从3.0开始支持JSR-303规范,它定义了一些标准的验证约束,同时也提供了一个可扩展的自定义方式来满足不同的开发需求。Bean Validation 中内置的 constraint@Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 tru

2017-01-17 22:31:33 492

转载 【转】简单使用Git和Github来管理自己的代码和读书笔记

以前不知道使用代码管理工具,最后写的一些东西都没有了,由于硬盘坏了或者不小心格式化了之类的,后来使用了Git和Github来托管自己的代码和读书笔记方便了不少,到哪里只要有网就可以把自己的东西拷贝下来继续使用。我这里简单的记录一下我使用的过程,最简单的使用都是,高级的功能我一直没有使用到,虽然买一本《Git权威指南》但是很多东西用不到就不能够真的会。下面开始简单介绍我使用的方法,我这个是在windo

2017-01-15 18:51:11 706

原创 SQL Server中各个系统数据库的作用

master数据库 master是SQL Server2012中最重要的数据库,是整个数据库服务器的核心。里面包含了:所有用户的登录信息、用户所在的组、所有系统的配置选项、服务器中本地数据库的名称和信息、SQL Server的初始化方式等。不能损坏master数据库,否则整个SQL Server服务器不能工作model数据库 model数据库是SQL Server 2012中创建数据库的模

2016-12-25 12:46:55 3415

原创 Http/1.1 首部字段一览

HTTP首部字段类型分4种:通用首部字段 请求报文和响应报文两方都会使用的首部。 Cache-Control:控制缓存的行为 Date:创建报文的日期时间 Pragma:报文指令 Upgrade:升级为其他协议请求首部字段 从客户端向服务器返回请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。 Accept:用户代理可处理的媒体类型

2016-11-12 17:49:37 607

转载 【转】TCP协议中的三次握手和四次挥手(图解)

TCP协议中的三次握手和四次挥手(图解)

2016-11-01 09:50:56 243

转载 【转】TCP协议三次握手过程分析

TCP协议三次握手过程分析

2016-11-01 09:38:29 231

转载 【转】跳跃表-原理及Java实现

原文地址:点击进入 引言:上周现场面试阿里巴巴研发工程师终面,被问到如何让链表的元素查询接近线性时间。笔者苦思良久,缴械投降。面试官告知回去可以看一下跳跃表,遂出此文。1、跳跃表的引入 我们知道,普通单链表查询一个元素的时间复杂度为O(n),即使该单链表是有序的,我们也不能通过2分的方式缩减时间复杂度。如上图,我们要查询元素为55的结点,必须从头结点,循环遍历到最后一个节点,不算-INF(负无穷

2016-10-27 12:14:30 286

原创 Redis的String对象

Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。在Redis里面,C字符串只会作为字符串字面量用在无需对字符串值进行修改的地方,比如打印日志。SDS的定义struct sdshdr{ int len;//记录

2016-10-26 10:37:10 358

原创 模拟面试题

这是我自己在求职路上积累下来的经典面试笔试题。说明线程和进程的区别 答:写一个死锁的例子说说synchronized和volatile、ThreadLocal的区别hashmap、hashset的区别数据库索引

2016-10-18 14:20:09 316

原创 JVM区域划分

Java虚拟机所管理的内存将会包括以下几个运行时数据区域:程序计数器(线程隔离) 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空。此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况

2016-10-12 23:53:08 263

转载 【转】深入理解JVM--JVM垃圾回收机制

原文地址:点击进入 Java语言出来之前,大家都在拼命的写C或者C++的程序,而此时存在一个很大的矛盾,C++等语言创建对象要不断的去开辟空间,不用的时候有需要不断的去释放控件,既要写构造函数,又要写析构函数,很多时候都在重复的allocated,然后不停的~析构。于是,有人就提出,能不能写一段程序在实现这块功能,每次创建,释放控件的时候复用这段代码,而无需重复的书写呢? 1960年 基于MIT

2016-10-12 20:12:36 226

转载 【转】拦截器与过滤器的区别

原文地址:点击进入在上面那篇文章看到的拦截器与过滤器的区别,在面试的时候要说的出来:1、原理不同:拦截器是基于java的反射机制,而过滤器是基于函数回调; 2、依赖servlet容器:过滤器依赖于servlet容器(或者可以认为过滤器是servlet的变体);而拦截器不依赖于servlet容器; 3、对什么起作用:拦截器只能对action(控制层)请求起作用;而过滤器则可以对机会所有的请求起作用

2016-10-06 16:01:37 263

原创 Spring事务

这部分理解的比较少,在牛客网上看到的几个事务,先记下来: PROPAGATION_REQUIRED(propagation_required) 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。PROPAGATION_SUPPORTS(propagation_supports) 支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATIO

2016-10-05 17:08:47 205

转载 【转】为什么不应该重写service方法?

原文地址:点击进入故事通常是这样开始的: 从前,有一个程序猿,他语重心长地对孙子说:“孩子,要是你以后写servlet,最好不要重写service方法啊” 孙子大为不解,程序猿又说:“听爷爷的,准没错,爷爷的爷爷就是这么说的……”——为什么不应该重写service方法呢?如果你也曾思考过这个问题,但暂时无解,这篇文章或许可以给你一点启发。先来看一个具体的例子:当时我正在osc看红薯的一篇大作

2016-10-05 17:03:10 343

原创 Spring的体系结构

重要的模块介绍: 1、Core Container(核心容器)Beans模块:提供BeanFactory,是工厂模式的经典实现,Spring将管理对象称为Bean。Core核心模块:提供了Spring框架的基本组成部分,包括Ioc(控制反转)和DI(依赖注入)功能。Context上下文模块:构建于Core封装包基础上的 Context封装包,提供了一种框架式的对象访问方法,有些象JNDI注册

2016-10-05 15:42:50 466

转载 【转】java中的内存溢出和内存泄漏

原文地址:点击进入内存溢出: 对于整个应用程序来说,JVM内存空间,已经没有多余的空间分配给新的对象。所以就发生内存溢出。内存泄露: 在应用的整个生命周期内,某个对象一直存在,且对象占用的内存空间越来越大,最终导致JVM内存泄露, 比如:缓存的应用,如果不设置上限的话,缓存的容量可能会一直增长。 静态集合引用,如果该集合存放了无数个对象,随着时间的推移也有可能使容量无限制的增长,最终导致JV

2016-10-03 23:58:50 265

转载 【转】servlet/filter/listener/interceptor区别与联系

原文地址:点击进入 一、概念: 1、servlet: servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。最早支持 Servlet 技术的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 开始支持标准的 Servlet API。S

2016-09-29 14:54:57 316

转载 【转】理解java线程的中断(interrupt)

线程对象.interrupt()并不会真正的中断,只是修改了它的中断信号。原文地址:点击进入一个线程在未正常结束之前, 被强制终止是很危险的事情. 因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等。 所以你看到Thread.suspend, Thread.stop等方法都被Deprecated了那么不能直接把一个线程搞挂掉, 但有时候又有必要让一个线程死掉,

2016-09-28 19:47:58 276

原创 wait()和notify()、notifyAll()

今天想到了这个问题(wait()方法、notify()、notifyAll()这三个方法是不是执行了就释放锁呢?) 为了解决这个问题,我没有手动去敲代码(因为不知道如何去敲),但是百度到一个“知道”,说完下面有很多赞。说的是这样的,notify()和notifyAll()执行了并不会释放锁,他的作用只是唤醒其他之前wait()的线程,线程中的run方法的代码还是要执行完。也就是说:run(){

2016-09-28 19:20:15 298

原创 JDBC

一、JDBC常用API (1)Driver接口 Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。(2)DiverManager类(实现了Driver接口) DriverManager类用于加载驱动并且创建与数据库的连接。 其中有一个方法是registerDriver(Driver driver),用来注册数据库驱动。但是这个方法会使数据库驱动被注册两次

2016-09-28 18:19:59 471

原创 MVC模式原理

MVC模式将软件程序分为3个核心模块:模型(Model)、视图(View)和控制器(Controller)。模型(Model): (1)负责管理应用程序的业务数据、(2)访问和修改这些数据的业务规则以及(3)为视图提供查询模型状态的方法。 提示:在我经常用的Spring+SpringMvc+Mybatis开发框架中,模型是实体类,Service类,Dao类的总和,如果把它们放在一个类里面,其实

2016-09-21 23:35:59 658

原创 一个关于SQL注入的简单例子

数据库有一张user表;表定义如下:CREATE TABLE `user` ( `id` char(35) NOT NULL, `mobile_num` char(20) NOT NULL, `user_name` char(30) DEFAULT NULL, `password` char(100) NOT NULL, `has_card` tinyint(1) NOT NUL

2016-09-21 09:19:41 1343

原创 MySql基础知识总结

一、SQL语句的分类DDL(数据定义语言):用来定义数据库对象:比如库、表、列、触发器、视图、函数、存储过程等(可以理解为创建语言)数据库级别: 创建数据库:Create database if not exists db_name; 删除数据库:Drop database if exist db_name;表级别 创建表:Create Table stu

2016-09-20 22:28:04 461

原创 Hibernate的事务

一、事务的并发问题 在实际应用中,数据库是要被I多个用户共同访问的,在多个事务同时使用相同的数据时,可能会发生并发的问题,具体为:脏读:一个事务读取到另一个事务未提交的数据。不可重复读:一个事务对同一行数据重复读取两次,但是得到了不同的结果。虚读:一个事务连续两次在数据库进行同样条件的查询,但是第二次查询结果包含了第一次查询中未出现的数据。(注意与不可重复读的区别)更新丢失:两个事物同时更

2016-09-20 18:57:02 1172

原创 Hibernate的一级缓存Session和二级缓存SessionFactory

Hibernate的一级缓存是指Session,它是一块内存空间,用来存放相互管理的java对象,有了一级缓存,应用程序可以减少访问数据库的次数,提高了性能。在使用Hibernate查询对象的时候,首先会使用对象属性的OID值(对应表中的主键)在Hibernate的一级缓存进行查找,如果找到,则取出返回,不会再查询数据库,如果没有找到,再到数据库中进行查询操作。然后将查询结果存放到Session一级

2016-09-19 15:18:16 1832

原创 Hibernate的核心API

在Hibernate中有6个常用的核心API,分别是Configuration、SessionFactory、Session、Transaction、Query和Criteria(英文意思是:标准,条件)。一、Configuration Hibernate用这个API的实例去读取Hibernate配置文件和映射文件。其代码如下: Configuration config = ne

2016-09-19 14:47:36 657

原创 Hibernate的执行流程

在Hibernate开发过程中通常会用到5个核心接口,分别为Configuration接口、SessionFactory接口、Session接口、Transaction接口、Query接口。这里先给出Hibernate执行流程的结果图:(1)初始化Hibernate,构建Configuration实例。这一步用来读取Hibernate核心配置文件和映射文件信息到Configuration对象(也就是

2016-09-18 16:53:09 874

原创 Action处理请求参数(属性驱动与模型驱动)

在Struts2中,页面(指的是浏览器,不过在实际的开发中,不管是浏览器端还是手机端,前后端数据的交互都是用json)的请求苏剧和Action有两种基本的对应方式,分别是字段驱动方式(属性驱动)和模型驱动方式。1、属性驱动属性驱动通过字段进行数据传递,包括两种情况: 1、与基本数据类型的属性对应; 比如:public class UserAction{ private Strin

2016-09-18 14:52:02 2075

原创 Struts2的Action控制类的实现及Action访问Servlet API

Struts2的Action控制类的实现Struts2的应用开发中,Action作为框架的核心类,实现对用户请求的处理,Action类被称为业务逻辑控制器。一个Action类代表一次请求或调用,每个请求的动作都对应于一个相应的Action类,一个Action类是一个独立的工作单元。实现Action控制类共有3种方式: (1)POJO的实现 不继承任何父类,也不实现任何借口,仅仅是一个POJO类。

2016-09-18 14:03:30 758

原创 Struts2运行过程简介

利用Struts2框架写一个HelloWorldAction入门案例执行流程:(0)项目启动,struts.xml文件被加载(这个文件包括了struts2的action配置文件) (1)客户端发送请求helloWorld.action,被StrutsPrepareAndExecuteFilter所拦截 (2)StrutsPrepareAndExecuteFilter根据请求url调用对应的Act

2016-09-18 11:25:23 359

原创 JSP运行原理

我们知道当用户通过URL访问Servlet时,Web服务器会根据请求的URL地址在web.xml配置文件中查找匹配的,然后将请求交给指定的Servlet程序去处理。但是,在通过URL访问jsp文件时,项目的在web.xml中找不到与JSP相关的配置,但web服务器仍然可以根据URL找到对应的jsp文件。这是为什么?这是因为在tomcat服务器中的web.xml文件中实现了JSP的相关配置。如下:

2016-09-13 20:58:49 367

原创 栈的两种遍历方式

一、普通遍历 public void test05(){ MyLinkedStack<String> myStack = new MyLinkedStack<String>(); myStack.push("1"); myStack.push("2"); myStack.push("3"); myStack.pus

2016-09-11 15:42:15 9360

原创 ArrayList与Vector和HashMap与Hashtable

ArrayList与VectorHashMap与Hashtable Vector和ArrayList都实现了List接口,Vector是一个有历史的集合,在jdk1.0的时候,java还没有一个系统的集合框架时,就已经有了Vector类,用法与现在的ArrayList相似,在jdk2.0的时候java出现了系统的集合框架后,就让Vector实现List接口;在jdk1.0的时候,Vector类就已

2016-09-11 09:05:26 384

原创 关于HashSet添加元素时的equals()方法和hashCode()方法

HashSet集合不能存储重复的元素,那么元素之间是否重复,HashSet是根据什么机制去判断的呢?HashSet在添加一个元素时(比如此时添加的是”a”这个元素),都会将该元素与set中所遍历到的每个元素作比较,比较的过程是这样的:先用该元素的hashCode值与遍历到的每个元素的hashCode作比较,如果hashCode不相等,则直接添加;若hashCode的值一样,则继续用该元素的equal

2016-09-10 16:09:00 2088

转载 【转载】java多线程synchronized volatile解析

原文地址:点击这里先简单说说原子性:具有原子性的操作被称为原子操作。原子操作在操作完毕之前不会线程调度器中断。即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。在Java中,对除了long和double之外的基本类型的简单操作都具有原子性。简单操作就是赋值或者return。比如”a = 1;“和 “return a;”这样的操作都具有原子性。但是在Java中,类似

2016-09-10 09:35:02 229

原创 后台线程

“后台线程”也叫“守护线程”,他为用户线程提供服务,当用户线程(前台线程)死亡的时候,JVM也会通知“后台线程”死亡,但在“后台线程”接收到信息到死亡需要一定的时间;“后台线程”、创建的子线程默认是“后台线程”,“用户线程”创建的子线程默认是子线程。一个线程想设置为后天线程必须在线程开始前就要设置好。package cn.test.thread.thread_Daemon;import java.t

2016-09-08 21:26:33 219

原创 二叉树的遍历和查找

就如图所示的二叉树进行遍历:(1)前序遍历:A B D G H C E I F (2)中序遍历:G D H B A E I C F (3)后序遍历:G H D B I E F C A递归前序遍历算法: private void preOrderTraverse(Node rootNode){ if(null != rootNode){ System.

2016-09-07 17:56:15 335

原创 树的概念总结;树的存储结构;树、二叉树、森林的相互转换

树的相关概念 1、结点分为:根结点(无双亲、有孩子)、内部结点(有双亲、有孩子)、叶结点(有双亲、无孩子)2、结点与结点的关系:孩子、双亲、祖先、兄弟、堂兄弟3、结点的度:结点的度是结点的孩子个数4、树的度是各结点度数的最大值5、层:根节点为第1层,最下层叶子结点为最后一层6、树的深度:一棵树的层数就是深度7、二叉树的定义:8、二叉树有物种基本形态:空二叉树、只有一个根结点、根节点只有左子树、根结

2016-09-06 18:45:09 819

原创 循环队列

这里的循环队列用数组来实现,以下是几个约定或者说是公式:1、队列的队头指针指向队列的第一个元素,队列的队尾指针指向 队列的最后一个元素的下一个位置2、数组剩下一个空位的时候,队列已满3、队列为空的时候,数组front == rear,故初始化时,front = rear = 0; (但在实际编程中会用length记录队列长度)4、队满的公式是(rear+1)%size()==fro

2016-09-06 10:31:00 441

原创 自己实现顺序表和单链表以及他们的对比

线性表包括:顺序表和单链表;顺序表是一串连着的内存空间,因此用数组来实现;单链表是分散的内存空间块,用对象来实现,一个结点是一个对象,对象里面有两个域,一个是data域,一个是nextNode域。由于顺序表和单链表都涉及到迭代器模式,自己实现迭代器去迭代里面的数据,这里提供一个接口。 迭代器: MyIterator类:package cn.test.ArrayList;public inter

2016-09-05 16:42:52 566

传智博客培训资料

传智博客javaweb上课时候的培训资料,齐全,专业

2016-01-04

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

TA关注的人

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