今天到应聘java开发工程师招聘,面试官问我在工作做了什么?我感觉没有什么好说的,我工作中就是开发一些

继上次&&文章过后,大家都希望除了题目之外,最好能给出自己当时的回答情况,看看有没有什么回答技巧,这样更有参考价值。
嗯,建议的很对,因此这次对于阿里的面试回忆,我下面以对话的形式尽可能复现我当初的面试场景。
声明:下面只复述我觉得有参考价值的面试题,实际面试题比这多些(有些不记得了),需要找工作的请认真看完(对Java方向的同学更有帮助),不需要的大牛们请一笑置之。
2. 阿里面试回忆
在说具体的面试场景之前,一个小插曲很有必要说一下:
由于我面的是Java开发,但当时负责人员给我安排了一个C++面试官(在面试官桌子上放着一个&C++方向&的牌子),然后我就跟负责人说&我是面Java方向的,不是C++方向的&,结果那个面试官笑呵呵的说&没关系,在我这面一样的,如果你不懂C++,我可以不问你C++语言方面的细节问题&,当时我心里想:虽然我C++学的和Java差不多,就算面C++也没有问题。但是既然面试官这么说了,肯定不问C++了,Java估计也不会问(C++方向的工程师不一定懂Java呢),应该是问数据结构、算法、网络、操作系统方面的问题了。虽然都有所准备,面起来也可以,但是鉴于两个方面的原因,我还是没答应在这面。(1)据说阿里90%都是招Java工程师,如果在这面后面肯定会以为我是面C++的,胜算就少了;(2)我这几个月基本上都在专研Java方向的知识,也研究了不少JDK源码和Java相关的项目,感觉自己的Java方向知识有了一个质的提高,因此希望面试官能够考查和检验我这方面的知识。
因此我当时跟那个面试官说&不好意思,我还是希望能面Java方向的知识&,那个面试官依旧笑呵呵&如果你对Java知识的确非常自信,那么可以给你换个Java方向的面试官&,然后我只能说&是的,我有研究过很多JDK源码,也做了不少Java项目&。最后,我出去找负责人给我安排Java方向的面试官,负责人说&那你要等会儿才行,估计要半个小时&。&哦,没关系,那我等会吧&,心里想:等不怕,方向搞错了才要命。
说上面这段插曲的目的是想告诫大家,如果你有比较明确的方向,比如&我以后一定要做C++/Java方向的开发&,那么一定要强调出来。如果像阿里这样每个面试官都有个方向牌那很容易搞定,如果没有则可以在面试一开始的自我介绍或找其它机会说出来让面试官知道,可能有人认为语言不重要,关键是算法、数据结构、操作系统云云&&是的,很多面试官都跟我说过:在以后的工作过程中,语言不重要,重要的是你以后做的东西是不是你感兴趣的,但是我认为语言在面试过程中是有非常大的关系的,如果你是C++方向,那么面试官可能会问你一些虚函数机制、Linux下的内存分配策略、内存管理、常用系统调用等这方面的知识;如果你主攻Java,可能会问集合类区别、可研究过jdk源码、数据库等方面的知识。
因此面试的第一步就是让面试官明确知道你主攻的语言方向(可能也有较好的面试官会在提问之前首先问你懂Java还是C++),如果你两个方向都非常懂并且没有比较偏爱的方向,那就无所谓了。
一面:技术面(大概40 minutes)
半个小时没到,终于给我安排了个Java方向的面试官,这次交流非常愉快。下面的&面&代表面试官。
第一阶段:自我介绍
面:&请简单自我介绍下。我:&我是XX大学计算机专业的一名XX,我研究生期间的方向是XX,&&(方向简单描述)。12年暑期在XX公司实习了4个月,做的是XX(在一所不知名的本地小公司实习过)&&(其它重要项目的简述)。另外,自己是名开源积极分子,有,而且今年暑期参加了CSDN举办的开源夏令营活动,做的是&&
阶段总结:上面只是我自己当时的一个简单自我介绍,经验不足讲的比较乱,而且忘了讲自己十分热衷技术,平时喜欢写技术博客等事情(有些情况下可以加分呢)。建议大家都定制好自己的版本,讲出自己的亮点。
第二阶段:介绍研究生期间的论文项目,针对介绍提出几个相关的技术问题
面:&好,我看下简历。(然后对着我的简历看了十几秒,指着我的第一个项目)这是你刚说的研究生的论文项目吧(我嗯),那你把这个项目详细说下。我:&我从项目的选题(为啥要做这个方向)、项目采用的技术、新颖的地方、最终达到的效果(由于我做的是某个算法的性能提高,那么我就会讲速度提高了多少?空间压缩了多少?)这几个方面详细介绍了自己的项目。
下面就是针对我的叙述具体问了几个技术相关点,这没什么好说的,因为每个人做的项目不一样,问的东西也不一样。
阶段总结:其实要求讲的这个项目是用C++写的而不是Java,不过没关系,对于项目而言,语言就不是很重要了,关键是项目的架构、所采用的技术、能达到什么样的效果。面试官选的项目一般要么是简历中项目经验的第一个、要么是有他感兴趣的、要么项目做的时间比较长的,因此建议在写简历时,把你认为最有把握的项目放在第一位(而不是传说中的要按时间倒序来写项目经验),没太大把握的不要写(被抽问到就惨了)。只要你真真正正的吃透了被抽到的项目,那么这个项目提问阶段是完全easy的。
第三阶段:Java方向的知识,包括JVM原理、垃圾回收机制等
面:&你Java学的怎么样?我:&还可以,有研究过部分JDK源码,比如常用的集合类如HashMap/Hashtable、ArrayList/LinkedList、Vector等,还有Java5之后的并发包JUC如concurrentHashMap、Executor框架、CopyOnWrite容器等。自己很欣赏Java巧妙的垃圾回收机制,看过周志明的《深入理解Java虚拟机》,因此对JVM相关的知识有所掌握&&面:&嗯,学的挺深的,那你把JVM的结构和类加载原理说下。我:&马上拿起桌上的笔和纸,把虚拟机运行时包含的几个数据区和执行引擎画了下,包括方法区、虚拟机栈、本地方法栈、堆和程序计数器,然后介绍每个区域有什么作用,最后讲ClassLoader的类加载机制,还顺便说了下双亲委派机制。面:&(面试官点头表示满意)你刚刚说Java的GC机制很巧妙,那么它的巧妙之处在哪里?我:&我从两个方面说下自己的理解:一是Java的内存分配原理与C/C++不同,C/C++每次采用malloc或new申请内存时都要进行brk和mmap等系统调用,而系统调用发生在内核空间,每次都要中断进行切换,这需要一定的开销,而Java虚拟机是先一次性分配一块较大的空间,然后每次new时都在该空间上进行分配和释放,减少了系统调用的次数,节省了一定的开销,这有点类似于内存池的概念;二是有了这块空间过后,如何进行分配和回收就跟GC机制有关了,然后我详细介绍了GC原理、画图表示年轻代(Eden区和Survival区)、年老代、比例分配及为啥要这样分代回收(我认为巧妙就在于这里),有了GC基本结构后,我又详述了下GC是具体如何进行内存分配和垃圾回收的。面:&(面试官一直点头表示对我回答的赞同)嗯,看来你对这块的确掌握了,对了,你说你参加的CSDN开源夏令营项目是阿里的是吧(我点头),这个夏令营是什么情况?我:&我简单介绍了CSDN举办此次夏令营的目的,顺便说道此次夏令营活动当初有2000多人报名参加,最终只筛选出60多名,自己凭着开题报告和对开源的热爱赢得了导师的青睐得以入选。面:&你导师是谁?我:&淘宝的XX。面:&哦,他啊,我认识呢,他是&&(后面就简单闲聊了几句,该阶段结束,面试官让等会儿准备二面)
阶段总结:上面的对话有人看了过后可能会说:好简单啊,问的题目都是你会的,当然能过啦。是的,其实这是有技巧在里面的,就是要想办法&先下手为强&,啥意思?即让自己成为主动摊牌者而不是被动回答者,找机会跟面试官说自己熟练掌握了哪些方面的知识、自己喜欢专研什么等等,就像上面我所做的,一开始摊牌说明自己掌握的知识处在哪些地方,引导面试官去问你想让他问的知识点,这样达到双赢的目的(你爽了,面试官也轻松了,因为他不用老是猜你可能知道哪些东西然后试探性的问你这个会吗那个了解过吗)。
二面:技术面 + HR面(大概1 hour)
一面很轻松的就过了,但是二面就相对而言有些吃力,问的完全是项目相关,而且不是我最熟的研究生期间的论文项目,而是另外两个项目,由于复习不到位,某些地方回答的不完善。
第一阶段:自我介绍,同上
第二阶段:介绍面试官感兴趣的两个项目,一个与推荐系统相关,另一个与Java web相关
面:&介绍下你简历上的这个电影个性化推荐引擎,使用的是哪种推荐算法?我:&改进的基于用户的协同过滤推荐算法。面:&那好,那你从项目的基本架构、所使用的算法原理、如何改进的、数据如何处理这几个方面介绍下你的项目吧。我:&我首先画了下项目的架构图,据此图详细讲了下UserCF的原理及如何使用用户的社交数据和六维理论改进传统的UserCF,并写出了改进后的算法公式。然后又说这个项目的数据多大,代码中采用什么数据结构进行处理的。面:&(介绍原理中提到了利用用户相似性来作为推荐的一个参考,面试官追问)那用户的相似性你怎么算的?我:&(汗,这个有个计算公式,我不太记得了,最后根据自己的理解讲了下余弦相似性的计算方式,公式没写全,面试官问公式里的根号怎么算的,我说直接用Java的库函数)面:&你这数据哪来的?有几类数据?数据的存储格式是什么?我:&(该项目时间有点久了,前几天只复习了项目的整体架构和算法原理,忘了看具体的数据了,这里只能凭自己的记忆讲了下数据的存储格式,回来后发现自己讲的虽然没错但不够具体)
附:该电影个性化推荐引擎我早已经放到了上面,是自己在老师的指导下做的,纯算法,还比较简单有待于改进。
介绍完了这个项目,马上面试官又看中了另一个Java web相关的项目,马上追问。面:&嗯,你这个XX系统是用ssh2框架做的,那你对这个框架熟吗?我:&嗯,当时在公司实习时对ssh的掌握程度只是会使用级别,那时候没时间去研究框架背后的原理。后来有闲暇时间后,我就深入研究了下这几个框架的原理,还看了部分spring的源码,学到了不少知识。面:&嗯,那你把这三个框架都介绍下。我:&我开始按自己的理解按Hibernate、Struts、Spring的顺序开始讲,Hibernate讲到它的使用原理及与iBATIS的对比,顺便说了下现在似乎大家更倾向于使用iBATIS、myBATIS这样更加灵活的轻量级框架。struts讲了下它的作用就是&将请求与视图分开&,然后讲述从输入url到使用struts处理的控制流程(struts从tomcat那接管、action处理),然后也说struts现在似乎也不那么倾向于使用因为它有漏洞。最后重点讲了下重头戏Spring,详细讲述了它解耦的功能、AOP原理及自己有利用动态代理简单模拟实现过一个简单的AOP功能、IOC(DI)等。最后说,从web应用层面上看,Hibernate属于持久层,struts属于表示层,而Spring却贯穿所有于所有层(表示层、业务层、持久层),Spring也有自己的MVC模块、web模块及JDBC和DAO模块,只是很少使用,也就是只用一个Spring也是完全可以的。面:&(点头表示肯定)你刚说到struts有漏洞,那么Hibernate是安全的吗?有没有可能发生xss攻击和sql注入攻击?我:&(汗,这个问题真心没想过,对Hibernate的掌握没有Spring那么深,只能硬着头皮按自己的理解回答)这个问题没想过,不过我觉得框架没有绝对的安全,Hibernate是用来操作数据库的,hql语句里也有select、where判断,应该有可能发生sql注入攻击,xss攻击就不太清楚了。(这个回答太糟了)
面试官没说啥,一直在电脑上写着什么东西。这时候旁边的HR终于发话了。HR:&你本科是哪的?为什么选择考研?我:&开始说出我的&发家史&,从一所不知名的小二本考到了中科大,&&HR:&那你技术上是怎么学习的?我:&又从本科说起,本科技术很差,到了研究生期间才真正开始技术上的修炼,&&balabalaHR:&你的职业规划是什么?我:&&&(每个人的想法不一样)HR:&你最大的优势是什么?我:&(自己吹吧,也要根据实际情况看)&&
阶段总结:再次说明项目的重要性,第一个项目有些记忆模糊,答的有瑕疵,这里要引以为戒(一定要对项目知根知底),第二个项目感觉答的还可以,不过Hibernate安全问题没答出来,我觉得只要你其它问题答的很好,有个别问题答不出来是不会影响最终的offer的。HR面也很重要,你得说通了,需要提前考虑好常见问题的回答。
第三阶段:到你提问了
自由发挥阶段,可以问问公司内部的培养计划、晋升机制、是否经常有大牛分享技术让我们学习等等&&
(1)整个面试过程中没让写代码,没问Linux下的一些知识,也没问操作系统、计算机网络相关,我觉得可能是Java面试更倾向于从项目中问相关的技术问题,如果你没项目或项目不多,那么就可能问这些计算机基础知识了。
(2)由于之前内推电面的失败,让我丧失了一些小自信,因此在这次阿里的整体面试过程中还是有些紧张,大家请引以为戒,务必在面试中保持淡定的心态,就当是和朋友在一起交流技术问题。
(3)最后,希望我上面对话形式的面经能够给正在找工作或以后找工作的同学们带来一些借鉴意义,希望你们能够从中看出某些问题的答题技巧和所做的准备工作。
阅读(...) 评论()在java面试时,经常要求要有项目经验,如果没有相关经验,该怎么办?@微问
分数不要紧,找工有时也蛮不容易,今年我深有体会。
我今天去了40多家公司面试,不同公司要求是不同的,或者面试官不同。
12月份去中友的时候,面的不是三大框架,也不是数据库,而是一些http协议,例如一些底层的。问什么也得看你面试的职位,初级的话一般都有笔试。
中级java程式员,可能更偏向于面谈。
有项目经验也会有试题,一些基础的还是了解比较好,有时间下些java面试宝典之类的看看也好。 推荐《张孝祥java面试大全》,是word格式的,你百度搜索下,很多公司考基础时问来问...
你好,Java软件开发还是蛮好学的,只要你上过大学,专科生、本科生都是可以的,一般正常的教学周期是四个月的时间,而且是包就业的,平均薪资一般在5200元左右,希...
互联网产品策划或网络编辑这两个都需要有工作经验的,建议您现在开始先搞技术找个和编辑或者策划接触较多的职位,对公司先做了解然后慢慢进行内转
在这儿无法详细的告诉你,建议你去看视频。然后看一下书。也花不了多长时间。当然要对反射和过滤器要有所了解,这样理解容易一些
C语言当然出来很难找工作,因为现在用C的毕竟不多,但C语言是个很好的基础,你有这个基础,学JAVA肯定会很快,JAVA当然现在用得非常多,尤其是搞软件外包的公司...
H:\SoftWare\北大青鸟.rar: 06074A景峰组(公交查询)\db\AutoBus_Log.LDF CRC 失败。文件被破坏!
答: 软件测试和java哪个好
答: 这个要设计到JNI的开发,就是用Java来调用C语言的函数库,还要编写缓冲器来解决传输问题,还有就是网络协议一定要了解,做的时候要用多线程来控制你所有的缓冲器,...
答: 所谓的网络编程,不论c还是java,本质上都是通过socket进行数据传输;一般情况下可以使用的传输协议有tcp、udp、ftp等等,这些协议为网络变成提供基本...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区Java工程师面试时,一定要避开这些错误禁区!
Java工程师面试中的基本雷区相信大家都已经牢记于心了,但程序员不同于其他岗位,还有一些其他的注意事项,你必须注意了~~下面的老师在为大家提醒一下面试时不应该犯的错误。
1、只在电脑上练习
如果面试官要考核你的技术,很有可能会要求你在白板上写代码,而不是电脑上。所以,你就不能只在电脑上练习。电脑上的编译器会自动发现你的语法错误,但是白板不会。
拿出笔和纸来练习下如何写代码。如果你自我检查之后,觉得程序正确,再将它们输入到电脑里,看看是否和原先设想的一样。
2、不为可能提出的问题做准备
面试之前一定要为可能提出的问题做准备。问题可能涉及你曾经的项目,你遇到的不同问题以及如何解决这些难题。你的回答会影响面试官对你的技术能力的印象。
在面试之前先好好回顾自己做过的项目,将自己的主要事迹整理一下。
3、不做模拟面试
原因显而易见。我们最好能排练一下在面试的时候会问到哪些问题。还有,在正式面试时,虽然面试官会向你提问,但是同时,你也可以向他们提出问题,所以你要问哪些问题一定要事先准备好。
4、一味地背诵解决方案
如果你准备事先记住问题答案期待到时候能派上用场,那我劝你别瞎子点灯——白费蜡了。因为刚好抽到你背的那个答案的概率微乎其微。
相反,准备方案还需要花费你很多时间和精力。Remember,你现场发挥得越好,你本身的价值就越高。
5、说话声音小
一般而言,说话声音小会让人感觉你的思路不清晰。所以,有什么问题好好和面试官交流,这样才能显示你的思维过程,也有助于他们正确判断你所提出方案的价值,当然还有你的价值。
6、言行不经大脑
在回答问题之前先好好组织自己的语言。想到什么说什么只会暴露你粗心的缺点。言语要既有条理,又精确。至于行动上,就是写完代码之后要仔细检查。
7、不好的编码习惯
光凭一个无bug的解决方案,并不意味着你一定能做的很好。你还必须知道重复性代码、凌乱的数据结构、过度空格等情况。
要像是为实际应用般写代码。用逻辑思维设计数据结构、创建功能,并且确保布局安排符合选用的语言文化习惯。
在写完代码之后,我们一定要花点时间测试一下,以确保没有bug。这一过程也需要使用纸笔来练练手,不然面试的时候要你在白板上写的话你会没有安全感!
9、修复错误的时刻漫不经心
发现bug之后,我们最好先想想原因,然后再动手去做。不要寄希望于你换个布尔值或者在循环中随机改个标志就能解决问题。这样做,只能暴露你根本不知道你犯了什么错误,以及不够细致耐心地检查问题。
总有一些问题的确是超出我们能力范围的。面试官想看到的是你的态度,你是勇于面对挑战呢,还是一遇到问题就退缩。
介绍了这么多,相信大家心里面基本有数了,在面试的时候,就不会那么紧张了,在这里的老师预祝大家面试成功,高薪到手。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。作为一名做 Web 开发的 Java 工程师,算法在工作中基本不怎么用到,但为什么面试总会问算法的问题? - 知乎2156被浏览635455分享邀请回答29055 条评论分享收藏感谢收起22018 条评论分享收藏感谢收起查看更多回答6 个回答被折叠()}

我要回帖

更多关于 java开发工程师面试题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信