zoukankan      html  css  js  c++  java
  • 阿里巴巴口碑网面试题 一面

    反射的应用很多,很多框架都有用到
    spring 的 ioc/di 也是反射….
    javaBean和jsp之间调用也是反射….
    struts的 FormBean 和页面之间…也是通过反射调用….
    JDBC 的 classForName()也是反射…..
    hibernate的 find(Class clazz) 也是反射….
    反射还有一个不得不说的问题,就是性能问题,大量使用反射系统性能大打折扣。怎么使用使你的系统达到最优就看你系统架构和综合使用问题啦,这里就不多说了。
     
    session 与 cookie 区别
    cookie 是 Web 服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个 Web 服务
    器存储 cookie。以后浏览器在给特定的 Web 服务器发请求的时候,同时会发送所有为该服
    务器存储的 cookie。下面列出了 session 和 cookie 的区别:
    无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用 cookie,
    但是, session 仍然是能够工作的,因为客户端无法禁用服务端的 session。
     
    List 和 Set 区别
    List,Set都是继承自Collection接口
    List特点:元素有放入顺序,元素可重复
    Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉
    (注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)
    Set和List对比:
    Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
    List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
    List 和 Map 区别
    List是对象集合,允许对象重复。
    Map是键值对的集合,不允许key重复。
    Arraylist 与 LinkedList 区别
    Arraylist:
    优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)。
    缺点:因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低。
    LinkedList:
    优点:LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势。LinkedList 适用于要头尾操作或插入指定位置的场景
    缺点:因为LinkedList要移动指针,所以查询操作性能比较低。
     
    适用场景分析:
    当需要对数据进行对此访问的情况下选用ArrayList,当需要对数据进行多次增加删除修改时采用LinkedList。
     
    ArrayList和Vector都是用数组实现的,主要有这么三个区别:
    1. Vector是多线程安全的,线程安全就是说多线程访问同一代码,不会产生不确定的结果。而ArrayList不是,这个可以从源码中看出,Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;
    2. 两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同。
    3. Vector可以设置增长因子,而ArrayList不可以。
    4. Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。
    适用场景分析:
    1. Vector是线程同步的,所以它也是线程安全的,而ArrayList是线程异步的,是不安全的。如果不考虑到线程的安全因素,一般用ArrayList效率比较高。
    2. 如果集合中的元素的数目大于目前集合数组的长度时,在集合中使用数据量比较大的数据,用Vector有一定的优势。
     
    HashSet 和 HashMap 区别
    set是线性结构,set中的值不能重复,hashset是set的hash实现,hashset中值不能重复是用hashmap的key来实现的。
    map是键值对映射,可以空键空值。HashMap是Map接口的hash实现,key的唯一性是通过key值hash值的唯一来确定,value值是则是链表结构。
    他们的共同点都是hash算法实现的唯一性,他们都不能持有基本类型,只能持有对象
     
     
    HashMap 和 ConcurrentHashMap 的区别
    ConcurrentHashMap是线程安全的HashMap的实现。
    (1)ConcurrentHashMap对整个桶数组进行了分割分段(Segment),然后在每一个分段上都用lock锁进行保护,相对于HashTable的syn关键字锁的粒度更精细了一些,并发性能更好,而HashMap没有锁机制,不是线程安全的。
    (2)HashMap的键值对允许有null,但是ConCurrentHashMap都不允许。
     
     
     
     
    基本数据类型和引用数据类型的区别:
    基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上;
    引用数据类型在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。
    例如,有一个类Person,有属性name,age,带有参的构造方法,
    Person p = new Person("Tom",20);
    在内存中的具体创建过程是:
    1.首先在栈内存中位其p分配一块空间;
    2.在堆内存中为Person对象分配一块空间,并为其三个属性设初值"",0;
    3.根据类Person中对属性的定义,为该对象的两个属性进行赋值操作;
    4.调用构造方法,为两个属性赋值为"Tom",20;(注意这个时候p与Person对象之间还没有建立联系);
    5.将Person对象在堆内存中的地址,赋值给栈中的p;通过句柄p可以找到堆中对象的具体信息

  • 相关阅读:
    laravel blog 一
    dede:channelartlist currentstyle高亮显示
    dede调用导航/幻灯
    rmp 安装LNMP环境
    无极分类之子孙树、父辈树
    创始人 密码
    mysql报错显示法文解决办法
    渐变色背景
    laravel sendmail
    工作流系统webservice服务
  • 原文地址:https://www.cnblogs.com/kkdn/p/9039654.html
Copyright © 2011-2022 走看看