java程序员新手一般面试什么问题 知乎

java程序员新手一般面试什么问题 知乎,第1张

跟你遇到的面试官有很大的关系。

下面我总结了几种一般会被问到的问题:

1、简单描述一下Log4J?

2、简单描述JavaBean的特点?

3、Hibernate在MVC模式中处于哪里?且它主要完成什么工作?

4、列举Hibernate中常见的几种主键产生方法,并做简要说明?

5、简单说说HQL与SQL的异同,试着写个例子?

6、Hibernate 运行时需要获取一些底层实现的基本信息,其中几个关键属性包括哪些?

7、利用Hibernate *** 作数据库,主要有哪几个步骤?

8、Hibernate中调用Session.flush()的目的是什么,什么时候调用,什么时候不用调用?

9、简单描述SessionFactory 与Sesson;

10、描述一下Hibernate,MySQL,Oracle 分别用什么方法来实现查询制定条记录

如{从检索结果中获取第x条记录开始的y条记录}(简单分页)?

11、Hibernate对数据库进行增、删,改,查所对应的方法是?

12、简单描述Hibernate持久化对象的3种状态?

最近在知乎看到一个很意思的问题,“ 程序员的悲哀是什么?

很多人会以为程序员 脱发、加班、压力大、上班摸鱼 ”等标签是悲哀,而实际上这只是大众对此的刻板映像,并不是程序员真正的悲哀

毕竟这些标签在其他行业也都是普遍存在的,只是对于程序员群体来说,这些标签被互联网放大了所以显得格外的悲哀

但实际上的程序员的悲哀却来自我们程序员这个群体的内在通病

只关注技术的实现,不关注业务逻辑

大部分程序员在学习技术的时候,只会在乎技术的实现,而不去考虑更多的业务逻辑

经常出现的画面就是:

也正因为如此有了产品经理这个冤家,国外的产品经理更多的是对于商业业务的推进,而国内的产品经理更多的是对于产品细节的把控

因此,程序员的发挥能力进一步被局限,工作日常就是等着产品和设计给出流程图,按照图纸去步步执行

这样不仅禁锢了自己对业务的思考和成长,而且等项目做砸了,第一个背锅的可能就是程序员

只关注技术的分享,不关注商业逻辑

开源精神是程序员所推崇的,各个项目托管网站、学习资料、视频的分享造就了一大帮跨行进入互联网的程序员

要是没有现在那么多开源的技术,估计市场上有一大半的程序员得下岗

但是也正因为程序员的开源精神,造成了大量的人才涌入,毕竟环化材生只需要拿出发一篇SCI的精力,就能成为个初级程序员,加入程序员的面试大军

造成的结果就是初级人才越来越多,越来越内卷,最后35岁提前退休,卷王脱颖而出

让一个看起来高技术的职业人才通通成为了前期英雄,只要到第二年校招,就会发现自己很大概率被倒挂了

以为职业发展都是线性增长

温水煮青蛙在各个行业可能都有,但是别的行业可能是温水慢慢的蒸,但对于程序员这个行业水温还没上去来着,就有人拿着网兜把带走了

一行曾经见过,做项目前老板发奖金鼓励你把技术完成,但是项目完成上线后,为了节约成本就开了大部分程序员,留下少量的员工来进行维护

作为前期英雄的程序员,年轻点还好,赶紧去找下一份工作,但是年纪大了一点就难受了

这就是因为很多人按照惯性认为程序员的职业发展是线性模型,以后会越来越好,但很大情况下对于程序员来说职业发展是抛物线的,先增长后下降

如果没有预案准备,未来将会非常难受,当然做到一半提前转岗的不在此列

与其温水煮青蛙,不如主动的规划未来,那具体怎么做呢?

就算说程序员35岁退休,那也是针对初级程序员,技术专家的生命周期要长的多

毕竟工资增长靠工龄是不可持续的,能持续支撑工资增长的就是技术的不断精进了

不仅懂技术,而且还得更深层次的底层逻辑,才能再日常核心问题上发挥出自己的价值,这样就算优化也很难优化到自己身上

一直在技术圈子里很容易形成信息茧房,就像现在的各类算法推荐的流媒体,只推荐你感兴趣的内容,对你有帮助但不感兴趣的内容却离你越来越远了

同时跟电脑打交道久了,就更不想跟人进行交流了,越陷在信息茧房之中

所以还得多离开你的电脑桌,与人交流

只有不断的迈开腿,张开嘴,你将会发现,未来很多机会都是在与人交流中的碰撞摩擦出来的

