自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (6)
  • 收藏
  • 关注

原创 实现自己的序列化协议

首先,我们知道序列化就是将对象变成字节数组,以便传输,而反序列化就是将字节数组变为原来的对象,这里我们借助Netty中的channelBuffer 来实现 ,其实channelBuffer可以理解为能动态扩容的Bytebuffe,能够自动扩容,这就好比数组与arrayList之间的关系,感兴趣的可以参照利用数组实现ArrayList的方式来实现自己的动态Bytebuffer,在这里不是重点,就不实...

2018-07-29 20:43:16 748

原创 复杂链表的复制问题

 题意大致是这样的:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)分析 如果我们复制一个节点后就立即指定它的random节点可能会出现这种情况,即它的random节点还没有复制过来,这将会导致出错,故我们可以分两步进行 ...

2018-07-27 11:25:44 260

原创 mybatis源码解析之 mybatis如何完成自动帮我们完成事务的开启,提交与回滚

先看一部分代码 这里面有一些值得注意的地方public void insertUser(User user) { try { //加载主配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //创建sqlSessionFac...

2018-07-26 22:38:44 3409

原创 mybatis环境搭建

mybatis是一个orm框架,是半自动化的 在maven环境下,搭建mybatis环境pom.xml文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/...

2018-07-26 21:34:24 106

原创 寻找两个链表的公共节点

寻找两个链表的公共节点,思路:选用一个链表的第一个节点P跟另一个链表依次比较, 若一直没遇到想的的节点到p后移一位,在依次跟另一个链表的每一个节点比较,按照上述步骤重复进行,直到找找到公共节点,或指针p为空为止,具体实现逻辑下 复杂度为n*m,n和m分别为两链表的长度 /*public class ListNode {    int val;    ListNode next = nu...

2018-07-26 13:59:12 463

原创 两个线程交替打印奇偶数

在做这个代码之前,其实碰到了一些问题,不过说到底还是基础不行,总结出来就是 切不要以Integer等作为锁的对象,也就是被锁住的引用 所指向的对象一定不能变,用integer极其容易引起所指向对象的改变 如 i = i+1;等等 切记 切记 。否则会报错哦,(非法对象监视器异常)例如 : 有个Integer i对象 synchronized (i) { i =i+1; i.wait...

2018-07-26 13:30:27 561

原创 Method 是否能调用的判断

首先让我们看一下java中的动态代理,我也是从中受到启动的定义一个接口package com.TestProxy;public interface IFruit { void eat(String i); void shape(String i);}接着有个实现类package com.TestProxy;public class Apple impleme...

2018-07-23 19:46:48 698

原创 判断一个树结构是否包含另一个树

//思路是使用递归,若根节点相等,则比较左右子树是否相等,否则分别判断该树的左子树或右子树是否包含原来的树,两者有一个为真即可//具体实现代码如下class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { ...

2018-07-23 12:29:04 692

原创 一致性hash算法的具体实现

//在看如下代码时请确保你懂的一致性代码的原理 ,博文中采用 链表的方式来实现hash一致性算法由一个链表来保持服务器的hashcode,并且该链表中的值都是递增的,这就相当于在2的30次方里分布了四个有序的机器,接下来将数据的hashcode与四台服务器的hashcode从小到大依次进行对比 即可找到所分布的情况,需要注意的是当该数据大于所有机器的hashcode时应该讲该数据置于第一台...

2018-07-21 22:09:22 168

原创 利用zookeeper实现自己的服务注册中心

首先确定服务注册中心的结构信息:具体如下图所示首先定义客户端注册接口,定义了一些基本方法;package lin.remoting.framework.register;import java.util.List;import java.util.Map;/** * 消费端注册中心 */public interface IRegisterCenterInvoker {...

2018-07-21 17:36:05 7774 8

原创 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

 如果有环, 环的数目设为n,则先让p1,p2都指向头结点,p1先向前走n步,可以发现p1,领先p2指针n步,当p2走到环口时,则p1刚走完环,与p2相遇,按照此思路求解即可public class Test {    //找到一快一满指针相遇处的节点,相遇的节点一定是在环中    public static ListNode meetingNode(ListNode head)...

2018-07-20 16:53:01 1634

原创 重建二叉树(前提是没有重复元素)

 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:递归 先确定左子树和右子树根节点,再分别根据 左右子树的前序和中序遍历,重建子树 具体实现代码如下。public class Test { ...

2018-07-20 13:18:33 451

原创 合并两个有序的链表

题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路来源于 归并排序 合并两有序的数组:思路是 有两个指针分别指向待合并的链表的头结点,将两个指针数值较小的指针后移,直到有一个为空具体实现代码 /*public class ListNode {    int val;    ListNode next = null;...

2018-07-20 09:12:05 104

原创 java之实现自己的线程池

首先要明白线程池的作用,根本作用是维持一定的线程数去执行任务(也会是run方法) 弄明白这一点我们就可以写一个简易的线程池了 首先定义自己的线程池接口 ;package com.MyThread.Mytest;import java.util.List;public interface MyIThreadPool { //执行任务 在执行任务时请确保任务添加完毕; ...

2018-07-19 20:57:11 3572 2

原创 变态跳台阶

 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路:递归求解 第n中跳法为第一次跳1个台阶加跳n-1个台阶的跳法 ,第一个跳2个台阶加跳n-2个台阶的跳法 ....一直到到第一次跳n-1加跳一个台阶的跳法,再到一次跳n个台阶 故有此算法public class Solution {    public int...

2018-07-18 21:44:58 108

原创 海量积分排名 简化后的具体实现

首先积分值有个最大值,积分由n变化到m 排名变化的只是在积分n到积分m的客户排名会发生变化故此 有如下实现使用RankAndNum来表示处在该积分的排名和数值使用RankAndNums数值来保存所有积分排名(注意:RankAndNums[n]中RankAndNum中的rank和Num则表示积分为n的排名和处在积分为n的用户数量)看下面积分改变时注意自己画图理解,积分由n上升到m时位于n到m...

2018-07-17 22:39:44 569

原创 从零到实现自身AOP框架

在阅读本文前首先请确保会java的动态代理技术springAOP大家都知道使用的动态·代理技术,当然这个技术是根本,其实在Spring在处理AOP的时候还使用了链式处理举个例子 例如一个类 有多个前置增强 (即全都在代理目标类方法前执行)又有多个后置增强(全都在方法目标类的后面执行) 如何确保前置增强执行完后再执行代理目标类方法 最后在执行后置增强呢,答案是使用链式处理,先理解下链式处理 ...

2018-07-17 16:33:28 230

原创 详解RPC实现需要动态代理

RPC通俗的讲就是在本地调用服务器端服务。而实现RPC框架用到的一项重要的技术就是动态代理技术,首先先讲一下为什么使用动态代理(不知道动态代理的 可以自行百度一下动态代理)技术我们知道 在使用动态代理时有一个这样的方法public Object invoke(Object proxy, Method method, Object[] args) 使用在客户端,使用动态代理代理客户端发送请求有两优点...

2018-07-15 21:27:44 2101

原创 最近最久未使用

//添加的数据类型package com.lin;import java.util.Objects;public class LRUData <T> { T val; LRUData next; public LRUData(T t){ this.val =t; } @Override public boolea...

2018-07-15 09:53:11 632

原创 架构探险之自实现轻量级框架笔记

tomcat 会加载类 当类被使用时必定会加载需要 请求到达servlet后 就确定请求应该分发给谁? 为什么需要自己通过类加载器加载类 自己提前加载完,(注意: 一个类文件只会被加载一次 ){通过自定义类加载器 获得 类文件 通过类文件 获取各自类的信息 预先决定哪个控制器处理的哪个方法处理哪种请求 为后续操作提供基础"^((?!\\.jsp).)*$ 所有非jsp结尾 在重新写servlet中...

2018-07-14 20:42:19 191

原创 架构探险之Spring笔记

public interface hello{ void say();}public class HelloImp implements hello{public void say(){.....}public void sayTo(){............}} 直接使用jdk的动态代理,每次调用方法都会 进入 InvocationHandler的 invoke方法,如果在invoke中不做特...

2018-07-14 20:39:52 235

转载 配置文件 property 处理工具 类

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class Props...

2018-07-13 10:35:39 180

原创 架构师之路 操作缓存还是先操作数据库

缓存能够提高读取速度,但操作不好也会带来一些弊端,在业务中使用缓存时操作顺序如何 ,如何确保业务读到正确的数据呢。在这篇文章中主要讲解一下先是操作数据库还是先操作缓存。读不会改变数据,一般都是先读缓存在读数据库对于写请求有两种情况。第一种:先操作缓存,在操作数据库 对于写请求(以数据库操作成功为准 来判断写是否成功),(1) 先操作缓存(delete 或者set),(2)操作数据库,在操作数据库阶...

2018-07-10 10:02:53 439

原创 网络是怎样连接的之深度理解tcp三次握手

tcp三次握手一般而言 其过程如下所示,每一步都有着重要的意义,通过这三步来保证连接的可靠性(1) 首先第一步,客户端套接字委托底层发送消息  将SYN置为1,并进行头部控制信息的交换,当然也会设置设置适当的序号和窗口大小等其他信息(2) 服务端接收到客户端套接字发送来的消息,从等待状态转为正在连接状态,发送tcp响应并将SYN=1和ACK=1(当网络发生错误时 ,网络包会丢失,因此在相互通信时必...

2018-07-09 22:58:43 145

原创 网络怎样连接的之DNS服务器

为了方便域名的管理 有时候并不需要从最上级的根域开始查找,因为 DNS 服务器有一个缓存功能,可以记住之前查询过的域名。如果要查询的域名和相关信息已经在缓存中,那么就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。相比每次都从根域找起来,缓存可以减少查询所需的时间。并且,当要查询的域名不存在时,“不存在”这一响应结果也会被缓存。这样,当下次查询这个不存在的域名时,也可以快速响应。这个缓...

2018-07-09 11:40:08 1094

原创 网络是怎样连接的之探索浏览器内部

首先应该明确浏览器等应用程序并不具备网络控制功能,而是委托操作系统去控制网络。(1) http请求消息的生成:为了和web服务端交互需要生成请求消息发送给web服务器,浏览器通过用户的输入网址(URL)进行解析,生成相应的请求消息。浏览器通过生成的请求消息来告知服务器需要什么数据。URL的写法各有不同,但都有一个特点 即有开头文字如http,ftp,不同的开头文字代表着浏览器应当使用不同的请求方法...

2018-07-08 22:32:06 254

tomcat6.0 可直接运行源码.zip

供大家一起研究tomcat,tomcat内部所需jar包已补齐,为大家 提供可直接运行的tomcat服务器源码,内部直接导入即可使用

2019-12-25

how tomcat works中英文版

how tomcat works中英文版(中文版名为:深度剖析tomcat),附带源码

2018-12-28

手写简易版ORM框架(仿mybatis)

自己手写的一个半自动框架,里面有运行例子,部分代码从mybatis中抽出

2018-08-21

谷歌浏览器插件postman绿色安版

用来模拟http请求写利器 ,供大家取用,下载后直接添加到谷歌的扩展程序即可

2018-07-19

Spring0.9早期框架

Spring0.9版本 是研究Spring框架思路的有力利器 供大家下载研究。但在研究时 需使用jdk1.4版本左右的后期jdk编译会出错

2018-05-04

JDK1.4老版本

jdk1.4老版本 供大家 在研究一些早期java框架源码的时候使用

2018-05-04

空空如也

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

TA关注的人

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