面试总结

1、Hibernate的主键生成策略的原理、特点、应用场合
    increment
        对主键值采取自动顺序增长的方式生成新的主键,默认值从1开始。
        原理:在当前应用实例中维持一个变量,以保存当前最大值,
            之后每次需要生成主键值的时候将此值+1作为主键,不依赖于底层的数据库,因此所有的数据库都可以使用。
        缺点:通过increment的生成主键的原理可以推断,此种主键生成策略不适用于集群、同一时段大量用户并发访问的系统,
        既当大量用户同一时间段同时进行插入操作的时候,可能存在取得形同的最大值然后再同时+1的情况,这个时候就会造成主键冲突。
        因此,如果同一数据库有多个实例访问,此方式必须避免使用。
    UUID:
        原理:uuid使用128位uuid算法生成主键,能够保证网络环境下主键唯一性,
            也就能够保证在不同的数据库及不同服务器下主键的唯一性。它适用于所有的数据库。
        特点:能够保证数据库的生成主键的唯一性,但是在生成的主键占用比较多的存储空间。
    Sequence:
        实际上就是一个单行单列的表。
        原理:调用数据库底层存在的sequence生成主键,需要底层数据库的致辞序列,因此他是依赖于数据库的。
        支持sequence的数据库有:Oracle、DB2、PostgreSql、SAPDb等。
    Identity:
        根据底层的数据库,来支持自动增长,不同的数据库使用不同的主键增长方式。
        特点:与底层数据库有关,要求数据库支持Identity,如Mysql中是auto_increment,sql server中是Identity。
        支持的数据库有Mysql、Sql server、DB2、Sybase和PostgreSql。
    Native:
        
*********************************************
    Filter的生命周期:
        程序启动调用Filter的init()方法(永远只调用一次),
        程序停止调用Filter的destroy()方法(永远只调用一次),
        doFilter()方法每次的访问请求如果符合拦截条件都会调用(程序第一次运行,会在servlet调用init()方法以后调用,
        不管第几次,都在调用doGet(),doPost()方法之前)。
    过滤器:
        过滤器不是目标资源,它是在去目标资源前后的过程中执行的(也就是双向的过程),另外,过滤器通常是过滤访问路径,只要
        你访问的资源中包含了我要过滤的路径,我就对你进行过滤,并且它的功能很强大,什么都能被过滤。
         创建的过滤器的,是写一个类并且实现Filter接口。(javax包)过滤器是单例的,服务器只会创建一次。
    过滤器的生命周期:
        void init(FilterConfig)这个方法会在过滤器被创建之后马上执行,并且这个方法只会调用一次,在服务器启动时被创建。
        void doFilter(ServletRequest,ServlerResponse,FilterChain) 每次拦截目标资源的时候都会调用这个方法。
        void destory() 这个方法会在过滤器被销毁之前执行,这个方法只会执行一次,过滤器会在服务器关闭的时候销毁。
        分析:当拦截器执行的是放行的操作的时候,此时doFilter的方法相当于把,要访问的目标资源变成了一个方法,放行的操作就是执行这个
        方法,当这个方法体执行结束的时候,才会执行过滤器中放行之后的操作。并且过滤器是双向的。
    
        
    
    

你可能感兴趣的:(面试知识点,面试知识点)