为什么转行做程序员?那还不是因为工资高嘛

如果要提前规划未来的话,最好还是多尝试去了解兼职和副业,知道钱除了从工资里来,还能怎么来

至少赚1块钱也是好的,因为很多个项目都是从1块钱开始,然后不断滚雪球变大

只有副业开始不断有收益,那什么35岁危机、提前退休等危机全都不用考虑

程序员悲哀也都将会烟消云散了

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

安装 Python 环境

工欲善其事必先利其器。学习Python常用的开发软件也都整理在这了,给大家节省了很多时间。

光学理论是没用的,要学会跟着一起敲,要动手实 *** ,才能将自己的所学运用到实际当中去。如果你不知道你该做什么,可以查看下面的实战案例。

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要资料的小伙伴请私信我哦!

每个行业都有悲哀,虽然程序员的悲哀被放大了,但仍然是最有潜力的岗位

无论未来转岗、还是创业,技术能力都会成为buff为自己服务

加油,打工人~

1. 简历看人

阅读简历永远是面试的第一步。好的简历一定是正确、清晰并且能够体现候选人最有价值一面的。我首先会过滤掉那些包含错别字,文句不通或没有逻辑性的简历,因为如果一个程序员连自己的简历都不愿意去仔细检查并完善的话,很难想象他写出来的代码质量会如何。接着,我便会重点阅读简历中的项目经验部分,在这里我能够看到面试者的开发经验,技能栈,并且判断他们熟悉的技术框架、工具是否与目前公司要求相匹配。

这里,我还会特别关注面试者是如何来写这部分项目经验的,你需要用尽可能简练的文字来描述项目的背景,你在项目中承担的角色、参与项目的时长,你用到的技术、以及你在项目中的亮点等信息。优秀的程序员们往往有一个共同的特质,那就是善于归纳,并能够一针见血的发现问题或把一个问题说清楚。我经常看到面试者在简历中像写故事一般地描述他们的项目经历,光这一个章节就有好几页,其实这反而会给你减分,因为这会让面试官判断你缺乏必要的归纳能力。

最后你的一些与编程有关的社会化活动,如:你在GitHub上的开源项目,在知乎、V2EX中给他人的解答以及你的个人技术博客等等都会给你加分,因为这说明你对所从事的工作有着极大的热情,并愿意在业余时间去学习和提高自己,就像在我之前的 “给职场新人的10点职业建议” 一文中提到的,如果你要成为一个领域的专家,那你必须花费超过10,000小时,而这光靠工作时间是远远不够的。

2. 给面试者10分钟介绍自己最擅长的

当面试者通过了笔试和HR面试之后,你就需要面对面地对候选人进行面试。我远不是什么面试专家,但我有一些自己的独特方法。我讨厌问一些很个人的问题,比如你的职业规划是什么?你为什么想换工作?等等。我更愿意给面试者10分钟时间,让他介绍自己最擅长和最感兴趣的领域。这往往能帮助我很快作出下面的判断:

这个人对他所做的事情是否充满激情

他们是否能在团队中很有效地进行沟通

他们是否在专业领域足够擅长

你的团队是否会乐于和这个人一起工作

这一招我在面试中用得很多,而实践证明也确实非常有效。

3. 基础打牢了吗?

一般,有一定规模的公司都会为面试者安排机考或笔试,从而能首先筛掉一批未能通过的面试者。另一些规模较小的或初创公司则会让面试官直接进行技术面试。其实,我觉得这两者的差别不大,有经验的面试官往往能够通过几个最简单的技术问题,判断出面试者的技术基础是否牢固,这不是为了证明他有多优秀,而是用来判断他是否是一名合格的程序员。对于我来说,并不看重机考的成绩,因为机试的考题很多能够在网上得到,特别对于一些外包公司,他们总是能够通过各种途径得到考题,从而使得他们推送的外包能够顺利通过笔试。

下面是我经常会问的几个问题(JAVA):

HashTable与HashMap有什么区别?

Servlet是线程安全的吗?

JSP中 @include跟jsp:include的区别

HTTP的response code 403和500分别代表什么

......

这些问题都很简单,但一些基础不牢的程序员往往会在这个时候露馅。当然,根据面试岗位的不同,你还可以有针对性地问一些问题,例如,你需要找一个能写核心算法的程序员(比如 银行的总账计算,或者保险公司的保费计算),那么你可以问一些算法相关的问题。

4. 技术深度够吗?

