)
Java基础—基础知识一、八种基本数据类型的大小以及他们的封装类。byte(Byte) 1 short(Short) 2 ,int(Integer) 4 ,long(Long) 8 ,float(Float) 4 ,double(Double)8,boolean(Boolean),char(Character)2二、Switch能否用string做参数switch语句中的变量类型可以使byteshortintchar。从jdk1.7后可以使用String类型是通过switch中的String.hashcode将String转换成int进行判断的。三、equals与的区别。操作符是用来比较两个变量的值是否相等即就是比较变量在内存中的存储地址是否相同equals方法时String类从Object类中继承的被用来检测两个对象的内容是否相同。四、String snew String(‘xyz’);创建了几个object对象?会创建一个String类型的变量s。在类加载到此处之前没有出现“xyz”字面量的话加载此处会创建一个对应“xyz”的String常量对象。在符合规范的JVM上执行到此处new关键字会创建一个String对象。这里也整理了一份最新的Java核心知识点需要的朋友可以在文末获取五、 Object有哪些公用方法1、clone()创建斌返回此对象的副本2、equals()判断3、getclass返回object的运行类4、hashcode返回对象的哈希码值5、notify唤醒正在等待对象监听器的单个进程6、notifyAll唤醒正在等待对象监听器的所有进程7、wait导致当前线程等待直到另一个线程调用该对象的 notify()方法或 notifyAll()方法。8、toString返回此对象的字符串表示形式9、finalize当垃圾收集确定不需要该对象时垃圾回收器调用该方法六、Java的四种引用强弱软虚用到的场景。强引用垃圾回收器不会回收软引用如果内存空间足够垃圾回收器就不会进行回收如果内存空间不足垃圾回收器就会进行回收弱引用一旦发现了只有弱引用的对象垃圾回收器就会进行回收。虚引用如果发现该对象还具有虚引用就会在回收该对象之前吧这个虚引用加入到与之关联的引用队列中。七、静态变量和实例变量的区别。静态变量前要加上关键字static实例变量则不会。实例变量是属于某个对象的属性必须创建了实例对象其中的实例变量才会分配空间才能使用这个实例变量。静态变量不属于任何的实例对象而是属于类也称为类变量只要程序加载了类的字节码不用创建任何实例对象就会被分配空间。总之就是静态变量不需要创建任何的对象就可以直接使用而实例变量需要先创建实例对象才能被使用。八、 Overload和Override的区别重载Overload表示的是同一个类中可以有多个相同名称的方法但这些方法的参数列表不同即就是参数参数或参数类型不同。重载时返回值当然可以不一样但是如果参数列表完全一致时不能通过返回类型不一致而实现重载这是不可以的。重写Override表示子类中的方法可以与父类中的方法名称和参数完全相同通过子类创建的对象来调用这个方法时将调用子类中定义的方法即就是子类中的该方法将父类的该方法覆盖了。子类覆盖父类方法时只能抛比父类更少或者更小的异常。重写的方法其返回必须和被覆盖的方法返回一致。九、抽象类和接口的区别。抽象类可以有默认的方法进行实现可以有构造器可以有main方法进行运行可以直接在该类中添加实现的方法接口没有默认的方法进行实现没有构造器不可以使用main方法进行运行在接口中添加方法时需要在具体实现的类中添加方法。十、String、StringBuffer与StringBuilder的区别。String表示内容不可修改的字符串StringBuffer表示内容可以修改的字符串String覆盖了equals方法和hashcode方法而StringBuffer没有覆盖两个方法所以StringBuffer对象存储到java集合类中时会出现问题。StringBulider也表示内容可以修改的字符串但是其线程是不安全的运行效率高。十一、 Java面向对象的特征与含义。封装、继承、抽象、多态1、封装封装的目的在于实现程序的“高内聚低耦合”防止程序相互依赖而带来的变动影响。封装是保证是把对同一事物进行操作的方法和相关的方法放在同一个类中把方法和他操作的数据放在同一个类中。2、抽象抽象就是找出事物的相似和共性然后将这些事物归为同一类这个类只考虑这些事物的相似和共性忽略和当前主题不相关的因素。3、继承子类继承父类的内容作为自己的内容可以加入新的内容或者是修改父类的内容而更加适合特殊的需要。提高了额程序的可重用性和可扩张性。4、多态多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定而是在程序运行期间才确定即一个引用变量倒底会指向哪个类的实例对象该引用变量发出的方法调用到底是哪个类中实现的方法必须在由程序运行期间才能决定。十二、java多态的实现接口实现继承父类进行方法重写同一个类中进行方法重载。十三、error和exception区别error表示有可能恢复但比较困难的的一种严重问题程序是不能进行处理的exception表示一种设计或者实现问题。十四、运行时异常和一般异常的区别异常表示程序运行过程中可能出现的非正常状态。运行时异常表示虚拟机的通常操作中可能遇到的异常是一种常见的运行错误。java编译器要求方法必须声明抛出可能出现的非运行时异常但是并不要求必须声明抛出未被捕获的异常十五、Java中的异常处理机制和简单原理和应用JAVA程序违反了JAVA的语义规则时JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发 NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查程序员可以创建自己的异常并自由选择在何时用 throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。十六、Java语言如何进行异常处理throwsthrowtry catch finally代表什么意义try块中可以抛出异常吗?Java通过面向对象的方法进行异常处理把各种不同的异常进行分类并提供了良好的接口。在Java中每个异常都是一个对象它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象该对象中包含有异常信息调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的try、catch、throw、throws和finally。一般情况下是用try来执行一段程序如果出现异常系统会抛出throws一个异常这时候你可以通过它的类型来捕捉catch它或最后finally由缺省处理器来处理。用try来指定一块预防所有”异常”的程序。紧跟在try程序后面应包含一个catch子句来指定你想要捕捉的”异常”的类型。throw语句用来明确地抛出一个”异常”。throws用来标明一个成员函数可能抛出的各种”异常”。Finally为确保一段代码不管发生什么”异常”都被执行一段代码。可以在一个成员函数调用的外面写一个try语句在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句”异常”的框架就放到堆栈上面直到所有的try语句都完成。如果下一级的try语句没有对某种”异常”进行处理堆栈就会展开直到遇到有处理这种”异常”的try语句。十七、 try catch finallytry里有returnfinally还执行么1、finally语句总会执行2、如果try、catch中有return语句finally中没有return那么在finally中修改除包装类型和静态变量、全局变量以外的数据都不会对try、catch中返回的变量有任何的影响包装类型、静态变量会改变、全局变量3、尽量不要在finally中使用return语句如果使用的话会忽略try、catch中的返回语句也会忽略try、catch中的异常屏蔽了错误的发生。4、finally中避免再次抛出异常一旦finally中发生异常代码执行将会抛出finally中的异常信息try、catch中的异常将被忽略十八、 Java中final、finally和finalize的区别final 用于声明属性方法和类分别表示属性不可变方法不可覆盖类不可继承。内部类要访问局部变量局部变量必须定义成final类型例如一段代码……finally是异常处理语句结构的一部分表示总是执行。finalize是Object类的一个方法在垃圾收集器执行的时候会调用被回收对象的此方法可以覆盖此方法提供垃圾收集时的其他资源回收例如关闭文件等。JVM不保证此方法总被调用。十九、 常见的运行时异常系统异常是RuntimeException的子类常见的系统异常有ArrayIndexOutOfBoundsException - 数组越界访问ClassCastException - 类型转换异常NullPointerException - 试图访问一空对象的变量、方法或空数组的元素IllegalArgumentException - 方法的参数无效NoClassDefFoundException - JAVA运行时系统找不到所引用的类二十、Collection框架的结构集合框架(Collection Framework)泛指java.util包的若干个类和接口.如Collection,List,ArrayList,LinkedList,Vector(自动增长数组),HashSet,HashMap等。集合框架中的类主要封装的是典型的数据结构,如动态数组,链表,堆栈,集合,哈希表等.集合框架类似编程中经常用到的工具类,使得编码这专注于业务层的实现,不需要从底层实现相关细节—“数据结构的封装”和”典型算法的实现”。二十一、Collection包结构Collection是集合类的上级接口是单列集合。继承他的接口主要有Set 和List.Set接口的子接口有HashSetTreeSetList接口的子接口有ArraylistLinkedListVector二十二、Collection与Collections的区别。Collection是集合类的上级接口继承他的接口有Set和ListCollections是针对集合类的一个帮助类它提供一系列的静态方法实现集合的搜索排序线程安全等操作。二十三、 Colection框架中实现比较要实现什么接口comparable只包含compareTo方法comparatorcompare和equals二十四、Map、Set、List、Queue、Stack的特点与用法。1、Map是以键值对的形式进行存储的其中key是唯一不可重复的value的可以重复当插入的值是key相同后加入的会将已有的覆盖。他有几个具体的实现类包括Treemap和HashMapTreeMap是有序的HashMap是无序的。2、List 有序可重复|–ArrayList底层数据结构是数组查询快增删慢线程不安全效率高|–Vector底层数据结构是数组查询快增删慢线程不安全效率高|–LinkedList底层数据结构是链表查询慢增删块线程安全效率低3、Set 无序唯一|–HashSet底层数据结构是哈希表如何保证元素的唯一性依赖两个方法hashCode和equals|–LinkedHashSet底层数据结构是链表和哈希表由链表保证元素有序由哈希表保证元素唯一|–TreeSet底层数据结构是红黑树如何保证元素的排序自然排序让元素所属的类实现Comparable接口比较器排序让集合接收一个Comparator的实现类对象如何保证元素的唯一性根据比较的返回值是否是0来决定的4、Query队列遵循先进先出的原则不允许插入null值其中提供了相应的进队和出队的方法建议使用offer方法来添加元素使用poll方法删除元素5、Stack遵从后进先出的原则继承自Vector。他通过5个操作对Vector类进行扩展它提供了push和pop操作以及去堆栈顶点的peek方法测试堆栈是否为空的empty方法6、使用方法如果涉及到堆栈队列等操作建议使用List对于快速插入和删除元素建议使用LinkedList需要快速随机访问元素建议使用ArrayList二十五、 Set里面的元素不能重复用什么方法区分重复与否Set里的元素是唯一不能重复的元素是否重复使用equals方法进行判断。equals方法和方法决定引用值是否指向同一对象equals在类中被覆盖为的是两个分离的对象的内容和类型相匹配的话返回真值。二十六、HashMap和Hashtable的区别。1、Hashtable是基于Dictionary类的HashMap是Map接口的一个实现类2、Hashtable是线程安全的即是同步的HashMap线程不是安全的不是同步的。3、HashMap可以将空值作为key或value二十七、 HashMap、LinkedHashMap、TreeMap的区别。1、HashMap是根据键的hashcode值存储数据根据键可以直接获取它的值具有很快的访问速度取得的数据完全是随机的2、LinkedHashMap保存了记录的插入顺序在使用Iterator进行遍历的时候先得到的肯定是先插入的数据可以在构造时带参数按照应用次数来进行排序3、TreeMap实现SortMap接口能够把它保存的记录根据键排序。默认的是升序排序也可以指定排序的比较器进行遍历的时候得到的是排序过的记录。二十八、HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。1、HashMap是java数据结构中两大结构数组和链表的组合。HashMap底层数组数组中的每一项又是一个链表。程序会先根据key的hashcode方法返回值决定该Entry在数组中的存储位置如果该位置上没有元素就会将元素放置在此位置上如果两个Entry的key相同会调用equals返回值是true则覆盖原来的value值返回false则会形成Entry链位于头部。2、ArrrayList的底层实现是数组在执行add操作时会先检查数组 大小是否可以容纳新的元素如果不够就会进行扩容。然后会将原来的数据拷贝到新的数组中。3、LinkedList底层是一个链表其实现增删改查和数据结构中的操作完全相同而且插入是有序的。4、LinkedHashMap的底层结构式是双链表其他的逻辑处理与HashMap一致同样没有锁保护多线程使用时存在风险。5、ConcurrentHashMap是segment数组结构和HashEntry数组结构组成的segment在ConcurrentHashMap中充当锁的角色HashEntry用于存储键值对数据。segment的结构是数组和链表一个segment中有一个HashEntry每个HashEntry是一个链表结构的元素。对HashEntry中的数据进行修改时需要先获得它所对应的segment锁。每个ConcurrentHashMap默认有16个segment。二十九、迭代器IteratorIterator提供了统一遍历操作集合元素的统一接口Collection接口实现Iterator接口。每个集合都通过实现Iterator接口中的iterator方法返回实例然后对元素进行迭代操作但是在迭代元素的时候不能使用集合的方法删除元素否则会抛出异常可以使用Iterator接口中的remove方法进行删除。三十、 快速失败fail-fast和安全失败fail-safe的区别。Iterator的安全失败是基于对底层集合做拷贝因此它不受源集合修改的影响。util包下的所有集合类都是快速失败的util.concurren包下面的所有类都是安全失败的。Java基础—集合框架/泛型/容器概念一、容器ContainerSpring 提供容器功能容器可以管理对象的生命周期、对象与对象之间的依赖关系您可以使用一个配置文件通常是 XML在上面定义好对象的名称、如何产生Prototype 方式或 Singleton 方式、哪个对象产生之后必须设定成为某个对象的属性等在启动容器之后所有的对象都可以直接取用不用编写任何一行程序代码来产生对象或是建立对象与对象之间的依赖关系。换个更直白点的说明方式容器是一个 Java 所编写的程序原先必须自行编写程序以管理对象关系现在容器都会自动帮您作好。常用容器WebSphere,WebLogic,Resin,Tomcat。容器类容器类 其实就是一种用来存储数据的数据结构在 JAVA 中容器可分为即 “集合”Set、“列表”(List)、“映射”(Map)。至于为什么需要容器总的来说主要是在以数组作为数据的存储结构中其长度难以扩充同时数组中元素类型必须相同。而容器可以弥补数组的这两个缺陷。Java 容器类包含 List、ArrayList、Vector 及 map、HashTable、HashMap。ArrayList 和 HashMap 是异步的Vector 和 HashTable 是同步的所以 Vector 和 HashTable 是线程安全的而 ArrayList 和 HashMap 并不是线程安全的。因为同步需要花费机器时间所以 Vector 和 HashTable 的执行效率要低于 ArrayList 和 HashMap。二、集合框架的说明所有集合类都位于 java.util 包下。Java 的集合类主要由两个接口派生而出Collection 和 MapCollection 和 Map 是 Java 集合框架的根接口这两个接口又包含了一些子接口或实现类。1.Set、List 和 Map 可以看做集合的三大类2.List 集合是有序集合集合中的元素可以重复访问集合中的元素可以根据元素的索引来访问。Set 集合是无序集合集合中的元素不可以重复访问集合中的元素只能根据元素本身来访问也是集合里元素不允许重复的原因。3.Map 集合中保存 Key-value 对形式的元素访问时只能根据每项元素的 key 来访问其 value。三、集合框架详细说明1、Collection 是一个接口是高度抽象出来的集合它包含了集合的基本操作和属性。Collection 包含了 List 和 Set 两大分支。1List 是一个 有序的队列每一个元素都有它的索引。第一个元素的索引值是 0。List 的实现类有 LinkedList, ArrayList, Vector, Stack。2Set 是一个不允许有重复元素的集合。Set 的实现类有 HastSet 和 TreeSet。 HashSet 依赖于 HashMap它实际上是通过 HashMap 实现的TreeSet 依赖于 TreeMap它实际上是通过 TreeMap 实现的。2、Map 是一个映射接口即 key-value 键值对。Map 中的每一个元素包含 “一个 key” 和 “key 对应的 value”。AbstractMap 是个抽象类它实现了 Map 接口中的大部分 API。而 HashMapTreeMapWeakHashMap 都是继承于 AbstractMap。Hashtable 虽然继承于 Dictionary但它实现了 Map 接口。3、接下来再看 Iterator。它是遍历集合的工具即我们通常通过 Iterator 迭代器来遍历集合。我们说 Collection 依赖于Iterator是因为 Collection 的实现类都要实现 iterator () 函数返回一个 Iterator 对象。ListIterator 是专门为遍历 List 而存在的。4、再看 Enumeration它是 JDK 1.0 引入的抽象类。作用和 Iterator 一样也是遍历集合但是 Enumeration 的功能要比 Iterator 少。在上面的框图中 Enumeration 只能在 Hashtable, Vector, Stack 中使用。5、最后看 Arrays 和 Collections。它们是操作数组、集合的两个工具类。四、集合与数组五、层次关系六、几种重要的接口和类简介七、遍历八、ArrayList 和 LinkedList九、Map 集合十、主要实现类区别小结…Java基础—多线程一、多线程基本概念二、线程相关的常用方法三、继承Thread类四、实现Runnable 接口五、Java 分为两种线程用户线程和守护线程六、用户线程就是前台线程守护线程就是后台线程七、什么是可重入锁八、Lock 与 synchronized 的不同九、synchronized的使用十、atomic 包底层实现原理十一、Lock底层原理十二、多线程不安全的底层原因以及两种加锁方式的区别十三、Java多线程中 的各种锁十四、Java多线程中 的各种锁补充十五、阻塞队列BlockingQueue十六、Java线程池、Java线程池进阶、Java中的ThreadLocalJava基础—框架基础注解/反射/流行框架一、优化 Hibernate 所鼓励的7大措施二、序列化和反序列化三、Java中池的概念四、Java反射五、Spring的IOC和AOP概念和实现原理六、 仿照 Spring 实现简单的 IOC七、仿照 Spring 实现简单的 AOP八、Spring bean 的生命流程九、仿写Spring 进阶之 AOP和IOC协作Java基础—面向对象继承/多态/封装一、重写与重载二、单继承和多继承三、多态四、super和this关键字Java基础—设计模式一、单例模式之懒汉式和饿汉式二、设计模式之观察者模式三、设计模式之工厂模式四、设计模式之代理模式Java基础—JVM/类加载一、初始化执行代码顺序包含static块和构造块以及类方法和实例方法二、JVM内存结构三、JVM组成部分四、类加载机制五、类加载器六、Java类加载器之间的关系七、虚拟机中的对象八、虚拟机 分配内存九、Java中的引用类型十、JVM如何判断是否回收对象十一、垃圾回收算法十二、JVM运行时数据区域十三、JVM垃圾收集器十四、JVM垃圾回收十五、Java中的内存泄露和内存溢出Java基础——I/O一、I/O 基本概念二、I/O 模型 ——阻塞、非阻塞、多路复用、异步三、JAVA中 BIO 与 NIO、AIO网络编程和计网一、Java中的原码、反码和补码二、forward 和 redirect三、URL的组成四、通信的基础——IP、DNS、MAC地址五、关于ip地址的理解六、GFW中国防火长城工作原理七、OSI七层模型和 五层体系结构八、TCP 三次握手和四次挥手协议九、TCP协议 可靠保证、TCP、UDP、拥塞、ARQ十、HTTP 和 HTTPS十一、Http/1.0、Http/1.1、Http2十二、Https 加密过程详解十三、HTTP协议的补充POST、GET请求方法、幂等性十四、网络攻击XSS、CSRF详解十五、DDoS 攻击详解十六、SQL注入攻击详解数据库一、结果集 (ResultSet)全面解析二、基本概念三、索引四、事务五、存储引擎六、数据库优化七、数据库锁八、主从复制和读写分离操作系统一、线程进程部分二、内存和中断三、互斥和同步四、Linux相关命令五、Linux IO 模式及 select、poll、epoll 详解数据结构一、链表、数组、字符、树篇二、堆、栈、队列篇三、B树、B树、B*树四、Java实现排序算法比较时间复杂度五、红黑树六、数据结构之栈七、搜索与回溯算法-Java实现八、高效判断一个数是不是素数最后整理了Java架构学习资料学习技术内容包含有SpringDubboMyBatis, RPC,源码分析高并发、高性能、分布式,性能优化微服务 高级架构开发等等。需要的朋友可以点击下方名片获取