编辑搜图

请点击输入图片描述

1.什么是线程局部变量?

线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java 提供 ThreadLocal 类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如 web 服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量一旦在工作完成后没有释放,Java 应用就存在内存泄露的风险。

2.用 wait-notify 写一段代码来解决生产者-消费者问题?

请参考答案中的示例代码。只要记住在同步块中调用 wait() 和 notify()方法,如果阻塞,通过循环来测试等待条件。

3. 用 Java 写一个线程安全的单例模式(Singleton)?

请参考答案中的示例代码,这里面一步一步教你创建一个线程安全的 Java 单例类。当我们说线程安全时,意思是即使初始化是在多线程环境中,仍然能保证单个实例。Java 中,使用枚举作为单例类是最简单的方式来创建线程安全单例模式的方式。

4.Java 中 sleep 方法和 wait 方法的区别?

虽然两者都是用来暂停当前运行的线程,但是 sleep() 实际上只是短暂停顿,因为它不会释放锁,而 wait() 意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件时获取到该锁。

5.什么是不可变对象(immutable object)?Java 中怎么创建一个不可变对象?

不可变对象指对象一旦被创建,状态就不能再改变。任何修改都会创建一个新的对象,如 String、Integer及其它包装类。详情参见答案,一步一步指导你在 Java 中创建一个不可变的类。

6.我们能创建一个包含可变对象的不可变对象吗?

是的,我们是可以创建一个包含可变对象的不可变对象的,你只需要谨慎一点,不要共享可变对象的引用就可以了,如果需要变化时,就返回原对象的一个拷贝。最常见的例子就是对象中包含一个日期对象的引用。

编辑搜图

请点击输入图片描述

7.Java 中应该使用什么数据类型来代表价格?

如果不是特别关心内存和性能的话,使用BigDecimal,否则使用预定义精度的 double 类型。

8.怎么将 byte 转换为 String?

可以使用 String 接收 byte[] 参数的构造器来进行转换,需要注意的点是要使用的正确的编码,否则会使用平台默认编码,这个编码可能跟原来的编码相同,也可能不同。

9.Java 中怎样将 bytes 转换为 long 类型?

1.不借助其他任何已经有的类,直接进行转换。

2.借助java.nio.ByteBuffer实现,只要将byte[]转换为ByteBuffer就可以实现所有primitive类型的数据读取。

3.借助java.io.DataInputStream实现,只要将byte[]转换为DataInputStream就可以实现所有primitive类型的数据读取。

10.我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?

是的,我们可以做强制转换,但是 Java 中 int 是 32 位的,而 byte 是 8 位的,所以,如果强制转化是,int 类型的高 24 位将会被丢弃,byte 类型的范围是从 -128 到 128。

11.存在两个类,B 继承 A,C 继承 B,我们能将 B 转换为 C 么?如 C = (C) B;

不可以

12.哪个类包含 clone 方法?是 Cloneable 还是 Object?

java.lang.Cloneable 是一个标示性接口,不包含任何方法,clone 方法在 object 类中定义。并且需要知道 clone() 方法是一个本地方法,这意味着它是由 c 或 c++ 或 其他本地语言实现的。

13.Java 中 ++ 操作符是线程安全的吗?

不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交差。

14.a = a + b 与 a += b 的区别

+= 隐式的将加操作的结果类型强制转换为持有结果的类型。如果两这个整型相加,如 byte、short 或者 int,首先会将它们提升到 int 类型,然后在执行加法操作。如果加法操作的结果比 a 的最大值要大,则 a+b 会出现编译错误,但是 a += b 没问题,如下:

byte a = 127;

byte b = 127;

b = a + b; // error : cannot convert from int to byte

b += a; // ok

(译者注:这个地方应该表述的有误,其实无论 a+b 的值为多少,编译器都会报错,因为 a+b 操作会将 a、b 提升为 int 类型,所以将 int 类型赋值给 byte 就会编译出错)

15.我能在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量吗?

不行,你不能在没有强制类型转换的前提下将一个 double 值赋值给 long 类型的变量,因为 double 类型的范围比 long 类型更广,所以必须要进行强制转换。

16. 3*0.1 == 0.3 将会返回什么?true 还是 false?

false,因为有些浮点数不能完全精确的表示出来。

17.int 和 Integer 哪个会占用更多的内存?

Integer 对象会占用更多的内存。Integer 是一个对象,需要存储对象的元数据。但是 int 是一个原始类型的数据,所以占用的空间更少。

18.为什么 Java 中的 String 是不可变的(Immutable)?