具备牢固的技术基础,一般就可以满足项目中普通程序员的要求了,但如果你需要找的是一个资深程序员,那么你还需要对面试者的技术深度进行考察。我们现在做项目时都会大量使用框架,这能使我们的开发效率和质量都得到提升和保障,但同时也降低了对于程序员开发技能的要求。因此我一般会询问面试者下面的问题,来考察他对所使用框架的掌握程度。

请你描述一下,在这个项目中,从一个HTTP请求发起,到最终的Response返回,它在你的系统和框架内部是如何流转的?

这个问题往往能够判断出面试者对于相关技术掌握的深度。较初级的开发人员描述的层级往往比较浅,比如使用Spring MVC框架的,只能说到实现一个Controller继承BaseCommandController(甚至很多开发人员只知道继承了一个公司内部框架的基类),至于再往下Spring框架是如何进行内部流转的,就再也说不清楚了。而更资深的开发人员,往往能说出框架内部的实现机制,以及如何调用和处理的。在面试者描述的过程中,你还可以穿插询问一些比较有深度的问题,比如框架中某个类这样设计是哪一种设计模式的体现,采用这样的设计有什么好处等等。这比让面试者默写一个设计模式代码要有效、自然得多。

除了技术层面上的考察之外,对于资深开发人员,还需要考察他们的设计能力。说到软件设计,大部分面试者都能熟练地背出面向对象的三个基本特性:继承、封装、多态,也能把它们的概念描述清楚。但我一般会问下面的这个问题来考察他们的面向对象设计能力。

请用一段程序代码描述我们所在的这间房间。

我惊讶地发现至少有一半的面试者都很难准确使用Interface和Class来给房间建模,也有一些人会将最基本的代码语法或关键字写错。

5. 选择适合所在企业文化的人

这一点也曾是我经历的一个误区,我总是希望能为团队招到技术能力最强的人,而忽略了他是否与整个公司和团队的文化相匹配。这往往会造成,虽然招到了人,但没过多久就因为理念不同不欢而散的结果,反而给公司带来了损失。让我们看看GitHub的负责人是怎么说的。

我们很严肃地看待我们自己关于招聘流程的哲学。我们希望每一个GitHub员工都了解他们所要面对的环境,并保证他们是能够很好适应的。这包括我们所创造的文化、哲学、计划、错误甚至是晚餐。比起他们的技能是否满足要求,我们更看重他们的潜力以及是否能够适应我们的企业文化。

我曾在具有鲜明文化差异的不同公司或团队工作,看到许多崇尚开放、开源的程序员在一个相对封闭,具有很多流程以及规范限制的公司中很难发挥,最终选择离开。因此在招聘程序员时,选择合适的往往比选择最优秀的更重要。

6. 行为面试法

行为面试法可能是我在整个面试过程中唯一用到的教科书面试方法。一个程序员是否能够很好地工作,不仅取决于他能否顺利地完成开发任务,更重要的是在遇到一些特殊场景或问题时,他能否合理有效地处理和解决。行为面试法能够帮助我们从面试者描述的过去某一具体事件中,预测未来他在工作中可能的表现。下面便是一个我经常用到的问题。

请谈谈你在这个项目中遇到的最大困难或挑战是什么,你是如何解决的。

从面试者对上面这个问题的回答中,我能够很好地判断他是否有较强的独立解决问题的能力,而我认为这是除技术能力之外,程序员最应具备的能力。

7. 给他们一个虚拟任务

经过上面的这些环节,你可能对面试者的整体情况已经比较满意,但先别急着下结论。我曾见过能够顺利通过上面所有面试步骤,并且被雇佣的程序员,当他们进入实际工作后却没能把事情做好。

在你确定是否录用他们之前,可以给他们一个虚拟任务。我不是说一个抽象的程序问题,而是指一个真实的,可能就存在于你当前项目中,并且需要在一两个小时之内完成的一个开发任务。我曾经出过这样的考题:

写一个小程序将一个以特定格式(如CSV)存储的文本文件转换为XML格式,并存储为另一个文件。

你可以给他一台已经配置好开发环境以及IDE的电脑,让他当场编写代码。当然如果时间有限,你也可以直接询问面试者的实现思路,并简单用伪代码来描述处理过程。通过这个测试,你能够看到很多细节,比如面试者是否有良好的编码习惯,异常处理是否规范,代码逻辑是否缜密高效,以及他的开发效率是否足够高。如果面试者给出了非常优秀的解答,那么你就应该能够判断他确实是一个优秀的候选人了,因为我从没碰到过能够通过上面的测试,却在实际工作中无法做好的人。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11255706.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存