日常复习资料(保持更新,有错误的欢迎评论区反馈,谢谢!)
作者:互联网
第一章 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