感谢牛客网!发一波面经!阿里、网易游戏、京东等offer。

背景介绍

我是中南大学的本科生,春招的时候拿到阿里、京东、华为的Java岗位实习offer,选择去了阿里。暑假结束之后拿到了阿里转正通过的口头offer,然后投了一个网易游戏,拿到了大数据岗的口头offer。
我春招的时候面试的公司还是很多的,也积攒了很多的面试经验,最后三个阿里、京东、华为三个offer基本上是同时到的,所以后面的面试就没继续参加了。秋招就只参加了阿里的转正答辩,并且投了网易游戏,基本上也过了。
我是从去年12月份开始准备秋招的,当时也是在牛客网上面看了很多面经,现在感觉是时候也分享一下我的面经了。

我觉得如果我下面说的问题你都会了,bat我不敢保证,但是我觉得进互联网top20应该没啥问题的。

面经

我就不说每一个公司问了什么问题,我以模块的方式来分享每个模块可能会问什么题,我下面说的每一个面试题,希望你能够基本上知道大概是什么东西,这样子面试官问起来你才不会一脸懵逼,如果你能够进行深入的学习,那肯定是更好的,会有面试加分。我被问过的一些太偏的题我就不说的,基本上下面介绍的都是面试java的常规题。

计算机网络

  • 计算机网络分为哪几层?
    计算机网络如果是ISO模型的话,分为七层。TCP/IP协议簇模型的话,分为四层。这一个你需要能够说出来每一层叫做什么,大概做了什么事情,网上查一查就知道了,我就不具体说了。
  • TCP和UDP有什么区别?什么场景使用TCP,什么场景什么UDP?哪些应用层协议使用了TCP,哪些使用了UDP?
    传输层绝壁是你在面试的时候最常被问到的,这一块你需要好好看。TCP和UDP最主要的区别是TCP是可靠传输的,UDP是不可靠传输的。所以如果我们的发送消息之类的场景,因为你要确保用户的消息不会丢失,需要使用TCP协议。如果你是在进行视频聊天或者看直播,那你可以使用UDP协议,因为即使几个画面丢失了,对用户来说影响也不是很大。哪些应用层协议使用TCP,哪些使用UDP的话,你自己去查一下,懒得打字了。
  • 什么是窗口滑动协议,什么是快速重传,什么是拥塞避免,什么是慢启动?
    这个考的基本上就是TCP协议的具体实现,如果对于这一块没有接触过的话,最少要知道窗口滑动协议是什么。后面的那几个问题你可以作为拓展,好好看一下书也基本上就知道是什么了。
  • TCP连接需要几次握手?几次分手?
    TCP连接需要三次握手,四次分手。这两个数字是一定一定要记住的。背后为什么要三次握手,为什么要四次分手,你可以去了解一下,如果能够和面试官说出来会有加分,面试官不一定会问。
  • 当你输入域名访问一个网站的时候,背后的过程是什么?
    这个问题是比较开放的,你可以回答的内容有很多,但是你如果回答得越详细肯定是越好的。第一步就是域名解析,域名解析的话你可以说一下域名缓存在哪些地方,然后如果你域名在本地没有缓存的话,是如何通过DNS来进行域名解析的,如果你的DNS服务器上没有保存那个域名,那你的DNS服务器将如何处理来得到这个域名的ip。第二步就是说一下TCP连接的三次握手的过程。其他拓展内容有很多可以说,看你知识储备。例如你可以说通过CDN来进行访问加速。也可以说目前网站基本上都是前后端分离的,访问的时候会先访问反向***服务器进行负载均衡之类的
  • 什么是https协议?https协议用到了哪种密钥?
    https是在http上面套了一层ssl,用来实现安全连接。用到的密钥有对称密钥和非对称密钥。目前基本上大一点的网站,都会使用https,这里面涉及的知识点也不是很多,但是过程相对来说会复杂一点,感兴趣的话可以去看一下。基本上就是有数字证书,然后把对称密钥作为消息内容,通过非对称密钥来进行传输。之后双方的通信就通过对称密钥来进行解密就行了。
  • 什么是socket?
    socket是用来进行网络通信的,java里面已经有封装好这个类了,分为客户端和服务器,通过ip+端口来进行访问。如果没有用过socket的话,建议你到网上找一个demo,跟着写一下,你基本上就知道socket怎么用了,算是比较简单的。
  • 什么是IO,什么是NIO,什么是AIO,什么是netty框架?
    如果我上面那个问题,你自己有到网上找一个例子去写一下,你就会发现在socket在读取消息的时候阻塞的。这里有一个概念,阻塞。如果你不知道什么是阻塞函数的话,需要去了解一下。
    NIO就是非阻塞IO,用来解决上面读取消息的时候会阻塞的问题。在jdk1.4左右引入的,是通过selector、buffer、通道等组件来实现的,具体实现原理我觉得还是需要有所了解的。
    AIO就是异步非阻塞IO。咱们上面说的NIO是同步阻塞IO。AIO是异步的,NIO是同步的。同步和异步是什么区别我有点讲不清楚,如果这个你不懂自己去查一下资料。异步基本上就是通过回调来实现的。AIO是在jdk1.7左右引入的,面试官问AIO一般也会问得比较少。
    netty是用来实现非阻塞IO的一个框架,这个作为拓展点,感兴趣可以去了解一下。我在面试阿里的时候被问到过,其他公司还没问过。

