JAVA后端架构

工作两年多的渣渣社招辛酸心路历程【内含阿里、字节、美团等】

2020-11-28  本文已影响0人  AI乔治

前言

楼主本科渣211,硕士华科,专业均SE,校招的时候没啥实习经历,进大厂工作两年多,做后端开发的工作,没有涉及到高并发的case,也没有大流量的项目,也没有必须引入某些中间件或者nosql才能解决业务问题的场景,简称“三无”,只能尽量在简历里矮子里面拔将军,写一些可能有些价值点的内容。社招过程中拿过美团、货拉拉、微众、阿里、字节的offer,最终选择字节。

关于社招的最大感受

校招的时候因为没参加过实习,基本全是实验室的玩具项目,业务复杂度跟技术复杂度可能O(1)级别,最多的面试基本就是基础知识,框架原理等,没啥好说的,项目随便讲讲也就过了。

  1. 社招的时候如果你做的领域或者方向跟面试的岗位不搭界的话,那么社招面试基本上难度会陡然上升,全靠技术硬实力;如果你是相似的领域,那么可能会项目涉及的很多,技术没有那么难,如果你刚好是他们所需要的一个领域模块,那么你就会有更大的机会面试成功。

  2. 社招面试项目很重要,不光是你项目本身的技术复杂度,还有业务复杂度,你本身在项目中担任的什么角色,遇到过什么问题,是技术瓶颈问题,还是业务问题,怎么解决的,这几个问题是非常重要的

  3. 很多同学包括我自己一开始也没有头绪,看很多面经都说要对自己的简历滚瓜烂熟,对自己的项目烂熟于心,所以到底是什么算烂熟于心,仅仅是把简历写的内容背下来吗?

下面总结了一些问题,要注意自己一定要在自己的逻辑里面自洽,不能前后矛盾,前因后果要想清楚。也可以自己不要把所有问题都说满,可以故意漏下问题,等面试官提问(面试套路,自己主导问题方向)。总之,不然可能一个不是这个范围的问题把你问到了,你不知道如何回答,会给面试官一个不好的印象(为啥你自己的项目你都没有吃透?)

  1. 最后总结下社招面试最主要的几种问题:

  2. 1 你项目为什么这么设计?

  3. 2 这么设计为了应对什么样的问题?你这样设计有什么好处,获得了哪些收益?

  4. 3 这么设计有什么瓶颈吗?遇到了什么问题?这么设计有哪些地方不好的?考虑不周的?

  5. 4 针对问题怎么解决的?针对不好的地方怎么去优化?

  6. 假如你是大厂出来的,如果面试的时候一问三不知,或者两不知,或者面试被一问,因为自己的问题没有准备好而导致卡壳或者思考不周,那面试就会大打折扣,这时候大厂反而不是光环了,而是一个问题。(大厂应该都还可以,怎么到你这不咋行了呢?)

  7. 面试一定要自信。本来应聘就是双向选择的过程,面试的公司也不是非你不进,不要因为你是面试者就姿态很低,一种乞求面试官给你一份工作的姿态,这样是不对的。好的面试应该是你自信表达你自己的理解,即使不会也不要为难,不需要支支吾吾或者瞎说,这是大忌。不会就是不会,可以潇洒的回答,没有关系的,好的公司也不会就你不会的问题一直追问,这也没有意义。

楼主社招面试经历

  1. 算法:用链表模拟大数加法

  2. oracle跟mysql的区别,隔离级别

  3. 慢查询如何定位?如何优化?遇见过什么样的case,怎么解决的?

  4. 项目用到了分库分表,分库一定会提升性能呢?什么是冷热数据?优化了什么地方?假如出现了数据暴增,怎么处理?有什么扩容的方法?怎么无感知扩容?怎么做到数据实时一致性?

  5. 线程池,核心参数,等待队列满了,来任务立即执行吗?

  6. spring boot跟spring的区别,spring boot是用来干什么的?最大的作用是什么?starter是干什么的?

  7. hashmap1.7跟1.8?优化点?红黑树化为什么是8?退化为什么是6?

