非常高频的笔试面试题

你好! 如果你想看高频面试题的大白话理解,简单的解释,可以阅读这篇文章(希望达到的目标是每个面试题解释不超过100字),会定期更新。

第一章 JavaSE基础

Java面向对象

  1. 你还记得,Object 里面有哪些方法,
  • 针对对象的
    • clone() //创建并返回此对象的一个副本。
    • equals(Object obj) //用于确认两个对象是否“相同”。
    • toString() //返回该对象的字符串表示。
    • hashCode() //用于获取对象的哈希值。
  • 针对线程的
    • notify() //唤醒在此对象监视器上等待的单个线程。
    • notifyAll() //唤醒在此对象监视器上等待的所有线程。
    • wait() //用于让当前线程失去操作权限,当前线程进入等待序列
  • 其他
    • finalize() //由对象的垃圾回收器调用此方法。
    • getClass() //返回此 Object 的运行类。

第二章 JavaSE高级

反射

  1. 反射,几种生成字节码对象的方式
  • 使用Class.forName 静态方法,(需要知道类的全路径名)
  • 使用.class 方法 (需要知道要操作的class)
  • 使用类对象的getClass()方法(需要有对象实例)

第三章 JavaSE基础

第四章 JavaWEB基础

Http协议

  1. get和post的区别
  • get
    • get通过拼接url进行传递参数,参数可见
    • get请求是可以缓存的
    • get请求页面后退时,不产生影响
    • get一般传输数据大小有限制
  • post
    • post通过body体传输参数,参数不可见
    • post请求不可以缓存
    • post请求页面后退时,会重新提交请求
    • post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大
  1. Http中重定向和请求转发的区别?
  • 转发

    1. 转发是服务器行为
    2. 转发是一次请求
    3. 转发浏览器地址不变
    4. 转发访问的是自己本身的 web 资源,传输的数据不会丢失。
  • 重定向

    1. 重定向是客户端行为
    2. 重定向是两次请求
    3. 重定向浏览器地址发生变化
    4. 重定向可以访问自己 web 之外的资源,传输的数据会丢失

第五章 JavaWEB高级

数据库

第六章 框架

Mybatis

  1. 讲一下Mybatis 中一级缓存和二级缓存的区别
  • 一级缓存
    • 一级缓存的存储作用域为 Session,当 Session flush 或
      close 之后,该 Session 中的所有 Cache 就将清空
    • 一级缓存的介质是内存
    • 一级缓存 : 默认开启,无法关闭。
  • 二级缓存
    • 二级缓存的存储作用域为Mapper
    • 二级缓存的介质可以是内存或者磁盘
    • 二级缓存: 是否开启,根据 mybatis 的具体版本决定
  • 其他
    • 多个一级缓存共享一个二级缓存
    • 用户在进行查询时,会先从二级缓存中查找,若二级缓存中无数据,则从一级缓存中查找,若一级缓存中无记录,则从数据库查找,返回结果后,把结果放入一级缓存,只有一级缓存关闭时,结果才会被保存到放入二级缓存中。
    • 二级缓存与一级缓存其机制相同,都是采用 PerpetualCache,HashMap 存储

第七章 最新技术

Redis

  1. 讲一下你在使用Redis过程中遇到的问题,以及如何解决的
  • 问题一:粒度问题,存哪些数据?
    • 问题描述: item表有88个字段,然而需要展示,以及其他操作涉及到的数据有20个,有没有必要把88个字段都存入redis中?
    • 解决办法: 只需要根据实际情况,决定哪些字段需要存入redis中
  • 问题二:数据量过大,怎么存数据?
    • 问题描述: 批量写入10000条数据,每次set一条数据需要0.3ms,假设每次都要连接redis服务器,耗时3秒,数据量过大,时间太长,
    • 解决办法: 利用redis提供的 管道机制 pipeline, 每次连接放100条,只需要100次,可以提高效率
  • 问题三:怎么防止在redis,多次写入重复的数据
    • 解决办法: 加锁
      Java锁 synchronized ,可能会产生死锁, 从而导致效率低
      可重入锁, Reenlock, ,因为可以设置 加锁时间等待时间,设置3毫秒,超过等待时间,return,解锁时间10毫秒,释放,可以非常有效的避免死锁
  • 问题四:redis数据不一致问题
    • 解决办法一: 先修改数据库,再同步到redis
    • 解决办法二: 设置定时器,每隔一段时间,重新写入redis
    • 解决办法三: 如果是防止redis宕机引起的不一致, 可以考虑配置高可用
  • 问题五:缓存击穿(查询redis与数据库都没有数据)
    • 解决方案一:
      从数据库查询,如果数据库没有,则返回值为Null,判断数据库返回的值,如果为Null,则自定义把标识的字段存到Redis中,这样用户再次查询的时候由于先从reids缓存中查询,redis会有对应的Key获取之前设置的value值,这样就不会再次调用数据库,影响效率等问题。
    • 解决方案二:
      使用 布隆过滤器( bloomFilter),谷歌提供,拿到请求先去查询bloomFilter,存在,return, 不存在,才能进入方法,查询数据库
life is beautiful,我是Alon,如果你有问题,欢迎给我留言。

你可能感兴趣的:(面试)