算法和数据结构都是锦上添花,并非是雪中送炭。而一个程序员的水准大致上是可以通过之前的代码质量估算出来的。【如果你可以获得此程序员的真实编写的代码,比如原创的Github】。
举个栗子:下面是我最近在单位一个同事写的代码,Java语言
private boolean checkProportions(String str, Integer grades) {
String proportion = str
for (int i = 1i <gradesi++) {
String st = proportion.substring(proportion.lastIndexOf(",") + 1)
if (st.equals(""))
return false
proportion = proportion.substring(0, proportion.lastIndexOf(","))
}
if (proportion.equals(""))
return false
str = str.replace(".", "")
str = str.replace(",", "")
for (int i = str.length()--i >= 0) {
int chr = str.charAt(i)
if (chr <48 || chr >57)
return false
}
return true
}
大致上的功能就是将 1,2,6.2,4,1 的字符串判断每一 ‘,’内是数字,而且长度符合规定
这样的代码看上第一眼就觉得非常的丑陋。所以在我的要求之下,进行了一次重构。
private static boolean checkProportions(String str, int grades) {
String[] proportions = str.split(",")
if (proportions.length != grades) {
return false
}
for (String s : proportions) {
if (!NumberUtils.isNumber(s)) {
return false
}
}
return true
}
这里看上去差不多就Ok。这样的代码其实也并没有用到什么数据结构和算法,就是很简单的字符串处理。
实际情况:在我们写的绝大多数的代码里面,大部分属于业盯瞎务逻辑,极少部分的代码需要使用到算法和数据结构侍卜,在这样的情况下,我们能使用的到的技能最为关键的是让代码如何更加合理。而让代码更加优凯谈空秀的方式是通过千锤百炼的重构,而重构是极大的考验一个程序员耐心和能力的东西。
质量的范围广泛,我从下面几个小方面聊聊。
出货能力:如果一个程序,算法再精妙,不能出货都是扯淡,我看过某某大神,算法溜得很,但是一个人完全做不到按照工程需要把事情给做完。
优化能力:并没有一个程序是一步到位的,一个工程的交出去可运行了,那才是第一步,很多时候随着业务的增大,对性能的要求越来越高,有一定对于代码优化的能力也是比较重要的。
调错能力:项目越大,遇见的Bug也就是越离奇,这个时候需要强大的Debug能力,找出那个最为关键的错误点,甚至于追溯底层框架的源码。
技术掌控:你项目能用Spring,Hibernate等等框架,但是有没有想过,这些技术你真的可以掌控么,如果有一天你的框架版本需要升级,真的做得到么?甚至于从Hibernate转为MyBatis。
算法和数据结构是影响到一些核心区的问题,但是其他的一些技能,比如面向对象的架构设计,代码的低耦合,那都是对整个项目有着直观改善的技能。并非是贬低算法,而在实际工作中,有太多比算法更重要的问题了。
考察基本功,可能对 *** 作核镇系统,语言,编译链接器,内存,进线程,网络,存储,图形学都要有深刻理解,也很考验逻辑推铅销理能力,在一堆证据中构建合理的证据链推导出最终结果,懂得大胆假设小心求证的工作方法,也考察耐心和毅力,有的问题需要构建复杂的测试场景,还要反复多次测试才能重现,考察沟通能力,复杂的bug可能涉及多个部门开槐氏游发组,可能还要对最终用户做访谈。虽然现在很多科技公司已经取消了主力程序员的面试题,但是不少公司并没有取消初级程序员的笔试题,因为笔试题能够考察出一个初级程序员的知识结构,对于项目经验比较少甚至是没有项目经验的初级程序员来说,笔试是公司考察一个初级程序员能力的基本依据。所以,很多笔试成绩是初级程序员进入下一个环节的重要基础。
对于初级程序员来说,笔试都考察什么知识呢?其实大部分笔试的考试内容都是非常基础的内容,比如Java初级程序员的笔试题往往就是考察对Java基础概念的理解是否清晰,是否掌握基本的语法,能否建立起面向对象的编程思维等等,亮祥镇看一个简单的题目:
这个程序在语法上有没有问题呢?这个题目考察的是Java程序员对“接口可以多扩展”这个概念的掌握,这个程序是没有语法问题的。再看一个例子:
这个例子输出的结果是多少呢?输出的结果是322,这个例子考察的是对集合概念的理解,尤其是对Set应用的理解。再看一个例子:
这个例子的运行结果是什么呢?答案是程序在运行中会抛出敬粗异常,这个例子考察的是对TreeSet概念的掌握。再看一个例子:
这个例子考察的是对内部类的理解,包括静态内部类,要想完成这个例宴散子需要了解三方面知识,第一是内部类,第二是static内部类,第三是多态,这个程序是无法编译通过的,原因在于创建static内部类对象的过程不能采用基于外部类对象创建的方式。
通过以上四个例子我们会发现,其实这些题目并不复杂,但是却非常考验初级程序员对基础概念的掌握情况,如果对基础概念掌握的比较清晰就很容易能够完成,如果掌握的不够全面,那么这些看似简单的题目也无法完成。所以说,在参加笔试之前,一定要把这些基本的概念搞清楚。
最后给大家留一道题,看看你能不能回答出正确的答案(开启和不开启断言两种情况分别描述):
大家在评论区写出你的答案和理由吧。
我使用Java语言多年,我在头条上也写了关于学习Java的系列文章,想学习Java的朋友可以关注我,相信一定会有所收获。
如果有Java开发方面的问题,也可以咨询我。
谢谢!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)