Android:(String、StringBuilder、St
前言
很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。
下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把(String、StringBuilder、StringBuffer)+JVM内存结构部分的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我很多时间,有需要的朋友可以帮忙转发分享下,点个赞~
一、String、StringBuilder、StringBuffer
StringBuffer里面的很多方法添加了synchronized关键字,是可以表征线程安全的,所以多线程情况下使用它。
执行速度:
StringBuilder > StringBuffer > String
StringBuilder牺牲了性能来换取速度的,这两个是可以直接在原对象上面进行修改,省去了创建新对象和回收老对象的过程,而String是字符串常量(final)修试,另外两个是字符串变量,常量对象一旦创建就不可以修改,变量是可以进行修改的,所以对于String字符串的操作包含下面三个步骤:
- 创建一个新对象,名字和原来的一样
- 在新对象上面进行修改
- 原对象被垃圾回收掉
二、JVM内存结构
Java对象实例化过程中,主要使用到虚拟机栈、Java堆和方法区。Java文件经过编译之后首先会被加载到jvm方法区中,jvm方法区中很重的一个部分是运行时常量池,用以存储class文件类的版本、字段、方法、接口等描述信息和编译期间的常量和静态常量。
2.1、JVM基本结构
类加载器classLoader,在JVM启动时或者类运行时将需要的.class文件加载到内存中。 执行引擎,负责执行class文件中包含的字节码指令。 本地方法接口,主要是调用C/C++实现的本地方法及返回结果。 内存区域(运行时数据区),是在JVM运行的时候操作所分配的内存区, 主要分为以下五个部分,如下图:
![](https://img.haomeiwen.com/i18342430/be68ffac439af422.png)
- 方法区:用于存储类结构信息的地方,包括常量池、静态变量、构造函数等。
- Java堆(heap):存储Java实例或者对象的地方。这块是gc的主要区域。
- Java栈(stack):Java栈总是和线程关联的,每当创建一个线程时,JVM就会为这个线程创建一个对应的Java栈。在这个java栈中又会包含多个栈帧,每运行一个方法就创建一个栈帧,用于存储局部变量表、操作栈、方法返回值等。每一个方法从调用直至执行完成的过程,就对应一个栈帧在java栈中入栈到出栈的过程。所以java栈是线程私有的。
- 程序计数器:用于保存当前线程执行的内存地址,由于JVM是多线程执行的,所以为了保证线程切换回来后还能恢复到原先状态,就需要一个独立的计数器,记录之前中断的地方,可见程序计数器也是线程私有的。
- 本地方法栈:和Java栈的作用差不多,只不过是为JVM使用到的native方法服务的。
以上就是Android (String、StringBuilder、StringBuffer)+JVM内存结构的面试题目,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我很多时间,有需要的朋友可以帮忙转发分享下,点个赞~
Android架构师之路很漫长,一起共勉吧!
——————分割线——————
简书点赞可以有好几种赞,长按点赞按钮就会有选项,大家点赞的时候,麻烦点个超赞~在这里先谢谢您的支持啦!