目录

一、HashMap和CocurrentHashMap

说一下你对HashMap的理解;他的底层结构是什么样的;

一个数据是怎么存到,map里面的;

怎么可以让HashMap的碰撞变小;

为什么不能用可变类型做键值呢;

链表什么时候转成红黑树;为什么要转成红黑树;

红黑树是什么样的,他的结构是什么样的;他还要其他什么特征吗;

CocurrentHashMap历史变化、数据结构及原理

为什么1.7到1.8要换一种方式

分段锁是的底层怎么实现的;

他的继承结构;

自旋锁是怎么实现的

如果俩个key都在同一个分段上面,是怎么保证安全的;

CAS的实现原理

二、锁:

java里面的锁常用的都有哪些;

synchronized修饰一个静态类和静态方法和修饰一个非静态方法有什么区别吗?

ReentrantLock的实现原理

讲讲乐观锁和悲观锁;

三、线程池:

线程池的原理;线程池它里面的主要参数有哪些;

keepAliveTime是什么;

回收的话回收到多少个线程呢;

线程池是怎么实现一个线程复用的;

初始化线程池时线程数的选择

说说线程池的拒绝策略

五种线程池的使用场景

线程池的关闭

线程池都有哪几种工作队列

execute和submit的区别?

四、jvm及GC:

jvm垃圾回收的流程;哪些对象会被认为是垃圾;有一个对象A它有一个属性是B,B这个对象他又有一个属性是A,这个对象最终会不会被认为是垃圾;

GC root哪些对象会被认为是root;

jvm里面有一个存储虚拟s1和s2

什么样的数据会往老年代里面迁移呢;

如果老年代内存也不够用了怎么办呢;

fullGC的时候会有什么现象吗;有没有遇到到fullGC的时候影响业务的场景;

CMS收集器

G1收集器:

五、数据库:

接触过哪些数据库;

oracle和mysql分页的区别;oracle分页的原理;

什么情况要加索引,哪些字段上适合加索引;

使用索引的优缺点?

mycat会用吗;平时会自己弄分库分表吗;什么时候需要分库什么时候需要分表;

你们现在的数据量大吗;是怎么进行拆分存储的;数据库是分库的对吧;他的分库的规则是什么样的;

读锁和写锁的实现方式,加了读锁,其他资源能不能读,加了写锁其他资源能不能读;

六、redis:

redis是什么语言开发的;

redis底层的实现原理有去研究过吗;为什么redis的性能能达到这么快呢;

redis里面有个string,一个字符串类型的值能存储最大容量是多少;你知道他的底层是怎么实现的;

 

redis的keys为什么影响性能,redis时间复杂度是O(n)的命令;

 

一般用redis都做什么;

什么是redis的缓存穿透;什么是缓存雪崩;怎么解决这些问题;缓存穿透不通过ip过滤,最简单的方式怎么解决;

redis 和 memcached 的区别:

Redis 哈希槽的概念

redis 设置过期时间;

redis有做集群吗;怎么做集群的;你在项目中还遇到什么问题吗;

redis持久化问题;会有数据损失吗,开启aof的持久化吗;

Redis Sentinel的工作流程

如何解决 Redis 的并发竞争 Key 问题

cps是多少;一秒钟处理多少;

分布式锁的实现方式;有哪些常见的数据分布式算法,比如说现在部署了3个redis,里面的内存是不一样的,怎么保证有一个内存回落到固定的一个redis实例上面的分布式算法;一致性hash算法相较于普通hash算法有什么优势;

你对sentinel hystrix有用过吗;你们微服务有用sentinel 吗

说一下你们的熔断是怎么做的

你认为什么时候是不可用的

sentinel hystrix的区别

七、MQ:

消息会有消费失败的情况吗;消费失败系统怎么处理;

kafka的底层是怎么实现的;怎么可以达到这么高的吞吐量

你们用kafka有遇到什么问题吗;

如果保证一个消息消费他是有序的怎么做

kafka和activemq和ribbitmq的区别

如果消费端异常,后续的操作流程是什么;

死信队列如果消息失败可以放;mq的更新频路是怎么设置的;

八、jdk1.8有什么新特性;


一、HashMap和CocurrentHashMap

说一下你对HashMap的理解;他的底层结构是什么样的;一个数据是怎么存到,map里面的;怎么可以让HashMap的碰撞变小;为什么不能用可变类型做键值呢;链表为什么要转成红黑树;什么时候转成红黑树;红黑树是什么样的;红黑树的具体算法可以讲讲吗;CocurrentHashMap历史变化、数据结构及原理;为什么1.7到1.8要换一种方式;分段锁是的底层怎么实现的;他的继承结构;自旋锁是怎么实现的;如果俩个key都在同一个分段上面,是怎么保证安全的;CAS的实现原理;

说一下你对HashMap的理解;他的底层结构是什么样的;

jdk7之前底层使用的是数组+链表的形式,1.8之后改成了数据加链表加红黑二叉树,提高查询性能,

一个数据是怎么存到,map里面的;

1.首先创建hashmap,默认大小是16,负载因子是0.75,我们可以去指定他的长度size,如果自己传入初始大小k,初始化大小为 大于k的 2的整数次方。那么为什么2的整数次方,例如如果传10,大小为16。

2.然后我们进行一个插入,首先他会对key取一个hash值,是32位的int值,让他的高16位和低16位进行一个与或运算,原因的是因为后16位有可能是相同的 为了使我们hash的值分布的更加均匀,并且使用位运算也非常高效 。

源码里面就把散列值和((数组的长度-1 )因为-1之后他的地位全都是1高位都为0这种形式)做了与运算 算出数组的下标。之所以要做是因为int值的范围是 -2的31次方-1到2的32次方 前后加起来大概与40亿的映射空间 但问题是一个40亿长度的数组 内存是放不下的。

3.之后我们把hashCode的节点组装成一个entry节点 把这个entry节点存储到数组下表里面  存储的时候首先会判断一下这个数组的下标是不是有值 如果说有值得话  他首先去判断这个key的值是不是是相等的 如果是相等的 说明我们是相同的一个值 那我们就要用现在的值替换掉原来的值如果是不相等的 那就使用链表的形式将他串联起来。存储之后链表也会做一个判断如果说链表他是大于8的 我们会把它转化成一个红黑二叉树进行排列。

å¨è¿éæå¥å¾çæè¿°

这里有一个jdk7和jdk8的区别

  1. 数组+链表改成了数组+链表或红黑树;
  2. 链表的插入方式从头插法改成了尾插法,原因是因为我们在非线程安全下使用hashmap的时候会出现一个死循环的问题 这个问题在1.8之后进行了一个修复.
  3. 扩容的时候1.7需要对原数组中的元素进行重新hash定位在新数组的位置,1.8采用更简单的判断逻辑,位置不变或索引+旧容量大小;
  4. 在插入时,1.7先判断是否需要扩容,再插入,1.8先进行插入,插入完成再判断是否需要扩容;

怎么可以让HashMap的碰撞变小;

