自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

无德皇叔的博客

小程序员一枚,

  • 博客(79)
  • 收藏
  • 关注

原创 栈应用4 计算中缀表达式

应用3中计算的是后缀表达式,需要先将中缀表达式转换为后缀表达式再计算,整个表达式会扫描两次,下面我们实现只扫描一次实现计算中缀表达式。‘解决这个问题需要两个栈,一个是操作数栈,一个是运算符栈。一、算法逻辑1)创建操作数栈2)创建运算符栈 我们定义运算操作为操作数栈中弹出两个元素,运算符栈中弹出元素,进行计算后,结果压入操作数栈。3)扫描中缀表达式

2017-06-26 09:21:40 766

原创 栈应用2 中缀表达式转后缀表达式

为了简单起见,我们只考虑简单的加减乘除计算一、算法逻辑    1)从左向右扫描后缀表达式    2)初始化栈    3)遍历表达式,直至扫描完所有字符    4)如果被扫描的字符是一个操作数,将其入栈    5)如果被扫描的字符是运算符,出栈两个元素,计算后,结果入栈,注意首先出栈的是第二个操作数    6 )所有都扫描结

2017-06-26 09:20:55 418

原创 栈应用2 中缀表达式转后缀表达式

一、表达式定义1.1 中缀表达式    中缀表达式由一个单一字符或运算符,连接前后两个中缀字符串共同组成    A+B    A     (A+B)+(C-D)1.2 前缀表达式    前缀表达式由一个单一字符或运算符,随后是两个前缀表达式共同组成。每个前缀字符串长度大于1,包含一个运算符、第一个操作数和第二个操作数。

2017-06-26 09:20:08 429

原创 栈 实际应用1 如何使用栈来判定括号是否匹配

一、解答思路对于给定的表达式,我们可以使用栈来实现括号匹配算法,这个算法在解析器中非常重要。解析器每次读入一个字符,如果字符是一个开分隔符(如(、{、[),就将分隔符压入栈顶,如果是一个闭分隔符(如),},]),就从栈顶弹出元素与闭分隔符进行比较,如果两者匹配就继续解析字符串,如果不匹配就显示匹配错误。如果最后栈不为空,同样是匹配错误。二、实现算法    算法实现步骤:

2017-06-26 09:19:20 695

原创 栈 介绍及简单实现

一、栈介绍1.1 简单介绍    栈(stack) 是一个有序线性表,只能在表的一端(称为栈顶(top))执行插入和删除操作。最后插入的元素最后一个被删除,所以,栈也称为后进先出(LIFO)或先进后出(FILO)线性表。    入栈(push):表示在栈顶插入一个元素。    出栈(pop):表示从栈顶删除一个元素。    试图对一个空栈执行出栈操作

2017-06-24 16:14:48 395

原创 Jersey实现对方法进行过滤拦截

在web程序开发过程中,通常我们会需要对我们的接口进行访问控制,例如控制用户的访问权限、记录用户的访问日志等,在我们使用Jersey进行Restful服务开发中,同样会有类似需求,下面我们介绍下,使用Jersey框架,实现接口访问的三种方式。一、使用注解名称绑定过滤器1.1 创建名称绑定注解    使用@NameBinding注解,可以定义一个运行时的自定义注解,该注解

2017-06-08 16:40:47 11454 1

原创 设计模式之03 Template Mthod模式

一、模板方法模式    在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Method模式。    一些在模板方法中,我们可以使用抽象定义一个算法中的 一些步骤,模板方法确定他们的先后顺序,但方法的具体实现由子类负责。二、模板方法举例     2.1 AbstractDisplay类     该类为抽象类,其中

2017-05-08 22:02:52 416

原创 Adapter 适配器模式

一、Adapter 适配器模式    将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的类可以一起工作。    适配器在我们生活中随处可见,就拿我们常用的电子设备笔记本电脑来说,笔记本需要使用的是直流电源,而我们生活中的电都是交流电,这个时候就需要使用电源适配器将交流电转换为直流电,这就是适配器模式的使用。    适配

2017-04-27 00:07:07 349

原创 Iterator 迭代器设计模式

一、Iterator 迭代器设计模式    迭代器设计模式的作用可以提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。    迭代器模式有三个重要作用:    1、支持以不同的方式遍历集合        根据我们生成的迭代器的实现不同,可以采用不同的遍历方式。    2、迭代器简化了集合接口。有了迭代器的遍历接口,集合不

2017-04-25 23:50:51 676

原创 Mybatis源码解析四、SqlSession运行过程