数据库

  • 数据库常用的操作
    这不算是一个问题,只算是给大家的一个提醒。如果你是现场面试的话,有时候是会被要求手写SQL的,所以你对于groupBy,orderBy,子查询之类的基础肯定是要会的。。。不然写一个简单的sql你都不会,估计直接就凉了。推荐你们看一下《MySQL必知必会》,我觉得这本书算是比较基础,比较容易上手。
  • 什么是左连接,什么是右连接,什么是全连接,什么是内连接?
    这个知识点太基础了,我就不说了,不会的自己去查。。。
  • 数据库的事务有哪些特性?
    主要有四个特性,ACID,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。如果你觉得这四个特性你无法理解的话,你直接背下来这四个词就行了,然后对隔离性做深入一点的理解,其他的基本上不会被问。
  • 数据库中的隔离等级有哪些?
    基本问完你数据库事务有什么特性之后,接下来就是问隔离等级。隔离等级就是咱们上面说的隔离性的拓展。
    在学习隔离等级之前,你需要先去了解什么是脏读、不可重复读、幻读。之后你就知道mysql的四个隔离等级分别起到什么作用,oracle的两个隔离等级起到什么做什么。作为拓展,你可以记住mysql的默认隔离等级是什么,oracle的默认隔离等级是什么。我当时面试阿里的时候就连默认等级都给面试官背出来了。。。我估计面试官自己都没记住默认等级。
  • 数据库的索引有什么作用?用什么来实现的?
    这个问题我觉得三次面试会被问到一次,基本上也是被问烂了。索引是用来加快查找速度的。目前在数据库中一般是使用B+树来实现索引的。
  • B树和B+树有什么区别?为什么索引不用B树
    这个问题我是在阿里三面的时候被问的,而且感觉其他人也被问过这个问题。这个问题你需要去了解B+和B树具体结构上有什么区别,但是相对还是难一点的,如果觉得自己不想了解那么深入可以不去看。总体上来说,B+树在非叶子结点不保存数据,只在叶子结点保存。而B树在叶子结点和非叶子结点都会保存。这种结构导致你如果用B树来进行查询,会增加磁盘IO的次数,导致性能不如B+树。
  • 什么是乐观锁,什么是悲观锁?
    这个问题很常问,自己去查一下
  • SQL编译的过程大概是什么样的?(这一点可不看,算是偏门)
    这个其实是一个很有意思的问题。当时有一个面试官问我说,你直接写一堆的sql来进行数据的处理,和用一个存储过程来进行数据的处理,哪个性能更好一些。我当时没回答上来,后来面试官逐步引导我,我才回答上来的。存储过程是会在数据库中先进行编译的,所以你使用存储过程直接调用就可以了。而你如果直接写一堆的SQL语句的话,比存储过程多了一个编译的过程,所以存储过程性能好一点。然后由这个问题延伸出来一个有意思的问题。如果你了解过一些网络安全方面的知识,那你应该就听过SQL注入攻击。防止SQL注入,在jdbc中一种有效的方法就是使用prepareStatement,prepareStatement其实就是使用了预编译的方式来防止SQL注入的。

操作系统