算法让他分布的更均匀 位运算 扩容

为什么不能用可变类型做键值呢;

因为可变类型作为key,如果修改会造成数据无法找到。

链表什么时候转成红黑树;为什么要转成红黑树;

我们在jdk1.8使用了红黑树,原因是因为我们在发生hash碰撞的时候,我们会把数据按照链表的形式把他插入进去,那么这个时候因为我们链表只能从头结点进行一个遍历,那么他的一个时间复杂度就On,非常影响性能,所以我们当他大于2三次方8的时候就会转成红黑树;原因是使用红黑二叉树之后,当我们在查询数据的时候复杂度就会降为O1,可以大大的提高我们的性能

红黑树是什么样的,他的结构是什么样的;他还要其他什么特征吗;

他的结构的话我们平常会像这种平衡二叉树来维护他,但是平衡二叉树可能说是我每插入一个节点,他就要去维护这种情况,比较频繁,就有了红黑二叉树这种红黑节点相互交替,他有四个规则,

CocurrentHashMap历史变化、数据结构及原理

在并发编程里面使用的CocurrentHashMap,在1.7我们使用sengment分段锁,每一次key进来之后,他都会判断你这个key是属于哪一个分段里面的,从而拿到sengment。锁主要是加在链表上的,因为链表会导致我们线程安全的问题,1.8之后我们将锁改成了CAS+synchronized,解决分段锁的弊端。

为什么1.7到1.8要换一种方式

之所以改锁机制是因为sengment分段锁他可以设置,但是他默认是16段,这个时候我们的并发量就会有一个限制,包括我们需要去估sengment的个数,如果估少了,就会导致锁的空闲,估大了会导致锁的一些竞争,而且一旦初始化以后,它是不可以扩容的,所以之后改成了自旋锁,大大提高了性能。

分段锁是的底层怎么实现的;

分段锁底层维护了一个数组,我们默认的话是16段,每一个段就相当于一把锁,然后最大的并发量可能到达16;

他的继承结构;

它继承了ReentrantLock,然后ReentrantLock继承了AQS(AbstractQueuedSynchronizer)

自旋锁是怎么实现的

思想是给 table的每一个下标都加锁,也就是当对下标进行操作时都会加锁(CAS+Synchronize)。ConcurrentHashMap 成员变量使用 volatile 修饰,免除了指令重排序,同时保证内存可见性,另外使用 CAS操作和 synchronized结合实现赋值操作,多线程操作只会锁住当前操作索引的节点。

如果俩个key都在同一个分段上面,是怎么保证安全的;

CAS的实现原理

CAS其实就是CompareAndSwap首先他会传入一个值还有他的地址,然后进行一个CAS的判断,当前的值与我们现在的值进行比较,如果说一样的话,那我再会进行一个数据的插入,当前的第三个值插入进去,如果不相同从新获取值,然后进行修改,进行插入,这个值可能会有一个ABA的问题,所以每次拿到值以后,会给他加一个版本号,然后进行比较插入的。

二、锁:

java里面的锁常用的都有哪些;synchronize修饰一个静态类和静态方法和修饰一个非静态方法有什么区别吗;ReentrantLock的实现原理;讲讲乐观锁和悲观锁;

java里面的锁常用的都有哪些;

常用的有synchronized(Object)、ReentrantLock(可重用锁)这些;

synchronized修饰一个静态类和静态方法和修饰一个非静态方法有什么区别吗?

Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”。

Synchronized修饰静态方法,实际上是对该类对象加锁,俗称“类锁”。

ReentrantLock的实现原理

ReentrantLock的使用

Lock lock = new ReentranLock();
lock.lock();
try{//do something
}finally{lock.unlock();
}

ReentrantLock实现了Lock接口,加锁和解锁都需要显式写出,注意一定要在适当时候unlock。

和synchronized相比,ReentrantLock用起来会复杂一些。在基本的加锁和解锁上,两者是一样的,所以无特殊情况下,推荐使用synchronized。ReentrantLock的优势在于它更灵活、更强大,增加了轮训、超时、中断等高级功能。

ReentrantLock的原理

公平锁和非公平锁

public ReentrantLock() {sync = new NonfairSync();
}public ReentrantLock(boolean fair) {sync = fair ? new FairSync() : new NonfairSync();
}

ReentrantLock的内部类Sync继承了AQS,分为公平锁FairSync和非公平锁NonfairSync。

  • 公平锁:线程获取锁的顺序和调用lock的顺序一样,FIFO;
  • 非公平锁:线程获取锁的顺序和调用lock的顺序无关,全凭运气。

ReentrantLock默认使用非公平锁是基于性能考虑,公平锁为了保证线程规规矩矩地排队,需要增加阻塞和唤醒的时间开销。如果直接插队获取非公平锁,跳过了对队列的处理,速度会更快。

讲讲乐观锁和悲观锁;

乐观锁 :总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现

version方式: 

一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也会读取version值,在提交更新时,若刚才读取到的version值为当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。

update table set x=x+1, version=version+1 where id=#{id} and version=#{version};  

 

CAS操作方式: 

即compare and swap 或者 compare and set,涉及到三个操作数,数据所在的内存值,预期值,新值。当需要更新时,判断当前内存值与之前取到的值是否相等,若相等,则用新值更新,若失败则重试,一般情况下是一个自旋操作,即不断的重试。 

悲观锁:总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加锁(读锁、写锁、行锁等),当其他线程想要访问数据时,都需要阻塞挂起。可以依靠数据库实现,如行锁、读锁和写锁等,都是在操作之前加锁,在Java中,synchronized的思想也是悲观锁

适用场景 
悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。 
乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。 
总结:两种所各有优缺点,读取频繁使用乐观锁,写入频繁使用悲观锁。

三、线程池:

线程池的原理;线程池它里面的主要参数有哪些;keepAliveTime是什么;回收的话回收到多少个线程呢;线程池是怎么实现一个线程复用的;初始化线程池时线程数的选择;说说线程池的拒绝策略;五种线程池的使用场景;线程池的关闭;线程池都有哪几种工作队列;execute和submit的区别;

线程池的原理;线程池它里面的主要参数有哪些;

