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

    最后

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

  • 相关阅读:
    [译文] 实体与值对象到底是不是一回事?
    实现 WebApi 自托管服务宿主于 WinForms 及其交互
    [译文] C# 8 已成旧闻, 向前, 抵达 C# 9!
    [译文] 为什么你在 C# 里总是应该使用 "var" 关键字
    通过设置iis在局域网中访问网页
    windows 10 安装使用kafka
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 3) 使用Handler实现传出请求中间件
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 2) 定义命名化和类型化的客户端
    Asp.net Core 2.0 OpenId Connect Handler缺失Claims?
  • 原文地址:https://www.cnblogs.com/look-look/p/12793264.html
Copyright © 2011-2022 走看看