- 博客(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
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人