public ThreadPoolExecutor(int corePoolSize,    //核心线程的数量int maximumPoolSize,    //最大线程数量long keepAliveTime,    //超出核心线程数量以外的线程空余存活时间TimeUnit unit,    //存活时间的单位BlockingQueue<Runnable> workQueue,    //保存待执行任务的队列ThreadFactory threadFactory,    //创建新线程使用的工厂RejectedExecutionHandler handler // 当任务无法执行时的处理器) {...}

线程池的参数有7个,首先根据系统的核数,设置核心线程数(corePoolSize),如果说核心线程数满了的话,会定义一个阻塞队列(workQueue),当阻塞队列满了的话,会继续去创建线程,所以这个时候有一个最大的线程数(maximumPoolSize),如果到达最大线程数之后的话,会有一个淘汰策略(handIer),进来之后的话,这个淘汰策略,我们会设置成lfu,还有就是我们线程池去连接的时候,他是有一个连接的超时时间(keepAliveTime)以及超时时间的单位(unit:keepAIiveTime),还有就是我们创建这个线程所用到的一个类加载器(threadFactory)是什么

keepAliveTime是什么;

调用线程池如果多长时间没有继续再去访问了,就会把线程回收进来

getTask 怎么使用 keepAliveTime
(1)首先也是一个自旋,当allowCoreThreadTimeout(运行空闲核心线程超时) 或 wc>corePoolSize(当前线程数量大于核心线程数量) 时,timed会标识为true,表示需要进行超时判断。
(2)当wc(当前工作者数量)大于 最大线程数 或 空闲线程的空闲时间大于keepAliveTime(timed && timeout),以及wc>1或(workQueue)任务队列为空时,会进入compareAndDecrementWorkerCount方法,对wc的值减1。
(3)当compareAndDecrementWorkerCount方法返回true时,则getTask方法会返回null,终止getTask方法的自旋。这时候回到runWorker方法,就会进入到processWorkerExit方法,进行销毁worker。

回收的话回收到多少个线程呢;

回收到核心的线程数;

线程池是怎么实现一个线程复用的;

线程创建的时候是怎么创建核心线程数的,当用完就会释放,其他线程进来就会在用,达到一个线程复用;

初始化线程池时线程数的选择

如果任务是IO密集型,一般线程数需要设置2倍CPU数以上,以此来尽量利用CPU资源。

如果任务是CPU密集型,一般线程数量只需要设置CPU数加1即可,更多的线程数也只能增加上下文切换,不能增加CPU利用率。

说说线程池的拒绝策略

    当请求任务不断的过来,而系统此时又处理不过来的时候,我们需要采取的策略是拒绝服务。RejectedExecutionHandler接口提供了拒绝任务处理的自定义方法的机会。在ThreadPoolExecutor中已经包含四种处理策略。

AbortPolicy策略:该策略会直接抛出异常,阻止系统正常工作。

CallerRunsPolicy 策略:只要线程池未关闭,该策略直接在调用者线程中,运行当前的被丢弃的任务。

DiscardOleddestPolicy策略: 该策略将丢弃最老的一个请求,也就是即将被执行的任务,并尝试再次提交当前任务。

DiscardPolicy策略:该策略默默的丢弃无法处理的任务,不予任何处理。

    除了JDK默认提供的四种拒绝策略,我们可以根据自己的业务需求去自定义拒绝策略,自定义的方式很简单,直接实现RejectedExecutionHandler接口即可。

五种线程池的使用场景

newSingleThreadExecutor:一个单线程的线程池,可以用于需要保证顺序执行的场景,并且只有一个线程在执行。

newFixedThreadPool:一个固定大小的线程池,可以用于已知并发压力的情况下,对线程数做限制。

newCachedThreadPool:一个可以无限扩大的线程池,比较适合处理执行时间比较小的任务。

newScheduledThreadPool:可以延时启动,定时启动的线程池,适用于需要多个后台线程执行周期任务的场景。

newWorkStealingPool:一个拥有多个任务队列的线程池,可以减少连接数,创建当前可用cpu数量的线程来并行执行。

线程池的关闭

关闭线程池可以调用shutdownNow和shutdown两个方法来实现

shutdownNow:对正在执行的任务全部发出interrupt(),停止执行,对还未开始执行的任务全部取消,并且返回还没开始的任务列表。

shutdown:当我们调用shutdown后,线程池将不再接受新的任务,但也不会去强制终止已经提交或者正在执行中的任务。

线程池都有哪几种工作队列

1、ArrayBlockingQueue

是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。

2、LinkedBlockingQueue

一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列

3、SynchronousQueue

一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。

4、PriorityBlockingQueue

一个具有优先级的无限阻塞队列。

 

execute和submit的区别?

execute适用于不需要关注返回值的场景,只需要将线程丢到线程池中去执行就可以了。

submit方法适用于需要关注返回值的场景

 

四、jvm及GC:

jvm垃圾回收的流程;哪些对象会被认为是垃圾;有一个对象A它有一个属性是B,B这个对象他又有一个属性是A,这个对象最终会不会被认为是垃圾;GC root哪些对象会被认为是root;jvm里面有一个存储虚拟s1和s2;什么样的数据会往老年代里面迁移呢;如果老年代内存也不够用了怎么办呢;fullGC的时候会有什么现象吗;有没有遇到到fullGC的时候影响业务的场景;CMS收集器;G1收集器

jvm垃圾回收的流程;哪些对象会被认为是垃圾;有一个对象A它有一个属性是B,B这个对象他又有一个属性是A,这个对象最终会不会被认为是垃圾;

允许GC之后,开始查找那些允许被回收的(两个算法)-> 开始回收(四个算法)

第一步:那些对象是垃圾:

         1,引用计数法:通过对引用的遍历,找到对应的实例,让对应的实例计数加  1 ,如果引用取消,或者指向null,实例的引用减  1 。把找到的引用都遍历一遍之后,如果发现有对象实例的计数是0。那么这个对象 就是垃圾对象了。在通过垃圾回收算法对其进行 回收即可。

       缺点:想想一下,有两个类,互相引用,也就是A对象的实例(也就是对象的全局变量)是一个指向B对象的引用,B对象实例是一个指向A对象的引用。那么这两个对象的引用计数,永远不可能是0 。也就不可能对其进行回收了。

        2,可达性分析法:这个算法类似于树的遍历,学过数据结构的小伙伴应该会好理解。简单来说,按照一定的规则说明那些可以作为一个根节点(GC root),然后以这些根节点去访问其引用的对象,被访问的对象又会有其他对象的引用。想象一下,是不是像极了树的遍历。这个路径称作引用链,但凡是在引用链上的对象,都是可用的。注意,引用连的起始点都是GC root 哦。虽然有其他对象存在类似于引用链的结构,但是,起始点不是GC root的那一些,都是垃圾,可以被回收的。

一般情况下,都是使用的 可达性分析法去查找垃圾类实例。

GC root哪些对象会被认为是root;

         GC root的查找规则:java栈中的引用,方法区中的静态属性(静态变量 + 静态常量),方法区中常量引用的对象(方法区中有个结构 叫做 常量池 ,存储的一部分是常量),本地方法(线程独占区中有个结构叫做 本地方法栈)。

jvm里面有一个存储虚拟s1和s2

年轻代里面有一个复制算法,这个就要说到

第二步:垃圾回收器算法(标记-清除、复制算法、标记-整理、分代算法)

       1,标记-清除:找到垃圾类之后,标记一下。然后直接 清除即可。(算法很快)

           缺点:产生空间碎片,不利于大对象的安排进去。

       2,复制算法:将内存分为四块:新生代(Eden),生存代(Survivor * 2),老年代。有五种内存分配策略,讲完之后再说。类的升级流程是Eden->Survivor->老年代;

         算法流程:1),先找到垃圾类,将可以使用的类移动到Survivor2,将Eden + 另一块Survivor1中的内存全部清除。

                           2),将新生成的类实例优先分配到Eden,分配不下时,放到Survivor2。进行GC时,将Survivor2中对象的满足一定条件(例如对象年龄达到某一个标准)的对象分配到老年代中。将本次GC存活下来的分配到Survivor1中,在清除Eden + Survivor2 。依次循环即可。

       缺点:很容易发现吧,Survivor中每次都会浪费一个Survivor的内存没有使用,所以为了减少浪费,一般将Eden的内存扩大,Survivor的内存设置小一点。例如:HotSpot(HotSpot是8中的jvm默认虚拟机) 中设置的是 8 : 1 : 1;

    3,标记-整理:看名字是不是感觉很熟悉,没错。跟标记-清除很像,也是直接标记。改算法使用到了前面两个算法的精华,改善了缺点。

        算法流程:1),直接标记

                          2),集中,无缝隙的移动到一端,此时会发现,剩下的垃圾类,都会在其他地方。移动完成之后就会发现有一个边界,就是可用类跟其他空间的一个边界,下一步直接把边界以外的空间直接清除掉就可以了。

       缺点:看起来很完美,但是越完美的,往往在时间上过不去。

    4,分代算法:根据在哪里清除,选用算法不一样。

        算法流程:1),新生代采用复制算法

                          2),老年代采用标记-清除算法(老年代GC很少访问,类也很少去直接分配到里面,内存碎片的可怕性就显得不那么重要了)