Java 中的 String 不可变是因为 Java 的设计者认为字符串使用非常频繁,将字符串设置为不可变可以允许多个客户端之间共享相同的字符串。更详细的内容参见答案。

19.我们能在 Switch 中使用 String 吗?

从 Java 7 开始,我们可以在 switch case 中使用字符串,但这仅仅是一个语法糖。内部实现在 switch 中使用字符串的 hash code。

20.Java 中的构造器链是什么?

当你从一个构造器中调用另一个构造器,就是Java 中的构造器链。这种情况只在重载了类的构造器的时候才会出现。

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

收集20个经典的Java面试题相关推荐

  1. 收集非常经典的Java面试题

    15道非常经典的Java面试题 (一)选择题(每题5分) (1)下面程序的运行结果是:() String str1 = "hello";String str2 = "he ...

  2. 20道经典的AJAX面试题(必知必会)

    1.什么是AJAX,为什么要使用Ajax(请谈一下你对Ajax的认识) 什么是ajax: AJAX是"Asynchronous JavaScript and XML"的缩写.他是指 ...

  3. 震坤行面试题java_10个经典的Java面试题

    这里有10个经典的Java面试题,也为大家列出了答案.这是Java开发人员面试经常容易遇到的问题,相信你了解和掌握之后一定会有所提高.让我们一起来看看吧. 1.Java的HashMap是如何工作的? ...

  4. 20道常见的Java面试题,你一定有遇到过

    Java是一门广泛应用于企业级开发的编程语言,在企业级应用开发中占据着重要的地位.因此,Java面试题也成为了企业招聘中必备的部分.在面试中,Java面试题会考察应聘者的对Java语言和相关技术的掌握 ...

  5. 经典的Java面试题及回答集锦

    Java面试题如约更新,有需要的小伙伴可以路过不要错过了!看上一篇Java常见面试题及答案汇总的反响还是很不错的,小千就继续更新了,希望能帮助到正在求职的你! 这次更偏基础一些! 1.String 和 ...

  6. 经典的JAVA面试题

    Java基础方面: 0.作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √    ...

  7. 20道常见初级Java面试题

    1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...

  8. 15 道超经典大厂 Java 面试题!重中之重

    从超高频的后端面试题出发,指明学习方向 大家好,我是鱼皮. 还记得我的老弟小阿巴么?他目前正值大一暑假,在家自学编程(刷短视频)中. 他整个大一期间基本都在学习前端.后来,我带他写了一次后端,结果就崩 ...

  9. 20个经典的Java应用

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换   Java代码 String a = String.valueOf(2); 或者 String a=2+&qu ...

最新文章

  1. 前后端分离nginx配置,同时解决跨域问题
  2. Java设计模式(访问者模式-迭代器模式-观察者模式-中介者模式)
  3. 深度学习核心技术精讲100篇(七)-keras 实战系列之深度学习模型处理多标签(multi_label)
  4. 【干货】2014Q4手游崩溃数据报告,iphone6第1、三星第2
  5. 基于系统级触发器的审计功能
  6. linux mint 蓝牙,Linuxmint19蓝牙连接的问题
  7. Spring系列(六):@Conditional注解用法介绍
  8. React 产品实现 -任务管理工具“氢”
  9. linux 桌面使用体验 远程访问win for linux
  10. 搜索 —— 暴力搜索
  11. SSH框架整合截图总结(三)
  12. atmega168p与328p_ATMEGA328P-MU产品说明
  13. hprose for java 教程_Hprose for Java怎么使用?Hprose for Java使用教程
  14. Android APP极光推送取消关联启动配置
  15. 推荐 :数据科学研究的现状与趋势
  16. mac电脑修改网卡mac地址
  17. 痞子衡嵌入式:IAR内部C-SPY调试组件配套宏文件(.mac)用法介绍
  18. Easy3D 孔洞识别
  19. 响应式手机网站制作实例教程
  20. c语言奇数放左边偶数放右边,放在

热门文章

  1. VTP (vlan trunking protocol)
  2. Java实现折半查找(二分查找)的递归和非递归算法
  3. H.264 Profile、Level、Encoder三张简图
  4. 如何选择一款优秀的儿童读写台灯?
  5. LOAM_velodyne学习(四)
  6. HALCON示例程序edge_segments.hdev提取连续的边缘段
  7. python环境搭建_Python开发环境搭建安装开发软件
  8. 百度网盘7.3.1.10版本增加工作空间功能,可实现百度网盘与电脑文件夹同步
  9. matlab 配置mex 识别vs2015
  10. Harbo1.5.2离线搭建