手记

Java面试(转载自@秋名山车神)

月薪6000以上:

了解数据库的基本操作

懂得MVC设计模式和面向对象的思想

熟悉Spring MVC, Spring, Hibernate或MyBatis框架

说实话,会这些6000块钱绝对可以了,后面会说怎么编工作经验。

月薪10000以上:

1.了解Java的反射机制

  1. 了解泛型的原理

  2. 了解Spring框架的基本原理

  3. 熟悉设计模式

  4. 了解如斐波那契数列之类的简单算法
    月薪20000以上:

    1. 精通MySQL的操作,了解如何优化取得更高的性能

    2. 熟练使用Java的代理模式

    3. 了解Spring框架的底层实现

    4. 熟悉Tomcat的性能优化

    5. 了解JVM的原理

    6. 了解如何搭建高并发,高负载,高可用的系统结构

    7. 如果会Hadoop就更好了

面试题:

(纯手打,个人总结,如果有错误欢迎指正)

  1. 什么是面向对象:

所谓面向对象是指,编程语言将具体的参数和函数封装为一个实体,每一个实体称之为一个对象,程序员更关心的是每个对象如何设计,以及如何处理他们之间的关系,面向对象的语言特点是支持继承和多态。

  1. 什么是继承:

举个简单的例子,李嘉诚的孩子相当于拥有李嘉诚的个人财产,当然前提是这些财产被李嘉诚声明为公有的,这样李嘉诚的孩子就可以继承李嘉诚的房子,钱。但是他无法继承李嘉诚声明为私有的老婆。

  1. 什么是多态:

多态就是一个事物有用的多种形态,这是面向对象的一种表现。如人这个生物,他既是一个人,又是一个动物,还是一个哺乳动物。这就是多态的表现,如果某个方法接收一个动物,我传给他一个人,方法可以执行,因为人是更高级的动物。如果一个方法接收一个人,而我传给他一个动物,那程序就无法运行,因为动物可能包含低级动物,他不包含人特有的方法和属性。

  1. 什么是可变参数:

可变参数是Java5.0的新特性,具体的使用方法是当一个方法声明的时候以public void test(int ... nums)为例。参数类型后跟三个点后再跟参数名称,该方法就可以接受任意多个int类型的参数,test(1,2,3) test(1,1,1,1,1)程序都可以执行,在方法中nums可以以数组的形式进行使用。

  1. 什么是反射:

反射是Java提供的一种可以根据类的名称去获取类中参数的技术,以反射类的公有方法为例,首先需要加载这个类,然后获得类的实体,接着根据方法名去获取方法的对象,最后使用invoke传方法所需的参数就可以执行,如Spring这种框架就是使用反射的技术去注入对象的。

  1. 什么是内省:

内省是Java提供的操作对象属性的API,实际上内部也是使用的反射技术,只是操作起来更加的方便。内省需要使用Introspector的getBeanInfo来获取与类相关的BeanInfo,使用getPropertyDescriptors可以得到BeanInfo的所有属性,然后使用getWriteMethod或getReadMethod可以获取该属性的set或get方法,得到的是一个Method对象,通过invoke方法可以运行。

  1. MVC设计模式:

MVC设计模式是:Moudle,View,Controller,分别代表模型,视图,控制器。是Web开发中最常用的设计模式,每一层只关心自己的业务特点,无需关心其他模块,降低模块与模块之间的耦合性,增加项目的可扩展性和可维护性。

  1. Spring框架的主要原理:

Spring框架的核心是IOC和AOP,IOC又叫依赖注入,有些人喜欢叫控制反转。它的基本原理是通过读取配置文件,通过配置文件中配置的路径,读取文件目录下的所有Java文件,得到文件名称,依次反射这些文件,得到他们的方法和对象,对象或方法上有没有指定名称的注解,最后通过反射生成方法的实体给指定的对象赋值。

AOP又叫面向切面的编程,它可以降低业务之间的耦合度,如日志记录,事务控制,异常处理等等。可以在方法前或方法后做一些操作,它的基本原理是使用Java的动态代理API,通过API获得指定方法的代理对象,通过再代理对象方法执行前后增加方法,可以达到在不改变类本身的情况下,灵活在某些方法执行前后增加其他方法。

  1. 什么是泛型:

泛型是JDK5.0中提供的一种新特性,当我们的方法,接受不确定类型的参数时,可以使用特殊变量T,T在使用之前要在方法中进行声明如:public <T> T getObj(T t)这个对象代表,接收一个任意类型的参数,并且返回这个类型的参数。Map集合声明时接收的key和value就是泛型,泛型作用在类上时,即可使用Map<String,String>这种形式进行泛型赋值。

  1. 如何声明一个注解:

