个人背景
菜鸡
以下面试题不分先后,不对应公司
公司包括:喜马拉雅,比心,Soul,平安,运满满等
比较简单的题目不再赘述
计算机基础
计算机是怎么知道执行这些Java程序代码的
计算机的结构
Java
Tomcat的架构
线程越多越好吗?
不是,线程上下文切换耗费大量时间
线程池的拒绝策略方案,线程池参数怎么配置
线程池的等待队列会无界吗
有无界的阻塞链表
Spring怎么解决循环依赖
HashMap为啥不安全,ArrayList怎么变安全
CopyOnWriteArrayList
垃圾回收器怎么选择,JDK各个版本默认的实现
Redis
Redis单线程为什么可以还可以快速高并发请求
IO多路复用,纯内存操作
Redis的主从复制原理
Redis的集群模式
Redis的哨兵机制
Redis的持久化类型及方案
RDB 快照和AOF
Redis的过期策略类型及其自身方
点赞功能的实现
Redis的事务
MySQL
MySQL有哪些锁
MySQL索引类型及介绍
B+树索引
MySQL存储引擎类型及介绍
MySQL的MVCC何时更新版本号
InnoDB节点存储的什么
事务回滚的具体实现
分布式
Session一致性的各种方法及差异比较
分布式事务的各种方案及你的最佳方案
定时任务的调度
微服务
Eurake和Zookeeper的区别
Eurake如何实现自注册及发现,自动注册发现怎么实现
如何保证Eurake的高可用
Zuul和Nginx的差异
Hystrix的作用分类,限流功能的源码实现,熔断功能的源码实现,QPS的实现
数据结构&算法
Trie树的具体实现
按层打印二叉树
全排列
拼多多 社招 java 一面面经
1、简单做一下自我介绍把,为什么这么快就想换工作。。。。你说一下你简历里的这个XX项目。
2、看你在项目中用了redis,我们先聊聊redis吧,常用的数据结构有哪几种,在你的项目中用过哪几种,以及在业务中使用的场景,redis的hash怎么实现的,rehash过程讲一下和JavaHashMap的rehash有什么区别?redis cluster有没有了解过,怎么做到高可用的?redis集群和哨兵机制有什么区别?redis的持久化机制了解吗?你们在项目中是怎么做持久化的?遇到过redis的hotkey吗?怎么处理的?redis是单线程的吗?单线程为什么还这么快?讲一讲redis的内存模型?
3.我看你还用了RabbitMQ,简单说一下RabbitMQ的工作原理?如何保证消息的顺序执行?Kafka了解吗?和RabbitMQ有什么区别?你为啥不用kafka来做,当时怎么考虑的?
4、我看你简历里说熟悉计算机网络,来聊一聊计算机网络吧。了不了解tcp/udp,简单说下两者的区别?tcp为什么要三次握手和四次挥手?两次握手可以不?会有什么问题?
tcp怎么保证有序传输的,讲下tcp的快速重传和拥塞机制,知不知道time_wait状态,这个状态出现在什么地方,有什么用?
5、http与https有啥区别?https是怎么做到安全的?
CA证书和加密传输
6、有没有了解过协程?说下协程和线程的区别?用过哪些linux命令?如查看内存使用、网络情况?
7、你了解哪些设计模式啊。挑一个熟悉的讲讲?(除了单例模式)在项目中有用过设计模式吗?讲讲你怎么用的?简单说一下代理模式和装饰器模式?
8、你们数据库有没有用到分库分表,怎么做的?分库分表以后全局id怎么生成的?
9、索引的常见实现方式有哪些,有哪些区别?MySQL的存储引擎有哪些,有哪些区别?InnoDB使用的是什么方式实现索引,怎么实现的?说下聚簇索引和非聚簇索引的区别?
10、看你简历提到了raft算法,讲下raft算法的基本流程?raft算法里面如果出现脑裂怎么处理?有没有了解过paxos和zookeeper的zab算法,他们之前有啥区别?
11、聊聊java基础吧,如果我是想一个人的姓名一样就认为他们equal,能现场写下我们怎么重写equals吗?如果两个对象,一个是cat,一个是dog,我们认为他们的name属性一样就一样,怎么重写equals
12,还有点时间,写个题吧
leetcode406. 根据身高重建队列
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。
示例
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
paypal一面面经
1.做一下自我介绍吧,你的XXX项目说一下?你这个线程池的核心线程数怎么设置的?主要考虑啥?
CPU密集还是IO密集
你这里为什么要用消息中间件呢?不用可以吗?
2.线程池中ExecutorService中execute()和submit()方法的区别?线程池都有哪些参数?拒绝策略有哪几种?
有无返回值
3.了解netty吗?说一说你知道的。看过dubbo的源码吗?说一说你了解的
,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。
4.说说Spring中Bean的生命周期和Bean的作用域?Spring 在web 容器中的启动过程?IOC的实现原理?
5.讲讲数据库乐观锁和悲观锁?各自的适用条件?有没有sql调优经历。
[QA]什么是悲观锁和乐观锁?
| 术语 | 描述 | 常见案例 |
|---|---|---|
| 乐观锁 | 每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据 | 版本号控制,适用于多读少写的场景 |
| 悲观锁 | 每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁 | DB的行锁、表锁等,适用于数据一致性比较高的场景 |
6.讲一讲计算机网络的三次握手和四次挥手?为什么要三次握手,两次可以不?
7.最后是一套编程题:leetcode647
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:输入: "abc"输出: 3解释: 三个回文子串: "a", "b", "c".
示例 2:输入: "aaa"输出: 6说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".
除了java你还会其他的吗?有什么想问的?
paypal二面面经
1.假如一个风控系统响应速度突然变慢怎么排查
2.hashmap有几种构造构造函数。hashmap的遍历有几种方式,分别使用什么场景
3.对Java的垃圾回收机制了解吗?垃圾回收器呢?说一下CMS?OOM的排查思路?
4.springboot是怎么运行起来的
5.线程池的实现原理?为什么不建议使用Excutors来创建线程池?核心线程和工作线程的区别?volatile了解吗?和syncronized的区别?讲一讲AQS?公平锁和非公平锁?
6.NOClassDefFoundError和ClassNotFoundException有什么区别?
7.数据库的ACID和隔离级别? 分布式事务了解吗?有哪些处理方法?
8.redis实现分布式锁与用zk实现有什么区别,你用的redis,知道用zk怎么实现吗?
9.什么是缓存击穿,redis的hotkey如何处理?如何保证数据库与缓存双写的一致性。
10.你说你了解dubbo,能讲一下dubbo的基本原理吗?
11.kafka如何保证不丢消息又不会重复消费。
12.你了解哪些设计模式?讲一讲观察者模式和策略模式?
手写代码leetcode91 * 一条包含字母 A-Z 的消息通过以下方式进行了编码:
'A' -> 1
'B' -> 2
...
'Z' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。
示例 1:
输入: "12"
输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。
对大数据方面的技术栈有没有什么了解?有没有什么想问我的?期望工资是多少?
整体还是很常规的,面试官很有水平,也很友好。本来担心要英文面试,结果并木有用英文哈。
快手java一面面经
1.要不先做下自我介绍?说一说你最近做的那个项目?然后针对简历提了几个问题。你哪年生的啊?我看你简历上没有。
2.我看你简历里面说做过mysql的优化,说说你都做过哪些优化或者优化的思路?
数据库的索引了解吗?说一下索引的原理?聚集索引和非聚集索引了解吗?了解mysql的回表吗?
mysql实现分布式锁了解吗?还有没有其他更好的方式?
3.说一下事务的一些东西?你对事务的了解有哪些?说说数据库的乐观锁和悲观锁?
4..Redis有哪些持久化方式?你们在项目中一般怎么做持久化?如何实现集群和高可用?
5.Java中有哪些锁?synchronized与Lock有哪些区别?什么是公平锁和非公平锁?他们的底层怎么实现的?
AQS原理了解吗?能不能详细介绍一下?
6..说一下线程池的原理?ExcutorService下的四种线程池分别用在什么场景下?为什么单线程池和固定线程池使用的任务阻塞队列是LinkedBlockingQueue(),而缓存线程池使用的是SynchronousQueue()呢?
7.说一下violate关键字吧?刚才你提到可见性?他是如何保证可见性的?
8.说一下GC吧,什么时候进行Full GC呢?你了解哪些收集器?CMS和G1。详细谈谈G1的优点
最后写了一个编程题。
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6
解释: 节点 2 和节点 8 的最近公共祖先是 6。
示例 2:
输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
输出: 2
解释: 节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。
这个是leetcode原题。
写完面试官问方便来北京现场面试吗?你还有什么想问的?后续有什么消息hr会通知你。
紧接着就约了二面
二面比较注重设计
面试官上来就让设计了一个小型的社交系统。从数据库设计开始,然后设计架构。这个花了很长时间。
然后问了下dubbo的原理,有没有看过dubbo源码?dubbo的容错机制?
然后又是写题了
是股票买卖的一道题
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
示例:
输入: [1,2,3,0,2]
输出: 3
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]
最后还是有什么想问的?
8.14 阿里巴巴一面(新零售供应链,凉了,这是我的第一场面试),大概30分钟
HashMap和HashTable区别
HashMap实现原理(put、resize)
StringBuffer和StringBuilder区别
数据库事务隔离级别
如何避免幻读
数据库引擎(Innodb)的事务支持粒度
如何实现乐观锁
Synchronized实现原理
tcp三次握手,四次回首
osi7层模型
最后问了两个智力题:
两个粗细不均匀、长短不一的的绳子,燃烧一根分别需要60分钟,如何利用两根绳子,测量出15分钟?
一个篮球可以装多个乒乓球?
8.21有赞一面(凉了)20分钟
HashMap和ArrayList默认容量分别是多少?
HashMap和HashTable区别
HashMap什么时候扩容,几倍?
ArrayList什么时候扩容,几倍?
讲讲Java内存模型
讲讲gc算法
01背包问题,我说了dp的方案,但面试官说使用贪心算法(性价比最高优先,我当时屈服了),但是后来发现,贪心不行。
-
一面:(25号晚上做了美团笔试,很差,3道算法题,只过了30%)
上来先吐槽我算法很烂,然后要考察我基础。
进程调度方式
进程与线程区别
多线程优点
进程同步有哪些方式
osi七层模型,以及对应都有什么协议
tcp三次握手和四次挥手
udp和tcp区别
http报文都有什么
客户端发起http到服务端返回的详细过程
编程实现求二叉数深度
还有一题忘了。二面:
二面主要考察场景题,让我从自己的项目出发,如果项目需要上线了,需要考虑什么问题。
看过那些架构的设计。
平时的学习方法。 -
8.27阿里国际(深圳)一面(凉了)
GC算法都知道哪些?分别讲讲(serial pal new、parelle scavge、serial old、parelle old、CMS)主要讲了下cms
JVM内存模型。
Zookeeper原理,当有3台服务器,一个挂了,怎么保证服务的正常使用?
Spring 怎么接受web请求(应该是Spring MVC)流程是怎样的。
AOP原理
Spring Boot启动加载过程。 -
9.3 葡萄城(一面+机试+二面,凉了)(C#做控件开发)
一面,两个面试官,问了计算机网络,还是那些常问的问题,我就不列出来了。
问java有什么优缺点,我说单继承,接口可以多实现,就问为什么?多承继为什么不好?(自己给自己挖了个坑)
还喜欢什么?集合。
都有哪些集合?balabala……
HashMap是怎么实现的?baabala
HashMap可以解决什么问题?我说字符频率统计。
怎么做的?比较hashcode,然后比较equals
如果字符串是变量怎么办,“abc abc”,两个abc的地址不同?暗示hashcode不同,没答出来…
git常用操作都有哪些,查看日志用啥?
如果不小心把一个很大的文件2gb,push了上去,然后发现后在远端删除了,之后别人执行git clone,会把所有的历史信息给clone下来,如何解决这个问题?
重点提的是,让我讲述项目难点的时候,我提到了跨域问题,我当时对项目还没有完全熟悉(2年前做的),一直在那讨论为什么会出现跨域(这也导致我回去之后,把项目仔细看了下,发现是我当时对项目不够书序,导致描述错误)
二面,机试:用#画直方图????,输入一组数据:1
2
3
4
5
6
7
8
9
10
11
12
13
[{value:2,label:”a”},{value:5,label:“b”},{value:3,label:”c”}]输出:用空格分割每列### ## # ## # #———-------a b c做出来了之后,让支持value是复数,即在虚线下方画#,比较简单。
三面,还是2个人,比较有映像的是:
让我简单描述如何实现电梯调度算法,字符串压缩算法。(这个回答的不是很好,回家之后才想起来电梯调度算法和进程调度算法差不多)