zoukankan      html  css  js  c++  java
  • java面经学习002

    2. Java都有哪些map,分别怎么实现的,具体讲

    3. 除了LinkedHashMap,你还知道哪些有序map

    4. ConcurrentHashMap讲一讲

    5. 为什么要有线程池

    6. 线程池有哪几类?有什么区别?有哪些参数?拒绝策略有哪些

    7. 阻塞队列都有哪几种,有什么区别

    8. Java的反射怎么理解

    9. Spring的IOC和AOP怎么理解

    10. Spring项目启动的时候会加载哪些资源,顺序是怎么样的

    11. 浏览器输入一个URL,会发生什么,整个过程说一下

    12. Http讲一讲,请求有哪些内容,响应有哪些内容

    13. 你笔试分好高,平时刷过很多题吗?怎么刷的?

    2. Java都有哪些map,分别怎么实现的,具体讲

    Map 接口存储一组键值对对象,提供key(键)到value(值)的映射。key和value之间存在单向一对一关系,即通过指定的key,总能找到唯一的、确定的value。从Map中取出数据时,只要给出指定的key,就可以取出对应的value,Map的key不能重复,如果重复添加,会覆盖原来的值。
    常用的有:HashMap、HashTable、TreeMap、ConcurrentHashMap、LinkedHashMap、weakHashMap

    HashMap是可以序列化的。是线程不安全的,底层主要是基于数组和链表实现,有相当快的查询速度,HashMap的底层是通过链表来解决hash冲突的。具体就是把相同hash值的HashMap,通过链表的形式进行存储,
    HashTable是可以序列化的。是线程安全的,由synchronized修饰,不允许保存null,数据结构与HashMap是相同的
     TreeMap的实现是红黑树算法的实现
     ConcurrentHashMap采用了非常精妙的"分段锁"策略,ConcurrentHashMap的主干是个Segment数组。Segment继承了ReentrantLock,所以它就是一种可重入锁(ReentrantLock)。在ConcurrentHashMap,一个Segment就是一个子哈希表,Segment里维护了一个HashEntry数组,并发环境下,对于不同Segment的数据进行操作是不用考虑锁竞争的。
     LinkedHashMap是继承于HashMap,是基于HashMap和双向链表来实现的。

     

    3. 除了LinkedHashMap,你还知道哪些有序map

     TreeMap、

    4. ConcurrentHashMap讲一讲

     https://www.cnblogs.com/ylspace/p/12726672.html

    5. 为什么要有线程池

    线程使应用能够更加充分合理的协调利用cpu 、内存、网络、i/o等系统资源。

    线程的创建需要开辟虚拟机栈,本地方法栈、程序计数器等线程私有的内存空间。

    在线程的销毁时需要回收这些系统资源。频繁的创建和销毁线程会浪费大量的系统资源,增加并发编程的风险。

    另外,在服务器负载过大的时候,如何让新的线程等待或者友好的拒绝服务?这些丢失线程自身无法解决的。所以需要通过线程池协调多个线程,并实现类似主次线程隔离、定时执行、周期执行等任务。线程池的作用包括:

    • 利用线程池管理并复用线程、控制最大并发数等。
    • 实现任务线程队列缓存策略和拒绝机制。
    • 实现某些与时间相关的功能,如定时执行、周期执行等。
    • 隔离线程环境。比如,交易服务和搜索服务在同一台服务器上,分别开启两个线程池,交易线程的资源消耗明显要大;因此,通过配置独立的线程池,将较慢的交易服务与搜索服务隔开,避免个服务线程互相影响。

    6. 线程池有哪几类?有什么区别?有哪些参数?拒绝策略有哪些

     https://www.cnblogs.com/gaopengpy/p/12148971.html

    newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor、newScheduleThreadPool、newSingleThreadScheduledExecutor

    7. 阻塞队列都有哪几种,有什么区别

    BlockingQueue

     https://www.iteye.com/blog/wsmajunfeng-1629354

    “生产者”和“消费者”模型中,生产者产出数据的速度和消费者消费的速度,,我们每个程序员都必须去自己控制这些细节,尤其还要兼顾效率和线程安全,而这会给我们的程序带来不小的复杂度。

    当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列。

    当队列中填满数据的情况下,生产者端的所有线程都会被自动阻塞(挂起),直到队列中有空的位置,线程被自动唤醒。

    8. Java的反射怎么理解

    https://www.cnblogs.com/jiangym/p/13560921.html

     Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。

    9. Spring的IOC和AOP怎么理解

    https://www.cnblogs.com/chenssy/p/9576769.html

    Inversion of Control 控制反转 它还有一个别名为 DI(Dependency Injection),即依赖注入。

    所谓 IOC ,就是由 Spring IOC 容器来负责对象的生命周期和对象之间的关系

    1. 谁控制谁:在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IOC 容器后,则直接由 IoC 容器来控制。所以“谁控制谁”,当然是 IoC 容器控制对象。
    2. 控制什么:控制对象。
    3. 为何是反转:没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中,依赖的对象由原来的主动获取变成被动接受,所以是反转。
    4. 哪些方面反转了:所依赖对象的获取被反转了

    它降低组件之间的耦合度,实现软件各层之间的解耦,同时在保障不改变源码的情况下实现外部对象动态的注入到组件中,这样就能减少后期维护成本。

    aop是主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

    10. Spring项目启动的时候会加载哪些资源,顺序是怎么样的

    https://www.cnblogs.com/jiangym/p/13567617.html

    11. 浏览器输入一个URL,会发生什么,整个过程说一下 

    12. Http讲一讲,请求有哪些内容,响应有哪些内容

    HTTP相关知识学习  https://www.cnblogs.com/jiangym/p/13592327.html

  • 相关阅读:
    win7上装红米4手机驱动提示空间不足
    HBuilder中改造console.info
    Thinkphp 出现 “_CACHE_WRITE_ERROR” 错误的可能解决办法
    Linux上跑两个版本的php,5.4.45和5.3.24
    JavaScript中对日期格式化的新想法.
    怪不得知乎急着招前端开发.
    菜鸟利用python处理大文本数据的血泪路
    Python:数字
    Python:列表,元组
    Python:映像、集合
  • 原文地址:https://www.cnblogs.com/jiangym/p/13155419.html
Copyright © 2011-2022 走看看