阿里面试回来,想和Java程序员谈一谈(干货版)

 

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

并发、JVM、分布式、TCP/IP协议

1)LinkedList,ArrayList,HashMap,TreeMap

HashMap是不是有序的?不是

有没有有顺序的Map实现类?有TreeMap和LinkedHashMap。

TreeMap和LinkedHashMap是如何保证它的顺序的?哪个的有序实现比较好?还有没有比它更好或者更高效的实现方式?

2)Java并发包当中的类,它们都有哪些作用,以及它们的实现原理,这些类就是java.concurrent包下面

所有的线程一起等待某个事件的发生,当某个事件发生时,所有线程一起开始往下执行的话,有什么好的办法吗?

这个时候你可能会说可以用栅栏(Java的并发包中的CyclicBarrier),那么面试官就会继续问你,你知道它的实现原理吗?

你还知道其它的实现方式吗?

哪个方式更好?

还有比它更好的实现方式吗?

3)IO包(可能略)和NIO包(重点)中的内容

熟悉NIO模型,selector职责和实现原理(非常清楚)。

NIO的核心是IO线程池。

IO包的设计模式(装饰器模式),为什么要这样设计?

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

什么时候一个对象会被GC?

为什么要在这种时候对象才会被GC?

GC策略都有哪些分类?分别都有什么优劣势?都适用于什么场景?

举个实际的场景,选择一个GC策略?为什么要选择这个策略?

Java类加载器都有哪些?

每个类加载器都加载哪些类?

这些类加载之间的父子关系是怎样的?

什么是双亲委派模型?为什么Java类加载器要使用双亲委派模型?

如何自定义自己的类加载器,它和Java自带的类加载器关系如何处理?

内存

内存分为哪几部分,分别都存储哪些数据?

一个对象从创建到销毁,怎么在这些里存活和转移的?

内存的哪些部分会参与GC的回收?

Java的内存模型是怎么设计的?为什么要这么设计?

结合内存模型的设计谈谈volatile关键字的作用?

你在谈的时候,肯定会提到可见性,那么接着可见性这三个字,还可以继续问你并发的内容。

2、讲述自己的项目,并在中间穿插着问题

讲你做过的项目,为什么要这么做,挖掘出一个甚至N个亮点,让眼前一亮。

程序员面经:面试前到底该不该刷题以及面试前该如何准备

3、额外的加分项

TCP/IP协议、算法

1、计算机系统原理。

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

3、数据结构与算法。

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

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

6、你的个人博客。

1-3项,如之前比较了解,临时抱佛脚。4-6项,需要日常的积累了。

学习建议

第一部分:未做过Java工作的同学。

一、Java基础

Java的基础http://www.runoob.com/java/java-tutorial.html。多动手

二、Web开发

HTML/CSS/JS(前端页面)、Servlet/JSP(J2EE)以及Mysql(数据库)相关的知识。

三、开发框架

SSM框架,即spring、springmvc、mybatis。快速搭建出一个Web框架,了解maven

http://edu.51cto.com/lesson/id-76468.html

不能学习。

第二部分:对于参加工作一年以内的同学。

《Java编程思想》LZ花了整整三个月。看不止一遍,工作中实践。

第二部分:对于参加工作1年到2年的同学。

LZ看的是《大话设计模式》这本书,了如指掌,设计模式就是你博客的开端。

http://www.cnblogs.com/zuoxiaolong/p/pattern26.html

代码优化的书《重构 改善既有代码的设计》,《effective java》,写优雅的代码。

第三部分:对于参加工作2年到3年的同学

必看《深入理解Java虚拟机》。最重要,没有之一。高于《Java编程思想》。

全面了解Java虚拟机,你一定已经知道Java是运行在JVM之上的。

LZ写过JVM系列的知识http://www.cnblogs.com/zuoxiaolong/category/508918.html

《Java并发编程实战》啃下来了,并发已经60-70%。

框架/java底层/java类库(并发是Java并发包java.concurrent的内容、也就是JVM和JDK的相关内容更深入的了解,看一些框架和JDK中的类的源码。

源码能看懂的前提是,对设计模式非常了解。否则会有疑问,为什么要这么写、定义这个接口?看起来好像很多余?

上面是最低要求。

了解框架,看源码/看官方文档。

造轮子。

进行系统的锻炼,考察你的编码能力、框架设计能力,让轮子有好的扩展性、健壮性。

遇到难题是学习契机。造好的时候,收获多。

除JVM、JDK和框架源码以外,根据优秀源码,造个能够想象出的轮子。

第四部分:参加工作3年到4年的同学

比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等等。精通任何一项,都是巨大的优势,不一定是工作用到的,但是相关的。

切忌朝三暮四,了解强过大多数人才行,让自己有差异性,找一个方向深入研究下去。

弥补你基础上的不足,基础是很枯燥无味的,深入必须掌握的。

研究分布式计算,懂算法

分布式缓存,了解计算机系统的内存

大部分人的基础都很薄弱,比如算法、计算机系统原理、编译原理这些。

《深入理解计算机系统》Java Web开发和APP后端

《数据结构与算法》这本书,则比较适合做计算研究工作的人,比如刚才提到的分布式计算。

《tcp/ip详解 卷一、二、三》比较适合做网络编程的人群,开发netty

并不是其它两本对你就没有用。做Java Web《tcp/ip详解 卷一、二、三》作用也是很大。分出个主次关系而已,一年一本精读下来,就已经非常厉害

第五部分:参加工作4年到5年的同学

提高你的影响力了,Github创建开源项目,造出来真正对别人有价值的轮子。

技术很容易遇到瓶颈,达到一定程度后,再深入收效就真的微乎其微。

好的项目就可以成就一群程序猿。

像支付宝项目,如果是核心开发,光Title,就已是非常大的优势。做的时候历练也给力,后面的五年有着落了。

在分布式计算领域有一定的影响力,那么如果有分布式计算的项目,面试的时候,影响力超过技术能力。

LZ做程序猿4年半不到

结语

从讨厌的人学他的优点,一棒子打死会让你失去很多学习成长的机会。

原文:https://www.jianshu.com/p/5681a1f0aad6

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值