一、Java面试题基础第十天

2023-09-20 23:43:12

一、Java面试题基础第十天

1.什么是反射?

Java是一门静态语言,它通过编译以后才能执行的编程语言,但是可以通过反射使Java成为一个准动态语言,

Java在运行过程中动态获取获取对象的属性,调用它的方法,就叫做反射

2.反射有哪些应用场景呢?

1.jdbc连接数据库的时候加载驱动时Class.forName()

2.Java动态代理就是通过反射实现的

3.Spring 创建对象时就是使用的反射

3.讲讲什么是泛型?

Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

泛型作用

**第一是泛化。**可以用T代表任意类型Java语言中引入泛型是一个较大的功能增强不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了,这带来了很多好处。

**第二是类型安全。**泛型的一个主要目标就是提高Java程序的类型安全,使用泛型可以使编译器知道变量的类型限制,进而可以在更高程度上验证类型假设。如果不用泛型,则必须使用强制类型转换,而强制类型转换不安全,在运行期可能发生ClassCast Exception异常,如果使用泛型,则会在编译期就能发现该错误。

**第三是消除强制类型转换。**泛型可以消除源代码中的许多强制类型转换,这样可以使代码更加可读,并减少出错的机会。

**第四是向后兼容。**支持泛型的Java编译器(例如JDK1.5中的Javac)可以用来编译经过泛型扩充的Java程序(Generics Java程序),但是现有的没有使用泛型扩充的Java程序仍然可以用这些编译器来编译。 [1]

4.如何停止一个正在运行的线程?

有几种方式。

1、使用线程的stop方法

使用stop()方法可以强制终止线程。不过stop是一个被废弃掉的方法,不推荐使用。

使用Stop方法,会一直向上传播ThreadDeath异常,从而使得目标线程解锁所有锁住的监视器,即释放掉所有的对象锁。使得之前被锁住的对象得不到同步的处理,因此可能会造成数据不一致的问题。

2、使用interrupt方法中断线程,该方法只是告诉线程要终止,但最终何时终止取决于计算机。调用interrupt方法仅仅是在当前线程中打了一个停止的标记,并不是真的停止线程。

接着调用 Thread.currentThread().isInterrupted()方法,可以用来判断当前线程是否被终止,通过这个判断我们可以做一些业务逻辑处理,通常如果isInterrupted返回true的话,会抛一个中断异常,然后通过try-catch捕获。

3、设置标志位

设置标志位,当标识位为某个值时,使线程正常退出。设置标志位是用到了共享变量的方式,为了保证共享变量在内存中的可见性,可以使用volatile修饰它,这样的话,变量取值始终会从主存中获取最新值。

但是这种volatile标记共享变量的方式,在线程发生阻塞时是无法完成响应的。比如调用Thread.sleep() 方法之后,线程处于不可运行状态,即便是主线程修改了共享变量的值,该线程此时根本无法检查循环标志,所以也就无法实现线程中断。

因此,interrupt() 加上手动抛异常的方式是目前中断一个正在运行的线程最为正确的方式了。

更多推荐

Spring Cloud Gateway快速入门(二)——断言工厂

文章目录前言1.什么是Gateway断言工厂2.为什么要使用断言2.1.调试和开发:2.2.防御性编程:2.3.文档和可读性:2.4.测试:3.常用的Gateway断言工厂3.1Path断言工厂3.2Method断言工厂3.3Header断言工厂3.4时间断言工厂4.自定义Gateway断言工厂5.使用Gateway断

代码随想录Day1 数组基础

本文详细说明和思路来源于:代码随想录视频讲解:手把手带你撕出正确的二分法|二分查找法|二分搜索法|LeetCode:704.二分查找_哔哩哔哩_bilibiliLeetcodeT704题目链接704.二分查找-力扣(LeetCode)题目概述1:思路:1.因为数组是升序排列,且数组的元素不重复,所以使用二分查找法2.注

八、逻辑覆盖

