![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
面试题大汇总
文章平均质量分 59
在网上找各类的面试题,总结,持续更新中。
hello_cmy
这个作者很懒,什么都没留下…
展开
-
再次理解sprngBoot的自动装配
我们找到spring.factories文件。我们能看到spring.factories文件中也是以key-value的形式来写的,以逗号分隔开来。我们以ServletWebServerFactoryAutoConfiguration为例最终的落地点是在ServerProperties类上,我们打开来看一看。@ConfigurationProperties,它的作用就是从配置文件中绑定属性到对应的bean上。而@EnableConfigurationProperties负责导入这个已经绑定原创 2021-08-16 14:29:36 · 211 阅读 · 0 评论 -
HTTP协议
目录1.1 什么是HTTP1.2 两个时代1.3 Http请求1、请求行2、消息头1.4 Http响应1、响应体2、响应状态码1.1 什么是HTTPHTTP (超文本传输协议) 是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。有超文本,那肯定也有文本,简单解释一下文本和超文本。文本:html,字符串 …超文本:图片,音乐,视频,定位,地图 …原创 2021-04-01 11:42:01 · 487 阅读 · 0 评论 -
HashMap的三种遍历方式
集合在应用以及面试中都占有很重要的位置,今天就说说HashMap的遍历方式,偶然在一次面试中被问到的。关于具体的实现,可以看源码。import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class Test { public static void main(String[] args) { HashMap<String, String> hashMap =原创 2021-03-09 17:11:13 · 11804 阅读 · 4 评论 -
自增主键用完了怎么办?
这篇咱们来聊一聊mysql表的主键问题。先抛出两个问题:问题一:是使用uuid还是自增主键?问题二:如果自增主键用完了,如何解决?那么遇到这种问题怎么来回答呢?我们这篇文章就来解决一下上述问题。问题一:是使用uuid还是自增主键?最好是用自增主键,主要是以下两个原因:1. 如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。 2. 如果使用非自增主键(如uuid),由于每次插入主键的值近似于随机,因此每次新纪原创 2021-01-19 15:19:23 · 904 阅读 · 0 评论 -
搞定ConcurrentHashMap!
目录1、JDK7中数据结构2、形象理解 ConcurrentHashMap3、核心源码分析4、JDK8的改进5、涉及的其他问题1、JDK7中数据结构ConcurrentHashMap是由Segment数组与HashEntry数组构成。每个ConcurrentHashMap持有一个Segement数组。而每个Segment对象由一个HashEntry数组构成。HashEntr数组其实就是一个小的...原创 2020-04-26 20:55:56 · 371 阅读 · 0 评论 -
解决ABA问题,原子引用
解决ABA问题,原子引用整体思想是乐观锁。一般的实现乐观锁的方式就是记录数据版本。 线程在提交前,根据版本号来判断是否冲突。看代码:package com.cc.cas;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicStampedReference;public cla...原创 2020-04-22 15:22:54 · 438 阅读 · 2 评论 -
CAS问题
CAS什么是CAScompareAndSet的缩写,比较并交换。如果达到期望值,那么就更新,否则,就不更新。通过例子来解释一下:package com.cc.cas;import java.util.concurrent.atomic.AtomicInteger;public class CASDemo { public static void main(String...原创 2020-04-22 14:40:03 · 298 阅读 · 0 评论 -
生产者与消费者问题(synchronized版和JUC版)
生产者和消费者问题synchronized版package com.cc.pc;/*** 线程之间的通信问题:生产者和消费者问题! 等待唤醒,通知唤醒* 线程交替执行 A B 操作同一个变量 num = 0* A num+1* B num-1*/public class A { public static void main(String[] args) { ...原创 2020-04-20 16:54:08 · 249 阅读 · 0 评论 -
HashTable和HashMap区别
1、继承的父类不同Hashtable继承自Dictionary类。HashMap继承自AbstractMap类。但二者都实现了Map接口。public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {}public...原创 2020-03-27 13:01:37 · 187 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier 和 Semaphore
CountDownLatch、CyclicBarrier 和 Semaphore可以参考JDK1.8的帮助文档。1、CountDownLatchpackage com.cc.add;import java.util.concurrent.CountDownLatch;public class CountDownLatchDemo { public static void m...原创 2020-04-15 11:37:29 · 106 阅读 · 0 评论 -
创建线程的四种方式
有四种方式创建线程:继承Thread类实现Runnable接口实现Callable接口创建线程池(重要,单独讲解)继承Thread类public class MyThread extends Thread { @Override public void run() { System.out.println(Thread.currentThread...原创 2020-04-15 10:46:40 · 142 阅读 · 0 评论 -
帮你轻松搞定ArrayList问题!
目录1、简单说一下ArrayList用来干嘛的?2、LinkedList、 Vector 与ArrayList3、ArrayList扩容机制4、ArrayList怎么进行新增操作的5、 ArrayList(int initialCapacity)会不会初始化数组大小?6、ArrayList怎么进行删除操作的?1、简单说一下ArrayList用来干嘛的?ArrayList是数组列表,主要用来装载...原创 2020-04-14 13:58:00 · 165 阅读 · 0 评论 -
解决集合List、set、Map不安全问题
目录1、 List不安全2、 Set不安全3、 Map不安全1、 List不安全package com.cc.unsafe;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.UUID;import java.util.concurrent.Co...原创 2020-04-11 12:49:28 · 194 阅读 · 0 评论 -
在浏览器中输入url地址->>显示主页的过程
这个题也是面试常客!总体来说分为下面几个过程:DNS解析TCP连接发送HTTP请求服务器处理请求并返回HTTP报文浏览器解析渲染页面连接结束...原创 2020-04-11 10:39:43 · 588 阅读 · 0 评论 -
TCP,UDP协议的区别
UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 却是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服...原创 2020-04-11 10:39:06 · 119 阅读 · 0 评论 -
TCP三次握手和四次挥手
这道题相信你肯定看到过很多遍,面试常客。趁着还依稀记得上学期网络老师讲的(一个好老师对一门课的重要性显而易见),今天总结一下。TCP报文的头部结构上图中有几个字段需要重点介绍下:(1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。(2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。...原创 2020-04-11 10:37:36 · 112 阅读 · 0 评论 -
计算机网络体系结构
简单的介绍一下各层的作用。应用层应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文。...原创 2020-04-11 10:34:51 · 231 阅读 · 0 评论 -
浅显了解MySQL索引
目录1、什么是索引2、索引的分类3、Mysql如何为表字段添加索引?4、最左前缀原则索引在数据库中是很重要的一个点,很重要,很重要,很重要!重要的事情说三遍!1、什么是索引MySQL官方都索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。一句话来解释:索引是数据结构。2、索引的分类主键索引(PRIMARY KEY) 唯一的标识,主键不可重...原创 2020-04-10 15:56:21 · 106 阅读 · 0 评论 -
MySQL存储引擎
MySQL存储引擎1、常用命令查看存储引擎#查看MySQL提供的所有存储引擎show engines;#查看默认的存储引擎show variables like '%storage_engine%';可以自己在电脑上查看一下,MySQL当前默认的存储引擎是InnoDB。在5.5版本之前默认的存储引擎是MyISAM。2、MyISAM 和 InnoDB 区别是否支持行级锁 ...原创 2020-04-10 15:52:38 · 130 阅读 · 0 评论 -
事务、并发事务的问题、事务隔离
目录1、什么是事务2、事务的四大特性(ACID)3、并发事务带来的问题4、事务隔离1、什么是事务事务是逻辑上的一组操作,要么都执行,要么都不执行。比如转账例子。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保...原创 2020-04-10 10:09:04 · 251 阅读 · 0 评论 -
并发编程的三个重要特征
并发编程的三个重要特征原子性 : 一个操作或者多次操作,要么所有的操作全部都得到执行并且不会收到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行。synchronized 可以保证代码片段的原子性。可见性 :当一个变量对共享变量进行了修改,那么另外的线程都是立即可以看到修改后的最新值。volatile 关键字可以保证共享变量的可见性。有序性 :代码在执行的过程中的先后顺序,Java...原创 2020-04-08 13:08:39 · 1274 阅读 · 0 评论 -
Lock锁
Lock锁经典卖票例子传统Synchronized来实现。package com.cc.demo1;/** * 真正的多线程开发,公司中的开发,降低耦合性 * 线程就是一个单独的资源类,没有任何附属的操作! * 1、 属性、方法 */public class SaleTicketDemo1 { public static void main(String[] arg...原创 2020-04-08 13:01:20 · 146 阅读 · 0 评论 -
Synchronized关键字
Synchronized关键字1、对Synchronized的了解synchronized关键字解决的是多个线程之间访问资源的的同步性。synchronized可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。2、使用synchronized修饰实例方法:作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁。修饰静态方法: 访问静态 synchronized 方...原创 2020-04-08 12:22:39 · 105 阅读 · 0 评论 -
JMM
JMM对 volatile的理解Volatile是Java虚拟机提供轻量级同步机制。1、保证可见性。2、不保证原子性3、禁止指令重排什么是JMMJMM:Java内存模型,不存在的东西。来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序(如C 和C++等)直接使用物理硬件和操作系统的内存模型。因此,由于不同...原创 2020-04-07 13:00:37 · 275 阅读 · 0 评论 -
volatile
volatile1、保证可见性2、不保证原子性3、禁止指令重排1、保证可见性package com.cc.tvolatile;import java.util.concurrent.TimeUnit;public class JMMDemo { //不加 volatile 程序就会死循环 //加 volatile 可以保证可见性 private vo...原创 2020-04-07 12:59:21 · 120 阅读 · 0 评论 -
线程池
三大方法,7大参数,4中拒绝策略池化技术程序的运行,本质:占用系统的资源! 优化资源的使用!=>池化技术线程池、连接池、内存池、对象池///… 创建、销毁。十分浪费资源池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创...原创 2020-04-06 15:17:43 · 165 阅读 · 0 评论 -
单例模式
1、单例模式定义保证一个类仅有一个实例,并提供 一个访问他的全局访问点。2、为什么要使用单例模式在我们的系统中,有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。事实上,这一类对象只能有一个实例,如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常、资源使用过量、或者不一致性的结果。简单来说使用单例模式可以带来...原创 2020-04-06 15:13:47 · 104 阅读 · 0 评论 -
为什么调用start()方法,不直接调用run()方法
为什么调用start()方法,不直接调用run()方法new 一个 Thread,线程进入了新建状态; 调用 start() 方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。 start() 会执行线程的相应准备工作,然后自动执行 run() 方法的内容,这是真正的多线程工作。 而直接执行 run() 方法,会把 run 方法当成一个 main 线程下的普通方法去执...原创 2020-04-04 11:47:06 · 566 阅读 · 0 评论 -
并发与并行的区别
并发与并行的区别并发:同一时间段,多个任务都在执行(单位时间内不一定同时执行)并行:单位时间内,多个任务同时执行。原创 2020-04-04 10:35:52 · 175 阅读 · 0 评论 -
再理解进程与线程
进程进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序就是一个进程从旁创建,运行到消亡的过程。在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。线程线程是比进城更小的执行的单位。一个进程在其执行过程中可以产生多个线程。但是与进程不同的是,同类的多个线程共享进...原创 2020-04-04 09:57:17 · 124 阅读 · 0 评论 -
进程与线程的区别?
1.什么是进程?是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是系统中正在运行的一个程序,程序一旦运行就是进程。进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间...原创 2019-12-03 09:02:38 · 310 阅读 · 0 评论 -
HashSet如何检查重复
HashSet如何检查重复当把对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,同时也会与其他加入的对象的hashcode值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同hashcode值的对象,这时会调用equals()方法来检查hashcode相等的对象是否真的相同。如果两者相同,HashSet就不...原创 2020-04-03 16:57:30 · 3534 阅读 · 3 评论 -
HashMap和HashSet的区别
HashMap和HashSet的区别学习源码,是再正确不过的方式了。咱们看一下HashSet的源码,底层是基于HashMap实现的。HashSet的源码很少,除了clone()、writeObject()、readObject() 是HashSet不得不自己实现,其他都是调用HashMap方法。HashMapHashSet实现了Map接口实现Set接口存储键值...原创 2020-04-03 10:57:21 · 154 阅读 · 0 评论 -
Java中的异常处理
Java异常类层次结构图在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大量子类。Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示...原创 2020-04-03 09:48:02 · 129 阅读 · 0 评论 -
final、finally、finalize的区别
final、finally、finalize的区别1、final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。例如:String 类、Math类等。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重写,但是能够...原创 2020-04-02 16:45:39 · 132 阅读 · 0 评论 -
static关键字详解
static关键字static 可以修饰变量,方法,代码块和内部类。1 、static修饰变量static修饰成员变量时:static修饰成员变量时,那么该成员变量的数据就是一个共享的数据.静态成员变量的访问方式:方式一: 使用对象进行访问。对象.属性名方式二:可以使用类名进行访问。类名.属性名注意:非静态成员变量不能类名直接访问,只能使用对象进行访问。千万不要为...原创 2020-04-01 13:15:29 · 141 阅读 · 0 评论 -
为什么重写equals方法要重写hashCode方法
为什么重写equals方法要重写hashCode方法这两个方法都是Object类中的。首先先解释一下这两个方法。上源码吧。equals()public boolean equals(Object obj) { return (this == obj);}可以看到,该方法就是判断两个对象是否是同一个对象。底层是使用 == 来实现的。咱们也知道,== 作用于引用类型,比较的是两个对...原创 2020-03-29 18:18:56 · 121 阅读 · 0 评论 -
String, StringBuffer与StringBuilder的区别
String, StringBuffer与StringBuilder的区别先看一下整体的继承结构:可知, StringBuilder与 StringBuffer都继承自 AbstractStringBuilder。1. 可变与不可变从源码中,我们可以看到String类中是使用字符数组来保存字符串的。private final char value[];此字符数组用final来修...原创 2020-03-29 15:04:34 · 73 阅读 · 0 评论 -
Java 面向对象三大特性:封装 继承 多态
Java 面向对象三大特性:封装 继承 多态封装封装指的是属性私有化,根据需要提供setter和getter方法来访问属性。即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问级别。封装目的:增强安全性和简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员。继承继承是指将多个相同的属性和方法提取出来,新建一个父类。Java中一个类只能继承一个父类,且只能继...原创 2020-03-29 11:52:04 · 174 阅读 · 0 评论 -
Integer面试题
package com.cc.demo1;public class IntegerTest { public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integ...原创 2020-03-29 09:50:52 · 181 阅读 · 0 评论