什么样的数据会往老年代里面迁移呢;

每次进行垃圾回收的时候,比如说当前这个对象存活下来了,计数器就会给他+1,默认的话,是当计数器达到16的时候就会放到老年代里面;

GC的作用域:

JVM内存分配原则:

        1,对象优先分配到Eden区域;

        2,大对象直接分配到老年区:大对象的就是,对象里面有很大数组或者很大的字符串;

        3,长时间存活的对象存入老年区:就是上面复制算法里面说的那个对象升级流程;

         4,动态对象年龄判定:jvm并不是永远地要求对象的年龄必须达到了MaxTenuringThreshold才可以进入老年代,如果Survivor空间中年龄相同的所有对象的总空间>=本servivor中的一半,那么年龄>=本年龄的对象可以直接进入老年区;

        5,空间分配原则:简单来说,就是在发生Minor GC(在新生代进行GC)情况下,为了防止发生在Minor GC后,Eden有大量存活的对象,导致survivor不能全部存入,这时需要老年代去担保,把这些对象放入老年代,但是要确保老年要存的下。

               1),再发生Minor GC之前,检查老年区的可用的连续空间是否是大于新生代(Eden)的所有对象的总空间,如果是,直接全部晋升老年代,保证Minor GC的安全;

               2),如果不行,就检查HandlePromotionFailure(可以手工设定)参数时候允许担保失败,允许的话,直接分配。不能的话,发生一次full GC(或者是Major GC   在老年代进行GC)。

              3),不允许担保失败,发生一次 full GC。

            为什么不直接进行full GC ,因为速度慢呀。而且经常GC 也 效果不大,因为老年代都是一些长期存活的对象。

如果老年代内存也不够用了怎么办呢;

            他会进行fullGC

fullGC的时候会有什么现象吗;有没有遇到到fullGC的时候影响业务的场景;

如果频繁的fullGC会出现cpu内存飙升的问题

     收集器有:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1(G1是目前最好的收集器)

上图是HotSpot的垃圾收集器的使用范围,HotSpot是现在主流的 jvm。

CMS收集器

      CMS收集器是一种以获取最短回收停顿时间为目标的收集器。

     工作原理:基于标记-清除算法实现的,流程分为4步:

                       1),初始标记(仅仅标记一下GC Root,)

                       2),并发标记(是一个单独的线程,一起跟用户的线程一起 运行)

                       3),重新标记(去标记一下在运行期间发生变化的对象)

                       4),并发清除(是一个单独的线程,一起跟用户的线程一起 运行)

        其中,初始标记跟重新标记任然需要Stop The World。

图中的安全点,跟发动GC有关,任何一个GC收集器动作都会设计安全点。另附博客说明。

G1收集器:

      目前最强收集器,强到什么地步。不需要其他收集器配合,自己就可以管理新生代跟老年代。G1是面向服务端应用的垃圾收集器,HotSpot开发团队称在未来可以替换掉JDK1.5中发布的CMS收集器。

      工作流程:算法:整体采用了标记-整理算法,局部使用了复制算法。工作流程也是分为4步:

                        1),初始标记

                        2),并发标记

                        3),最终标记

                       4),筛选回收

跟CMS的工作流程差不多。因为G1还正在开发优化,在大数据上应用停顿时间以及吞吐量还有缺陷。还没有大方面的普及

五、数据库:

接触过哪些数据库;oracle和mysql分页的区别;oracle分页的原理;什么情况要加索引;那些字段上适合加索引;mycat会用吗;平时会自己弄分库分表吗;什么时候需要分库什么时候需要分表;你们现在的数据量大吗;是怎么进行拆分存储的;数据库是分库的对吧;他的分库的规则是什么样的;读锁和写锁的实现方式,加了读锁,其他资源能不能读,加了写锁其他资源能不能读;

接触过哪些数据库;

oracle mysql

oracle和mysql分页的区别;oracle分页的原理;

Mysql使用limit分页

select * from stu limit m, n; //m = (startPage-1)*pageSize,n = pageSize

Oracle使用rownum分页

select * from (
select rownum rn,a.* from table_name a where rownum <= x
//结束行,x = startPage*pageSize
)
where rn >= y; //起始行,y = (startPage-1)*pageSize+1

(1)>= y,<= x表示从第y行(起始行)~x行(结束行) 。

(2)rownum只能比较小于,不能比较大于,因为rownum是先查询后排序的,例如你的条件为rownum>1,当查询到第一条数据,rownum为1,则不符合条件。第2、3...类似,一直不符合条件,所以一直没有返回结果。所以查询的时候需要设置别名,然后查询完成之后再通过调用别名进行大于的判断。

 

什么情况要加索引,哪些字段上适合加索引;

表的主键、外键必须有索引;

经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

经常与其他表进行连接的表,在连接字段上应该建立索引;

索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

使用索引的优缺点?

索引就像书的目录一样可以非常快速的定位到书的页面

优点:提高查询效率,没有索引的话查询数据库表会进行全表扫描

缺点:插入慢,占用硬盘空间

mycat会用吗;平时会自己弄分库分表吗;什么时候需要分库什么时候需要分表;

你们现在的数据量大吗;是怎么进行拆分存储的;数据库是分库的对吧;他的分库的规则是什么样的;

读锁和写锁的实现方式,加了读锁,其他资源能不能读,加了写锁其他资源能不能读;

数据库的并发操作会带来许多问题,比如丢失更新、不可重复读、读脏数据(幽灵数据)等等,为避免该类问题的产生,我们采用了封锁机制,一般DBMS进行并发控制的方法是封锁机制和事务机制。

