头条一直是我向往的公司,三年前就想去面试,不过由于没有互联网公司的经验,简历这一关都过不了,很遗憾,现在终于有个互联网公司的工作经历了,准备了两三个月,期间三天打鱼两天晒网,断断续续刷过一些算法题,终于鼓起勇气让猎头把我的简历推过去,隔了一两个星期,头条终于约面了,恰好是约在了晚上视频面试,不用去现场,也不用请假。总体面试我只给自己打了60分,不是非常理想。下面复盘一下今晚的面试题,在牛客网上视频面试。
1.简单介绍自己
我就重点介绍几个做过的重点项目,并且引导到我了解比较多的技术点上去,这是猎头教我的,否则面试官司会放开问,这很不利,必须引导到自己擅长的技术点上来。
2.redis的集群方式
主从、哨兵、redis sharding、redis cluster
3.kafka的原理,速度快的原因?
按顺序写,按位移读、多分区、数据压缩、请求批量处理、
使用批量处理的方式来提升系统吞吐能力。
基于磁盘文件高性能顺序读写的特性来设计的存储结构。
利用操作系统的 PageCache 来缓存数据,减少 IO 并提升读性能。
使用零拷贝技术加速消费流程。
单IO还是多IO?
按顺序读写还是随机读写?
4.JVM相关
JVM是怎么优化的?
MetaSpace配置的是多少?2G
MetaSpace是与堆共享的么,还是独立的?独立的,直接内存
新生代与老年代的比例是多少?1:2 新生代内是 8:1:1
堆内存配置了多少?如何解决堆配置过大导致FULL GC过长的问题?
堆内存配置16G,FULL GC一般几十毫秒,多的时候一两百毫秒,服务的超时时间做好控制。
5.SQL优化
SQL是怎么优化的?
在很多分页的情况下,是如何优化的?
查询数据按某个字段排序,比如按时间排序,第二次查询时,把上次查询的时间带过来,相当于从第一页开始查询。
6.Dubbo
Dubbo有哪些负载均衡的方式?
随机、配权重、最少调用优先、一致性哈希
8.限流的常用算法?
计数器、滑动窗口算法、漏桶算法、令牌桶算法
漏桶算法和令牌桶算法的区别?
漏桶算法是设置一个最高值,底部按一定速度出桶,然后统计流量,一旦流量超过最高值,则丢弃。
令牌桶算法是在固定时间向桶里扔一定数量的令牌,如果请求获取不到令牌则丢弃。
漏桶算法与令牌桶算法的区别在于:l 漏桶算法能够强行限制数据的传输速率。l 令牌桶算法能够在限制数据的平均传输速率的同时还允许某种程度的突发传输。需要说明的是:在某些情况下,漏桶算法不能够有效地使用网络资源。因为漏桶的漏出速率是固定的,所以即使网络中没有发生拥塞,漏桶算法也不能使某一个单独的数据流达到端口速率。因此,漏桶算法对于存在突发特性的流量来说缺乏效率。而令牌桶算法则能够满足这些具有突发特性的流量。通常,漏桶算法与令牌桶算法结合起来为网络流量提供更高效的控制。
7.你有什么想问的吗?
就简单问了下广州团队的规模?
所要做的项目?政府审批项目、财务项目
项目使用的技术?常用的技术大部分用JAVA、小部分使用golang
8.最后在线编写一道算法题,10分钟内写出来,面试官会
给一个整数数组A,以及另外一个整数B,把A中三个数之和等于B的数字全部打印出来。
我是写出来的,使用两个循环和一个map,时间复杂度是O(N^2),感觉不是最优的,面试官跟我聊了一下思路。
这样就结束了,感觉JVM调优、大分页SQL优化、KAFKA IO和算法题没答好。
面试结果怎么样暂时还不知道,通过面试来促进学习,抱着学习的态度进行面试。
祝自己好运。