首页 > 编程语言 >java面试题

java面试题

时间:2023-05-31 11:44:15浏览次数:47  
标签:面试题 java 实现 可以 线程 HashTable 抽象类 方法

一、面向对象的特性有哪些?

  1. 封装(Encapsulation):将数据和方法封装在一个类中,通过访问修饰符控制数据的访问权限,提高程序的安全性和可维护性。

  2. 继承(Inheritance):可以从父类继承属性和方法,避免重复编写代码,简化程序设计和维护。

  3. 多态(Polymorphism):同一种类型的对象,可以以不同的方式处理,实现代码复用和灵活性。

 

二、Java 中重写和重载是什么意思?

  1. 重写(Override):指在子类中重新定义与父类中同名的方法,具有相同的方法名、返回类型和参数列表。重写可以修改方法的实现逻辑,但是不能改变方法的签名。当调用该方法时,会优先执行子类中的方法实现。重写通常用于实现多态特性。

  2. 重载(Overload):指在一个类中定义多个同名的方法,但是方法的参数类型、数量或顺序不同,也称为方法的签名。重载可以让方法名在程序中具有更广泛的应用场景,提高程序的灵活性和可维护性。在进行方法调用时,会根据传入参数的类型和数量匹配到最合适的方法实现。

 

三、构成重载的条件有哪些?

  1. 方法名必须相同。
  2. 参数列表必须不同,可以是参数类型、参数数量或者参数顺序不同。
  3. 方法的返回值类型可以相同也可以不同。
  4. 方法的修饰符可以相同也可以不同。例如public、private、protected、default等。
  5. 重载方法可以抛出不同的异常。

 

四、抽象类和接口的区别?

Java中的抽象类(Abstract Class)和接口(Interface)都是用于实现抽象和多态的机制,但是它们之间有以下几个主要区别:

  1. 实现方式不同:抽象类是一种基于继承的机制,即只能通过继承抽象类来实现其子类;而接口则是一种独立的概念,可以被多个类实现,实现类与接口之间不存在继承关系。

  2. 方法的实现:抽象类可以拥有构造器、普通方法和抽象方法,其中抽象方法必须在子类中实现;而接口只能定义抽象方法和常量,所有抽象方法必须在实现类中进行实现。

  3. 访问修饰符:抽象类中的方法可以使用public、protected、private等访问修饰符进行限定;而接口中的方法都是public的,不能使用其他访问修饰符进行限定。

  4. 变量的定义:抽象类中可以定义普通变量和静态变量,并且可以对变量进行初始化;而接口只能定义常量,而且必须在定义时进行初始化。

  5. 多重继承的支持:由于Java语言不支持多重继承,因此一个类只能继承一个抽象类,但是可以实现多个接口。

 

五、常见的集合有哪些?

  1. 列表(List):以线性方式存储数据,允许重复元素,可以根据下标进行访问和修改。常见的列表实现类包括ArrayList、LinkedList、Vector等。

  2. 集合(Set):不允许重复元素,可以用于去重和判重等场景。常见的集合实现类包括HashSet、TreeSet、LinkedHashSet等。

  3. 映射(Map):将键值对关联起来,可以按照键进行查找和更新。常见的映射实现类包括HashMap、TreeMap、LinkedHashMap等。

  4. 栈(Stack):先进后出(FILO)的数据结构,常用于实现撤销和回退等功能。常见的栈实现类包括Stack和ArrayDeque。

  5. 队列(Queue):先进先出(FIFO)的数据结构,常用于实现消息队列和处理任务等。常见的队列实现类包括LinkedList、PriorityQueue、ArrayBlockingQueue等。

 

六、HashMap 和 HashTable 的区别有哪些?

  1. 线程安全性:HashTable是线程安全的集合类,所有的方法都被synchronized修饰,可以保证在多线程环境下不会出现并发问题;而HashMap则不是线程安全的集合类,需要通过一些手段(例如使用Collections.synchronizedMap()方法或者使用ConcurrentHashMap)来保证线程安全。

  2. null键和null值的支持:HashTable不允许key或value为null,否则会抛出NullPointerException异常;而HashMap则允许key和value为null,并将其视为特殊的键值对进行处理。

  3. 初始容量和加载因子:HashTable的初始容量为11,负载因子为0.75;而HashMap的初始容量为16,默认负载因子也为0.75。因此,在存储大量数据时,HashMap比HashTable具有更好的性能和扩展性。

 

七、ConcurrentHashMap 和 HashTable 的区别?

ConcurrentHashMap和HashTable都是Java中线程安全的哈希表实现类,但是它们之间有以下几个主要区别:

  1. 分段锁机制:ConcurrentHashMap采用分段锁机制,将整个哈希表分成多个段(Segment),每个段都可以独立地加锁和解锁,可以并发地进行读写操作,提高了并发性能;而HashTable则使用全局的synchronized锁来保证线程安全,所有的方法都是串行执行的,会影响并发性能。

  2. null键值的支持:ConcurrentHashMap允许key和value为null,与HashMap一样;但是HashTable不允许key或value为null,否则会抛出NullPointerException异常。

 

八、List 和 Set 的区别是什么?

