Java实习生常规技术面试题每日十题Java基础(八)
目录
1.解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
2.怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?
3.运行时异常与受检异常有何异同?
4.列出一些你常见的运行时异常?
5.List、Set、Map是否继承自Collection接口?
6.Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
7.线程的sleep()方法和yield()方法有什么区别?
8.请说出与线程同步以及线程调度相关的方法。
9.举例说明同步和异步。
10.Java中如何实现序列化,有什么意义?
11.获得一个类的类对象有哪些方式?
12.如何通过反射创建对象?
13.Enumeration接口和Iterator接口的区别有哪些?
14.串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
1.解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
通常我们定义一个基本数据类型的变量,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、”hello”和常量都是放在静态区中。
栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。
String str = new String("hello");
上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而”hello”这个字面量放在静态区。
2.怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?
代码如下所示:
String s1 = "你好";String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");
3.运行时异常与受检异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java编译器要求方法必须声明抛出可能发生的受检异常,但是并不要求必须声明抛出未被捕获的运行时异常。异常和继承一样,是面向对象程序设计中经常被滥用的东西,在Effective Java中对异常的使用给出了以下指导原则:
- 不要将异常处理用于正常的控制流(设计良好的API不应该强迫它的调用者为了正常的控制流而使用异常)
- 对可以恢复的情况使用受检异常,对编程错误使用运行时异常
- 避免不必要的使用受检异常(可以通过一些状态检测手段来避免异常的发生)
- 优先使用标准的异常
- 每个方法抛出的异常都要有文档
- 保持异常的原子性
- 不要在catch中忽略掉捕获到的异常
4.列出一些你常见的运行时异常?
ArithmeticException(算术异常) 5/0
ClassCastException (类转换异常)
IllegalArgumentException (非法参数异常)
IndexOutOfBoundsException (下标越界异常)
NullPointerException (空指针异常)
SecurityException (安全异常)
NumberFormatException (数字格式异常 Integer.parseInt(“a1b2”))
FileNotFoundException (文件找不到异常)
ClassNotFoundException (类找不到异常)
5.List、Set、Map是否继承自Collection接口?
List、Set 是,Map 不是。Map是键值对映射容器,与List和Set有明显的区别,而Set存储的零散的元素且不允许有重复元素(数学中的集合也是如此),List是线性结构的容器,适用于按数值索引访问元素的情形。
6.Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复。
wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行),进入对象的等待池(wait pool),只有调用对象的notify()方法(或notifyAll()方法)时才能唤醒等待池中的线程进入等锁池(lock pool),如果线程重新获得对象的锁就可以进入就绪状态。
7.线程的sleep()方法和yield()方法有什么区别?
① sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会;
② 线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态;
③ sleep()方法声明抛出InterruptedException,而yield()方法没有声明任何异常;
④ sleep()方法比yield()方法(跟操作系统CPU调度相关)具有更好的可移植性。
8.请说出与线程同步以及线程调度相关的方法。
- wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁;
- sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要处理InterruptedException异常;
- notify():唤醒一个处于等待状态的线程,当然在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且与优先级无关;
- notityAll():唤醒所有处于等待状态的线程,该方法并不是将对象的锁给所有线程,而是让它们竞争,只有获得锁的线程才能进入就绪状态;
9.举例说明同步和异步。
同步:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程,如果某个操作非常耗时,则会使后续的功能处于等待状态,产生假死/阻塞效果。
异步:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。
区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。银行的转账系统,对数据库的保存操作等等,都会使用同步交互操作,其余情况都优先使用异步交互。
Java中的某个方法可以通过Synchronized关键字使其变为同步,从而解决线程中的异步资源安全问题。
10.Java中如何实现序列化,有什么意义?
Java中将一个类实现Serializable接口(实际是空接口,起标识作用),则该类的对象就可以被序列化。
序列化就是将类的对象进行流化,被流化后的对象可以在网络中传输或者以文件的形式进行保存,然后在需要的时候可以进行反序列化,将流化的对象还原为原始对象,并且数据都保持原来的状态。具体操作是使用writeObject()方法进行写,然后使用时再通过readObject()方法进行对象读取还原。
11.获得一个类的类对象有哪些方式?
- 方法1:类型.class,例如:String.class
- 方法2:对象.getClass(),例如:”hello”.getClass()
- 方法3:Class.forName(),例如:Class.forName(“java.lang.String”)
12.如何通过反射创建对象?
- 方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance()
- 方法2:通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,例如:
String.class.getConstructor(String.class).newInstance(“Hello”);
13.Enumeration接口和Iterator接口的区别有哪些?
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。
14.串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序。
而串行收集器对大多数的小应用(在现代处理器上需要大概100M左右的内存)就足够了。
其他面试题:
Java实习生常规技术面试题每日十题Java基础(八)
Java实习生常规技术面试题每日十题Java基础(七)
Java实习生常规技术面试题每日十题Java基础(六)
Java实习生常规技术面试题每日十题Java基础(五)
Java实习生常规技术面试题每日十题Java基础(四)
Java实习生常规技术面试题每日十题Java基础(三)
Java实习生常规技术面试题每日十题Java基础(二)
Java实习生常规技术面试题每日十题Java基础(一)
Java实习生常规技术面试题每日十题Java基础(八)相关推荐
- Java实习生常规技术面试题每日十题Java基础(七)
目录 1. Java设计模式有哪些? 2.GC是什么?为什么要有GC? 3. Java中是如何支持正则表达式. 4.比较一下Java和JavaSciprt. 5.Math.round(11.5) 等于 ...
- Java实习生常规技术面试题每日十题Java基础(四)
目录 1.String 和StringBuffer的区别. 2.数组有没有length()这个方法? String有没有length()这个方法? 3.final, finally, finalize ...
- Java实习生常规技术面试题每日十题Java基础(五)
目录 1.启动一个线程是用run()还是start()? . 2.线程的基本状态以及状态之间的关系. 3.Set和List的区别,List和Map的区别? 4.同步方法.同步代码块区别? 5.描述Ja ...
- Java实习生常规技术面试题每日十题Java基础(一)
目录 1.Java 的 "一次编写,处处运行"如何实现? 2.描述JVM运行原理. 3.为什么Java没有全局变量? 4.说明一下public static void main(S ...
- Java实习生常规技术面试题每日十题Java基础(六)
目录 1.在Java语言,怎么理解goto. 2.请描述一下Java 5有哪些新特性? 3.Java 6新特性有哪些. 4.Java 7 新特性有哪些. 5.Java 8 新特性有哪些. 6.描述Ja ...
- Java实习生常规技术面试题每日十题Java基础(二)
目录 1. JAVA 的反射机制的原理. 2.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 3.如何将String类型转化成Number类型. 4.什 ...
- Java实习生常规技术面试题每日十题Java基础(三)
目录 1.是否可以从一个static方法内部发出对非static方法的调用? 2.Integer与int的区别? 3.Overload和Override的区别.参数列表相同,返回值不同的方法,是否是重 ...
- 【华为认证-每日十题】HCNP-RS-IENP(31-40)【问】
为了达到学习的目的,每日十题栏目的详解将不再直接公布,由各位学习在评论区问出不懂得问题,也可以直接联系邮箱hubw001@163.com.欢迎各位来信交流. 真的不是藏私,只是直接发布一些结果,就是应 ...
- java弱引用怎么手动释放,十分钟理解Java中的弱引用,十分钟java引用
十分钟理解Java中的弱引用,十分钟java引用 本篇文章尝试从What.Why.How这三个角度来探索Java中的弱引用,帮助大家理解Java中弱引用的定义.基本使用场景和使用方法.由于个人水平有限 ...
最新文章
- iMeta:西农韦革宏团队焦硕等-土壤真菌驱动细菌群落的构建(全文翻译/PPT/视频解读)...
- H5中使用Web Storage来存储结构化数据
- Fragment详解之四——管理Fragment(2)
- C++string类型与C语言字符数组的转换 std::string.c_str()函数
- 如何将Rant变成生产力电动工具
- [小技巧]快速生成验证码
- 关于本地缓存localstorage与sessionStorage 数组 (array)字符串(string) 对象(object)的存储技巧和注意事项...
- iOS上应用Static Framework
- 基于SSM的培训机构管理系统
- Linux 系统实现 SSH 连接的 3 种 方式
- java实现根据身份证计算年龄的两种方式
- PPT设计思维进阶:提升设计能力
- 笔记本光驱位固态硬盘安装及系统迁移
- For菜鸟文章:PE文件格式,qduwg翻译
- android 键盘快捷指令
- PowerManagerService分析-updatePowerStateLocked方法
- 猿辅导python助教面试两次都有什么内容_猿辅导面试信息第一手揭秘,小伙伴们看过来!...
- 分子内电荷转移有哪些最新发表的毕业论文呢?
- 什么是Promise,Promise的三种状态,Promise的方法
- CRUD是什么意思?
热门文章
- 圣邦微电子2023校招笔试
- CentOS7.x Sysbench 测试mysql数据库性能(version:sysbench-1.1.0)
- 【影像组学pyradiomics教程】(七)影像组学特征
- 阳光,无论清浅或明媚
- Kali Linux使用MSF木马入侵安卓手机
- Java 设计模式 本文代码拉取链接 https://gitlab.com/zhangpengweiLJ/designpettern.git
- ZARA卖床单,线上年增长300%,服饰品牌HOME店成趋势?
- 关于协作与个人英雄主义
- 无法打开SQL Server的连接 provider:Named Pipes Provider,error:40
- 8583 报文解析过程