java基础(面试问题)
文章平均质量分 73
温酒YXY
这个作者很懒,什么都没留下…
展开
-
java基础总结(面试高频问题)二十:java类加载机制,双亲委派原则
1:定义:类加载机制指虚拟机把描述类的数据从.class文件加载到内存;它的整个生命周期包括:加载—验证—准备—解析—初始化—使用—卸载七个阶段;2:类加载器分类:启动类加载器,拓展类加载器,应用类加载器;(加载顺序从左到右)3:类加载的三种方式:(1)程序启动时,通过main()方法进行加载;(2)通过Class.forName()方法动态加载,会默认执行初始化块(static{}),但是Class.forName(name,initialize,loader)中的initialze可指定是否原创 2021-05-31 14:53:57 · 200 阅读 · 0 评论 -
java基础总结(面试高频问题)十九:spring的IOC与AOP
一:IOC1:IOC:控制反转,把原本代码里需要实现的对象创建关系,依赖反转给容器来帮助实现,这需要我们创建一个容器并且把对象之间的依赖关系告诉容器;IOC容器就像一个工厂一样,当我们需要创建对象时,只需要配置好配置文件/注解即可,完全不用管对象是如何创建的;说白了,以前由对象控制其他对象,现在所有对象都由spring控制,这就叫控制反转;2:依赖注入:对象被动的接收依赖类不用自己主动去找,对象不是从容器中查找它依赖的类,而是在容器实例化对象时主动将它的依赖类注入给它;即:IOC让对象的创建不用去ne原创 2021-05-31 14:51:38 · 315 阅读 · 0 评论 -
java基础总结(面试高频问题)十八:计算机网络分层以及各层协议(DNS,TCP)
1:计算机网络分层:五层模型,由下到上,物理层-数据链路层-网络层-传输层-应用层;七层模型,由下到上,物理层-数据链路层-网络层-传输层-会话层-表示层-应用层;2:每层的作用与协议:<1>应用层:通过应用进程之间的交互来完成特定网络应用;协议:域名系统DNS,支持万维网的HTTP协议,支持电子邮件的SMTP协议,支持文件传输的FTP协议<2>传输层:负责两台主机中进程间的通信服务;协议:传输控制协议TCP,用户数据报协议UDP<3>网络层:主要负责为分组原创 2021-04-27 14:33:15 · 297 阅读 · 0 评论 -
java基础总结(面试高频问题)十七:HTTP和HTTPS相关知识点
1:HTTP和HTTPS的区别:HTTP是超文本传输协议,基于TCP协议建立连接,数据传输方式是明文传输,容易被黑客攻击,不安全;超文本传输协议:在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范;HTTPS是以安全为目标的HTTP通道,是HTTP的安全版。HTTPS的安全基础是SSL,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持;SSL协议可分为两层:SSL记录协议,他建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装,压缩,加密原创 2021-04-27 14:27:49 · 242 阅读 · 0 评论 -
java基础总结(面试高频问题)十五:int和Integer的区别
1:int是基本数据类型,int变量存储的是数值;Integer是引用类型,实际是一个对象,Integer存储的是引用对象的地址;2:Integer对象会占用更多的内存。Integer是一个对象,需要存储对象的元数据。但是int是一个原始类型的数据,所以占用的空间更少。3:非new生成的Integer变量与new Integer()生成的变量比较,结果为false。因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内原创 2020-12-01 11:23:19 · 214 阅读 · 0 评论 -
java基础总结(面试高频问题)十四:java中的队列及其区别
1:什么是队列:队列是数据结构中比较重要的一种类型(是一种数据结构),它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似;2:什么情况下使用队列:如果是对一些及时消息的处理,并且处理时间很短的情况下是不需要队列的,直接阻塞式的方法调用就可以了。但是如果在消息处理的时候特别费时间,这个时候如果有新消息来了,就只能处于阻塞状态,造成用户等待。这个时候便需要引入队列了。当接收到消息后,先把消息放入队列中,然后再用线程进行处理,这个时候就不会有消息阻塞了;3:队列(Que原创 2020-11-24 09:28:35 · 202 阅读 · 0 评论 -
java基础总结(面试高频问题)十三:Java数组和链表以及栈,队列的操作效率
1:数组和链表:(1)从逻辑结构角度来看数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项);(2)从内存存储角度来看(静态)数组从栈中分配空间(这个有待确定,毕竟是Java的数组), 对于程序员方便快速,但自由度小;链表从堆中分配空间, 自由度大但申请管理比较麻烦.;(3)原创 2020-11-16 09:47:45 · 343 阅读 · 0 评论 -
java基础总结(面试高频问题)十二:Java的集合类,数组去除重复数据的方法
1:直观框架图:旧版:新版:java的集合类主要包括两种类型的容器,一种是集合(Collection),另一种是映射(Map);Collection接口又有3种子类型,List、Set和Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet等等;Map常用的有HashMap,LinkedHashMap等。2:List总结:List是有序的,可重复的,通过索引取出和加入数据;顺序和插入顺序一致,可以含有n原创 2020-11-09 10:32:06 · 264 阅读 · 0 评论 -
java基础总结(面试高频问题)十一:ArrayList,LinkedList的实现和区别
1:Java在构建ArrayList的时候是默认初始容量为10的空列表,底层使用数组保存所有元素;ArrayList的get(),set(),add(),remove()(增删改查)方法,都是对数组进行操作。所以ArrayList具有数组的优缺点,查找和修改相对快一些,而增加和删除相对慢一些。例如,当增加或删除某一位时,需要移动大量元素;2:LinkedList同样实现了List并且还实现了deque(队列),即循环双向链表的数据结构;其结构是由一些列链表拼接而成。并且它在初始化后默认是空;Linke原创 2020-11-03 09:51:45 · 154 阅读 · 0 评论 -
java基础总结(面试高频问题)十:java抽象类和接口的区别
1:抽象类:关键字abstract修饰(1)可以修饰类,也可以修饰方法;(2)修饰类的话,抽象类可以创建构造方法,但是不可以实例化,创建构造方法的目的是为了子类的调用;(3)有抽象方法的类一定是抽象类,抽象类可以没有抽象方法,抽象类可以有非抽象的方法;(4)如果抽象类的子类重写了所有的抽象方法,子类可以是非抽象的,且可以实例化;(5)如果抽象类的子类没有重写所有的抽象方法,则子类是抽象类,不可以实例化;2:接口:关键字interface修饰(1)接口不能实例化,不能创建构造方法;(2)接口里原创 2020-10-29 09:22:15 · 147 阅读 · 0 评论 -
java基础总结(面试高频问题)九:java的引用类型
1:java的四种引用类型:强引用,软引用,弱引用,虚引用;其强度排序为:强引用>软引用>弱引用>虚引用;(1)强引用(Strong Reference):即使进行了多次的GC回收,即使JVM真的已经不够用了,即使JVM最终不得已抛出了OOM错误,只要引用存在就不会被回收;这个流程就是强引用,在System.gc()被调用时,只要oa没有断开连接,也就是oa没有被赋值为null,oa和ob都不会被回收;当oa=null之后,oa就断开了连接,就可以被当做垃圾回收;强引用只有全部的对原创 2020-10-20 10:19:10 · 120 阅读 · 0 评论 -
java基础总结(面试高频问题)八:java的异常机制及分类
1:什么是异常:异常就是程序在运行期间发生了错误,这个错误阻碍了程序的执行,这就是异常;2:异常如何解决:java提供了异常处理机制,专门应用于解决程序运行时发生的异常;当异常发生时,会按照代码中预先设定的异常处理逻辑,有针对性的处理异常,让程序可以恢复正常并继续运行;3:异常分类:首先需要知道,Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。所有的异常类都是从 java.lang.Exception 类继承的原创 2020-10-14 10:22:08 · 105 阅读 · 0 评论 -
java基础总结(面试高频问题)七:string、stringbuilder、stringbuffer区别,String 类的常用方法
1:String为什么是final修饰的;String使用final修饰,是出于安全的考虑,sun公司不希望使用者去继承String类并复写他的方法,因为这会对底层造成破坏;2:执行速度:StringBuilder > StringBuffer > StringString最慢的原因: String为字符串常量,他是用final修饰的,即代表不可修改,不可被继承。而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,而原创 2020-10-09 09:47:01 · 189 阅读 · 0 评论 -
java基础总结(面试高频问题)六:java进程间,线程间通信方式,socket通信
1:进程间通信的方式:(1)管道:管道是一种半双工的通信方式,数据只能单向流动,且只能在具有亲缘关系的进程间通信;半双工:数据传输可以在一个信号载体的两个双向上传输,但是不能同时传输,某一时刻只能朝一个方向传输;(2)命名管道:半双工的通讯方式,可以在非亲缘关系的进程间通信;(3)信号:用于通知进程有某种事件发生;(4)信号量:他是一个计数器,可以控制多个进程多共享资源的访问。常被作为锁来使用。防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为不同进程间或同一进程下不同线程间的同步原创 2020-09-29 09:59:27 · 390 阅读 · 0 评论 -
java基础总结(面试高频问题)五:线程池
1:什么是线程池:顾名思义,线程池就是一个装有线程的池子,我们把需要执行的多线程交给线程池来处理,通过维护一定数量的线程池来达到多个线程的复用;另一方面,假设我们创建线程的时间为T1,线程的工作时间为T2,线程的销毁时间为T3,当T1+T3远大于T2时,就需要采用线程池来提高性能。线程池技术是关注于解决如何缩短T1和T3时间的技术,通过调整线程创建和线程销毁的时间,以及减少重复创建线程的数目,来提升服务器程序处理的速度。2:为什么要用线程池:当我们创建使用线程的时候,会使用Thread的start(原创 2020-09-27 09:44:12 · 159 阅读 · 0 评论 -
java基础总结(面试高频问题)四:Hashtable,HashMap,ConcurrentHashMap底层原理及线程安全
1:HashMap原理概述:假设存在一个数组,数组中每个元素都是一条链表。当要添加一个新元素(key-value)进入数组时,就要先根据key值计算hash值,以此确定要插入数组的位置。但是可能该位置已经存在相同hash值的其他元素,这就是哈希冲突,处理方法是把这一新元素添加到旧元素的后面,他们在数组的同一位置,但是形成了链表的存在形式。也就说数组中存放的是无数的链表,每一条链表的hash值都是相同的。而当链表长度超过阈值8的时候,链表就转为红黑树,这样大大提高了查找的效率;JDK1.6和JDK1.7中原创 2020-09-25 10:10:13 · 491 阅读 · 0 评论 -
java基础总结(面试高频问题)三:反射机制,Class.forName和classloader的区别
1:什么是反射:在运行状态下,对于任意的一个类,可以获取它的所有属性和方法;对于任意一个对象,可以调用它的任意一个方法和属性(包括私有的方法和属性)。这种动态获取信息以及动态调用对象的功能就叫做java的反射机制。简而言之,反射可以实现运行时知道任意一个类的方法和属性;2:反射机制的意义:例如C++,java都是静态编译的语言,在编译时必须知道变量的类型才能编译通过。(python属于动态编译的语言,在编译时不需要知道变量的类型,只要在运行时指明其类型即可);java是一种解释性的语言,编译器首先将原创 2020-09-23 10:59:56 · 381 阅读 · 0 评论 -
java基础总结(面试高频问题)一:多线程创建的四种方式,线程安全(线程同步),start和run的区别
前言:最近在做java基础的总结工作,决定把这些java基础中的面试高频考点写出来,方便自己复习,也方便和我一样的新手查阅;笔者之前一直在做android端的opencv图像处理项目,但是由于项目的保密性,截止到上一篇博客,只更新到Android中配置opencv这一步,具体的功能实现会放到后续逐步更新出来;话不多说,开始总结:1:java创建多线程有三种方式:(1):第一种,通过继承Thread类创建线程类通过继承Thread类来创建并启动多线程的步骤如下:1、定义一个类继承Thread类,并原创 2020-09-17 11:35:45 · 564 阅读 · 0 评论 -
java基础总结(面试高频问题)二:java垃圾回收机制
1:垃圾回收机制的意义:Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。2:内存泄漏:内存泄漏指的是内存空间使用完之后没有进行回收。在不涉及复杂数据结构的情况下,java的内存泄漏表现为一个内存对象的生命周期超出了程序需要他的时间长度,我们有时也将其称为原创 2020-09-21 11:12:36 · 117 阅读 · 0 评论