扎实的基础知识、高质量的代码、清晰的思路、优化代码的能力、优秀的综合能力是编程技术面试的五大要点。
找工作一直是一个热门话题。要想找到心仪的工作,难免需要经过多轮面试。编程面试是程序员面试过程中最为重要的一个环节。如果能在编程面试的环节充分展示自己的能力,那么拿到中意的 Offer 就是水到渠成的事情。
我先后在欧特克、微软和思科等公司任软件工程师,多次接受他人的面试,同时也面试过很多人。总结面试与被面试的经验,我发现尽管面试官的背景、性格各不相同,但都关注应聘者五种素质:扎实的基础知识;能写高质量的代码;分析问题时思路清晰;能优化时间效率和空间效率;具备包括学习能力、沟通能力、发散思维能力等在内的综合能力。
扎实的基础知识
扎实的基本功是成为优秀程序员的前提条件,因此面试官首要关注应聘者的素质即是否具备扎实的基础。通常基本功在编程面试环节体现在两个方面:一是编程语言,二是数据结构和算法。
每个程序员至少要熟练掌握1~2门编程语言。面试官从应聘者在面试过程中写的代码以及跟进的提问中,能看出他编程语言掌握的熟练程度。以大部分公司面试要求的 C++ 为例,如果函数 ...
gzdd
未读我一直认为,工程师,尤其是一线的,是最接近真相的人,也是最懂业务的人,应该有充分自由去实现自己想做的事情,去改造存在问题的项目,去颠覆陈旧的观念,可惜中国的土壤不好,公司的文化和观念也不是一天能改过来的,如果你能有机会去硅谷,那恭喜你,工程师在那里的地位是最高的。
本来想写招聘广告的,结果谈工程师就花了大把的篇幅,算了,就索性换了一个标题,讨论一下工程师的价值和发展。
我一直认为,工程师,尤其是一线的,是最接近真相的人,也是最懂业务的人,应该有充分自由去实现自己想做的事情,去改造存在问题的项目,去颠覆陈旧的观念,可惜中国的土壤不好,公司的文化和观念也不是一天能改过来的,如果你能有机会去硅谷,那恭喜你,工程师在那里的地位是最高的,有像Facebook一样的工程师驱动的文化,有自由的空间和足够大的舞台。但在中国,作为工程师,想改变大环境很困难,那么只能改变自己,自己寻求更高的价值和更好的发展。
我经常跟朋友说,一个工程师的价值取决于两个方面:
一是你的内功,即综合能力、技术水平、思考力等等自己本身的素质,内功的价值如果有一个标尺的话一 ...
如何正确使用NIO来构架网络服务器一直是最近思考的一个问题,于是乎分析了一下Jetty、Tomcat和Mina有关NIO的源码,发现大伙都基于类似的方式,我感觉这应该算是NIO构架网络服务器的经典模式,并基于这种模式写了个小小网络服务器,压力测试了一下,效果还不错。废话不多说,先看看三者是如何使用NIO的。
Jetty Connector的实现
先看看有关类图:
其中:
SelectChannelConnector负责组装各组件
SelectSet负责侦听客户端请求
SelectChannelEndPoint负责IO的读和写
HttpConnection负责逻辑处理
在整个服务端处理请求的过程可以分为三个阶段,时序图如下所示:
阶段一:监听并建立连接
这一过程主要是启动一个线程负责accept新连接,监听到后分配给相应的SelectSet,分配的策略就是轮询。
阶段二:监听客户端的请求
这一过程主要是启动多个线程(线程数一般为服务器CPU的个数),让SelectSet监听所管辖的channel队列,每个SelectSet维护一个Selector,这个Selector监听队列里所有 ...
摘要:面试也是一门学问,在面试之前做好充分的准备则是成功的必须条件,而程序员在代码面试时,常会遇到编写算法的相关问题,比如排序、二叉树遍历等等。
在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让程序员编写一些算法实例,例如快速排序、二叉树查找等等。
这篇文章总结了编码采访中的常见主题,包括_1)字符串/数组/矩阵,2)链表,3)树,4)堆,5)图,6)排序,7)动态编程,8)位操作, 9)组合和排列,以及10)数学。_将问题归为一类总是不容易的,因为问题可能属于多个类别。
更新列表可在此处获得。您可以下载PDF版本
1.字符串/数组
算法问题的输入通常是字符串或数组。在没有自动完成任何IDE的情况下,应记住以下方法。
123456789101112toCharArray() //get char array of a StringcharAt(int x) //get a char at the specific indexlength() //string lengthlength //array size substri ...
gzdd
未读前段时间因为实习生计划花了很多时间做了实习生招聘的工作,产生的一些想法,写在这里。
这次招聘过程中,我发现我们在校的学生有下面的这些特点:
1)NB的项目。 当说到自己做过的项目时, 我发现他们做的事都是很NB。要么是研究Linux的底层内核,要么是图像识别处理,要么是推荐算法,要么做高性能计算,要么做数据挖掘,要么是移动方面的协议,还有一些很高深的课题我听不太懂的项目。这让我想起当年我在学校里的实习,对比起我用Java Applet 和 HTML做操作系统的教学课件,或是在公司里用Delphi/PowerBuilder做的那些MIS系统。让我觉得有些汗颜。
2)OK的解决问题能力。 当问到算法题时,我发现他们的问题解决能力还OK。我一般问1到2个中低难度的算法题和1个基本的面向对象设计的题,都不难。我相信只要在学校里好好学习的人都应该答得出来。无非就是一些基本的算法和基本数据结构操作的问题,和比较基础的面向对象设计的题,说白了就是作业题。可惜的是,只有5%不到的同学能够在不给提示的情况下答出来,70%的人可以在给一定的提示下答出来,15%左右的同学需要提示到几乎给出答案才能 ...
人生思绪
未读 如果说掌握一门赖以生计的技术是技术人员要学会的第一课的话, 那么, 我觉得, 技术人员要真正学会的第二课,不是技术,而是业务、交流与协作,学会关心其他工作伙伴的工作情况和进展。
为什么这么说呢? 因为技术人员太容易陷入“孤岛”状态,更注重自己的工作任务的完成,忽视其他工作伙伴的工作,甚至一无所知。 我就一直犯这样的错误。我敢说,对内心我还是比较明白清楚的,但是对外面所发生的事情实在是知之甚少,这不是好的状态。 一个开明、开放的程序员不应该囿于自己狭隘的小天地,而是更广阔地去看待工作和职业,和同伴一起进步和成功。
为什么要关心业务?
很多技术人员都立志成为系统架构师, 那是编程领域的“圣杯级职业”。问题是, 系统架构本身是为了业务需求和扩展而服务的,必须充分理解业务需求和未来的发展趋势,深入理解系统所涉及的数据及分布, 才能作出更可靠的设计决策。如果对业务知之甚少,以为仅靠书上说的那一套,或者以前的零碎经验,就能够胜任的话,那这个项目多半要失败的。 因此,即使立志要成为系统架构师,也要对业务有很深的理解。
其次, 技术的发挥必须有用武之地。如果没有足够强度和有 ...
简介本文描述如何使用 IBM DB2 Universal Database Version (Unix & Windows) 中提供的新函数轻松地将数据加密集成到数据库应用程序中。多年来,数据库已经能够阻止未经授权的人看到其中的数据,这通常是通过数据库管理器中的特权和权限来实现的。在当前的环境下,对存储数据的保密的需求日益增长。这意味着即使 DBA 对表中的数据有完全的访问权限,但是表中可能还有数据拥有者不希望任何其他人看到的某些信息。特别是对于基于 Web 的应用程序,这一问题就更加明显了,在这种应用程序中,用户输入的数据(比如信用卡号)需要保存起来,以备同一用户以后使用该应用程序。同时,用户拥有者希望能够确保任何其他人不能访问这种数据。
为了实现这种功能,DB2 内置了一些 SQL 函数,这些函数允许应用程序加密和解密数据。当将数据插入到数据库中时,可以使用用户提供的加密密码对其加密。当检索该数据的时候,必须提供相同的密码才能解密数据。对于要多次使用同一个密码的情况,可以使用一个赋值语句设置 ENCRYPTION PASSWORD 值,并令其在某次连接期间内有效。
本文将描 ...
还记得在您的第一台科学计算器上用逆波兰表示法奋斗的经历吗?W3Eval applet 无法让您可信赖的 HP-41 更易用,正如它的名称所暗示 ― 一个只能运行于 Web 的表达式求值程序。但它的确提供了一种方法 ― 人类更易于遵循的对表达式一步一步的求值。
W3Eval 的方法与传统计算器不同,却和人类的计算方式一致。当您用传统的计算器计算时,每输入一个新数,前一个数就看不到了。如果在输入一个长表达式中出了错,就得全部重来。有了 W3Eval,您就能看到参与计算的所有东西,还能轻松的编辑表达式。它独特的能力(一步一步的对表达式求值)非常容易实现,因为用户能看到求值的每一步,包括临时结果。
本文将让您从头至尾认识 W3Eval 功能性的要点;您将看到一些用于表达式求值的代码。不过,我们还是先看看表达式求值的经典算法,这样您就会明白 W3Eval 方法的差异究竟有多少。
表达式求值的经典算法编写代码对算术表达式求值的经典方法由 Donald Knuth 描述于 1962 年(请参阅 参考资料)。Knuth 将此概括为三个步骤:
对中缀表达式进行语法分析
中缀表达式到后缀表达式的转换
对 ...
我投资的两家公司的 CEO 性格迥异(在此权用 A 和 B 代替他们的姓名)。 A 有着近乎完美的资深职业经理人形象,他热忱外向,和蔼可亲,我从没见过他和任何人发生争执,认识他的人都喜欢他。每次董事会之前,他都会请董事们吃一顿可口的晚餐;他访问我上海的办公室时会给我的助理小姐带旧金山特产的巧克力。
B 则恰恰相反,他穿着随意,初次和他接触的人往往会觉得他内向而冷淡,说话极少寒暄,总是直入主题,有些人很不喜欢 B。和 B 聊天是很累的,因为常找不到共同的话题,间或被难堪的沉默所打断。B 有时显得固执,常和董事会发生争论。在 B 的公司开董事会总是吃盒饭工作餐,他也从不送任何人小礼物。
A 和 B 的业绩也是天壤之别的。在 A 领导公司的约三年里,该公司总计亏损一亿多美元,市值跌掉约 96%,A 最终被董事会炒鱿鱼。而 B 则在约四年里将其公司扭亏为盈,创造了一亿多美元的价值,最终成功卖掉。
怎么会出现这种奇怪的现象?难道不是大家都更喜欢 A ?难道 A 的缺点错误不是比 B 更少?难道 A 不 ...
“良言一句三冬暖,恶语伤人六月寒。”曾经有一篇十二句话的小文章——《说话的艺术》,受到很多人的推崇,有的人把它发到自己的博客上,有的物业公司把它作为温馨提示贴在电梯里,这已经成为不少人讲话时的艺术指南。
急事,慢慢地说。遇到急事,如果能沉下心思考,然后不急不躁地把事情说清楚,会给听者留下稳重、不冲动的印象,从而增加他人对你的信任度。
小事,幽默地说。尤其是一些善意的提醒,用句玩笑话讲出来,就不会让听者感觉生硬,他们不但会欣然接受你的提醒,还会增强彼此的亲密感。
没把握的事,谨慎地说。对那些自己没有把握的事情,如果你不说,别人会觉得你虚伪;如果你能措辞严谨地说出来,会让人感到你是个值得信任的人。
没发生的事,不要胡说。人们最讨厌无事生非的人,如果你从来不随便臆测或胡说没有的事,会让人觉得你为人成熟、有修养,是个做事认真、有责任感的人。
做不到的事,别乱说。俗话说“没有金刚钻,别揽瓷器活” ...