
面试题
文章平均质量分 93
zhangphh
欲戴王冠,必承其重
展开
-
常见设计模式
1、单例①、懒汉式public class SingleModel { private static SingleModel instance; private SingleModel() { } public static SingleModel getInstance(){ if (instance == null){ instance = new SingleModel(); } retur原创 2020-07-28 19:34:16 · 156 阅读 · 0 评论 -
基于Redis和RabbitMQ简单实现秒杀回顾
概述使用springboot + druid + redis + rabbitmq实现简单的秒杀系统,大致思路如下:①、启动服务,缓存预热,将需要被秒杀的商品加载进redis缓存中,使用redis简单的string数据类型,key为商品ID,value为商品数量;②、登录之后,选择可以秒杀的商品,可选操作有加入购物车和立即抢购;③、点击抢购之后首先根据所选的商品ID查询redis,看是否商品数量小于等于0,如果是,则直接返回商品已售罄,否则将请求加入rabbitmq队列;④、入队之后进行发送端发原创 2020-07-28 17:02:39 · 4116 阅读 · 1 评论 -
Spring解决循环依赖问题
概述这里的循环依赖说的是对象之间的循环依赖,如上图,A依赖于B,B依赖于C,C依赖于A,形成一个死循环。在Spring中循环依赖场景有两种:构造器的循环依赖;setter的循环依赖其中构造器的循环依赖是无法解决的,只能抛出BeanCurrentlyInCreationException异常;对于setter的循环依赖,spring采用提前暴露对象的方法解决。1、spring如何检查循环依赖Bean在创建的时候给这个Bean打上标志,如果递归调用回来发现正在创建中的话就说明循环依赖。3、原创 2020-07-23 19:54:03 · 320 阅读 · 0 评论 -
八大排序算法
常见的八大排序算法他们之间的关系如下:1、直接插入排序算法过程描述:当只有一个元素的时候是有序的,对于从第二个元素开始,逐个与前面构建的有序数列的每个元素进行比较,并且是与有序数列从后向前比较,当有序数列的指定位置值大于当前元素时,就将指定元素后移,直到找到目标位置,如下图:代码实现:public static void directInsertionSort(int[] array)...原创 2020-04-11 15:58:47 · 200 阅读 · 0 评论 -
SpringMVC工作原理及常见问题
1、SpringMVC工作原理图1、用户发起请求;2、DispactcherServlet接收到请求,并调用HandlerMapping查找处理器;3、HandlerMapping根据请求的URL找到处理器(可通过xml,注解进行查找),并返回给前端处理器DispatcherServlet;4、DispatcherServlet调用HandlerAdapter执行Handler;5、...原创 2020-04-08 12:04:20 · 174 阅读 · 0 评论 -
MySQL复习之索引
1、概述MySQL索引时MySQL高速运行的关键,索引可以大大提高MySQL的检索速度,如果MySQL没有实现索引算法当查询1000w数据时,只能暴力顺序检索,这显然不是我们想要看到的。2、MySQL索引底层数据结构的选择①、hash表哈希算法,是做快速检索的有效利器,可以把任意值通过哈希函数变为固定长度的地址哈希函数先计算出数据的哈希值,然后根据哈希值映射的地址找到具体的数据,这就是...原创 2020-03-23 13:41:38 · 205 阅读 · 0 评论 -
Java复习之类加载
1、概述当程序使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化这三个步骤来对该类进行初始化,如下图:2、类加载过程①、加载加载是将类的class文件读到内存中,并为之创建一个java.lang.Class对象,也就是说当程序使用任何类时,系统都会为之建立一个java.lang.Class对象。类的加载由类加载器提供,JVM提供的类加载器成为系统类加载器,我们也...转载 2020-03-19 12:03:44 · 173 阅读 · 0 评论 -
Java复习之JVM垃圾回收
1、概述垃圾回收,即释放垃圾占用的空间,防止内存泄漏,有效的使用有效的内存,对堆中已经死亡的和长时间不使用的对象进行清楚和回收。JVM运行时数据区见:JVM运行时数据区2、垃圾判断算法①、引用记数法给每一个对象添加一个计数器,有这个对象的引用时计数器就加一,引用失效时计数器减一,用此对象计数器是否为0来判断对象是否可被回收。此算法优点是实现简单,判断效率高;缺点是无法解决循环引用的问题...原创 2020-03-18 22:03:16 · 181 阅读 · 0 评论 -
Java复习之线程与并发一
1、线程与进程的区别进程时操作系统资源分配的基本单位,而线程是操作系统调用的基本单位;进程是一个独立的运行环境,它可以被看成一个程序或应用,线程是进程中执行的一个任务;一个进程可以有多个线程,同一个类的线程共享相同的内存空间;线程较之进程的切换开销小、速度快等特点2、使用多线程的原因充分利用资源,目前的计算机都是多核,多线程可以让程序在多个CPU上运行,对于单一的CPU,如果使用...原创 2020-03-15 11:24:52 · 152 阅读 · 0 评论 -
Java复习之NIO
1、IO与NIO区别NIO,即Non-blocking IO,是基于Channel和Buffer的,IO则是基于字节流和字符流的,也即是IO是面向流的,NIO是面向缓冲区的。对于NIO,数据总是从Channel读入Buffer和从Buffer写入Channel,而IO操作没有被缓存到任何地方;NIO允许异步的使用IO,当向缓冲区写入数据的时候,NIO允许线程做其他的事情,当数据写入到缓冲区后...原创 2020-03-13 15:58:40 · 146 阅读 · 0 评论 -
Java复习之杂项
1、泛型在Java中泛型是指把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊类型。使用泛型可以保证一个List、Set中只有一个类型,可以避免类型转换错误,泛型只在编译阶段有效,泛型在逻辑上可以看成是多个类型,但实质上是一个类型,下面的例子就可证实:public static void main(String[] args) { List<Integer&g...原创 2020-03-13 10:14:37 · 110 阅读 · 0 评论 -
Java集合复习之HashMap-JDK10
1、概述HashMap的底层实现是数组+链表+红黑树,JDK1.8之前的HashMap使用的是数组加链表,哈希函数取得再好也无法保证均匀分布,当哈希桶中有大量的数据的时候,HashMap就相当于一个单链表,时间复杂度为O(n,就失去了HashMap应有的优势,因此引入了红黑树,当哈希桶中的元素数量大于TREEIFY_THRESHOLD值时就转换为红黑树。2、几个属性// 创建 HashMap...原创 2020-03-12 11:29:44 · 115 阅读 · 0 评论 -
Java集合类复习之LinkedList-JDK10
1、概述LinkedList底层实现是双向链表,有一个头结点和一个尾结点,所以可以从头结点开始正向遍历,也可以从尾结点逆向遍历,并且可以针对头部和尾部做相应的操作。public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<...原创 2020-03-11 11:23:49 · 129 阅读 · 0 评论 -
Java集合类复习之ArrayList(JDK10)
1、集合与数组的区别数组,长度固定,只能存储相同类型的数据;集合,长度可变,可以存储不同类型的数据2、ArrayList①、ArrayList是一个动态数组,实现了List< E>, RandomAccess, Cloneable, java.io.Serializable接口;ArrayList实现了RandomAccess接口,打开此接口源码发现什么都没有定义,实现...原创 2020-03-10 20:29:10 · 184 阅读 · 0 评论 -
Java基础知识复习一
1、JDK,JRE,JVM三者之间的联系和区别①、JVM,即Java Virtual Machine,Java虚拟机JVM并不能识别.java文件,只能识别.class文件,JVM能识别.class文件中的字节码指令并调用操作系统完成指定的个动作,所以JVM是Java跨平台的核心。②、JRE,Java Runtime Environment,Java运行时环境JRE主要包含2个部分,JVM...原创 2020-03-10 10:15:30 · 219 阅读 · 0 评论 -
Redis面试题汇总一
1、什么是Redisredis本质是一个key-value类型的内存数据库,整个数据库统统加载在内存中进行操作,定期通过异步操作把数据库数据flush到硬盘上保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。除此之外,redis还支持多种数据结构(如list,string,set,zset,hash)。2、Redis...原创 2019-12-11 12:48:00 · 207 阅读 · 0 评论 -
MySQL面试题总结(一)
1、索引概念简单来说索引是一个帮助我们快速查找数据的数据结构。对于MySQL数据库来说,索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候,索引可以大大加快查询的速度,这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。2、索引具体采用哪种数据结构索引采用的数据结构和数据库采用...原创 2019-11-19 12:37:20 · 143 阅读 · 0 评论 -
SpringMVC面试题总结
1、什么是Spring MVC ?简单介绍下你对springMVC的理解?Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。2、SpringMVC的流程?(1)用户发送请求至前端控制器...转载 2019-11-13 16:42:39 · 175 阅读 · 0 评论 -
Spring面试题总结
一、Spring相关面试题1、Spring是什么Spring是一种轻量级的IOC和AOP框架,是为Java应用程序提供基础性服务的一套框架,目的是为了大大简化企业级应用开发,它使得开发者只需要关心业务需求。常见的配置有三种:基于xml;基于注解;基于Java。主要由以下几个模块组成:①、Spring Core:核心类库,提供IOC服务;②、Spring Context:提供框架式的Bea...转载 2019-11-13 16:30:49 · 172 阅读 · 0 评论 -
Java面试题之线程池
1、什么是线程池?线程池,也即是存储多个线程的集合,是一种多线程处理形式。如果每个请求都新创建一个线程来处理,那么当很多请求一块来时服务器资源将会很快耗尽,所以出现线程池这一技术,避免频繁的线程创建和销毁。2、为什么使用线程池?线程的创建和销毁是很耗费资源的,这些时间可能会比处理业务的时间还要长,因此,频繁的创建和销毁线程再加上业务逻辑处理时间可能会导致系统资源不足,所以可以考虑剔除频繁创建...原创 2019-11-07 13:20:47 · 261 阅读 · 0 评论 -
Java面试题之ThreadLocal
1、ThreadLocal是什么?ThreadLocal类并不是用来解决多线程环境下的共享变量问题,而是用来提供线程内部的共享变量,在多线程环境下,可以保证各个线程之间的变量互相隔离、相互独立。在线程中,可以通过get()/set()方法来访问变量。ThreadLocal实例通常来说都是private static类型的,它们希望将状态与线程进行关联。这种变量在线程的生命周期内起作用,可以减少同...原创 2019-11-04 21:37:37 · 727 阅读 · 0 评论 -
Java面试题之String常见问题
1、创建String的两种方式String s1 = "abc";String s2 = new String("abc");2、String不能被继承,因为String类被final修饰String的对象一旦被创建,则不能修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不变,因为String是不可变类,所以可以安全的用于多线程中。3、比较两个字符串的方法Stri...原创 2019-11-04 14:08:49 · 324 阅读 · 0 评论