总结
三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。
- 第一个是算法
关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。
而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本
《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题
《算法的乐趣》共有23个章节:
- 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)
基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)
- 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)
3.hashMap 和 ConcurrentHashMap 的区别,以及底层的数据结构是什么?对于具体的改变在哪个版本回答的比较模糊,其他部分回答的还可以,面试官也没有细问 HashMap 和 ConcerrentHashMap 的 put 和 get 过程,没有问扩容、缩容等问题,需要重点去关注一下这部分?
4.因为说 ConcurrentHashMap 的时候说到了 synchronized 和 ReetrantLock,说一下 Synchronized 和 ReentrantLock 的区别?这部分对 synchronized 的锁的优化没说上是在哪个具体的版本改进的?但是区别还是说的比较好?
5.说一下 synchronized 的锁升级过程?这部分谁回答的也挺好的?
6.说一下 CAS?CAS 是什么?用来解决什么问题?底层用的是哪个类?回答的还可以,但具体细节还有待细化。
7.CAS 的使用会有什么问题?怎么解决该问题? ABA 问题,原子类里面的 AtomicStampedReference 可以解决该问题,带一个时间戳,除了当前值和期望值外,还有当前时间戳和预期时间戳。
6.String s = new String(“abc”),创建了几个对象,每个对象分别在什么位置?注意分别回答,s 在栈中,new String 对象在堆中,常量在 1.7 之前在永久代中,字符串常量池在永久代中;在 1.7 之后,常量 abc 在堆中,因为字符串常量池在堆中,通过直接指针的方式连接。
7.由于上面问题提到了堆栈,说下 jvm 内存结构,每一部分的作用是什么?
8.是不是看过深入理解 java 虚拟机?我说看过一部分,类文件结构没有看完,其他大概看过了,也没有问类加载的问题
9.jvm 调优部分:实际工作中有调过优吗?JVM 参数设置,STS 调优经验,这部分回答的不是太好,因为确实实际工作中用的比较少,但是作为面试,还是要准备一下相关问题
10.工作中用到过多线程吗?用的是哪些线程池?每种线程池有哪些缺陷?底层所使用的的队列分别是什么?
11.线程池工作原理部分有了解吗?说一下线程池工作原理?
12.CycliBarrier 用来干什么?CycliBarrier 的最后命令由哪个线程执行?是主线程还是最后一个到达的线程?是最后一个到达的线程,可以在 CyclicBarrier 的构造函数中设置最后要执行的代码,在此之前可以打印出来当前线程的线程名称查看;
13.CountDown 有了解过吗?CountDown 和 CycliBarrier 的区别是是什么?在使用上有啥区别?
项目部分:
14.看你用过缓存,你们一般用什么缓存?用来解决什么问题?
15.redis 是怎么部署的?主从部署?有了解过 redis 集群部署吗?我说 redis 集群部署没有了解过,但是有了解过 mysql 的集群部署,有读写分离部署,主从复制,分库分表等相关方案,面试官也没有具体细问,面试过最后说可以下去了解一下 redis 的集群部署,因为现在互联网公司大多数都是集群部署的。
16.说一下 redis 的数据类型吧?zset 的底层数据结构是啥?zset 的适用场景有哪些?我说了热搜榜单排行榜,各种排行榜可以用 Zset;
17.说 redis 的时候说到了 redis 的集群部署解决了 CAP 理论中的 AP,所以面试官开始问分布式相关知识了?(面试回答问题的时候也可以这样引导面试官,但是我引导错了,因为这部分我了解不多,给自己挖了个坑);说一下 CAP 是什么?BASE 有了解过吗?
18.上面说 CAP 的时候说到了 Zookeeper 保证了 C,强一致性性,所以问 Zookeeper 保持强一致性的原理和算法:有了解过 ZAB 和 Paxos 分布式一致性算法吗?具体算法没有说清楚,大概说了一下 Leader 选择过程,说的不是很细致;最后面试官说下去可以研究一下分布式这部分知识,可以看下 Etcd,是一个分布式、可靠 KV 存储的分布式系统,使用的协议,和 Zookeeper 的区别等;
19.看你有用过 MQ,你们用的是什么消息队列?用来解决什么问题?怎么用的?是哪种模式,点对点还是发布订阅?有消息持久化吗?怎么保证消息的重复消费?
20.SpringBoot 的事务有了解过吗?我说用的是 Sping 的声明式事务(其实想引导面试官到 Spring 上来的,但是面试官 Spring 的问题并没有多问),然后事务的注解是什么?
21.你们用的 ORM 框架是什么?mybatis?
22.根据表生成对象的时候生成了哪几类对象?分别存放在什么位置?那个包下?
编码部分:
确定某一个整数是不是快乐数?Lettcode 202 题,和面试官沟通之后做出来了。
问答环节:
问我有没有想问的问题?
1.由于刚才分布式和 redis 集群部分回答的不是很好,对于这部分的学习有什么建议吗?
可以先学习一下 docker 容器技术,因为现在大多数部署都是容器技术的,之后可以学点分布式中间件相关的等等等。。。
2.您所在团队现在使用的技术栈主要是什么?
3.如果有机会的话,后续面试流程是什么样的?
整体感觉:
写在最后
还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…
+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**