2017年初BAT的JAVA面试题汇集
互联网+的浪潮下诞生了大批量的O2O企业,2016年火了直播,红了AI,不管是产品还是技术,互联网行业热闹程度都不亚于时尚圈的潮流更替。互联网资本寒冬到第二年,有人冬眠有人冬泳。而IT技术行业竞争愈加残酷,培训机构大量崛起大批量的培训人才,导致供大于求,当然这不意味着市场饱和,只是市场选择更趋于合理一些。有东时学员去阿里面试顺便整理了下关于JAVA的面试题目。希望对大家有所帮助,后期会不断更新添加新的面试题。可以帮大家查漏不缺。以下是2016以及2017年初BAT部分面试题汇集,仅部分面试题有答案,不要死记硬背,建议多多理解。
Java基础
● 集合类以及集合框架;HashMap与HashTable实现原理,线程安全性,hash冲突及处理算法;ConcurrentHashMap;
● 进程和线程的区别;
● Java的并发、多线程、 线程模型;
● 什么是线程池,如何使用? 答:线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用new 线程而是直接去池中拿线程即可,节
● 数据一致性如何保证;Synchronized关键字,类锁,方法锁,重入锁;
● Java中实现多态的机制是什么;
● 如何将一个Java对象序列化到文件里;
● 说说你对Java反射的理解; 答:Java 中的反射首先是能够获取到Java 中要反射类的字节码, 获取字节码有三种方法,
● 同步的方法;多进程开发以及多进程应用场景;
● 在Java中wait和seelp方法的不同;答:最大的不同是在等待时wait 会释放锁,而sleep 一直持有锁。wait 通常被用于线程间交互,sleep 通常被用于暂停执行。
● synchronized 和volatile 关键字的作用;答:1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。2)禁止进行指令重排序。
● volatile 本质是在告诉jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
1.volatile 仅能使用在变量级别;synchronized 则可以使用在变量、方法、和类级别的
2.volatile 仅能实现变量的修改可见性,并不能保证原子性;synchronized 则可以保证变量的修改可见性和原子性
3.volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。
4.volatile 标记的变量不会被编译器优化;synchronized 标记的变量可以被编译器优化
● 服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达;
● ThreadLocal原理,实现及如何保证Local属性;
● String StringBuilder StringBuffer对比;
● 你所知道的设计模式有哪些; 答:Java 中一般认为有23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。下面列出了所有的设计模式。需要掌握的设计模式我单独列出来了,当然能掌握的越多越好。
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
● Java如何调用c、c++语言;
● 接口与回调;回调的原理;写一个回调demo;
● 泛型原理,举例说明;解析与分派;
● 抽象类与接口的区别;应用场景;抽象类是否可以没有方法和属性;
● 静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
● 修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法;
● 说说你对泛型的了解;
● Java的异常体系;
● 如何控制某个方法允许并发访问线程的个数;
● 动态代理的区别,什么场景使用;
最新部分
● 简述synchronized?Object;Monitor机制;
● 简述happen-before规则 ;
● JUC和Object ; Monitor机制区别是什么 ; 简述AQS原理 ;
● 简述DCL失效原因,解决方法 ;
● 简述nio原理 ;
● jvm运行时数据区域有哪几部分组成,各自作用 ;
● gc算法有哪些 ; gc收集器有哪些 ;
● 简述class加载各阶段过程 ; class ; loader有哪些模型 ;
● 简述常用的JDK命令行工具 ;
● 简述字节码文件组成 ;
● 讲讲你平常是如何针对具体的SQL做优化 ;
● mysql的存储引擎有哪些,区别 ;
● gc:内存模型;
● gc: 垃圾回收 ;
● 多线程:如何实现一个定时调度和循环调度的工具类。但提交任务处理不过来的时候,拒绝机制应该如何处理 ; 线程池默认有哪几种拒绝机制 ;
● 多线程: 如何实现一个ThreadLocal ;
● 说说你了解的一个线程安全队列 ;
● Atomic包的实现原理是什么 ;
● CAS又是怎么保证原子性的 ;
● string分析1000次循环subString用了多少内存 ;
数据结构与算法
● 堆和栈在内存中的区别是什么(数据结构方面以及实际实现方面);
● 最快的排序算法是哪个?给阿里2万多名员工按年龄排序应该选择哪个算法?堆和树的区别;写出快排代码;链表逆序代码;
● 求1000以内的水仙花数以及40亿以内的水仙花数;
● 子串包含问题(KMP 算法)写代码实现;
● 万亿级别的两个URL文件A和B,如何求出A和B的差集C,(Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)
● 蚁群算法与蒙特卡洛算法;
● 写出你所知道的排序算法及时空复杂度,稳定性;
● 百度POI中如何试下查找最近的商家功能(坐标镜像+R树)。
其他
● 死锁的四个必要条件;
● 常见编码方式;utf-8编码中的中文占几个字节;int型几个字节;
● 实现一个Json解析器(可以通过正则提高速度);
● MVC MVP MVVM; 常见的设计模式;写出观察者模式的代码;
● TCP的3次握手和四次挥手;TCP与UDP的区别;
● HTTP协议;HTTP1.0与2.0的区别;HTTP报文结构;
● HTTP与HTTPS的区别以及如何实现安全性;
● 都使用过哪些框架、平台;
● 都使用过哪些自定义控件;
● 介绍你做过的哪些项目;
非技术问题
● 研究比较深入的领域有哪些;
● 对业内信息的关注渠道有哪些;
● 最近都读哪些书;
● 自己最擅长的技术点,最感兴趣的技术领域和技术点;
● 项目中用了哪些开源库,如何避免因为引入开源库而导致的安全性和稳定性问题;
● 实习过程中做了什么,有什么产出;
● 5枚硬币,2正3反如何划分为两堆然后通过翻转让两堆中正面向上的硬币和反面向上的硬币个数相同;
● 时针走一圈,时针分针重合几次;
● N * N的方格纸,里面有多少个正方形;
● 现在下载速度很慢,试从网络协议的角度分析原因,并优化(网络的5层都可以涉及)。
HR问题
● 您在前一家公司的离职原因是什么?
● 讲一件你印象最深的一件事情;
● 介绍一个你影响最深的项目;
● 介绍你最热爱最擅长的专业领域;
● 公司实习最大的收获是什么;
● 与上级意见不一致时,你将怎么办;
● 自己的优点和缺点是什么?并举例说明?
● 你的学习方法是什么样的?实习过程中如何学习?实习项目中遇到的最大困难是什么以及如何解决的;
● 说一件最能证明你能力的事情;
● 针对你你申请的这个职位,你认为你还欠缺什么;
● 如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办;
● 项目中遇到最大的困难是什么?如何解决的;
● 你的职业规划以及个人目标;未来发展路线及求职定位;
● 如果你在这次面试中没有被录用,你怎么打算;
● 评价下自己,评价下自己的技术水平,个人代码量如何;
● 通过哪些渠道了解的招聘信息,其他同学都投了哪些公司;
● 业余都有哪些爱好;
● 你做过的哪件事最令自己感到骄傲;
● 假如你晚上要去送一个出国的同学去机场,可单位临时有事非你办不可,你怎么办;
● 就你申请的这个职位,你认为你还欠缺什么;
● 当前的offer状况;如果BATH都给了offer该如何选;
● 你对一份工作更看重哪些方面?平台,技术,氛围,城市,money;
● 理想薪资范围;杭州岗和北京岗选哪个;
● 理想中的工作环境是什么;
● 谈谈你对跳槽的看法;
● 说说你对行业、技术发展趋势的看法;
● 实习过程中周围同事/同学有哪些值得学习的地方;
● 家人对你的工作期望及自己的工作期望;
● 如果你的工作出现失误,给本公司造成经济损失,你认为该怎么办;
● 若上司在公开会议上误会你了,该如何解决;
● 是否可以实习,可以实习多久;
● 在五年的时间内,你的职业规划;
● 你看中公司的什么?或者公司的那些方面最吸引你。
本文地址:http://liuyanzhao.com/3295.html
转载请注明
记阿里的一次面试
年前意外的经历了一次阿里的电话面试,话说还没想换工作,但这位业余HR(应该是技术负责人)都没介绍工作岗位和要求,直接就约定某晚的电面时间,抱着好奇的态度被“虐”了一把。
总体感觉这位面试官问的问题非常深,基本都是系统或者原理级别的。不知道是不是代表了阿里面试的基本思路。
JVM的内存模型
内存空间(Runtime Data Area)中可以按照是否线程共享分成两块,线程共享的是方法区(Method Area)和堆(Heap),线程独享的是Java栈(Java Stack),本地方法栈(Native Method Stack)和PC寄存器(Program Counter Register)。
当然从1.8开始有一些变化,按照我的理解,原来常量池等信息都储存方法区,现在都移到堆里了。
1.8中-XX
ermSize 和 -XX:MaxPermSize 已经失效,取而代之的是一个新的区域 —— Metaspace(元数据区)。
在 JDK 1.7 及以往的 JDK 版本中,Java 类信息、常量池、静态变量都存储在 Perm(永久代)里。类的元数据和静态变量在类加载的时候分配到 Perm,当类被卸载的时候垃圾收集器从 Perm 处理掉类的元数据和静态变量。当然常量池的东西也会在 Perm 垃圾收集的时候进行处理。
JDK 1.8 的对 JVM 架构的改造将类元数据放到本地内存中,另外,将常量池和静态变量放到 Java 堆里。HotSopt VM 将会为类的元数据明确分配和释放本地内存。在这种架构下,类元信息就突破了原来 -XX:MaxPermSize 的限制,现在可以使用更多的本地内存。这样就从一定程度上解决了原来在运行时生成大量类的造成经常 Full GC 问题,如运行时使用反射、代理等。
所以升级以后Java堆空间可能会增加。
http1.0,http1.1,http2.0区别
说实话没有接触过1.0,只知道跟1.0相比1.1可以一次传输多个文件,各类浏览器大概都支持3~5个请求同时发送。
http2.0也是最近调Nginx才知道的一些,主要就是二进制的格式替代了原来的文本。后来查了资料大概知道增加了多路复用和首部压缩解决了head of line blocking,另外还有server pushing等新特性。协议的东西还是要看一看官网的说明,不过这东西过一段就容易忘。
Get/Post对缓存的影响
这题我一直没Get到点,意图其实是问浏览器缓存对于HTTP Method中Get和Post的请求是否支持,答案就是不支持Post Method。Get可以被浏览器缓存。
浏览器渲染机制
这题其实我没法答,问的太大,大概瞥过V8的一些机制。比如构建Dom,生成CSS Rule等等。但是真实没有特别系统的理解过。
mysql的Join原理以及索引数据结构和实现原理
只知道mysql innoDB join只支持Nested Loop,不支持Hash Join,就是确定一个驱动表后不断Join得到结果集,再继续往下Join。所以Join的顺序很重要。
索引只知道数据结构是B+Tree,其实就真悲催了。所以检讨一下,搜到一篇不错的文章。
浏览器meta charset和response中content-type的优先级
这题也是懵了,其实应该回想一下这一句,
1
简写才是
1
http-equiv 这个属性就是对应 HTTP response headers 里面的项目,其初衷是让不能(比如没有权限)设定服务器 header 的站点可以通过它来告知浏览器一些页面内容的相关信息。
了解以上就知道肯定是后者的优先级更高。
总结一下,裸面被虐残,阿里的面试官绝对是技术大拿,一言不合就问原理,触及灵魂了。反省自己还是应用做的太多,协议啊操作系统啊还是忘得快,没有系统的理解。以后还是应该多温故知新。
[秋招结束]已拿offer:链家+京东+网易+美团 附上面经
原文地址:https://juejin.im/post/59cc8adb6fb9a00a5c3c6eea
前段时间已经有考拉的小伙伴帮我发了网易面经啦!下面给个传送门:网易offer已到手,现在我来把面经补上
链家(实习转正)
实习:大数据部Java岗 三轮技术面试+HR面 前言:链家网的实习,对我提升很大,而且,是在春招被拒的我快万念俱灰的时候抓住的一次机会。印象很深。
一面:
1、自我介绍2、HashMap底层结构,put方法源码分析,多线程下为何出现死循环等3、线程池的基本原理,当时跟面试官,一行行的分析了execute()方法的执行过程4、runnable和callable的区别5、ThreadLocal是否了解6、volatile关键字和synchronize关键字区别及内存语义7、一道简单算法题,给定一个数组,每次返回数组中与上次不同的数组中的元素
实习二面:
应该是部门的交叉面,技术问的很少,更多的是交流职业规划及后面技术发展方向。
实习三面:
我们组的大boss,过来面试看了我的简历,让我解释一下,如何实现微信的支付接口。回调接口又是怎么实现的,现在还是感觉,给自己挖了一个大坑。答的不理想最后,聊了一下职业规划啊,人生啊之类的。boss很nice
Hr面:
基本在聊人生,聊了一下直接就给了实习offer。一周后收到邮件。入职开始实习生涯。
转正:大数据部Java岗 一轮现场笔试+两轮技术面试+HR面笔试:实习生也需要参加校招生面试流程,而且笔试内容跟前不久链家提前批的题一模一样,早知道就认真看看了。答的血崩,时间来不及,很多关键的地方都来不及写。尤其是undo和redo,通过双栈实现只写了大概操作思路,实在写不完。后来HR面的时候,HR跟我说,题目是TC(技术委员会)出的,为了有区分度,必须保证让大部分人一小时内做不完。
转正一面:
1、实习项目相关(估计面试官比较感兴趣)2、项目介绍,系统设计难点。3、在项目中,负责或者实现了哪些功能模块4、实现过程中遇到什么坑5、笔试题undo和redo的操作,深入探讨。面试较快,大概20多分钟就结束
转正二面:
面试官是个算法大牛,公司内部做过分享,搞数据挖掘的。1、自我介绍2、项目介绍3、链表倒转算法4、设计模式:单例和工厂模式5、算法:给出一个txt文件,制表符分隔,每行n列,每列是一个只含字母的字符串。输出每行中,含有相同字符的字符串。5分钟,脑子要炸了,思路没打开,后面提示,其实可以实现一个简单的compareTo接口就搞定了。太菜。 6、Linux 文件搜索命令。又是一个坑7、Git命令考察。又是一个坑。面完以后,感觉血崩啊,不过收获也很大。知道自己哪方面还有待提升。
转正Hr面:
聊聊人生,以及之前线上笔试出状况的原因,还有线下面试。时间等待比较久的原因。
京东
笔试没做,本以为都没有机会了,却被意外的捞了起来。
一面(大概36分钟):
String字符串相关1.1 String不可变对象,StringBuilder、StringBuffer区别1.2 String拼接的时候,如何优化
Collection接口相关2.1 List有哪些实现类,区别,ArrayList,LinkedList2.2 LinkedList底层数据结构,ArrayList默认大小2.3 set接口实现类有哪些,HashSet和TreeSet、LinkedHashSet区别,TreeSet如何保证有序
Map接口相关3.1 Map接口实现类,HashMap,TreeMap,WeakHashMap、ConcurrentHashMap3.2 HashMap底层数据结构3.3 红黑树特点及性质解释
多线程相关4.1 线程的几种实现方式,runnable、callable接口实现,Thread类继承,ThreadPool实现4.2 wait/sleep区别4.3 wait与notify使用,锁的释放和获取
数据库5.1常用数据库:mysql5.2 数据库存储引擎:MyIsam和InnnoDB区别,底层索引5.3 具体场景,1000万条数据,分库分表。水平拆分,垂直拆分。如何解决全局主键唯一性问题。
cache和负载均衡算法6.1.负载均衡算法:随机,轮询,加权随机+轮询,最小连接数算法等有个别问题答的不是特别好,不过面试官人很好,主动加了我微信。
二面(大概50分钟):
部门的大leader面。没有涉及技术问题。
在实习期间,负责的项目,介绍一下
遇到什么样的技术难题,挑几个讲讲
如何解决的,解决过程中,有没有去总结,是否有更优的解决方案。
是否有写自己的技术博客
目前我们做的主要有三个业务方向,XX1,XX2,XX3 你对哪个感兴趣。剩下一些问题各种聊,也问了面试官一些问题,比如工作的弹性制度、技术氛围。了解这个事业部里的大牛都是很年轻的一批人,一面面试官是最早来这个事业部工作的,比我只大一岁。
HR面:
1.问我为何没有参加笔试。2.谈谈对公司主旨:客户至上,诚信,团队,激情,创新的看法大概12分钟
美团面经有点忘了,后续补上。
总的来说,我觉得付出很多,并且每天都在煎熬和焦虑中度过,又在煎熬和焦虑中不断提升自己。在准备招聘的日子里,我一边忙着学业,一边忙着做各种笔试题编程题,一边不停地刷着面经提升自己各方面的能力。Anyway,虽然我最后获得了很多,其中有可能因为是运气,也可能是因为我自己的实力,但是现在这些都不重要了。其实呢,我内心真的没有想象中的那样充满着激动和喜悦。相反,我却有种水到渠成的感觉。我觉得学习就是应该静下心来,踏踏实实去做的一件事情。我们不能盲目乐观,也不要一直很悲观。毕竟我们一方面要考虑到历史进程的发展,另一方面也要注重个人的努力奋斗。
最后,想说的倒数第二句话是:我个人认为笔经面经要看,但是想要找到满意的工作绝对不是靠临时刷题、狂刷笔经面经就能做到的。我觉得这些都只是帮助自己查缺补漏的辅助手段,我们应该在平时学习的过程中多多注重基础,搭建起属于自己的一套完整而又健全的知识体系。最后当你形成了一个完整的知识体系了以后,所谓的面试,其实本质上就是和面试官一次平等的技术交流,只不过他想看看对于同一个知识点,你的理解能否给他带来新的惊喜。
最后,真的是最后一句话了:简单的目标+平常心+脚踏实地,应该是我半年来的个人感受,找到工作于我而言,只会是一个新的开始,期待以后与神秘的大牛们共事。
金秋九月,丹桂飘香。秋天是个神奇而美妙的季节。对于高三毕业生来说,秋天是步入校园,和来自祖国五湖四海的新同学进行三次握手的季节;对于农业从业者来说,秋天是满怀期待,等待丰收的季节;而对于我来说,秋天是一个散发着无限魅力的季节:我在这里等待丰收、在这里收割与自己能力匹配的offer、在这里满心欢喜而又紧张地准备着毕业论文相关的事宜……已佩妥剑,准备面对江湖~
网易offer已到手,现在我来把面经补上
原文链接:https://juejin.im/post/59c235dff265da064a0f3b7e
写在前面:文章原作者是我未来的同事,于2017年9月5日获得网易跨境电商事业部(考拉海淘)Java研发工程师的offer。为什么说他是我未来的同事呢?很幸运,我也获得拿到了考拉的offer。所以为什么是我来发他的面经呢?因为小伙伴近期被实验室及公司里面的各种事情缠得焦头烂额,在我的安利之下又非常想参加掘金秋招求职征文大赛。
在征得原作者同意后,部分内容将以第一人称的角度阐述。
欢迎关注-Q蛋黄酱
谋事在人谨以此纪念 我的校招历程。自三月份选择春招的那一刻起,便注定要承受不能与外人道德压力与非议,十分庆幸自己能够坚持下去。PS:仅仅是一个新的开始。
在拿到网易offer之后,他发了这么一条朋友圈。其实我看到之后心中有很大的感触:在目标达成之前,我们会处于一种十分煎熬的状态—–我们会怀疑自己的能力是否与公司要求匹配、会怀疑自己坚持的方向是否正确、会怀疑自己的运气。但是在自我怀疑的同时,我们也不敢在学习上放松对自己的要求—–我们坚持刷题、做项目、刷面经、投简历。但是在收到offer邮件的那一刻,在听到手机“叮”了一声打开发现是意向公司的offer短信的那一刻,感觉一切都释然了。我们热泪盈眶,我们心花怒放,因为我们觉得一些的坚持和努力都是值得的!
自三月以来,从春招实习,一路走到现在。很累,也很有收获,分享一波面经。总结起来就是一句话:我的学校在211里可能不占优势,但是最终的结果,取决于你自己想成为什么样的人。
一面:
自我介绍
实习期间项目相关,然后转到Spring
Spring 在项目中用了哪些特性,IOC,及Kafka监听接口相关实现。
ThreadPool,Jdk原生线程池,四个参数详细解释原理,当线程池中poolSize达到corePoolSize且阻塞队列已满,再来一个任务,如何处理
多线程实现同步的方式、互斥同步、非阻塞同步
解释Synchronize关键字的锁优化技术,偏向锁,轻量级锁,重量级锁,这些锁是如何存储的,偏向锁撤销升级为轻量级锁的过程,结合源码解释
volatile关键字语义,内存屏障如何实现,JMM对内存屏障做了哪些优化,volatile的语义增强
指令重排序相关及其happen-before时,数据依赖等
HashMap底层数据结构,如何处理hash冲突,为何HashMap的大小要设置为2的n次幂,为什么IndexFor方法里,需要hash&length-1,为什么HashMap允许null值,resize()过程,多线程下resize为什么会出现死循环,详细解释,结合源码
HashMap jdk1.8之后,为何转链式结构为红黑树,为何长度为8的时候,才转成红黑树
NIO了解吗
不了解,属于自己的知识空白区域。但是面试官比较友好,并没有抓着这一块不放。
阐述一下快排基本原理。easy
手写单例模式。分别问了多线程情况如何处理,什么时候可以破坏单例模式,怎么防止单例模式被破坏
JMM内存模型,如何保证缓存一致性。
二面:
自我介绍
介绍实习项目
Kafka监听接口如何实现,为何采用Kafka而不是用其他消息队列
实现Kafka监听接口的时候,遇到哪些坑,采取了哪些措施或者解决方案
Kafka的基本概念,及特点和优势。offset+zk+持久化分区日志顺序存储之类的
MySQL了解吗,介绍一下InnoDB
JVM了解吗,介绍一下,讲了垃圾回收机制
Full GC和Minor GC区别,及各自的触发条件
说说CMS垃圾回收器,及其适用场景
HR面:
HR小姐姐很漂亮
HR小姐姐真的很漂亮
问题都比较中规中矩,没有一开口就让我讲一个冷笑话
有没有实习
在哪里实习
负责什么系统
为什么要让我独立负责
手头有没有其他offer
offer薪资有多少
哪里人 以后打算在哪里发展 是否接受入职前实习
是否接受996(然后后来才知道我们部门并不是996)
总的来说问题都比较的基础,但是想要回答好却并不容易,因为很多问题属于你想答得很深就可以深不见底,想答得浅一点一两句话就讲完了的那种。在平时学习的过程中,一定要注重培养自己的知识体系,不要只会死记硬背一些所谓的面试题标准答案。面试其实是一件量体裁衣的事情,很多东西(包括某些专业知识)并不存在一个非常量化的标准,重点是如何在面试官面前展现出自己独特的一面。假如在回答某些问题时你直接把从网上背的“标准答案”说出来,面试官就会觉得你这个人对知识没有自己的理解。面试官可是身经百战了,什么样的候选人没见过?所以想要在面试中和面试官谈笑风生,一定要在踏踏实实打牢专业基础的前提下,再努力提升自己的编码能力。如此,你想不拿一个好的offer都难!
一位资深程序员大牛给予Java初学者的学习路线建议
Java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学。
在大家看之前,我要先声明两点。1、由于我本人是Java后端开发出身,因此所推荐的学习内容是Java Web和Java后端开发的路线,非Java Web和Java后端开发的同学请适当参考其学习思想即可,切勿照搬。2、下面对于【第一部分】的推荐内容,目的是让你尽快成为一个可以参加工作的Java开发者,更适用于处于待业状态,准备转行Java的同学。
如果你是在校学生,务必要在学好基础(比如计算机系统、算法、编译原理等等)的前提下,再考虑去进行下面的学习。
第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学。
一、Java基础首先去找一个Java的基础教程学一下,这里可以推荐一个Java学习交流的QQ群(群号码:495273252)你可以到这个群里找相应的视频教程。学习Java基础的时候,应该尽量多动手,很多时候,你想当然的事情,等你写出来运行一下,你就会发现不是这么回事儿,不信你就试试。学完以上内容以后,你应该对Java有一个基本的了解了,你可以用Java语言写出一些简单的程序,并且你用的是最简单的编辑器,比如记事本。这个时候,不要急于进入下一部分,留下几天好好写一些程序,尽可能熟悉这些基础内容。
二、Web开发等你写上几天程序以后,你往往会比较迷茫,因为你写的东西似乎看起来毫无用处,比如实现一个简单的计算器,读取一个文件等。这个时候你就应该去学着写一些让你觉得有意思的东西了,所以你应该学习更多的知识。这些内容主要是Web开发相关的内容,包括HTML/CSS/JS(前端页面)、Servlet/JSP(J2EE)以及Mysql(数据库)相关的知识。它们的学习顺序应该是从前到后,因此最先学习的应该是HTML/CSS/JS(前端页面),这部分内容你可以去上面的那个runoob网站上找。
你可以试着自己写一些页面,当然,你可以尽你最大的努力让它变得最漂亮。这部分内容对于后端Java来说,理论上不是特别重要,但至少要达到可以自己写出一些简单页面的水平。接下来,你需要学习的是Servlet/JSP(J2EE)部分,这部分是Java后端开发必须非常精通的部分,因此这部分是这三部分中最需要花精力的,而且这个时候,你要学会使用开发工具,而不能再使用记事本了,可以选择eclipse。当你下载安装好eclipse以后,请视频中的教程一步一步去学习,一定要多动手。关于Servlet/Jsp部分视频的选择,业界比较认可马士兵的视频,因此推荐给大家。
当然了,我本人并没有看过他的视频,所以不好说的太绝对,如果大家自己有更好的选择,可以坚持自己的,不要被我干扰。原本我也是打算出教学视频的,但是由于时间问题,还是决定放弃了。但是如果你看视频的过程中遇到了问题,欢迎来我的交流群提问,或者去斗鱼观看我的直播提出你的问题,直播地址和群号都在我的个人博客左侧。最后一步,你需要学会使用数据库,mysql是个不错的入门选择,而且Java领域里主流的关系型数据库就是mysql。这部分一般在你学习Servlet/Jsp的时候,就会接触到的,其中的JDBC部分就是数据库相关的部分。你不仅要学会使用JDBC操作数据库,还要学会使用数据库客户端工具,比如navicat,sqlyog,二选一即可。
三、开发框架当你学会以上内容以后,这个时候你还不足以参加工作,你还需要继续深造。公司里为了提高开发的效率,会使用一些Java Web框架,因此你还需要学习一些开发框架。目前比较主流的是SSM框架,即spring、springmvc、mybatis。你需要学会这三个框架的搭建,并用它们做出一个简单的增删改查的Web项目。你可以不理解那些配置都是什么含义,以及为什么要这么做,这些留着后面你去了解。
但你一定要可以快速的利用它们三个搭建出一个Web框架,你可以记录下你第一次搭建的过程,相信我,你一定会用到的。还要提一句的是,你在搭建SSM的过程中,可能会经常接触到一个叫maven的工具。这个工具也是你以后工作当中几乎是必须要使用的工具,所以你在搭建SSM的过程中,也可以顺便了解一下maven的知识。在你目前这个阶段,你只需要在网络上了解一下maven基本的使用方法即可,一些高端的用法随着你工作经验的增加,会逐渐接触到的。
关于学习SSM框架的地址给大家推荐一个,这里面有视频,大家可以去观看。四、找工作当你完成开发框架的学习以后,你就该找工作了,在校的找实习,毕业的找全职。与此同时,在找工作的同时,你不应该停下你的学习,准确的说,是你在以后都不能停下学习。上面这些内容你只是囫囵吞枣的学会了使用,你可以逐步尝试着去了解更多的东西,网络是你最重要的老师。
第二部分:对于参加工作一年以内的同学。恭喜你,这个时候,你已经拥有了一份Java的工作。
这个阶段是你成长极快的阶段,而且你可能会经常加班。但是加班不代表你就可以松懈了,永远记得我说的那句话,从你入行那一刻起,你就要不停的学习。在这一年里,你至少需要看完《Java编程思想》这本书。这本书的内容是帮助你对于Java有一个更加深入的了解,是Java基础的升级版。这本书很厚,当初看这本书,我花了整整三个月。正常速度的话,应该可以在半年左右看完。我这里不要求过高,只要你在一年以内把这本书看完即可。当然了,我所说的看完,是充分吸收,而不是读一遍就完事了,因此有些内容你可能会看不止一遍。总而言之,这个阶段的核心学习思想就是,在工作中实践,并且更加深入的了解Java基础。
第三部分:对于参加工作1年到2年的同学。这部分时间段的同学,已经对Java有了一个更加深入的了解。
但是对于面向对象的体会可能还不够深刻,编程的时候还停留在完成功能的层次,很少会去考虑设计的问题。于是这个时候,设计模式就来了。我当时看的是《大话设计模式》这本书,并且写了完整版的设计模式博客。因此,我要求大家,最多在你工作一年的时候,必须开始写博客,而设计模式就是你博客的开端。
请记住,我所提的基本都是最低要求,因此不要有任何松懈的心理,否则五年后,你不要去羡慕别人高于你的工资,也不要去羡慕别人进入了某公司。这一年,你必须对于设计模式了如指掌,《大话设计模式》可以作为你的开端。此外,设计模式并不是你这一年唯一的任务,你还需要看一些关于代码编写优化的书。比如《重构 改善既有代码的设计》,《effective java》。总而言之,这个阶段,你的核心任务就是提高你的代码能力,要能写出一手优雅的代码。
第四部分:对于参加工作2年到3年的同学有的同学在这个时候觉得自己已经很牛逼了,于是忍不住开始慢慢松懈。
请记住,你还嫩的多。这个阶段,有一本书是你必须看的,它叫做《深入理解Java虚拟机》。这本书绝对是Java开发者最重要的书,没有之一。在我眼里,这本书的重要性还要高于《Java编程思想》。这本书的内容是帮助你全面的了解Java虚拟机,在这个阶段,你一定已经知道Java是运行在JVM之上的。所以,对于JVM,你没有任何理由不了解它。
另外,在过去2年的工作当中,你肯定或多或少接触过并发。这个时候,你应该去更加深入的了解并发相关的知识,而这部分内容,我比较推荐《Java并发编程实战》这本书。只要你把这本书啃下来了,并发的部分基本已经了解了十之六七。与此同时,这个阶段你要做的事情还远不止如此。这个时候,你应该对于你所使用的框架应该有了更深入的了解,对于Java的类库也有了更深入的了解。
因此,你需要去看一些JDK中的类的源码,也包括你所使用的框架的源码。这些源码能看懂的前提是,你必须对设计模式非常了解。否则的话,你看源码的过程中,永远会有这样那样的疑问,这段代码为什么要这么写?为什么要定义这个接口,它看起来好像很多余?由此也可以看出,这些学习的过程是环环相扣的,如果你任何一个阶段拉下来了,那么你就真的跟不上了,或者说是一步慢步步慢。而且我很负责的告诉你,我在这个阶段的时候,所学习的东西远多于这里所罗列出来的。
因此千万不要觉得你已经学的很多了,我所说的这些都只是最低要求,不光是我,很多人在这个时间段所学习的内容都远超本文的范围。如果你不能跟上节奏的话,若干年后,如果不是程序猿市场还不错的话,你很可能不仅仅是工资比别人低,公司没别人好,而是根本就找不到工作。总而言之,这个阶段,你需要做的是深入了解Java底层和Java类库(比如并发那本书就是Java并发包java.concurrent的内容),也就是JVM和JDK的相关内容。而且还要更深入的去了解你所使用的框架,方式比较推荐看源码或者看官方文档。另外,还有一种学习的方式,在2年这个阶段,也应该启用了,那就是造轮子。不要听信那套“不要重复造轮子”的论调,那是公司为了节省时间成本编造出来的。重复造轮子或许对别人没有价值,因为你造的轮子可能早就有了,而且一般情况下你造出来的轮子还没有现存的好。
但是对别人没有价值,不代表对你自己没有价值。一个造轮子的过程,是一个从无到有的过程。这个过程可以对你进行系统的锻炼,它不仅考察你的编码能力,还考察你的框架设计能力,你需要让你的轮子拥有足够好的扩展性、健壮性。而且在造轮子的过程中,你会遇到各种各样的难题,这些难题往往又是你学习的契机。当你把轮子造好的时候,你一定会发现,其实你自己收获了很多。所以,这个阶段,除了上面提到的了解JVM、JDK和框架源码以外,也请你根据别人优秀的源码,去造一个任何你能够想象出来的轮子。
第五部分:参加工作3年到4年的同学这个阶段的同学,提升已经是很难了,而且这个阶段的学习往往会比较多样化。
因为在前3年的过程中,你肯定或多或少接触过一些其它的技术,比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等等。这些技术,你能精通任何一项,都将是你未来面试时巨大的优势,因此如果你对某一项技术感兴趣的话,
这个时候可以深入去研究一下。这项技术不一定是你工作所用到的,但一定是相关的。而且在研究一门新技术时,切忌朝三暮四。有的同学今天去整整大数据,搞搞Hadoop、hbase一类的东西。过不了一段时间,就觉得没意思,又去研究分布式缓存,比如redis。然后又过不了一段时间,又去研究分布式计算,比如整整Mapreduce或者storm。结果到最后,搞得自己好像什么都会一样,在简历上大言不惭的写上大数据、分布式缓存、分布式计算都了解,其实任何一个都只是浮于表面。到时候面试官随便一问,就把你给识破了。
一定要记住,作为一个程序猿,平日里所接触的技术可能会很多,但是想要让一门技术成为你的优势,那么一定是你对这门技术的了解强过绝大多数人才行。因此在这个阶段,你就不能再简单的去学习前3年的内容了,虽然前面的学习如果还不够深入的话依旧要继续,但这个时候你应该更多的考虑建立你的优势,也可以称为差异性。差异性相信不难理解,就是让你自己变得与众不同。你前面三年的学习足够你成为一名基本合格的Java开发者,但你离成为一名优秀的Java开发者还有很大的距离。
所谓优秀,即能别人所不能。而你前三年所学习的内容,是很多做过几年的Java开发都能够掌握的。那么为了让自己有差异性,你就需要另辟蹊径,找一个方向深入研究下去,以期在将来,你能够成为这个领域的专家,比如分布式计算领域的专家,大数据领域的专家,并发领域的专家等等。此外,你除了建立你的差异性之外,还要去弥补你基础上的不足,直到现在,我都没有提及基础知识。原因是基础是很枯燥无味的,学的太早不仅容易懵逼,而且懵逼的同时还容易产生心理阴影,以至于以后再不想去研究这些基础。但基础又是你深入研究一些领域时所必须掌握的,比如你去研究分布式计算,你不懂算法你玩个毛毛?比如你去做分布式缓存,你对计算机系统的内存不了解,你如何去做缓存?
如果你的基础本来就非常强,那么恭喜你,相信你在之前的工作中已经充分体会到了这些基础对你的帮助。但我相信大部分人的基础都很薄弱,哪怕是科班毕业的人,很多人也不敢说自己当初的基础学的多么强大,比如算法、计算机系统原理、编译原理这些。但是每个人时间都是有限的,而且这些基础的书籍每一本读下来,没个一年半载的,还真拿不下来,因此还是要有所抉择的。虽然艺多不压身,但问题是艺多是有代价的,是需要你付出时间和精力的,而我个人更赞成在同等代价的情况下获取最大的收获。
首先,我比较推崇的基础书籍有三本,分别是《深入理解计算机系统》,《tcp/ip详解 卷一、二、三》,《数据结构与算法》。其中TCP/IP有三本书,但我们这里把这三本看成是一本大书。这三本分别适合三种人,《深入理解计算机系统》比较适合一直从事Java Web开发和APP后端开发工作的人群。《tcp/ip详解 卷一、二、三》比较适合做网络编程的人群,比如你使用netty去开发的话,那么就要对TCP/IP有更深入的了解。而《数据结构与算法》这本书,则比较适合做计算研究工作的人,比如刚才提到的分布式计算。另外,我要强调的是,这里所说的适合,并不是其它两本对你就没有用。比如你做Java Web和APP后端开发,《tcp/ip详解 卷一、二、三》这本书对你的作用也是很大的。这里只是分出个主次关系而已,你要是时间足够的话,能把三本都精读那当然最好不过了。
但如果时间有限的话,那么就先挑对你帮助最大的书去读。理论上来讲,这一年你能把这三本其中一本精读下来,就已经非常厉害了。有了基础,有了前面的工作经验,你就可以去开拓属于你的领域了。在这一年里,一定要规划好自己的领域,建立好自己的优势,制造出差异性。如果你对自己的领域不够清晰的话,随着你工作的时间日益增多,你接触的技术会越来越多,这个时候,你很容易被淹死在技术的海洋里,看似接触的技术越来越多,会用的也越来越多,但你毫无优势。有的同学可能会问,“我,我也不知道我的领域是什么啊?怎么办呢?”对于这种人,我只想说,“卧槽,这还问我?要不干脆我替你学习得了,好不好?”
第六部分:参加工作4年到5年的同学经过前面一年的历练,相信你在自己所钻研的领域已经有了自己一定的见解,这个时候,技术上你应该已经遇到瓶颈了。
这个时候不要着急提高自己的技术,已经是时候提高你的影响力了,你可以尝试去一些知名的公司去提高你的背景,你可以发表一些文章去影响更多的人。当然,你也可以去Github创建一个属于你的开源项目,去打造自己的产品。
这次的开源项目不同于之前的造轮子,你这个时候是真的要去尽量尝试造出来真正对别人有价值的轮子。技术学到这个阶段,很容易遇到瓶颈,而且往往达到一定程度后,你再深入下去的收效就真的微乎其微了,除非你是专门搞学术研究的。然而很可惜,大部分程序猿做不到这一步,那是科学家做的事情。这个时候提高影响力不仅仅是因为技术上容易遇到瓶颈,更多的是影响力可以给你创造更多的机会。程序猿在某种程度上和明星很像,一个好的电视剧和电影就可以成就一批明星,程序猿有的时候也是,一个好的项目就可以成就一群程序猿。比如国内几个脍炙人口的项目,像淘宝、支付宝、QQ、百度、微信等等。这每一个项目,都成就了一批程序猿。我敢说,这里面任何一个项目,如果你是它的核心开发,光是这样一个Title,就已经是你非常大的优势。更何况还不止如此,Title说到底也是个名头,更重要的是,这种项目在做的时候,对你的历练一定也是非常给力的。
而你如果想要参与这样的项目,除了靠运气之外,影响力也是很重要的一个手段。比如你在分布式计算领域有一定的影响力,那么如果有什么好的关于分布式计算的项目,对方就很可能会邀请你。就算人家不邀请你,你自己主动去面试的时候,对方如果知道你在这个领域的影响力,也肯定会起到很大的作用,而这个作用,甚至可能会超过你现在的技术能力。所以,在这个阶段,你最大的任务是提高自己的影响力,为自己未来的十年工作生涯那一天做准备。如果你能够靠你的影响力和以前积累的技术,参与到一个伟大的项目当中,那么你后面的五年也就有着落了。当然了,我现在满打满算,做程序猿也就4年半不到,因此关于4年到5年这一部分,我的见解不一定是对的,就算是对的,也不一定是适合任何人的。
所以,希望大家自己有的判断力,去决定到底该如何度过这一年。结语本文到此就基本结束了,整篇文章很长,但其实主要就说了两部分内容,一个是社招面试的准备,一个是Java生涯的学习。关于这两部分,我已经给出了自己的见解,但是还是那句话,每个人吸收知识的时候,都要有抽取精华,去除糟粕的能力。我所说的,可能有些是对的,有些是错的,有些是适合你的,有些是不太适合你的,你要自己能够判断。其实你在生活和工作当中也是一样的,你身边的人形形色色,有的人你喜欢,有的人你很讨厌。但其实你喜欢的人也有缺点,你讨厌的人也有优点。你要学会从你讨厌的人身上学会他的优点,千万不要一棒子打死,这只会让你失去很多学习成长的机会。好了,说了这么多了,就到此为止吧,希望本文可以帮助到作为程序猿或即将成为程序猿的你。
直击Java程序员阿里5轮B2B面试现场:我是如何突出重围的
今天在牛客看到一篇关于阿里面试的帖子,对于一些面试的技巧和一些问答的方式,感觉对新手面试还是很有帮助的,所以在这里和大家分享下,希望最近想要去面试的朋友能够有所得!
其实之前我写过一篇文章,但是那篇文章更多的是在讨论“面试前该不该刷题”这个话题,而这篇文章将会更加聚焦在面试前如何准备,以及工作当中如何学习这个话题上。
和大家一样,楼主昨晚也如愿收到了offer。楼主面试的是Java研发工程师,共经历了5轮技术面+HR面。据面试内容来看,应该没有被调剂,因为5位面试官的技术关注点很相近。
1面印象最深,面试时间长达2小时,面试官人很nice,问了我一些基础知识(就是大家都有准备的那些基础知识),线程池用过哪些?底层工作原理?怎么创建一个新线程?HashMap的底层原理?其查找效率?如何设计淘宝秒杀系统(重点关注架构,比如数据一致性,数据库集群一致性哈希,缓存,分库分表等等)?接着问了两个项目,然后就项目问题探讨至面试结束(晚上11点结束的),不得不说面试官很辛苦。
2面面试官的声音让人很感到轻松,语气态度非常平易近人,面试时间约30多分钟。面试内容主要为Java基础,比如JVM的GC发展史及现在主流的Java虚拟机的GC原理?如何在生产线Dump堆分析程序是否有内存及性能问题?平时通过哪些途径获取新知识?遇到困难解决问题的思路?然后交流了知识在生产环境中的运用,很有共鸣。
3面面试和正常面试一样,时间约半个多小时。面试官主要考察了Java基础,数据库以及项目。主要问题有MySQL有几种索引?主键索引底层的实现原理?经典的01索引问题?如何在长文本中快捷的筛选出你的名字?面试官在项目这块进行了评价和详细了解,但是没有详细追问下去,不然估计又得俩小时==。
4面感觉有点压力面,面试一开始我就挺紧张的,面试官给我出了一道具体业务场景中出现的问题,大意为如何确保分布式环境下异步消息处理的顺序性?我说了很多思路和方案,面试官肯定了我的思路,但是我的方案还是不够严谨。最后面试官跟我说的一个更好的解决方法,深以为然,然后面试就结束了,这面过后心里压力蛮大的。
5面来的挺突然的,当时在重构别人的代码,思想还是蛮放空的,然后杭州的电话就打过来了,突然就紧张起来。还好面试还算顺利,面试官同样的以聊项目为主,穿插的问了不少基础知识,整个过程大概40分钟,然后面试就愉快的结束了。
6面听到面试官自我介绍是HR之后,我特别开心,因为紧张的技术面终于完成了。HR人也很nice,很轻松的和我聊了一些学习工作方面的经验和想法,然后差不多半小时面试就结束了。
等了22天拿到了offer,期间特别的很焦急,心情大家应该都感同身受,心里总是想着是不是自己哪里表现得不好,然后被淘汰了,还好我还是幸运的,昨天晚上的offer让我非常激动,漫长的面试加等待确实很考验人的心理素质。 这里要恭喜已经拿到offer的同学,同时昨晚没拿到offer的同学也不要气馁,且不说offer可能还没发完,就算这次内推失败了,咱也长了见识,增加了面试经验,后边网申再加油(我拿到offer之前就是这么安慰自己的)。
我就跟大家分享一下之前看到的那篇文章 如何来准备一场好的面试吧
面试前
简历的准备
如何让HR一眼就识到你?
核心关键词:简洁、明了、重点突出
简历的主题一般由3部分构成:你做了什么?你是怎么做的?你取得了什么样的成绩?
这三个板块儿根据每个人的情况不同,具体的细节也就不一样。我们就当做一个提纲性的作用去展示就好,不需要进行具体的阐述。
投递的渠道
随着互联网的发展,招聘渠道也开始走细分和垂直领域,每个招聘渠道针对的人群和市场已经开始变得不一样啦,所以我们在投递简历的时候,一定要根据自己的工作属性,投递到和自己工作属性更加匹配的渠道上,这样更容易被用人单位的HR发现。
①现在的招聘网站越来越垂直化,很多都是根据行业来定义的
比如互联网人才,可以多关注拉勾网;中高端人才,多关注猎聘;如果你想私下跟老板或者是高端人才经理沟通,可以多用一下脉脉和LinkedIn。
②内部推荐是阿里招聘非常有效的一个招聘渠道
在投递简历的时候不妨先看看你身边是否有直接或间接的资源。内部推荐是阿里招聘非常有效的一个招聘渠道。因为推荐人对被推荐人比较了解,推荐人对公司也比较了解,所以内部推荐的优先级较高。如果身边恰好有这样的资源,不妨好好利用起来。
知己知彼
在投简历前,对自己的定位要清晰。
我要往什么方向发展?我未来到底要做什么工作?而不是盲目的跟风。
一次性投递多个岗位,这样的投递简历的行为映射出你背后对自己的定位非常不清晰,没有目标感。
投简历之前,有必要通过各种渠道去了解这家公司。比如公司的趋势、公司的用人标准、企业的文化和价值观、行业的发展、投递岗位的能力要求。
准备工作越充分,越能找到与自己对味的公司和职位。
【在阿里,面试中有一个特殊的环节,叫闻味道】
这个环节,一般都会由在阿里呆了至少3到5年以上的业务负责人或者HR来完成,闻味道这个环节渗透在整个面试的环节,你在和面试官沟通的整个过程中,你透露出来的言谈举止,以及你在描述过往的工作履历过程中,你做事情的出发点,做事情背后的行为,都渗透着你的味道。有的岗位也会有群面的过程,面试官给你一个项目主题,大家集体在规定的时间内完成,在这个项目的参与过程中,也是一个闻味道的过程。
“有的公司在招聘的时候会要求是211、985学校毕业的,或者要求三到五年的工作经验,我只是一个普通的本科院校毕业的,这样的岗位我能去投递吗?”
答:在阿里或者是其它大型企业,学历和工作经验,固然是一个标准,但并不是硬性的标准。因为比名校和工作经验更重要的,是一个人的能力以及和岗位的一个匹配度。
在阿里也有很多同事是从普通院校毕业的,但后期通自己的磨练,不断成长,最后也晋升到一个很高的职位。
所以学历和工作经验只是一个门槛,但不是一个必要且充分的条件。
“我已经在一个行业做了两三年了,那我现在可不可以转行呢?”
答:中途转行是可以的。但是必须要做好以下几个方面的准备:
①你要做好一切从零开始的准备
因为隔行如隔山,对于一个新的行业,你是一个新人,所有的都要从零开始。
②确认自己是否有从事这个行业的潜力
对于你即将从事的这个行业你是否了解?之前的职业是不是你的一个迷茫期?
如果你想转的这个行业是你了解而且感兴趣的,那你就去做。不要觉得房地产发展不错,就去做房地产;房地产不行了,现在觉得互联网很火,我就去做互联网。
如果不是真正的喜欢,而是盲目跟风随大流,我不建议去转行。
“刚生完孩子,已经脱离职场两三年了,再次进职场会不会受到限制呢?”
答:在很多的大企业尤其是在阿里,我们对孕妈妈是不会排斥的,甚至有些岗位,当妈妈的做起来会更得心应手。
“在各大网站上投了很多的简历,但是并没有收到面试通知,那我可以霸面吗?”
答:就算没有收到面试通知,如果你对这个岗位很有信心,你觉得你是有能力驾驭这个岗位的,那你可以通过各种渠道搜索到企业HR甚至Boss的信息,因为现在是一个互联网时代,只要你有决心有毅力是一定可以敲开他们面试的大门。
分享一个小故事,我大学的时候就很崇拜马云,我看过他的各种书籍,后来大学毕业我就想,我要不要到阿里巴巴试一试?
当时大学学的是计算机专业,但是毕业就只想做个销售的岗位,因为觉得销售可以锻炼我各方面的能力,所以我一直留意各大招聘网站上发出来的关于销售岗位的信息。那时候阿里的铁军文化也很吸引我,但是我在各大招聘网站上投简历都是石沉大海。
有一天,我突然在智联招聘上看到在成都的花园城大酒店有一场阿里专场招聘,我想既然不能收到面试邀约,那就去搞个陌生拜访吧!于是我就鼓足了勇气跑到花园城大酒店绕过前台走到了HR面前,争取到了一个面试机会,就这样我就跟阿里结上了缘。
所以,只要你为了一件事去努力,就一定会有一个好的结果。
面试中
很多人一想到阿里这么大的公司,门槛肯定很高,一看到面试官就紧张,觉得他们很严厉,甚至去面试的时候总有种低人一等的感觉。其实很多大公司的HR和面试官都非常谦虚和蔼。
这里给大家几点建议:
①平等、自信、淡定从容的心态
可能你对面坐的是一个总监甚至是VP,他在这个专业领域或许比你专业,但大家是平等的,所以要放松心态。
②在和面试官沟通的时候不要重复,不要啰嗦,思路一定要清晰
③不浮夸,诚信第一
很多人问我,我只工作了两三年,简历上能写出来的东西好像都很平淡,不像别人的简历,工作经验很丰富,这个时候我该怎么办呢?
我的回答是:你做到什么程度,你就说到什么程度,你做了什么,你就说什么。不用去虚构和作假。
你要相信对面坐的这些在职场很多年已经阅人无数的面试官,他们是可以从你整体的表达逻辑上发现你的漏洞的,如果你刻意去作假最后无疑会适得其反。
“被面试官问到对加班的看法时怎么回答呢?”
答:在阿里有这样一句话:加班是正常的,不加班也是正常的,只有完不成工作是不正常的。所以,加不加班不是取决于一种形式。加班不是衡量一个人敬业程度的标准。我们加班是为了完成原有计划内的一些事情,加不加班,因人而异,有的人工作平衡度节奏感把握得很好,每天很少都不用加班,但是工作依然完成的很好,这种模式往往就是我们比较提倡的。
“面试官问到我们薪资的时候该怎么回答呢?”
答:薪资在一定程度上是代表你在职场的价值体现,但前提是不能狂妄自大。
每个人都应该正确评估自己的工作能力。只要你是客观真实地去表达的,即使你说出来的薪资超出了这个岗位原有薪资标准也没关系。至少这是你对自己职场价值的一种认可。
面试后
等待面试结果的过程确实很漫长。这时候可以做些什么呢?
在阿里,正常的反馈期是一周,也有岗位会力争做到三四个工作日。
但是也有特殊情况,比如遇到一些基础性岗位的招聘,我们一个月需要招几百个人,我们面试的人可能会达到几千个,由于时间太紧张,可能会超过一个星期没有反馈的情况。
当你觉得等了一周甚至两周还没有收到反馈,但你又非常重视这个面试结果的时候,你可以去主动咨询。
如果你没有通过面试,但是你对这个岗位又非常感兴趣,也可以抱着学习的态度去跟面试官聊,询问自己的不足之处,我想HR也会很愿意花时间来帮助你和你分享的。
怎么去联系HR呢?面试通知的时候通常是以短信或者邮件的形式收到的,总会留下HR的联系方式。
“面试了但是没有通过,但是我想再试一下,我可不可以再投简历呢?”
答:可以的,但是需要间隔六个月。求职者不可能在短时间内发生一个质的变化。一般情况下,一个人的能力要有突破性的提升至少需要六个月。
在阿里,整个人才库都是开放的,如果你之前投了简历参加了面试没通过的话,我们会把你的简历放到人才资源库,你面试的记录会留在系统里面,所以不要抱有侥幸心理在未满六个月的时候去投递其他岗位。
面试就像踢足球,再怎么了解规则,如果球技不如人,还是踢不进世界杯。修炼自己才是王道。努力让自己成为一颗金子,在哪里都可以发光。
2年Java开发工作经验面试总结
最近换了个公司,从三月底开始面,面到四月底,面了有快二十家公司。我是一个喜欢总结经验的人,每经过一场面试,我在回来的路上都会仔细回想今天哪些问题可以答的更好,或者哪些问题是自己之前没遇到过的,或者是哪个知识点今天又问了等等。四月中旬的时候,我就在构思要写一篇面经,主要是想着可能对那些跟我相同处境的人有点帮助,再者就是稍微记录下这为期一个月的面试过程。
个人介绍:
首先介绍下我面试时的自身条件情况,我把自己的情况分为优势和劣势来说可能更有利于你们比较自身情况。
劣势:
1.15年7月毕业后开始到上海工作,面试的时候是17年3月到4月,一年多的经验,勉强算两年经验。分析:一年多经验我认为是比较尴尬的,处于一个不上不下的位置,很多公司比较喜欢招三年经验的,或者直接招应届生来培养。
2.毕业于一个非985/211,勉强上一本的高校。分析:这个相对影响较小,因为有工作经验后,公司对学校的要求就没那么高了,只要是本科就基本没问题,但是还是有个别叼毛公司只要985/211。
3.前一家公司是传统电信行业,加入项目组时,项目已经上线有段时间了,我们的任务就是有需求就开发,有bug就优化,其他时间就聊骚,各干各的,工作一年多跟在养老一样,用一句话说就是编程5分钟,扯淡2小时,项目经验严重不足,没开发过很难的需求。分析:这一点是最伤的,公司招有经验的就想看你都干了些什么牛批的东西,结果你告诉面试官我写的需求都是垃圾。
优势:
1.大学时拿过比较多的奖,每年都是校级优秀学生,毕业时是市级优秀毕业生,拿过省级ACM二等奖等。分析:大学的荣誉对一个有工作经验的人来说,公司不一定会看重,但是可能会对面试官产生微妙的影响,特别是ACM奖,我碰到过有的面试官也是搞过ACM的,有共同的话题聊起来总是比较容易的,但是也要注意不能把这一栏篇幅写的过于多,只能当作点缀用,我当时是放在简历最后一栏,简要的写了最主要的几个奖。
2.良好的沟通交流能力。分析:这个能力不会是关键性的,但是可以加分。
3.较强的学习能力和逻辑思维能力。分析:有些公司和面试官还是比较看重一个人的学习能力的,经验代表着你现在在什么级别,而学习能力则代表着你将来能到达什么级别。
学习过程:
看了我的优劣势介绍,你会发现我的优势相对于我的劣势来说,简直不值一提。我自己对此也有清晰的认识,因此从过完年之后,我就开始抓紧空闲时间学习。学习的过程如下:
1.看面试题
正常人第一步肯定都会看面试题,我也不例外,在看的过程中,我发现有些文章写的不错,对我帮助不小值得推荐,如下:
Java面试题全集(上)很多基础的东西,建议先看。
各大公司Java后端开发面试题总结
面试心得与总结—BAT、网易、蘑菇街
关于Java面试,你应该准备这些知识点
2.深入学习
在看面试题的过程,你会遇到一些自己没接触过的或者以前没深入学习过的知识,例如最常问的HashMap内部实现原理,这就促使你得开始去看jdk的源码或者是学习一些新的东西。看源码是很重要的一步,起步很难,但是会让你收益良多,看源码的过程如果碰到无法理解的地方,可以百度看下别人的理解。我学习源码的过程中,看过几个人的关于源码的文章写的很不错,如下:
五月的仓颉
占小狼
zhangshixi的Core java系列
3.熟悉项目
找出自己工作以来开发过的最叼的功能,将整个功能的流程和涉及的东西吃透。项目是面试中必问的环节,一般是以一个功能点为基础展开问,因此你必须对这个功能有很深的认识,不能有模糊的地方。如果有时间,能把涉及到的知识点也搞懂最好。
4.做面试题
有不少公司是有面试的,如果你没有准备过,很容易在各种小地方犯错,建议去一些面试题网站多做些题目,我自己是用的牛客网。
5.学习记录
把自己每天的学习时间和学习内容记录下来,可以让自己更有动力的学习,学习是一个枯燥的过程,你必须让自己时刻保持有动力。
投简历、约面试环节
1.在哪些网站投?
拉勾网、BOSS直聘、猎聘网。
2.是否该海投?
投简历分为两个情况。
1)没有社招面试经验:建议采取海投的方式,只要职位要求跟自己比较匹配都可以投,累计面试经验。这个环节可以把投简历的网站增加两家:智联和无忧。
2)自认为社招面试经验已经足够:投那些职位匹配、公司满意的职位。公司评价可以去看准网、百度、知乎等查询。
3.一天约几家面试合适?
最理想的情况为2家面试,上午一般在10点左右,下午一般在2点左右。建议把理想的公司放下午,因为下午的时间比较充足,可以让公司更充分的了解你。我开始面的时候,每次都是上午面的不好,下午面的不错。
4.投简历经常没下文?
我当初也没想到简历筛选这关有这么难,可能是我的简历确实亮点不多,再者HR很多都不是行内人,因此他们看得最直接的就是你上家的公司和你毕业的学校,如果你不是从牛逼的公司/学校出来,可能会碰到和我一样的情况,应对的办法就是多投。
5.是否该裸辞?
我一开始是边上班边投,然后利用调休时间,或者请假去面试。后来,面试机会越来越多,请假太频繁了,自己都不好意思了,并且自己也已经有足够的信心,这个时候我选择了裸辞。裸辞还有一个原因是,在面试过程中你会发现,有的公司要人要的紧,如果你的辞职流程过长可能会导致你错过这个公司。
6.注意事项
1)面试前一天把路线和时间算好,最好别迟到。
2)背个书包,带好简历、充电宝、纸巾、雨伞。
面试环节
1.笔试常见的问题?
面试常见的问题上面给的面试题链接基本都有。我只提几点:1)写SQL:写SQL很常考察group by、内连接和外连接。2)手写代码:手写代码一般考单例、排序、线程、消费者生产者。我建议排序算法除了冒泡排序,最好还能手写一种其他的排序代码。试想:如果一般面试者都写的冒泡排序,而你写的是快速排序/堆排序,肯定能给面试官留下不错的印象。
2.面试流程?
1)让你自我介绍
2)问Java基础知识
3)问项目
4)情景问题,例如:你的一个功能上了生产环境后,服务器压力骤增,该怎么排查。
5)你有什么想问面试官的
3.面试常问的知识点?
1)集合相关问题(必问):
HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。
HashMap和Hashtable的区别。
ArrayList、LinkedList、Vector的区别。
HashMap和ConcurrentHashMap的区别。
HashMap和LinkedHashMap的区别。
HashMap是线程安全的吗。
ConcurrentHashMap是怎么实现线程安全的。
2)线程相关问题(必问):
创建线程的3种方式。
什么是线程安全。
Runnable接口和Callable接口的区别。
wait方法和sleep方法的区别。
synchronized、Lock、ReentrantLock、ReadWriteLock。
介绍下CAS(无锁技术)。
什么是ThreadLocal。
创建线程池的4种方式。
ThreadPoolExecutor的内部工作原理。
分布式环境下,怎么保证线程安全。
Java学习交流QQ群:589809992 我们一起学Java!
3)JVM相关问题:
介绍下垃圾收集机制(在什么时候,对什么,做了什么)。
垃圾收集有哪些算法,各自的特点。
类加载的过程。 双亲委派模型。
有哪些类加载器。
能不能自己写一个类叫java.lang.String。
4)设计模式相关问题(必问):
先问你熟悉哪些设计模式,然后再具体问你某个设计模式具体实现和相关扩展问题。
5)数据库相关问题,针对Mysql(必问):
给题目让你手写SQL。
有没有SQL优化经验。
Mysql索引的数据结构。
SQL怎么进行优化。
SQL关键字的执行顺序。
有哪几种索引。
什么时候该(不该)建索引。
Explain包含哪些列。
Explain的Type列有哪几种值。
6)框架相关问题:
Hibernate和Mybatis的区别。
Spring MVC和Struts2的区别。
Spring用了哪些设计模式。
Spring中AOP主要用来做什么。
Spring注入bean的方式。
什么是IOC,什么是依赖注入。
Spring是单例还是多例,怎么修改。
Spring事务隔离级别和传播性。
介绍下Mybatis/Hibernate的缓存机制。
Mybatis的mapper文件中#和$的区别。
Mybatis的mapper文件中resultType和resultMap的区别。
Mybatis中DAO层接口没有写实现类,Mapper中的方法和DAO接口方法是怎么绑定到一起的,其内部是怎么实现的。
Java学习交流QQ群:589809992 我们一起学Java!
7)其他遇到问题:
介绍下栈和队列。
IO和NIO的区别。
接口和抽象类的区别。
int和Integer的自动拆箱/装箱相关问题。 常量池相关问题。
==和equals的区别。
重载和重写的区别。
String和StringBuilder、StringBuffer的区别。
静态变量、实例变量、局部变量线程安全吗,为什么。 try、catch、finally都有return语句时执行哪个。
介绍下B树、二叉树。
ajax的4个字母分别是什么意思。
xml全称是什么。
分布式锁的实现。
分布式session存储解决方案。
常用的linux命令。
一些经验:
1.先投一些普通公司,等面出了心得再去投理想的公司。
2.不熟悉的技术不要主动提。
3.对于那种实习期6个月还打8折的公司,除非你没有其他选择了,否则不要去。
4.小公司喜欢在薪水上压你,开的时候适当提高。
5.不要去参加招聘会,纯粹是浪费时间。
6.把面试当作一次技术的交流,不要太在意是否能被录取。
7.公司一般面完就决定是否录取了,让你回去等消息这种情况一般没戏,无论你自己觉得面的有多好。
8.尽量少通过电话面试,效果不好。
9.在面试的日子里,要保持每天学习,无论是学习新东西还是复习旧东西。
10.拿到offer了,问问自己这个公司让自己100%满意了吗,如果不是,请继续努力找更好的。
11.通过面试官可以大概判断这家公司的情况。
12.拉勾投的简历很多会被筛掉,但是拉勾还是面试机会的最主要来源。
13.理想的公司可以多投几次,我有好几次都是第一次投被筛掉,多投几次就过的经验。
14.问到自己有深入研究过的知识,抓住机会好好表现,不要轻易放过。
原文地址:http://geek.csdn.net/news/detail/238875