想进BAT面试的Java程序员,看完这个你们还觉得offer很难拿吗?

第一个问题:阿里面试问些什么

参加阿里的社招面试,而社招不同于校招,问题的范围其实是很随机的。因为能参加一些比较知名的互联网公司社招的人,70%以上都会有个3-5年的经验。这倒不是说一两年经验的同学没有机会进这些公司,而是因为这种公司,大部分情况下只招一些比较资深的开发和应届生,而不招那些处于中间阶段的人。而1-2年经验的同学,往往就刚好处于这个尴尬的阶段。

对于能有3-5年经验的这部分人中,每个人的经历又都不同,所擅长的点也不一样,因此这就会导致每个人的问题和范围都不太一样。

很少说有哪个知名的互联网公司,比如BAT、京东、360、搜狐、网易等这些公司,其社招面试还有固定的问题和模式,让你可以像应届生面试一样,在面试前靠临时抱佛脚度过这一关。

大部分公司在社招的时候,不光是阿里,其它公司也都一样,基本上都分为两个阶段的提问

  • 第一个阶段是主语言本身以及它的高级特性
  • 第二个阶段是讲述自己的项目,并在中间穿插着问题

社招面试如何准备1主语言本身以及它的高级特性。

主语言当然就是你平日里拿来赚钱的家伙。

主语言很显然是Java,那么对于Java来说,它的语言本身以及它的高级特性,都有哪些比较容易在面试中问到呢?

一般情况下,主要有以下知识点很容易被问到。(PS:以下所列举的,都是一些Java相对而言比较高级一点的知识点,因为这里谈的是社招,而不是校招)

1、Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap这一类的。以下简单模拟一个数据结构的连环炮。

比如,面试官先问你HashMap是不是有序的?

  • 你肯定回答说,不是有序的。那面试官就会继续问你,有没有有顺序的Map实现类?
  • 你如果这个时候说不知道的话,那这个问题就到此结束了。如果你说有TreeMap和LinkedHashMap。
  • 那么面试官接下来就可能会问你,TreeMap和LinkedHashMap是如何保证它的顺序的?
  • 如果你回答不上来,那么到此为止。如果你依然回答上来了,那么面试官还会继续问你,你觉得它们两个哪个的有序实现比较好?
  • 如果你依然可以回答的话,那么面试官会继续问你,你觉得还有没有比它更好或者更高效的实现方式?
  • 如果你还能说出来的话,那么就你所说的实现方式肯定依然可以问你很多问题。
  • 以上就是一个面试官一步一步提问的例子。所以,如果你了解的不多,千万不要敷衍,因为可能下一个问题你就暴露了,还不如直接说不会,把这个问题结束掉,赶紧切换到你熟悉的领域

2、Java并发包当中的类,它们都有哪些作用,以及它们的实现原理,这些类就是java.concurrent包下面的。与上面一样,咱们也简单的模拟一个并发包的连环炮。

比如面试官可能会先问你,如果想实现所有的线程一起等待某个事件的发生,当某个事件发生时,所有线程一起开始往下执行的话,有什么好的办法吗?

  • 这个时候你可能会说可以用栅栏(Java的并发包中的CyclicBarrier),那么面试官就会继续问你,你知道它的实现原理吗?
  • 如果你继续回答的话,面试官可能会继续问你,你还知道其它的实现方式吗?
  • 如果你还能说出很多种实现方式的话,那么继续问你,你觉得这些方式里哪个方式更好?
  • 如果你说出来某一个方式比较好的话,面试官依然可以继续问你,那如果让你来写的话,你觉得还有比它更好的实现方式吗?
    • 如果你这个时候依然可以说出来你自己更好的实现方式,那么面试官肯定还会揪着这个继续问你。

为什么说面试的时候要引导面试官,原因就在这了。因为面试官的提问很多时候都是有迹可循的,你如果抓住了他的轨迹,能够猜到他下面很可能会问什么,那你在回答的时候就可以往你想要谈的方向去说。这样面试时就会显得更加从容,更加的游刃有余。

3、IO包和NIO包中的内容。这部分里面NIO会是重点,IO包大部分都会比较熟悉,因此可能会直接略过,直接问你NIO的内容。

