《OD面试》Java软件工程师
一、JVM自动内存管理机制
1. Java内存模型
1.1 由所有线程共享的数据区:
1.1.1 方法区(Method Area), Non-Heap(非堆)
用户存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
“永久代”,本质上两者并不等价。
这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载。
当方法区无法满足内存分配需求时,将抛出OutOfMemoryError。
1.1.1.1 运行时常量池:
常量池用于存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。
运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用得比较多的便是String类的intern()方法。
当常量池无法再申请到内存时,将抛出OutOfMemoryError。
1.1.2 堆(Heap) , GC堆(Garbage Collected Heap)
存放对象实例。
Java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可,就想我们的磁盘空间一样。
可实现成固定大小的,也可以是可拓展的。当前主流的虚拟机都是按照可拓展来实现的。
-Xmx
-Xms
如果堆中没有内存完成实例分配,并且堆也无法再拓展时,将会抛出OutOfMemoryError。
新生代: Eden区,From Survivor区,To Survivor区
老年代:
1.2 线程私有的数据区
1.2.1 虚拟机栈(VM Stack)
虚拟机栈是Java方法执行的内存模型: 每个方法被执行的时候,都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。
局部变量表: 编译期可知的各种基本数据类型、对象引用
1.2.2 本地方法栈(Native Method Stack)
本地方法栈为虚拟机使用导的Native方法服务。
本地方法栈区也会抛出StackOverflowError和OutofMemoryError异常。
1.2.3 程序计数器(Program Counter Register)
字节码解释器通过改变程序计数器的值来选取下一条需要执行的字节码指令。
Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储。
两种异常状况:
如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;
如果虚拟机栈可以动态拓展,当拓展时无法申请到足够的内存时会抛出OutofMemoryError异常。
1.3 直接内存
NIO, 通道(Channel)与缓冲区(Buffer)的I/O方式,可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。
1.4 对象访问
1.4.1 使用句柄
Java堆中划分出一块内存来作为句柄池,reference中存储的就是独享的句柄地址。
1.4.2 直接指针
reference中直接存储的就是对象地址。
Sun HotSport使用的是直接指针的方式访问。
二、JVM虚拟机执行子系统
2.1 类文件结构
2.2 虚拟机类加载机制
2.2.1 类加载的时机
2.2.2 连接(Linking)
2.2.3 初始化
2.2.3.1 有且只有四种情况必须立即对类进行“初始化”
1)new、getstatic、putstatic、invokestatic
2)java.lang.relect包
3)初始化一个类,如果父类没有初始化,先初始化父类
4)虚拟机启动时,初始化主类(包含main方法()的那个类)
2.3 类加载的过程
加载 ===>验证===>准备===>解析 ===>初始化===>使用===>卸载
2.3.1 加载
1)通过类的全限定名来获取定义此类的二进制字节流;
(1)从zip包中读取,典型场景:成为jar、ear、war格式的基础。
(2)从网络中获取,典型场景:Applet。
(3)运行时计算生成,典型场景:动态代理技术。
(4)由其他文件生成,典型场景: JSP应用。
(5)从数据库总读取,场景相对较少。
2)将这个字节流所代表的静态存储结果转化为方法区的运行时数据结构;
3)在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口
2.3.2 验证
验证是虚拟机对自身保护的一项重要工作。
1)文件格式验证
2)元数据验证
3)字节码验证
4)符号引用验证
2.3.3 准备
2.3.4 解析
2.3.5 初始化
2.4 类加载器
2.4.1 类与类加载器
对于任意一个类,都需要由它加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性。
比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提之下才有意义。
2.4.2 双亲委派模型
2.5 类加载及执行子系统的案例与实战
三、JVM程序编译及代码优化
四、JVM高效并发
五、String
5. 1 String类为什么要设计成final
http://blog.csdn.net/fenglibing/article/details/5486449
——《Java核心技术 卷I》
5.2 StringBuffer和StringBuilder的区别
六、Java集合框架
6.1 HashMap
http://tracylihui.github.io/categories/Java%E9%9B%86%E5%90%88/
6.2 ConcurrentHashMap
锁分段技术
http://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/
http://www.infoq.com/cn/articles/ConcurrentHashMap
6.3 Java容器的线程安全
http://blog.csdn.net/zhangchaoyangsun/article/details/8664526
http://blog.csdn.net/jiyiqinlovexx/article/details/51030720
http://www.cnblogs.com/shijiaqi1066/p/3412275.html
七、内存映射原理
http://www.cnblogs.com/huxiao-tee/p/4660352.html
十、数据库
10.1 SQL的读法
官方的正确的执行顺序如下:
(8)SELECT
(9) DISTINCT
(11) <TOP_specification> <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE | ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
举例:
1、 select username,count(1)
2、 from gv$session t
3、 where wait_class <> ‘Idle’
4、 group by username
5、 having count(1) >=2
6、 order by 2 desc
读作:
1、 from gv$session t
2、 where wait_class <> ‘Idle’
3、 group by username
4、 having count(1) >=2
5、 select username,count(1)
6、 order by 2 desc
10.2 Oracle优化
10.3 Oracle中的rownum
10.4 Oracle分页
实现oracle分页常用三种方法:rowid、分析函数、rownum
十一、 JavaEE
11.1 Servlet生命周期
http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html
11.2 SpringMVC源码分析
http://www.cnblogs.com/fangjian0423/p/springMVC-directory-summary.html
11.3 HTTP协议
11.4 mybatis
九九、分布式
99.1 分布式锁
《OD面试》Java软件工程师的更多相关文章
- 关于Java 软件工程师应该知道或掌握的技术栈
鄙人星云,今天突然想写这么一篇需要持续更新的文章,主要目的用于总结当前最流行的技术和工具,方便自己也方便他人. 更新时间:2018-10-23 09:26:19 码农职业路径图 码农入门职业路径图 J ...
- JAVA软件工程师应该具备的技能有哪些?
前言:有朋友问我:学历和能力哪个重要?我个人觉得能力大于学历,没有能力哪来的学历,学历只是证明能力的一方面.为此在能力方面畅谈java软件工程师必备的能力.作为一名合格的java工程师,不仅需要学历, ...
- Java软件工程师技能图谱
原文链接:Java软件工程师技能图谱 最近在考虑"拥有怎样的技能才能算一名合格的java软件工程师呢?"这个问题.碰巧在github发现一个很棒的开源项目--程序员技能图谱.@Zh ...
- 2015年阿里实习生面试Java研发工程师 小记
5月5日,广州,阿里实习生面试,Java研发工程师,完全被虐orz 几乎没有Java项目开发经验,接近零基础,去水了一发,毫无悬念的被刷了..RP也是杠杠的,准备过的题目一个都没被问到,算法题也是一条 ...
- JAVA软件工程师应该具备哪些基本素质?
必知:软件企业要求基础软件工程师具备六大基本素质,即良好的编码能力.自觉的规范意识和团队精神.认识和运用数据库的能力.较强的英语阅读和写作能力.具有软件工程的概念和求知欲和进取心. 1.良好的编码能力 ...
- 没找到工作的Java软件工程师是屌丝中的屌丝啊
Java软件开发的工作咋就那么难找呢?
- Java软件工程师面试常见问题集锦之一
1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象 ...
- [简历] JAVA 软件工程师
首先,一份好的简历不光说明事实,更通过FAB模式来增强其说服力. Feature:是什么 Advantage:比别人好在哪些地方 Benefit:如果雇佣你,招聘方会得到什么好处 其次,写简历和写议论 ...
- Java软件工程师面试题:Java运行时异常与一般异常有什么不一样?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误.java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕 ...
随机推荐
- python 链接MS SQL
cnxn = pyodbc.connect(driver='{SQL Server}', host=server, database=db1, trusted_connection=tcon, use ...
- java_面试_01_一个月的面试总结(java)
重点知识 由于我面试的JAVA开发工程师,针对于JAVA,需要理解的重点内容有: JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻) JVM内存调优(了解是怎么回事,一般做项目过程 ...
- typedarrays splice
TypedArrays 不是一个典型的 数组类型,所以不存在 splice 方法.但是可以模拟实现 function splice(arr, starting, deleteCount, elemen ...
- 串行总线 —— I2C、UART、SPI
I2C,也叫 IIC,是一种常见的串行总线,它只需要两根线即可在连接于总线上的器件之间传送信息. 0. 电气知识 开漏输出:Open drain output,不输出电压,低电平时接地,高电平时不接地 ...
- Skype SILK vs. iLBC vs. Speex
对比一下这三种VOIP语音算法的特点: 1 参数与特征 2 SILK性能 关于iLBC和Speex的性能可以参考以前写的文章. 3 关于VOIP一些观点(仅代表个人观点) 1) Skype 辛苦三年 ...
- 【LeetCode】010. Regular Expression Matching
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- 经过一年时间的沉淀 再次回首 TCP Socket服务器编程 (二)
------------------ 前言 ------------------ 发了第一篇文章后,有不少同志留言,看来socket编程仍然是软件系统里面一个比较难的部分. 第一篇文章主要介绍了传输协 ...
- 安装ORACLE时在Linux上设置内核参数的含义
前两天看到一篇Redhat官方的Oracle安装文档,对于Linux内核参数的修改描述的非常清晰. 安装Oracle之前,除了检查操作系统的硬件和软件是否满足安装需要之外,一个重点就是修改内核参数,其 ...
- JS性能之setTimeout与clearTimeout
测试环境: chrome浏览器 结论: 1 一个页面用setTimeout越多,该页面消耗的内存就会越多,几乎成正比. 2 在'startCount(1000000);-->100万'情况下,不 ...
- BZOJ1033:[ZJOI2008]杀蚂蚁
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...