二、美团

  1. 项目介绍,难点,怎么遇到的?产生原因?如何解决?为什么要这样分表?跨库join如何解决?数据量突增怎么解决?

  2. 如何解决线上问题?cpu狂飙怎么办?频繁minor gc怎么办?可能造成的原因是什么?如何避免?

  3. 数据库 隔离级别,怎么实现的?当前读,快照读?MVCC?

  4. 算法:两数之和

  1. 项目难点,如何解决?

  2. 分库分表的设计?

  3. 分布式事务出现过不一致吗?为什么?怎么解决?有什么方法避免?怎么监控?监控到怎么处理?什么时候需要人工接入

  4. 如何优雅的写代码?什么代码算做优雅?什么代码是规范?你们代码规范是什么样的?

  5. 如何进行code review?

  6. JVM模型,pc计数器什么时候为空?

  7. 算法:之字遍历二叉树

  1. 对于大流量,高并发怎么看?你们项目有没有?为什么没有?如果有怎么做?

  2. 对于你入职以来的工作你怎么看?

  3. 怎么能拿一个好绩效?对于你的绩效你怎么看?

  4. 对于中间件怎么看?用过哪些中间件?为了解决什么问题?

  5. 对于redis怎么理解?适合什么场景?你用它来干什么?解决什么问题?

  6. 你怎么看待我们团队?

  7. 你对于自己的规划是怎么样的?

  8. 为什么这个时候选择离职?

三、微众一面

  1. 做题,一个题目是自己实现的原子整数类,为啥没实现原子性的;第二个题目是spring bean的生命周期 还有哪些set函数怎么使用?;第三个问题是银行账号A转账B的可能涉及到的问题,死锁?事务?数据库?并发?强一致性?谈一谈

四、酷家乐一面

  1. 项目介绍,分库分表

  2. public private protected区别,放在类上,方法上,接口上,属性上?
    不加修饰符是什么?

  3. 抽象类跟接口的区别,抽象类抽象方法

  4. 函数执行时间不定,需要一定时间里返回?怎么实现?

  5. hashmap 红黑树,什么时候扩容?扩容是怎么扩容的?怎么发生环?死循环?1.8优化?

  6. concurrenthashmap 怎么实现的线程安全?100%安全吗?1.7跟1.8区别?为什么这么做?

  7. mysql innodb下,能不能不设置主键?主键可以为空吗?可以允许几个?主键跟非主键的区别?索引存储形式?

  8. 联合索引失效问题?索引失效问题?

  9. .java文件都包含什么?.class文件都包括什么?java对象的存储结构

五、有赞

  1. 项目优化做了哪些?

  2. 线程池,参数,怎么设置?callable和runnable?线程间通信?

  3. mysql索引,覆盖索引?回表?B+树叶子节点存储什么?为什么不用AVL树?

  4. 数据库锁,乐观,悲观,record lock?next-key lock?

  5. hashmap 1.8优化

  6. gc的时候 young gc只有两个区可以完成吗?有什么问题?

  1. 项目介绍

  2. 最有难度的点

  3. 高负载,高流量的业务处理

  4. 如何数据一致性?

  5. 如何减少人工干预?

六、头条

  1. 算法:找零钱

  2. Redis为什么这么快?多路复用io模型?跟多线程对比?select epoll模型?
    epoll怎么实现的?都用了哪些存储结构?什么时候就绪事件?回掉函数在哪里注册?epoll是怎么使用的步骤?epoll wait干了什么?给redis服务端发送get数据请求,是如何处理的?

  3. zset数据结构是什么样的?为什么采用跳表?insert一个数据是怎么样的流程?get一个数据是怎么样的流程?多级索引是怎么更新的?如何确定一个数据在第几层?各自的时间复杂度是多少?你觉得还有什么优化的地方?

  4. Redis的高性能是怎么实现的?多主多从?一主多从?各自插入一个key的时候是什么样的流程?主从复制是什么样的?怎么强一致性?什么情况下不适合?主挂了,各自的选举是什么样的?怎么完成主备切换的?如果主挂了,从没复制完全,会出现什么问题?什么样的情况下可以使用这样的组群方式?什么样的情况下不适合?

  5. raft协议 paxos算法

  6. http状态码 300 400 500 499

  7. dos ddos drdos 如何避免?怎么预防?怎么发现?利用了TCP什么特点?怎么改进TCP可以预防?服务端处理不了的请求怎么办?连接数最大值需要设置吗?怎么设置?

  8. Thrift RPC过程是什么样子的?异构系统怎么完成通信?跟http相比什么优缺点?了解grpc吗?

  9. https http1.1 2.0 3.0

  10. hashmap如果的确需要很大容量的数据去操作的时候,怎么办?怎么优化?

  1. linux fork子进程 如果在线程中fork会怎么样?如果总共就4g内存,一个进程有10个线程,在线程中fork,能不能fork出来?

  2. TCP连接server端跟client端都有几种状态

  3. linux作为client端可以最多建立多少个tcp连接?作为server端呢?

  4. 建立tcp连接时,如何connect时候阻塞了,那么怎么能不阻塞,去干别的事情?

  5. linux怎么监控cpu运行情况?端口连接情况?tcp连接情况?占用了多少内存?

  6. epoll 多个请求怎么处理?fd什么时候可读,什么时候可写?epoll模型有没有用到什么队列去等待的,来一个请求处理一个吗?能写处理流程的一些伪代码吗?

  7. Redis是怎么处理请求的?单机的qps是多少?如果一直用get,你觉得达到qps的顶点,它的限制点在哪里?怎么能够突破峰值qps?怎么用单线程处理的请求?如何解决单机qps达到峰值的问题?

  8. redis分布式锁,怎么样实现?怎么理解?不用redis可以吗?有什么问题?生产上出现过问题吗?为什么会出现?怎么优化?考虑过zk吗?单机redis分布式锁?集群状态下分布式锁?主从下分布式锁?都是什么情况?redlock怎么理解?

  9. 系统怎么算高可用?多部署机器能实现什么?有什么弊端?有什么优势?怎么实现高可用?多部署机器能实现高可用吗?熔断机制是什么?怎么实现?

  1. 算法:两个有序数组间相加和的Topk问题

  2. 分库分表 数量级 系统qps 聚合怎么做?

  3. 扩容怎么做?

  4. redis 淘汰策略?超过最大内存限制发生什么?redis什么时候会慢?redis持久化机制

  5. nosql es能解决什么问题?hbase呢?

  6. 强一致性?弱一致性?适用什么场合?***web端怎么实现强一致性?怎么设计缓存?