不要让你的弱点妨碍你的优势。有两种互补的逻辑测试方法。第一种被称为语义逻辑覆盖,这种覆盖只考虑逻辑表达式的含义而不管表达式的构成。语义逻辑覆盖的优点在于即使谓词被写成一种表面不同但是具有等价语义的形式,依然可以产生相同的测试用例。第二种被称为语法逻辑覆盖,这种覆盖专门根据逻辑表达式的构成来生成测试用例。语法逻辑覆盖的优

bloaty

安装教程参考:https://github.com/google/bloatyBloaty是一个用于分析二进制文件大小的工具,它可以深入分析二进制文件,使用自定义的ELF、DWARF和Mach-O解析器,将二进制文件的每个字节准确地归因于生成它的符号或编译单元。以下是一些使用Bloaty的基本步骤:安装Bloaty:你

【C++】STL详解(六)—— list的模拟实现

​​📝个人主页:@Sherry的成长之路🏠学习社区:Sherry的成长之路(个人社区)📖专栏链接:C++学习🎯长路漫漫浩浩,万事皆有期待上一篇博客:【C++】STL详解(五)——list的介绍及使用文章目录list的三个类及其成员函数接口总览结点类的模拟实现构造函数迭代器类的模拟实现迭代器类存在的意义迭代器类的

[Qt/C/C++]JSON和程序发布

文章摘于爱编程的大丙文章目录1.JSON1.1Json数组1.2Json对象1.3注意事项2.Qt中JSON操作2.1QJsonValue2.2QJsonObject2.3QJsonArray2.4QJsonDocument2.5举例2.5.1写文件2.5.2读文件3.cjson库的使用3.1cJSON结构体3.2cJ

华为OD机考算法题:分积木

目录题目部分解读与分析代码实现题目部分题目分积木难度难题目说明Solo和koko是两兄弟,妈妈给了他们一大堆积木,每块积木上都有自己的重量。现在他们想要将这些积木分成两堆。哥哥Solo负责分配,弟弟koko要求两个人获得的积木总重量“相等”(根据Koko的逻辑),个数可以不同,不然就会哭,但koko只会先将两个数转成二

Linux 系统目录结构 & 终端

系统目录结构Linux或Unix操作系统中,所有文件和目录呈一个以根节点为始的倒置的树状结构。文件系统的最顶层是根目录,用/来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此,就构成了一个庞大的文件系统。在命令窗口下输入命令:ls/,显示根目录下的文件:树状目录结构:目录解

从零开始搭建成绩查询系统

在当前的数字化时代,教育行业借助技术手段不断推动教学效果的提升。作为教师,搭建一个专属的成绩查询系统可以更好地管理学生成绩,并即时向家长反馈。本文将详细介绍如何从零开始搭建一个成绩查询系统,以提升教学管理的便捷性和效率。当然,对于非技术型的教师来说,使用现成工具是个更快速实用的选择。易查分等工具被许多教师用来制作查分网

(VS报错)已在 xxxxx.exe 中执行断点指令(__debugbreak()语句或类似调用)-解决方法&&C++创建对象四种方式

上述报错困扰了我好几天,在网上搜了一天,到最后还是没有解决问题试过通过项目属性->C/C+±>代码生成->启用增强指令集->选择AVX,这种方法也没用但问题出现在创建对象时内存分配问题上方法一:如果是这样创建对象,并且写了析构函数会报错,把析构函数删去之后程序就能正常运行了。方法二:创建对象的方式改为这样,程序也可以正

第九章(2):长短期记忆网络(Long short-term memory, LSTM)与pytorch示例(简单字符级语言模型训练器)

第九章(2):长短期记忆网络(Longshort-termmemory,LSTM)与pytorch示例(简单字符级语言模型训练器)作者:安静到无声个人主页作者简介:人工智能和硬件设计博士生、CSDN与阿里云开发者博客专家,多项比赛获奖者,发表SCI论文多篇。Thanks♪(・ω・)ノ如果觉得文章不错或能帮助到你学习,可

热文推荐