windows环境的rabbitmq安装与启动 下载资源:RabbitMQ,下载地址http://www.rabbitmq.com/install-windows.html对应版本(必须是与mq版本适应)的erlang,下载地址http://www.erlang.org/downloads/20.2首先安装erlang,然后安装rabbitmq。安装完Rabbit MQ以后,服务会自动运行,这时环境变量里的ERLANG_HOME...
链表的底层实现方式 链表在我们日常的开发过程中应该说是非常常见,做移动开发的更可以说是每天都在接触。比如MessageQueue,底层就是单链链表,各种网络框架用到的队列,底层用到的都是链表。而说到链表,就不得不提到另外一种数据结——集合。相信有一句话大家都听书过:集合更适合查询操作,链表更适合频繁的插入,删除操作。这究竟是为什么呢?今天我就从理论和代码的角度分析一下其中的原因。首先,集合的底层是数组,数组会为每...
ArrayList底层原理以及使用技巧 ArrayList简介ArrayList是我们在开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据。ArrayList又是线程不安全的,这在接下来代码分析的过程中会有体现。ArrayList非常适合对元素进行查找,效率非常高。源码分析既然是分析源码,那我们先从构造函数开始。我们常用的构造函数有两个,分别是有参和无参的,如下图无参的构造函...
常用的HTTP请求头与响应头 常用的HTTP请求头与响应头HTTP消息头是指,在超文本传输协议( Hypertext Transfer Protocol ,HTTP)的请求和响应消息中,协议头部分的那些组件。HTTP消息头用来准确描述正在获取的资源、服务器或者客户端的行为,定义了HTTP事务中的具体操作参数。关于HTTP消息头常用的HTTP请求头常用的HTTP响应头 1. 关于HTTP消息头HTTP消息头是在,客户端请求(Re...
java静态代理和动态代理的区别 本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢?原因:1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者的区别是什么呢?2,通过学习动态代理了解到动态代理是一种符合AOP设计思想的技术,那么什么又是AOP?下面是我对它们的理解! 代理Proxy: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在...
对Java内存的理解 理解了内存,就理解了一切! 这是我之前看到一个视频里面老师经常说的一句话,在当初听到这句话还没有什么感悟,只是当做一句很普通的感悟而已。一年多过去了,也算写了一些代码,再回过头来看JavaSE部分的知识时,才发现这句话的重要性。这简直就是对javase最直白简洁又富有深意的总结。 在理解内存之前我们需要知道的预备知识既基本数据类型和引用数据类型,java程序在内存中的运行...
数据库设计(一对一、一对多、多对多) 关联映射:一对多/多对一存在最普遍的映射关系,简单来讲就如球员与球队的关系;一对多:从球队角度来说一个球队拥有多个球员 即为一对多多对一:从球员角度来说多个球员属于一个球队 即为多对一数据表间一对多关系如下图: 关联映射:一对一一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队。数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联。一对一外键关联...
线程的等待唤醒机制 ( 1 )等待唤醒机制就是用于解决线程间通信的问题的,使用到的3个方法的含义如下:wait:告诉当前线程放弃执行权,并放弃监视器(锁)并进入阻塞状态,直到其他线程持有获得执行权,并持有了相同的监视器(锁)并调用notify为止。notify:唤醒持有同一个监视器(锁)中调用wait的第一个线程,例如,餐馆有空位置后,等候就餐最久的顾客最先入座。注意:被唤醒的线程是进入了可运行状态。等待cpu执行权...
数据结构之单链表的插入与删除操作 1、图示(截图来自网易云课堂鱼C工作室《数据结构和算法》课程视频) 2、 要想将结点s插入到ai与ai+1之间,不需要移动数据元素,只需要在ai与ai+1之间插入一个新的结点,也就是我们要插入的结点s。关键就是要修改结点p的指针域,使得结点s称为其后继。修改指针的链接的主要操作语句是:s->next=p->next; //把结点p的后继作为结点s的后继;p->...
数据结构单链表的查找 1.单链表的查找运算 (1)按序号查找① 链表不是随机存取结构 在链表中,即使知道被访问结点的序号i,也不能像顺序表中那样直接按序号i访问结点,而只能从链表的头指针出发,顺链域next逐个结点往下搜索,直至搜索到第i个结点为止。因此,链表不是随机存取结构。② 查找的思想方法 计数器j置为0后,扫描指针p指针从链表的头结点开始顺着链扫描。当p扫描下一个结点时,计数器j相应地加1。当j...
使用System.arraycopy()实现数组之间的复制 System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。其函数原型是:public static void (Object src, int srcPos, Object dest, int ...
java封装详解 1.封装的定义 隐藏对象内部的复杂性,只对外提供简单的接口。便于外界的调用,从而提高系统的可扩展性,可维护性。public class Employee { private String name; private String id; private String gender; // 提供公有的get set方法 ...
java内部类 1.内部类的定义 一个类的内部再创建一个类,叫内部类。2.内部类的分类 2.1 成员内部类:与成员方法,成员变量类似,直接定义在类的内部即可。public class Outer { //属性 private String name; private int age; //成员内部类 class Inner{ private double score;...
java异常的处理 1.异常的定义 就是在程序运行过程中所发生的不正常时间,它会中断正在运行的程序。2.格式 try{ 把可能出现异常的代码放入次代码块中 }catch(异常类型 对象名){ 处理异常 }finally{ 不管try或catch是否允许,此代码块都必须要执...
java接口(interface)详解 1.接口的定义 接口就是规范,定义的是一组规则;是比"抽象类"还"抽象"的"抽象类",可以更加规范的对子类进行约束,全面专业的实现了:规范与接口的分离。2.接口的格式 权限修饰符 interface 接口名{ 常量定义 //总是public static final 方法定义 //总是p...
abstract应用及抽象类 1.抽象类的定义 1.1 抽象类是一种模板模式。子类可以继承这个模板进行扩展。 1.2 通过抽象类,避免了子类设计的随意性。抽象类可以定义抽象方法,子类继承抽象类就必须实现这些抽象方法才能进行实例化。2.格式 abstract class 类名称{ 属性; 方法; ...
对final关键字的理解 final关键字--最后的,最终的 1.final属于修饰符的一种 2.修饰的范围 2.1. 如果修饰的是类,那么这个类不能不继承; 如:public final class Person{} 2.2. 如果修饰的是对象,那么这个对象的引用的地址值不能被改变,但是可...
java多态性的理解 1.什么是多态? 在面向对象语言中,父类/接口的多种不同实现方式即为多态。2.多态的核心 程序定义的引用变量具体指向的是哪个对象,具体调用的是哪个对象的方法,不是编译期间决定的,而是由运行期间决定的。因为在运行阶段才确定具体的类,这样就可以不用修改代码,就可以把引用变量绑定到具体的类的实现,该引用指向的对象的方法也随之改变,既不通过修改代码就可以实现动态的绑定具体的代...
==和equals的区别 ==和equals的区别 相同点:1.都可以进行比较; 2.得到的结果都是boolean值。 不同点:1.==属于关系运算符,equals是方法; 2.==既可以比较基本数据类型,又可以比较引用数据类型;equals只能比较引用数据类型; 3.如...
方法重写(override)和方法重载(overload)的区别 1.什么是方法的重载? 重载的存在是为了解决调用方法时,出现方法名不同,但参数列表不同的情况,比如类的构造方法就常用到方法的重载,调用构造方法创建对象时,传入不同的参数就可以方便的对属性赋值或者不赋值。2.什么是方法的重写? 重写的存在是为了解决子类调用父类的方法时,对父类的方法的得到的结果不满意,想拥有自己想要的结果,就对父类的方法进行了重写。3.方法的重载和方法的重...