自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

shuduti的博客

专注于技术

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

原创 Zookeeper扫盲

Zookeeper简介说明Zookeeper简介什么是Zookeeper?Zookeeper是一个高效的分布式协调服务,他暴露了一些公用的服务,比如命名/配置/管理/同步控制/群服务等。我们可以使用Zookeeper来实现达成共识/集群管理/leader选举等。Zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)的实现。该框架能够很好地保证分布式环境中数据的...

2018-12-16 15:37:13 652

原创 JVM-基本概念

基本概念**类加载子系统:**负责从文件系统或者网络中加载Class信息,加载的信息存放在一块称之为方法区的内存空间。**方法区:**就是存放类信息、常量信息、常量池信息、包括字符串字面量和数字常量等。**java堆:**在java虚拟机启动的时候建立java堆,它就是java程序最主要的内存工作区域,几乎所有的对象实例都存放在java堆中,堆空间是所有线程共享的。**直接内存:**j...

2018-11-29 15:55:46 459

原创 Netty编解码技术(三)

编解码技术就是java序列化技术,序列化的目的就两个,第一进行网络传输,第二对象持久化。虽然我们可以使用java进行对象序列化,nettty去传输,但是java序列化的硬伤太多,比如java序列化没法跨语言、序列化后码流太大、序列化性能太低等。这里就要依赖主流的编解码框架:JBoss的Marshalling包google的Protobuf基于Protobuf的KyroMessagePac...

2018-11-17 11:15:36 380

原创 Netty-TCP粘包拆包问题(二)

概念无论是服务端还是客户端,当我们读取或者发送数据的时候,都需要考虑TCP底层的粘包/拆包机制。TCP是一个“流”协议,所谓流就是没有界限的遗传数据。大家可以想象下如果河流里的水就好比是数据,他们是连成一片的,没有界线,TCP底层并不了解上层的业务数据具体的含义,他会根据TCP缓冲区的实际情况进行包的划分,也就是说,在业务上,我们一个完整的包可能会被TCP分成多个包进行发送,也可能多个包封装成一...

2018-11-15 18:48:45 178

原创 Netty-Hello-World(一)

Netty简介Netty是一个NIO client-server框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。Netty提供了一种新的方式来开发网络应用程序,这种新的方式使得它容易使用和有很强的扩展性。Netty的内部实现很复杂,但是Netty提供了简单易用的api从网络处理代码中解耦业务逻辑。Netty是完全基于NIO实现,所以整个Netty都是异步的。网络应用程序通常需要...

2018-11-14 16:30:17 375

原创 BIO/NIO/AIO结合Socket编程实现

基本概念Socket又称“套接字”,应用程序通过“套接字”向网络发出请求或者应答网络请求。Socket和SocketServer类库位于java.net包中,ServerSocket用于服务器端,Socket是建立网络链接使用的。在连接成功时,应用程序两端会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,不因为在服务器端或在客户端而产生不同的级别。不...

2018-11-10 18:20:51 1791

原创 Disruptor并发框架(九)

Disruptor并发框架简介Disruptor是一个开源的并发框架,能够在无锁的情况下实现网络的Queue并发操作。Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量级JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。参考系列文档:http://ifeve.com/disruptor-getting-started/Disruptor ...

2018-11-07 20:44:36 3847

原创 锁(八)

锁在java多线程中,我们知道使用synchronized关键字来实现线程间的同步互斥操作,那么其实还有一个更优秀的机制去完成“同步互斥”工作,它就是Lock对象,即重入锁和读写锁。他们具有比synchronized更为强大的功能,并且具有嗅探锁定、多路分支等功能。ReentrantLock(重入锁)概念:在需要进行同步的代码部分加上锁定,但最后一定要释放锁,不然会造成锁用于无法释放,其...

2018-11-06 09:25:02 216

原创 util.concurrent下的常用工具类(七)

