每个人都拥有大厂梦,我也不例外,公司的程序员有光环加身,自带流量,走到哪里只要说出你公司的名字,就能引来一片关注。比如在一个全新的场合,有人介绍你是阿里巴巴的程序员,可能稍后会有很多人加你微信,但如果介绍你说是小A公司的程序员,那就不好说了。
以下分享这次面试阿里中间件和蚂蚁,百度等大厂的面试题,另外还对自己的面试做了一些总结,总结里含有一些学习方法和资料,需要的朋友可以直接在文末免费领取!
字节跳动(三面)
字节一面
- 写一个题,找一个无序数组的中位数
- 写了个快排,然后让我找到无序数组第k大的一个数
- 快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少
- 操作系统了解么
- 说说Linux的磁盘管理
- Linux有哪些进程通信方式
- Linux的共享内存如何实现
- 共享内存实现的具体步骤
- socket网络编程,说一下TCP的三次握手和四次挥手
- 问了项目的一些东西
- 问我如何把docker讲的很清楚
- 问我cgroup在linux的具体实现
- 多线程用过哪些
字节二面
- 自我介绍
- Java的集合类哪些是线程安全
- 分别说说这些集合类,hashmap怎么实现的
- MySQL索引的实现,innodb的索引,b+树索引是怎么实现的,为什么用b+树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。
- MySQL的事务隔离级别,分别解决什么问题。
- Redis了解么,如果Redis有1亿个key,使用keys命令是否会影响线上服务
- 问我知不知道有一条命令可以实现上面这个功能
- Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么
- Redis的list是怎么实现的,我说用ziplist+quicklist实现的,ziplist压缩空间,quicklist实现链表。
- sortedset怎么实现的,使用dict+skiplist实现的
- 了解什么消息队列
- 写题时间到。第一题:写一个层序遍历。
- 第二题:写一个插入树节点到一颗排序树的插入方法,使用递归方式找到插入位置即可。
- 第三题:一个有向图用邻接矩阵表示,并且是有权图,现在问怎么判断图中有没有环。
- 第四题:一个二叉树,找到二叉树中最长的一条路径。
字节三面
三面的面试官真的高冷啊,不苟言笑就算了,我问他他都不爱搭理的,搞得我内心慌得一比,感觉凉凉。
- 介绍一下项目
- chm和countdownlatch怎么使用的
- 为什么要这么处理,使用线程池是不是也可以。
- 操作系统的进程通信方式,僵尸进程和孤儿进程是什么,如何避免僵尸进程
- 计算机网络TCP和UDP有什么区别,为什么迅雷下载是基于UDP的
- 操作系统的死锁必要条件,如何避免死锁。
- 写一个LRU的缓存,需要完成超时淘汰和LRU淘汰。
阿里中间件(四面)
Java中间件一面技术
技术一面考察范围:
- 重点问了Java线程锁:synchronized 和ReentrantLock相关的底层实现
- 线程池的底层实现以及常见的参数
- 数据结构基本都问了一遍,链表、队列等
- Java内存模型:常问的JVM分代模型,以及JDK1.8后的区别,最后还问了JVM相关的调优参数
- 分布式锁的实现比较
技术一面题目:
- 自我介绍
- 擅长哪方面的技术?
- java有哪些锁中类?(乐观锁&悲观锁、可重入锁&Synchronize等)
- 比较重要的数据结构,如链表,队列,栈的基本原理及大致实现
- J.U.C下的常见类的使用。Threadpool的深入考察;blockingQueue的使用
- Java内存分代模型,GC算法,JVM常见的启动参数;CMS算法的过程
- Volatile关键字有什么用(包括底层原理)?
- 线程池的调优策略
- Spring cloud的服务注册与发现是怎么设计的?
- 分布式系统的全局id如何实现
- 分布式锁的方案,redis和zookeeper那个好,如果是集群部署,高并发情况下那个性能更好?
Java中间件二面
技术二面考察范围:
- 问了项目相关的技术实现细节
- 数据库相关:索引、索引底层实现、mysql相关的行锁、表锁等
- redis相关:架构设计、数据一致性问题
- 容器:容器的设计原理等
技术二面题目:
- 参与的项目,选一个,技术难度在哪里?
- Collections.sort底层排序方式
- 负载均衡的原理
- 设计模式与重构,谈谈你对重构的理解
- 谈谈redis相关的集群有哪些成熟方案?
- 再谈谈一致hash算法(redis)
- 数据库索引,B+树的特性和建树过程
- Mysql相关的行锁,表锁、乐观锁、悲观锁
- 谈谈多线程和并发工具的使用
- 谈谈redis的架构和组件
- Redis的数据一致性问题(分布式多节点环境&单机环境)
- Docker容器
Java中间件三面
技术三面考察范围:
- 主要谈到了高并发的实现方案
- 以及中间件:redis、rocketmq、kafka等的架构设计思路
- 最后问了平时怎么提升技术的
技术三面题目:
- 高并发情况下,系统是如何支撑大量的请求的?
- 接着上面的问题,延伸到了中间件,kafka、redis、rocketmq、mycat等设计思路和适用场景等
- 最近上过哪些技术网站?最近再看哪些书?
- 工作和生活中遇见最大的挑战,怎么去克服?
- 未来有怎样的打算
Java中间件四面
最后,你懂的,主要就是HR走流程了,主要问了未来的职业规划。
腾讯(三面)
腾讯一面
- 自我介绍
- TCP与UDP的区别
- TCP三次握手说一下(把流程说一遍,这里以为会继续问为什么不是两次或者四次,结果没有)
- 看你项目用到线程池,说一下线程池工作原理,任务拒接策略有哪几种
- 进程和线程的区别
- ArrayList与LinkedList的区别
- 线程安全与非线程安全集合说一下,底层怎么实现的(hashmap,concurrenthashmap)
- Java内存模型,方法区存什么
- 数据库事务隔离级别说一下
- synchronized和lock区别,可重入锁与非可重入锁的区别
- 说说悲观锁和乐观锁的区别
腾讯二面
- 说一下你对哪个项目比较熟悉、为什么做这个项目
- 项目采用了什么架构,数据库如何设计的
- 数据库由哪些表,为什么有这些表
- 主要有哪些核心模块,模块之间如何通信的
- 如何保存会话状态,有哪些方式、区别如何
- 分布式session如何管理,你有哪些方案
- 学过数据结构和算法吗(当然),你说说二分搜索的过程
- 说一下快排的过程,写一下伪代码
- 了解哪设计模式,举例说说在jdk源码哪些用到了你说的设计模式
腾讯三面
- 说下你平时看的一些技术博客,书籍。
- linux 下的一些指令。
- 工作中你觉得最不爽的事情是什么。
- 说下你的优缺点。
- 有没有想过去创业公司。
- 写个 strcpy 函数。
- 说说你自己的性格。
- 给你一个系统,后台的逻辑已经实现了,但是前端加载很慢,怎么检测。
- 以后可能要学习很多新技术,你怎么看。
- 项目中遇到的困难(提前想好,并且把实现或者优化方法说清楚)。
- 系统的量级、pv、uv 等。
- 应对高并发的解决办法(分布式)。
- 在项目中主要负责了哪些工作。
- nginx 的负载均衡。
- 分布式缓存的一致性,服务器如何扩容(哈希环)。
蚂蚁中间件团队(三面)
蚂蚁中间件一面
- 自我介绍
- JVM垃圾回收算法和垃圾回收器有哪些,最新的JDK采用什么算法?
- 新生代和老年代的回收机制
- 讲一下ArrayList和linkedlist的区别,ArrayList与HashMap的扩容方式
- Concurrenthashmap1.8后的改动
- Java中的多线程,以及线程池的增长策略和拒绝策略了解么?
- Tomcat的类加载器了解么?
- Spring的ioc和aop,Springmvc的基本架构,请求流程
- HTTP协议与Tcp有什么区别,http1.0和2.0的区别?
- Java的网络编程,讲讲NIO的实现方式,与BIO的区别,以及介绍常用的NIO框架
- 索引什么时候会失效变成全表扫描?
- 介绍下分布式的paxos和raft算法
蚂蚁中间件二面
- 你在项目中怎么用到并发的?
- 消息队列的使用场景,谈谈Kafka
- 你说了解分布式服务,那么你怎么理解分布式服务?
- Dubbo和Spring Clound的区别,以及使用场景
- 讲一下docker的实现原理,以及与JVM的区别
- MongoDB、Redis和Memcached的应用场景,各自优势
- MongoDB有事务吗?
- Redis说一下sorted set底层原理
- 讲讲Netty为什么并发高,相关的核心组件有哪些?
蚂蚁中间件三面
- 完整的画一个分布式集群部署图,从负载均衡到后端数据库集群
- 分布式锁的方案,Redis和Zookeeper哪个好,如果是集群部署,高并发情况下哪个性能更好?
- 分布式系统的全局id如何实现?
- 数据库万级变成亿级,你如何来解决?
- 常见的服务器雪崩是由什么引起的,如何来防范?
- 异地容灾怎么实现?
- 常用的高并发技术解决方案有哪些,以及对应的解决步骤?
百度智能云(三面)
百度智能云 数据库部门
百度一面
1 、数据库的事务,四个性质说一下,分别有什么用,怎么实现的。
2、讲到了redo和undo日志,问我分别有什么用
3、数据库的隔离性如何保证,使用悲观锁和乐观锁有何区别。MVCC的设计目的是什么,怎么使用版本号判断数据的可见性。
4、问了一道算法,1到N的所有数字,按照字典序打印,怎么做。
5、多线程并发的同步实现,有两个方法,每个方法里有a部分代码和b部分代码,我要让两个线程分别执行两个方法,并且让他们运行完a部分代码再一起向下执行,如何实现。
6、问了项目
百度二面
1、自我介绍,项目 10分钟过去
2、服务器如何负载均衡,有哪些算法,哪个比较好,一致性哈希原理,怎么避免DDOS攻击请求打到少数机器。
3、TCP连接中的三次握手和四次挥手,四次挥手的最后一个ack的作用是什么,为什么要time wait,为什么是2msl。
4、数据库的备份和恢复怎么实现的,主从复制怎么做的,什么时候会出现数据不一致,如何解决。
5、开源的技术看过用过么,分布式存储的了解么。
6、想做什么方向的开发。
7、Linux查看cpu占用率高的进程
8、查看占用某端口的进程和某进程监听的端口
9、如何查询日志文件中的所有ip,正则表达式
百度三面
数据库部门真的很严格,问题都挺难的。
1、讲一下项目
2、平时了解什么操作系统
3、Linux的内存管理算法
4、Linux的文件系统了解么
5、进程通信方式有哪些,问我分别怎么使用,管道有哪些类型,各有什么优缺点。
6、问我服务器硬件了解么。
7、shell了解么
8、说一下JVM内存模型把,有哪些区,分别干什么的
9、说一下gc算法,分代回收说下。
10、设计模式了解么
11、MySQL的引擎讲一下,有什么区别,使用场景呢。
12、查询最新的10条数据
13、MySQL的union all和union有什么区别
14、MySQL有哪几种join方式,底层原理是什么
15、Redis了解哪些啊
16、Redis使用哨兵部署会有什么问题
17、分布式系统了解么,说一下Hadoop了解啥。
18、MapReduce的combiner干啥的
19、Hadoop分发任务时,有个job失败了,hadoop会怎么处理
20、hadoop分发任务,如果有一个节点特别慢拉慢了整体速度怎么办
21、排序算法了解哪些
22、用队列计算一个树的高度
23、一个黑名单集合,数据量很大,快速查询一个值是否在集合里,怎么设计
24、还是上一题,说这个黑名单可能需要动态地增删改,如何设计才能避免访问响应太慢。
25、上一题的黑名单做成分布式,怎么做。
26、分布式数据库了解么
面试答案
这份面试文件涵盖了Java开发1至5年的面试常见技术问题,包含了分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!需要的朋友,点击【 这里,就是这里 】即可免费领取!
Java经典面试问题(含答案解析)
阿里巴巴技术笔试心得
更多就不做展示了,这份Java高频面试体系文档是免费分享的,整理不易,有需要的朋友,直接点击(这里,就是这里)免费获取!
网友评论