操作系统我觉得常问的也就那几个问题,一般面试官自己对于操作系统底层也不是特别懂,我这里只说几个常被问的。

  • 进程和线程的区别是什么?
    这个问题基本上已经被问烂了,你肯定得会的。进程是CPU分配资源的最小单元,线程是CPU调度的基本单元、一个进程可以包含多个线程、巴拉巴拉。如果你觉得这个概念在你心里不是特别清楚的话,一定要到网上看一下,最好能够理解为什么有些时候要使用线程不使用进程。因为进程启动的时候cpu需要给他分配资源,对系统压力比进程大,你可以把线程看成是轻量级的进程。
  • 进程间通信的方式有什么?线程间通信的方式有什么?
    这也是一个被问烂的问题。进程间通讯可以通过socket,管道,信号,消息,共享内存等多种方式。线程间通信就比较简单了,直接共享变量也行,通过管道也行。
  • 什么是缓存?有哪些缓存的更新算法?
    这个太基础了。。。肯定得会的,缓存的更新算法用的最多的应该就是LRU。
  • 你用过什么linux命令?
    其实我用shell算是比较少的,但是一些基本上命令例如cd、ps、vim之类的。。。还是得懂的。如果你和我一样知道的不是很多应该也没关系,你记住几个最常用的,和面试官扯一扯就行了。。。你就说我用过巴拉巴拉,但是对于其他命令,其实我用得还是比较少的,因为比较少在linux上开发。我觉得你这样面试一般也会放过你的。

数据结构与算法

这一个我觉得没有什么通用的题目,但是我还是说一下需要准备的知识以及如何准备。

  • 数据结构的话,链表,树,图的基本知识得懂
  • 了解树的先序遍历,中序遍历,后序遍历。图的广度优先搜索算法,深度优先搜索算法。
  • 如果你是准备笔试算法题的话,我建议你先刷剑指offer,然后再去刷leetCode。刷的时候一定要直接在编辑器上写代码,不要用任何ide,因为有些笔试环境就是不允许你使用ide的。而且你如果是线下笔试,还需要直接在纸上写。所以,一定不要用任何IDE写算法题。
  • 算法题中的重点应该是动态规划,主要是因为动态规划如果你能够找得到状态转移方程的话,那么代码行数会比较少的,所以动态规划适合被当作笔试题,这个要重点准备。

java知识

Java知识要准备的太多了。。。我都有点儿不知道怎么说,我说一下常被问的吧。

  • java虚拟机的内存如何划分的?
    主要划分为五个区域,方法区,本地方法栈,虚拟机栈,程序计数器,堆。大概就是这五个区域,一定要背下来。咱们的垃圾回收主要就是针对堆区来进行的,堆区又会被划分为新生代老年代。。。这个具体内容去看《深入理解Java虚拟机》这本书,我觉得这本书是必看的。
  • java的垃圾回收算法有哪些?垃圾回收器有哪些?不同的垃圾回收器有什么区别?
    垃圾回收算法有 标记复制法,标记清除法 等。垃圾回收器最常被问的就是CMS和G1。scavage之类的回收器基本上不问。CMS在不同阶段使用串行或并发来做垃圾回收的,而且他和G1垃圾回收器有什么区别,这一块强烈建议去看《深入理解java虚拟机》这本书。我觉得你如果看完这本书,基本上所有虚拟机的问题都会了。
  • voliatile和synchonized有什么区别?synchonized和jdk提供的Lock包又有什么区别?
    voliatile只能够保证可见性和有序性,不能保证原子性,synchonized是通过上锁来防治出现并发问题。具体实现原理看我刚才建议的那本书,我就不说了。jdk提供的Lock包相比于synchozied提供了更加多样化的锁机制,为什么多样化,自己去查一下资料就知道了。
  • HashMap的原理是什么
    hashmap也是一个被问烂的问题,但是我这里进行一些拓展。基本上面试官最常问的就是hashmap是如何实现的,这个网上一查就知道了。但是一些深入一点的东西,如果你能够讲的话,是会有加分的。例如hashmap如何实现动态扩容,hashmap并不是线程安全的,在哪些情况下会出现线程安全的问题?那么哪一个提供了线程安全的map?他的锁机制是如何实现的?(它的锁机制并不是简单地直接把函数给锁住,而是通过分段来治理的,还是很有意思的)
  • 常用的设计模式有哪些?
    这个地方你最少有说得出来单例模式、工厂模式、***模式等,这些都是很常见的设计模式,而且这个问题也经常被问。
  • Spring的AOP、IOC作用是什么?如何实现的。
    Spring是一个java web的框架,面试官特别喜欢问。但是问spring基本上也只围绕着这几个点,第一个是AOP、IOC的作用是什么,这个问题查一下就知道了。第二个是AOP、IOC是通过什么实现的?AOP是通过***模式来实现的,IOC是通过单例模式+工厂模式来实现的。问得比较多的是AOP的实现方式,你如果回答***模式一般就够了。作为拓展,你可以回答里面用到了动态***,动态***有两种方式,一种是jdk提供的,一种是cglib。。。然后你和面试官比较一下两种动态***的区别,我觉得也是会有加分的。

