2021-03-29

Java基础-面试题收集整理二

  1. HashMap和Hashtable在使用上的区别?

    1)HashMap继承自AbstractMap类。但二者都实现了Map接口。
    2)HashMap线程不安全,HashTable线程安全
    3)HashMap是没有contains方法的,而包括containsValue和containsKey方法;hashtable则保留了contains方法,
    4)Hashmap是允许key和value为null值的,用containsValue和containsKey方法判断是否包含对应键值对;HashTable键值对都不能为空,否则包空指针异常。
    
  2. sleep() 和 wait() 有什么不一样的地方?

    sleep是Thread中的静态方法,wait是Object中的方法,
    应用范围不同,sleep可以任用在任何对象中,而wait只能在同步控制方法或同步控制块中使用,Sleep不会释放锁,时间到后自动唤醒,进入可运行状态。而wait是会释放锁的。Wait的必须通过notify或notifyall去唤醒。
    
  3. springMVC的工作流程。

    1.客户端通过url发送请求到前端控制器;
    2.前端控制器找到处理器映射器,通过HandlerMapping完成url到controller的映射;
    3.将url对应的处理器返回;
    4.前端控制器接受到处理器后,通过适配器(HandlerAdapter)调用处理器;
    5.执行处理器;
    6.处理器会返回一个ModelAndView对象给适配器(HandlerAdapter);
    7.通过适配器将ModelAndView对象返回给前端控制器(DispatcherServlet);
    8.通过视图解析器进行视图解析;
    9.返回视图对象到前端控制器;
    
  4. 谈谈mybatis的缓存。

    MyBatis 默认开启了一级缓存,一级缓存是在SqlSession 层面进行缓存的。即,同一个SqlSession ,多次调用同一个Mapper和同一个方法的同一个参数,只会进行一次数据库查询,然后把数据缓存到缓冲中,以后直接先从缓存中取出数据,不会直接去查数据库
    默认二级缓存是不开启的,需要手动进行配置。二级缓存默认会在insert、update、delete操作后刷新缓存,可以手动配置不更新缓存
    Hibernate的一级缓存的目的是为了方便管理实体类的状态(临时状态、持久化状态、游离状态、删除状态)。Hibernate的目的二级缓存是为了减少sql语句。
    
  5. Java中字符流和字节流的区别及使用场景,各自对应的Java类是什么?

    字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。
    字节流默认不使用缓冲区;字符流使用缓冲区。
    字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。
    字节流类是InputStream和OutputStream
    String类型默认就把字符以Unicode规则编码而后存储在内存中
    
  6. 数据库中left join,right join,join有什么区别?

    left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录;
    right join(右联接):返回包括右表中的所有记录和左表中联结字段相等的记录。
    join(等值连接):只返回两个表中联结字段相等的行;
    
  7. 线程有几种状态?并尽可能描述引起状态变化的原因。

    1、新状态:线程对象已经创建,还没有在其上调用start()方法。
    2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回到可运行状态。
    3、运行状态:线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一一种方式。
    4、等待/阻塞/睡眠状态:这是线程有资格运行时它所处的状态。实际上这个三状态组合为一种,其共同点是:线程仍旧是活的,但是当前没有条件运行。换句话说,它是可运行的,但是如果某件事件出现,他可能返回到可运行状态。
    5、死亡态:当线程的run()方法完成时就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。如果在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。出一个,使用完后再放回去。
    
  8. 描述一下public,protected,private,final关键字在Java中的用法?

    public: 公有类型,表示该类、成员、方法 是对外开放的,在任何地方都可以被调用。
    private: 私有类型,表示该类、成员、方法 是私有的,成员、方法 只能被本类所使用。
    protect:受保护的类型,protected 对于子女、朋友来说,就是 public 的,可以自由使用,没有任何限制,而对于其他的外部class,protected 就变成 private 。
    final :在Java中声明类、属性和方法时,可使用关键字final来修饰。 final 标记的类不能被继承。final 标记的方法不能被子类复写。final 标记的变量(成员变量或局部变量)即为常量,只能赋值一次。
    
  9. Java中创建一个对象有哪几种方法?

    使用 new 关键字创建对象
    调用 java.lang.Class 或者 java.lang.reflect.Constuctor 类的 newlnstance() 实例方法
    调用对象的 clone() 方法
    调用 java.io.ObjectlnputStream 对象的 readObject() 方法
    
  10. 什么是同步,什么是异步,什么是阻塞,什么是非阻塞。

    同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成
    异步则指主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知。
    阻塞:线程持续等待资源中数据准备完成,直到返回响应结果。
    非阻塞:线程直接返回结果,不会持续等待资源准备数据结束后才响应结果。
    

空闲时间收集整理的一些题目,不成体系仅供参考
以后有时间会慢慢更新,继续收集。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值