注解是Java中一个为了取代配置文件的技术,常见的注解有@Override,@Test等,声明一个注解只需要新建一个类,以Imooc注解为例,public @interface Imooc{} 即可声明一个名为Imooc的注解。内部可以以参数类型 参数名()的形式来声明注解中所需要的参数。

十全十美吧,这是总结的Java里面难度比较高的面试题,前面那几个简单的除外。当然了,小公司基本问不到,问不到可以引导他们往这些上面问,可以提升你的逼格。

接下来我要说一下最重要的面试过程:
首先你要明白一个问题,诚实只会让你被淘汰。面试官看你诚实,然后很感动要了你,这种事情只会在童话故事里面。

  1. 首先要自信,你要告诉自己,你就是比尔盖茨,是乔布斯,要有自信,但是要谦虚不能自大,你一拽一拽的别人立马就给你个坏印象,但是你说话不流利结结巴巴的别人也不会有好印象,不骄不躁即可。

  2. 不要让面试官一直问你,这样你会很被动,指不定他想起来什么坑爹的问题,在他看你简历这种停顿的时候,你就问他这些问题,比如说:哥,咱们公司主要是做什么的啊?如果我进了咱们公司主要做什么?你来咱们公司多久了?这些问题,聪明人肯定能看出来这是三个问题,不会有人一次问三个,除非你不想在这家公司。这么问的是有原因的,一个是捧了他,还有一个潜移默化的告诉他,咱们咱们,让他感觉你已经是这个公司的了,并且,让他跟你说你进来以后主要做什么,他就会觉得,恩这个人正适合做这些,就好像你已经入职了,他告诉你要做什么一样。

  3. 不会的问题不要说不会,你可以这么说,首先,如果你知道的一点的话,你就说:这个我研究过,但是上家公司没怎么用,所以没有太深入的了解,如果公司需要的话,我可以很快就学会了。如果这个东西你压根没有听说过你可以这么说:听说过,但是还没看过,如果公司需要的话,很快就能学会了。

  4. 要表现出,你对编程这个行业无比的热爱,并且非常的有上进心,有拼搏进取的精神,想要在公司好好的发展,公司给我一片天,我给公司创造一个神话这种心态。还有就是如果他问了某一个问题你没有答上来,或者说那个技术实现你不懂你可以这么说:哥,你能不能给我说一下那个什么什么是怎么回事。这样有几个好处,一个是可以打发时间,面试的时间基本上都那么长,可以减少他问你的问题。另一个就是让他对你有一种好感,至少你很知道进取。最后切记,无论他说的对与错,你都要说,原来是这样啊,谢谢哥,当然,如果那个人明显比你小的话就不要这么叫了,还有就是你面试项目经理级别的职位,就无需这样。

  5. 关于上家公司的离职原因,其他没什么记住不要说这几个原因:公司氛围不好,公司工资太低,合同到期了,公司加班多,公司出差多,公司不适合我的发展,公司待遇太差,公司女的太少,个人原因。凡是这些问题的,一律都是找死行为。你可以这么说,我只是举个例子。之前家里有点事情,安排相亲或者什么任何事情都可以,需要耽误一个月左右,公司那时候项目比较着急,老板等不及,然后我就辞职了。

  6. 谈薪资的时候要坚定,一口咬定,不要说多少左右,或者多少到多少,直接说6000,8000,10000这些,如果不是万不得已,不要说6500,8500,这种后面带五百块钱的工资,这会让人对你产生怀疑,记住工资不能说多少左右。

编工作经验:

  1. 在学校的时候,虽然我这个人不是很聪明,但是比较努力,老师们也喜欢让我做一些事情,然后我们学校某某老师他就经常接项目做,我就跟着他在学校做,主要是做什么做什么。

  2. 我们学校大三的时候会安排出去实习,我在某某公司实习了一年,主要是做什么做什么。

  3. 最后一年感觉在学校学不到什么东西,就自己出来找工作了,然后做了一年多,刚回学校参加完答辩,在那家公司主要做什么做什么。

需要注意的是,做什么这就需要你自己去编了,这很简单,你只要提前做过几个小案例,我相信编个这个还是很容易的吧。

基本上,面试问题就这么多了,希望大家都要牢记自信,当你有自信的时候,你就无惧任何的面试官,再一个就是既然选择了这个行业,就一定要用心。这里不是说教大家说谎,而是让我慕课学子不会因为工作经验这个门槛而被拒之门外,或者因为这个干着8000一个月的工作,拿着3000一个月的工资。

大家能够做到上面说的话,不管是不是新手,一定能拿到6000以上一个月的,如果还有做不到的请联系我,我亲自教你怎么做。

海阔凭鱼跃,天高任鸟飞,加油。

0人推荐
随时随地看视频
慕课网APP