• java面试问题收集(2)


    1 Integer int相等问题
    Integer对象和int比较的时候会有一个拆箱的过程,始终相等
    Integer和new Integer对象不会相等,引用不同
    两个Integer对象比较,Integer ii=3,等同于Integer ii=Integer.valueof(3);当值在-128-127之间从cache中取回引用,其他的new,所以在区间内的对象相等,值相等
    Integer.equals是比较intvalue()
    String.equals也是比较内容是否相同
    StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,而Object类中的equals方法是用来比较“地址”的
     
    2 HashMap工作原理
    负载因子 0.75,自动resize参考
    选择常量作为键值,这也是选择String的原因
    数据存放在Entry[]自定义数组里,Entry实现了链表功能,也就是bucket(key,value,next(key,value))
     
     
    Vector 和ArrayList
    vector线程安全的,其他都和ArrayList一样
     
     
    ArrayList和CopyOnWriteArrayList 
    HashMap和ConcurrentHashMap
    itorator遍历增删改 ,前者都是fail-fast,有增减元素时候触发,因为后者 Iterator重新实现了,不会checkForComodification
     
     
    5 ThreadLocal
    线程隔离的秘密,就在于ThreadLocalMap这个类。ThreadLocalMap是ThreadLocal类的一个静态内部类, 每个线程中都有一个独立的ThreadLocalMap副本,它所存储的值,只能被当前线程读取和修改
     
    6 handlermapping放的什么
     
    7事务嵌套
     
    8 mybatis原理
         连接池
         当我们需要创建SqlSession对象并需要执行SQL语句时,这时候MyBatis才会去调用dataSource对象来创建java.sql.Connection对象
         MyBatis将连接池中的PooledConnection分为两种状态: 空闲状态(idle)和活动状态(active),这两种状态的PooledConnection对象
    分别被存储到PoolState容器内的idleConnectionsactiveConnections两个List集合中
         PooledConenction实现了InvocationHandler接口,并且,proxyConnection对象也是根据这个它来生成的代理对象, 我们调用PooledDataSource
    的getConnection()方法返回的就是这个proxyConnection对象,当我们调用此proxyConnection对象上的任何方法时,都会调用PooledConnection对象内invoke()方法
     
        Configuration 加载 
         org.apache.ibatis.session.Configuration 对象作为一个所有配置信息的容器,Configuration对象的组织结构和XML配置文件的组织结构几乎完全一样
    MyBatis初始化的过程,就是创建 Configuration对象的过程, mybatis的初始化就发生在 SqlSessionFactoryBuilder.builder, 方法中调用了XMLConfigBuilder的parse()方法,然后返回了Configuration对象
     
          MyBatis的事务管理的实现机制
         
           MyBatis的事务管理分为两种形式:
            一、使用JDBC的事务管理机制:即利用java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())等               
            二、使用MANAGED的事务管理机制:这种机制MyBatis自身不会去实现事务管理,而是让程序的容器如(JBOSS,Weblogic)来实现对事务的管理 
     
         mybatis框架分为:接口层、数据处理层(框架支撑)
              接口层  MyBatis和数据库的交互有两种方式:
           a.使用传统的MyBatis提供的APISqlSession根据Statement ID, 在mybatis配置对象Configuration中获取到对应的MappedStatement对象,
              然后调用mybatis执行器来执行具体的操作。
            b. 使用Mapper接口,纯粹是为了满足面向接口编程的需要,原理和a一样
              框架支撑  事务管理机制  连接池管理机制 缓存机制
     
     
     
    <context:property-placeholder  location="classpath:/config/ibatis/jdbc.properties"/>
     
    CountDownLatch用来进行多线程测试
     
    redis过期时间设置
    hash内部key设置过期时间?
     
    Spring MVC的实例化和自动装配工作
         <content:component-scan base-package="" annotation-config="true"/>
         <aop:aspectj-autoproxy />
         系统初始化时,component-scan 扫描(Controller、Service、Repository)后将BeanDefinition实例放入BeanFactory,
    同时annotation-config的设置注册AutowiredAnnotationBeanPostProcessor(实例执行了自动装配 )到bean工厂,
    Bean实例初始化是在第一次请求Bean实例的时候,spring调用BeanFactory的getBean,Spring会检查确定调用的构造器,并实例化该Bean.
    实例化完成后,Spring会调用Bean工厂的populateBean方法, populateBean方法便是调用了BeanPostProcessor实例来完成属性
    元素的自动装配工作,来填充bean实例的属性,也就是我们前面提到的自动装配了,Spring会检查被装配的属性是否存在自动装配的
    其他属性,然后递归调用getBean方法,直到所有@Autowired的元素都被装配完成
    @Autowired是根据类型进行自动装配的。如果当spring上下文中存在不止一个UserDao类型的bean时, 可以使用@Qualifier配合@Autowired来解决这些问题
     
    @Aspect
    public class aspectAnotationClass{
         @PointCut("execution(* *(..)&&annotation(com...classname))")
         public void gg(){}
     
         @Before("gg()")
         public void beforefun(){}
         @After("gg()")
         public void afterfun(){}
         @Around("gg()")
         public Object aroundfun(ProceedingJoinPoint pjp){}
         
    }
    http://www.oracle.com/technetwork/java/javase/downloads/index.html
  • 相关阅读:
    C#子线程抛出的异常给主线程
    WebBrowser1_DocumentCompleted事件里面无法触发InvokeMember("click")
    判断页面是否完全载入对ExtendedWebBrowser的DocumentCompleted再扩展
    webBrowser载入网页机制网页加载是否完毕判断
    验证码识别必备,c#分析bmp图形文件,一个有用的BMP图形分析类
    ConcurrentDictionary数据结构的使用方法
    手机号码归属地查询api接口
    Eclipse自动提示
    学计算机该看的书
    天气预报api整理
  • 原文地址:https://www.cnblogs.com/ai464068163/p/7354210.html
Copyright © 2020-2023  润新知