为了账号安全,请及时绑定邮箱和手机立即绑定
慕课专栏

目录

索引目录

Java小白踩坑录

原价 ¥ 29.90

立即订阅
故事二:初级、中级和高级程序员之间,究竟有哪些差异?
更新时间:2020-01-06 08:34:03
耐心和恒心总会得到报酬的。

——爱因斯坦

本故事纯属虚构,如有雷同,纯属巧合。

故事背景

小白工作一年后,常常产生了疑问:“自己到底还是不是菜鸟?中级和高级是什么样子的?”,带着这个疑惑,他找到直属领导小 L 咨询。

小 L:“每个公司对初级、中级、高级程序猿定义不一定一样,不过,我可以简单的描述一下我们公司的大致划分:

初级:可以完成功能开发;

中级:能优雅地实现功能,可以独立负责一个模块;

高级:能够完成系统的设计,能够使用已掌握的技能解决问题。并且能够考虑到系统的扩展性、安全性、稳定性等问题。”

小白:“太抽象了,可以详细说说吗?”

小 L:“那好,趁今天不忙,你去把中级工程师小王,和扫地僧叫过来吧”。

不一会儿,小白、小王和扫地僧都来了,小 L 给他们一个相同的任务:实现判断一个数是否是奇数。半个小时将程序拿出来。

奇特的比赛

滴答滴答,半个小时很快就过去了。小白、小王和扫地僧的程序都写好了,小 L 让小白先展示自己的程序,然后说明一下。

img
图片来自于网络,版权归原作者所有
ROUND 1:

public class TestOdd {
 public static void main(String[] args) {
 int oddNum=153;
 System.out.println(isOdd(oddNum));
 int evenNum=9284;
 System.out.println(isOdd(evenNum));
 }
 public static boolean isOdd(int i){
 return i % 2 == 1;
 }
}

小白:奇数(odd)指不能被 2 整除的数 ,数学表达形式为:2k+1,因此我就写了一个方法,根据求余之后的值是否为 1 来判断。

接下来轮到小王的程序了。

img
图片来自于网络,版权归原作者所有

ROUND 2:

public class TestOdd {
 public static void main(String[] args) {
 /**
 * A constant holding the minimum value an {@code int} can
 * have, -2<sup>31</sup>. 
 @Native public static final int MIN_VALUE = 0x80000000;
 * A constant holding the maximum value an {@code int} can
 * have, 2<sup>31</sup>-1. 
 @Native public static final int MAX_VALUE = 0x7fffffff;
 */
 int oddNum=Integer.MAX_VALUE;
 System.out.println(isOdd(oddNum));
 int evenNum=Integer.MIN_VALUE;
 System.out.println(isOdd(evenNum));
 }
 
 public static boolean isOdd(int i){
 return i % 2!=0;//如果一个数是偶数,就算是负数整除2余数也为0
 }
}

小王:因为 int 的整数范围为 231-2^{31} ~23112^{31}-1 ,即在所有的 int 数值中,有一半都是负数,如果 i 为负数,所有的求余都是负数,不会等于 1,例如 i=-5,i%2=-1。所以考虑正负整数的情况下,i 需要满足求余不等于 0。

接下来轮到扫地僧的程序了。

img
图片来自于网络,版权归原作者所有
ROUND 3:

public class TestOdd {
 public static void main(String[] args) {
 /**
 * A constant holding the minimum value an {@code int} can
 * have, -2<sup>31</sup>. 
 @Native public static final int MIN_VALUE = 0x80000000;
 * A constant holding the maximum value an {@code int} can
 * have, 2<sup>31</sup>-1. 
 @Native public static final int MAX_VALUE = 0x7fffffff;
 */
 int oddNum=Integer.MAX_VALUE;
 System.out.println(isOdd(oddNum));
 int evenNum=Integer.MIN_VALUE;
 System.out.println(isOdd(evenNum));
 }
 
 public static boolean isOdd(int i){
 return (i & 1)!=0;//1的十六进制为0x00000001,本质是取二进制的最后一位的值
 }
}

扫地僧:不管 int 的数据是怎么样子的,它在计算机里都是二进制表示,想要判断是否为 0,根据二进制的特点 (2n2^n+…+202^0 ),只需要看看二进制的 最后一位 是 1, 还是 0 即可,最快的办法就是使用 & 提取二进制的最低位来判断。

尾声

经过这次事件后,对小白的触发挺大的。虽然上面的程序不能完全说清楚就是初级、中级和高级的区分,但至少从思路上来说,初级、中级、高级的区分还是很明显的。

}
立即订阅 ¥ 29.90

你正在阅读课程试读内容,订阅后解锁课程全部内容

千学不如一看,千看不如一练

手机
阅读

扫一扫 手机阅读

Java小白踩坑录
立即订阅 ¥ 29.90

举报

0/150
提交
取消