面试系列(一)

面试题目清单:

  1. spring需要哪些配置完成类的初始化,对象初始化流程的是怎么样的,阐述resource的作用;
  2. json格式的http请求需要如何设置header,400是什么原因
  3. 是否使用过事务,哪些情况使编程事务不生效
  4. hashmap是否线程安全,为什么?
  5. IO密集型和计算密集型的服务区别是什么?
  6. 对Mysql进行翻页查询的流程是怎么样的?
  7. 如果使用过springboot,稍微阐述下如果需要自己管理数据源需要做什么?
  8. 如果做过dubbo服务调用,阐述如何实现多版本多实现的兼容?
  9. 如果使用过redis,简单介绍使用过哪些数据结构及场景?
  10. 如果使用过缓存,阐述下使用过哪些cache以及如何实现线程安全?
  11. 如果了解多线程,说一下threadpool 的参数和用法
  12. 编程题:判断一个字符串中有多少种AAB类型的子串,比如“好好学习,好好学习,天天向上”中有2种AAB情况,不计算重复项,

    注意:好好学学吧 的这种情况 只会计算 好好学  不会计算 学学吧情况。

 

问题回答:

  (1)spring需要哪些配置完成类的初始化,对象初始化流程的是怎么样的,阐述resource的作用;

   XML配置方式:spring需要配置bean   填写bean id 和 class 所在的包路径。

     对象初始化流程:首先spring会帮我们准备一个容器,启动ApplicationContent,然后通过创建bean工厂,通过扫描所有的bean形成生成BeanDefinition、合成BeanDefinition、通过类装载器、bean初始化实例与填充属性、执行Aware、初始化所有实例对象。

    resource的作用:激活一个命名资源(namedresource)的依赖注入,把一个bean注入到当前的类中。

  

  (2)json格式的http请求需要如何设置header,400是什么原因

    Content-type: application/json

    400的原因:

    1、bad request意思是“错误的请求",有可能是转发的问题。
    2、invalid hostname意思是"不存在的域名”
 

  (3)是否使用过事务,哪些情况使编程事务不生效

    1、mysql数据库的引擎是不支持事务操作。

    2、Spring的AOP中,如果注入的方法是private,事务是不生效的。

    3、事务代码和代码执行入口的不在统一线程上,事务不生效。

    4、事务情况不是出现在  运行期异常(java.lang.RuntimeException及其子类

 

  (4)hashmap是否线程安全,为什么?

    Hashmap不是线程安全的,HashMap不保证遍历的顺序和插入的顺序是一致的,在put过程中,会有resize操作,在resize操作的时候会造成线程不安全

 

  (5)IO密集型和计算密集型的服务区别是什么?

  IO密集型中任务的大部分时间都在等待IO操作完成,较少消耗CPU资源。

  计算密集型任务的特点是要进行大量的计算,消耗CPU资源。

 

  (6)对Mysql进行翻页查询的流程是怎么样的?

  不清楚

 

  (7)如果使用过springboot,稍微阐述下如果需要自己管理数据源需要做什么?

  通过维护一个数据源信息列表,利用@Bean进行动态数据源类的注册。在配置的核心实现里,需要将默认的配置数据源注册上去。其中lookupKey这里随便取了个默认名,以lookupKey名称切换数据源,达到管理我们的数据源。

 

  (8)如果做过dubbo服务调用,阐述如何实现多版本多实现的兼容?

  在配置dubbo service 和 reference 时加入 version="1.0.0" 的版本控制。

 

  (9)如果使用过redis,简单介绍使用过哪些数据结构及场景?

      String  但存的用于存储  用户登录的session 或 token 用于访问有效性使用。

   Hash  存储、读取、修改用户属性

 

  (10)如果使用过缓存,阐述下使用过哪些cache以及如何实现线程安全?

  不清楚

 

  (11)如果了解多线程,说一下threadpool 的参数和用法

   new  ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, milliseconds,runnableTaskQueue, handler);

  • corePoolSize: 线程池核心线程数
  • maximumPoolSize:线程池最大数
  • keepAliveTime: 空闲线程存活时间
  • unit: 时间单位
  • workQueue: 线程池所使用的缓冲队列
  • threadFactory:线程池创建线程使用的工厂
  • handler: 线程池对拒绝任务的处理策略

  corePoolSize:线程池的核心线程数,线程池中运行的线程数永远不会超过 corePoolSize 个,默认情况下可以一直存活。

  maximumPoolSize:线程池允许的最大线程数。如果队列满了,并且已创建的线程数小于最大线程数,则线程池会再创建新的线程执行任务。值得注意的是如果使用了无界的任务队列这个参数就没什么效果。

  keepAliveTime: 默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作用,直到线程池中的线程数不大于corePoolSize。

  

posted @ 2021-08-12 17:15  tuanz  阅读(133)  评论(0编辑  收藏  举报