本以为能躺着进华为,结果陆续收到京东 / 滴滴 / 爱奇艺 offer 的我迷茫了
背景
菜鸡一枚,在实习期间面了广州的 BIGO 和唯品会,两家公司到 HR 面说不招 22 届的,然后就没找了。并且苏州华为离宿舍只有几站路,本来以为躺着都能进华为,结果今年苏州华为压根不怎么招见习生(但是 HR 一直拖着,说走流程、马上开始、正在安排),拖到返校想着不能和华为继续拖下去了,重新审视了一次简历,发现项目上只有一个简单秒杀和一个 CRUD 的项目,然后花了大半个月做了两个项目,应对完接踵而来的考试。然后开始投简历找实习,此时大概是 6 月 28 号。
到了 7 月份,朋友要么不实习或者早就有了 offer,此时导师两次询问我实习情况和内推(但是我太菜了,内推失败了),一直到 7 月 7 日都没收到 offer,这段时间每天失眠,不过 7 月 7 日的时候,连续几天收到了几个 offer,先后顺序应该是京东(数科、零售)、滴滴(北京、杭州)、爱奇艺(上海、上海)、百度、金仕达,今天就说一下我面试滴滴的经历,后面还会分享一些我的学习方法和资源库
一面:
1. 自我介绍
2. 写题,括号生成
3. 问项目,我说写了个连接池。问连接池空闲连接太多咋办(空闲时间),如何保证协程拿到的链接不重复(获取链接的时候加锁)
4. 问项目,为什么用 rpc 不用 http,为什么用消息队列,恶意操作有发了很多消息怎么办(我乱说一顿,最后直接问我了解 kafka 内部嘛,我说不了解,就没问了)
5. redis 持久化方式
6. 说说协程,我大概说了下,然后不会 go,问让用 java 支持协程你怎么做
7.项目:为什么要多级缓存,进程地址空间多大
8. DockerFile 最大的层数(后来在网上也没查到)
9.怎么保证 Redis 和数据库的同步(库存补偿)
10.项目中如何解决粘包、拆包的问题(基于字符或者基于长度)
11.如何保持长连接( Netty )
12.如何实现心跳保持( IDLE 编解码器监听事件)
13. Netty 为什么快(基于 NIO+零拷贝)
二面(技术栈)
JUC
你看过《Java 并发编程的艺术》,说一下 Symchronized 的原理(对象头、锁升级机制)
线程池大全套(执行流程 core->BlockingQueue->max),(BlockingQueue->四种阻塞队列),(拒绝策略->JDK 四种、DUBBO 和 Netty 扩展的两种),(max 啥时候会回收)
什么情况下使用什么样的阻塞队列(linked、array、同步队列、优先级队列的不同)
AQS 介绍一下(state 可重入、读写锁、如何实现公平,非公平)
HashMap、ConcurrentHashMap 大全套
Netty
你看过《Netty 实战》,介绍一下 Netty,可以从工作方式方面(线程模型->主从 Reactor、BossGroup、WorkerGroup 区别、EventLoopGroup 与线程池的关系、EventLoop、Pipeline、ChannelHandler、Context)
有哪些框架的底层使用的是 Netty(RocketMQ、DUBBO、ElasticSearch)
NIO 介绍一下(Selector、Channel、ByteBuffer,IO 多路复用,底层的 select、poll、epoll(这里我只是了解,不清楚具体实现))
JVM
你看过《深入理解 Java 虚拟机》,看完了吗(只看到 GC、后边没看)
JVM 全套(内存区域、GC 算法、垃圾收集器、双亲委派机制、类加载机制)
JVM 调优了解吗,OOM 了怎么排查(拷贝 Dump 文件,使用工具查看)
了解哪些工具(JvisualVM、Jprofiler、Jstack)
Jmap 了解吗(no)
如果想把 JVM 内存固定为 32M 如何操作?(XMS、XMX 同时设置)
你看过《Java 编程思想》,评价一下这本书(博大精深,内容太多,记不住,但是某些比如面向对象、static 和类绑定这些还是留下了深刻印象(面试官:我也是上学的时候看的。早就忘得差不多了,内容太多了。)还好没装)
《Java 编程思想》当中介绍的设计模式有哪些(设计模式我不熟悉,但是 IO 中采用了适配器模式)
介绍一下适配器(没说出来)
Redis 数据结构(String、Hash、Set、Zset、List、Hyperloglog、Bitmap、Grospatial、BloomFilter)
三面:记得比较全
1.进程通信方式
2.fork,fork_v 区别(不会)
3.零拷贝应用
4.有哪些 cpu 时间,网络多那个多,io 多那个多
5.read socket 返回-1 是什么情况
6.read ,对面宕机了你应该怎么处理(读全局变量 ERRNO)
7.如何创建守护进程
8.unix 域套接字有啥好,有啥缺点
9.如何学习操作系统知识的
10.java 线程有那些状态
自旋锁应用场景,你能举个例子嘛?
11.能来实习嘛
12. 你想从事哪方面工作
面试结束复盘查漏补缺
面试本质是一个自我优势展示的过程,不要把面试变成面试官问一句自己回答一句,主动抛出一些可能的点等面试官来问,比如我基本都被问到了 DB 和缓存之间怎么保证数据的一致性,其实都是我自己刻意往上引的,比如面试官说,你用过 Redis 吗,你可以说,用过,一般用来作为缓存配合 MySQL 提高性能,需要注意它们之间数据的一致性问题(不要太刻意,自己把握分寸),面试官大概率会接着问你是怎么保证的
以下最新总结的阿里 P7 资深 Java 必考题范围和答案,包含最全 MySQL、Redis、Java 并发编程等,完整面试题及答案,戳此传送门获取
刷面试题
2021 大厂面试题 65 份
知识点最全的 java 面试宝典(共 227 页)
Leetcode 算法刷题
刷 leetcode,刷 leetcode,刷 leetcode!重要的事情说三遍,作为一个程序员,代码写的烂就是原罪,面试时前面答得再天花乱坠算法写的捉急也没用,只会让面试官产生你是背面经的感觉,所以写算法题还是要快准狠,快速无 bug 写出最优解在面试官那里是非常亮眼的,这个是没有捷径的,我自己这次面试 leetcode 高频 300 题刷了好几遍,面试算法很顺利,当然最主要的还是刷中等难度的题,hard 题性价比太低,反正我没怎么刷...
Leetcode 算法刷题宝典(共 666 页)
Java 数据结构和算法.(第二版)(共 584 页)
算法刷题 LeetCode 中文版(共 264 页)
算法刷题 100 天
MySQL 调优
微服务
Spring Cloud Alibaba 全解
2021 备战秋招全套资源库
不要眼高手低,不少小伙伴看面经觉得自己啥都会,但是自己会与面试过程中能清晰有层次的说出来是两回事,并且自己会到什么程度,有个说法很好,判断你是不是真的掌握一个知识的一个点在于你能不能通过通俗易懂的语言教会一个完全没有相关知识背景的人,如果这可以做到,那对知识的掌握一定是融会贯通的,面试过程中一定可以信手拈来。比如 volatile 关键字的原理,能不能说出点面试官眼前一亮的东西,和别的同学蜻蜓点水不一样的感觉,这还是不容易的
分享方式:戳此传送门获取
评论