- 博客(43)
- 收藏
- 关注
原创 Netty学习笔记(2)
Buffers(缓冲)Buffer 是一个数据对象,我们可以把它理解为固定数量的数据的容器,它包含一些要写入或者读出的数据。在Channel 中必须结合Buffer使用,不能直接把数据写入通道。写入数据到ByteBuf后,写入索引是增加的字节数量。开始读字节后,读取索引增加。你可以读取字节,直到写入索引和读取索引处理相同的位置,次数若继续读取,则会抛出IndexOutOfBoundsExcepti...
2018-07-12 11:15:45 275
原创 Netty学习笔记(1)
最近工作中用到了Netty,于是借此机会整理出来。关于什么是Netty,以及它的好处就不多说了,网上资料很多。学习Netty前我们应该着重理解下面这些对象,这些都是Netty的核心概念,对我们学习Netty很有帮助Bootstrap一种是用于客户端的Bootstrap,一种是用于服务端的ServerBootstrap。Bootstrap用来连接远程主机,有1个EventLoopGroupServe...
2018-07-10 22:41:03 309
原创 Docker化HelloWorld程序
安装docker因国内访问docker官网速度问题,这里使用国内的加速镜像 daocloud.iocurl -sSL https://get.daocloud.io/docker | sh查看docker版本docker version启动docker,并查看状态systemctl start docker.servicesystemctl status docker.service显示系统信息...
2018-02-28 08:52:29 317
原创 同步屏障CyclicBarrier
它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。CyclicBarrier还提供一个更高级的构造函数CyclicBarrier(int parties,Runnable barrier-Action),用于在线程到达屏障时,优先执行barrierAction,方便处理更复杂的业务场景,比如说:Cyclic...
2018-02-27 15:52:09 247
原创 利用堆解决开发中的一个问题
最近开发中看见这样的一个需求,给车系建议指导价,也就是取最小值和最大值。竟然有人写了一个冒泡排序..... 我们都知道Java类库中提供的排序都是经过优化的排序算法,顺序表也就是用的是快排,而且这个快排是三相求和取平均值算法,让拿到的值也就是轴,尽可能均匀的划分,也就是轴的左边和右边尽可能的数量平均,达到快排的最好效果。而对于链表官方库也是采用的归并排序。于链表呢,比如快排,两个指针分别网后往...
2018-02-27 11:44:41 283
原创 Redis如何设计解决springcache的缺陷
关于spring cache的缺陷:例如有一个缓存存放 list<User>,现在你执行了一个 update(user)的方法,你一定不希望清除整个缓存而想替换掉update的元素。这里我们可以利用Redis的一些特性来解决这个缺陷。假设我们在Redis中缓存了系统表数据,找出年龄大于25,且性别是男的用户。这时候我们可以这样做:先定义几个常量字段: static final Stri...
2018-02-26 16:10:36 830
原创 Redis环境搭建
Redis环境搭建前置需求:要先安装GCC yuminstall gcc-c++1、下载redis-3.0.0-rc2.tar.gz,放到/usr/local/software2、解压:tar -zxvf redis-3.0.0-rc2.tar.gz -C/usr/local3、进入到解压目录下:cd usr/local/redis-3.0.0-rc2,编译:make4、进入到src下进行安装:...
2018-02-26 11:05:48 381
原创 SpringBoot整合Spring-data-redis实现集中式缓存
Spring Data redis的几种序列化从框架的角度来看,存储在Redis中的数据只是字节。虽然说Redis支持多种数据类型,但是那只是意味着存储数据的方式,而不是它所代表的内容。由我们将这些数据转化成字符串或者是其他对象。我们通过org.springframework.data.redis.serializer. RedisSerializer将自定义的对象数据和存储在Redis上
2018-02-03 11:28:47 2341
转载 Zookeeper
一、ZooKeeper 基本概念1、ZooKeeper 是什么?Zookeeper官网地址: http://zookeeper.apache.org/Zookeeper官网文档地址:http://zookeeper.apache.org/doc/trunk/index.htmlZooKeeper 是Hadoop下的一个子项目,它是一个针对大型分布式系统的可靠协调系统;它提供的功
2017-08-28 11:42:07 342
转载 MySQL数据库引擎详解
作为Java程序员,MySQL数据库大家平时应该都没少使用吧,对MySQL数据库的引擎应该也有所了解,这篇文章就让我详细的说说MySQL数据库的Innodb和MyIASM两种引擎以及其索引结构。也来巩固一下自己对这块知识的掌握。Innodb引擎Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,关于数据库事务与其隔离级别的内容请见数据库事务与其隔离级别这篇
2017-03-20 10:49:24 350
转载 Java 并发开发:Lock 框架详解
摘要:我们已经知道,synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多局限性,比如响应中断等。Lock 提供了比 synchronized更广泛的锁操作,它能以更优雅的方式处理线程同步问题。本文以synchronized与Lock的对比为切入点,对Java中的
2017-03-15 17:17:45 380
转载 单例与序列化的那些事儿
转载:http://www.hollischuang.com/archives/1144本文将通过实例+阅读Java源码的方式介绍序列化是如何破坏单例模式的,以及如何避免序列化对单例的破坏。单例模式,是设计模式中最简单的一种。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式
2017-03-15 16:52:09 398
转载 如何理解 Java 中的 <T extends Comparable<? super T>>
Java 中类似 > 这样的类型参数 (Type Parameter) 在 JDK 中或工具类方法中经常能看到。比如java.util.Collections 类中的这个方法声明:public static T extends Comparablesuper T>> void sort(ListT> list)我知道 extends 和 super 这样的关键字在泛型中是
2017-03-11 10:32:16 1000
转载 深入分析Java的序列化与反序列化
序列化是一种对象持久化的手段。普遍应用在网络传输、RMI等场景中。本文通过分析ArrayList的序列化来介绍Java序列化的相关内容。主要涉及到以下几个问题:怎么实现Java的序列化为什么实现了java.io.Serializable接口才能被序列化transient的作用是什么怎么自定义序列化策略自定义的序列化策略是如何被调用的ArrayList对序列化的实现有什么
2017-03-11 09:34:28 301
转载 session和cookie
为什么我们要使用session和cookie为什么要使用session和cookie这个话题就要从HTTP状态协议的无状态性开始说起了。无状态协议是指协议对事物处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它应答就很快。HTTP是超本文传输协议,顾名思义,这个协议支持超文本的传
2017-03-09 10:33:28 286
转载 你真的了解try{ return }finally{}中的return?
今天去逛论坛 时发现了一个很有趣的问题:谁能给我我解释一下这段程序的结果为什么是:2.而不是:3代码如下:class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) {
2017-03-09 10:11:52 9795 7
转载 【java并发编程实战】—–线程基本概念
学习Java并发已经有一个多月了,感觉有些东西学习一会儿了就会忘记,做了一些笔记但是不系统,对于Java并发这么大的“系统”,需要自己好好总结、整理才能征服它。希望同仁们一起来学习Java并发编程,共同进步,互相指导。在学习Java并发之前我们需要先理解一些基本的概念:共享、可变、线程安全性、线程同步、原子性、可见性、有序性。共享和可变要编写线程安全的代码,其核心在于对共享的和可变的状
2017-03-09 09:51:09 327
转载 【Java并发编程实战】—–“J.U.C”:锁,lock
在java中有两种方法实现锁机制,一种是在前一篇博客中(【java7并发编程实战】—–线程同步机制:synchronized)介绍的synchronized,而另一种是比synchronized更加强大和领过的Lock。Lock确保当一个线程位于代码的临界区时,另一个线程不进入临界区,相对于synchronized,Lock接口及其实现类提供了更加强大、灵活的锁机制。一个简单的锁在使用sy
2017-03-09 09:35:11 317
转载 HashMap分析
HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,我们总是可以通过key快速地存、取value。下面就来分析HashMap的存取。一、定义 HashMap实现了Map接口,继承Abs
2017-03-08 20:23:41 260
转载 jvm内存区域
JVM的内存形式: (1)方法区:存放了要加载的类的信息(名称,修饰符等)、类中的静态变量、类中定义为final的变量、类中Field信息、类中的方法信息,当开发人员通过Class对象的getName、isInterface方法来获取信息时候,这些信息都来源于方法区。方法区域也是全局共享的,在一定条件下它也会被GC,当方法区域要使用的内存超过其运行的大小时,会抛出OutOfMemo
2017-02-27 11:38:40 276
转载 启动struts2项目报错
启动报错com/opensymphony/xwork2/spring/SpringObjectFactory.java:245:-12016-05-01 15:50 874人阅读 评论(0)收藏举报本文章已收录于:分类: Struts2(1) 作者同类文章X版权声明:本文为博主原创文章,未经
2017-02-27 11:00:02 798
原创 二叉搜索树
二叉搜索树,对于任何结点x,它的左子树结点关键字不大于x.key,右子树结点关键字不小于x.key。二叉树删除结点的4种情况 (a)当删除的结点只有右孩子的时候:if (deleteNode.left == null) this.transplant(deleteNode, deleteNode.right);(b)当删除的结点只有左孩子的时候:else
2016-12-10 13:29:49 433
原创 HasMap简单实现
采用链接法处理碰撞/** * MapEntry存储KEY-VALUE键值对,当发生碰撞时,可以还可以根据不同的key来查找value。 * * @author Administrator * * @param * @param */class MapEntry { private K key; //键 private V value; //值 public M
2016-12-09 15:37:45 792 2
原创 栈
栈的实现:/** * 顺序表实现的栈 * @author Administrator * * @param */public class MyArrStack { private int size; // 栈中存放放最多元素个数 private int top; // 栈顶位置 private T[] items; // 基础数组 @SuppressWarnings("
2016-12-05 12:43:06 258
原创 队列
队列的顺序表方式实现:实现之前的问题?/* * 沿用顺序表的实现方法的问题: * 1、rear=0时,因为队头元素就在数组高端,deQueue()的时间代价O(1),而enQueue()的代价O(n) * 2、rear=n-1时,因为队头元素又在数组低端,需要移动其余n-1个元素,deQueue()的时间代价O(n),而enQueue()的代价O(1) * 如何保证队列的连
2016-12-04 14:34:06 295
原创 线程池(一)
什么是线程池?为什么要使用线程池?进行数据库开发的时候,我们应该都接触过数据库连接池,为了避免每次进行数据库连接的时候都重新新建和销毁数据库连接,我们可以使用一个数据库连接池来维护一些数据库连接,让他们长期保持一个激活的状态,当系统需要使用使用数据库的时候,就从连接池中拿来一个可用的连接即可,而不是创建新的连接。反之,当我们需要关闭连接的时候,也不是真的关闭连接,而是将这个连接返还给连接池。通
2016-06-26 21:17:58 2094
原创 线程池(二)
线程池超负载了怎么办?都有哪些拒绝策略?在ThreadPoolExecutor的构造方法里有一个这样的参数,RejectedExecutionHandler handler通过查看Jdk我们可以知道这是一个接口,而且jdk内置实现了四种拒绝策略,它们都是ThreadPoolExecutor的public static class。CallerRunsPolicy策略:只要线程池未关
2016-06-26 21:16:53 2141
转载 深入理解Java内存模型(一)——基础
深入理解Java内存模型系列均来自原作者:http://www.infoq.com/cn/author/%E7%A8%8B%E6%99%93%E6%98%8E并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传
2016-06-22 15:48:38 406
原创 快速排序
package quick_sort;import static java.lang.System.out;public class Sort{ public static> void quickSort(T[] array,int p,int r) { if(p < r) { int q = partition(array,p,r); quickSort(
2015-12-14 14:07:12 437
原创 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
package december;import java.util.Scanner;/* * 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位 */public class Lianxi_8 { public static int lastPeople(int n) { boolean[] pe
2015-12-08 22:59:59 852
原创 分解质因子
package december;import java.util.Scanner;/* *90 = 2*3*3*5 *找出 2 - 90中间的所有质数, *if(90 % 2 == 0),则2算一个质因子同时 还剩下45继续可以递归分解,然后 break,继续判断 (45 % 2 == 0)不满足,i++ *min[i] == 3, 45继续对3 (45 %3 == 0)。。
2015-12-07 20:37:46 444
原创 验证哥德巴赫猜想
package december;import java.util.Scanner;/* * 哥德巴赫猜想:任何大于2的的偶数,都可以表示为两个素数之和。 * 素数:大于1的自然数中,除一和自身外没办法被其他自然数整除的数 * 要求验证:给出范围验证哥德巴赫猜想, * 思想:穷举法判断,只要有一个偶数不满足,它就是不成立的! */public class Guss_5 { /
2015-12-05 17:54:23 920
原创 LinkedList源码系列(2)
int indexOF(T e): /** * Returns the index of the first occurrence of the specified element * in this list, or -1 if this list does not contain the element. * More formally, return
2015-12-05 12:18:22 635
原创 LinkedList源码系列(1)
//:judy/List首先我们知道LinkedList的ADT(抽象数据类型)其实是链表,而链表的优缺点想必大家都知道。。 在此不用赘述今天我们主要讲的是LinkedLIst 类和 Node类 以及ListIterator类用泛型的设计,以及核心常用的源码:先来看下Collection接口,List接口,ListIterator接口的主要接口public interfa
2015-12-03 21:40:39 645
原创 Java基础(一)
1、&和&&的区别?首先&和&&都是逻辑运算符与(and),当运算符两边都是true时,整个表达式才是true,其中有一个false,则,表达式就是false。其次&&具有短路功能,如if(!flag&&str.equals("")),当flag为false时,则后面的表达式则不会进行计算,而如果用&做运算符与,则会抛出NullPionterException异常。2,在Java中
2015-08-31 21:10:32 457
原创 Exception(Java异常)
/*异常。Java运行时期发生的问题就是异常。Java中运行时发生的除了异常Exception还有错误Error。异常:通常发生可以有针对性的处理方式的。错误:通常发生后不会有针对性的处理方式。Error的发生往往都是系统级别的问题,都是jvm所在系统发生的并反馈给jvm的。无法针对处理,只能修正代码。*/class ExceptionD
2015-03-28 21:17:11 670
原创 内部类
/*当A类中的内容要被B类直接访问,而A类还需要创建B的对象,访问B的内容时,这时,可以将B类定义到A类的内部。这样访问更为便捷。将B称之为内部类(内置类,嵌套类)。访问方式:内部类可以直接访问外部类中的所有成员,包含私有的。而外部类要想访问内部类中的成员,必须创建内部类的对象。当描述事物时,事物的内部还有事物,这个内部的事物还在访问外部
2015-03-28 20:44:17 516
原创 Java内存分区
堆与栈的比较:JAVA堆与栈都是用来存放数据的,那么他们之间到底有什么差异呢?既然栈也能存放数据,为什么还要设计堆呢?1.从存放数据的角度: 前面我们已经说明: 栈中存放的是基本类型的变量or引用类型的变量 堆中存放的是对象or数组对象
2015-03-18 20:50:06 1416
原创 strcmp函数实现
#include#includeint mystrcmp(const char* src, const char* dst){ int ret = 0; while (!(ret = *(unsigned char*)src - *(unsigned char*)dst) && *dst) { //循环条件就是字符ASCll码相等同时dst字符串没有到末尾 ++src;
2015-03-08 21:51:53 703
原创 strcpy函数的实现
已知strcpy的函数原型是:char* strcpy(char* strDest,const char* strSrc)1、编程实现strcpy#define _CRT_SECURE_NO_WARNINGS#include#include#includechar* MyStrcpy(char* strDest, const char* strSrc)//不能少const修饰
2015-03-05 23:11:55 553
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人