最基本的封锁类型有两种:排它锁(Exclusive Locks,X锁)和共享锁(Share Locks,S锁):

  • 排它锁也称独占锁、写锁或X锁,若sessionA获得某数据表的排他锁权限,那么sessionA只能对该表进行读取或修改,其他session既不能读取也不能修改该表,更不能对该表加任何类型的锁,直到sessionA释放排它锁权限。加锁方式:lock tables tablename write;
  • 共享锁也称读锁或S锁,若sessionA获得某数据表的共享锁权限,那么任何session(包括sessionA)只能对该表进行读取不能修改该表,其他session可以对该数据表继续加S锁但不能加X锁,直到sessionA释放共享锁权限。加锁方式:set tables tablename read;

六、redis:

redis是什么语言开发的;redis底层的实现原理有去研究过吗;为什么redis的性能能达到这么快呢;redis里面有个string 你知道他的底层是怎么实现的;redis的keys为什么影响性能;你知道别的复杂度也是ologn的;一般用redis都做什么;什么是redis的缓存穿透;怎么解决这些问题;不通过ip过滤,最简单的方式怎么解决;什么是缓存雪崩;redis持久化问题;会有数据损失吗,开启aof的持久化吗;redis有做集群吗;怎么做集群的;分布式锁的实现方式;有哪些常见的数据分布式算法,比如说现在部署了3个redis,里面的内存是不一样的,怎么保证有一个内存回落到固定的一个redis实例上面的分布式算法;一致性hash算法相较于普通hash算法有什么优势;

redis是什么语言开发的;

Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写。

redis底层的实现原理有去研究过吗;为什么redis的性能能达到这么快呢;

官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。

1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);

2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;

3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;

4、使用多路I/O复用模型,非阻塞IO;

5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;

多路 I/O 复用模型

多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。

这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。

原因是因为他底层的话是用的是这种io多路复用的这种机制像我们linux底下的这种epoll  就是根据事件来触发的 当你有这种事件的时候 就会通知我的  那我就会进行一个事件的触发 而且还防止了我们多线程之间的一个上下文切换或者锁的一些竞争的一些情况 从而他的性能会比较高一点  但是我们对其禁止使用一些严重影响他性能的一些命令 例如说是keys啊 这种 我们会给他重命名掉  不让他使用

redis里面有个string,一个字符串类型的值能存储最大容量是多少;你知道他的底层是怎么实现的;

最大容量是512M。

对于字符串类型,其做出了改进,是一种基于动态字符串sds实现,redis作为数据库,查询必然多,修改也会有一定多,sds解决了C语言字符串动态扩展的不方便,以及查询长度操作从O(n)变为了O(1)。 

struct sdshdr {// 记录 buf 数组中已使用字节的数量// 等于 SDS 所保存字符串的长度int len;// 记录 buf 数组中未使用字节的数量int free;// 字节数组,用于保存字符串char buf[];};

SDS 遵循 C 字符串以空字符结尾的惯例, 保存空字符的 1 字节空间不计算在 SDS 的 len 属性里面, 并且为空字符分配额外的 1 字节空间, 以及添加空字符到字符串末尾等操作都是由 SDS 函数自动完成的, 所以这个空字符对于 SDS 的使用者来说是完全透明的。

遵循空字符结尾这一惯例的好处是, SDS 可以直接重用一部分 C 字符串函数库里面的函数。

其free属性是代表buf数组没有被利用的空间数,便于sds的空间分配策略。

这样的设计也打破了C语言字符串会自动认为’\0’为分隔符号,但是sds不会,所以可以保存的字符串中间存在空字符 è¿éåå¾çæè¿°

 

通过未使用空间, SDS 实现了空间预分配惰性空间释放两种优化策略

redis的keys为什么影响性能,redis时间复杂度是O(n)的命令;

keys时间复杂度是O(n),flushdb、flushall这类命令我们可以配置redis.conf禁用这些命令

使用scan替代keys命令

语法:
scan cursor [MATCH pattern] [COUNT count]
案例:
scan 0 match report:* count 10
1) "3932160"
2)  1) "report:12360412"2) "report:12749274"
scan 第一个参数是游标,表示从游标开始
返回的第一行是游标,第二行是匹配到的数据,
如果第一行返回0,表示没有更多数据,否则下次使用scan时,就要用第一行返回的值作为scan的游标

 

一般用redis都做什么;

  • 性能:

我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存,这样,后面的请求就去缓存中读取,请求使得能够迅速响应

  • 并发:

在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用的的Redis的做一个缓冲操作,让请求先访问到的Redis的的,而不是直接访问数据库。

  • 分布式锁等其他功能

Redis的的的还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件代替,

什么是redis的缓存穿透;什么是缓存雪崩;怎么解决这些问题;缓存穿透不通过ip过滤,最简单的方式怎么解决;

 

  • 缓存处理流程

      前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。

      

 

  • 缓存穿透

       描述:

       缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

      解决方案:

接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;
从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击

  • 缓存击穿

      描述:

      缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力

      解决方案:

设置热点数据永远不过期。
加互斥锁,互斥锁参考代码如下:

 

          说明:

          1)缓存中有数据,直接走上述代码13行后就返回结果了

         2)缓存中没有数据,第1个进入的线程,获取锁并从数据库去取数据,没释放锁之前,其他并行进入的线程会等待100ms,再重新去缓存取数据。这样就防止都去数据库重复取数据,重复往缓存中更新数据情况出现。

          3)当然这是简化处理,理论上如果能根据key值加锁就更好了,就是线程A从数据库取key1的数据并不妨碍线程B取key2的数据,上面代码明显做不到这点。

  • 缓存雪崩

      描述:

      缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是,        缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。

     解决方案:

缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
设置热点数据永远不过期。

redis 和 memcached 的区别:


对于 redis 和 memcached 我总结了下面四点。现在公司一般都是用 redis 来实现缓存,而且 redis 自身也越来越强大了!

redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memecache把数据全部存在内存之中。
集群模式:memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 redis 目前是原生支持 cluster 模式的.
Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路 IO 复用模型。

Redis 哈希槽的概念

Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384个哈希槽,每个 key通过 CRC16校验后对16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash槽。

redis 设置过期时间;

定期删除+惰性删除。

定期删除:redis默认是每隔 100ms 就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。注意这里是随机抽取的。为什么要随机呢?你想一想假如 redis 存了几十万个 key ,每隔100ms就遍历所有的设置过期时间的 key 的话,就会给 CPU 带来很大的负载!
惰性删除 :定期删除可能会导致很多过期 key 到了时间并没有被删除掉。所以就有了惰性删除。假如你的过期 key,靠定期删除没有被删除掉,还停留在内存里,除非你的系统去查一下那个 key,才会被redis给删除掉。这就是所谓的惰性删除,也是够懒的哈!

如果大量过期key堆积在内存里,导致redis内存块耗尽了。怎么解决这个问题呢? redis 内存淘汰机制。

redis 提供 6种数据淘汰策略:

redis有做集群吗;怎么做集群的;你在项目中还遇到什么问题吗;

