一口气面试 6 家大厂,已拿 5 家 offer,大厂没有你想象中的难
总结:PDD 的面试流程非常简单粗暴,就是做题加上聊项目,一半一半,题目难度基本是 Leetcode 上的 Medium 难度,我面试下来也没有碰到很偏很怪的题目,面试准备的时候,把 Leetcode 上面常考的 200 题刷一刷就没问题了。虽然最后没有去 PDD,但是 PDD 的面试官和 HR 都给我留下很好的印象,面试流程很舒服,就像和朋友交流一样;PDD 的流程很快,大概两周之内出结果,因为不同公司的流程不一样,HR 那边一直等了我好几周,可以让我拿到其他 Offer 了再回复她,这点上真的特别感激。
百度
==
1.简历投递方式:BOSS 直聘找到 HR。
2.一面:视频面试。分享项目,然后问一些技术细节,主要偏向 Java 基础、缓存、分布式这块。
3.二面:视频面试。这轮和上轮差不多,不过会问更多的技术细节,让我在线写了一个生产者消费者模式,还有一个算法题。
4.三面:视频面试。主管面试,比较轻松一些,聊聊工作、聊聊规划就完了。
5.HR 面试:确定薪资,百度的薪资组成是 Base 加上股票。如果有其他公司的 Offer,可以大胆 argue 一下,HR 可能会有各种理由说不能加了,但是一定要坚持 argue,我体验下来,argue 的空间还是很大的。
总结:面试侧重于纯技术,所以关于技术细节,一定要搞清楚弄明白;至于算法,百度考察的不深。面试流程很快,大概一周多就结束了。
经验总结
====
多家面试总结下来,考察的范围都很广,包括基础知识、项目和算法。
基础知识这块,需要花大量时间准备每一个细节,知其所以然,这样才能面试的时候问起来,都能头头是道。比如 Java 的 AQS 原理,多线程,JVM 内存等,框架的话,有 Spring,MySQL、Redis、Kafka、ES、ZK 等,都要十分熟悉。
项目,阿里比较注重项目,所以不仅要熟悉项目做了什么事情,而且要提炼出项目中的闪光点或者说不一样的地方,为什么要选择这种技术、架构怎么设计、以后如何扩展、出问题了怎么定位等等;这些在面试之前都要想清楚。
算法,这点没地说,就是要多刷题。面试了这么多公司,除了阿里,其他公司的每一轮都会要求做算法题,所以在面试之前要对各种常见算法了然于心,比如 DFS、BFS、树、贪心算法、常见 DP 等等,有时间的话多去刷刷题找感觉。
面试题分享
=====
这部分分享一下我在面试准备过程中,以及面试时遇到的常考基础题,大家可以针对题目复习一下。所有的面试题及答案我都已经整理成 PDF,需要的可私信【面试】二字领取!!
1. Java 基础
==========
1.1 Hashmap 与 concurrentHashMap (重点)
1.2 集合相关问题
1.3 Java 泛型的理解
1.4 跳表(ConcurrentSkipListMap)的查询过程是怎么样的,查询和插入的时间复杂度?
1.5 java 字节流 字符流
1.8 包装类型和基本类型比较问题
1.9 为什么重写 equals 和 hashcode
1.10 stringBuilder 和 stringBuffer 的区别
1.11 Java 序列化的原理
1.11 Java8、9、10、11 的一些新特性介绍
1.12 java 中四种修饰符的限制范围。
1.13 Object 类中的方法。
1.14 浅拷贝 深拷贝
1.15 接口和抽象类的区别,注意 JDK8 的接口可以有实现。
1.16 动态代理的两种方式,以及区别。
1.16 传值和传引用的区别,Java 是怎么样的,有没有传值引用。
1.17 一个 ArrayList 在循环过程中删除,会不会出问题,为什么。
1.18 Exception 和 Error 区别
1.19 new 关键字和 newinstance()方法
1.20 Map、List、Set 分别说下你知道的线程安全类和线程不安全的类
1.21 Java 防止 SQL 注入
1.22 反射原理及使用场景
1.23 static Vs Final ? 如何让类不能被继承
1.24 内存泄露?内存溢出?
1.25 重写 Vs 重载
1.26 Lambda 表达式实现
1.27 ClassNotFoundException 和 NoClassDefFoundError 的区别
2. 并发、多线程
==========
2.1 volatile 关键字 原理
2.2 对 java 中锁的理解
2.3 悲观锁 乐观说
2.4 对 CAS 的理解,java 中的 CAS,如何不用 unsafe 实现 CAS
2.5 java 线程创建方式
线程 run 和 start 的区别?两次 start 同一个线程会怎么样?
2.6 Java 线程池的原理?线程池有哪些?线程池参数是什么?
2.7 ThreadLocal 及其应用场景
2.8 对线程安全的理解
2.9 get 需要加锁么,为什么?
2.10 Lock 的底层原理。synchronized、Lock、ReentrantLock、ReadWriteLock。
2.11 AtomicInteger 怎么实现原子修改的?
2.11 分布式环境下,怎么保证线程安全。
2.12 产生死锁的四个必要条件?
2.13 如何中断线程
2.14 线程的状态都有哪些。
2.15 wait、notify、notifyAll、await、signal、sleep、yield
2.16 Callable 和 Future 的了解。
2.17 synchronized 关键字的用法,优缺点。
2.18 可重入锁的用处及实现原理,写时复制的过程,读写锁,分段锁
2.19 ABC 三个线程如何保证顺序执行。
2.20 双线程交替打印奇偶 (阿里)
3. JVM
=======
3.1 常见 GC 算法、 CMS 收集器、G1
3.2 jvm 内存模型 && Java 内存模型
3.3 怎么判断对象可被回收?GC 可达性分析中哪些算是 GC ROOT?
3.4 eden survivor 区的比例,为什么是这个比例,eden survivor 的工作过程。
3.4 fullgc 是否可以回收方法区
3.5 什么对象会进老年代? 为什么新生代使用复制算法?
3.6 被 GC 判断为"垃圾"的对象一定会回收吗
3.7 强制 young gc 会有什么问题?
3.8 类加载的过程 Java 为什么要设计双亲委派模型?
3.9 什么时候会触发 minor gc,什么时候会触发 full gc?
3.10 G1 和 ZGC 的区别
3.12 你知道强引用、弱引用和软引用吗? GC 对他们执行怎样的操作。
3.13 JVM 方法栈的工作过程,方法栈和本地方法栈有什么区别。
3.14 JVM 的栈中引用如何和堆中的对象产生关联。
3.15 逃逸分析技术。
3.16 Java 是否可以 GC 直接内存。
3.17 常用的 JVM 调优参数。
3.6 具体的性能调优步骤吗?fullgc 的时候会导致接口的响应速度特别慢,该如何排查和解决。
3.18 dump 文件的分析。
3.19 Java 有没有主动触发 GC 的方式
3.20 假如现在在同一台机器上开两个 java 项目,有几个 java 虚拟机?
3.21 javac 编译器工作流程
4. Spring
==========
4.1 spring IOC 过程
4.2 循环依赖怎么解决的
4.3 spring AOP,动态代理是怎么实现的
4.4 spring BeanDefinition 作用
4.5 spring @Autowired (@Resource, 类似)实现原理
4.6 bean 的生命周期
4.7 Bean 的默认作用范围是什么?其他的作用范围?
4.8 Spring 的单例是怎么实现的?
4.11 SpringMVC 不同用户登录的信息怎么保证线程安全的?
4.12 Spring 用了哪些设计模式。
4.13 Spring 注入 bean 的方式。
4.14 什么是 IOC,什么是依赖注入。
4.15 Spring 具有什么特点(IOC 和 AOP)
4.16 几种 scope 区别,aop 实现有哪几种实现,
评论