Java基础面试题自测
文章目录
- 一、Java 中有哪 8 种基本数据类型?说说这 8 种基本数据类型对应的包装类型?
- 二、包装类型的常量池技术了解么?
- 三、为什么要有包装类型?
- 四、什么是自动拆装箱?原理?
- 四、遇到过自动拆箱引发的 NPE 问题吗?
- 五、String 、 StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
- 六、重载和重写的区别?
- 七、== 和 equals() 的区别
- 八、Java 反射?反射有什么优点/缺点?你是怎么理解反射的(为什么框架需要反射)?
- 九、谈谈对 Java 注解的理解,解决了什么问题?
- 十、Java 泛型了解么?泛型的作用?什么是类型擦除?泛型有哪些限制?介绍⼀下常用的通配符?
- 十一、内部类了解吗?匿名内部类了解吗?
一、Java 中有哪 8 种基本数据类型?说说这 8 种基本数据类型对应的包装类型?
好的,Java中有byte、short、int、long、float、double的数字类型,还有一种字符类型char,一种布尔类型boolean。对应的包装类分别是Byte、Short、Integer、Long、Float、Double、Characher、Boolean。
二、包装类型的常量池技术了解么?
提示:Java 基本类型的包装类的⼤部分( Byte , Short , Integer , Long , Character , Boolean )都实现了常量池技术
Java 基本类型的包装类的大部分都实现了常量池技术。包装类的常量池技术就是类似于缓存的作用,JVM单独创建一块空间,避免重复创建包装类常量。Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 True or False。
三、为什么要有包装类型?
提示: 基本类型有默认值、泛型参数不能是基本类型
面向对象要求:Java是一种面向对象编程语言,面向对象是一种思想,它要求数据都应该是对象,而不是关键字,就像我们的八种基本类型数据就是关键字,他们没有成员方法和其他面向对象的特性。因此我们需要有对象来实现我们面向对象的思想,就引入了包装类,将基本类型封装成对象,使他们也具有面向对象的特性。
泛型的要求:在java引入了泛型之后,泛型要求的类型参数必须是对象类型,不能是基本数据类型,因此想在泛型中使用基本类型,就必须使用对应的包装类
null值表示:包装类默认的是null,而我们的基本数据类型默认表示的是0,因此在我们前后端进行交互的时候,我们后端的接口就应该使用包装类,而不是基本数据类型,因为前端有可能会传一个空数据,我们使用基本数据类型就会报500的错误,因此我们想让程序继续进行下去我们就应该使用包装类。
四、什么是自动拆装箱?原理?
提示:基本类型和包装类型之间的互转。装箱其实就是调⽤了包装类的 valueOf() ⽅法,拆箱其实就是调⽤了 xxxValue() ⽅法。
自动拆装箱:
- 装箱其实就是将基本用它们对应的引用类型包装起来;
- 拆箱其实就是将包装类型转换成基本数据类型;
原理也很简单,装箱其实就是调用了包装类的valueOf(参数)方法,拆箱调用了xxxValue()方法。
四、遇到过自动拆箱引发的 NPE 问题吗?
1.数据库的查询结果可能是 null,因为⾃动拆箱,⽤基本数据类型接收有 NPE ⻛险。2.三⽬运算符使⽤不当会导致诡异的 NPE 异常
自动拆箱时由于调用的是intValue方法,所以如果调用方本身是null的话,肯定会NPE。
解决办法就是在自动拆装箱的地方加上null值判断。
五、String 、 StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
提示:可以从可变性、线程安全性、性能这⼏个⻆度来回答。
首先在可变性的情况下,String是不可变的,而StringBuffer和StringBuilder是可变的,其次在线程安全的情况下,String可以理解成常量,所以线程是安全的。StringBuffer对方法加了同步锁所以也是线程安全的,而StringBuilder是非线程安全的。最后在性能方面,对String类型进行改变时,都会生成一个新的String对象,然后将指针指向新的对象。StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
六、重载和重写的区别?
可以从下⾯⼏个⻆度来回答:发⽣范围、参数列表、返回值类型、异常、访问修饰符、发⽣阶段
重载就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。
重写就是重写就是子类对父类方法的重新改造,外部样子不能改变,内部逻辑可以改变。
七、== 和 equals() 的区别
提示: == 对于基本类型和引⽤类型的作⽤效果是不同的, equals() 不能⽤于判断基本数据类型的变量,只能⽤来判断两个对象是否相等。 equals() ⽅法存在两种使⽤情况:1.类没有重写 equals() ⽅法 :通过 equals() ⽐较该类的两个对象时,等价于通过“==”⽐较这两个对象,使⽤的默认是 Object 类 equals() ⽅法。2.类重写了 equals() ⽅法 :⼀般我们都重写 equals() ⽅法来⽐较两个对象中的属性是否相等;若它们的属性相等,则返回 true(即,认为这两个对象相等)。
== 对于基本类型和引用类型的作用效果是不同的:
- 对于基本数据类型来说,== 比较的是值。
- 对于引用数据类型来说,== 比较的是对象的内存地址。
equals() 不能用于判断基本数据类型的变量,只能用来判断两个对象是否相等。equals()方法存在于Object类中,而Object类是所有类的直接或间接父类,因此所有的类都有equals()方法。
equals() 方法存在两种使用情况:
- 类没有重写 equals()方法:通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象,使用的默认是 Object类equals()方法。
- 类重写了 equals()方法:一般我们都重写 equals()方法来比较两个对象中的属性是否相等;若它们的属性相等,则返回 true(即,认为这两个对象相等)。
八、Java 反射?反射有什么优点/缺点?你是怎么理解反射的(为什么框架需要反射)?
反射之所以被称为框架的灵魂,主要是因为它赋予了我们在运行时分析类以及执行类中方法的能力。通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。
反射可以让我们的代码更加灵活、为各种框架提供开箱即用的功能提供了便利。不过,反射让我们在运行时有了分析操作类的能力的同时,也增加了安全问题,比如可以无视泛型参数的安全检查(泛型参数的安全检查发生在编译时)。另外,反射的性能也要稍差点,不过,对于框架来说实际是影响不大的。
静态加载和动态加载
静态加载(需要重新编译):
//获取User的实例对象
User user = new User();
动态加载(不需要重新编译):
Class c3 = Class.forName("java.reflect.User");
我们手机里的app要更新升级的时候,即使你不更新,也可以正常使用,但是不能使用更新的功能。我们的杀毒软件,需要下载一个功能插件时,不需要卸载掉重新安装完整版,只需要下载插件即可。这里面就用到了反射的知识哦。不需要重新编译,扩展所需功能即可。
(java动态代理可以在不改变被调用对象源码的前提下,在被调用方法前后增加自己的操作,极大地降低了模块之间的耦合性。Java的动态代理就是利用了反射的特性来实现的。)
九、谈谈对 Java 注解的理解,解决了什么问题?
提示: 想想你平时使⽤框架为啥能够如此⽅便。另外,需要注意注解的解析依赖于反射机制,务必要提前把反射机制搞懂。
注解可以看作是一种特殊的注释,主要用于修饰类、方法或者变量,提供某些信息供程序在编译或者运行时使用。程序可以通过反射来获取指定程序元素的Annotion对象,然后使用该对象来获取注解里面的元数据。
可以发现注解并不直接对其修饰的代码产生影响,它是为代码提供额外的信息,它是代码的元数据,注解与代码一起构成了编译器的完整输入,编译器借助注解可以生成并得到最终完整的代码。注解本身无论是使用还是定义都相对直观和简洁,非常容易理解,因为注解本身就是一种元数据,提供一种标记或者额外的数据。重点在于注解的处理,这是注解功能发挥作用的地方也就是注解功能逻辑实现的地方。
注解的本质是程序的元数据,为编译器提供的代码以外的额外的数据。注解是优雅的元编程的一种方式,可以减少重复的代码,提升开发效率。所以每当需要减少重复代码,生成代码,提供元数据时就要用注解来实现。特别是特定领域的问题,非常适合大量使用注解,如数据库(Room),网络请求(Retrofit),单元测试(JUnit)等等。并且注解的大部分应用都是在编译时生成代码,也不影响性能,所以可劲造儿,尽可能的使用注解吧。
十、Java 泛型了解么?泛型的作用?什么是类型擦除?泛型有哪些限制?介绍⼀下常用的通配符?
泛型,即参数化类型,目的是将具体类型参数化,在使用时需要传入具体类型进行替换。 参数分为实参和形参,泛型属于类型形参(好比抽象函数,是一种泛指,类似于数学函数中用 x,y,z 代表具体的值)。
泛型的作用:
- 保证类型安全,进行编译期错误检查,使代码具有更好的安全性和可读性。
- 不需要进行类型强制转换。
类型擦除: Java 泛型的实现是在编译层,编译后生成的字节码中不包含泛型中的类型信息。所以使用泛型时,加上的类型参数,会在编译器编译的时候去掉,这个过程称为类型擦除。
限制:
- Java泛型不能使用基本类型
- Java泛型不允许进行实例化
- Java泛型不允许进行静态化
- Java泛型不允许直接进行类型转换(通配符可以)
- Java泛型不允许直接使用instanceof运算符进行运行时类型检查(通配符可以)
- Java泛型不允许创建确切类型的泛型数组(通配符可以)
- Java泛型不允许定义泛型异常类或者catch异常(throws可以)
通配符:
- ?号通配符:可以匹配任意类型,任意的Java类都可以匹配。
- T号通配符:可以匹配任意类型,任意的Java类都可以匹配。
?:是只读类型的,不能进行增加和修改的操作,可以用于便利和删除。
T:可以进行增删改查,没有任何限制。
十一、内部类了解吗?匿名内部类了解吗?
内部类是定义在另一个类内部的类。内部类可以访问其外部类的成员,包括私有成员,而外部类不能直接访问内部类的成员。内部类提供了一种封装和组织代码的方式,可以用于实现更复杂的逻辑结构或实现特定的设计模式。
内部类可以分为四种类型:
-
成员内部类(Member Inner Class):成员内部类是定义在外部类的成员位置上的类。它可以访问外部类的成员,并且可以被外部类的对象实例化。成员内部类的实例与外部类的实例关联在一起,不能直接访问外部类的静态成员。
-
静态内部类(Static Inner Class):静态内部类是定义在外部类的成员位置上,并且使用static修饰的内部类。它与外部类的实例无关,可以直接访问外部类的静态成员,但不能访问外部类的非静态成员。静态内部类的实例化不依赖于外部类的实例。
-
方法内部类(Local Inner Class):方法内部类是定义在方法内部的类。它只能在方法内部使用,不能被方法外部的其他代码访问。方法内部类可以访问方法的局部变量,但需要保证局部变量是final或effectively final的。
-
匿名内部类(Anonymous Inner Class):匿名内部类是一种特殊的内部类,没有显式的类名。它通常用于在使用接口或抽象类的地方提供一个实现或子类,而无需专门定义一个具体的类。匿名内部类可以用来创建只需要一次性使用的类的实例。
相关文章:
Java基础面试题自测
文章目录 一、Java 中有哪 8 种基本数据类型?说说这 8 种基本数据类型对应的包装类型?二、包装类型的常量池技术了解么?三、为什么要有包装类型?四、什么是自动拆装箱?原理?四、遇到过自动拆箱引发的 NPE 问…...
【LeetCode 第 401 场周赛】K秒后第 N 个元素的值
文章目录 1. K秒后第 N 个元素的值🆗 1. K秒后第 N 个元素的值🆗 题目链接🔗 🐧解题思路: 前缀和 小规律🍎 🍎 从上图观察可知,规律一目了然,arr[i] arr[i] 对上一…...
游戏心理学Day10
习得性动机。 习得性动机也称社会性动机是指人与社会生活相联系的后天习得的动机,这类动机比原发性动机要多很多。 成就动机。 成就动机是指个人追求进步以及达到目标的内在动力。 在游戏中设计师总会担心过多的失败,会令玩家感到挫败进而离开游戏 对…...
MySQL表设计经验汇总篇
文章目录 1、命名规范2、选择合适的字段类型3、主键设计要合理4、选择合适的字段长度5、优先考虑逻辑删除,而不是物理删除6、每个表都需要添加通用字段7、一张表的字段不宜过多8、定义字段尽可能not null9、合理添加索引10、通过业务字段冗余来减少表关联11、避免使…...
Servlet基础(续集2)
HttpServletResponse web服务器接收到客户端的http的请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse 如果要获取客户端请求过来的参数:找HttpServletRequest如果要给客户端…...
【云原生】创建harbor私有仓库及使用aliyun个人仓库
1.安装docker #删除已有dockersystemctl stop docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine #安装docker yum install -y docker-ce-20.10.1…...
什么是SOLIDWORKS科研版
随着科技的不断进步,工程设计和科学研究变得越来越复杂,需要更强大的工具来满足需求。SOLIDWORKS科研版就是在这样的背景下诞生的,它为科研人员和工程师提供了一套全方面、快捷的解决方案,以应对各种科研和工程挑战。 SOLIDWORKS科…...
微信小程序页面配置
页面配置 小程序的配置可以配置页面路径、窗口表现、tabBar等,分为全局配置和页面配置,全局配置针对所有页面生效,页面配置只针对当前页生效。 全局配置 (app.json) (1) 路径配置 pages 配置页面路径,未配置路径的页面无法被访…...
如何将JPG/PNG位图免费快速一键转换成SVG格式的矢量图
环境: JPG/PNG位图 问题描述: 如何将JPG/PNG位图快速一键转换成SVG格式的矢量图 解决方案: 是一个人工智能驱动的图片转换工具,可以帮助用户将」JPG/PNG位图快速转换成SVG格式的矢量图,方便设计人员对图片进行二次…...
YOLO检测环境安装配置
YOLO介绍 YOLO学习手册:YOLO教程 YOLO [ˈjoʊloʊ](You Only Look Once)是一种快速而准确的目标检测算法,由Joseph Redmon等人在2016年提出。YOLO被广泛应用于计算机视觉领域,包括实时视频分析、自动驾驶、安防监控、…...
NOSQL -- ES
第三个我们比较常用的NOSQL类型的数据库 --- ES 介绍: ES的全称(Elasticsearch) ES是一个分布式全文搜索的引擎 也就是我们平常在购物, 搜索东西的时候常用的, 就是一个ES的类型, 分布式全文搜索引擎 查询原理: 1>分词: 在查询之前, 其会将一些数据拆分开, 按照词进行拆分…...
【Python基础】名称空间和作用域
1.名称空间 将栈区进行分类,这些分类就是名称空间 名称空间存放什么名字空间个数何时创建&销毁内置名称空间built-inPython解释器内置的名字1个Python解释器启动&解释器关闭 全局名称空间 global Python文件内定义的类名,变量名,模块…...
安全智能预警软件有人试图窃取会立即发出高分贝警报已解锁VIP功能
一款手机安全智能预警软件,无论是网吧还是餐馆小聚,您的手机都能得到贴心的守护,一旦有人试图窃取,应用会立即发出高分贝警报,确保您在公交、地铁、商场等拥挤环境中依然能牢牢掌控手机。(解锁专业版&#…...
DeepSORT(目标跟踪算法)中自由度决定卡方分布的形状
DeepSORT(目标跟踪算法)中自由度决定卡方分布的形状 flyfish 重要的两个点 自由度决定卡方分布的形状(本文) 马氏距离的平方在多维正态分布下服从自由度为 k 的卡方分布 独立的信息 在统计学中,独立的信息是指数据…...
cordic IP核中,sin and cos的使用
参考视频:FPGA IP之CORDIC_哔哩哔哩_bilibili FPGA IP之CORDIC使用与仿真_哔哩哔哩_bilibili 一、参数说明 functional selection rotate是旋转,sin and cos是计算这两个三角函数,sinh和cosh是计算双曲正弦和双曲余弦 phase format 对于…...
SpringSecurity入门(三)
12、密码加密 12.1、不指定具体加密方式,通过DelegatingPasswordEncoder,根据前缀自动选择 PasswordEncoder passwordEncoder PasswordEncoderFactories.createDelegatingPasswordEncoder();12.2、指定具体加密方式 // Create an encoder with streng…...
luogu-P10570 [JRKSJ R8] 网球
题目传送门: [JRKSJ R8] 网球 - 洛谷https://www.luogu.com.cn/problem/P10570 解题思路 数学问题,暴力这个范围会超时。 首先,找出这两个数的最大公因数,将这两个数分别除以最大公因数,则这两个数互质,判…...
ASP.NET的WebService跨域CORS问题解决方案
ASP.NET WebService 跨域(CORS, Cross-Origin Resource Sharing)问题通常发生在当您尝试从不同的源(域名、协议或端口)调用 WebService 时。浏览器由于安全原因,默认会阻止此类跨域请求。为了解决这个问题,您需要在 WebService 服务器端配置 CORS。 以下是在 ASP.NET We…...
大众点评全国爱车店铺POI采集177万家-2024年5月底
大众点评全国爱车店铺POI采集177万家-2024年5月底 店铺POI点位示例: 店铺id H69Y6l1Ixs2jLGg2 店铺名称 HEEJOO豪爵足道(伍家店) 十分制服务评分 7.7 十分制环境评分 7.7 十分制划算评分 7.7 人均价格 134 评价数量 2982 店铺地址 桔城路2号盛景商业广场1-3…...
【文献阅读】LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
目录 1. motivation2. overall3. model3.1 low rank parametrized update matrices3.2 applying lora to transformer 4. limitation5. experiment6. 代码7. 补充参考文献 1. motivation 常规的adaptation需要的微调成本过大现有方法的不足: Adapter Layers Introd…...
Rust学习06:使用CSDN的AI工具“C知道”分析代码错误
朋友们,我最近真的是在绝望的边缘了! Rust咋这么蓝涅! 资料咋这们少涅! 记得学Python的时候,基本上你遇到的所有问题都可以在书上或者网上找到答案,中文世界找不到那么在英文世界一定能找到答案。 我猜&…...
MeiliSearch-轻量级且美丽的搜索引擎
MeiliSearch-轻量级且美丽的搜索引擎 MeiliSearch 是一个功能强大、快速、开源、易于使用和部署的搜索引擎。它具有以下特点: 支持中文搜索:MeiliSearch 对中文有良好的支持,不需要额外的配置。高度可定制:搜索和索引都可以高度…...
python使用wkhtmltopdf将html字符串保存pdf,解决出现方框的问题
出现的问题: 解决办法: <html> <head><meta charset"UTF-8"/> </head> <style> * {font-family: Arial,SimSun !important; } </style> </html>在html字符串前面加上上面代码,意思是设…...
Java练习题
题目: 1. 定义长方体类Cuboid,要求如下:(1)私有成员变量包括长length、宽width和高height;(2)构造方法包括一个公共的空构造方法,一个能够初始化所有成员变量的构造方法…...
【Python/Pytorch - 网络模型】-- 手把手搭建U-Net模型
文章目录 文章目录 00 写在前面01 基于Pytorch版本的UNet代码02 论文下载 00 写在前面 通过U-Net代码学习,可以学习基于Pytorch的网络结构模块化编程,对于后续学习其他更复杂网络模型,有很大的帮助作用。 在01中,可以根据U-Net…...
Ansible-doc 命令
目录 常用参数 基本用法 查看指定模块的文档 列出所有可用模块 搜索模块 显示模块参数的简单列表 显示详细的说明和示例 详细示例 查看 file 模块的文档 简略查看 copy 模块的参数 ansible-doc 是 Ansible 中的一个非常有用的命令行工具,它可以帮助你查找…...
面试题:什么是线程的上下文切换?
线程的上下文切换是指在操作系统中,CPU从执行一个线程的任务切换到执行另一个线程任务的过程。在现代操作系统中,为了实现多任务处理和充分利用CPU资源,会同时管理多个线程的执行。由于CPU在任意时刻只能执行一个线程,因此需要在这…...
【简单讲解Perl语言】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
专硕初试科目一样,但各专业的复试线差距不小!江南大学计算机考研考情分析!
江南大学物联网工程学院,是由江南大学信息工程学院和江南大学通信与控制工程学院,于2009年合并组建成立“物联网工程学院”,也是全国第一个物联网工程学院。 江南大学数字媒体学院是以江南大学设计学院动画系和信息工程学院数字媒体技术系为…...
“华为Ascend 910B AI芯片挑战NVIDIA A100:效能比肩,市场角逐加剧“
华为自主研发的人工智能芯片——Ascend 910B,近期在世界半导体大会及南京国际半导体博览会上由华为ICT基础设施管理委员会执行董事、主任王涛发表声明称,该芯片在训练大规模语言模型时的效率高达80%,与NVIDIA的A100相比毫不逊色,且…...
redis wordpress 内存/网站seo方法
什么是爬虫?网络爬虫(Web crawler),就是通过网址获得网络中的数据、然后根据目标解析数据、存储目标信息。这个过程可以自动化程序实现,行为类似一个蜘蛛。蜘蛛在互联网上爬行,一个一个网页就是蜘蛛网。这样蜘蛛可以通过一个网页爬…...
成都旅游景点攻略/3步打造seo推广方案
做过GUI开发相关工作的人的人都知道,很多应用程序都是事件驱动的。这些事件大部分都来自于用户,比如键盘事件、鼠标事件或遥控器事件。还有一些事件来自于系统内部,比如定时事件、socket事件和其它文件事件等等。在没有任何事件的情况下&…...
南阳网站建设价格/网络服务商怎么咨询
#include<stdio.h> #include<ctype.h> #include<string.h> #include<math.h> #include<stdlib.h> int main(void) {int i, j, n, a[10], b[50]; // 数组 a是题目输入的十个数字 ,数组 b是 a所代表的所有数字 for (i 0; i < 10;…...
浏览器做单页网站项目/百度排名优化工具
安装 Linux 主机时,如果选择 最小化安装! 配置 vnc 远程桌面可以参考:Linux 配置 VNC 远程桌面 使用 vnc 等工具连接通常显示如下: 也就是无法使用图形化界面,可以通过 yum 直接安装图形化界面: Linux 6: yum groupinstall -y "X Window System" yum gr…...
网站制作书籍推荐/开网店哪个平台靠谱
1.ios离线打包配置appid 和 cer证书 和 描述文件2.iOS离线打包-支付插件配置主要注意打包:在info.plist root 节点添加 UniversalLinks 项,值和微信开放平台配置的一致,(微信开放平台配置的域名地址)3.本次核心处理微信支付链接的配置(微信…...
人与马做网站/服装店营销策划方案
配套FPGA开发板(含该设计的工程代码):https://item.taobao.com/item.htm?spma1z10.1-c.w4004-4676525296.4.6e8950ed57YPhv&id17848039135 基于FPGA的智力抢答器设计 功能说明 说明 4路抢答器,选手,主持人可以进行…...