一、SqlSession的创建过程    SqlSessionFactory调用openSession()方法,该方法有很多重载形式,我们以无参方法为例。     public SqlSession openSession() { return openSessionFromDataSource(configuration.getDefaultExecutorT

2017-03-24 16:01:31 399

原创 Mybatis 源码解析三、Mapper接口与mapper.xml文件绑定

一、流程图介绍整体过程                  1、首先根据MapperScannerConfigurer进行包扫描,扫描Mapper接口,生成Spring特定的描述,并将其交由MapperProxyFactory管理,后期会由其生成动态代理对象。              ClassOathMapperScanner 中的doScan()方法。

2017-03-23 17:45:08 7657 2

原创 码云使用Tortoise git SSH的形式提交代码

首先在本地生成公钥pub文件,以及私钥打开git bash执行ssh-keygen -t rsa -C "[email protected]"其中Test是你要保存的文件的名称我们会在C:\Users\Administrator目录下找到两个文件,其中Test为私钥,Test.pub为公钥。  将公钥pub文件保存到码云中打开码云,个人中心,找到SSH公钥将Test

2017-03-22 21:16:51 1685

原创 Mybatis 源码解析二、Mapper接口的代理实现过程 MapperScannerConfigurer 解析

一、使用包扫描的配置方式生成Mapper的动态代理对象上一篇文章中介绍了SqlSessionFactoryBean 通过Mybatis主配置文件生成Mapper接口的代理对象,并将其保存到Configuration中,但是一般在开发中我们并不是采用这种方式配置Mapper接口,因为这种方式是针对单个接口进行配置的,如果有大量的Mapper接口,这样配置就很麻烦。开发中我们通常使用包扫描的方式进

2017-03-22 13:45:21 1407

原创 Mybatis 源码分析一、 SqlSessionFactory的创建过程

本次解析是基于Mybatis与Spring整合的方式,分析Mybatis的初始化过程。一、配置文件解析过程    Spring与Mybatis整合配置过程  1.1 配置数据源xml version="1.0" encoding="UTF-8"?>beans xmlns="http://www.springframework.org/schema/beans" xmlns:xs

2017-03-21 17:07:03 807

原创 Jersey使用注解和过滤器实现日志记录

我们使用过滤器进行日志处理的时候,一般的过滤器的编码方式是针对所有的方法都会进行过滤,假如我们需要对用户特定别的访问行为进行监控,记录用户的访问记录,现在的过滤器的写法就不能满足我们的需求。在Jersey框架中我们可以使用特定的注解来指定过滤器的作用范围,这种特定的注解被称为名称绑定。名称绑定注解使用@NameBingding 注解可以定义一个运行时的自定义注解,该注解用于定义类级

2017-03-14 10:43:20 4275 1

原创 开发中使用RabbitMQ的注意事项

使用消息队列处理消息的时候,我们可能会遇到以下问题:消息处理失败消息体本身有误消息重复处理消息丢失对于消息处理失败,有可能有由于网络波动导致的数据处理异常,待网络稳定时消息就会正常处理,对于这种处理失败,我们应该继续尝试去处理消息。消息体本身有误,这会导致消息连续处理失败,占用较多的资源,写大量的无用日志,这种错误应该丢弃这部分无用消息,但要记录下日志,记清消息体本身数据,以及丢弃消息

2017-03-09 17:20:35 5887

原创 数据库表中字段时间自动更新

假设我们有个需求,在一个数据库表中,记录数据的创建时间,以及数据的更新时间,这个时候我们创建的表需要带有自动更新的字段。我们创建一个ceshi 表,里面有四个字段 id name  create_time  update_time。一、使用SQL实现    具体的建表语句如下:    CREATE TABLE `ceshi` ( `id` int(11

2017-02-28 23:36:57 19116

原创 Java Web 内幕学习系列 十、深入理解Session与Cookie

Java Web 内幕学习系列 十、深入理解Session与Cookie一、理解CookieCookie的作用简单来讲就是用户访问服务器之后,服务器会将一些key/value键值对返回给客户浏览器,并给这些数据加上一些限制条件,在条件符合时,用户下次访问的时候,会将这些数据返回给服务器。因为HTTP是无状态的协议,服务器无法区分用户的访问是不是和上次访问是同一个用户,Cooki

2017-02-26 19:05:19 392

原创 深入分析Java Web中的中文编码问题

深入JAVA WEB 内幕学习系列 三、 深入分析Java Web中的中文编码问题一、为什么要编码在计算机中存储信息的最小单元是一个字节,即8bit,所以最多能表达的字符范围是0-255个人类使用的符号太多,无法用一个字节完全表示因此需要一个新的数据结构char ,从char到byte必须编码二、 常见编码ASCII 码 总共128个,用1个字节的低7位表示,0-31是控制字符,如回车、

2017-02-25 16:53:01 416

原创 Effective Java 系列-02 类和接口

Effective Java 系列-02 类和接口一、类和成员的可访问性最小化对于成员有四种可能的访问级别:私有的(private) 只有再声明该成员的类内部才可以访问这个成员。包级私有 声明改成员的包内部的任何类都可以访问这个成员。受保护的(protected) 声明改成员的类的子类内部可以访问这个成员。公有的(public) 任何地方都可以访问。实例域不能是公有的

2017-02-15 22:43:16 267

原创 01 Effective Java 系列-创建和销毁对象

01 Effective Java 系列-创建和销毁对象一、考虑静态工厂代替构造器public class NewType { public static NewType valueOf(){ return new NewType(); }}上面是一个简单的静态工厂方法,作为生成类的实例方法,静态工厂模式应该作为程序员常用的方法。相比于构造函数模式,静态工厂方法有以

2017-02-13 21:58:34 271

原创 使用Dubbo框架,异常处理原则

在Dubbo的Service实现中捕获异常,记录异常日志,将异常进行转移为自定义异常抛出,注意自定义异常需是RuntimeException,否则使用Spring事务时,不会出现回滚。在dubbo服务的调用层,捕获自定义异常,记录日志进行处理。下面内容为转载内容:原文地址http://blog.csdn.net/swpihchj/article/details/8058129异常处理原则 1.

2017-02-10 10:51:54 2424

原创 Jersey 文件下载

Jersey 文件下载Jersey实现文件下载有两种方式,一种是直接将文件作为响应体,一种是使用StreamingOutput对象作为响应体。一、使用文件对象作为响应体Jersey支持直接使用文件对象作为响应体实现下载功能,但是需要注意的是需要进行判断文件对象是否存在,否则会报Request failed.package cn.lx.resource;import javax.ws.rs.*;im

2017-02-07 15:16:02 6764 1

原创 使用Spring 注解实现调度任务及cron表达式详解

使用Spring 注解实现调度任务及cron表达式详解本教程摘选自《Spring 实战 第3版》,最新的出到第4版,对于学习Spring的朋友来说无论作为教材还是工具书,都是很不错的选择,强力推荐。在程序开发中,我们可能遇到过类似的需求,程序需要设定执行时间,每隔多久执行一次或者在固定的时间段和时间点执行。这时我们可以使用任务调度的方式来实现。目前成熟的任务调度框架有很多,Spring都予以了集成支

2016-12-02 17:16:08 1482

原创 Linux下安装RabbitMQ

Linux下安装RabbitMQ最近公司准备使用RabbitMQ以前接触过ActiveMQ。从网上的资料来看RabbitMQ对持久化的支持做的更好,因此,决定从头学习下RabbitMQ。RabbitMQ的主要特点支持一对多方式多个Queue绑定到一个Exchange后,通过向Exchange发送消息,就可将信息转发到多个绑定到Exchange的Queue中,消息持久化 如果对消息进行了持久话处

2016-11-22 22:49:56 319

原创 Jersey MongoDB的使用

Jersey MongoDB的使用前面介绍了Jersey与Redis的整合使用,这一章节我们介绍,jersey整合MongoDB数据库。 关于MongoDB数据库我们不做过多介绍,通过本次教程可以实现mongodb增删改查的简单使用,如果需要对mongodb有深入的学习,请参考MongoDB教程 引入依赖 <!--引入mongodb的依赖 --> <!-- ===============

2016-11-21 15:33:26 690

原创 Jersey JdbcTemplate的使用

Jersey JdbcTemplate的使用经过前面的介绍,我们可以实现简单RESTful服务了,并使用map集合模拟了,学生信息的增删改查。但是实际开发中我们更多的是与数据库打交道,使用数据库来处理数据,因此在下面的章节中我们将会介绍Jersey框架与数据库进行交互的操作。 本章节我们介绍Jersey与JdbcTemplate的结合使用。引入依赖在spring与Jersey整合的基础上需要加上s

2016-11-18 17:06:00 782

原创 Jersey过滤器使用

Jersey过滤器使用Jersey框架中除了可以使用Servlet提供的过滤器以外,还提供了自己的过滤器实现。Jersey过滤器可以分为请求过滤器和响应过滤器,本次介绍Jersey过滤器的使用,并通过使用过滤器实现客户端请求完整的响应时间记录。ContainerRequestFilter请求过滤器,用于处理请求到达对应的资源服务前的业务需求. 请求过滤器的实现需要满足三个条件:实现Contain

2016-11-18 09:38:49 2394 2

原创 Jersey 统一异常处理

Jersey 统一异常处理正如很多成熟的java框架,一定有良好的异常处理机制。对异常的良好处理,也是一个成熟程序的标志。下面关于异常的处理介绍来自REST(Jersey实现)统一异常机制。异常分类(1)Throwable类是所有异常的始祖,它有两个直接子类Error / Exception: Error仅在Java虚拟机中发生动态连接失败或其它的定位失败的时候抛出一个Error对象。一般程序

2016-11-16 15:01:09 1676

原创 Jersey Response响应请求

Chapter2-3 Jersey Response响应请求前面介绍的Jersey示例,是根据实际需求返回结果,但我们实际在开发中一般不采用这种方式进行开发,在响应客户端请求时,我们使用Response进行响应请求。 javax.ws.rs.core.Response 官方Response ApiResponse设置响应状态码前面的示例中默认都是响应状态码是200,通过Response类,我们可以

2016-11-16 09:35:23 8815

原创 Jersey常用注解

Charpter 2-2 Jersey常用注解@ApplicationPath该注解用于声明Jersey的全局配置类,也即整个Jersey框架的程序入口。该类需要满足下面条件。@ApplicationPath注解该类,并且指定该类对应的路径继承 org.glassfish.jersey.server.ResourceConfig 类在该类中配置Jersey的配置,例如声明资源包路径,配置拦截器

2016-11-15 15:37:28 2533

原创 Jersey复杂案例 完整的增删改查Restful服务

Jersey入门案例2 完整的增删改查Restful服务第一章的入门案例我们可以完成一个简单的HelloWorld程序,下面我们来演示下相对较为复杂的RESTful服务,实现简单学生信息的增删改查。 整个项目框架是在chapter1-3的基础上开发。Student类的定义StudentResource服务提供import cn.lx.entity.Student;import javax.ws.r

2016-11-14 15:13:10 3057

原创 Jersey 入门案例

Jersey 入门案例简介最近公司项目一直在用Restful 进行开发,我们使用的框架是Jersey框架,所以分享出来与大家一起学习。 具体RESTful的介绍,网上有很多资料,成熟的框架也很多,大家可以去网上查找,这里就不过多介绍。 Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 & JSR 339) 规范。它扩展了JAX-RS 参考实现,

2016-11-11 16:22:06 1606

原创 Jersey+Spring+Maven整合demo

Jersey+Spring+Maven整合demo一、导入依赖本次demo使用与galssfish整合的jersey框架主要 需要导入的依赖有jersey依赖,jersey spring 依赖,spring依赖,glassfish依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20

2016-11-08 11:21:50 1107

原创 使用Ide实现远程调试

使用Ide实现远程调试一、准备工作为了进行远程调试,首先需要服务器支持远程调试,我们使用Tomcat作为服务器,Tocat实现远程调试一般有两种方式。1.1 临时支持远程调试设置环境变量export JPDA_ADDRESS=7777相当于设置远程调试监听的端口号。采用这种方式进行远程调试,启动Tomcat不能采用传统的启动方式,使用sh catalina.sh jpda start启动。

2016-11-07 15:01:00 2153

原创 Maven实现tomcat热部署

Maven实现tomcat热部署兼容 tomcat7和tomcat8测试了一上午maven项目热部署到tomcat,在网上查找了不少资料,终于测试成功,写写自己的测试过程。一、开放tomcat管理权限1.1 必须有manager项目tomcat webapps下面必须manager项目,用于管理tomcat权限操作。如果webapps下面没有该项目,则不能进行热部署。1.2 配置tomcat用户

2016-09-23 14:43:40 629 1

转载 hashmap实现原理

hashmap实现原理浅析看了下JAVA里面有HashMap、Hashtable、HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正HashMap和Hashtable的区别HashSet和HashMap、Hashtable的区别HashMap和Hashtable的实现原理HashMap的简化实现MyHashMap HashM

2016-08-12 16:04:47 342

原创 Jedis简单使用

Jedis一、Jedis介绍Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。 在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。 在企业中用的最多的就是Jedis。Jedis同样也是托管在github上,地址:h

2016-08-05 18:19:29 1224

原创 Redis介绍及环境搭建

Redis一、Redis介绍1.1 NoSQL数据库 NoSQL,泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了

2016-08-05 18:18:50 313

原创 redis数据类型以及常用的命令

redis数据类型以及常用的命令一、Stringredis中没有使用C语言的字符串表示,而是自定义一个数据结构叫SDS(simple dynamic string)即简单动态字符串。打开下载的redis源码包,找到src下的sds.h文件查看sds源码:struct sdshdr { //字符串长度 unsigned int len; //buf数组中未使用的字节数量

2016-08-05 18:18:08 1031

空空如也

空空如也

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

TA关注的人

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