killWork -- 入职一周查缺补漏

res-45 ViusalVM

布置的任务是通过 VisualVM api 的源码,输出相应的 JVM 信息。

  1. 这里首先记录源码阅读的思路。
  2. 其次记录源码涉及到的一些 api 的使用
  3. 然后总结一下,下一次如果还要阅读源码,应该如何开始。

1. 源码阅读的思路

这里编译出来的源码是一个图形界面。
所以,根据图形界面,找后台对应的 Bean – {1. DataSource, 2. Model }
以及之后细分的那些 Bean , xxImpl;
找到 xxProvider , xxSupport , xxModelFactory 的逻辑。
然后分析 xxImpl 如何生成的。
注意: 这里要注意一个问题就是 要将这个类里引用的外部的包给搞清楚。
更改源码,从而可以通过外部调用。

2. Attach API && JMX API && Instrumentation API

2.1 Attach API

提供 JVM 的一些基本信息。
并且提供动态加载 class 的方法。 loadAgent()
这里使用的 agent 非常重要,之后会介绍相关的内容。

网址如下:
https://docs.oracle.com/javase/8/docs/jdk/api/attach/spec/index.html

2.2 Instrumentation API

http://ayufox.iteye.com/blog/655619
https://blog.csdn.net/conquer0715/article/details/5177474

2.3 loadAgent

涉及到代理类的问题。可以从 找到相应的解释

2.4 JMX API

the Java Management Extensions.
提供 对 JVM 各种参数的解析功能。
api :
https://docs.oracle.com/javase/8/docs/api/javax/management/package-summary.htm

2.5 System.getProperties()

—|—
java.version | Java 运行时环境版本
java.vendor | Java 运行时环境供应商
java.vendor.url | Java 供应商的 URL
java.home | Java 安装目录
java.vm.specification.version | Java 虚拟机规范版本
java.vm.specification.vendor | Java 虚拟机规范供应商
java.vm.specification.name | Java 虚拟机规范名称
java.vm.version | Java 虚拟机实现版本
java.vm.vendor | Java 虚拟机实现供应商
java.vm.name | Java 虚拟机实现名称
java.specification.version | Java 运行时环境规范版本
java.specification.vendor | Java 运行时环境规范供应商
java.specification.name | Java 运行时环境规范名称
java.class.version | Java 类格式版本号
java.class.path | Java 类路径
java.library.path | 加载库时搜索的路径列表
java.io.tmpdir | 默认的临时文件路径
java.compiler | 要使用的 JIT 编译器的名称
java.ext.dirs | 一个或多个扩展目录的路径
os.name | 操作系统的名称
os.arch | 操作系统的架构
os.version | 操作系统的版本
file.separator | 文件分隔符(在 UNIX 系统中是“/”)
path.separator | 路径分隔符(在 UNIX 系统中是“:”)
line.separator | 行分隔符(在 UNIX 系统中是“/n”)
user.name | 用户的账户名称
user.home | 用户的主目录
user.dir | 用户的当前工作目

3 学会阅读源码

  1. 首先读 core / base 目录
  2. 分析设计模式

入职双选会查缺补漏

今天进行了一波面试,发现了一些自己的问题。所以需要进行总结一波。加深一下印象。

1. 常见反问总结

  1. 想听听您对这个产品下一步发展的想法,以及未来几年内希望达到的高度
  2. 希望听一下您对这个岗位的理想人选的要求。

2. 问题总结

1 spring ioc 有什么作用
低耦合

https://www.zhihu.com/question/23277575
https://blog.csdn.net/javazejian/article/details/54561302

2 spring aop 有什么作用
减少核心代码的复杂度,降低对代码的入侵

https://blog.csdn.net/javazejian/article/details/56267036

3 jvm 标记整理算法
gc roots 遍历对象,然后区分存活以及死去的。
标记的存活对象将会被整理,按照内存地址依次排列,而未被标记的内存会被清理掉。

4 jvm 青年代的空间 100, 老年代的空间 10. minor gc 后,老年代空间不够,怎么办?
这里缺少了 major gc 的知识。
http://www.importnew.com/15820.html

5 你在工作中遇到的最大的问题是什么。是怎么解决的。

6 你在工作中常用的 jar 包有哪些?

7 多线程
volatie 如何保持原子性,可见性…
内存屏障。

8 算法
25匹马,一个赛道,一次只能跑 5 匹。得到速度,问跑几次可以得到最前面的 3 个
这就不是一道算法题目,这是一道智力题目。很尴尬。我没往这方向想。同学说,可以多从慕课网上,看 Java 智力题

0%