慎用精通

随着猎头行业的兴盛,一些应聘者往往可以从猎头那得到一些注意事项和过往经验。比如,在简历中切不可随意用上“精通”二字,尤其对于刚入职场的小伙伴。

因为,对于应聘者写上精通和了解没有什么区别,无非是想为自己的简历增色。但是,作为面试官,他们看到“精通”二字可是两眼放光,待着满心的期许和兴奋,开始带着“精通”的标准来向你提问。往往,最终都是以尴尬的气氛收场。

你真的精通么

昨天听了一位资深Java工程师的分享,让我意识到自己的火候还不够,基础不够扎实,平时的思考还是少了点。下面分享几个比较基础的点,以点带面,希望可以带来一些思考,也看看你我离精通二字还有多远的距离。

parseInt和valueOf

我们平时应该都用过或者见过parseInt和valueOf这两个方法。一般我们是想把String类型的字符数字转成int类型。从这个功能层面来说,这两个方法都一样,都可以胜任这个功能。

但是,我们进入源码,看下Integer类下这两个方法

parseInt


public static int parseInt(String var0) throws NumberFormatException { return parseInt(var0, 10); }

valueOf


public static Integer valueOf(String var0) throws NumberFormatException { return valueOf(parseInt(var0, 10)); }

从代码,我们起码看到了两点

  • 返回结果类型不一样,parseInt方法返回的是int基本类型,valueOf方法返回的是Integer的包装类型

  • valueOf方法实际上是调用了parseInt方法,也就是说,如果我们仅仅只需要得到字符串类型字符数值对应的整数数值,那我们大可不必调用valueOf,因为这样得到整形数值之后还要做一个装箱的操作,将int封装为Integer。

不知道平时忙于编码的你,是否有过压根没有时间管两者区别,而是直接看到谁就用谁的经历。

装箱拆箱

Java的八种基本数据类型:int, short, long, double, byte, char, float, boolean

分别有各自对应的包装类型:Integer, Short, Long, Double, Byte, Character, Float, Boolean

拆箱与装箱是相反的操作。装箱是将一个原始数据类型比如int赋值给相应封装类的变量比如Integer。而拆箱则是将一个封装类的变量赋值给相应原始数据类型的变量。

看一段代码


int i = 0; Integer j = new Integer(); ... i = j;

看完这段代码不知道你是否已经意识到问题所在了。没错,问题出在了i=j,有人说这没有问题,因为j是Integer类型,在赋值给i的时候会自动拆箱变成int类型。但是如果这时候j在经过一番处理后得到的是一个null值呢,存放在Integer下是没有问题的,因为Integer就是一个类,允许为null,但是在拆箱为null并赋值给基本类型i的时候,这时候就是抛出异常。

所以,拆箱装箱带来便捷的时候,也会有一些坑,需要我们去避免,能有效的避免的前提就是我们要基础扎实。

字符串+和StringBuilder

我们是不是太习惯于在拼接一个字符串时使用类似这样的写法


String result = a + ":" + b + ":" + c;

其实我们看源码就知道,其实每一次+的操作都是将要拼接的字符串创建一个String类型的对象,然后塞到字符串结果中,最后调用toString方法得到最终的字符串。

这样的场景,我们更加推荐使用StringBuilder,通过调用append方法拼接字符串,不需要创建那么多对象浪费系统资源。

我们可以写一段测试代码来看下两种方式的差异


/** * Created by jackie on 17/7/22. */ public class StringAndStringBuilder { public static void main(String[] args) { testString(); testStringBuilder(); } public static void testString(){ long start = System.currentTimeMillis(); String resultStr = ""; int i = 0; for (int a = 0; a < 10000; a++) { resultStr += "abc" + "def" + "g" + i++; } System.out.println("using String:" + (System.currentTimeMillis() - start)); } public static void testStringBuilder() { StringBuilder stringBuilder = new StringBuilder(); long start = System.currentTimeMillis(); int i = 0; for (int a = 0; a < 10000; a++) { stringBuilder.append("abc").append("def").append("g").append(i++); } System.out.println("using StringBuilder:" + (System.currentTimeMillis() - start)); } }

最终的运行结果如下


using String:2266 using StringBuilder:3

这种效果显然意见,使用String是秒级的2秒多,而使用StringBuilder是毫秒级的3毫秒。

如何做到精通

上面的例子只是冰山一角,说出从入门到精通只需要一秒钟,但是要达到精通的级别却需要我们花费很大的功夫。

  • 看源码 看源码是了解一个数据结构或者算法的最好的方式,通过测试或者调试,我们可以明白那些结构为什么这么设计,也更能够加深自己的理解。

  • 多思考 当代码写多的时候,我们不妨给自己留一点思考的时间,想想我们为什么要这么写,还有没有更好的写法了。

  • 多看书 找些优秀的书籍来读,站在巨人的肩膀上,可以帮助我们少走很多弯路。

