自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 面试题:大(小)顶堆

堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。  堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的...

2019-01-31 16:13:14

阅读数 286

评论数 0

原创 面试题:反转队列前K个元素

1、直接把前k个元素压栈,放入新队列中,追加剩余的队列元素 public static void reverseKQueue(Queue queue,int k){ Stack stack=new Stack(); Queue newQueue=new ...

2019-01-30 17:20:06

阅读数 864

评论数 0

原创 面试题:使用两个栈进行排序

解题思路: 循环遍历要排序要排序的栈,第一次遍历时直接把数据放入栈2中,在下次遍历时,比较栈1出栈的数据与栈2数据的大小,如果栈2数据大于要压入的数时,进行出栈压入栈1中,直到数据比要压入数小,同时记录栈2出栈次数j,然后压入数据,再把压入栈1的数据重新压回到栈2中。 public s...

2019-01-30 16:32:33

阅读数 663

评论数 0

原创 面试题:队列和栈相互转化

1、两个队列实现一个栈  解题思路:根据栈的先入后出和队列的先入先出的特点 1.在push的时候,把元素向队列1内添加 2.在pop的时候,把不为空的队列中的size()-1份元素poll出来,添加到另为一个队列中,再把队列中最后的元素poll出来 两个队列在栈不为空的情况下始终是有一个为空,另...

2019-01-30 15:10:12

阅读数 75

评论数 0

原创 面试题:'(' 与 ')'匹配问题

'(' 与 ')'匹配问题 可以使用栈的方式进行匹配,如果栈顶为'(',此时传进来的')',则匹配'('出栈,否则不匹配进行压栈 public static void match(St...

2019-01-30 11:04:29

阅读数 58

评论数 0

原创 面试题:数组重排序(相对位置不变)

给定含有n个元素的整型数组a,其中包括0元素和非0元素,对数组进行排序,要求: 1. 排序后所有0元素在前,所有非零元素在后,且非零元素排序前后相对位置不变 2. 不能使用额外存储空间 例子如下 输入 0, 3, 0, 2, 1, 0, 0 输出 0, 0, 0, 0, 3, 2, 1 ...

2019-01-29 18:19:35

阅读数 526

评论数 0

原创 面试题:找出数组中唯一一个未重复的数

1、找出数组中唯一一个未重复的数 异或:一个数异或它本身等于0 public static int NumberOf1(int[] arr) { int len = arr.length; int res = -1; if(len &am...

2019-01-29 17:33:36

阅读数 915

评论数 0

原创 面试题:找出数组中第一个未重复的数

方法一:使用LinkedHashMap存储数据 public static void findFirstNotRepeat(char[] array) { Map<Object, Integer> map = new LinkedHashM...

2019-01-29 16:22:15

阅读数 456

评论数 0

原创 面试题:找出数组中第一个重复的数

方法一:使用HashMap存储数据,找到数据直接结束循环 public static void findFirstRepeat(char[] array) { Map<Object, Object> map = new HashMap&am...

2019-01-29 16:07:47

阅读数 627

评论数 0

原创 面试题:找到数组中第二大(小)的元素

方法一:直接排序(冒泡n^2、快排nlgn)根据索引找到对应值 方法二:遍历一次,定义两个变量:一个变量用来存储数组的最大数,初始值为数组首元素,另一个变量用来存储第二大的数。  编码: public static void findSecond(int a[]){ if(...

2019-01-29 11:43:18

阅读数 1699

评论数 6

原创 面试题:删去k个数字后的最小值(最大值)

题目:   我们来举一个栗子: 给定整数 541270936,要求删去一个数,让剩下的整数尽可能小。 此时,无论删除哪一个数字,最后的结果都是从9位整数变成8位整数。既然同样是8位整数,我们显然应该优先把高位的数字降低,这样对新整数的值影响最大。 第一次删除:  如何把高位的数...

2019-01-29 10:28:17

阅读数 551

评论数 0

原创 设计模式之适配器模式(Adapter)

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 Source:需要被适配的类、接口、对象,即Datas。 Destination:需要得到的类,Source通过适配得到的...

2019-01-28 16:07:20

阅读数 34

评论数 0

原创 设计模式之装饰模式(Decorator)

装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能,代码如下: 核心接口: public inter...

2019-01-28 11:07:22

阅读数 40

评论数 0

原创 Mysql四种事务隔离级别

一、事务的基本要素(ACID)   1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体。   2、一致性(Consistency):事...

2019-01-25 10:34:38

阅读数 60

评论数 0

原创 面试题:归并两个有序数组成一个有序数组

方法一:直接比较每一个数据,时间复杂度O(n)  /** * 时间复杂度O(n) * merge两个数组 * @param a 递增 * @param b 递增 * @return */ public static i...

2019-01-24 18:11:07

阅读数 381

评论数 0

原创 接口限流之Semaphore

import java.util.concurrent.CountDownLatch; import java.util.concurrent.Semaphore; public class LimitStreamWithSemaphore { //API限流 保证FIFO ...

2019-01-24 16:14:37

阅读数 109

评论数 0

原创 Java多线程之间引发死锁问题(2)

可以使用Semaphore信号量,记录拥有该资源线程的个数。 public static final Semaphore semaphore1 = new Semaphore(1,false);//表示只能一个线程进入 代码如下; import java.util.concurrent.C...

2019-01-24 11:31:38

阅读数 42

评论数 0

原创 Java多线程之间引发死锁问题(1)

死锁代码: import java.util.concurrent.CountDownLatch; public class DeadLock { public static String obj1 = "obj1";//资源1 public s...

2019-01-24 11:17:50

阅读数 78

评论数 0

原创 算法(2)-快速排序

快速排序(Quick Sort)使用分治法策略。 它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 快速排序...

2019-01-21 18:58:51

阅读数 29

评论数 0

原创 RabbitMQ之Exchange交换机

在AMQP模型中,Exchange是接受生产者消息并将消息路由到消息队列的关键组件。 RabbitMQ提供了四种Exchange: fanout(广播),direct(相等,系统默认交换机),topic(匹配),headers。但常用的主要是fanout,direct,topic。 性能排序...

2019-01-21 15:12:47

阅读数 56

评论数 2

原创 高并发(3)之Synchronized的实现原理

synchronized实现原理分为两种类型: 一种为同步代码块,锁定的当前对象,在java中每个对象都有一个监视器(monitor)(虚拟机规范中用的是管程一词),在这个monitor监视器中有两个monitor enter和monitor exit指令,并且这两个指令一 一对应的。如果有线程...

2019-01-17 18:47:28

阅读数 46

评论数 0

原创 mybatis中#{}和${}符号的区别

#{}  使用#{}意味着使用的预编译的语句,即在使用jdbc时的preparedStatement,sql语句中如果存在参数则会使用?作占位符,我们知道这种方式可以防止sql注入,并且在使用#{}时形成的sql语句,已经带有引号,例,select  * from table where id=#...

2019-01-17 13:44:20

阅读数 1992

评论数 0

原创 设计模式之模板设计(Template)

模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去实现,这可能会让我们想到策略模式,两者有着本质的区别。 模版方法模式的应用场景 1、主流程相同,多个类区...

2019-01-15 17:35:34

阅读数 42

评论数 0

原创 RabbitMQ之如何保障数据不丢失

1、费者实例宕机的时候,如何保障数据是不会丢失? 手动ack机制非常的简单,必须要消费者确保自己处理完毕了一个消息,才能手动发送ack给MQ,MQ收到ack之后才会删除这个消息,如果消费者还没发送ack,消费者自己就宕机了,此时MQ感知到它的宕机,就会重新投递这条消息给其他的消费者实例。通过这种...

2019-01-15 14:30:33

阅读数 2844

评论数 3

原创 JDK1.8 ConcurrentHashMap源码分析

ConcurrentHashMap重要的属性,无论是初始化哈希表,还是扩容 rehash 的过程,都是需要依赖这个关键属性  private transient volatile int sizeCtl; 负数代表正在进行初始化或扩容操作 -1代表正在初始化 -N 表示有N-1个线程正在进...

2019-01-14 18:57:27

阅读数 203

评论数 0

原创 ElasticSearch

倒排索引 ES所谓的倒排索引,就是把你的数据内容先分词,每句话分成一个一个的关键词,然后记录好每个关键词对应出现在了哪些id标识的数据里。 这个数据的格式大致如下:假设有一个id字段标识了每个帖子数据,然后title字段是帖子的标题,content字段是帖子的内容。 id title ...

2019-01-04 17:25:14

阅读数 74

评论数 0

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