ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-06-02 20:01:55  阅读:179  来源: 互联网

标签:谢谢 对象 s1 反馈 复习资料 线程 接口 IO 方法


第一章  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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有