阿里、美团、拼多多、网易大厂面试之Redis+多线程+JVM+微服务...
非常非常不错的一篇面经文章,文中很多的面试题目都值得我们在面试前刷一遍,强烈推荐阅读3遍以上。如果觉得不错,可以收藏分享一下。(面经没有具体答案,需要大家一起来探讨学习一下。)
美团篇(33道)
- 了解SOA,微服务吗?
- 分布式系统如何负载均衡?如何确定访问的资源在哪个服务器上?
- 设计一个分布式负载均衡缓冲系统,如何快速定位到是那个服务器?
- 如何保证缓冲区和数据库之间的强一致性?
- HashMap高并发情况下会出现什么问题?
- 说一说在浏览器中输入一个url后,直到浏览器显示页面的过程中发生了什么?
- 字符串中句子的反转(比如ABC DEF,输出DEF ABC)
- 给任意二叉树的所有结点加next指针
- 用过反向代理吗?
- 进程间共享内存的方式有哪些?
- linux下如何查看网络端口状态,如何查看内存使用情况?
- ConcurrentHashMap如何扩容?
- 知道java的异常吗?
- 运行时异常如果不处理会怎么样?应该怎么处理运行时异常?
- 写代码:给你5000万个int,求出前1000个最大的数,有2G内存。
- 给你n个不重复的整数,随机找出m个不重复的整数,要求时间和空间复杂度都是O(m)。
- 对于SQL慢查询的优化?
- 用过哪些容器?
- 用过动态代理吗?
- 说说深入理解JVM中印象最深刻的章节
- 堆和栈中存的是什么?static修饰的遍历存在哪里?
- 说说《Effective Java》中你印象最深的三条和你的理解
- 你觉得你哪一块只是最熟悉
- 那你说说HashMap的内部实现;
- HashMap是线程安全的吗?
- 那ConcurrentHashMap内部是如何实现的?每个segment是个什么数据结构?
- 你的项目中用到哪些技术?
- 说说你用了它的什么?
- Spring的优点?Spring AOP的原理?Spring如何实现解耦合?
- 对链表了解吗?说说他们的区别?
- 会做链表两个结点的交换吗?
- 再写一个,给你一个链表和一个整数k
- 说说mybatis配置了xml过后是如何完成数据库操作的?
Redis
- redis 和 memcached 什么区别?
- 为什么高并发下有时单线程的 redis 比多线程的memcached 效率要高?
- redis 主从复制如何实现的?
- redis 的集群模式如何实现?
- redis 的 key 是如何寻址的?
- 使用 redis 如何设计分布式锁?说一下实现思路?使用 zk 可以吗?如何实现?这两种有什么区别?
- 知道 redis 的持久化吗?底层如何实现的?有什么优点缺点?
- redis 过期策略都有哪些?LRU 算法知道吗?写一下 java 代码实现?
- 缓存穿透、缓存击穿、缓存雪崩解决方案?
- 在选择缓存时,什么时候选择 redis,什么时候选择 memcached
- 缓存与数据库不一致怎么办?
- 主从数据库不一致如何解决
- Redis 常见的性能问题和解决方案
- Redis 的数据淘汰策略有哪些?
- Redis 当中有哪些数据结构?
- 假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?
- ...............
拼多多篇(40道)
- 给一个函数,返回 0 和 1,概率为 p 和 1-p,请你实现一个函数,使得返回 01 概率一样。
- 10 亿个 url,每个 url 大小小于 56B,要求去重,内存 4G。
- 把一个 bst 转化成一个双向链表。
- http 和 https 区别,https 在请求时额外的过程,https 是如何保证数据安全的。
- IP 地址子网划分。
- POST 和 GET 区别。
- 硬链接和软连接区别。
- DNS 解析过程。
- kill 用法,某个进程杀不掉的原因(进入内核态,忽略 kill 信号)。
- linux 用过的命令。
- 系统管理命令(如查看内存使用、网络情况)。
- 管道的使用。
- grep 的使用,一定要掌握,每次都会问在文件中查找。
- shell 脚本。
- find 命令。
- awk 使用。
- Linux 下的一些指令,(进程id), (进程 id),(进程id),?(上一条命令退出时状态),怎么查看进程,按照内存大小,CPU 占用排序等等。(大写 M 和大写 P)。
- http 的 get 和 post 方法。
- 介绍下你所了解的 epoll。
- 数据库 sql 的了解程度。
- 项目中遇到的问题,自己咋解决的等等。
- 手写一个全排列。
- B树和B+树。
- 介绍一下 Hash,怎么解决冲突。
- 进程间的通信,共享内存方式的优缺点。
- 说下你平时看的一些技术博客,书籍。
- linux 下的一些指令。
- 工作中你觉得最不爽的事情是什么。
- 说下你的优缺点。
- 有没有想过去创业公司。
- 写个 strcpy 函数。
- 说说你自己的性格。
- 给你一个系统(面试官好像是无人车部门的),后台的逻辑已经实现了,但是前端加载很慢,怎么检测。
- 以后可能要学习很多新技术,你怎么看。
- 项目中遇到的困难(提前想好,并且把实现或者优化方法说清楚)。
- 系统的量级、pv、uv 等。
- 应对高并发的解决办法(分布式)。
- 在项目中主要负责了哪些工作。
- nginx 的负载均衡。
- 分布式缓存的一致***器如何扩容(哈希环)。
多线程
- 现在有 T1、T2、T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行?
- 在 Java 中 Lock 接口比 synchronized 块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?
- 在 java 中 wait 和 sleep 方法的不同?
- 用 Java 实现阻塞队列
- 用 Java 写代码来解决生产者——消费者问题
- 用 Java 编程一个会导致死锁的程序,你将怎么解决?
- 什么是原子操作,Java 中的原子操作是什么?
- Java 中的 volatile 关键是什么作用?怎样使用它?在 Java 中它跟 synchronized 方法有什么不同?
- 什么是竞争条件?你怎样发现和解决竞争?
- 你将如何使用 threaddump?你将如何分析 Thread dump?
- Java 中你怎样唤醒一个阻塞的线程?
- 为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法?
- 在 Java 中 CycliBarriar 和 CountdownLatch 有什么区别?
- 什么是不可变对象,它对写并发应用有什么帮助?
- 你在多线程环境中遇到的常见的问题是什么?你是怎么解决它的?
- 使用synchronized修饰静态方法和非静态方法有什么区别。
- 简述ConcurrentLinkedQueue和LinkedBlockingQueue的用处和不同之处。
- 导致线程死锁的原因?
- 怎么解除线程死锁。
- 非常多个线程(可能是不同机器),相互之间需要等待协调,才能完成某种工作,问怎么设计这种协调方案。
- 用过读写锁吗,原理是什么,一般在什么场景下用。
- 开启多个线程,如果保证顺序执行,有哪几种实现方式,或者如何保证多个线程都执行完再拿到结果。
- 延迟队列的实现方式,delayQueue和时间轮算法的异同。
更多面试资料、架构学习文档需要获取的朋友们可以转发分享此文,关注小编添加VX:“MXM9809”即可一并获取。
网易篇(72道)
- HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。
- HaspMap扩容是怎样扩容的,为什么都是2的N次幂的大小。
- HashMap,HashTable,ConcurrentHashMap的区别。
- 极高并发下HashTable和ConcurrentHashMap哪个性能更好,为什么,如何实现的。
- HashMap在高并发下如果没有处理线程安全会有怎样的安全隐患,具体表现是什么。
- java中四种修饰符的限制范围。
- Object类中的方法。
- 接口和抽象类的区别,注意JDK8的接口可以有实现。
- 动态代理的两种方式,以及区别。
- Java序列化的方式。
- 传值和传引用的区别,Java是怎么样的,有没有传值引用。
- 一个ArrayList在循环过程中删除,会不会出问题,为什么。
- @transactional注解在什么情况下会失效,为什么。
- B+树
- 快速排序,堆排序,插入排序(其实八大排序算法都应该了解
- 一致性Hash算法,一致性Hash算法的应用
- JVM的内存结构。
- JVM方法栈的工作过程,方法栈和本地方法栈有什么区别。
- JVM的栈中引用如何和堆中的对象产生关联。
- 可以了解一下逃逸分析技术。
- GC的常见算法,CMS以及G1的垃圾回收过程,CMS的各个阶段哪两个是Stop the world的,CMS会不会产生碎片,G1的优势。
- 标记清除和标记整理算法的理解以及优缺点。
- eden survivor区的比例,为什么是这个比例,eden survivor的工作过程。
- JVM如何判断一个对象是否该被GC,可以视为root的都有哪几种类型。
- 强软弱虚引用的区别以及GC对他们执行怎样的操作。
- Java是否可以GC直接内存。
- Java类加载的过程。
- 双亲委派模型的过程以及优势。
- 常用的JVM调优参数。
- dump文件的分析。
- Java有没有主动触发GC的方式(没有)。
- Java实现多线程有哪几种方式。
- Callable和Future的了解。
- 线程池的参数有哪些,在线程池创建一个线程的过程。
- volitile关键字的作用,原理。
- synchronized关键字的用法,优缺点。
- Lock接口有哪些实现类,使用场景是什么。
- 可重入锁的用处及实现原理,写时复制的过程,读写锁,分段锁(ConcurrentHashMap中的segment)。
- 悲观锁,乐观锁,优缺点,CAS有什么缺陷,该如何解决。
- ABC三个线程如何保证顺序执行。
- 线程的状态都有哪些。
- sleep和wait的区别。
- notify和notifyall的区别。
- ThreadLocal的了解,实现原理。
- 常见的数据库优化手段索引的优缺点,什么字段上建立索引数据库连接池。
- durid的常用配置。
- TCP,UDP区别。三次握手,四次挥手,为什么要四次挥手。
- 长连接和短连接。
- 连接池适合长连接还是短连接。
- 观察者模式代理模式单例模式,有五种写法,可以参考文章单例模式的五种实现方式可以考Spring中使用了哪些设计模式
- 分布式事务的控制。
- 分布式锁如何设计。
- 分布式session如何设计。
- dubbo的组件有哪些,各有什么作用。
- zookeeper的负载均衡算法有哪些。
- dubbo是如何利用接口就可以通信的。
- redis和memcached的区别。
- redis支持哪些数据结构。
- redis是单线程的么,所有的工作都是单线程么。
- redis如何存储一个String的。
- redis的部署方式,主从,集群。
- redis的哨兵模式,一个key值如何在redis集群中找到存储在哪里。
- redis持久化策略。
- SpringMVC的Controller是如何将参数和前端传来的数据一一对应的。
- Mybatis如何找到指定的Mapper的,如何完成查询的。
- Quartz是如何完成定时任务的。
- 自定义注解的实现。
- Spring使用了哪些设计模式。
- Spring的IOC有什么优势。
- Spring如何维护它拥有的bean。
- 一些较新的东西JDK8的新特性,流的概念及优势,为什么有这种优势。
- 区块链了解如何设计双11交易总额面板,要做到高并发高可用
JVM
- JVM 内存分哪几个区,每个区的作用是什么?
- 如和判断一个对象是否存活?(或者 GC 对象的判定方法)
- 简述 Java 垃圾回收机制?
- Java 中垃圾收集的方法有哪些?
- Java 内存模型
- Java 类加载过程?
- 简述 Java 类加载机制?
- 类加载器双亲委派模型机制?
- 什么是类加载器,类加载器有哪些?
- 简述 Java 内存分配与回收策率以及 Minor GC 和Major GC?
蚂蚁金服篇(39道)
- HashMap&ConcurrentHashMap
- 再谈谈一致hash算法?
- 乐观锁&悲观锁?
- 可重入锁&Synchronize?
- 事务四大特性?
- 事务的二段提交机制?
- 聚簇索引&非聚簇索引?
- 用自己的实践经历说一下索引的使用场景(说一个就要举一个例子)?
- 当前读&快照读?
- 类加载过程?
- 双亲委派机制及使用原因?
- 说说GC算法?
- Http&Https的区别
- Https的加密方式
- 线程池的核心参数和基本原理
- 线程池的调优策略
- 说说自己参与的项目,技术难度在哪里?
- Collections.sort底层排序方式?
- 排序稳定性?
- 具体场景的排序策略?
- Http请求过程,DNS解析过程
- 三次握手四次挥手
- 简述线程池和并发工具的使用?
- 数据库索引原理
- 频繁老年代回收怎么分析解决
- Spring IOC、AOP?
- 讲讲SpringBoot/SpringCloud的一些应用?
- 阻塞队列不用java提供的自己怎么实现,condition和wait不能用
- 拥塞窗口讲一讲,为什么要用慢启动算法
- 负载均衡的原理?
- Redis的数据一致性问题(分布式多节点环境 & 单机环境)?
- 讲讲docker容器?
- 如何实现何高并发下的削峰,限流?
- 项目中用的中间件的理解(Dubbo、MQ、Redis、kafka、zk)
- 服务器雪崩是怎么造成的?之前有这样的经历吗?怎么防备?
- 高并发架构的设计思路
- 以前项目中遇到的最大问题和解决策略
- 生活中遇到的最大的挫折
- 生活中遇到的最大的令你最有成就感的事情
Spring全家桶(SpringCloud、Docker)
Spring
- 不同版本的 Spring Framework 有哪些主要功能?
- 什么是 Spring Framework?
- 列举 Spring Framework 的优点。
- Spring Framework 有哪些不同的功能?
- Spring Framework 中有多少个模块,它们分别是什么?
- 什么是 Spring 配置文件?
- Spring 应用程序有哪些不同组件?
- 使用 Spring 有哪些方式?
- 什么是 Spring IOC 容器?
- 什么是依赖注入?
- spring 中有多少种 IOC 容器?
- 什么是 spring bean?
- spring 提供了哪些配置方式?
- spring 支持集中 bean scope?
- spring bean 容器的生命周期是什么样的?
- 什么是 spring 的内部 bean?
- 什么是基于注解的容器配置?
- 如何在 spring 中启动注解装配?
- spring DAO 有什么用?
- spring JDBC API 中存在哪些类?
- 列举 spring 支持的事务管理类型
- 什么是 AOP?
- 什么是 Aspect?
- AOP 有哪些实现方式?
- Spring AOP and AspectJ AOP 有什么区别?
Docker
- 什么是Docker?
- 如何使用Docker构建与环境无关的系统?
- Dockerfile中的命令COPY和ADD命令有什么区别?
- 什么是Docker镜像?
- 什么是Docker容器?
- 什么是Docker Hub?
- Docker容器在任何给定时间点可以处于什么状态?
- 有没有办法识别Docker容器的状态?
- Dockerfile中最常见的指令是什么?
- 什么类型的应用程序 - 无状态或有状态更适合Docker容器?
- Docker Image和Layer有什么区别?
- 什么是虚拟化?
- 什么是管理程序?
- 什么是Docker Swarm?
- 你将如何监控生产中的Docker?
更多面试专题答案、实战学习文档,需要获取的朋友们可以转发分享此文,关注小编添加VX:“MXM9809”即可一并获取。