关闭

[置顶] 我的所有技术博客以及声明

我的csdn技术专栏(主博客):http://blog.csdn.net/woshixuye 我的新浪技术博客:http://blog.sina.com.cn/luozibuhui111 我的51cto技术博客:http://woshixy.blog.51cto.com/ 本人小技术员一枚,踏踏实实做人,认认真真做技术,无其他不切实际的想法。本博客文章与本人的工作单位没有任何关系,只...
阅读(1795) 评论(6)

MySQL中实现upsert操作

该操作的实现原理是通过判断插入的记录里是否存在主键冲突来决定是插入还是更新,当出现主键冲突时则进行更新操作(使用 ON DUPLICATE KEY UPDATE 语句后面的参数),若无冲突则进行插入操作。 INSERT INTO t_pro_gift (id, name, age ) VALUES ( 1, 'h...
阅读(1669) 评论(0)

Spring中的计时器StopWatch

1 概述 需要记录每个任务执行时间,或者记录一段代码执行时间,简单方法是打印当前时间与执行完时间的差值,若执行大量测试很麻烦并且不直观。若想对执行时间做进一步控制,则需要在程序中很多地方修改。spring-framework提供了一个StopWatch类可以做类似任务执行时间控制。 StopWatch sw = new StopWatch(); sw.start(); // 业务操作 sw.s...
阅读(1622) 评论(0)

Spring中利用配置文件和@value注入属性值

1 简单属性值注入 package com.xy.test1; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service // 需要被注入属性值的类需要被Spring管理 public class PropertiesSer...
阅读(4149) 评论(3)

Java自定义线程池和线程总数控制

1 概述 池化是常见的思想,线程池是非常典型的池化的实现,《Java并发编程实战》也大篇幅去讲解了Java中的线程池。本文实现一个简单的线程池。 2 核心类 【1】接口定义 public interface IThreadPool { /** * 关闭线程池 */ public void shutAlldown(); /** * 执行任务 *...
阅读(2762) 评论(0)

Spring中BeanPostProcessors【2】优雅实现业务分离

1 概述 BeanPostProcessors可以在spring IoC容器初始化受管Bean前、属性设置后对该Bean先做一些预处理,或者在容器销毁受管Bean之前自己释放资源。《Spring中BeanPostProcessors【1】简单预处理》一文有实例说明。本文介绍一个具体案例,优雅实现业务分离。 2 基础类 设想一个系统中分很多模块,对于模块又有不同的操作命令,对于不同模块...
阅读(655) 评论(0)

MySQL的timestamp

timestamp有两个属性,分别是CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP两种。 1 CURRENT_TIMESTAMP  当要向数据库执行insert操作时,若有个timestamp字段属性设为CURRENT_TIMESTAMP,则无论这个字段有没有set值都插入当前系统时间。 2 ON UPDATE CURREN...
阅读(691) 评论(0)

Hive中处理json数据

1 概述 Hive中提供了两种针对json数据格式解析的函数,即get_json_object()与json_tuple() 2 示例 set hivevar:msg={ "name": "Tom", "server": "abc.com" }get_json_object函数 示例: select get_json_object('${hivevar:msg}','$.s...
阅读(1229) 评论(0)

Spring中BeanPostProcessors【1】简单预处理

1 概述 有时我们希望在Spring IoC容器初始化受管Bean前、属性设置后对该Bean先做一些预处理,或者在容器销毁受管Bean之前自己释放资源。Spring IoC为我们提供了多种方法来实现受管Bean的预处理和后处理。Spring中定义了BeanPostProcessors接口: package org.springframework.beans.factory.config; im...
阅读(1171) 评论(0)

Java中isAssignableFrom和instanceof

isAssignableFrom 示例:Class1.isAssignableFrom(Class2) 解释:① 判断Class1和Class2是否相同。②Class1是否是Class2的父类或者接口。 instanceof 示例:object   instanceof   TypeName 解释:判断一个对象实例是否是一个类或接口的或其子类子接口的实例。 public cla...
阅读(1067) 评论(0)

Netty学习6-ChanelHandler【1】概述

1 概述 Handler在netty中无疑占据着非常重要的地位。Handler与Servlet中的filter很像,通过Handler可以完成通讯报文的解码编码、拦截指定的报文、统一对日志错误进行处理、统一对请求进行计数、控制Handler执行与否等等。 Netty4.X中的所有handler都实现自ChannelHandler接口。按照输出输出来分为ChannelInboundH...
阅读(773) 评论(0)

Netty学习12-缓冲区【2】ByteBuf

1 概述 《Netty学习11-缓冲区之JDK ByteBuffer》一文中介绍了JDK的缓冲区ByteBuffer的用法和不足。为了弥补这些不足,Netty提供了自己的缓冲区实现ByteBuf(netty3.X是ChannelBuffer)。 2 实现策略 JDK的ByteBuffer已经提供了基础的能力,Netty的ByteBuf的实现可以有两种策略。 [1] 参考JDK By...
阅读(1406) 评论(0)

Netty学习11-缓冲区【1】ByteBuffer

1 代码示例 import java.nio.ByteBuffer; public class JDKByteBufferTest { public static void main(String[] args) { // 初始化ByteBuffer ByteBuffer buffer = ByteBuffer.allocate(20); System.out.println(St...
阅读(1065) 评论(0)

TCP三次握手和backlog参数

1 三次握手 TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。 为什么非要三次握手呢?谢希仁的《计算机网络》中这样说:为了防止已失效的连接请求报文段突然又传送到了服务端因而产生错误...
阅读(985) 评论(0)

Netty学习8-自定义复杂序列化框架

1 概述 《Netty学习7-序列化原理》一文中讲述了序列化的原理,通过Java位运算、JDK原生的NIO、Netty的ChannelBuffer做了序列化操作。本文演示稍微复杂的一个的自定义序列化框架,但万变不离其宗,拆解出来还是很简单的。 2 工具类 这是核心类。拆解来看就是调用了ChannelBuffer的readInt和writeInt等方法,并定义了抽象类方法read和writ...
阅读(892) 评论(0)

Netty学习10-粘包和拆包

1 粘包拆包基本概念 TPC是一个面向流的协议。所谓流就是没有边界的一串数据,如同河水般连成一片,其中并没有分界线。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的具体情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆成多个包发送,也有可能把多个小包封装成一个包发送。这就是拆包和粘包的概念。 比如向对方发送信息:Good Morning Sit down plea...
阅读(1251) 评论(0)

RTT(往返时间)和RPC

RTT(Round-Trip Time)往返时间在计算机网络中它是一个重要的性能指标。表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认,不包含数据传输时间)总共经历的时间。 RTT由三个部分决定:链路的传播时间、末端系统的处理时间、路由器的缓存中的排队和处理时间。其中前两个部分的值作为一个TCP连接相对固定,路由器的缓存中的排队和处理时间会随着整个网...
阅读(1515) 评论(0)

Netty学习9-序列化框架protocbuf

1 概述 ProtoBuf是一个谷歌开发的非常流行的序列化框架,它支持数据结构化一次可以到处使用,甚至可以跨语言使用,通过代码生成工具生成不同语言的源代码。 2 开发 步骤1  准备 protoc.exe下载。载windows版本的生成工具:protoc-2.5.0-win32.zip文件解压。 protocbuf-java-2.5.0.jar下载。 步骤2...
阅读(806) 评论(0)

Netty学习7-序列化原理

1 概述 序列化:把Java对象转化为byte数组的过程。便于网络传输,存储等。反序列化:把byte流还原为Java对象的过程。现有很多成熟的序列化框架如JDK原生序列化框架、google的protobuf等。本文来探究一下序列化的原理。 2 自定义序列化框架 现在需要转化的是一个int对象,由4个字节构成。那么序列化过程就是把int对象这4个字节,按照某种顺序,分别写到字节数组。本...
阅读(1089) 评论(0)

操作系统-线程

1 背景 自从20世纪60年代提出进程这个概念以来,在操作系统中一直都是以进程为运行的基本单位。直到20世纪80年代中期,人们才又提出了更小的能独立运行的基本单位线程。为什么要引入线程这个概念呢?主要是因为在实际的应用中,人们需要提出一种新的实体,这个实体必须满足两个特性: 1 各个实体之间可以并发执行。 2 实体之间可以共享相同的地址空间。就像在同一个进程内部的各个函数,共享该...
阅读(630) 评论(0)

操作系统-进程

1 进程的概念 一个进程就是一个正在运行的程序。一个进程应该包含以下内容: (1) 程序的代码,既然进程是一个正在运行的程序,自然需要程序的代码 (2) 程序的数据 (3) CPU寄存器的值,包括通用寄存器,程序计数器 (4) 堆(heap)是用来保存进程运行时动态分配的内存空间 (5) 栈(stack)有两个用途,1保存运行的上下文信息。2在函数调用时保存被调用函数的形参或者局部变量...
阅读(1192) 评论(0)
929条 共47页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:3483237次
    • 积分:32865
    • 等级:
    • 排名:第161名
    • 原创:539篇
    • 转载:389篇
    • 译文:1篇
    • 评论:336条
    求打赏啊
      感觉有帮助请赏一杯茶钱,金额随意。您的鼓励是我写作的动力!
    博客专栏
    求关注啊
      我的微信公众号,敬请关注
    博客寄语
    本人小技术员一枚,踏踏实实做人,认认真真做技术,无其他不切实际的想法。本博客文章与本人的工作单位没有任何关系,只是大学时期或平时看书对IT常用技术的小总结,不能保证全部博文正确或最优,需要读者自己判断。本博客所有文章仅供学习交流,绝不能用作商业用途,绝对不可作为除学习之外的任何用途。本博客的所有内容仅供学习和测试,对任何法律问题及风险不承担任何责任。若无说明,文章为本人原创,对于本人的原创文章,转载必须注明出处和原文链接。本博主上传的学习资源同样只能作为学习用途,绝不能作为除学习之外的任何用途。对于未遵守本博主声明的情形,本博主保留诉诸法律的权利。十分欢迎和期待与IT技术以及生活的爱好者交流学习。
    最新评论