参考:https://www.cnblogs.com/L-Test/p/11626124.html

 集群的三种模式

一、主从同步/复制

redis有俩种复制模式:Rdb和aof

redis持久化问题;会有数据损失吗,开启aof的持久化吗;

redis提供2种持久化方案。rdb和aof

redis有自己默认的持久化方案 (Rdb 方案)

Rdb(默认):在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
AOF:append only file。以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

优缺点:

相比于AOF机制,如果数据集很大,RDB的启动效率会更高。

如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。

由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

二者选择的标准,就是看系统是愿意牺牲一些性能,换取更高的缓存一致性(aof),还是愿意写操作频繁的时候,不启用备份来换取更高的性能,待手动运行save的时候,再做备份(rdb)。不过生产环境其实更多都是二者结合使用的。

常用配置

RDB持久化配置

Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开6379.conf文件之后,我们搜索save,可以看到下面的配置信息:

save 900 1              #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10            #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000        #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

AOF持久化配置

在Redis的配置文件中存在三种同步方式,它们分别是:

appendfsync always     #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec  #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no          #从不同步。高效但是数据不会被持久化。

(1)首先从节点根据当前状态,决定如何调用psync命令:

  • 如果从节点之前未执行过slaveof或最近执行了slaveof no one,则从节点发送命令为psync ? -1,向主节点请求全量复制;
  • 如果从节点之前执行了slaveof,则发送命令为psync <runid> <offset>,其中runid为上次复制的主节点的runid,offset为上次复制截止时从节点保存的复制偏移量。

(2)主节点根据收到的psync命令,及当前服务器状态,决定执行全量复制还是部分复制:

  • 如果主节点版本低于Redis2.8,则返回-ERR回复,此时从节点重新发送sync命令执行全量复制;
  • 如果主节点版本够新,且runid与从节点发送的runid相同,且从节点发送的offset之后的数据在复制积压缓冲区中都存在,则回复+CONTINUE,表示将进行部分复制,从节点等待主节点发送其缺少的数据即可;
  • 如果主节点版本够新,但是runid与从节点发送的runid不同,或从节点发送的offset之后的数据已不在复制积压缓冲区中(在队列中被挤出了),则回复+FULLRESYNC <runid> <offset>,表示要进行全量复制,其中runid表示主节点当前的runid,offset表示主节点当前的offset,从节点保存这两个值,以备使用。

二、哨兵模式

  Redis Sentinel是Redis高可用的实现方案。Sentinel是一个管理多个Redis实例的工具,它可以实现对Redis的监控、通知、自动故障转移。

Redis Sentinel的工作流程

由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求 。如下图:

Sentinel负责监控集群中的所有主、从Redis,当发现主故障时,Sentinel会在所有的从中选一个成为新的主。并且会把其余的从变为新主的从。同时那台有问题的旧主也会变为新主的从,也就是说当旧的主即使恢复时,并不会恢复原来的主身份,而是作为新主的一个从。

在Redis高可用架构中,Sentinel往往不是只有一个,而是有3个或者以上。目的是为了让其更加可靠,毕竟主和从切换角色这个过程还是蛮复杂的。

  • 主观失效

    SDOWN(subjectively down),直接翻译的为”主观”失效,即当前sentinel实例认为某个redis服务为”不可用”状态.

  • 客观失效

    ODOWN(objectively down),直接翻译为”客观”失效,即多个sentinel实例都认为master处于”SDOWN”状态,那么此时master将处于ODOWN,ODOWN可以简单理解为master已经被集群确定为”不可用”,将会开启failover

三、Cluster 集群

使用虚拟节点,比如说有3主、3从6台服务器。将16384个槽均匀的分配到三台主服务器(master)上,从服务器(slave)复制主服务器上的所有数据,存储key时,通过CRC16(key)算法得到32位的哈希值在和16384取模,计算出槽的编号。因为redis是非幂等性(无状态的,每次请求服务和请求别的是一样的)的服务,必须要搭从节点。

部署集群:借助 redis-tri.rb 工具可以快速的部署集群,如果本机没有该命令行需要自行安装,只需要执行/redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 就可以成功创建集群

后面如果扩容或者删除从节点,对我们的数据的影响都不会很大,因为主要是扩容节点的,因为redis是无中心化的,我们只需要去连接一台服务器的redis,如果key不在目前这台服务器上,他就可以帮你重定向到另一台服务器,对数据进行操作,我们在操作数据的时候,必须使用“-c”来表示我们操作的是集群,而不是在单服务器上进行操作的。

 

如何解决 Redis 的并发竞争 Key 问题

所谓 Redis 的并发竞争 Key 的问题也就是多个系统同时对一个 key 进行操作,但是最后执行的顺序和我们期望的顺序不同,这样也就导致了结果的不同!

推荐一种方案:分布式锁(zookeeper 和 redis 都可以实现分布式锁)。(如果不存在 Redis 的并发竞争 Key 问题,不要使用分布式锁,这样会影响性能)

基于zookeeper临时有序节点可以实现的分布式锁。大致思想为:每个客户端对某个方法加锁时,在zookeeper上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点。 判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。 当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机导致的锁无法释放,而产生的死锁问题。完成业务流程后,删除对应的子节点释放锁。

在实践中,当然是从以可靠性为主。所以首推Zookeeper。

参考:

https://www.jianshu.com/p/8bddd381de06

cps是多少;一秒钟处理多少;

分布式锁的实现方式;有哪些常见的数据分布式算法,比如说现在部署了3个redis,里面的内存是不一样的,怎么保证有一个内存回落到固定的一个redis实例上面的分布式算法;一致性hash算法相较于普通hash算法有什么优势;

你对sentinel hystrix有用过吗;你们微服务有用sentinel 吗

因为他需要监控redis里面 因为redis属于非幂等性的集群 那我搭建完集群之后我还需要搭建主从复制 如果说我们不用sentinel 的话肯定会对我们数据造成一定的影响的 

sentinel 是你们自己搭的吗直接从ali看了 就搭了吗?hystrix你们也用过吗

说一下你们的熔断是怎么做的

当我们另一个服务不能用的时候他会调用failback给他返回一个页面

你认为什么时候是不可用的

当高并发或者是服务降级的时候 你这个系统可能不是很重要这个时候就会出发这种failback

sentinel hystrix的区别

你们用redis主要是用的缓存这一块吗说一下你怎么用redis实现分布式锁的

它提供了这种命令像nx ex 也就是说是给他指定的一个变量然后当他为1的时候肯定是一个加锁的状态那么如果说是我操作完之后的话 我是要对他进行一个释放的 然后别的会通过这个命令来判断如果当前存在而且为1的话他肯定是拿不到锁的

七、MQ:

MQ用过什么MQ;消息会有消费失败的情况吗,消费失败系统怎么处理;如果消费端异常,后续的操作流程是什么;死信队列如果消息失败可以放;mq的更新频路是怎么设置的;

消息会有消费失败的情况吗;消费失败系统怎么处理;

kafka的底层是怎么实现的;怎么可以达到这么高的吞吐量

