从面试别人想到的

原文地址:http://www.javaeye.com/topic/833774

  最近一个月面试了10几个人,有应届毕业生,有在校寻找实习的学生,有工作了两三年的,也有工作了5到10年的,有在外包公司工作的,有目前在世界级外企的。结果是,一无所获。 
      想起两年前,研究生二年级上学期开始找工作,面试了几个公司的经历,和一些师弟师妹问我的一些问题,不禁让我想到了很多。主要有两个方面: 
      1 我们应该如何面试,才能挖掘出应聘者的真实能力 
      2 从面试中,我渐渐的画清楚,一个公司需要什么样的人才,我自己应该如何规划我的未来。 
      
      我面试别人掌握两个原则: 
      1 此人掌握的主要技能是我们所需要的 
      2 此人虽然尚未掌握我们所需要的所有技能,但是从他已经掌握的技能可以看出他的潜力和当前的Level。 
      第二点很重要,就像Kent Beck不是Flex高手,但是我相信如果他愿意学习,他很快就会成为Flex的高手。 

      我觉得我们招人主要基于以下考虑: 
      1 需要某方面专门人才,来和我们现有的人形成互补。 
      2 需要一些具有我们项目所需要的技术的人,他的技能会跟我们类似,但即便这样,我们依然希望他会是某方面的专家,比如Spring Security这么一个框架的专长也是Plus。而且,我希望这个人比我强。 

    

     我招人的时候希望此人具有以下的气质: 
     1 热爱编程,相信软件工艺,也相信软件工程。最近在看Kent Beck的实现模式和Bob大叔的代码整洁之道,我希望他能跟我一样,认为代码是给人看的,好的代码像一篇文章一样。能够反复去雕琢一段代码。但是要理解软件工程,不能为了雕琢每一段代码,而缺乏全局认识。 
     2 热爱编程,能够为解决一个问题,写一段漂亮的代码,甚至于为类起一个好的名字而失眠。 
     3 热爱编程,把这当作是一项事业,而非仅仅是工作。那种只是想把工作对付完了就OK的人是不适合的。 
     4 热爱编程,单纯的用程序交流,人也像好代码一样,干净利落,说话直来直去。大家都很忙,没时间听客套话和绕圈子。      

      就像当年别人面试我的时候那样,我会这样去面试别人: 
      1 从简历里挑出我最关心的他所会的技能,比如最近我希望招一个JS高手,最好精通Dojo(我说的精通是真的精通)。 
      2 我会问他最擅长的技术(如果此技术不是我们最需要的那个),如果他最擅长的技术都语焉不详,那就没什么意思了。 
      3 我会问某项技术全貌上的问题,比如会让对方谈谈Dojo的整个架构,是怎么解决JS领域的一些核心问题的。 
      4 我会问一些技术细节,比如Spring的声明式事务处理是怎么实现的,因为这一个问题就暗含了AOP的概念和如何实现,代理模式,线程,JDBC事务处理。如果应聘者看过Spring的源代码,那么说明此人能够花心思追究技术更深层次的东西,具有优秀程序员一个优秀品质:好奇心。如果应聘者没看过Spring的源代码,他能回答上来,说明此人各方面基础知识扎实并能融会贯通去解决问题。同样我会问Hibernate的延迟加载是怎么实现的。 
      5 我会问一些工程性问题,比如Spring的依赖注入,Scope为Session的Bean如何注入到Scope为Singleton的Bean。比如如何调整Hibernate查询性能。比如数据库索引会在什么情况下失效,原理是什么。 
      6 我会问一些解决方案,比如如何重启服务器后,依然能够保持Session。 
      7 我会问一些企业开发中特别重要的问题对方是如何理解的,比如事务,并发,内存管理,异构系统整合,数据库性能优化。 
      8 我会问一些特别基础的问题,比如HashSet是如何判断新添加的对象是否已经存在的,如果已经存在,它是不再放进去,还是放进去覆盖之前的。比如ClassLoader的工作原理。 
      
      当我面对一些工作了四年以上的人时,多少是有点惴惴,因为会担心对方很牛,我却挖掘不出。后来请教了一位工作了六年的同事,他说一个简单的原则是: 
      问他你目前在项目中遇到的问题,因为这些问题都是大家讨论的,深思熟虑的,然后问他的解决方案。 

      我面试的这些人,有时让我很感慨,为什么工作了四五年的人,甚至是十年的人,号称自己精通Dojo,但是一些基础性问题都不清楚,因为我是初学者,但是我会买一本Dojo之父写的精通Dojo去学习,甚至于我带的一个大四的实习生都知道去遍历网上所有的Dojo基础资料,然后把源代码看看。我需要的是,当我问及一个问题时,告诉我Dojo正确的做法是什么,而不是仅跟我一样,遇到一个JS问题,只能去网上搜一段代码,改改放到项目中,甚至于那段代码他都不完全理解。比如我现在也在阅读Javascript高级编程指南,以了解细节。 
       
       跟一个很牛的同事一起面试别人JS,我觉得那人技术还算熟练,但是我的同事摇摇头说,一个人工作了四年,连如何用JS模拟Java中的类,JS的事件框架是怎么回事都不清楚,怎么能行呢。 

       我想,或许,这也是我的奋斗目标: 
       1 成为丁字形人才,有一项自己特别精通的技术,比如我的那位同事精通Extjs,精通JBPM,精通Spring Security,那是真的精通,另一位同事精通Lucence,还有的精通JQuery,有的非常熟悉Oracle。 
       2 其实我对于我想招的人的要求,就是对自己的基本要求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为一个JavaAI助手,我认为Java面试复习应该从以下几个方面开始: 1. Java基础知识:包括Java语言特性、数据类型、流程控制语句、面向对象编程、异常处理、集合框架等。 2. Java虚拟机:包括内存模型、垃圾回收机制、类加载机制等。 3. 多线程:包括线程的创建、同步和互斥、线程池等。 4. Java Web开发:包括Servlet、JSP、Spring、MyBatis、Hibernate等。 5. 数据库:包括SQL语句、数据库设计、MySQL、Oracle等。 6. 网络编程:包括TCP/IP协议、HTTP协议、Socket编程等。 7. 设计模式:包括单例模式、工厂模式、观察者模式等。 8. 框架技术:包括Spring Boot、Spring Cloud、Dubbo、Zookeeper、Kafka等。 以上是我认为Java面试复习的核心点,但具体复习的内容还要根据自己的实际情况和职位要求来定。 ### 回答2: 在准备Java面试时,首先应该从基础知识开始复习。以下是一些建议的复习内容: 1. Java基础知识:复习Java的数据类型、控制结构、面向对象的概念和特性、异常处理、集合类等基础知识。还应该熟悉Java中常用的关键字和操作符。 2. 面向对象编程:复习关于封装、继承和多态的概念以及如何在Java中实现它们。还应该了解设计模式和SOLID原则等面向对象编程的相关概念。 3. Java核心类库:复习Java的核心类库,包括IO流、多线程、网络编程以及常用工具类等。特别要注意Java 8引入的新特性,如Lambda表达式和Stream API。 4. 数据库知识:熟悉SQL语言和关系型数据库的基本概念,了解JDBC的使用和常见的数据库操作。 5. 数据结构和算法:复习常用的数据结构,如数组、链表、栈、队列、树和图等。还应该了解常见的排序和搜索算法,并能够分析它们的时间复杂度。 6. 框架和技术:了解常用的Java框架和技术,如SpringHibernate、Java Servlet、JSP和MVC等。还应该了解Web开发中的常见技术,如HTML、CSS、JavaScript和HTTP协议。 7. 掌握项目经验:复习自己的项目经验,了解自己在项目中所承担的角色和责任,并准备有关项目的技术细节和相关问题的回答。 在复习过程中,建议通过做一些模拟面试题和编程练习来巩固所学的知识。同时也要保持对新技术和新特性的学习,如Java 11、Java模块系统和响应式编程等。最重要的是保持对Java编程的实践和理解,通过项目实践和编码实践来提升自己的能力。 ### 回答3: Java面试的复习应该从以下几个方面开始: 1. 基本语法和核心概念:复习Java的基本语法规则、关键字、变量数据类型、运算符以及流程控制语句等。同时还需要熟悉面向对象的概念,如类和对象、继承、多态等。 2. 集合框架:复习Java集合框架的常见类,如ArrayList、LinkedList、HashSet、HashMap等,了解它们的特点、常用方法以及适用场景。同时还需了解迭代器和遍历方式等相关知识。 3. 异常处理:复习Java的异常处理机制,包括异常类的继承关系、异常处理的方式和操作等。了解如何捕获和处理异常,并了解常见的异常类型及其解决方法。 4. 多线程:复习Java的多线程编程相关知识,包括线程的基本概念、创建和启动线程的方式、线程同步与互斥、线程池的使用等。同时了解Java中的线程状态和线程调度等内容。 5. IO流和网络编程:复习Java的IO流操作,包括文件的读写、字节流和字符流的区别、以及常见的输入输出流等。还需要了解Java网络编程的基本概念、Socket编程、URL和URLConnection等相关知识。 6. JDBC和数据库:复习Java数据库连接(JDBC)相关知识,包括数据库的基本操作、连接数据库的方式、执行SQL语句以及事务处理等。同时还需了解常见的数据库操作类和框架,如Hibernate和MyBatis等。 除了以上内容,还建议在复习过程中多动手实践,编写一些简单的Java程序或者参与一些项目实践,以提升对知识的理解和运用能力。另外,对于面试经常涉及的常见问题和算法题也应进行重点复习,例如字符串处理、排序算法、数据结构等。最后,了解一些面试技巧和注意事项,如自我介绍、项目经验的准备和回答等,有助于更好地应对面试的挑战。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值