CountDownLacth的使用CountDownLacth经常用于监听某些初始化操作,等初始化执行完毕后,通知主线程继续工作(一个线程等待其他所有线程的通知后再执行)。public class UseCountDownLatch { public static void main(String[] args) { //这里的初始化参数表示只要countDown()方法被线程调用两次...

2018-11-05 21:01:13 224

原创 Executor(六)

Executor框架为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效进行线程控制。他们都在java.util.concurrent包中,是JDK并发包的核心。其中有一个比较重要的类Executors,他扮演线程工厂的角色,我们通过Executors可以创建特定功能的线程池,Executors创建线程池的方法:newFixedThreadPool():该方法返...

2018-11-05 18:29:31 155

原创 多线程设计模式(五)

并行设计模式属于优化的一部分,它是对一些常用的多线程结构的总结和抽象。与串行相比,并行程序的结构通常更为复杂。因此合理的使用并行模式在多线程开发中更具有意义。Future模式Future模式有点类似商品订单。比如网购时,当看重某一件商品时,就可以提交订单,当订单处理完成后,在家里等待商品送货上门即可。或者说更形象的我们的Ajax请求的时候,页面是异步的进行后台处理,用户无须一直等待请求结果,可...

2018-11-04 14:10:14 225

原创 Queue(四)

并发Queue在并发队列上,JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。ConcurrentLinkedQueue是一种适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQ...

2018-11-03 18:06:26 184

原创 同步类容器和并发类容器(三)

同步类容器同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作。复合类操作如:迭代(反复访问元素,遍历完容器中的所有元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发地修改容器时,可能会表现出意外的行为,最经典的就是ConcurrentModificationException,原因是当容器迭代过程中,被并发地修改了内容,这是由于早期迭...

2018-11-03 13:36:14 189

原创 线程之间的通信(二)

线程之间通信概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就是成为整体的比用方式之一。当线程存在通信指挥,系统间的交互性会更强,在提高CPU利用率的同时还会使开发人员对线程任务处理的过程中进行有效的把控和监督。使用wait/notify方法实现线程间的通信(这两个方法都是Ojbect的类方法,也就是说java为所有的对象都提供了这两个方法...

2018-11-03 11:46:21 141

原创 多线程基础(一)

线程安全概念:当多个对象访问某一个类(对象或方法)时,这个类始终都表现出正确的行为,那么这个类(对象或方法)就是线程安全的。synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为互斥区或临界区。public class MyThread extends Thread { private int count = 5; //synchronized pub...

2018-11-03 07:58:09 122

转载 Log4和self4j整合使用

之前项目开发过程中,遇到线上问题时运维找不到具体的日志文件,然后把锅丢给了开发组,对于开发来说,日志是自己记录的,所以找起来容易,但对于运维却很困难,于是开始反思是不是我们的日志打得太low了,在网上看了许多的博文,发现这篇博文java日志框架log4j详细配置及与slf4j联合使用教程 写得很不错,于是做了借鉴总结。日志在系统开发的过程中扮演着不可替代的角色,对于开发人员来说,好的日志处理...

2018-08-22 16:57:33 1855

原创 Spring应用于组件注册的注解

在将Spring框架应用于项目开发中时,繁多的xml配置文件会使项目的维护升级变得困难,特别是项目很大时,有时候会花掉大量的时间去定位相应的组件配置。为了解决这个问题,引入Spring框架中的强大注解变得很重要,同时,注解的学习更是为后期学习Spring Boot做好了铺垫。@Configuration@Configuration注解用于定义配置类,并用于构建bean定义,初始化Sprin...

2018-08-20 19:20:18 163

原创 一、Spring核心机制:依赖注入

设值注入:IOC容器使用变量的setter方法来注入被依赖的对象。构造注入:IOC容器使用构造器来注入被依赖的对象。设值注入:Persion.javapackage inter;public interface Persion { //定义一个方法 public void useAxe();}Axe.javapackage inter;public interface Axe

2017-03-03 15:09:53 346

原创 三、@PathVariable

3.1@PathVariable 映射 URL 绑定的占位符带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。实例:

2016-12-09 15:54:29 34670 1

原创 二、@ResquestMapping

2.1使用 @RequestMapping 映射请求Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求在控制器的类定义及方法定义处都可标注 @RequestMapping 类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目。 方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注 @RequestMappi

2016-12-09 11:36:44 2679

原创 一、SpringMVC入门,实现HelloWorld

步骤: - 加入 jar 包 - 在 web.xml 中配置 DispatcherServlet - 加入 Spring MVC 的配置文件 - 编写处理请求的处理器,并标识为处理器– 编写视图1.1添加SpringMVC开发的相关jar包commons-logging-1.1.3.jar spring-aop-4.0.0.RELEASE.jar spring-beans-4.0.0.R

2016-12-07 16:59:34 291

转载 Eclipse调优、设置大全

](http://upload-images.jianshu.io/upload_images/3233445-ff198da20718976b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 2.取消所有启动时要激活的插件(在用时激活也一样)和其它的相关的在启动时执行的操作。3.关闭自动更新 减少jvm内存回收引起的eclips

2016-12-06 21:02:34 394

原创 九、Spring集成Mybatis

9.1添加jar包9.2新建数据表CREATE TABLE s_user(user_id INT AUTO_INCREMENT PRIMARY KEY,user_name VARCHAR(30),user_birthday DATE,user_salary DOUBLE)9.3新建实体类User.javapackage com.domain;import java.util.Date;pu

2016-11-28 22:28:37 282

原创 八、Mybatis一级缓存和二级缓存

- 一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session****flush 或 close 之后,该 Session 中的所有 Cache 就将清空。二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache, HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存

2016-11-28 20:32:10 345

原创 七、Mybatis调用存储过程

7.1准备数据库表和存储过程create table p_user(id int primary key auto_increment,name varchar(10),sex char(2));insert into p_user(name,sex) values('A',"男");insert into p_user(name,sex) values('B',"女");insert

2016-11-28 18:41:22 276

原创 六、Mybatis动态SQL和模糊查询

6.1准备数据表create table d_user(id int primary key auto_increment,name varchar(10),age int(3));insert into d_user(name,age) values('Tom',12);insert into d_user(name,age) values('Bob',13);6.2Condition

2016-11-27 21:39:07 331

原创 五、Mybtis实现关联表查询

5.1一对一关联查询5.1.1创建表和数据CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20));CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VARCHAR(20),teacher_id I

2016-11-27 20:40:05 1255 1

原创 四、Mybatis解决字段名与实体类属性名不相同的冲突

4.1准备数据表和简单数据CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT);INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);INSERT INTO o

2016-11-27 16:13:37 424

原创 三、优化分类

3.1连接数据库的配置单独放在一个 properties 文件中db.propertiesdriver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mybatisusername=rootpassword=rootconfig.xml中引用db.properties<?xml version="1.0" encoding="UTF-

2016-11-27 15:39:13 350

原创 二、Mybatis增、删、改、查基于XML和注解

文件结构2.1基于XML的增、删、改、查2.1.1定义sql映射文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="

2016-11-27 13:31:49 1990

原创 一、Mybatis入门

项目相关包文件的建立:1.1新建Java项目,导入相关的包新建一个lib文件,导入基础的包,其中commons-logging-x.x.jar、mybatis-x.x.x.jar、mysql-connector-java-x.x.x-bin.jar是基础包,log4j-x.x.x.jar包和junit-x.x.x.jar包是为了显示日志信息和方便测试使用的包。别忘了Build Path。1.2建库+

2016-11-26 22:22:29 224

原创 mybatis报错invalid types () or values ()解决方法

Exception in thread “main” org.apache.ibatis.exceptions.PersistenceException: Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.atguigu.my

2016-11-26 16:00:52 18886

原创 三、Listener介绍

使用Listener步骤: - 定义Listenner实现类。 - 通过注解或在web.xml文件配置Listener。3.1实现Listener类常用Web事件监听器接口: - ServletContextListener:用于监听Web应用的启动和关闭。 - ServletContextAttributeListener:用于监听ServletContext范围(application)

2016-11-22 21:01:51 383

原创 二、Filter介绍

Filter的主要作用于对用户进行预处理,也可以对HttpServletResponse进行后处理,是个典型的吃力链。使用Filter的完整流程:Fileter对用户请求进行预处理,接着把请求交个Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。Filter的用处: - 在HttpServletRequest到达Servlet之前,来接客户的HttpServletRequ

2016-11-22 20:05:51 497

原创 一、Servlet介绍

1.1Servlet的开发Servlet是个特殊的Java类,这个Java类必须继承HttpServlet。每个Servlet可以响应客户端的请求。 Servlet响应客户端请求的方法: - doGet:用于响应客户端的GET请求。 - doPost:用于响应客户端的Post请求。 - doPut:用于响应客户端的Put请求。 - doDelete:用于响应客户端的Delete请求。大部分

2016-11-21 20:47:55 248

原创 六、JSP中的9个内置对象

Servlet中,request、response两个对象是_jspService()方法的形参,当Tomcat调用该方法时会初始化这两个对象。而page、pageContext、application、config、session、out都是_jspService()方法的局部变量,由该方法完成初始化,只有当页面的page指令的isErrorPage属性为true时,才可以使用exception对

2016-11-20 21:44:14 428

原创 五、JSP的7个动作指令

动作指令只是在运行时的动作,编译指令在将JSP翻译成Servlet时起作用JSP的主要动作指令 - jsp:forword:执行页面转向,将请求的处理转发到下一页面。 - jsp:param:用于传递参数必须与其他支持参数的标签一起使用。 - jsp:include:用于动态引入一个JSP页面。 - jsp:plugin:用于下载JavaBean或Applet到客服端执行。 - jsp:u

2016-11-20 14:54:01 406

原创 四、JSP的3个编译指令

page:用于针对当前页面的指令。include:用于指定包含另一个页面。taglib:用于定义和访问自定义标签。 使用编译指令的格式如下:<%@ 编译指令 属性名1=”属性值1” 属性名2=”属性值2” %>page指令<%@ page[language="Java"][extends="package.class"][import="package.class│package.*,

2016-11-20 14:52:48 244

原创 三、JSP的4种基本语法

3.1JSP注释JSP注释:<%--注释内容--%>HTML注释:<!--注释内容-->3.1JSP声明JSP声明似乎不需要定义类,实际上是JSP页面会编译成Servlet,从而JSP声明对应生成Servlet的成员变量或者成员方法JSP声明语法<%! 声明部分 %><head> <title>welcome</title> <!--JSP声明示例--> <%! /

2016-11-20 14:51:23 591

原创 二、JSP的基本原理

JSP页面的组成: - 静态部分:标准的HTML标签,静态的页面内容,这些内容和HTML页面相同。 - 动态部分:受Java程序控制的内容,这些内容由Java脚本生成。Servlet的三个方法: - init():初始化JSP/Servlet的方法。 - destroy():销毁JSP/Servlet的方法。 - service():对用户请求生成响应的方法。结论: - JSP文件必须在

2016-11-20 14:49:58 258

空空如也

空空如也

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

TA关注的人

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