List和Set都是Java中常见的集合类型,但它们之间有以下几个主要区别:

  1. 元素重复性:List允许元素重复,可以按照插入顺序进行访问,支持根据索引进行快速访问、修改和删除;而Set不允许元素重复,不能根据索引进行访问,通常用于去重或判重等场景。

  2. 排序方式:List可以按照元素的插入顺序或者自定义排序规则进行排序;而Set不保证元素的顺序,具体顺序取决于具体实现类。

 

九、线程和进程的区别是什么?

1、进程:程序的一次执行过程,是系统运行程序的基本单位,启动 main 函数时其实就是启动了一个 JVM 的进程

2、线程:比进程更小的执行单位,一个进程在其执行的过程中可以产生多个线程。多个线程共享进程的方法区资源,但每个线程有自己的程序计数器虚拟机栈本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

  十、threadlocal关键字? 可以让每个线程都拥有一个独立的变量副本,在多线程环境下避免了变量共享和竞争的问题。   十一、线程池?

Java中的线程池(Thread Pool)是一种用于管理和重复利用线程资源的机制

使用线程池时,需要首先创建一个ThreadPoolExecutor对象,并设置相关的参数,例如核心线程数、最大线程数、线程空闲时间、任务队列等。然后,将需要执行的任务封装成Callable或Runnable接口的实现类,提交给线程池的execute()方法或submit()方法进行执行。

线程池会根据当前的线程数量、任务队列长度等因素来决定是否创建新的线程或者重复利用现有的线程,从而避免了频繁创建和销毁线程的开销,提高了系统的并发性能和响应速度。同时,线程池还可以控制线程运行的优先级、中断等行为,提高了程序的稳定性和可维护性。

需要注意的是,在使用线程池时,需要合理设置线程池参数和任务队列大小,避免出现线程饥饿或者任务堆积等问题;同时,也需要及时关闭线程池,释放资源,避免内存泄漏或者其他意外情况。

   

标签:面试题,java,实现,可以,线程,HashTable,抽象类,方法
From: https://www.cnblogs.com/coooookie/p/17445684.html

相关文章

  • java轻型内存队列处理demo
    java轻型内存队列处理demo@ComponentpublicclassConcurrentLinkedQueueUtils{staticAtpLogBizatpLogBiz;staticAuditLogtTmpDataServiceauditLogDataService;staticConcurrentLinkedQueueconList=newConcurrentLinkedQueue();privatestaticvo......
  • java中属性和局部变量的作用域
    1.类中的属性和局部变量可以重名,访问时遵循就近原则2.在同一个作用域中({}大括号括起来的),如在一个成员方法中,两个局部变量不能重名3.属性的生命周期长,随着对象的创建而创建,随着对象的销毁而销毁;局部变量的生命周期短,随着它所属的代码块执行而创建,随着代码快的结束而销毁。......
  • java同步mysql的数据到PostgreSQL时报错ERROR: invalid byte sequence for encoding "
    最近,同事在做一个功能,通过java程序将mysql中的一张表的数据同步到pgsql中,在同步过程中,插入到pgsql中出现了如下错误:`###Errorupdatingdatabase.Cause:org.postgresql.util.PSQLException:ERROR:invalidbytesequenceforencoding"UTF8":0x00在位置:unnamedportalpa......
  • java modbus_rtu串口通讯
    基于modbus和串口通讯的Java分享本文推荐一个简单好用java实现基于modbus—rtu协议通讯方法:如果采用非标准modbus协议通讯,可以查看我的这篇博文:java实现串口通讯关于modbus的java开源库主要有以下四种:Jamod:JavaModbus实现:JavaModbus库。该库由DieterWimberger实施。Mod......
  • Java 删除某个目录下面所有的文件
    Java删除某个目录下面所有的文件 FilecodeDir=newFile("C:\\111111");deleteContents(codeDir);//删除111111目录下面所有内容,但不删除111111这个目录deleteContentsAndDir(codeDir);//删除111111目录下面所有内容,最后将111111这个......
  • java开发jwt示例
    pom文件引入<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.1</version></dependency>......
  • Java中泛型详解,非常详细
    前言在前面的几篇文章中,详细地给大家介绍了Java里的集合。但在介绍集合时,我们涉及到了泛型的概念却并没有详细学习,所以今天我们要花点时间给大家专门讲解什么是泛型、泛型的作用、用法、特点等内容。有些粉丝朋友,在之前就一直很好奇,比如List<String>中的<String>部分到底......
  • java实现泛型加法
    之前实践中实现数据的加法,很繁琐,比如下面,每一种类型都要写一遍,能不能用泛型方法实现呢?publicLonggetSum(Long...args){longinit=0L;for(Longarg:args){if(arg==null){arg=0L;}ini......
  • java 对象字段名转化——@SerializedName
    有时调用第三方接口返回的字段名和我们接收对象字段名不一致或不规范,可以使用@SerializedName这个注解进行转换;直接上代码:@DatapublicclassxxxVo{//将别名product_name转为productName@SerializedName("product_name")privateStringproductName;......
  • java中线程的启动方式
     1.继承Thread类重写run方法publicclassTreadTest01extendsThread{@SneakyThrows@Overridepublicvoidrun(){for(inti=0;i<100;i++){Thread.sleep(100);System.out.println(Thread.currentThread().getNam......