其他分享
首页 > 其他分享> > 日常复习资料(保持更新,有错误的欢迎评论区反馈,谢谢!)

日常复习资料(保持更新,有错误的欢迎评论区反馈,谢谢!)

作者:互联网

第一章  java基础
    第一节    java基本数据类型
        Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
        byte、short、int、long、float、doule、char、boolean;
        
        String 不是基本数据类型。
        
    第二节    java访问控制修饰符
        Java 支持 4 种不同的访问权限。
        
        default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

        private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

        public : 对所有类可见。使用对象:类、接口、变量、方法

        protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
        
    第三节    java面向对象(封装、继承、多态)
        封装:将内部实现方式进行隐藏,方便调用者使用,以及避免重复实现代码。
        继承:子类可以继承父类的方法,也可以重写父类的方法。
        多态:多态是基于继承实现的。
    
    第四节    Java 集合框架
        
        ArrayList: 底层基于数组实现容量大小动态变化,允许 null 的存在。第一次add的时候容量会变成10;之后add会判断容量,需要扩充的时候会新增一个数组,再将原来的数据复制进去,
                    它类似的是LinkedList,和LinkedList相比,它的查找和访问元素的速度较快,但新增,删除的速度较慢。线程不安全。如果你需要线程安全就使用Vector。
        
        HashMap:数据结构为 数组+(链表或红黑树),它存储的内容是键值对;允许使用null键和null值,因为key不允许重复,因此只能有一个键为null;HashMap是线程不安全的,无序;
                新增逻辑:第一步,计算出键的hashcode值,该值用来定位这个元素放在数组的位置。分为两种情况,数组索引的位置是空的,这种情况很简单,直接将元素放进去就好了;
                第二种,不是空的,采用equals比较元素是否相同,如果相同直接覆盖,如果不相同则在原元素下使用链表结构存储该元素。
                因为链表元素太多的时候会影响查找效率,所以当链表的元素个数达到8的时候就变成了红黑树;初始容量大小是创建时给数组分配的容量大小,默认值为16,
                当存储的元素个数大于数组容量数乘以加载因子得到的值时,数组就会扩容到原来的两倍;加载因子默认0.75。
                HashMap不是线程安全的;多线程下重新调整HashMap大小的时候,存储在链表中的元素的次序会反过来,如果条件竞争发生了,那么就死循环了;不能在多线程下使用HashMap。
        
        线程安全的Map:HashTable,方法都被synchronized关键字修饰,效率非常低;SynchronizedMap,把传入进行的HashMap对象进行了包装同步而已;
                ConcurrentHashMap - 推荐,设计为非阻塞,在更新时会局部锁住某部分数据;好处是在保证合理的同步前提下,效率很高;坏处是严格来说读取操作不能保证反映最近的更新.
        
        Set:不允许包含相同的元素,可以存在null值;无序;
        HashSet:无序,不同步;
        LinkedHashSet:有序;
        TreeSet:内部实现的是红黑树,默认整形排序为从小到大。
        
    第五节    java基础部分面试题
        
        1、==和equals区别
            ==比较的是值,比较引用的地址值;equals是方法,如果equals不重写的话和==是样的;重写equals方法就必须重写hashCode方法。
            
        2、string和stringbuffer和stringbuilder的区别
            都是final修饰的,stringbuffer速度大于String ,stringbuilder速度大于stringbuffer;stringbuffer线程安全,stringbuilder线程不安全。
        
        3、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
            对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。后面的+=在java中做过特殊处理,可以正常通过。
        
        4、构造器(constructor)是否可被重写(override)?
            构造器不能被继承,因此不能被重写,但可以被重载。
        
        5、Java 中的final关键字有哪些用法?
            (1)修饰类:表示该类不能被继承;(2)修饰方法:表示方法不能被重写;(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)
        
        6、Java的数据结构有那些?
            线性表(ArrayList)、链表(LinkedList)、栈(Stack)、队列(Queue)、图(Map)、树(Tree)
        
        7、++i与i++的区别
            ++i:先赋值,后计算;i++:先计算,后赋值。
        
        8、抽象类(abstract)和接口(interface)有何异同?
            抽象类用extends关键字来继承;接口使用impelements关键字来实现;单继承,多现实。
            抽象类可以有构造函数,接口不能有。
            抽象类除了抽象方法之外,抽象类还可以包含具体数据和具体方法;接口中的所有方法有public静态方法和默认方法,
            使用特点:抽象类定义默认的方法,子类也可以进行重写;接口定义的方法实现类都要进行实现。
            
    第六节    java中级基础部分面试题
        
        1、BIO,NIO,AIO 有什么区别?
            BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
            NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
            AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
        
        2、TCP和UDP
            TCP:tcp面向连接的协议,建立时需要进行三次握手;断开连接需要四次;保证数据的可靠性。
            UDP:udp不需要建立连接,udp发送数据不保证可靠性。
            udp比tcp速度快。
        
        3、JDK动态代理
            运行时生成代理对象,通过代理对象去操作目标对象的方法,目标对象需要实现接口;
            
第二章  常用框架
    
    第一节 Spring Cloud
        Spring Cloud 就是微服务系统架构的一站式解决方案;在平时我们构建微服务的过程中需要做如 服务发现注册 、配置中心 、消息总线 、负载均衡 、断路器 、数据监控 等操作,
        现在能在spring boot的基础上轻松的实现微服务项目构建。
        
        服务发现注册-----Eureka
        
    第二节    spring
        pring的核心特性AOP(面向切面编程)、IOC(DI、控制反转,javaBean管理)。
        AOP:面向切面编程,切入业务代码,添加日志记录。
        IOC:不需要我们去实例化对象,直接注入使用。三种注入方式:接口注入、set方法注入、构造器注入;
        spring解决循环依赖问题:
            1、A的构造方法中依赖了B的实例对象,同时B的构造方法中依赖了A的实例对象
            2、A的构造方法中依赖了B的实例对象,同时B的某个setter需要A的实例对象,以及反之
            3、A的某个setter依赖了B的实例对象,同时B的某个setter依赖了A的实例对象,以及反之
            
        以上三种情况: 第一种Spring无法解决, 第二种只能解决一部分情况, 第三种可以解决;一般采用setter方式注入
        循环依赖解决方式: 三级缓存
        
        spring的三级缓存:分别为3个map;获取对象时先从一级缓存取,取不到从二级取,再取不到从三级取,取到了移动到二级缓存中;如果都取不到则此对象为空;
            三级缓存解决了对象循环依赖和对象引用循环依赖。
        
        cglib动态代理:不需要实现接口即可进行代理,final修饰的方法不可以进行代理。
        
        spring的AOP实现原理:采用jdk的动态代理和cglib动态代理来实现的,如果有实现接口采用jdk动态代理,否则采用cglib动态代理;默认采用jdk动态代理!
        
    
    
            
        
        
        
第三章  数据库
第四章  缓存
第五章  中间件
第六章  并发编程
第七章  各类问题以及解决方案

      

      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      

 

标签:谢谢,对象,s1,反馈,复习资料,线程,接口,IO,方法
来源: https://blog.51cto.com/u_15242378/2847923