我刚好有个检验程序员水平的绝佳题目,建议收藏。

阶段一:基本数据类型

①考察内容

没有条件控制,没有循环,单纯的按从上到下的顺序执行代码,例如数学计算,取模等问题。

②检验题目

1.A + B 问题

2.反转一个3位整数

3.计算圆周长和面积

4.巴什博奕

如果他连这种题都做不出来:


或者,你也可以把他介绍到你竞争对手的公司。

阶段二:判断语句

①考察类型

主要考察选择结构,没有循环,有if,else if,else等判断语句,例如判断闰年等问题

②测试题目

5.判断数字与字母字符

6.闰年

7.大小写转换

8.月份天数

9.简单计算器

10.三数之中的最大值

不过,就算做到了bug free,如果他写了一排又一排的if,可能你也要小心了……

毕竟贵司的代码屎山肯定有他的一半功劳。

比如

if i=1 
if i =2 
if i=3 
… 
if i=12 
(有几个写几个) 

阶段三:数组与循环

①考察内容

主要考察数组、循环语句,以while、for循环为代码主体的题,不要出现字符串,如数组求和等问题。

②测试题目

11.打印X

12.数组的最大值

13.生成给定大小的数组

14.移动零

15.寻找最大值

16.交换数组两个元素

17.Fizz buzz问题

18.冰雹猜想

19.加一

20.回文数II

21.整数排序

22.寻找素数

23.数组第二大数

24.主元素

25.杨辉三角

26.旋转数组

27.回文数II

28.分解质因数

29.反转字符串中的单词

30.数组剔除元素后的乘积

到这一步,或许你可以稍微松口气。虽然这个程序员可能还是有点蠢,但起码不至于把你气哭

如果你不幸成为做不出这些题的程序员之一也别着急,现在恶补正是最好的时候:

PS:如果纯自学的话,建议报个培训班或者网上查一些培训机构的视频。

看书应该是入门以后的事情了,而视频或报班才是入门的最佳途径。

推荐学习资料

《Head first Java》:算是业界大名鼎鼎的Java入门书了,我认为这本书不局限于语言,只要对编程感兴趣的同学都可以从这本书翻起,建立起对编程的初步认识,轻松的开始入门学习(无需看完全书)。

《算法基础班Java +Python》:口碑非常不错的编程入门基础课程,会从编程入门知识开始讲起,并手把手带学员coding,理论知识和实践练习两把抓,体验了免费试听课程就入坑了,老师讲得非常细致,感兴趣的朋友不妨去试试。

《codecademy》:这也是我很喜欢的一个编程自学网站了,比较有特色的的是它按照语言对编程学习进行了分类,难度适中,页面也很简约,缺点是全英文界面,对于英语基础不好的同学来说,学起来会有点吃力。

如果自认为自己的编程能力还算过关,但还想不断精进自己的编程能力和各项能力,给大家这几个方向:

①算法精进

程序员的生命在于“技术”,而coding则是不可或缺的一环。

如果自己的编程能力已经脱离了“差”的水平,也可以往这个方向继续进阶。

我个人比较推荐用LintCode进行学习。主要是刷OJ,通过刷题来提升自己写代码的能力。毕竟在实际工作中能接触到的编程往往比较局限,之后跳槽很容易卡壳。刷一些LintCode上的企业真题来锻炼思维能力还是非常不错的。


此外,像是acm金牌选手令狐冲主讲的九章算法班、国外的coursera也都还不错。在九章算法班Get的代码质量的5个衡量标准,茅塞顿开,简单分享给大家:

• Bug Free

• 好的代码风格(Coding Style),包括变量名命名规范有意义,合理的使用空格,善用空行

• 容易让人读懂的逻辑。要把复杂的事情用简单的方式,别把简单的事情写复杂了。

• 没有冗余代码

• 有边界检测和异常处理

感兴趣的话,你们也可以去免费试听下前三节课程。

②项目深挖

国内HR真的很喜欢揪着一个项目深挖,个人建议做2~3个有含金量的项目就够了。除了把项目做完,还要把原理搞明白、适时延伸,才不会被HR考倒。

首推GitHub,Github大法好啊!跟着大佬做项目绝不会吃亏,筛选自己需要的项目类型就行。

推荐几门我上过的项目课

电商秒杀系统 – Spring项目实战:跟高并发、秒杀、电商打交道的朋友可以体验下。课程是由阿里架构师讲解,解决高并发相关问题。

Twitter 后端系统 – Django 项目实战:由FB架构师讲解,带你从零设计Twitter,做出一个工业化的可上线的产品,而不是简单做个demo。

Stanford的公开课项目:其出产的公开课质量,水准都很高。目前Stanford大部分的cs课都有了coursera上的mooc版本(像ML,编译器,密码学)。

③系统架构能力

不想做架构师的程序员不是好程序员。而在面试中遇到系统设计的相关问题,可以参考下列原则:

1.主动解释tradeoff

给出一个解决方案时,最好主动说出tradeoff,比如你考虑到什么问题于是采用什么技术,这些权衡方面的东西提出来会非常加分。

2.切勿盲目罗列关键词

很多面试者为了展现自己的能力会频繁使用Load Balancer, Memcache,NodeJS等关键词。但这种做法很有可能降低面试官的好感度。

3.主动提出测试

在讨论部分主动提到失败检测,比如这个系统可能会出现哪些failure的情况,比如message丢失等,如果能够提出修复方法基本就稳了。

更多的系统设计面试干货,可以去体验下《系统架构设计 2021版》。

其他的,我认为更多的是在工作中不断学习和成长,保持着一颗进取的心。

相信总有一天,生活一定一定会回馈你的努力。

文章来源于互联网:一个程序员的水平能差到什么程度?

发表评论