优秀的程序员更重视阅读源码,不看源码那是假的

Posted look-look

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优秀的程序员更重视阅读源码,不看源码那是假的相关的知识,希望对你有一定的参考价值。

从事Java开发的都知道java有个垃圾回收机制Garbage collection,要准确理解Java的垃圾回收机制.

技术图片

我们可以从:“什么时候”,“对什么东西”,“做了什么事情”这三个方面来分析。

01、“什么时候”

什么时候”即是GC触发的条件。GC触发的条件有两种:

程序调用System.gc时可以触发;
系统自身来决定GC触发的时机。

系统判断GC触发的依据:

根据Eden区和From Space区的内存大小来决定。

当内存大小不足时,则会启动GC线程并停止应用线程。

技术图片

新生代、老年代结构minor gc/full gc,还需要了解Minor GC 金额Full GC 触发条件.

Minor GC触发条件:

当Eden区满时,触发Minor GC。

Full GC触发条件:

调用System.gc时,系统建议执行Full GC,但是不必然执行.

老年代空间不足
方法去空间不足

通过Minor GC后进入老年代的平均大小大于老年代的可用内存

由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小

02、“对什么东西”

要是在面试时,面试官问“对什么东西”,有的求职者回答 没有用的对象,按道理来说,这并没有错,只是这并不是理想的答案。

要是能更进一步分析,那就更好了,GC操作的对象分为:

通过可达性分析法无法搜索到的对象和可以搜索到的对象.

对于搜索不到的方法进行标记。从root搜索不到,而且经过第一次标记、清理后,仍然没有复活的对象。

对于用可达性分析法搜索不到的对象,GC并不一定会回收该对象。要完全回收一个对象,至少需要经过两次标记的过程。

把问题具体化了一些,对类似这样的对象进行回收,相信能给你这次面试加分。

03、“做了什么事情”

这个问题,回答空间其实挺大的,笼统地回答删掉暂没有使用的对象,节省内存。

也不能说有错误,但要是我们能把问题再具体化一些,效果会更好。

要想搞清楚所以然,这就要求我们平时在开发中,要多留意去看看源代码。

阅读源码的好处:

一方面可以我们从中学习代码的架构,编码风格等;

另一方面有助于我们了解正在做的东西的实现原理,用到哪些算法、数据结构等。有助于我们知其然又知所以然。

那么我们如何阅读源码呢?正确的学习方法不仅能够让我们事半功倍,也能够让我们更容易理解来龙去脉。

作为一名初学者,刚接触源码,往往让初学者手足无措。

我们可以先把源码安装起来编译起来,结合它的操作文档,熟悉其功能和它的api。

要是遇到的英文文档,英文水平还可以,能让你阅读英文的水平大幅提升。

浏览源码的目录结构,了解各个目录的功能。从整体上理清这个工程由哪些模块组成,最好能自己手动画一份目录结构图。

经过前面两步相信你对这个工程有了初步的了解。

熟悉源码编码风格,是采用驼峰命名规则还是匈奴利亚法。平时在阅读时,不妨参考下面3点做法。

阅读源码时要是看到工具类,要尽量去熟悉。

这一步的分析可以学习到源代码的系统架构方式。我们可以从中学到源码的编写技巧,有助于提高我们的编码能力。

结合一些安全规则,研究源码在安全方面是如何设计的。这样可以提高自己在安全方面的意识。

研究系统所用到设计模式,一样的功能实现,用到的设计模式可能相差很多,对比我们之前所作的东东分析设计模式。

对于设计模式,笔者从遇到一位从事4年多android开发的同事,对设计模式并不重视,譬如建造者模式,AlertDialog.Builder这个,项目里到处都用,可他就是不知道是怎么实现,其实AlertDialog.Builder就是使用了Builder模式来构建AlertDialog的。

纸上得来终觉浅,得知此事要躬行。

我们可以写一些简单的demo,注意是要自己手动编写,不要想当然,并且调试出来,这样才能做到更加理解代码。

上面的这些面试题都整理成了PDF文档,希望能帮助到你面试前的复习并找到一个好的工作,相对来说也节省了你在网上搜索资料的时间来学习!!!

附欢迎关注我的公种号:it资源之家?,扫描下面二维码即可领取更多一线大厂Java面试题资料!

技术图片

最后

欢迎大家评论区一起交流,相互提升;整理资料不易,如果喜欢文章记得点个赞哈,感谢大家支持!!!

以上是关于优秀的程序员更重视阅读源码,不看源码那是假的的主要内容,如果未能解决你的问题,请参考以下文章

说能过那是假的(吉首大学2019程序设计校赛)c++

如何有效阅读源码?最新Android开发源码精编解析,优秀程序员必备

开源项目源码阅读指北

阅读源码很重要,以logback为例,分享一个小白都能学会的读源码方法

为啥 type(nil)==nil 是假的?

HTTP/2:多个 HTTP 请求更好吗?还是陈述是假的?