七、货拉拉

  1. hashmap

  2. sync跟reentrantlock

  3. redis 基本数据类型,底层如何实现?跳表?为什么单线程会快?有哪些设计?单线程如何处理多个请求?哪些可能会导致redis慢?redis如何实现高可用?哪些命令可能会慢?

  4. 线上oom情况?怎么排查?

  5. mysql mvcc 双写机制?binlog跟redo log先后顺序?一个写不成功怎么处理?当前读和快照读?事务隔离级别?线上sql优化经验?

  6. 分布式事务?用过哪些方式?还知道哪些方式?怎么实现?有没有想过自己实现?避免哪些坑?

  7. 跨库聚合怎么实现?分页?第几页?下一页?

八、阿里

  1. JVM如何和操作系统交互

  2. 垃圾回收 回收什么?怎么回收?垃圾回收算法?垃圾回收器?

  3. sync和reentrcntlock

  4. 分库分表 聚合查询 limit怎么实现 top的实现

  5. 不停机扩容?分表避免冷热?不停机扩库?不停机扩表?跨库事务?

  6. 线程池 参数 为什么不用fixed?

  7. redis 淘汰策略 主从 集群 高可用如何实现?

  8. 分布式锁

  9. zk实现分布式锁?

  10. 算法题:写好发他邮箱 几个线程轮番打印不同花色的扑克牌从小到大

  1. 分库分表为什么这么设计?数据增长怎么做?怎么扩容?数据不均匀怎么办?冷热数据怎么分离?聚合怎么做?跨库聚合怎么做,查询怎么做?跨库分页怎么做?

  2. mysql 线上的组群模式?一主多从?为什么这样?强一致性如何保证?为了解决读写分离吗?是为了一主多备吗?主库crash掉怎么办?从库呢?

  3. 分布式事务怎么做?什么原理?怎么实现的?出现过事务不一致性吗?为什么?怎么解决的?

  4. 访问请求暴增怎么做?怎么缓解压力?

  5. redis分布式锁怎么实现的?可靠吗?有什么问题?redlock能解决吗?为什么?怎么优化?
    为什么用redis做?

  6. cpu飙升怎么处理?load飙升怎么处理?什么情况可能会遇到上述情况?

  7. full gc怎么形成?什么情况会产生这么情况?线上出现怎么排查?

九、百度

  1. 一面已过,后来没约二面询问hr,hr告诉说不招了,尴尬,面试问题让我给忘了。。。

十、快手

  1. 热榜top100怎么做?

  2. 最近浏览web端手机端怎么设计?

  3. 最喜欢的榜单 怎么设计缓存?

  4. 直播间刷一个礼物,怎么让所有人都看到?

  5. 设计一个最近看过的作品,数据库跟缓存怎么配合?什么时候更新数据库,什么时候更新缓存?

  6. 算法题:两个大数相加

    写在最后

以上面试题目答案以及最新2020整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友,大家可以关注作者,然后简信私信回复【面试题】即可免费获取

上一篇 下一篇

猜你喜欢

热点阅读