当前位置 博文首页 > 好想去看海:Java后端春秋招之旅

    好想去看海:Java后端春秋招之旅

    作者:[db:作者] 时间:2021-07-19 10:25

    作者:我要进国企!
    链接:https://www.nowcoder.com/discuss/511499?source_id=profile_create&channel=1009

    个人情况
    本文主要是为了总结下我的Java后端春秋招之旅,如果能为学弟学妹带来一丢丢帮助,我也会很高兴~首先来介绍一下我的个人情况,我本科是南理工自动化专业,硕士是南理工双控专业,害 都在南理工这么多年了呢,这个学校没有给我面试带来优待,但也足够让我能够通过简历筛选哈哈哈。应女朋友补充(我们南理工好歹是江苏top! hhh)然后我的实验室方向主要是烂大街的图像处理,工作方向的话又是烂大街的java后端,害 果然是一个盲目的人,本人没有项目、没有实习,优点是成绩比较好,有一些水水的比赛(项目展么,懂的都懂hhh),性格的话比较偏懒狗,看我ID!虽然最后还是去了互联网 😂我准备就从春招、秋招、常见面试题这几方面谈谈吧~
    春招历程
    我是从2月份开始准备,一开始就看完了java基础,虽然基本看完没啥印象了。计网和数据结构的话都是本科学的了,没啥印象了sad,然后就开始看面经了,这时候高频的面经还都是去年总结的,所以我看的面经还挺有大局观的hhh,就老是看到牛友说要先打好基础,然后再狂刷面经,当时的我错误的估计了我菜的程度,居然准备开始先修炼内功,把书先看扎实了。。。再回头来刷面经,于是我开始了悠闲的看书之旅。。。真是恐怖的想法hhh,看了一段时间计网、操作系统、数据库后,时间来到3月份了,牛客网找实习的帖子多了起来,这时候一个更恐怖的想法就出现了。。。我要去找实习,那会刷了一丢丢剑指,我就开始投简历了,真是佩服那会的一腔孤勇,像个傻子一样。其实现在想想春招找实习是很幸福的,基本都不用笔试就能面试真的很友好,春招的面经我就列一下,秋招的我就不一家一家列了,汇总了一下~依稀记得第一家给面试机会的是七牛云,一开始我以为不是大厂应该难度还好吧。。还好吧。。。后来我被毒打以后才发现我是弟中弟,这应该是最惨的一次面试了。。我大概回答了15个不会。。你懂我的意思吧。吧。。。
    好了上面经,七牛云篇

    常见的密码加密算法
    Redis做缓存的原因
    B+树、B树、红黑树、二叉树做索引区别
    B+树和hash索引
    Mysql主从复制
    Mysql读写分离
    怎么利用索引来进行查询
    进程 线程 绿色线程
    怎么优化IO性能
    运行程序为什么可以超出内存容量
    容器和虚拟机有什么区别
    OSI七层模型
    NAT
    ++是线程安全的吗
    java是动态还是静态的
    为什么要编译成字节码
    设计模式
    

    嗯。。。确实是给当时年幼的我好好上了一课。。。我差点就准备躺平去研究所了。。。。又低效率学了一个月,4月份出击~
    Aibee

    leetcode 34
    Top K
    

    问了几个问题后,小哥哥开始让我直接写代码了,年幼的我第一次手撕代码。。。卒
    快手

    手写单例模式
    判断链表是否有环
    找出链表的入口节点
    两个字符串的最长公共子序列
    反转链表(递归非递归)
    

    面试老哥人不错的,发现我稀烂的基础后话不多说,写题写题,有了第一次的经验,这次的我居然写出来了4个。。。可能基础太拉闸,还是没能突破第一轮
    于是感觉看书太慢了,开始看面经速成,准备应付一波,通过个第一轮,这时候已经差不多5月份了吧,心态也出现了一些微妙的变化,之前觉得自己很菜,过不了也很正常,挺无所谓的,但这会本科舍友上岸了,压力就来了hhh人果然还是要被push
    问境

    数据库事务有哪些特性
    Mysql事务的是实现原理
    Mysql索引
    Mysql隔离级别
    进程和线程
    TCP/IP协议四层模型
    三次握手、四次挥手
    TCP和UDP区别
    流量控制、拥塞控制
    aop含义
    aop的实现原理
    快排的思路
    无向图的复制
    

    这次因为已经5月份了,我普通题其实已经背了一些了,应付小公司问题不是很大,1-12基本答得还可以,感觉就稳了。。。结果这次手撕不会,图永远的神。。。话不多说继续复习
    一晃5月底了,剑指刷完了,开始leetcode。。基础继续复习,然后学校就准备开学了,封闭管理,思考了一下,决定还是去学校吧,到了学校迎来了第一战58同城,我投的这些其实都是我不想去的,因为我真的很怕面试留记录hhh,所以这些公司看上去挺偏的,南京上海的我一个没投。。。准备再酝酿酝酿。。
    58同城

    数据库读写分离原理
    事务中原子性的实现
    Redis的了解
    线程池中的参数
    线程池初始化后有线程吗
    private
    spring  ioc aop
    hashmap源码
    volatile
    单例模式手写
    top k
    

    这是一个女程序员面的我,第一次遇到女面试官呢,面完就说我过了hhh,不错不错。。。但说出来你可能不信,现在9月份了,我还在等二面呢,这真是一个悲伤的故事。。。。到这边感觉我已经有点感觉了,leetcode100题,基础内容计网、操作系统、mysql、spring、java基础、java并发、jvm的话基础题已经了解了
    然后这时候我上岸了顺丰实习,我人生的第一个实习offer吧,不错不错,然后还拿了一些金融证券的。。。虽然我最后一个实习都没去。。。那么这究竟是为何呢,请看下一集《秋招》
    秋招历程
    6月份到了学校以后,突然发现VIVO提前批开始了,我的天,怎么会有公司这么早啊啊。。。当时心态都崩了,难道今年因为疫情都这么早的吗,后来才知道,不不不,只有VIVO这么早滴~抱着试一试的想法,我就投了一波VIVO,这边吹爆VIVO效率,笔试、技术面、Hr面、发offer一周结束,于是我就拿到了人生第一个sp offer,这运气也太好了吧,还是在南京,我这会就感觉特别满意了,想结束秋招了,顺丰自然也是不想去实习了hhh,可能这就是懒狗吧。。。唯一有一些遗憾的就是,这个岗位不是java后端的,是安卓开发的,然后调研了一下客户端的前景,感觉技术栈不是很稳定,要入行的话还是要想想清楚的,但当时当然是喜悦大约忧虑的,觉得好歹是sp,难度又比java后端小好多,有一种赚到了的窃喜hhh。之后的几天题也刷得少了,面经也不怎么整理了,心情舒畅,逛逛牛客,养老式复习开始了。之后看看脉脉之类的,就感觉可能私企的话确实没有国企适合自己吧,而且这时候的技术配上双南理工的学历,进国企基本上还是挺稳的,所以这段日子过得还是很开心的,顺便看看行测啥的,为银行、事业单位考试做做准备,岁月静好,感觉这样一直到秋招结束的话应该是惬意的。。。。但大概人就是奇怪的动物,等到7月多的时候,周围陆续有人上岸了大厂,因为做技术的嘛大厂其实都听过的,肯定也都想试试的嘛,于是就投了几个大厂的后端,不出意外百度上海有点难的简历没过;然后字节DNS解析伪代码没写出来、挂;滴滴sp专场三面挂、其实表现还可以(小声bb)排序挂了、大家确实很强;然后网易云提前批笔试3/4笔试没过,这时候面试官的评价一般都是基础还可以,广度不太行,于是7月底吧,我又重新进入了互联网复习模式hhh
    我的算法水平一直还可以,因为我是跟着大雪菜学的,在8月份我把他B站的刷题课,跟着一起刷了一遍,确实按块刷的效果是非常显著的,我后来的面试手撕中,貌似就快手和华为手撕翻过车hhh强烈推荐大家跟着y神学,y神我永远滴神!
    然后技术栈的话在这段时间,我把redis和kafka仔细看了看,增加到了简历中嘿嘿,可一定要很熟悉再加嗷~然后基础的话,因为面经其实复习得还可以了,巩固的话意义一般吧,这段时间主要就是看书,我看的书有《高性能Mysql》、《Redis设计与实现》、《Kafka技术内幕》、《Spring技术内幕》、《深入理解java虚拟机》、《java并发编程的美》、《计算机网络自顶向下的方法》,感觉纯看面经知识点还是不够连贯,我这边的话一般一周面一次,然后一周的话,6天在看书写题,1天用来刷面经,然后面试,然后再6+1这样,无限循环,无限月读hhh
    现在的话vivo(安卓)、oppo(java后端)、中兴(不懂)、贝壳(java后端)、字节(后端)过了,滴滴等意向书,华为等主管面,美团等三面,京东等后续;就是一步步打怪升级的过程,bat的话可能缘分还是没有到,作为一个懒狗已经比较满意了,准备面完华为和美团就结束了嘿嘿~感觉是经典的半场开香槟哈哈哈哈
    面试真的是很玄学的,感觉就是缘分到了,实力到了就过了,拿滴滴来说吧,这次的三面就很玄幻,太逗了,面完第一轮,那个面试官说,你特别适合我们这啊,我心里想(兄弟,你又不是主管,别给我画饼啊。。你难道还有权利直接要我的咯。。)然后再大家都在等待二面的时候,我直接二面面试官秒过来面我了。。。15分钟结束聊聊天,然后三面面试官说,他们说有个xx很符合我们要求,我直接来了。。。然后又是唠唠嗑写个题结束了,说过了,等消息就行。。。真是玄幻。。。(一面面试官我错了,你地位还是高的hhh)最后我总结一些常见题吧,大佬们珠玉在前了,我就稍微写一写吧
    常见面试题
    计算机网络

    网络模型和协议
    TCP和UDP的区别
    UDP如何保证可靠
    TCP、UDP、IP报文格式
    三次握手四次挥手
    TCP粘包
    TCP 协议如何保证可靠传输
    TCP的流量和拥塞控制
    ARQ协议
    从浏览器中输入url之后发生了什么
    DNS服务器基本流程
    http get和post的区别
    cookies和session的关系
    服务器怎么知道客户端已经发送数据完毕?
    数字证书、签名
    HTTP1.0、1.1、2.0之间的区别
    HTTP状态码
    http请求报文有什么?
    http缓存
    

    操作系统

    进程间通信的方式
    线程同步的实现方式(抛开语言,操作系统里)
    进程调度算法
    死锁的必要条件和处理方法
    银行家算法,死锁
    虚拟内存
    常见的几种内存管理机制
    快表和多级页表
    页面置换算法
    磁盘调度算法
    阻塞式io和非阻塞式io的区别
    IO多路复用,讲下select、poll、epoll
    NIO、BIO、同步和异步的理解?
    协程呢?
    进程在自己虚拟地址空间都是什么
    僵尸进程、孤儿进程
    

    Mysql

    数据库事务有哪些特性
    脏读和幻读的区别是什么?
    可重复读的隔离级别下如何保证不幻读
    非关系型数据库和关系型数据库的区别
    Mysql mvcc?
    乐观锁与悲观锁的区别
    数据库范式讲一下
    主键是什么?
    内连接 左连接 右连接
    union与union all的区别
    Explain
    最左前缀
    B+树的结构?与二叉树的区别?与B树的区别?
    Hash索引和 B+树索引优劣分析
    索引用B+树而不用红黑树?
    数据库怎么优化
    什么时候不该使用索引?
    聚集索引和非聚集索引的区别
    Mysql知道几种存储引擎,有什么区别
    覆盖索引
    主从复制、读写分离、分库分表
    Mysql锁划分
    Mysql架构
    in和exist区别
    

    Redis

    Redis有哪些数据结构
    String类型的底层实现:
    Hash字典类型
    Redis渐进式rehash 为什么
    Redis中zset的内部实现跳跃表 为什么
    Redis支持事务吗
    Redis单线程还是多线程,为什么?
    Redis单线程为什么还并发量那么高
    Redis为什么快?
    缓存穿透以及解决
    缓存雪崩以及解决
    缓存击穿以及解决
    redis内存满了怎么办
    Redis持久化的方法
    AOF重写
    redis主从结构
    redis哨兵
    Redis集群
    集群是如何判断是否有某个节点挂掉
    分布式锁作用
    一致性哈希
    缓存与数据库双写一致
    

    Kafka

    Kafka队列与发布订阅
    介绍下kafka都有哪些组件
    kafka是怎样保证全局有序的  Kafka如何保证消息的消费顺序
    kafka 有哪些保证消息不被丢失的手段   (Kafka如何保证消息的可靠性)
    kafka如何防止消息重复消费? kafka保证消息唯一
    kafka副本机制  (Kafka如何保证高可用)
    ISR:为何用
    Kafka消息是采用Pull模式,还是Push模式?
    Kafka的特点
    Kafka的实现原理
    Kafka存储机制
    kafka写入数据时的高性能?
    kafka如何保证高吞吐  kafak为什么效率比较高
    kafka如何作为系统通知的过程
    Kafka一致性
    多个消费者能不能消费同一个分区
    除了Kafka还知道哪些消息队列?
    

    基础分布式和大数据场景

    分布式锁
    分布式事务
    CAP、BASE
    分布式ID
    分布式协议
    URL黑名单问题:判断值是否已经存在于集合中
    20亿个32位整数中出现次数最多的数:
    40亿个非负整数没出现的数:
    找到100亿个URL重复的URL
    40亿非负整数出现两次的数:
    大数据的中位数,桶排序:
    

    Java集合

    List、set、map三者的区别
    ArrayList和LinkedList的区别
    HashMap源码说一下(细说,从初始化到put、get、扩容、红黑树、1.8做了哪些优化)
    Hashmap链表要转红黑树,为什么长度超过8转
    多线程Put可能发生的问题
    ConcurrentHashMap的实现
    Concurranthashmap和Hashtable的区别
    concurrenthashmap的 size如何计算
    LinkedHashMap,如何在o(1)的时间里面删除一个元素
    Hashset和hashmap的区别
    HashTable与hashMap的不同
    TreeMap
    List遍历时删除元素
    快速失败(fail—fast)、安全失败(fail—safe)
    CopyOnWriteArrayList
    HashMap遍历时删除元素
    

    Java基础

    java有几种基本类型,分别是什么?String是基本类型吗?
    Final、 static 、this、super关键字?
    final,finalize, finally有什么区别
    String、Stringbuffer和StringBuilder的区别
    Equals方法重写时为什么要重写hashcode方法?
    ==和equals的区别
    接口和抽象类的区别
    jdk和jre的区别
    深拷贝、浅拷贝
    Java中为何要有泛型?
    方法覆盖与重载的区别?
    Java类初始化顺序
    java的三大特性 面向对象的特性。(封装、继承、多态) 的含义
    多态的实现原理
    Java有这些权限:public,protected,private。如果不写,那默认权限是哪个?
    Java中类修饰符、成员变量修饰符、方法修饰符的种类与类别?
    什么是内存泄漏?Java中存在内存泄漏吗?
    RuntimeException有哪些,提到了空指针异常,问怎么避免空指针异常
    反射了解吗,应用场景
    Jdk动态代理原理
    Arrays.sort()的实现?
    Java8 有什么新特性
    内存模型
    创建对象的几种方式
    注解元、标准、自定义
    注解原理
    Java I/O的种类
    怎么实现序列化与反序列化
    5种IO模型的区别
    Object方法
    

    Java并发

    什么是线程?
    java线程通信同步有几种方式
    多线程共享数据
    信号量和互斥量的区别
    线程是怎么实现的 线程有哪些方法?Wait()是线程的方法吗?
    wait和sleep的区别
    线程实现各有什么优缺点?
    要用start()方法区执行run()方法而不是直接调用run()方法
    线程有几种状态 上下文切换
    ThreadLocal是什么
    就绪状态和阻塞状态有什么区别  两者可以互相切换吗
    进程和线程切换开销对比
    Java中的锁
    CAS的含义 ABA问题
    java volatile关键字
    说一下volatile 指令不可重排  怎么不可重排,为什么不可重排,重排会发生什么
    Volatile关键字和synchronized关键字
    synchronized三种使用方式:
    synchronized的了解
    synchronized锁状态转换
    synchronized实现原理?
    synchronized和Lock的区别?
    AQS,基于AQS实现的lock, CountDownLatch、CyclicBarrier、Semaphore介绍
    CyclicBarrier 和 CountDownLatch 的区别
    非公平锁和公平锁
    JUC原子类
    两个线程读,一个线程写,如何实现,不用锁可以吗
    线程池作用、参数、有几种
    Executor
    workQueue:
    拒绝策略有几种?
    Java中如何正常终止线程?
    主线程可以捕获子线程抛出的异常吗?
    多线程个数?
    

    JVM

    java虚拟机运行的流程
    java虚拟机的核心设计思想
    JAVA内存如何分配?
    画出java运行时内存区结构图
    堆区如何分类
    堆与栈区别
    为什么要把字符串常量池放到堆区
    java8方法区的变化
    判断对象已经无效
    引用计数法实现原理
    哪些对象可以作为GC Root
    GCRoot详细
    finalize()方法回收对象的两次标记过程
    Java四种引用及场景
    垃圾回收算法和流程
    如何减少full gc的次数?
    方法区是否需要gc
    查看GC状态的命令
    CMS收集器的流程
    G1收集器的流程
    CMS收集器和G1收集器的区别
    内存管理(对象创建、布局、访问定位)
    堆内存分配策略
    查看java虚拟机内存占用?
    java的类加载流程
    类加载器
    类加载器的双亲委派
    为什么需要双亲委派
    线程上下文类加载器
    对象的创建过程
    Class类文件怎么回收
    Minor Gc和FULL Gc的区别
    

    框架的话其实就ioc、AOP、Bean生命周期、MVC最好还是搭配技术内幕看看源码,不用很广,需要深度
    点个赞呀朋友们!!!!

    cs