双非本科,参加了无数场面试,以下是最近面阿里的总结:
阿里
面经1
- 简单介绍项目
- 知道哪些数据结构以及他们的特点
- 链表增删快,那如何提高其查询效率,有没有什么想法?
- B+树了解吗?B+树如何范围查询?B+树退化的极端情况是什么?
- 跳表了解吗?
- 大顶堆、小顶堆了解吗?
- 实现长地址请求到服务端,然后服务端重定向短地址给客户端,如何实现长短地址的互相映射?
- 那我现在有10份数据,有1000个线程来争抢,你要怎么处理?
- 分布式是什么?为什么要分布式?分布式又会有哪些问题?分布式系统是如何实现事物的?
- Redis集群了解吗?如何处理宕机的情况?Redis的同步策略?
- LRU算法了解吗?你会如何实现它?这个算法可以应用在哪些场景下?
- TCP为什么是三次握手?两次行不行?多次行不行?
- TCP的安全性是如何实现的?两台服务器之间可以同时建立多条TCP链接吗?怎么实现的?
- 客服端输入一个网址后,是如何拿到客服想要的数据的,是怎样在网络中传输的?
- cookie和session
- java有哪些锁?共享锁是什么?CAS?乐观锁和悲观锁?synchronied的底层原理?锁升级?死锁怎么形成的?如何破解死锁?
面经2
- Java容器:List,Set,Map
- Map的遍历方式
- HashMap扩容为什么是扩为两倍?
- Java线程同步机制(信号量,闭锁,栅栏)
- 对volatile的理解:常用于状态标记
- 八种基本数据类型的大小以及他们的封装类(顺带了解自动拆箱与装箱)
- 线程阻塞几种情况?如何自己实现阻塞队列?
- Java垃圾回收。可达性分析->引用级别->二次标记(finalize方法)->垃圾收集 算法(4个)->回收策略(3个)->垃圾收集器(GMS、G1)。
- java内存模型
- TCP/IP的理解
- 进程和线程的区别
- http状态码含义
- ThreadLocal(线程本地变量),如何实现一个本地缓存
- JVM内存区哪里会出现溢出?
- 双亲委派模型的理解,怎样将两个全路径相同的类加载到内存中?
- CMS收集器和G1收集器
- TCP流量控制和拥塞控制
- 服务器处理一个http请求的过程
- 例举几个Mysql优化手段
- 数据库死锁定义,怎样避免死锁
- spring的aop是什么?如何实现的
- 面向对象的设计原则
- 策略模式的实现
- 操作系统的内存管理的页面淘汰 算法 ,介绍下LRU(最近最少使用算法 )
- B+树的特点与优势
面经3
- 自我介绍,说简历里没有的东西
- 说几个你最近在看的技术(MySQL,多线程)
- 口述了一个统计数据的场景题
- 如果这个统计数据场景不用MySQL,而是用Java来实现,怎么做
- 如果数据量过大,内存放不下呢
- 用面向对象的思想解决上面提出的问题,创建出父类,子类,方法,说一下思路
- 下一个场景,口述了一个登录场景,同学用线程池做登录校验,会有什么问题
- 如何解决这些问题
- 你给出的方案弊端在哪里,还有哪些方案
面经4
- 谈谈类加载机制。
- hashmap和concurenthashmap
- 16g机器,让你分配jvm内存怎么分配。
- 机器慢了怎么排查。
- 谈谈consul和zookeeper,还有服务发现机制。
- 详细说明raft协议。
- 谈谈consul和zookeeper区别。
- 服务注册的时候发现没有注册成功会是什么原因。
- 讲讲你认为的rpc和service mesh之间的关系。
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~
如果访问不了Github,可以访问gitee地址。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。