码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 互联网Java工程师面试题·Java 面试篇·第二弹


    目录

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

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

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

    18、怎么将 byte 转换为 String?

    19、Java 中怎样将 bytes 转换为 long 类型?

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

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

    22、哪个类包含 clone 方法?是 Cloneable 还是 Object?

    23、Java 中 ++ 操作符是线程安全的吗?

    24、a = a + b 与 a += b 的区别

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

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

    27、int 和 Integer 哪个会占用更多的内存?

    28、为什么 Java 中的 String 是不可变的(Immutable)?

    29、我们能在 Switch 中使用 String 吗?

    30、Java 中的构造器链是什么?

    31、64 位 JVM 中,int 的长度是多数?

    32、Serial 与 Parallel GC 之间的不同之处?

    33、32 位和 64 位的 JVM,int 类型变量的长度是多数?

    34、Java 中 WeakReference 与 SoftReference 的区别?

    35、WeakHashMap 是怎么工作的?

    36、JVM 选项 -XX:+UseCompressedOops 有什么作用?为什么要使用?

    37、怎样通过 Java 程序来判断 JVM 是 32 位 还是 64位?

    38、32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?


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

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


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

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


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

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


    18、怎么将 byte 转换为 String?

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


    19、Java 中怎样将 bytes 转换为 long 类型?

    这个问题你来回答 :-)


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

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


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

    http://javarevisited.blogspot.sg/2012/12/what-is-type-casting-in-java-class-interface-example.html


    22、哪个类包含 clone 方法?是 Cloneable 还是 Object?

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


    23、Java 中 ++ 操作符是线程安全的吗?

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


    24、a = a + b 与 a += b 的区别

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

    1. byte a = 127;
    2. byte b = 127;
    3. b = a + b; // error : cannot convert from int to byte
    4. b += a; // ok

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


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

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


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

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


    27、int 和 Integer 哪个会占用更多的内存?

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


    28、为什么 Java 中的 String 是不可变的(Immutable)?

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


    29、我们能在 Switch 中使用 String 吗?

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


    30、Java 中的构造器链是什么?

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


    31、64 位 JVM 中,int 的长度是多数?

            Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在 32 位 和 64 位 的 Java 虚拟机中,int 类型的长度是相同的。


    32、Serial 与 Parallel GC 之间的不同之处?

            Serial 与 Parallel 在 GC 执行的时候都会引起 stop-the-world。它们之间主要不同 serial 收集器是默认的复制收集器,执行 GC 的时候只有一个线程,而parallel 收集器使用多个 GC 线程来执行。


    33、32 位和 64 位的 JVM,int 类型变量的长度是多数?

            32 位和 64 位的 JVM 中,int 类型变量的长度是相同的,都是 32 位或者 4个字节。


    34、Java 中 WeakReference 与 SoftReference 的区别?

            虽然 WeakReference 与 SoftReference 都有利于提高 GC 和 内存的效率,但是 WeakReference ,一旦失去最后一个强引用,就会被 GC 回收,而软引用虽然不能阻止被回收,但是可以延迟到 JVM 内存不足的时候。


    35、WeakHashMap 是怎么工作的?

            WeakHashMap 的工作与正常的 HashMap 类似,但是使用弱引用作为 key,意思就是当 key 对象没有任何引用时,key/value 将会被回收。


    36、JVM 选项 -XX:+UseCompressedOops 有什么作用?为什么要使用?

            当你将你的应用从 32 位的 JVM 迁移到 64 位的 JVM 时,由于对象的指针从32 位增加到了 64 位,因此堆内存会突然增加,差不多要翻倍。这也会对 CPU缓存(容量比内存小很多)的数据产生不利的影响。因为,迁移到 64 位的 JVM主要动机在于可以指定最大堆大小,通过压缩 OOP 可以节省一定的内存。通过-XX:+UseCompressedOops 选项,JVM 会使用 32 位的 OOP,而不是 64 位的 OOP。


    37、怎样通过 Java 程序来判断 JVM 是 32 位 还是 64位?

    你可以检查某些系统属性如 sun.arch.data.model 或 os.arch 来获取该信息。


    38、32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?

            理论上说上 32 位的 JVM 堆内存可以到达 2^32,即 4GB,但实际上会比这个小很多。不同操作系统之间不同,如 Windows 系统大约 1.5 GB,Solaris 大约3GB。64 位 JVM 允许指定最大的堆内存,理论上可以达到 2^64,这是一个非常大的数字,实际上你可以指定堆内存大小到 100GB。甚至有的 JVM,如 Azul,堆内存到 1000G 都是可能的。


    要想了解更多:

    千题千解·Java面试宝典_时光の尘的博客-CSDN博客

  • 相关阅读:
    R语言使用data.table包的fread函数读取(加载)csv数据为data.table格式、使用select参数指定需要读取的字段列表(变量列表)
    C语言字符函数和字符串函数详解
    Safari技术预览版141来啦,增加了哪些新功能?
    C# Post数据或文件到指定的服务器进行接收
    vector_angle_to_rigid
    python获取ajax加载的数据
    VSCODE 打开多个文件夹
    cookie加密9
    智慧公厕预见幸福生活、美好未来
    Java在互联网网络安全中的应用(三)
  • 原文地址:https://blog.csdn.net/MANONGDKY/article/details/133946331
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号