IO包和NIO包的内容相对来说不是很多,首先NIO模型要熟悉,特别是其中的selector一定要非常清楚它的职责和实现原理。其实NIO的核心是IO线程池,一定要记住这个关键点。有的时候,面试官可能也会问你IO包的设计模式(装饰器模式),为什么要这样设计?

有的面试官还会问你有没有更好的设计,这个时候如果你不知道请果断说自己现在的水平有限,想不出来更好的设计,千万不要信口开河,随意YY。

4、Java的虚拟机的内容。这部分主要包括三部分,GC、类加载机制,以及内存。

一个GC部分简单的连环炮。

  • 面试官可以先问你什么时候一个对象会被GC?
  • 接着继续问你为什么要在这种时候对象才会被GC?
  • 接着继续问你GC策略都有哪些分类?
  • 你如果说出来了,继续问你这些策略分别都有什么优劣势?都适用于什么场景?
  • 你继续说出来了以后,给你举个实际的场景,让你选择一个GC策略?
  • 你如果选出来了,继续问你,为什么要选择这个策略?

下面是关于类加载机制的简单连环炮。

  • 首先肯定是先问你Java的类加载器都有哪些?
  • 回答了这些以后,可能会问你每个类加载器都加载哪些类?
  • 说完以后,可能会问你这些类加载之间的父子关系是怎样的?
  • 你在回答的时候可能会提到双亲委派模型,那么可以继续问你什么是双亲委派模型?
  • 你解释完了以后,可能会继续问你,为什么Java的类加载器要使用双亲委派模型?
  • 你回答完以后,可能会继续问你如何自定义自己的类加载器,自己的类加载器和Java自带的类加载器关系如何处理?

再来一个关于内存的连环炮。

  • 首先肯定就是问你内存分为哪几部分,这些部分分别都存储哪些数据?
  • 然后继续问你一个对象从创建到销毁都是怎么在这些部分里存活和转移的?
  • 接着可能会问你,内存的哪些部分会参与GC的回收?
  • 完事以后,可能还会问你Java的内存模型是怎么设计的?
  • 你回答了以后,还会继续问你为什么要这么设计?
  • 问完以后,还可能会让你结合内存模型的设计谈谈Volatile关键字的作用?
  • 你在谈的时候,肯定会提到可见性,那么接着可见性这三个字,还可以继续问你并发的内容。

额外的加分项

上面两个阶段基本上是必问的,还有一些加分项。这些加分项中,有些内容面试官也会问你(比如TCP/IP协议、算法),但更多的是会先问你了解不了解,你了解的话再继续聊,不了解的话就直接略过了,不至于因为这种问题而直接把你打入地狱。

列举一些加分项:

1、计算机系统原理。

2、网络通信协议(TCP/IP,HTTP等)。

3、数据结构与算法。

4、著名开源项目的源码。

5、你自己有很棒的开源项目。

6、你的个人博客。

7、待评论区补充。

这几项当中,对于前1-3项,如果你之前就比较了解,只是由于时间问题忘记了的话,还是可以临时抱佛脚一下的。

至于后面4-6项,就需要你日常的积累了,不是一时半会儿能做到的。如果你平日里没有积累,那么后面这三个加分项只能抛弃了。



本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。同时我经过多年的收藏目前也算收集到了一套完整的学习资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货,希望对想成为架构师的朋友有一定的参考和帮助

需要更详细架构师技能思维导图和以下资料的可以加一下技术交流分享群:“708 701 457”免费获取


原文地址:https://blog.51cto.com/14230003/2407719

时间: 2024-10-28 20:31:55

想进BAT面试的Java程序员,看完这个你们还觉得offer很难拿吗?的相关文章

想进BAT面试的Java程序员 看完这个你们还觉得offer很难拿吗???

阿里面试问些什么? 参加阿里的社招面试,而社招不同于校招,问题的范围其实是很随机的.因为能参加一些比较知名的互联网公司社招的人,70%以上都会有个3-5年的经验.这倒不是说一两年经验的同学没有机会进这些公司,而是因为这种公司,大部分情况下只招一些比较资深的开发和应届生,而不招那些处于中间阶段的人.而1-2年经验的同学,往往就刚好处于这个尴尬的阶段. 对于能有3-5年经验的这部分人中,每个人的经历又都不同,所擅长的点也不一样,因此这就会导致每个人的问题和范围都不太一样. 很少说有哪个知名的互联网公

PHP笔记——java程序员看懂PHP程序