他的话 底层也是使用的多路复用的这种形式 就是我作为一个数据的提供者我去发消息 那么他的话把topic分成一个个postion然后提高并发量所以他的一个性能的话 其实也跟这个有很大的关系 其实postion底层的话 数据的存储也是根据.log文件 跟日志也比较容易混淆 里面的话使用sengment对底层存储分段就是它里面有一个偏移量offset 然后发送他kafka服务器brock上 我们要进行一个存储 我们会根据我们的业务场景进行一个设计来保证我们数据丢失的一个情况 他的话我们平常的话也会设置成为1的一个情况 1的话就是我当前的一个lander接收到就行了 -1的话可能是这个lrp里面所有的从节点都接受到这个数据之后我们才给反馈  客户这边的话发数据也会分这种buffer  我们会给buffer定义一个长度 还有就是分批的一个处理 我给他每次手机达到一个batch  也会去设计一个批处理的量 达到这个数据量之后每一个时间段我给他发送  想这些都可以提高性能

你们用kafka有遇到什么问题吗;

如果保证一个消息消费他是有序的怎么做

客户端获取到的每一个postion的数据  其实都是有序的 但是我们客户端这边可能说是并发的这种情况那我们会给他加一个内存优化之类的

kafka和activemq和ribbitmq的区别

activemq因为他是用java开发的,不支持跨语言的这种形式。ribbitmq的话他主要是用在事务级别的,对大数据的处理性能比较弱一点。

如果消费端异常,后续的操作流程是什么;

死信队列如果消息失败可以放;mq的更新频路是怎么设置的;

八、jdk1.8有什么新特性;

【1】Lambda 表达式:将函数式编程引入了Java。Lambda 允许把函数作为一个方法的参数,或者把代码看成数据。

String[] atp = {"Nadal", "Djokovic",  "Wawrinka"};  
List<String> players =  Arrays.asList(atp);  // 以前的循环方式  
for (String player : players) {  System.out.print(player + "; ");  
}  
// 使用 lambda 表达式以及函数操作(functional operation)  
players.forEach((player) -> System.out.print(player + "; "));  


【2】接口的默认方法与静态方法:我们可以在接口中定义默认方法,使用 default关键字,并提供默认的实现。所有实现这个接口的类都会接受默认方法的实现,除非子类提供的自己的实现。

public interface DefaultFunctionInterface {default String defaultFunction() {return "default function";}
}//我们还可以在接口中定义静态方法,使用static关键字,也可以提供实现。
public interface StaticFunctionInterface {static String staticFunction() {return "static function";}
}


【3】方法引用:通常与 Lambda表达式联合使用,可以直接引用已有 Java类或对象的方法。
【4】重复注解:在 Java 5中使用注解有一个限制,即相同的注解在同一位置只能声明一次。Java 8 引入重复注解,这样相同的注解在同一地方也可以声明多次。重复注解机制本身需要用@Repeatable注解。Java 8在编译器层做了优化,相同注解会以集合的方式保存,因此底层的原理并没有变化。
【5】扩展注解的支持:Java 8 扩展了注解的上下文,几乎可以为任何东西添加注解,包括局部变量、泛型类、父类与接口的实现,连方法的异常也能添加注解。
【6】Optional:Java 8 引入 Optional 类来防止空指针异常,Optional 类最先是由 Google 的 Guava项目引入的。Optional类实际上是个容器:它可以保存类型T的值,或者保存null。使用Optional类我们就不用显式进行空指针检查了。

Optional<String> str = Optional.of("test");
//1、判断str是否为null,如果不为null,则为true,否则为false
if (str.isPresent()) {//get用于获取变量的值,当变量不存在的时候会抛出NoSuchElementException,如果不能确定变量一定存在值,则不推荐使用str.get();
}



