课程咨询 :13623629309

太原PHP培训 > 达内新闻 > 这里有一份面经,请查收(1)
  • 这里有一份面经,请查收(1)

    发布:太原PHP培训      来源:伯乐在线      时间:2016-07-20

  • 博主毕业快满三年了,由于种种原因想换一份工作。学了7年计算机技术,在目前的行业用到的技术不多,还是想去寻找一份互联网行业的工作,这样更能学以致用发挥自己的特长。从上次更新博客到现在已经三周左右了,这三周博客基本断更了,现在找工作也基本收尾了,来聊一聊我所遇到的一些面试经历,希望给各位寻求新机会的小伙伴一个参考。总共面完8家收了7个offer,应该算是比较成功的吧。博文中主要还是聊一下技术相关的,博文中所涉及的公司均以代号标志,不便透露细节。

    第一家面试的公司是一家互联网创业公司,这里简称D,博主对这家公司的印象还是不错的,共面试了5轮,笔试一轮,技术面3轮,最后一轮是HR面。虽然公司总共员工只有小几百人,但是做事比较专业,很多大型的成熟公司也未必做得更好。

    首先说说笔试,很多一些小的公司,就是从网上题库中拉点选择题让你做做,之后的面试和笔试题无关,这里我遇到的笔试题是和第一轮技术面相关的,有点小套路。

    笔试题

    据博主的回忆,共有这么些题(都是简答题):

    1. 写出java中synchronized的使用方式。

    可以参考:Java多线程知识小抄集(一)

    2. Java中设置最大堆和最小堆内存的参数是什么?

    -Xmx -Xms

    3. volatile的作用?

    两点:内存可见性;防止指令重排序;

    4. 写一个二分查找算法

    5. 写一个你熟悉的设计模式,画出UML图,说出此模式的作用以及写出此模式的主要方法。

    6. 一道设计题。(略)

    7. BeanFactory和ApplicationContext的区别。(Sping的容器可以分为两种类型 :1. BeanFactory:(org.springframework.beans.factory.BeanFactory接口定义)是最简答的容器,提供了基本的DI支持。最常用的BeanFactory实现就是XmlBeanFactory类,它根据XML文件中的定义加载beans,该容器从XML文件读取配置元数据并用它去创建一个完全配置的系统或应用。 2. ApplicationContext应用上下文:org.springframework.context.ApplicationContext)基于BeanFactory之上构建,并提供面向应用的服务。)

    (第4,5题在下面会解释)

    第一轮技术面

    主要根据简历以及笔试题进行论述。

    先将笔试题,首先是写出一个熟悉的设计模式,那当然写个单例咯,这个最简单嘛,主要是UML图也特别好画。详细可以参考设计模式:单例模式(Singleton)。博主写的是内部类的写法:

    太原php编程开发

    这种写法是懒汉式线程安全的写法。

    面试官问到一个问题:为什么这种写法是线程安全的?

    那么这里就设计到一个JVM加载的知识:JVM内部机制可以保证在执行类构造器()方法的时候是线程安全的,详细可以参考博文: Java虚拟机类加载机制。

    这里博主还特意说了虚拟机规范严格规定了有且只有5种情况(JDK7)必须对类进行初始化(执行类构造器()方法):

    遇到new,getstatic,putstatic,invokestatic这失调字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译器把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。

    使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。

    当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。

    当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。

    当使用jdk1.7动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getstatic,REF_putstatic,REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行初始化,则需要先出触发其初始化。

    尤其是第5点,是个特别偏冷的知识点,当你记住这个的时候,可以给面试官留下一个很好的印象。在后面的博文中会经常涉及这种冷知识,可以让你的面试过程添加几处亮点。

    下面就是要说明一下的二分查找法(首先确保被排序的数组有序),这里有两种写法:递归和非递归的写法。博主憋了一个递归的算法,不过最好还是用非递归的写法。二分查找法还是很容易的,关键这里引申出了变种算法,譬如:给你一个key,找出这个数组中最左边的key,或者最右边的key。当然还有其他变种算法,有兴趣的朋友可以自行查找相关资料。

    接下去就根据简历聊一聊项目和Java基础了。下面稍微列举一些问题:

    1. Memcached和Redis的区别?参考:Redis和Memcached的区别

    2. ActiveMQ的集群配置方式有哪些?(基于共享文件,基于数据库,基于Zookeeper等)

    3. Mybatis的一些知识点。(略)

    4. 虚拟机的类加载机制。(加载-验证-准备-解析-初始化,详细可以参考 Java虚拟机类加载机制)

    5. 内部类相关知识点。

    6. 面向对象的设计原则?参考:面向对象的设计原则

    7. Spring Aop的原理?动态代理。

    8. Spring常用的注解?

    9. NIO的相关。参考:攻破JAVA NIO技术壁垒

    10. 数据库优化相关。(博主基本不直接接触数据库,so遇到此类问题直接say: I don’t know. 有兴趣的小伙伴可以自行查阅一些资料,譬如数据访问优化漏斗法则。)

    11. linux下查看文件有哪些方式?cat tac head tail more less nl vim vi gvim

上一篇:如何设计优雅的类结构

下一篇:这里有一份面经,请查收(2)

最新开班日期  |  更多

php高级开发名企定制班(剩2个名额)

php高级开发名企定制班(剩2个名额)

开班日期:12-30

php高级开发周末班(剩5个名额)

php高级开发周末班(剩5个名额)

开班日期:12-30

php高级开发免费试听(剩5个名额)

php高级开发免费试听(剩5个名额)

开班日期:12-30

更多高级开发工程师精品班

更多高级开发工程师精品班

开班日期:12-30

  • 地址:山西省太原市小店区学府街长治路高新国际A座24层
  • 课程培训电话:13623629309     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56

    在线客服系统