11 2019 档案

摘要:索引(index)是帮助MySQL高效获取数据的数据结构。常见的查询算法:顺序查找、二分查找、二叉树查找、哈希散列、分块查找、B树。 1)哈希算法:就是把任意长度值(key)通过散列算法变成固定长度的key地址,通过这个地址进行访问的数据结构。它通过关键码值映射到表中一个位置来访问记录,以加快查找速 阅读全文
posted @ 2019-11-28 17:29 MrHH 阅读(438) 评论(0) 推荐(0)
摘要:含义: 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 结构: 实现: 1)静态代理模式 1 服务类接口 2 // 创建服务类接口 3 阅读全文
posted @ 2019-11-28 15:15 MrHH 阅读(403) 评论(0) 推荐(0)
摘要:如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器。 异常的分类 Throwable是Java语言中所有错误或异 阅读全文
posted @ 2019-11-27 16:15 MrHH 阅读(475) 评论(0) 推荐(0)
摘要:Java序列化(创建可复用的Java对象) 定义 把Java对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为Java对象的过程称为对象的反序列化。 实现方式 在Java中,只要一个类实现了java.io.Serializable接口,那么它就可以被序列化。即所有实现序列化的类都必须实现S 阅读全文
posted @ 2019-11-26 11:55 MrHH 阅读(392) 评论(0) 推荐(0)
摘要:根据定义的方式不同,内部类分为静态内部类、成员内部类、局部内部类、匿名内部类四种。 1.静态内部类 定义在类内部的静态类,就是静态内部类。 1 public class Out { 2 private static int a; 3 private int b; 4 public static cl 阅读全文
posted @ 2019-11-26 11:17 MrHH 阅读(327) 评论(0) 推荐(0)
摘要:1.定义:单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,一个类只有一个对象实例。 2.结构: 3.实现 1)饿汉模式:不管有没有使用,对象都已经创建了; 1 // 饿汉式单例 2 public class Singleton { 3 / 阅读全文
posted @ 2019-11-25 12:26 MrHH 阅读(378) 评论(0) 推荐(0)
摘要:复制 将一个对象的引用复制给另一个对象,一共有三种方式。第一种方式是直接赋值,第二种方式是浅复制,第三种方式是深复制。 1.直接赋值 在Java中,A a1 = a2,这实际上复制的是引用,也就是说 a1 和 a2指向的是同一个对象。因此,当a1变化时,a2里面的成员变量也会跟着变化。 2.浅复制( 阅读全文
posted @ 2019-11-25 11:49 MrHH 阅读(854) 评论(0) 推荐(0)
摘要:大家在通过本地仓库上传文件到远程仓库时,会报出 error:failed to push some refs to 'git@gitee.com:name/project.git' 的错误。 解决方法如下: git pull --rebase origin 分支名 将远程仓库中的更新合并到本地仓库, 阅读全文
posted @ 2019-11-24 14:52 MrHH 阅读(391) 评论(0) 推荐(0)
摘要:首先就是创建码云(用户名不能是中文),然后新建一个项目(用户名/项目名都不能是中文)。 一、在Windows上安装Git 1.从http://msysgit.github.io下载,然后按默认选项安装即可,安装完成后,在开始菜单里找到“Git”->“Git Bash”; 2.安装完成后,还需要最后一 阅读全文
posted @ 2019-11-24 14:45 MrHH 阅读(237) 评论(0) 推荐(0)
摘要:一、Java线程调度 1.抢占式调度:指的是每条线程执行的时间、线程的切换都由系统控制。系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。 2.协同式调度:指某一线 阅读全文
posted @ 2019-11-23 14:53 MrHH 阅读(4178) 评论(0) 推荐(0)
摘要:一、用于解决多线程安全问题的方式 synchronized:隐式锁 1)同步代码块 2)同步方法 JDK1.5后 3)同步锁 Lock 注意:是一个显式锁,需要通过lock()方法上锁,必须通过unlock()方法进行释放锁。 1 public class TestLock { 2 public s 阅读全文
posted @ 2019-11-23 12:48 MrHH 阅读(266) 评论(0) 推荐(0)
摘要:一、生产者消费者案例 1、使用synchronized关键字实现 1 public class TestProductorAndConsumer { 2 public static void main(String[] args) { 3 Clerk clerk = new Clerk(); 4 P 阅读全文
posted @ 2019-11-23 12:43 MrHH 阅读(347) 评论(0) 推荐(0)
摘要:通过Callable和Future创建线程 i. 创建Callable接口的实现类,并实现call方法,该call方法将作为线程执行体,并且有返回值,可以抛出异常。 ii. 创建Callable实现类的实例,使用FutureTask类包装Callable对象,该FuturedTask对象封装了Cal 阅读全文
posted @ 2019-11-22 12:48 MrHH 阅读(590) 评论(0) 推荐(0)
摘要:为了提高性能,Java提供了读写锁,读写锁分为读锁和写锁。多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥,这是由JVM控制的。如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。 读锁 如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁。 写锁 如果你的代码修改数据, 阅读全文
posted @ 2019-11-22 12:38 MrHH 阅读(800) 评论(0) 推荐(0)
摘要:Java语言提供了一种稍弱的同步机制,即Volatile变量,用来确保变量的更新操作通知到其他线程。volatile变量不会被缓存在寄存器或对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。 Volatile变量具备两种特性: 变量可见性就是保证该变量对所有线程可 阅读全文
posted @ 2019-11-22 12:29 MrHH 阅读(263) 评论(0) 推荐(0)
摘要:一、CAS(无锁的执行者) CAS包含3个参数:内存值 V 旧的预期值 A 新值 B 当且仅当V值等于A值时,将V的值改为B值,如果V值和A值不同,说明已经有其他线程做了更新,则当前线程什么都不做,最后返回当前V的真实值。CAS操作是抱着乐观的态度进行的(乐观锁),它总是认为自己可以成功地完成操作。 阅读全文
posted @ 2019-11-21 13:21 MrHH 阅读(3115) 评论(0) 推荐(1)
摘要:一、CountDowmLatch(闭锁)(倒计数锁存器) 它相当于一个计数器。用一个给定的数值初始化CountDownLatch,之后计数器就从这个值开始倒计数,直到计数值达到零。 CountDownLatch类位于java.util.concurrent包下,在完成某些运算时,只有其他所有线程的运 阅读全文
posted @ 2019-11-21 12:49 MrHH 阅读(1421) 评论(0) 推荐(0)
摘要:一、乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据时都认为别人不会修改,所以不会上锁,但是在更新时会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写操作。 Jav 阅读全文
posted @ 2019-11-20 19:15 MrHH 阅读(544) 评论(0) 推荐(0)
摘要:一、TCP的可靠传输如何保证? 在TCP连接中,数据流必须以正确的顺序传送给对方。TCP的可靠性是通过顺序编号和确认(ACK)实现的。TCP在开始传送一个段时,为准备重传而首先将该段插入到发送队列中,同时启动时钟。然后,如果收到了接收端对该段的ACK信息,就将该段从队列中删去。如果在时钟规定的时间内 阅读全文
posted @ 2019-11-18 14:48 MrHH 阅读(4112) 评论(0) 推荐(0)
摘要:1.数据包说明 1)源端口号(16位):它(连同源主机IP地址)标识源主机的一个应用进程。 2)目标端口号(16位):它(连同源主机IP地址)标识目的主机的一个应用进程。这两个值加上IP报头中的源主机IP地址和目的主机IP地址唯一确定一个TCP连接。 3)顺序号 seq(32位):用来标识从TCP源 阅读全文
posted @ 2019-11-17 19:42 MrHH 阅读(596) 评论(2) 推荐(0)
摘要:一、TCP与UDP TCP(传输控制协议)和UDP(用户数据报协议)是OSI模型中的传输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于广播和细节控制交给应用的通信传输。传输层的功能是使源主机和目标端主机上的实体可以进行会话。 TCP协议是一个面向连接的、可靠的协议。它将一台主机发出的字节流 阅读全文
posted @ 2019-11-17 18:49 MrHH 阅读(668) 评论(0) 推荐(0)
摘要:概念:泛型,即“参数化类型”。就是将原来具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。 本质:为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中 阅读全文
posted @ 2019-11-17 16:35 MrHH 阅读(296) 评论(0) 推荐(0)
摘要:一、反射 动态语言:是指程序在运行是可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化。比如常见的JavaScript就是动态语言,除此以外Python等也属于动态语言,而C、C++则不属于动态语言。从反射角度说Java属于半动态语言。 反射机制:指在运行状态中,对于任意一个类都能 阅读全文
posted @ 2019-11-16 17:58 MrHH 阅读(1089) 评论(0) 推荐(0)
摘要:一、线程与进程 线程:一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别形式,但多线程使用了更小的资源开销。 进程:一个进程包括有操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在。它必须是进程的一部分。一个进程 阅读全文
posted @ 2019-11-13 18:54 MrHH 阅读(990) 评论(0) 推荐(0)
摘要:一、线程池的工作原理 线程池的作用是有效的降低频繁创建销毁线程所带来的额外开销。线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务。如果线程数量超过了线程池最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。 它的主要特点为: 阅读全文
posted @ 2019-11-12 15:16 MrHH 阅读(297) 评论(0) 推荐(0)
摘要:一、HashMap分析 在JDK1.8之前,hashMap由数组+链表组成,1.8之后,对hashMap进行了一些修改,最大的不同就是利用了红黑树,所以其由数组+链表+红黑树组成。查找时,根据hash值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间 阅读全文
posted @ 2019-11-09 18:50 MrHH 阅读(477) 评论(0) 推荐(0)
摘要:一、Collection、Collections的区别? 1. java.util.Collection是一个集合的顶级接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现,其直接继承接口有List与Set。 2. Collections是集合 阅读全文
posted @ 2019-11-09 12:34 MrHH 阅读(1179) 评论(0) 推荐(0)
摘要:一、阻塞队列(BlockingQueue):用于保存等待执行的任务。在阻塞队列中,线程阻塞的两种情况: 1、当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列。 2、当队列中填满数据的情况下, 生产者端的所有线程都会被自动阻塞,直到队列中有空位置,线程被自动唤醒。 阅读全文
posted @ 2019-11-08 20:54 MrHH 阅读(919) 评论(0) 推荐(0)
摘要:首先来总结一下,ArrayList的一些特点: 1.arraylist本质上就是一个elementData数组,它允许对元素进行快速随机访问,可以存放null值; 2.arraylist区别于数组的地方在于能够自动扩展大小,其中关键就是grow() 方法,每次扩充后数组为原来数组的1.5倍; 3.a 阅读全文
posted @ 2019-11-08 19:48 MrHH 阅读(364) 评论(0) 推荐(0)
摘要:一、Netty原理 Netty是一个高性能、异步事件驱动的NIO框架,基于Java NIO提供的API实现。它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或通过通知机制获得IO 阅读全文
posted @ 2019-11-07 17:27 MrHH 阅读(2824) 评论(0) 推荐(0)
摘要:一、AIO(Asynchronous IO) AIO是一种异步非阻塞的IO模型,异步IO是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会产生阻塞,当后台处理完成,操作系统会通知相应的线程进行后续的操作。 服务器实现模式为一个有效请求一个线程,客户端的IO请求都是由OS先完成了再通知服务 阅读全文
posted @ 2019-11-04 15:32 MrHH 阅读(639) 评论(0) 推荐(0)
摘要:归并排序是一个典型的基于分治的递归算法。它不断地将原数组分成大小相等的两个子数组(可能相差1),最终当划分的子数组大小为1时,将划分的有序子数组组合并成一个更大的有序数组。 算法分析: 分,也就是把原数组划分成两个子数组的过程。 治,它将两个有序数组合并成一个更大的有序数组。 它将数组平均分成两部分 阅读全文
posted @ 2019-11-04 14:39 MrHH 阅读(338) 评论(0) 推荐(0)
摘要:一、四层负载均衡和七层负载均衡 1.四层负载均衡(目标地址和端口交换) 主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。 以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN请求时,即通过上述方式选择一个最佳的服务器,并对报文中的目标IP 阅读全文
posted @ 2019-11-03 16:48 MrHH 阅读(1141) 评论(1) 推荐(0)
摘要:一、什么是XSS?怎么发生的? XSS(Cross site scripting)全称为跨站脚本攻击,是web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如Javascript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。比如获取用户的cookie,导航到恶意 阅读全文
posted @ 2019-11-02 18:51 MrHH 阅读(2129) 评论(0) 推荐(0)
摘要:算法步骤: 1.在待排序的元素任取一个元素作为基准(通常选第一个元素,但最佳的选择方法是在待排序数组中随机选取一个作为基准),成为基准元素。 2.将待排序的元素进行分区,比基准元素大的元素放在它的右边,比其小的放在它的左边。 3.对左右两个分区重复以上步骤直到所有元素都是有序的。 时间复杂度:快速排 阅读全文
posted @ 2019-11-02 17:49 MrHH 阅读(625) 评论(0) 推荐(0)