zoukankan      html  css  js  c++  java
  • 优秀的程序员更重视阅读源码,不看源码那是假的

    从事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面试题资料!

    最后

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

  • 相关阅读:
    一些特殊的矩阵快速幂 hdu5950 hdu3369 hdu 3483
    HDU
    UVA-796 Critical Links 找桥
    HDU 4612 Warm up
    2017 ICPC乌鲁木齐 A Coins 概率dp
    HDU6223 Infinite Fraction Path bfs+剪枝
    Java基础知识学习(一)
    算法(一)
    面试题整理:SQL(二)
    面试题整理:SQL(一)
  • 原文地址:https://www.cnblogs.com/look-look/p/12793264.html
Copyright © 2011-2022 走看看