首页 > 编程学习 > Java面试题总结(二)

Java面试题总结(二)

发布时间:2022/11/10 0:54:25

一、填空题

  1. 对于short,int,long,float,double,char分别占多数字节 ( 2,4,8,4,8,2 );
  2. java中有哪些线程安全的集( Vector ) 、( Hashtable ) 、( Stack ) 、( ConcurrentHashMap ) 、( enumeration ) ;
  3. SpringCloud常用组件( Eureka )、( Ribbon )、( Hystrix ) 、 ( zuul) ;
  4. Redis数据类型 ( String ) 、( zset )、( set) 、( list )、 ( hash );
  5. Redis持久化方式 ( rdb ) 、( aof );
  6. java程序的基本要素是( ),其实现包括两部分( 类头部 ) 和( 类主体 ),封装了一类对象的( 属性 )和 ( 方法 );
  7. java捕捉异常是通过( try catch finally )结构处理异常,其中( try )代码块包含了可能发生异常的代码,( catch )代码块用来捕获处理异常,( finally )代码块用于释放占用的资源;
  8. 创建线程有( )种方式,分别是( 实现Runnable接口 )、( 继承Thread类 )、( 使用Callable ) 、( 使用线程池 )。
  9. spring的七大模块分别是 ( Spring Core )、 ( Spring AOP ) 、( Spring ORM )、( Spring Web ) 、( Spring Context ) 、 ( Spring DAO )、( Spring Web MVC ),其事务的四大特性是( 原子性 )、( 一致性 )、( 隔离性 )、( 持久性 )。
  10. 列举SpringMVC中的常用注解( @Autowired )、( @Controller )、( @RequestMapping ) 、( @PathVariable ) (写4个即可)。
  11. spring有( )种事务管理方式,分别是( 编程式事务 )和( 声明式事务 )。spring的事务管理接口主要有( TransactionDefinition ) 、( PlatFormTransactionManager )、
    TransactionStatus );
  12. spring的事务隔离级别分别是( ISOLATION_DEFAULT )、ISOLATION_READ_UNCOMMITTED)、( ISOLATION_READ_COMMITTED )、( ISOLATION_REPEATABLE_READ )、( ISOLATION_SERIALIZABLE );
  13. 请列出5个mybatis动态sql的标签( where )、 ( sql ) 、( choose ) 、( set ) 、( foreach );
  14. 比较常用的数据结构有哪些【数组】、【队列】、【链表】、【栈】、【堆】、
    树】、【图】、【串】;
  15. 常见的线程池有( FixedThreadPool )、( CachedThreadPool )、(
    ScheduledThreadPool )、( SigleThredExecutor ) ;
  16. 线程的终止—班可以通过两种方法实现:自然撤销或者是调用( interrupt )方法;
  17. Java中的字符输出流都是抽象类( WriterStream )的子类;
  18. 使用JDBC进行查询数据库的7个标准步骤是:载入JDBC驱动器,定义链接的网址URL、建立链接、建立Statement对象、执行查询、处理结果、( 释放相关资源 );
  19. java中编程实现多线程应用两种途径:一种是通过创建Thread类的子类创建线程,另一种是通过创建( Runnable )创建线程;
  20. java.lang )包是java语言的核心包,它包含了运行java程序必不可少的系统类,在使用这个包中的类时不需要import;
  21. 如果一个类在声明时没有包含extends关键字,那么默认这个类直接继承( Object )类;
  22. 异常处理流程中,其中在( try )代码块中,通常写用于释放被占用的相关资源;
  23. 对于int型变量,内存分配( 4 )个字节;
  24. Java源程序编译后生成的字节码文件扩展名为( .class );
  25. InnoDB存储引擎对MVCC的实现原理( DB_TRX_ID )、( DB_ROLL_PTR )、
    DB_ROW_ID );

二、简答题

  1. 创建线程有几种不同的方式
    四种方式:
    1、继承Thread类
    2、实现Runnable接口
    3、实现Callable接口,结合FutrueTask使用
    4、利用该线程池ExecutorService、Callable、Future来实现

  2. 同步方法和同步代码块的区别是什么?
    相同点:
    同步方法就是在方法前加关键字synchronized,然后被同步的方法一次只能有一个线程进入,其他线程等待。而同步代码块则是在方法内部使用大括号使得一个代码块得到同步。同步代码块会有一个同步的“目标”,使得同步块更加灵活一些(同步代码块可以用过“目标”决定需要锁定的对象)。一般情况下,如果此“目标”为this,同步方法和同步代码块没有太大的区别。
    区别:
    同步方法直接在方法上加synchronized实现加锁,同步代码块则在方法内部加锁。很明显,同步方法锁的范围比较大,而同步代码块范围要小一点。一般同步的范围越大,性能就越差。所以一般需要加锁进行同步的时候,范围越小越好,这样性能最佳。

  3. ArrayList和LinkedList的区别是什么?

    1、数据结构不同
    ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构
    2、效率不同
    ArrayList的随机访问(查询)效率高,插入和删除效率低,LinkedList的查询效率低,而删除和插入效率高,因为不需要移动元素。
    3、自由性不同
    ArrayList自由性比较低,因为它需要手动设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加元素,同通过调用下标进行使用,而LinkedList自由性较高,能够随数据量的变化而变化,但是它不便于使用。

  4. BIO、NIO、AIO有什么区别?

    BIO,NIO和AIO是Java网络编程的三种模型

    BIO:同步并阻塞,服务实现模式为一个连接对应一个线程,即客户端发送一个连接,服务端要有一个线程来处理。如果连接多了,线程数量不够,就只能等待,即会发生阻塞。

    NIO:同步非阻塞,服务实现模式是一个线程可以处理多个连接,即客户端发送的连接都会注册到多路复用器上,然后进行轮询连接,有I/O请求就处理

    AIO:异步非阻塞,引入了异步通道,采用的是proactor模式,特点是:有效的请求才启动线程,先有操作系统完成在通知服务端

    • 应用场景:

      BIO:适用连接数目比较小且固定的架构,对服务器要求比较高,并发局限于应用中

      NIO:适用连接数目多且连接比较短的架构,如:聊天服务器,弹幕系统等,编程比较复杂

      AIO:适用连接数目多且连接长的架构,如相册服务器

    • BIO和NIO的区别

      1. BIO主要是以I/O流的形式处理数据;NIO以I/O块(buffer)的形式处理数据,效率:块>流

      2. BIO是阻塞的,NIO是非阻塞的

      3. BIO主要是以字节流和字符流操作,NIO是基于channel(通道)、buffer(缓冲区)操作的;selector(选择器)是用来监听channel的

      4. BIO是单向的,要么是输入流要么是输出流,NIO是双向的,可以从channel往buffer读写数据,同时buffer也可以向channel读写数据

  5. synchronized和volatile的区别是什么?
    1、volatile仅能使用在变量级别;synchronized则可以使用在变量、方法和类级别的
    2、volatile仅能实现变量的修改可见性,并不能保证原子性;synchronized则可以保证变量的修改可见性和原子性
    3、volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞
    4、volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化

Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式