java面试基础
文章平均质量分 72
Johnny_Cheung
逝者如斯夫,不舍昼夜!
展开
-
JAVA内存泄漏和内存溢出的区别和联系
1、内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。2、内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。3、二者的关系:内存泄漏的堆积最终会导致内存溢出内存溢出就是你要的内存空间超过了系统实际分配给你的空间,转载 2021-07-02 11:31:31 · 121 阅读 · 0 评论 -
什么是微服务,SpringBoot和SpringCloud的关系和区别
什么是微服务?就目前而言对于微服务业界没有一个统一的,标准的定义.但通常而言,微服务是一种架构模式或者说是一种架构风格,它提倡单一应用程序划分为一组小的服务,每个服务在其独立的自己的进程中,服务之间相互协调,互相配合,为用户提供最终价值.服务之间采用轻量级的通信机制互相沟通(基于Http的Restful API)每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境,类生产环境进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储.转载 2021-07-02 11:17:48 · 1757 阅读 · 0 评论 -
oracle和mysql的区别
1、Oracle是大型数据库,而MySQL是中小型数据库。但是MySQL是开源的,但是Oracle是收费的,而且比较贵。2、Oracle的内存占有量非常大,而mysql非常小3、MySQL支持主键自增长,指定主键为auto increment,插入时会自动增长。Oracle主键一般使用序列。4、MySQL字符串可以使用双引号包起来,而Oracle只可以单引号5、MySQL分页用limit关键字,而Oracle使用rownum字段表明位置,而且只能使用小于,不能使用大于。6、Oracle在转载 2021-07-02 10:31:58 · 584 阅读 · 0 评论 -
JAVA面试题集锦
TCP和UDP的区别,TCP为什么是三次握手,不是两次。答:1、因为tcp是全双工协议,区别在于前者可靠,后者不可靠,以及效率更高。dubbo和dubbox之间的区别?答:Dubbox 和Dubbo本质上没有区别,名字的含义扩展了Dubbo而已,以下扩展出来的功能支持REST风格远程调用(HTTP + JSON/XML);支持基于Kryo和FST的Java高效序列化实现;支持基于Jackson的JSON序列化;支持基于嵌入式Tomcat的HTTP remoting体系;升级Spring至3.原创 2021-04-23 13:16:27 · 223 阅读 · 0 评论 -
JAVA面试题集锦
Java 基础1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装转载 2021-04-21 09:45:36 · 87 阅读 · 0 评论 -
双亲委派是什么
双亲委派模型:某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。虚拟机类加载机制:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。 如果任何一个父类加载器都加载不了我们自...转载 2021-04-02 14:08:36 · 160 阅读 · 0 评论 -
Spring中的各种注释详解
@Controller是什么@Controller表示在tomcat启动的时候,把这个类作为一个控制器加载到Spring的Bean工厂,如果不加,就是一个普通的类,和Spring没有半毛钱关系。 <!-- 开启mvc 的注解 --> <context:annotation-config></context:annotation-config> <mvc:annotation-driven></mvc:annotation-转载 2021-03-26 10:52:29 · 352 阅读 · 0 评论 -
static关键字的四种用法
static是java中非常重要的一个关键字,而且它的用法也很丰富,主要有四种用法:用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享; 用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用,避免了先要new出对象的繁琐和资源消耗,我们可能会经常在帮助类中看到它的使用; 静态块用法,将多个类成员放在一起初始化,使得程序更加规整,其中理解对象的初始化过程非常关键; 静态导包用法,将类的方法直接导入到当前类中,从而直接使用“方法名”即可调用类方法,更加方便。.转载 2021-03-24 09:18:56 · 107 阅读 · 0 评论 -
关键字synchronized和volatile区别以及作用
java多线程中的原子性、可见性、有序性(1)原子性:是指线程的多个操作是一个整体,不能被分割,要么就不执行,要么就全部执行完,中间不能被打断。(2)可见性:是指线程之间的可见性,就是一个线程修改后的结果,其他的线程能够立马知道。(3)有序性:为了提高执行效率,java中的编译器和处理器可以对指令进行重新排序,重新排序会影响多线程并发的正确性,有序性就是要保证不进行重新排序(保证线程操作的执行顺序)。synchronized和volatile的区别:volatile本质:是java虚拟机转载 2021-03-17 16:54:16 · 977 阅读 · 0 评论 -
缓存穿透、缓存击穿、缓存雪崩区别和解决方案
主要有用途:高性能、高并发、保护数据库缓存穿透、缓存击穿、缓存雪崩区别前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。缓存穿透缓存穿透指缓存和数据库中都没有的数据,一般常见黑客攻击,请求用没有的数据直接穿透缓存,打到数据库上,导致数据库挂掉用户请求数据,例如ID为负数,不存在缓存里,也不存在数据库里,会造成缓存穿透。解决方案1、无意义数据放入缓存,下一次相同请求就会命中缓存;2、IP.原创 2021-03-14 19:34:55 · 109 阅读 · 0 评论 -
Redis、Memcache和MongoDB的区别
>>MemcachedMemcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量。支持直接配置为session handle。Memcached的局限性:只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型。无法进行持久化,数据不能备份,只能用于缓存使用,且重启后数据全部丢失。无法进行数据同步,不能将M转载 2021-03-14 17:14:51 · 85 阅读 · 0 评论 -
String、StringBuffer与StringBuilder之间区别
String StringBuffer StringBuilder(JDK1.5) String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 可...转载 2021-03-13 18:40:06 · 67 阅读 · 0 评论 -
java泛型详解
Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。Java集合(Collection)中元素的类型是多种多样的。例如,有些集合中的元素是Byte类型的,而有些则可能是String类型的,等等。Java允许程序员构建一个元素类型为Object的Collection,其中的元素可以是任何类型在Java SE1.5之前,没有...转载 2021-03-13 18:10:09 · 254 阅读 · 0 评论 -
BIO与NIO、AIO的区别
BIO与NIO、AIO的区别BIO是一个连接一个线程。NIO是一个请求一个线程。AIO是一个有效请求一个线程。先来个例子理解一下概念,以银行取款为例:同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写);异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API);阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直转载 2021-03-13 17:51:28 · 71 阅读 · 0 评论 -
jsp有哪些动作?作用分别是什么?
JSP共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:fo...原创 2020-04-08 17:32:19 · 186 阅读 · 0 评论 -
jsp有哪些内置对象?作用分别是什么?
JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): request 用户端请求,此请求会包含来自GET/POST请求的参数 response 网页传回用户端的回应 pageContext 网页的属性是在这里管理 session 与请求有关的会话期 ...原创 2020-04-08 17:31:29 · 100 阅读 · 0 评论 -
请列举几种SQL优化的方法?
1:mysql所在服务器内核 优化;此优化可由系统运维人员完成2:mysql配置参数优化(my.cnf);此优化需进行压力测试来进行参数调整3:sql语句及表优化①、当只要一行数据时使用 LIMIT 1②、为搜索字段建索引③、在Join表的时候使用相当类型的列,并将其索引④、千万不要 ORDER BY RAND()⑤、避免 SELECT *⑥、永远为每张表...转载 2020-04-08 17:24:36 · 488 阅读 · 0 评论 -
mybaits与Hibernate对比有哪些不同点
相同点:屏蔽jdbc api的底层访问细节,使用我们不用与jdbc api打交道,就可以访问数据。jdbc api编程流程固定,还将sql语句与java代码混杂在了一起,经常需要拼凑sql语句,细节很繁琐。 mybatis的好处:屏蔽jdbc api的底层访问细节;将sql语句与java代码进行分离;提供了将结果集自动封装称为实体对象和对象的集合的功能...原创 2020-04-08 17:22:41 · 131 阅读 · 0 评论 -
Hibernate的特点及其工作原理,为什么大多数公司都使用Hibernate?Hibernate中怎么样实现类之间的关系
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用, 另外hibernate还提供一级缓存和二级缓存。可以进行简单的数据...原创 2020-04-08 17:17:02 · 397 阅读 · 1 评论 -
如何给tomcat指定大小的内存
Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。有以下几种方法可以选用: 第一种方法: Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下设置: JAVA_OPTS...原创 2020-04-08 17:12:58 · 1499 阅读 · 0 评论 -
请列出你所了解的若干个不同类型的runtime exception
NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常。 IllegalArgumentException - 传递非法参数异常。 ArithmeticException - 算术运算异常 ArrayStoreExceptio...原创 2020-04-08 17:10:07 · 76 阅读 · 0 评论 -
JVM内部原理
JVM是Java Virtual Machine(Java虚拟机)的缩写。 1、JVM的组成: JVM 由类加载器子知系统、运行时数据区、执行引擎以及本地方法接口组成。 2、JVM的运行原理: JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利...原创 2020-04-08 16:05:50 · 83 阅读 · 0 评论 -
java 中实现多态的机制是什么?
方法的覆盖Overriding 和重载Overloading 是java 多态性的不同表现;覆盖Overriding 是父类与子类之间多态性的一种表现,重载Overloading 是一个类中多态性的一种表现。...原创 2020-04-07 22:51:42 · 212 阅读 · 0 评论 -
面向对象的特征主要有以下几个方面?
面向对象的特征主要有以下几个方面: 1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以...原创 2020-04-07 22:47:11 · 1161 阅读 · 0 评论 -
什么是重量级?什么是轻量级?
轻量级是指它的创建和销毁不需要消耗太多的资源,意味着可以在程序中经常创建和销毁session 的对象;重量级意味不能随意的创建和销毁它的实例,会占用很多的资源。...原创 2020-04-07 22:43:27 · 2001 阅读 · 0 评论 -
Java 中常用的设计模式?说明工厂模式?开发中都用到了那些设计模式?用在什么场合?
Java 中的23 种设计模式:Factory( 工厂模式),Builder( 建造模式), Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式),Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),Decorator(装饰模式), Flyweight(享元...原创 2020-04-07 22:41:46 · 587 阅读 · 0 评论 -
java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
有两种实现方法,分别是继承Thread 类与实现Runnable 接口; 用synchronized 关键字修饰同步方法;反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在;suspend()方法容易发生死锁。调用suspend()的时候,目...原创 2020-04-07 22:35:12 · 113 阅读 · 0 评论 -
同步和异步有何异同,在什么情况下分别使用他们?举例说明。请说出你所知道的线程同步的方法。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 线程同步的方法 wait():使一个线程处于等...原创 2020-04-07 22:33:34 · 191 阅读 · 0 评论 -
线程的基本概念、线程的基本状态以及状态之间的关系,启动一个线程是用run()还是start()?
线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身;Java 中的线程有四种状态分别是:运行、就绪、挂起、结束。 启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM 调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。...原创 2020-04-07 22:23:54 · 121 阅读 · 0 评论 -
sleep() 和wait() 有什么区别?
sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep 不会释放对象锁。(对象锁是指Java为临界区synchronized(Object)语句指定的对象进行加锁,对象锁是独占排它锁。对象锁用于程序片段或者method上,此时将获得对象的锁,所有想要进入该对象的synchronized的方...原创 2020-04-07 22:21:25 · 76 阅读 · 0 评论 -
抽象类(abstract class)和接口(interface)的区别?
抽象类(abstract class)含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没...转载 2020-04-02 16:57:44 · 112 阅读 · 0 评论 -
JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try 块中可以抛出异常吗?
Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。 在Java 中,每个异常都是一个对象,它是Throwable 类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。 Java 的异常处理是通过5 个关键词来...原创 2020-04-07 21:59:13 · 223 阅读 · 0 评论 -
final, finally, finalize 的区别?
final:修饰符(关键字);如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承,因此一个类不能既被声明为abstract的,又被声明为final 的;将变量或方法声明为final,可以保证它们在使用中不被改变;被声明为final 的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改;被声明为final 的方法也同样只能使用,不能重载。 ...原创 2020-04-07 22:11:07 · 102 阅读 · 0 评论