写完啦

总体上就是这一些,码字了好几个小时,现在都凌晨三点多了,又困又累,所以有些地方我就懒得解释了,如果有不懂的自己去查答案。
这些东西基本上都是我春招时候的积累。。。我秋招主要在看大数据方面的,但是大数据投的人不多,我就不说面经了。
因为是春招的积累,时间有些久了,有些点记不清可能说错了,请大家见谅。

最后的提示

最后给大家提示几个面试技巧:
1.如果从你口中说出某个词,面试官很有可能就会朝着你说的方向去问,所以你回答问题的时候,可以假装不经意间提起另外某个东西,这样子面试官很有可能会接着问你刚才说出来的东西。
2.如果面试官问你的问题你不太懂怎么办?如果你是连问题都听不懂,你先确认一下是面试官的问法有问题还是你自己真的完全不懂,如果完全不懂,就说自己没接触过这方面就行了,不要不懂装懂,会扣分极其严重。如果那个问题你只懂一点点,你就把你懂的那一点点说出来,然后把面试官引到到其他类似的问题去。例如问你spring的aop如何实现的你不会,你就说我用过spirng,只知道aop是用来xxxx的,具体实现我不懂。但是我知道spring里面有一个很有意思的东西,就是他的启动过程的如何通过beanfactory来注入之类的。。。。这样子引导面试官。
3.不要试图用项目的业务复杂度来迷惑面试官。面试官看你的项目在意的是你的技术,而不是你的业务,你如果用业务来故意混淆让他听不懂,他会对你印象很差的。

我就说到这里了。。。困死了,睡觉去了,祝大家秋招找到好工作,感谢一波牛客网。

#面经##网易##京东##华为##Java工程师##秋招#
全部评论
mark
点赞 回复 分享
发布于 2018-09-01 05:47
这样进不了bat吧,这样起码还得往底层挖几层才可以吧😄
点赞 回复 分享
发布于 2018-09-01 19:16
"我秋招主要在看大数据方面的,但是大数据投的人不多,我就不说面经了。" 想听大佬讲😁,期待更新ing
点赞 回复 分享
发布于 2018-12-09 22:49
纠错!计算机网络的NIO那里,“咱们上面说的NIO是同步阻塞IO”你打错了,是同步非阻塞IO。
2 回复 分享
发布于 2018-10-17 15:28
很赞
点赞 回复 分享
发布于 2018-09-01 23:53
感谢大佬
点赞 回复 分享
发布于 2018-09-01 23:45
谢谢分享,干货满满,诚意十足!希望牛客多些这样的帖子,少点注水无用征友贴。
点赞 回复 分享
发布于 2018-09-01 13:41
极古为何这么棒~
点赞 回复 分享
发布于 2018-09-02 21:53
希望大佬有时间能出一份大数据的总结,牛客大数据方面的还是太少
1 回复 分享
发布于 2018-09-02 10:19
一定能拿到offer我是最棒的,鹿小葵加油加油!
点赞 回复 分享
发布于 2018-09-01 23:17
干货,谢大佬总结
点赞 回复 分享
发布于 2018-09-01 14:21
点赞 回复 分享
发布于 2018-09-01 13:45
都会 还是过不了ເ😩ว
点赞 回复 分享
发布于 2018-09-01 09:01
果断赞个
点赞 回复 分享
发布于 2018-09-01 07:33
良心,还带答案的😻
点赞 回复 分享
发布于 2022-03-16 07:57
😎
点赞 回复 分享
发布于 2022-03-15 23:21
谢谢你,真的很实用
点赞 回复 分享
发布于 2019-09-23 21:29
太强了  点赞!
点赞 回复 分享
发布于 2019-08-28 13:29
谢谢大佬
点赞 回复 分享
发布于 2019-08-28 10:57
大佬 大佬 还在嘛,求大数据面经 😂😂
点赞 回复 分享
发布于 2019-03-28 14:39