精通是一种修行,你我都不能松懈和懈怠。

如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

号称精通Java的你,是否真的名副其实的更多相关文章

  1. 你真的精通Java吗?

    简历和自我介绍上经常能够读到“精通Java”这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点.不能给自己加分了.可是事实真是这样吗? 对于语言的学习,我有一种观点,一是纵向,即 ...

  2. 黑马程序员:轻松精通Java学习路线连载1-基础篇!

    编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...

  3. 学多少年才算“精通Java”?

    我从毕业做程序员就开始用 Java,到现在已经工作快 20 年了.减去我做手游用 C++.Lua 的几年,再减去后来转管理写代码少的时间,我真正写 Java 代码的时间至少也在 10 年以上. 如果你 ...

  4. 何为“精通Java”

    何为精通Java?本来Java仅仅是一门语言,但从应用技术的角度来看,精通Java是可以无边无际的.很可能你可以对James说:我精通J2EE.JVM.Java服务器.大数据等等一些和Java相关的应 ...

  5. 如何精通java技术

    如何精通java技术 | 浏览:173 | 更新:2013-05-15 14:42 | 标签:java 对于一个程序员来说,精通JAVA可以说是他们的最高境界了.那么对于JAVA程序员来说,怎么才能精 ...

  6. 用好Java中的枚举真的没有那么简单

    1.概览 在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式. enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承j ...

  7. 真正的精通Java是种什么样的境界?

    会在不适合使用java的地方不用java! 作为一名软件开发者,要追求的,应该是不断地提升自己分析问题把握事物关键点,实事求是地给出切实可行且能"一剑封喉"的优雅解决方案的能力,再 ...

  8. Java 中的 String 真的是不可变吗?

    我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码. public final class String implements java.io.Seriali ...

  9. Go和Java的性能对比,真的如此吗?

    前两天我看到了一篇文章,测试Java和Go和Python的性能,其测试内容是一个排序,排序一亿次,然后看那个语言耗时最短,我先贴一下这个文章的测试结果,Java竟然比Go快了一倍不止,Go不是号称接近 ...

随机推荐

  1. OpenCV中的结构体、类与Emgu.CV的对应表

    OpenCv中的 C 结构 OpenCV中的 C++ 封装 Emgu.CV中的 C# 封装 OpenCV 和 Emgu.CV 中的结构罗列 谢谢阅读,有误希望指正 原文地址 Basic Structu ...

  2. 【JAVAEE学习笔记】hibernate04:查询种类、HQL、Criteria、查询优化和练习为客户列表增加查询条件

    一.查询种类 1.oid查询-get 2.对象属性导航查询 3.HQL 4.Criteria 5.原生SQL 二.查询-HQL语法 //学习HQL语法 public class Demo { //基本 ...

  3. std::cin>>

    cin>> 不吃最后的回车换行,字符串自动补'\0'与最后回车换行无关 时常忘记,紧记!

  4. 2015阿里巴巴安全峰会PPT

    有幸参加了阿里巴巴安全峰会,不得不佩服阿里巴巴神盾局,真牛B!然后亲眼目睹了第二天的各大厂商牛(zhuang)B人才上台演讲,有被捧的,有被喷的,呵呵.总的来说,大家的分享精神还是阔以的. 下面是会议 ...

  5. 工程师倾情奉献-Win7 ISO 精简操作说明

    1.前提条件 a)本文档内容只适用于32bit win7 install ISO,其它OS不能保证兼容 b)示范文件为win7-ultimate-rtm-32-en-us-rdvd.iso 2.准备待 ...

  6. find的用法

    find在Linux系统中和其它工具,如sed.awk.grep等结合起来用,非常有用. 1.列出系统中所有属于root用户的“set uid”文件 #find / -perm 4755 –uid 0 ...

  7. curl的使用

    curl -v -0  -T 123.wav   "127.0.0.1:80/saveSound?filename=18696770041_1379903830_xxx.wav&du ...

  8. ecshop广告分析

    ecshop模板中,显示广告的库项目是ad_position.lbi,其内容只有一个语句: {insert name='ads' id=$ads_id num=$ads_num} smarty的ins ...

  9. Vulkan Tutorial 24 Descriptor pool and sets

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 描述符布局描述了前一章节讨论过的可以绑定的描述符的类型.在 ...

  10. Intellij IDEA查看方法的调用栈

    在IDEA中,先双击选定要查看的方法,使用快捷键Ctrl+Alt+h,在右侧就会显示该方法的详细信息,再双击右侧的方法,就定位到方法的代码区.如下图: