2022届秋招高频面试真题汇总,千题奉送!!!- 后端篇
在2021年的,最后一天,GoGoCoder送给大家一份面试真题汇总,算是送给大家的新年礼物啦,大家新年快乐呀!
目前,后端面经真题频度汇总,共涉及了180家公司的655多篇前端面经,题目频度统计达5947条,涵盖Java、数据结构、操作系统、计算机网络、数据库、Redis、MQ、软件测试等多个科目。同时,我们将梳理出来的题目,按照面试题目频度排好序,分享给大家,让你无需扒面经,就能全盘掌握面试考点,赢在面试准备的起跑线上。
JAVA
Java并发:
- Java线程池核心参数与工作流程,拒绝策略 107
- volatile关键字的原理与作用 61
- Synchronized和Lock的实现原理与区别 54
- synchronized原理 45
- ConcurrentHashMap原理,如何保证线程安全 44
- Java中创建线程的几种方式 36
- CAS操作原理与实现 32
- AQS实现机制 30
- Threadlocal原理、使用场景、内存泄漏问题 24
- Java中的锁类型,区别以及锁升级 24
- 线程的状态及转移 23
- Java如何保证线程安全 21
- 悲观锁与乐观锁及其区别 19
- Synchronized锁升级的策略 16
- wait和sleep的区别 14
- 如何设置线程池参数 13
- hashmap线程不安全问题 12
- Java中线程同步的方式有哪些? 11
- volatile与synchronizede的区别? 11
- RetreenLock原理 10
- 线程池的实现原理 8
- synchronized可以锁的内容 8
- ReentrantLock原理 7
- JUC包下常用的类 6
- 可重入锁的实现原理 5
- 实现多线程的几种方式? 5
- CountDownLatch原理 5
- 公平锁与非公平锁的实现 5
- 简述一下JMM 4
- 多线程三大特性 4
- 简述什么是自旋锁 4
- 为什么要用线程池? 3
- 为何缓存分三级而不是两级? 3
- 读写锁实现方式 3
- ArrayList线程安全吗?多线程环境下怎么使用ArrayList? 3
- java自带的4种线程池 3
- 简述线程的私有资源与共享资源 2
- AtomicInteger底层实现 2
- 线程池优点,线程池里线程报的异常如何抓取,在线程池外捕获 2
- 列举几种阻塞队列并对比分析 2
- wait和notify为什么定义在Object类? 2
- 如何得到线程池的异步处理结果? 2
- moniter监视器的底层原理 2
- fork/join及countdownlatch区别 2
- 线程的start方法与run方法作用 2
- CAS 有哪些参数 2
- 线程什么情况下会中断 2
- 最大核心线程数怎么定 2
- 为什么Synchronized是重量级锁? 2
- 读写并发,若读多写少,如何设计实现? 2
- 线程池一直拒绝线程任务,如何处理? 1
- sychronized为什么是锁对象而不是锁线程 1
- 核心线程和非核心线程是否有区别 1
- 简述Happen before 原则 1
- 线程安全加锁的粒度问题 1
- 简述wait与block及其区别 1
- 线程间通信 1
- 简述如何进行锁粗化 1
- 手写线程池 1
- 简述什么是内存屏障 1
- 为什么不推荐使用Executors创建线程池? 1
- concurrentHashMap 的size是怎么计算的 1
- Java线程池状态与切换 1
- Thread.sleep(0)的作用 1
- 多线程切换需要保存哪些内容 1
- IO密集型程序优化 1
- 子线程异常,父线程会如何处理? 1
- "介绍一下对多线程的理解(宏观理解,并尽量暴露自己熟悉的知识点)" 1
- 手写线程安全,大小有限、超时放弃的队列 1
- Thread与Runnable的区别 1
- 锁都有哪些实现方式? 1
- Java并发执行程序的有哪些解决方案? 1
- 单核机器多线程需不需要加锁? 1
- 偏向锁升级为轻量级的锁,如何考虑线程暂停的安全点 1
- 定时任务的实现原理 1
- Java的线程和操作系统的线程的区别 1
- 线程池的核心线程是否可以被回收,如何回收? 1
- 如何立刻终止线程? 1
- 线程池默认的阻塞队列是什么 1
- callable和runable的区别 1
- Executor,Executors工具类如何进行线程管理 1
- 如何实现两个线程交替进行 1
- 多线程如何进行参数传递? 1
- 如何主动中断一个线程 1
- Synchronized锁类对象和this的区别 1
- 什么是死锁以及排查方式 1
- ConcurrentHashMap get、set都加锁了吗?用的是什么共享变量 1
- CAS如何解决ABA问题 1
- 手写多线程的Demo 1
Java基础 :
- 类加载机制 47
- ‘==’与equals区别 45
- 接口与抽象类的区别 37
- 重写和重载的区别 35
- String与StringBuffer,StringBuilder区别 26
- 双亲委派机制 24
- Java反射机制 24
- final,finally,finalize区别?finalize作用 21
- 深拷贝与浅拷贝区别 19
- final关键字特性 13
- Java基本数据类型 13
- 面向对象的三大特征 11
- java的泛型 10
- Object类中的基本方法 10
- Java的强,软,弱,虚引用以及软引用使用场景 9
- 多态的实现原理 9
- Java的动态代理 8
- static关键字的功能 8
- try、catch、finally执行顺序 7
- 简述Java的封装、继承、多态 7
- Java中的有序性、可见性、原子性的理解 6
- jdk和jre的区别 6
- 简述为什么要重写equals和hash方法 6
- 简述自动装箱与自动拆箱 6
- 简述Java的异常类型 6
- 值传递与引用传递的区别 6
- Java中的exception分为哪两类?io异常属于哪一种 5
- hashcode和equals的区别 4
- java 如何实现深拷贝 4
- new一个对象的过程 4
- &和&&的作用与区别 4
- java与c++的区别 3
- 说一下函数重载 3
- const关键字作用 3
- varchar和char的区别 3
- 重写equals方法的注意点 2
- 类继承和接口的共性 2
- static关键字 2
- String为什么是不可变的 2
- Cglib代理 2
- system.arraycopy 是深拷贝吗 2
- Java如何解决循环引用问题 2
- Error和Exception的区别 2
- 静态变量和成员变量的区别 2
- notify和notifyall的区别 2
- Java中float或者Double是否可以用来表示金额? 2
- 程序初始化的步骤:static和一般的代码块、方法的执行顺序 2
- jdk代理与cglib代理的区别 2
- 对于JavaSE的理解 2
- 函数式编程的理解 2
- MD5加密算法的原理 1
- 如何自定义类加载的过程 1
- 列举String类中的方法 1
- java程序是如何运行起来的? 1
- public,private,protected,default权限控制的区别 1
- continue与break的区别 1
- Java代码编译方式与程序执行方式 1
- 1.0+2.0 != 3.0 的底层原理 1
- 内部类与静态类的本质区别(字节码角度) 1
- 分析说明泛型擦除 1
- 使用private修饰的方法 ,子类是否能够重写 1
- Java中序列化与反序列化作用与使用场景? 1
- 一个对象包含一个int,总共占多大内存? 1
- Stream实现数组相加 1
- 类的对象是在堆上还是在栈上 1
- Java内部类能不能访问外部类私有成员变量 1
- System.arraycopy()、Arrays.copyOf()的区别 1
- 简述如何解决Java包冲突 1
- this和super的区别 1
- String可以被继承吗 1
- 如何理解Java的跨平台语言特性? 1
- Java实现对象排序的几种方式 1
- int与long的区别 1
- 接口和抽象类是否可以写静态方法 1
- Java中是否可以有同名类 1
- 接口是否可用public关键字 1
- 四种访问修饰符,对子类、同包、不同包下的可见性 1
- char能存储汉字吗,int的取值范围 1
- 怎么让Interface变成FunctionalInterface 1
- Java的类卸载机制 1
- 静态代理和动态代理的区别 1
- JDK1.8新特性 1
- Arrays.sort()用的哪种排序算法 1
- Stream的使用 1
Java容器:
- hashmap底层原理(数据结构、为什么用红黑树等) 135
- ArrayList与LinkedList区别 57
- Java集合类(线程安全/不安全) 57
- hashmap与concurrenthashmap的区别 21
- HashMap与HashTable区别 21
- HashMap的扩容方式 19
- Arraylist的扩容过程 16
- HashMap1.8比1.7版本对比 14
- Hash碰撞的解决办法 14
- Hashset底层源码分析 12
- List和Set底层继承或实现什么接口(对比map) 10
- hashmap和treeMap的比较 9
- ArrayList底层实现原理 9
- Hashmap put对象时的注意点 8
- 简述hashmap的put方法(注意扩容) 6
- linkedHashmap和hashmap比较 6
- Map的几种实现形式与横向对比 5
- 如何实现一个hashtable 5
- Set的底层结构 4
- concurrenthashmap 1.8前后有什么区别 4
- 简述hashmap为什么不安全 3
- hashmap转换为红黑树的条件 3
- HashMap 的长度为什么是2的幂次方 3
- ArrayList中有16个元素,插入删除操作性能分析 3
- vector的扩容机制 3
- Vector、CopyOnWriteArrayList 用哪个比较好 2
- 说明遍历集合的方法 2
- List和Map的区别 2
- 手写实现ArrayList 2
- hashmap的长度为什么是2的幂次 2
- ArrayList和LinkedList的使用场景和遍历插入时间复杂度? 2
- 简述Set和Map的区别 1
- ArrayList底层是怎么排序的 1
- hashmap链表加锁的话是否线程安全 1
- LinkedList为什么遍历慢? 1
- ConcurrentHashMap在哪里使用了CAS 1
- List的实现类有哪些? 1
- 如果单个同的元素数量很大,Map要怎么设计? 1
- HashMap中整数作为Key,怎么设计比较好? 1
- 手写实现LinkedList 1
- hashmap最大高度是多少? 1
- HashMap的键值是否可以为空/Null 1
- Entry数组是否可以用链表替代 1
- Hash桶很多但元素少,如何快速遍历? 1
- hashtable和concurrenthashmap的区别? 1
- 列举CopyOnWriteArrayList的适用场景 1
- PriorityQueue底层数据结构 1
- 如何处理hashmap遍历过程中删除元素的特殊情况 1
- HashMap负载因子为什么是0.75? 1
- Concurrenthashmap如何获取size() 1
- sortset底层数据结构 1
- 数组和链表是否可以作为hashmap的key 1
- treeMap为什么要用红黑树 1
- 为什么arraylist查询效率高,linkedlist插入效率高 1
- Map中Key为对象的注意点 1
- HashTbale的底层实现原理 1
Java虚拟机:
- Jvm内存模型 112
- Jvm垃圾回收算法 60
- Jvm垃圾回收器 46
- 整体介绍垃圾回收 40
- Jvm调优参数与实例 14
- 遇到的OOM问题,如何定位、排查与解决 14
- CMS与G1垃圾回收器的区别 12
- 如何判断垃圾对象? 8
- 堆和栈的区别 8
- 可达性分析 7
- GC Root有哪几种? 7
- CMS 垃圾回收的流程 7
- 介绍G1垃圾回收器 4
- 新生代和老年代的区别 4
- 什么时候发生GC 4
- 简述栈溢出情况 4
- 简述栈帧存储的内容 3
- 对象的生命周期(New出来 到GC ) 3
- 简述什么是内存泄漏 3
- JAVA1.8默认垃圾回收器 2
- 栈帧是线程私有的吗 2
- 标记清除和标记整理的区别 2
- 为什么年轻代用复制算法 2
- jps、jstat、jmap、jstack使用 2
- 为什么要把永久代换成元空间? 元空间使用直接内存的好处 2
- 垃圾对象是否立即回收? 2
- CMS垃圾回收器为什么进行两次停顿? 2
- 某些垃圾回收器为什么需要STW(Stop The World)? 2
- 频繁gc会有什么问题 2
- 简述虚拟机栈包含哪些内容 2
- GC一定会发生停顿吗? 1
- JVM能够提供多大内存? 1
- 新生代为什么分为Eden,From Survive,To Survive三个区 1
- Full GC 过多如何排查分析? 1
- 简述Minor GC 与 Full GC及其区别 1
- Jvm1.7 与 1.8的区别 1
- 线程共享的位置都哪些 1
- 垃圾回收为什么要分区? 1
- 新生代为什么设计eden与survivor两个区? 1
- CMS并发标记时,那些线程被允许执行? 1
- 三色标记法 1
- 哪些垃圾回收器需要STW(Stop The World)? 1
- 实例变量能否作为GC root 1
- 内存模型中堆和栈的区别 1
- CMS产生空间碎片后,将进行什么操作? 1
- 对象进入老年代的条件 1
- Jvm哪些内存区域不会产生内存溢出 1
- "如果触发新生代GC时,存活对象总量大于survivor区容量,JVM如何处理?" 1
- 新生代为什么默认设置年龄为15? 1
- 如果任务过多,线程池的阻塞队列会撑爆哪部分内存区域? 1
- JDK9采用哪种垃圾回收算法? 1
- 如何理解CMS垃圾回收器对CPU资源敏感? 1
- Jvm日志出现OOM问题,不能创建本地线程,分析原因,并给出解决办法 1
- 方法信息存储区域 1
- 简述一下JMM 1
Java框架:
- SpringAOP的底层原理 51
- SpringBean的生命周期 31
- Spring中IOC的底层原理 28
- SpringMVC工作流程 25
- SpringBoot的常用注解 24
- Spring如何解决循环依赖 22
- Spring中IOC与AOP底层原理与区别 21
- Spring、SpringMVC 、Springboot的区别 14
- spring的动态代理模式 14
- SpringBoot 自动装配机制 13
- JWT实现单点登录及流程描述 10
- spring ioc的设计思想和好处 8
- SpringBoot启动过程 8
- mybatis的一级二级缓存有什么区别 7
- @Transactional注解是怎么实现的 7
- 简述为什么要使用Spring?(Spring 优势) 6
- SpringMVC处理一个HTTP请求 6
- 简述Spring事务 6
- springboot有哪些特性 5
- Spring中事务失效场景有哪些 5
- Mybatis中#与$区别 5
- controller和restcontroller的区别 5
- spring的注入方式有哪些 5
- 如何实现Spring事务? 4
- spring的事务类型 4
- Spring中事务的传播机制 4
- Mybatis分页 4
- springboot的拦截器过滤器 4
- spring bean线程安全问题 3
- Spring Bean的作用域 3
- JUC下的工具包有哪些 3
- springcloud gateway的作用 3
- bean如何创建 3
- JDBC的流程(步骤) 2
- JWT Token存放的内容 2
- springboot怎么实现不同场景下不同配置 2
- Spring特性 2
- springBeanFactury和ApplicationContext的区别 2
- featoryBean和beanFeatory的区别 2
- Spring事务的实现 2
- JWT使用场景 2
- DispatcherServlet是每次拦截到url都会新建一个吗 1
- springboot的autowaire注解原理 1
- 什么是SpringBoot 1
- spring的三级缓存 1
- 简述mybatis框架 1
- Mybatis mapper工作原理 1
- Spring包含哪些模块 1
- spring actuator的实现原理 1
- 微服务对比单体架构的有什么优势 1
- 微服务多实例配置修改的解决方案 1
- k8s提供了哪些好的特性支持微服务 1
- springboot和传统java开发的优势 1
- Mybatis的优点 1
- mybatis传参的四种方式 1
- 如何保证ElasticSearch的高可用 1
- SpringBoot如何自定义starter 1
- 如何实现微服务的健康状态检测 1
- ’@Resource和@Autowired有什么区别? 1
- 数据库连接池的优点 1
- Spring Boot和Spring Cloud的区别 1
- Mybatis如何完成SQL和接口里的方法映射? 1
- spring中的xml文件何时被初始化 1
- Spring加载配置文件的顺序 1
设计模式 :
- 常见的设计模式与优缺点 32
- 单例模式的几种实现方式 26
- Spring使用了哪些设计模式? 9
- 面向对象的三大特征 8
- 简述什么是装饰器模式 6
- 手写单例模式 5
- 简述面向对象的理解 4
- 秒杀如何防止超卖? 4
- 手撕观察者模式 2
- 怎么理解单一职责原则 2
- 工厂模式有哪几种? 2
- 简述什么是开闭原则 2
- Spring工厂模式和单例模式的作用 2
- 设计模式六大准则 1
- 设计一个任务调度系统,每个任务触发频率不同,保证每个任务顺利运行 1
- 设计一个带有群聊功能的聊天软件(需求到每个功能点) 1
- 原型模式深拷贝实现原理 1
- 举例说明使用单例模式的场景 1
- 简述什么是策略模式 1
- 设计朋友圈的类(包含 关注与被关注关系 关注的人发动态) 1
- 简述什么是模板模式 1
- 设计一个抢红包程序(从 表、流程、逻辑 三个方面来阐述) 1
- springboot的设计模式 1
- 设计游戏排行,展示前100名和当前用户的名次? 1
- 为什么要使用设计模式 1
- 如何设计一个缓存数据结构?(考虑线程安全,以及查找、修改、删除的性能) 1
- 手写一个设计模式(非单例、工厂) 1
- 如果用户很久没有登陆,消息量过多怎么办? 1
- 代理模式的优缺点 1
- 如何设计万人群聊 1
- IO中用到的设计模式? 1
- 面向对象与面向过程的编程思想的区别 1
JavaIO:
- IO多路复用原理 12
- select、poll和epoll区别和特点 9
- select和epoll的区别 5
- BIO、NIO、AIO的区别 4
- epoll原理 2
- 服务器给客户端发送IO流的过程 1
- epoll的两种触发与使用场景 1
- NIO与BIO的区别 1
- 简述Netty的特性 1
- Netty的线程模型 1
Java服务器:
- Tomcat底层原理 1
- 集群服务器之间如何同步数据 1
- Tomcat生产环境如何部署 1
Network
传输层
- Tcp与Udp区别 93
- Tcp三次握手四次挥手及对应的状态 73
- Tcp流量控制与拥塞控制 57
- Tcp如何保证可靠传输 45
- TCP为什么要三次握手 33
- TCP三次握手过程及状态变化 33
- 四次挥手timewait的作用 30
- TCP为什么粘包?如何处理 15
- TCP四次挥手过程及状态变化 15
- TCP为什么要四次挥手 13
- TCP滑动窗口的作用 10
- 如何设计可靠的UDP 9
- closewait的作用 6
- SYN洪泛攻击与应对方案 5
- Tcp与Udp相关协议 5
- 列举拥塞控制的几种算法 4
- Udp使用场景 4
- TCP为什么要进行拆包? 4
- TCP建立连接后传输数据的具体过程 3
- 服务端time-wait太多,如何解决? 2
- 如果第一次握手后,服务端宕机会怎样? 2
- Tcp的选择重传机制 2
- TCP超时重传时间与次数 2
- 如何验证传输报文是否完整? 2
- UDP为什么快? 2
- "第三次挥手,如果客户端挂了,
- 服务端拿不到客户端响应,如何应对?" 2
- 数据接收方还会有滑动窗口吗 1
- 如何搭建TCP高并发服务器 1
- UDP能携带的数据最大长度是多少? 1
- Linux 内核如何实现 TCP ? 1
- UDP还会做数据校验吗 1
- last ack状态作用 1
- 四次挥手出现TimeWait的条件 1
- TCP是长连接还是短链接 1
- UDP报文格式 1
- 都有什么地方用到了TCP 1
- TCP 有哪几种关闭的情况? 1
- 发送方怎么判断丢包? 1
- 使用udp还想保证数据不丢失如何处理 1
- TCP 里的 RTT 和 RTO 怎么测量的? 1
- TCP超时重传时间设置 1
- 滑动窗口的大小是如何确定的? 1
- 四次挥手为什么要等待2MSL? 1
- 列举传输层的协议 1
- UDP包大于1472字节能够发送成功吗? 1
Http相关
- Http、Https、两者区别 72
- Https的加密流程 35
- Get与Post的区别 32
- Http响应状态码 21
- Http请求、响应的报文格式 19
- Http2.0、Http1.1、Http1.0有哪些特性 10
- Http状态码 8
- http协议的几种方法(get、post、delete等) 6
- https如何保证可靠性 5
- Http 头的内容 4
- http请求中的跨域问题 4
- Http如何保证安全传输 4
- Http重定向的返回状态码 3
- Http中的content-type有哪些 3
- SSL如何加密 3
- Http可以长连接,但为何还是无状态? 2
- 对称加密与非对称加密的关系 2
- Https的TLS的工作原理 2
- Http与Https的端口号 2
- Http与Tcp的关系与区别 2
- 长连接与短连接 1
- 非对称密钥算法 1
- HTTP无状态,如何标注用户身份 1
- http断电续传能力怎么实现的 1
- "请求页面的资源分布在不同服务器,
- 需要建立几次Http和TCP连接?" 1
- Http与Rpc的关系 1
- POST 有哪几种编码方式 1
- Http的缺点 1
- Https建立连接时服务器返回的证书的内容 1
- Http2.0 二进制分帧改进 1
- 简述CA证书 1
- Https加密算法用在哪个步骤? 1
- 如何断点续传? 1
- Https为什么安全? 1
- Http1.1线头阻塞问题 1
- keep-alive在http和tcp/ip中的区别 1
网络体系结构
- 浏览器上输入地址后的整个请求过程 71
- OSI七层、五层模型,每一层的作用 61
- Tcp/ip的四层协议,协议 17
- MySQL建立连接的过程 1
- 网络模型为什么要分层 1
- 如果你使用无线局域网,访问网址很慢如何排查? 1
- 网络数据转发的全流程(交换机/路由器报文传输具体流程) 1
- 客户端与服务端建立连接后是否会保持?何时释放? 1
- BS与CS的区别 1
- 服务端如何记录客户端登陆状态? 1
应用层
- Cookie与Session原理与区别 30
- DNS工作原理 21
- 列举应用层协议 3
- 浏览器禁用了Cookie以后还能用Session吗 2
- 列举不同的编码方式,并分析其区别 1
- dns除了能查ip还能查到什么 1
- 网关同时接到10个请求,是并行处理还是串行处理? 1
- URL中的中文字符为什么需要转码 1
- 如果晚上0点有大量请求,如何区分恶意与善意请求? 1
- 分布式session,如何实现? 1
- 域名相同,协议不同,cookie是否可以传递? 1
- 简述DDoS的攻击方式与原理 1
- 简述黑客攻击某个主机的方法与过程 1
网络层
- 简述ARP协议流程 5
- ICMP,ARP,IGMP原理 4
- 子网掩码的作用 2
- 列举并简述路由协议 2
- 路由器工作原理 2
- ping的过程 2
- ARP和RARP的区别 2
- IP协议是否可靠并说明原因 1
- 什么是网段? 1
- Mac地址与IP地址的关系 1
- A能ping通B,B不能ping用A,如何排查问题 1
- 网络层报文和报头 1
- 电脑多网卡,IP数据包如何选择网卡发送 1
- 列举网络拓扑结构 1
- IPv4地址与IPv6地址的区别 1
- 如何实现软路由 1
- 分析说明IP层协议 1
- 私网如何访问到百度? 1
- 公网和私网如何区分? 1
- NAT实现原理 1
- ip地址和mac地址的区别 1
- 二层交换机和三层交换机的区别 1
Socket相关
- NIO的实现模型 6
- Socket实现三次握手 5
- Socket与WebSocket的区别与联系 3
- Socket的系统调用 2
- Socket与Channel的区别 2
链路层
- 交换机工作原理 3
- 数据链路层有哪些协议 2
- 数据链路层的报头和报文 1
Mysql
Mysql索引
- 索引的数据结构对比(hash、B树与B+树),为什么不用红黑树 100
- Mysql索引数据结构 61
- Mysql的聚簇索引和非聚簇索引作用与区别 45
- 索引失效的几种场景 40
- Mysql索引优化与设计规则 33
- 索引的最左匹配原则 23
- 简述索引作用与优缺点 19
- 简述索引覆盖与回表查询 16
- 简述索引分类 8
- 简述什么是联合索引 7
- 唯一索引与主键索引的区别 6
- 什么时候需要加索引 4
- 主键为什么自增,不自增是否可行 4
- 简述什么是索引下推 3
- 联合索引与多个单列索引的区别 2
- 如何对Sqls语句进行索引使用分析 2
- 简述什么是索引倒排 1
- 如何创建表索引 1
- 简述什么是全文索引 1
- 简述页合并与页分裂 1
- 新建索引需要注意什么 1
- 非主键索引底层实现有什么特点? 1
- 如何判断一张表有没有使用索引? 1
- 读写分离的数据库,是否有必要建立聚簇与非聚簇索引? 1
Mysql事务
- Mysql的默认隔离级别、不同等级隔离级别解决的问题与实现原理 103
- Mysql事务及特性 67
- Mvcc实现机制(RC和RR隔离级别下的区别) 45
- Mysql的binlog redolog undolog日志文件及其作用 25
- 解释脏读、幻读及产生条件 22
- MVCC 是否能彻底解决幻读 4
- 事务四个特性中隔离性的作用 4
- 不可重复读与幻读的区别 3
- 如何实现可串行化隔离级别,来避免幻读? 2
- Mvcc如何提高并发度 2
- 事务失效的场景举例 1
- ACID怎么保证原子性 1
- 脏读、幻读、可重复读的概念以及解决方法 1
- ACID怎么保证隔离性 1
- mysql事务回滚及提交的原理 1
查询性能优化
- Mysql sql优化,慢Sql如何排查 40
- Inner join与left join区别 16
- Mysql查询优化器机制 5
- 如何避免回表查询 5
- 结合Explain分析Sql语句的索引使用情况 4
- explain会出现几种索引扫描类型?出现filesort的场景 4
- union和union all区别 3
- count(1)、count(*)、count(列名)区别 2
- 多表查询时,join和子查询哪个效率高 2
- 如果数据量变大,分页变慢,limit如何优化? 1
- 整型字段加索引进行范围查找的优化 1
- 查询条件> 5 和 >= 6 哪一个比较好? 1
- explain 有哪些字段 1
存储引擎
- Mysql的几种存储引擎 34
- Innodb与myisam的区别、应用场景 21
- 简要说明Innodb的优势 3
- Mysql锁机制
- Mysql有哪几种锁 16
- 乐观锁与悲观锁的区别 9
- 行锁与表锁的区别 7
- Mysql产生死锁的原因及解决方案 4
- 间隙锁的作用与应用场景 3
- 按照索引查询是否会发生死锁 2
- 什么时候会出现表锁 1
- MySQ如何手动去检测死锁 1
- 设计Mysql锁的数据结构 1
Mysql基础
- 数据库三范式 18
- 关系型数据库与非关系型数据库区别 3
- Drop delecte truncate 3
- sql 语句的执行顺序 3
- Mysql数据存储形式 2
- char与varchar的区别 2
- update或者insert语句内部执行过程? 2
- Order by 和 Group by的区别 1
- Mysql基本数据类型 1
- 如何删除数据库表中重复的数据 1
- 为什么主键用自增不用UUID 1
- 数据库视图与表的区别 1
- 左连接、右连接、内连接、外连接的区别 1
- 如何进行数据库设计 1
- Mysql如何进行查询结果合并? 1
- isEmpty()和isBlank()的区别 1
分库分表
- 分库分表 18
Mysql问题与解决方案
- 如何防止sql注入 5
- 数据高写入量场景,如何设计数据读取方案? 1
- 如何防止库存减为0? 1
- Mysql如何实现分页查询? 1
- Mysql承受不住压力怎么办? 1
- Mysql如何实现高可用? 1
- 如何解决分布式存储的数据一致性问题 1
- Mysql如何实现高性能? 1
- 字段存在唯一性约束,数据库设计需要考虑哪些? 1
- Mysql如何实现数据备份 1
- 如何从一亿数据中分页获取某用户所有数据 1
Mysql复制
- Mysql主从复制过程 10
- 如何应对主从同步延迟 1
- 主从一致性如何保证 1
- 简述Mysql半同步机制 1
OS
进程管理
- 进程与线程的区别 69
- 进程之间通信方式 38
- 进程、线程、协程的区别 24
- 常见的进程调度算法 16
- 线程间通信方式 13
- 线程的状态 9
- 进程的状态 7
- 简述什么是僵尸进程 6
- 如何实现进程间共享内存? 4
- 僵尸进程和孤儿进程的区别 4
- 如何启动和杀死进程 3
- 管道的底层实现原理 3
- 线程上下文切换如何实现 3
- 简述信号量机制 2
- 简述fork函数的作用 2
- 如何解决僵尸进程 2
- 有名管道与无名管道的区别 2
- 文件描述符如果发生更新,如何通知对应进程或者线程 1
- 单个进程最多能创建多少个线程 1
- 操作系统调用线程的方法 1
- Linux中如何创建进程 1
- 说明信号量与信号的区别 1
- Linux内核如何进行线程维护 1
- 多个进程监听一个端口,如何防止惊群? 1
- 简述什么是孤儿进程 1
- 创建进程的系统调用 1
- 列举Linux系统中的锁类型 1
- 实现一个聊天室需要几个进程几个线程? 1
- 列举常用软件的端口号 1
- 为什么进程上下文切换开销大 1
- 如何保证端口安全 1
- 线程、进程切换的差别 1
- 如何保证信号量对两个进程可见? 1
- 进程安全如何实现 1
- 如何解决端口占用 1
- 常见的线程阻塞方法 1
- Linux内核如果实现进程管理 1
- 进程占用资源过多, 如何解决 1
Linux命令
- 熟悉的Linux命令举例 44
- 如何查看端口占用 12
- 查看进程内存与CPU占用情况 7
- 进程终止命令(kill 与 kill - 9 的区别) 6
- 常用命令有哪些 5
- 进程状态查看的命令 3
- top命令的作用 2
- 如何从日志信息中找到一些敏感词 2
- 如何查看某个进程打开了哪些文件? 2
- 查看所有运行进程命令 2
- 如何杀死正在运行的Redis服务 2
- 文件夹下.txt后缀文件的查找命令 2
- 文件权限的设置 2
- 修改文件权限的命令 2
- 如何查看Linux磁盘信息 2
- find和grep的区别 2
- linux用什么命令查看文件 1
- chmod权限用法 1
- 如何查看日志文件中topK的错误日志 1
- awk命令及作用 1
- 如何通过iostat判断io过高? 1
- 简要说明netstat命令功能与作用 1
- 查看文件是被占用 1
- Linux查看隐藏文件 1
- Vim操作的基本和快捷指令? 1
- ping的原理 1
- 如何使用Linux命令进行文件查找 1
- ping使用的是长连接还是短链接 1
- linux 怎么查大于50MB文件 1
- 如何查看当前系统开放的全部端口 1
- 查看网络相关的命令 1
- find命令使用方法 1
- 用什么命令修改ip地址 1
- linux查找文件倒数100行的内容 1
- 过滤目录下包含某个字符串所在文件的命令 1
内存管理
- 虚拟内存及其作用介绍 29
- 内存泄露概念与产生原因与影响 12
- 简述页面置换算法 7
- 内存溢出的产生原因与相关处理 6
- 操作系统分页,分段,TLB 6
- 操作系统如何管理内存资源? 4
- 逻辑地址怎么变成物理地址 4
- 进程的内存分配(低地址到高地址) 4
- 什么是缺页中断? 2
- 内存分配算法 2
- 简述什么是线程泄露 1
- 处理缺页中断的淘汰算法 1
- 磁盘读取文件到网络发送,要经过多少次内存 1
- 虚拟内存如何优化进程间的上下文切换 1
- 负载与CPU使用率的关系 1
- 父进程fork子进程,子进程申请大量内存后崩溃,是否会造成内存泄露 1
- 简述磁盘调度算法 1
死锁
- 死锁的产生条件与解决方案 36
- 如何查看当前线程,并判断死锁 1
OS基础
- 用户态内核态区别 6
- 并发与并行的区别 6
- 中断的分类与区别 3
- 用户态如何切换到内核态 2
- 系统调用的全过程 2
- os的组成 1
- 异步和并行的区别 1
链接
- 介绍软链接与硬链接 2
- 介绍静态与动态链接 2
设备管理
- select与poll的区别 1
- epoll底层实现 1
Redis
Redis问题与解决方案
- 缓存穿透、缓存雪崩原因及解决方案 36
- Redis缓存与如何保证数据一致性问题 32
- 简述Redis中布隆过滤器的应用 11
- Redis如何限流 4
- Redis与Mysql如何同步? 3
- 如何实现分布式缓存? 3
- 分布式限流算法、单机限流算法 3
- Redis宕机,会不会有数据丢失的情况,如何解决? 3
- 一致性hash,如何增加、删除节点 3
- Redis的线程模型 2
- Redis高可用方案 2
- Redis如何进行容灾 1
- 如何应对Redis Zset打满的情况 1
- Redis如何实现排行榜? 1
- "Redis如何应付上万条用户的同时注册, 并确保多服务器的注册能够用户账号唯一" 1
- Redis如何解决超发问题 1
- redis和mysql的区别 1
- Redis发布订阅和消息中间件的区别 1
- redis可以在磁盘中使用吗 1
- 如何实现缓存预热? 1
- redis中hash扩容怎么实现 1
- Redis单机故障如何处理 1
- RRedis发布订阅和直接用List的区别 1
- Redis数据量特别大,是否会阻塞? 1
Redis数据类型
- Redis基本数据类型 76
- String类型的底层数据结构 3
- bitmap 数据类型 2
- Redis的String与Java的String的区别 1
Redis数据结构
- Redis底层数据结构 35
- Zset的底层实现 20
- 跳表的实现原理 12
- 压缩列表的实现原理 1
Redis使用场景
- Redis如何实现分布式锁? 36
- 分布式锁的超时设计与优化 10
- 简述Redis使用场景 7
- Redis集群如何设计 4
- 实现消息队列 2
- 简述Redis服务降级 2
- Redis如何管理token的生命周期 1
- Redis如何实现文章热榜 1
- 简述Redis如何解决数据倾斜 1
- Redis如何实现消息已读未读 1
Redis持久化
- Redis持久化方式,RDB和AOF的区别与优劣势 45
Redis特性
- Redis单线程为何速度快? 27
- 为什么用Redis? 6
- Redis与Mysql的区别 5
- Redis有哪些特性? 2
- Redis为什么使用单线程? 2
- Redis的IO多路复用与系统调用 1
过期与淘汰策略
- Redis缓存淘汰策略 16
- Redis过期策略 13
Redis复制
- Redis的主从同步设计 8
Redis事务
- Redis是否支持事务 4
Sentinel哨兵
- Redis的哨兵模式 3
Redis与Memcached
- Redis 与 Memcached区别 1
DataStructure
树
- 简述什么是B+树 22
- B+树与B树的区别 21
- 简述什么是红黑树 17
- 红黑树与二叉平衡树的区别 8
- 堆的时间复杂度分析 6
- 二叉平衡树的介绍 6
- 二叉树的数据结构 6
- 二叉树有哪些? 4
- b+树与二叉树的区别 2
- 简述什么是B树 2
- 列举所有树并横向对比 2
- 简述为何二叉平衡树左右子树高度差不超过1 2
- 简述二叉搜索树的数据结构 2
- 简述二叉树与堆的关系 2
- 跳表与红黑树的比较 1
- 哈夫曼树的使用场景 1
- 二叉搜索树的时间复杂度? 1
- 简述堆的特性(大根堆、小根堆) 1
排序
- 常用排序算法举例 27
- 快排时间复杂度分析(快排) 7
- 手写堆排序 3
- 列出所有稳定排序和不稳定排序 3
- 分析说明快速排序算法(快排) 3
- 手撕快速排序(快排) 2
- 常用排序算法复杂度分析 2
- 如何在两个大数据文本(50亿)中,找相同的单词(内存4M) 1
- 洗牌算法 1
- 手撕归并排序 1
- 分析说明选择排序算法 1
- 1个亿的数据 如何找前一万个大的数? 1
- 冒泡排序时间复杂度分析 1
- 100G的文件,如何排序? 1
- 快排最坏时间复杂度及分析 1
线性表
- 数组与链表的区别 29
- 数组遍历方法的时间复杂度分析,如何优化? 2
- 链表遍历的时间复杂度分析,如何优化? 1
- 链表的头插和尾插 1
- 数组随机访问如何寻址 1
查找
- Hash冲突解决方案 11
- 简述一致性Hash算法 2
- 简述hash的实现 1
DS基础
- 递归和循环的优劣性对比 2
- 不使用For while,如何实现循环? 2
- 递归的弊端与应对方案 1
- 常用的数据结构有哪些 1
栈与队列
- 栈与队列的区别 5
图
- 图遍历的方式 2
- 深度优先搜索和广度优先搜索的区别 1
- 最小生成树算法 1
- 最短路径算法 1
Test
软件测试基础
- 软件测试方法 11
- 测试开发需要哪些技能? 6
- 简述黑盒测试方法 3
- 简述白盒测试方法 3
- 性能测试关注点 2
- CPU占用异常,如何定位? 2
- 如何测试百度搜索框? 2
- v,w模型 1
- 软件测试计划的主要内容 1
- 软件测试的主要流程 1
- 测试用例设计方法 1
- 分析淘宝网页的测试功能点 1
- 简述自动化用例的设计思路 1
- 软件测试的具体流程 1
- 测试与测试开发的区别 1
- 打开网页导致黑屏有哪些原因? 1
- 如何设计测试用例? 1
- 软件生命周期 1
- 如何设计转账的测试用例 1
- 性能测试如何保证与实际场景类似? 1
- 如何使用测试用例 1
- 如何诊断流量异常 1
MQ
MQ可靠性
- 怎么保证Kafka消费不乱序 5
- Rabbitmq如何保证可靠性 2
- 如何保证Kafka的数据一致性 2
- ActiveMQ如何解决消息重复问题 2
- 消息重复消费,消费失败如何处理 2
- 下单事务失败了,如何回滚? 1
- 消费消息时幂等性如何保证 1
- Rabbitmq如何保证消费的顺序性 1
- 如何保证Kafka的高可用 1
- rabbitmq如何实现广播 1
- ActiveMQ如何解决消息丢失问题 1
- rocketMq如何保证消息被发送和接收 1
MQ消息模型
- Kafka架构 7
- MQ架构 2
- Kafka的优缺点 2
- Kafka的message压缩机制 1
- Kafka与其他MQ的对比 1
- RabbitMq和kafka的区别 1
- ActiveMQ原理 1
- KafKa为什么快? 1
MQ使用场景
- 如何实现流量削峰? 4
- 如何解决生产者消费者生产和消费速率不同的问题 1
- 如何实现MQ死信取消超时单? 1