相关推荐

2025-12-06 01:10
已编辑
哈尔滨工程大学 Java
一面问的真细,二面不知为啥变双机位。9.29快手主站平时怎么学习 AI 的,国内外知名大模型,实习公司都用的什么大模型,怎么评估效果的java池化思想,线程池构造方法的核心参数,线程池中阻塞队列注意事项,submit方法参数和执行逻辑,shutdown和shutdownnow,核心线程允许过期吗threadlocal底层,为什么key是弱引用,key回收了再get或者set这个value会怎样aqs,如何保证公平性java代理java堆划分,新生代还有别的晋升老年代的情况吗,什么时候触发gc,gc失败抛什么异常,如何排查oom,导出dump命令redis数据结构,哪个底层是跳表,和其他数据结构对比布隆过滤器会出现大key问题吗,你咋实现的布隆过滤器你怎么实现redis分布式锁,可重入,续期聚簇索引非聚簇索引select语句会加锁吗,怎么实现的不加锁undolog redolog binlog怎么能让select加锁,update这个范围加的什么锁,update一条呢手撕简单01背包,接雨水10.10快手主站意图识别用的哪个大模型,走到意图和rag的比例,faq是点击的吗自然语言怎么识别的gap一年干啥了,转正怎么样没跟组里提意向吗,研究生研究方向是传统算法吗,会大模型微调吗注册场景为什么用布隆过滤器,原理分布式锁底层的key怎么拼的,value里是什么redis持久化zset底层mysql索引结构,一个表三个字段有主键唯一索引和没索引的字段会有几个b+树,聚簇索引非聚簇索引存的啥无手撕
点赞 评论 收藏
分享
秋招结束已经一段时间了 一直在忙着毕业的事情 浅浅总结一下自己的秋招经历吧~本人BG双非硕 后端选手 有一段小厂+腾讯暑期实习腾讯暑期转正loser秋招结束已经结束了有一段时间了总结一下秋招历程最大的感受就是秋招比起暑期更加卡学历秋招总共投了60多家吧一直面 一直挂也投了两家银行科技岗 都走到终面体检了都拒了(总体感觉本地的银行还是挺容易过的)可能本人更想去私企 并且银行也挺卷听说一直到11月就只有一家小厂的offer并签约当保底然后也突然被WXG捞了 本来都不对腾讯抱有希望了可能经过一整个秋招的面试积累吧 以及本人有ACM经历 WXG整体面试以做题偏多(一二面做了5道题 4道hard) 比较合自己胃口 差不多半个月就把五轮面试过了进入录用评估 但也一直没有结果到后面也陆陆续续有几家中厂也终面过泡池子一直到12月初华子给开了base杭州 14a因为华子公积金的原因 和小厂薪资上差距不大 所以也一直犹豫是否毁约签华子 但是内心也还对WXG抱有一丝幻想(虽然一直没有保温也没有任何消息)然后一直到12月中下旬 华子要求去现场签约了 但是WXG还是没有消息 然后就连续发邮件和打电话催了好多次 还是回复耐心等待直到华子签约那天 经过内心挣扎已经决定毁约签华子了 可能还是想平台更大一点吧 然后最戏剧性的一幕来了 就在我发毁约邮件没有5秒 WXG打电话开奖了 并且开奖也十分有诚意 最终还是没有签约成功华子 研究生期间也打了很多次华子的比赛还是对华子有感情的555整个秋招都是伴随着焦虑的 我认为自己也是秋招大部分人的画像 屡屡碰壁后不断怀疑自己 但是可能自己也比较幸运吧 但是也感谢自己在一次次陷入迷茫都没有放弃自己 还是一直努力背八股 刷题也祝各位牛友们共勉 就算暂时没有好的offer 不放弃一定会有好的结果的!!
点赞 评论 收藏
分享
评论
247
2288
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务