PHP笔记——java程序员看懂PHP程序 php是一种服务器端脚本语言,类型松散的语言. <?php   ?>       xml风格 <script language=”php”></script>   脚本风格 <?       ?>    简短风格 <%              %>    ASP风格 以;结尾: 注释: a)         // b)         # c)         /*     */ 变量是存储数据的容器

面试:java程序员(5.6)

早上还在穿衣服的时候接到了面试电话,面试官问了几个问题,我感觉都答得不顺,感觉准备的太不充分了,有种我写了一年的java但是什么都不知道的感觉.觉得自己真心好low,连多线程都没办法完整的回答,居然卡壳了.脑子里都是浆糊么~sad.1.你对swing有了解吗?它下面有哪些常用包能说明下吗? 2.collection有哪些,比如说list?list有哪些具体的实现类?ArrayList是线程安全的吗?如果线程不安全,要怎么规避? 3.多线程的实现有哪几种写法? 4.j2ee有了解吗?数据库学的怎么

Java程序员看C++代码

从事了几年的android应用开发,这几年一直都是用Java开发,今年找了一家OEM公司,说白了就是Android系统源码定制,在这家公司学习了Python, C++.因为接触JNI会比较多一点,所以下面想和大家谈谈我看C++代码的一些理解. 我主要是从看代码和维护代码的角度来看,不涉及更深的技术层面.也欢迎大家来一起讨论下各自的理解. 首先我个人非常喜欢C++的头文件.C++的头文件类似于Java1.8的接口,可以在这里面定义好所有的接口方法/虚函数, 我觉得好的头文件应该是数据集+行为规范集

Java程序员拥有这些工具,还怕干不出好活

原文地址:https://www.cnblogs.com/socoool/p/12460824.html

Java程序员精选高频面试笔试题全家桶,通往BAT必备法宝!《附赠PDF》

作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动? 最近这波互联网裁员浪潮下,许多朋友被裁之后几周内陆陆续续找到工作,但也有部分现在还在求职中,其中重要区别就是在于平时是否坚持积累和成长. 面对工作,与其选择满不情愿,最后收获痛苦煎熬和差强人意的结果,不如思考如何提升工作效率和自身能力,在工作中关注自身能力成长,并去刻意练习,想办

非计算机专业想要成为Java程序员怎么办

在编程语言中,Java被成为最广泛的编程语言,这可不是浪得虚名的,Java在我们的各个行业中都有它的身影,比如财务.银行.证券等金融行业,移动.电信等通信行业,大型网站以及后台开发等等.当下成为一个Java程序员,不仅好找工作,而且还是高薪工作. 很多非计算机专业的朋友想要成为一名Java程序员,该怎么办呢?Java是门高端编程语言,其他的不用提,计算机基础一定是要有的,专门学过计算机的朋友,可能不需要担心这个问题,但是没有学过计算机的朋友,比较忧心这个问题,担心自己学不好Java. 学不好Ja

JAVA程序员的前景如何,JAVA好学吗怎么自学?

JAVA在主流编程语言中的重要地位绝对可以排进TOP3,JAVA在C++的基础上扬弃发展,吸收优点,摒弃多继承.指针等难点.因此JAVA不但功能强大,而且简单易用,无论是学习还是使用都比C++更好上手. java还拥有广泛的应用市场,它的生态系统几乎涵盖了目前市面上所有的软硬件,java几乎是万能的,你能想到的,java基本都能实现. web开发:京东.淘宝.美团这些大型网站,都是用JAVA做的. 移动端开发:目前手机上所有的APP后台代码及部分移动端页面java是都能够做到的. 客户端开发:主

Java程序员金银季你为什么如此艰难?看看这个是不是你需要了解的

选择大于努力,既然你已经够努力了,为什么不为自己谋划一个更好的未来.俗话说得好,金三银四!又到了为自己寻觅好的岗位的时候啦!又一场千军万马过独木桥的惨烈战役要打响了.Java行业固然就业机会很多,但如何才能够找到好工作与更好的自己相遇呢?最后,如果大家如果在自学遇到困难,想找一个java的学习环境,可以加入我们的java学习圈,点击我加入吧,会节约很多时间,减少很多在学习中遇到的难题.**** Java程序员金银季你为什么如此艰难?看看这个是不是你需要了解的关于找工作,其实我们要有一个格局观念,