04 2020 档案

摘要:什么是Spring框架: Spring是一种轻量级开源开发框架,是一个用来约束和提供支持的半成品应用。 Spring中重要的模块: Spring Core:Spring的基础,可以说Spring其他所有的功能都需要依赖于该类库,主要提供IOC依赖注入功能 Spring Aspect:该模块为Aspe 阅读全文
posted @ 2020-04-24 18:10 Coding-Liu 阅读(730) 评论(0) 推荐(0)
摘要:将一个对象的引用复制给另一个对象,一共有三种方式: 直接赋值 浅拷贝 深拷贝 直接赋值:直接赋值,A a1 = a2,实际上是是引用,也就是说a1 和 a2 指向同一个对象,因此a1发生变化时,a2也会发生变化。 浅拷贝:对基本数据类型进行值传递,对引用类型进行引用传递般的拷贝 深拷贝:对基本数据类 阅读全文
posted @ 2020-04-22 17:28 Coding-Liu 阅读(167) 评论(0) 推荐(0)
摘要:序列化:讲对象写入到IO流 反序列化:从IO流中恢复对象 意义:序列化机制允许将实现序列化的Java对象转换为字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,已达到恢复成原来的对象。序列化机制使得对象可以脱离程序运行而独立存在。 使用场景:所有网络上的传输的对象都必须是可序列化的,比如RMI 阅读全文
posted @ 2020-04-22 17:13 Coding-Liu 阅读(233) 评论(0) 推荐(0)
摘要:使用泛型的优缺点: 优点:避免了类型转换的的麻烦,存储什么类型,取出什么类型;把运行异常,提升到了编译期 缺点:只能存储单一类型 泛型就是编写模板代码来适应任意类型 不必对类型进行强制转换 编译器将对类型进行检查 注意泛型的继承关系: 可以把ArrayList<Integer>向上转型为List<I 阅读全文
posted @ 2020-04-22 15:41 Coding-Liu 阅读(188) 评论(0) 推荐(0)
摘要:Java类中不仅可以定义方法,还可以定义类,这样定义类在类内部的类就被成为内部类,根据定义方式不同,内部类可分为四种: 成员内部类 局部内部类 静态内部类 匿名内部类 静态内部类: 静态内部类可以访问外部所有的静态变量和方法,即使是private的也一样 静态内部类和一般类一致,可以定义静态变量、方 阅读全文
posted @ 2020-04-22 13:25 Coding-Liu 阅读(234) 评论(0) 推荐(0)
摘要:概念: JDK1.5之后的特性 说明程序的 使用注解:@注解名称 作用分类: 编写文档:通过代码里标识的注解生成的文档,生成文档doc 代码分析:通过代码里标识的注解对代码进行分析,使用反射 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查,Override 值得注意的是,注解不是代码本 阅读全文
posted @ 2020-04-22 12:31 Coding-Liu 阅读(187) 评论(0) 推荐(0)
摘要:在Java中反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法。这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。 静态编译和动态编译: 静态编译:在编译时确定类型,绑定对象 动态编译:在运行时确定类型,绑定 阅读全文
posted @ 2020-04-21 23:19 Coding-Liu 阅读(147) 评论(0) 推荐(0)
摘要:异常类架构图 Throwable 是Java语言中所有错误或异常的超类。下一层为Error和Exception 错误Error Error类是指Java运行时系统的内部错误和资源耗尽错误,程序不会跑出该类的对象,如果从出现了这样的错误,会告知用户,然后终止运行。 异常Exception Except 阅读全文
posted @ 2020-04-21 22:04 Coding-Liu 阅读(240) 评论(0) 推荐(0)
摘要:最近做项目遇到了与缓存有关的问题,缓存的更新是一个值得深入研究的操作。 看了网上好多的思路,往往都是先删除缓存,再去从数据库读取,这样的结果很有可能会导致数据不一致,查了一些资料,找到了“耗子叔”的文章,阐述了缓存更新的几种方法 Cache Aside 失效:应用程序先从cache中取数据,没取到就 阅读全文
posted @ 2020-04-21 17:35 Coding-Liu 阅读(3136) 评论(0) 推荐(0)
摘要:1,同步扣库存 在订单生成的时候就扣去库存,存在一些问题: 会造成订单被取消,实际库存扣了,但是没有支付,也就造成了少买的情况 即时扣库存,并发性太差 2,异步扣库存 对于电商网站,比如某东,会在订单支付成功后,有一个出库的过程,有可能出库成功,也有可能出库失败。 库存有两部分:一个缓存Redis层 阅读全文
posted @ 2020-04-21 17:22 Coding-Liu 阅读(1771) 评论(0) 推荐(0)
摘要:一,常见的下单途径 Web网站下单 手机Wap下单 打电话到呼叫中心下单(少见) 如果采用常见的单数据库来存储的话,随着订单量的增加,单库的写压力增大,造成数据库服务器性能降低,一般会采用分库来缓解数据库服务器的压力,分库就分成不同的几个订单数据库,Web来源订单,存入Web订单库;手机Wap来源, 阅读全文
posted @ 2020-04-21 13:29 Coding-Liu 阅读(1492) 评论(0) 推荐(0)
摘要:Redis线程模型 Redis内部使用文件事件处理器file event handler,这个文件事件处理器是单线程的,所以Redis才被叫做单线程模型。它采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器进行处理。 文件事件处理器的结构包含4各部分: 多个 阅读全文
posted @ 2020-04-20 16:59 Coding-Liu 阅读(186) 评论(0) 推荐(0)
摘要:相信研究过爬虫的应该对布隆过滤器都有所了解,在URL去重,文章去重等方面,布隆过滤器的用处很大。 布隆过滤器是一个很长的二进制向量和一系列的映射hash函数。 布隆过滤器不能准确地判断一个值真正的存在,但是可以判断一个值一定不存在,就好比两个值A、B,当使用布隆过滤器,判断A存在时,其实A不一定存在 阅读全文
posted @ 2020-04-20 13:46 Coding-Liu 阅读(166) 评论(0) 推荐(0)
摘要:简单来说, Redis就是一个数据库, 只不过是非关系型数据库, 而且数据是存储在内存中的.因此Redis的速度也很快, 被广泛用于缓存方面. 同时也常被用来做分布式锁. Redis支持多种数据类型, 可以支持不同的场景应用. 为什么用Redis/为什么用缓存? 主要从高并发和高性能两点来看 高性能 阅读全文
posted @ 2020-04-20 13:04 Coding-Liu 阅读(184) 评论(0) 推荐(0)
摘要:最近一段时间学了RabbitMQ, 消息队列, 查找了一些资料, 对两个比较常用的消息队列做一个很简单的对比, 如有不对欢迎指正 吞吐量: RabbitMQ一般是十万, 百万级的, Kafka要比RabbitMQ高一个数量级 可用性: 都可以实现高可用, RabbitMQ是基于主从架构实现的, Ka 阅读全文
posted @ 2020-04-19 21:24 Coding-Liu 阅读(1717) 评论(0) 推荐(0)
摘要:消息队列好比一个存放消息的容器, 当我们使用时可以取出供自己使用. 消息队列是分布式系统中重要组件. 主要是通过异步处理提高系统性能和削峰, 降低系统耦合性. 队列Queue是一种先进先出的数据结构, 所以消息消费时是按顺序消费的, 但是偶尔也会顺序出错, 以及消息重复消费, 这是我们需要考虑的问题 阅读全文
posted @ 2020-04-19 21:08 Coding-Liu 阅读(324) 评论(0) 推荐(0)
摘要:RabbitMQ是基于AMQP(Advanced Message Queuing Protocol, 高级消息队列协议, 一种二进制协议) 的消息中间件, 用于分布式系统中存储转发消息. 特点: 可靠性: RabbitMQ使用一些机制来保证消息的可靠性, 如持久化, 传输确认以及发布确认等. 灵活的 阅读全文
posted @ 2020-04-19 20:04 Coding-Liu 阅读(291) 评论(0) 推荐(0)
摘要:Dubbo是一款高性能、轻量级的Java RPC框架,提供三大核心功能:面向接口的远程方法调用、智能容错和负载均衡、以及服务自动注册和发现。简单来说,Dubbo是一个分布式服务框架,致力于提高性能和透明化的PRC远程服务调用方案,以及SOA服务治理方案。 Dubbo实际上是RPC框架,那么什么是RP 阅读全文
posted @ 2020-04-19 14:05 Coding-Liu 阅读(211) 评论(0) 推荐(0)
摘要:思路分析: 归并排序是建立在归并操作的基础上,同样也是利用了分治法来进行解答. 作为一种典型的分而治之思想的算法应用, 归并排序实现两种方法: 自上而下的递归 自下而上的迭代(所有递归都可以使用迭代重写) 首先申请空间, 设定两个指针,位于两个排序好的序列的初始位置, 比较两个序列的值然后放入最终序 阅读全文
posted @ 2020-04-18 23:43 Coding-Liu 阅读(168) 评论(0) 推荐(0)
摘要:思路分析: 快速排序是实现应用中非常常用的一种算法, 时间复杂度为O(nlongn). 快速排序利用分治法, 随机选取一个point值, 然后把小于point的放在左边, 把大于point的放在右边, 经过这样一次操作, 左边都小于point, 右边都大于point. 然后分别对point左边和右边 阅读全文
posted @ 2020-04-18 23:17 Coding-Liu 阅读(95) 评论(0) 推荐(0)
摘要:思路分析: 插入排序是默认第一个元素为最小值(或最大值), 然后将后面的数依次与前面进行比较, 如果小于就交换位置 代码: public class Insert { public void Sort(int[] arrays){ for(int i = 1; i < arrays.length; 阅读全文
posted @ 2020-04-18 22:48 Coding-Liu 阅读(111) 评论(0) 推荐(0)
摘要:节点类型与Watcher是重点, 很多的应用场景都可以从这些特性发出考虑: 临时节点 持久节点 顺序节点 当需要设计一个系统, 需要考虑上面的两点以及每个节点可以存储少量的数据 统一命名服务: 在zookeeper中, 每一个数据节点都能够维护一份子节点的顺序序列, 当客户端对其创建一个顺序子节点的 阅读全文
posted @ 2020-04-18 21:46 Coding-Liu 阅读(99) 评论(0) 推荐(0)
摘要:成员: leader(接受所有的事务请求) follower(历史事务集合) observer(不参与过半选举,提高读性能) ZAB协议: 在ZAB协议中,每个事务都有一个编号ZXID(一个64位的数字),ZXID由两部分组成,高32位是epoch,低32位是递增计数器 epoch: 选举周期 计数 阅读全文
posted @ 2020-04-18 20:57 Coding-Liu 阅读(190) 评论(0) 推荐(0)
摘要:Paxos有三个成员: Proposer:提案的提出者 Acceptor:提案的接受者,批准是否同意 Learner:Accepter告诉Learner哪个提案被选定,那么Learner就学习这个提案的value 生成提案: 1,proposer生成一个提案Mn,然后向某个Accepter集合成员发 阅读全文
posted @ 2020-04-18 15:39 Coding-Liu 阅读(199) 评论(0) 推荐(0)
摘要:介绍MySQL两阶段提交之前,先介绍一下Redo Log 和 Binlog redo log: 在MySQL中如果每次更新都需要写进磁盘,然后磁盘也要找到那条记录,然后在更新,整个过程IO成本、查找成本都很高,因此引入了redo log。这里用到了MySQL中的WAL技术,Write-Ahead L 阅读全文
posted @ 2020-04-18 14:27 Coding-Liu 阅读(3677) 评论(0) 推荐(0)
摘要:zookeeper特性: 顺序一致性,客户端发起的事务请求会严格按照其发起顺序被应用到zookeeper中,用队列维护 原子性,事务请求的应用情况在集群中所有机器上是一致的,要么全部成功,要么全部不成功 单一视图,client无论连接到哪个server,数据视图都是一致的 实时性,在一定时间范围内, 阅读全文
posted @ 2020-04-18 12:41 Coding-Liu 阅读(161) 评论(0) 推荐(0)
摘要:概念: 当一个事务需要跨越多个分布式节点的时候,需要保持事务处理的ACID,引入“协调者”的组件统一调度所有分布式节点的执行逻辑,被调度的节点称为“参与者”。协调者负责调度参与者的行为,并最终决定这些参与者是否要把事务真的提交。因此引入2PC和3PC。 2PC: 二阶段提交,为了使基于分布式系统架构 阅读全文
posted @ 2020-04-17 19:47 Coding-Liu 阅读(226) 评论(0) 推荐(0)
摘要:思路分析: 每次从数组中选出最大或最小的的,放在首位或末尾,使用下标pos进行记录,循环结束得到最终的pos,那么在进行交换 注意pos的设置和参数条件的设置 代码: public class Selection { public static void main(String[] args) { 阅读全文
posted @ 2020-04-15 18:29 Coding-Liu 阅读(112) 评论(0) 推荐(0)
摘要:思路分析: 两两交换,把最大的值依次放在最后,实现排序,使用两层循环 易错点是两层的循环的条件错误,第一层循环是需要循环的次数,比如长度为5,那么需要4次循环,第二层是需要交换的次数 代码: public class Bubble { public void Sort(int[] arrays){ 阅读全文
posted @ 2020-04-15 18:03 Coding-Liu 阅读(118) 评论(0) 推荐(0)
摘要:题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 保证base和exponent不同时为0 思路分析: key1: 可以使用暴力法直接循环求得base的exponent次方 key2: 使用递归的快速幂运算,比如求base的32 阅读全文
posted @ 2020-04-14 10:57 Coding-Liu 阅读(122) 评论(0) 推荐(0)
摘要:Map: Map的底层实现是散列表,不在意元素的顺序,能快速的查找元素的数据,散列表是用数组链表实现的,每个列表称之为桶 散列表为每个对象计算出一个散列码,通过hashCode函数,当数据量比较大的时候会出现散列码相同的情况,称之为散列冲突,因此在数组后引用了链表 在Java1.8中,如果桶满了就会 阅读全文
posted @ 2020-04-13 21:25 Coding-Liu 阅读(249) 评论(0) 推荐(0)
摘要:collection大致结构体系 先来介绍一下collection的功能: Collection的功能: 1,添加功能: boolean add(Object obj):添加一个元素 boolean addAll(Collection c):添加一个元素的集合 2,删除功能: void cler() 阅读全文
posted @ 2020-04-13 14:27 Coding-Liu 阅读(194) 评论(0) 推荐(0)
摘要:题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路分析 如果一个整数不为0,那么这个整数至少有一位是1,如果把这个整数减1,那么就会把最右边的1变为0,1后的所有位取反。 加入一个数1100,减一后是1011,那么1100&1011=1000,也就是说一个整数&(整数- 阅读全文
posted @ 2020-04-13 13:15 Coding-Liu 阅读(139) 评论(0) 推荐(0)
摘要:题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 思路分析 同样类似斐波那契数列,这些问题我们可以利用数学归纳法来找到其中的规律,,比如2x8覆盖记为F(8),当用 阅读全文
posted @ 2020-04-13 10:53 Coding-Liu 阅读(258) 评论(0) 推荐(0)
摘要:题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 分析思路 同样利用从小着手的思路,分析后就可以知道这是在求2n-1 public class Solution { public int JumpFloorII(int targ 阅读全文
posted @ 2020-04-13 10:40 Coding-Liu 阅读(113) 评论(0) 推荐(0)
摘要:题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 思路分析 问题很大,要从小范围一点点去发现规律,简单计算前3个台阶就可发现,这题就是斐波那契数列的变形 使用循环或递归(递归时间复杂度太高) 代码 public clas 阅读全文
posted @ 2020-04-13 10:27 Coding-Liu 阅读(155) 评论(0) 推荐(0)
摘要:题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 思路分析 调用递归,但是时间复杂度和性能十分的低 把递归用循环表示,即可提高时间效率 代码 public class Solution{ public static void 阅读全文
posted @ 2020-04-13 10:20 Coding-Liu 阅读(123) 评论(0) 推荐(0)
摘要:通过Scanner Scanner input = new Scanner(System.in); String s = input.nextLine();input.close(); 通过BufferedReader BufferedReader input = new BufferedReade 阅读全文
posted @ 2020-04-12 17:19 Coding-Liu 阅读(257) 评论(0) 推荐(0)
摘要:抽象类 抽象类和抽象方法用abstract修饰,含有抽象方法的类是抽象类,抽象类不一定含有抽象方法 抽象方法必须为public或protected,如果是private将不能被继承 抽象类不能用来创建对象 如果一个类继承抽象类,则子类必须实现父类的抽象方法,如果没有实现,则必须将子类也定义为抽象类 阅读全文
posted @ 2020-04-12 17:13 Coding-Liu 阅读(175) 评论(0) 推荐(0)
摘要:在Java中,所有异常都来自一个祖先Java.lang包中的Throwable类。 Throwable有两个重要子类:Error(错误)、Exception(异常) Error:表示程序中比较严重的问题,大多数与代码的编写者执行的操作无关,而表示虚拟机有问题,比如Virtual MachineErr 阅读全文
posted @ 2020-04-12 16:43 Coding-Liu 阅读(169) 评论(0) 推荐(0)
摘要:Object类是一个特殊的类,是所有类的父类。它主要提供一下11个方法: 1 public final native Class<?> getClass() //natice方法,用于返回当前运行时对象的class对象,使用了final关键字修饰,不允许子类重写 2 3 public native 阅读全文
posted @ 2020-04-12 15:17 Coding-Liu 阅读(321) 评论(0) 推荐(0)
摘要:final关键字主要用在三个地方:类,方法,变量 类:final修饰类时,类不可被继承,类中的所有方法都将隐式的指向final 方法:final修饰方法时,一是为了把方法锁定,不让任何类继承;二是为了提高效率;在早期的Java的版本中,会将final修饰的方法转为内嵌调用,但当方法过于庞大时,可能就 阅读全文
posted @ 2020-04-12 14:23 Coding-Liu 阅读(154) 评论(0) 推荐(0)
摘要:题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路分析 数组是 阅读全文
posted @ 2020-04-12 13:18 Coding-Liu 阅读(246) 评论(0) 推荐(0)
摘要:题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路分析 栈的特性是后进先出,与队列恰恰相反,队列是先进先出 假设两个栈分别为stack1,stack2,stack1用来push,stack2用来pop 当有新的元素进入stack1后,stack1把元 阅读全文
posted @ 2020-04-12 10:49 Coding-Liu 阅读(130) 评论(0) 推荐(0)
摘要:题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路分析 给的时前序遍历和中序遍历,我们知道前序遍历 阅读全文
posted @ 2020-04-12 10:25 Coding-Liu 阅读(67) 评论(0) 推荐(0)
摘要:==: 比较两个对象的地址是否相等,即判断两个对象是否是同一个对象,引用类型比较的是地址,基本类型比较的值 equals: equals源码实质上 ==,只不过有些类覆盖equals,所以有两种情况“ 1,未覆盖,equals的比较等价与"==" 2,覆盖(String、Integer等),一般覆盖 阅读全文
posted @ 2020-04-11 22:40 Coding-Liu 阅读(132) 评论(0) 推荐(0)
摘要:拆箱: 将包类型转换为基本类型 装箱: 将基本类型用他们对应的引用类型包装起来,便于使用一些方法 阅读全文
posted @ 2020-04-11 22:13 Coding-Liu 阅读(117) 评论(0) 推荐(0)
摘要:String、StringBuffer、StringBuilder的区别是什么 String:不可变 StringBuffer:可变的,线程安全 StringBuilder:可变的,线程不安全 可变性: 简单而言,String类使用Final关键字字符数组保存字符串,private final ch 阅读全文
posted @ 2020-04-11 22:07 Coding-Liu 阅读(441) 评论(0) 推荐(0)
摘要:重载和重写的区别: 重载: 在同一个类中,是类中一种多态的表现 方法名必须相同,参数、参数个数、参数顺序、返回值类型和访问修饰符可以不同,发生在编译时 重写: 存在与父子类中 方法名、参数列表相同,异常抛出范围小于等于父类(只能抛出比父类更少的异常,或者抛出父类异常的子异常),访问修饰符范围大于等于 阅读全文
posted @ 2020-04-11 21:19 Coding-Liu 阅读(118) 评论(0) 推荐(0)
摘要:题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 思路分析 两种思路: 1,递归 ,时间复杂度O(n), 空间复杂度O(n) 2,使用栈(后进先出), 时间复杂度O(n), 空间复杂度O(n) 代码 //使用栈import java.util.ArrayList; publi 阅读全文
posted @ 2020-04-11 13:20 Coding-Liu 阅读(200) 评论(0) 推荐(0)
摘要:题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路 数组从左至右、从上至下都是递增,找到数组中特殊的点即可很方便 处理,即左下角、右上角 阅读全文
posted @ 2020-04-11 13:01 Coding-Liu 阅读(134) 评论(0) 推荐(0)
摘要:题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。 思路分析 本题是考察对字符串的理解和应用,不建议直接调用相关的方法直接实现 暴力法直接遍历查找,后移替换,但是复杂度O(n2)。 复杂度为O(n)的方法:先遍历字符串,统计空格的个数,那么新的字符串长度为(空格 * 2 + 原长度 阅读全文
posted @ 2020-04-11 12:59 Coding-Liu 阅读(158) 评论(0) 推荐(0)