【7】Stream:Stream API 是把真正的函数式编程风格引入到 Java中。其实简单来说可以把 Stream理解为 MapReduce,当然Google 的 MapReduce的灵感也是来自函数式编程。她其实是一连串支持连续、并行聚集操作的元素。从语法上看,也很像 Linux的管道、或者链式编程,代码写起来简洁明了,非常酷帅!
【8】Date/Time API (JSR 310):Java 8 新的 Date-Time API (JSR 310)受Joda-Time的影响,提供了新的 java.time包,可以用来替代 java.util.Date和 java.util.Calendar。一般会用到 Clock、LocaleDate、LocalTime、LocaleDateTime、ZonedDateTime、Duration这些类,对于时间日期的改进还是非常不错的。
【9】JavaScript 引擎 Nashorn:Nashorn允许在 JVM上开发运行 JavaScript应用,允许 Java与 JavaScript相互调用。
【10】Base64:在 Java 8中,Base64 编码成为了Java类库的标准。Base64 类同时还提供了对URL、MIME友好的编码器与解码器。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 第一次面试准备

    我呢最近这一周都在找实习找工作,在周三周四时候投递了很多简历,估计收到的疫情的影响,目前只收到一家公司的面试邀请。我真的 好像去实习呀,好像去实习呀!为了准备好实习,这两天临时集中突击一下,面试题。。。。。祝我好运!!! 面试复习第一弹: 1:什么是同步逻辑什…...

    2024/5/5 19:50:38
  2. 使用matplotlib在一张图上画多条曲线

    做数据分析,还有机器学习的收敛性,准确性分析时,往往需要将一些数据图形化,以曲线的形式显示出来,下面就介绍两种方式来实现这个小问题,一种是object-oriented面向对象的,另一种是基于plt的。下面这个方式是面向对象的方式:import numpy as np import matplotlib.pyplo…...

    2024/4/27 19:07:15
  3. python基础编程:关于python中plt.hist参数的使用详解

    今天小编就为大家分享一篇关于python中plt.hist参数的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 如下所示: matplotlib.pyplot.hist( x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype=ubar…...

    2024/4/18 22:40:16
  4. python基础教程:在Python下利用OpenCV来旋转图像的教程

    这篇文章主要介绍了在Python下利用OpenCV来旋转图像的教程,代码和核心的算法都非常简单,需要的朋友可以参考下 OpenCV是应用最被广泛的的开源视觉库。他允许你使用很少的代码来检测图片或视频中的人脸。 这里有一些互联网上的教程来阐述怎么在OpenCV中使用仿射变换(affine tra…...

    2024/5/5 17:17:18
  5. python基础教程:python、PyTorch图像读取与numpy转换实例

    今天小编就为大家分享一篇python、PyTorch图像读取与numpy转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 Tensor转为numpy np.array(Tensor) numpy转换为Tensor torch.Tensor(numpy.darray) PIL.Image.Image转换成numpy np.array(PIL.Image.Image…...

    2024/4/17 8:30:59
  6. 一个用于嵌入式开发的简单可靠的消息系统-STOpen消息系统

    在一般中低端的嵌入式系统里面,程序要么是跑大循环,要么是跑一个简单的操作系统(比如ucos,rtthread,freertos等等),简单和效率是第一要素,毕竟系统硬件资源有限。 要在这方寸之间,施展十八般武艺,实属具有一定的挑战性。 我们实现了一个简单的类windows的消息系统,让…...

    2024/5/5 21:45:55
  7. python基础编程:Python中turtle作图示例

    这篇文章主要介绍了Python中turtle作图示例,分享了几则turtle作图的小实例,具有一定参考价值,需要的朋友可以了解下 在Python里,海龟不仅可以画简单的黑线,还可以用它画更复杂的几何图形,用不同的颜色,甚至还可以给形状填色。 一、从基本的正方形开始 引入turtle模块并创…...

    2024/4/17 8:30:29
  8. python基础教程:从局部变量和全局变量开始全面解析Python中变量的作用域

    无论是以类为基础的面相对象编程,还是单纯函数内部变量的定义,变量的作用域始终是Python学习中一个必须理解掌握的环节,下面我们从局部变量和全局变量开始全面解析Python中变量的作用域,需要的朋友可以参考下 理解全局变量和局部变量 1.定义的函数内部的变量名如果是第一次出现…...

    2024/4/23 14:15:24
  9. 大数据与云计算之间的关系是怎样的?

    如今,两种主流技术已成为IT领域关注的焦点-大数据和云计算。根本不同的是,大数据只涉及处理海量数据,而云计算则涉及基础架构。但是,大数据和云技术提供的简化功能是其被大量企业采用的主要原因。例如,亚马逊的“ Elastic Map Reduce”演示了如何利用Cloud Elastic Comput…...

    2024/5/5 21:53:45
  10. 您应该知道的101个大数据术语

    由于每天都会产生大量的数据,因此了解大数据的复杂性变得至关重要。如果您打算进入大数据星球,则应该熟悉大数据术语。这些术语将帮助您深入了解大数据世界。因此,让我们从术语大数据本身开始-由于业务专业人员,项目,从业人员和供应商以不同的方式来理解“大数据”,因此很…...

    2024/4/23 14:15:25
  11. BFS/DFS基本代码实现

    今日初学,帮助理解 bfs基本代码 #include<stdio.h> #include<iostream> #include<queue> using namespace std; int dri4[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};struct node {int i,j;//坐标int t;//遍历个数 };int vis[105][105];//标记数组(是否遍历) int …...

    2024/4/23 14:15:21
  12. python中文分词教程之前向最大正向匹配算法详解

    中文分词是中文文本处理的一个基础性工作,然而长久以来,在Python编程领域,一直缺少高准确率、高效率的分词组件。下面这篇文章主要给大家介绍了关于python中文分词教程之前向最大正向匹配算法的相关资料,需要的朋友可以参考下。 前言 大家都知道,英文的分词由于单词间是以…...

    2024/4/23 14:15:23
  13. 揭秘大数据时代秒级查询响应引擎的架构设计

    近年来,大数据技术发展迅速,从过去的 Hive、Spark,到现在的 Flink、ClickHouse、Iceberg 等,各种大数据技术推陈出新,不断演进大数据存储和引擎系统的架构,来适应大数据时代的海量数据处理需求。而随着技术的更迭,每次架构演进都需开发人员重构一次业务代码,既耗费了开…...

    2024/4/29 0:27:23
  14. Python使用requests发送POST请求实例代码

    本文研究的主要是Python使用requests发送POST请求的相关内容,具体介绍如下。 一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样: 请求行 请求报头 消息主体 HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式…...

    2024/4/23 14:15:19
  15. python 自动轨迹绘制的实例代码

    今天小编就为大家分享一篇python 自动轨迹绘制的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 用到的思维: 自动化思维,数据和功能分开处理,用数据驱动程序自动运行 接口化设计,数据与程序的对接方式要清晰明了 二维数据应用,应用维度组织数…...

    2024/4/23 14:15:24
  16. python 画3维轨迹图并进行比较的实例

    今天小编就为大家分享一篇python 画3维轨迹图并进行比较的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 一. 数据的格式 首先我们需要x,y,z三个数据进行画图。从本实验用到的数据集KITTI 00.txt中举例: 1.000000e+00 9.043680e-12 2.326809e-11 5.5…...

    2024/4/23 14:15:19
  17. Hadoop大数据开发基础系列:九、HiveQL

    一、HiveQL是什么? 1.HiveQL概述 Hive是一种数据仓库分析系统,前面我们也说到过,它主要是将SQL的查询过程通过MapReduce来完成 HiveQL本质上就是一种SQL。Hive通过HiveSQL去查询分析需要的内容,使不熟悉MapReduce的用户也可以很方便的利用SQL来查询、汇总并分析数据。 2.Hi…...

    2024/4/23 14:15:22
  18. 《原力计划【第二季】》第 4 周周榜揭晓!!!

    从2月21日开始《原力计划【第二季】— 学习力挑战》,已经到了最后一周的挑战,累计 14000+ 名博主参与了本次活动。 第 4 周共收到活动投稿18790 篇原创文章,经过层层筛选,最后选出以下 10 篇文章进入第 4 周周榜。 >>活动详情<< 恭喜入榜的 CSDN 博主,感谢你们…...

    2024/4/19 11:37:42
  19. 使用Docker-compose自动部署WordPress博客系统

    写在前面 系统环境:Ubuntu 18.04 LTS Docker版本:19.03.8 很多web教材都是以博客系统为例,讲解web的实践方法,在学习后,要制作出一个优秀的博客系统仍需要下不少功夫,那么,我们想要在短时间里构建起一个人的博客网站该该怎么办呢?当然是使用开源的博客系统,通过开源的…...

    2024/4/20 11:40:18
  20. keras自定义层

    当你在复现别人的代码或者有个新奇的点子需要自定义一个网络层时,希望这篇博客可以帮助到你! 主要有两种方法来自定义网络层:keras.core.lambda():简单实现,不包含可训练参数; 编写Layer继承类:可实现复杂网络层,可自定义可训练参数;1. keras.core.lambda() 如果只是对…...

    2024/4/17 8:31:47

最新文章

  1. 算法--动态规划

    动态规划&#xff08;Dynamic Programming, DP&#xff09;是一种算法设计技巧&#xff0c;用于解决具有重叠子问题和最优子结构性质的问题。通过将原问题分解为相对简单的子问题的方式来求解复杂问题&#xff0c;动态规划避免了计算重复子问题&#xff0c;从而提高了算法的效率…...

    2024/5/6 0:29:44
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 【C++】C++中的list

    一、介绍 官方给的 list的文档介绍 简单来说就是&#xff1a; list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中…...

    2024/5/5 8:49:36
  4. spark on hive

    由于spark不存在元数据管理模块&#xff0c;为了能方便地通过sql操作hdfs数据&#xff0c;我们可以通过借助hive的元数据管理模块实现。对于hive来说&#xff0c;核心组件包含两个&#xff1a; sql优化翻译器&#xff0c;翻译sql到mapreduce并提交到yarn执行metastore&#xf…...

    2024/5/5 3:54:38
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/4 23:55:17
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/4 18:20:48
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57