![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
常见问题
大房子爱生活
这个作者很懒,什么都没留下…
展开
-
关于HashMap的数据存储结构,以及冲突问题的解决原理
首先我们都知道hashmap是用的数组+链表的数据结构来存储数据的,存入的数据也是通过键值对key/value这样的方式,下面整理的是比较底层的一些源码分析:1. 首先我们要知道什么是 hash 函数:hash函数就是将一个任意长度的二进制值,通过映射关系也就是hashmap底层用到的一个hash算法,转化成固定长度的二进制值,得到一个hash值2. HashMap的实现原理:hashma...原创 2019-03-16 14:54:57 · 1328 阅读 · 0 评论 -
Java中的 Iterator 迭代器
迭代器是一种设计模式,它是一个对象,可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构1. Iterator 接口中定义的几个常用方法:next():获取序列中的下一个元素hasNext():检查序列中是否还有元素remove():将迭代器返新返回的元素删除2. 使用 Iterator 迭代器遍历集合中的元素:public static void main(Strin...原创 2019-03-27 15:44:56 · 189 阅读 · 0 评论 -
Java中产生死锁的原因以及死锁的解除
1. 产生死锁的主要原因:因为系统资源不足进程运行推进的顺序不合适资源分配不当等如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁,其次进程运行推进顺序与速度的不同也可能产生死锁2. 产生死锁的四个必要条件:互斥条件:一个资源每次只能被一个进程使用请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放不剥夺条...原创 2019-03-27 14:30:45 · 349 阅读 · 0 评论 -
线程中同步方法和同步代码块的区别
1. 为什么要使用同步:java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。2.同步方法:即有synchronized关键字修饰的方法由于 Java的每个对象都会有一个内置锁,当用此关键字修饰方法时,内置锁会...原创 2019-03-27 14:11:20 · 1349 阅读 · 1 评论 -
线程的几种状态
线程从创建,运行到结束需要经历下面五个状态:新建状态,就绪状态,运行状态,阻塞状态以及死亡状态,可参照下图理解1.新建状态(new):当线程对象创建后,即进入了新建状态,此时程序还没有运行线程中的代码,如:Tread t = new MyThread()2.就绪状态(Runnable):一个新创建的线程并不会自动开始运行,要执行线程,必须调用线程的 Start() 方法,当调用线程...原创 2019-03-27 13:44:30 · 158 阅读 · 0 评论 -
创建线程的4种方式以及实现的代码
创建一个线程有四种方式:继承Thread类创建线程实现Runnable接口创建线程使用Callable和Future创建线程使用线程池例如用Executor框架1.继承Thread类创建线程:创建线程的步骤:定义Thread类的子类,并重写该类的 run() 方法,该方法的方法体就是县城需要完成的任务,run() 方法也成为线程的执行体创建Thread子类的实例,也就是创建了...原创 2019-03-27 11:38:06 · 1440 阅读 · 0 评论 -
进程和线程的区别与联系
1.进程:进程是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位2.线程:线程是进程的一个执行单元,是进程内科调度实体,比进程更小的独立运行的基本单位,线程也被称为轻量级进程一个程序至少一个进程,一个进程至少一个线程3.进程与线程的练习:每个进程都有自己的地址空间,即进程空间,在网络或多用户换机下,一个服务器通常需要接收大量不确定数量用...原创 2019-03-27 11:02:14 · 227 阅读 · 0 评论 -
Thread 类中的:sleep(),join(),wait(),yield()区别详解
1. sleep():Thread.sleep(1000);在指定时间内让当前执行的线程暂停执行一段时间,让其他线程有机会继续执行,但不会释放对象锁,也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据,不推荐使用,sleep() 使当前线程进入阻塞状态,在指定时间不会执行。2. wait():对象的方法,会释放对象锁wait()和notify()、notif...原创 2019-03-27 17:34:12 · 3043 阅读 · 0 评论 -
关于HTTP协议的相关问题
1. HTTP响应的结构是怎么样的:HTTP响应由三个部分组成:状态吗(status code):描述了响应的状态,可以用来检查是否成功的完成了请求,请求失败的情况下,状态吗可以用来找出失败的原因,如果servlet没有返回状态码,默认会返回成功的状态码HTTP头部(HTTP Header):它们包含了更多关于响应的信息,比如:头部可以指定认为响应过期的过期日期。或者是指定用来给用户安...原创 2019-03-29 00:32:24 · 336 阅读 · 0 评论 -
关于web应用程序中的常见问题
1. 什么事web应用程序:web应用程序是对web或者应用服务器的动态扩展,有两种类型的web应用:面向表现和面向服务的,面向表现的web应用程序会产生包含了很多种标记语言和动态内容的交互的web页面作为对请求的响应,而面向服务的web应用实现了web服务的端点,一般来说,一个web应用可以看成是一组安装在服务器url名称空间的特定子集下面的servlet的集合2.什么事服务端包含(se...原创 2019-03-29 00:16:28 · 1046 阅读 · 0 评论 -
doget()方法和dopost()方法有什么区别
doget():get方法啊会把名值对追加在请求的url后面,因为url对字符数目有限制,进而限制了用在客户端请求的参数值得数目,并且请求中的参数值是可见的,因此敏感信息不能用这种方式传递dopost():post方法通过把请求参数值放在请求体重来克服get方法的限制,因此,可以发送的参数的数目是没有限制的,最后,通过post请求传递的敏感信息对外部客户端是不可见的...原创 2019-03-28 23:49:30 · 2083 阅读 · 0 评论 -
servlet的体系结构和生命周期
1. 什么是servlet:servlet是用来处理客户端请求并产生动态网页内容的Java类,servlet主要是用来处理或者是存储html表单提交的数据,产生动态内容,在无状态的HTTP协议下管理状态信息2. servlet的体系结构:所有servlet都必须要实现的核心接口是Javax.servlet.Servlet,每一个servlet都必须要直接或间接的实现这个接口,或者是继承...原创 2019-03-28 23:43:51 · 430 阅读 · 0 评论 -
Java中数据库的连接
1.什么是JDBC:JDBC是Java数据库连接,提供不同数据库进行统一访问的工具,JDBC允许开发者用Java写数据库应用程序,而不需要关心底层数据库的细节2.JDBC的Driver驱动:JDBC驱动提供了特定厂商对JDBC API接口类的实现,驱动必须要提供Javasql包下面这些类的实现:Connection,preparedStatement,CallableStatement...原创 2019-03-28 23:14:24 · 404 阅读 · 0 评论 -
Java中的异常
1.Java中的两种异常类型以及区别:Throwable是所有异常的根,Error是错误,Exception是异常1.1 Exception:一般分为Checked异常(受检查异常)和Runtime异常(运行时异常),所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则被称为CheckedExceptionChecked异常:对Ch...原创 2019-03-28 21:43:17 · 234 阅读 · 0 评论 -
单体架构和微服务系统架构的优缺点
单体架构所谓的单体架构就是把所有的业务模块编写在一个项目中,最终会打包成一个war包,然后进行部署单体架构的优点:部署简单:由于是完整的结构体,可以直接部署在一份服务器上即可技术单一:项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开发用人成本低:单个程序员可以完成业务接口道数据库的整个流程单体架构的缺点:系统启动慢:一个进程包含了所有的业务逻辑,涉及到的启动模块过多...原创 2019-03-28 16:57:40 · 14481 阅读 · 0 评论 -
关于Java虚拟机中的垃圾回收---面试题
1.Java中垃圾回收的目的:垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源2.什么时候进行垃圾回收:垃圾回收是在内存中存在没有引用的对象或超过作用域的对象时进行的3.system.gc() 和 runtime.gc() 会做什么事情:这两个方法用来提示jvm要进行垃圾回收,但是,立即开始还是延迟进行垃圾回收是取决于jvm的4.finalize() 方法什么...原创 2019-03-28 11:03:51 · 1091 阅读 · 0 评论 -
ArrayList 和 LinkedList 的区别
ArrayList 和 LinkedList 都实现了List接口,区别主要有以下几点ArrayList底层使用的是数组,优点数组查询具有索引查询速度比较快,插入删除修改比较慢(因为数组在内存中是一块连续的内容,如果插入或删除是需要移动内存,所以比较慢)使用场景是使用在查询比较多,插入和删除比较少的情况LinkedList底层使用的是链表,链表不需要内存是连续的,在当前元素中存放下一个或上一...原创 2019-03-28 10:28:09 · 168 阅读 · 0 评论 -
关于值传递和引用传递
1.值传递:在值传递过程中,形式参数类型是基本数据类型,当用方法调用时,实际参数将它的实际值传递给形式参数,此传递过程就是将实参的值复制一份传递给形参,而形参只是用实参的参数值初始化自己的存储单元内容,是两个不同的存储单元,这样如果在函数中对形参的值进行了操作将不会影响实参的值,因为是直接复制,所以这种方式在传递大量数据时,运行效率会特别低下2.引用传递:在引用传递中,形式参数类型是引...原创 2019-03-26 23:33:29 · 389 阅读 · 0 评论 -
final关键字的作用以及详解
平时对final这个关键字并不陌生,但是它的具体用法还是有点模糊,在这里整理了一下关于这个关键字的一些作用和详细解释:1.final关键字的特性:final有着独一无二的特性,就是只可以赋值一次,一旦赋值就无法改变其值2.final关键字修饰一个类的时候:用final修饰一个类的时候,表示这个类不能被继承 ,要注意的是被final修饰的类,它的成员方法也都会被隐式的指定为final方法3...原创 2019-03-18 00:26:21 · 4426 阅读 · 0 评论 -
解决properties文件中文乱码问题
在开发中我们经常在properties添加一些配置文件,但是注释的时候会发下出现了中文乱码的问题,下面是我在解决这个问题的时候用到的方法:1.中文乱码情况:2.解决方法:window — preferences — General — Content Types — Text — Java Properties File将下面默认的编码格式手动更改成UTF-8,然后点击update就ok...原创 2019-03-17 20:44:50 · 9582 阅读 · 0 评论 -
Java内存分配:堆和栈
Java中的内存分配主要包括以下几个(不全面):寄存器:我们在程序中无法控制栈:存放基本类型的数据和对象的引用,对象本身存放在堆中堆:存放new出的数据和数组常量池:存放常量1.Java内存分配中的栈:函数中定义的一些基本类型的变量数据和对象的引用地址都在函数的栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当该变量退出作用域后,Java会自动释...原创 2019-03-21 00:39:50 · 138 阅读 · 0 评论 -
错误提示:Invalid project description 解决方法
创建maven项目的时候一直提示Invalid project description的一个错误提示,在参考了几个解决方案后才搞定,其实是一个很小的问题,首先看一下我这里的提示报错:错误原因:eclipse插件在创建项目的时候需要在workspace目录下创建一个目录。 如果workspace目录下已存在同名的目录时,就会报上面的处错误信息了。解决方法:把workspace中重名的目录...原创 2019-03-17 00:13:36 · 5076 阅读 · 0 评论 -
常见的异常类型
1. 从异常类的继承架构图中可以看出:Exception类扩展出数个子类,其中IOE,RuntimeException是较常用的两种2.习惯上将Error与Exception类统称为异常类,但这两者本质上还是有不同的,Error类专门用来处理严重影响程序运行的错误,java虚拟机出错就属于一种Error3.Exceptin 类包含了一般性的异常,这些异常通常在捕捉到之后便可做妥善处理确保程序...原创 2019-03-19 20:24:21 · 1282 阅读 · 0 评论 -
java异常中throw和throws的用法和区别
java抛出异常的三种形式,throw,throws和系统自动抛出异常,在这里说一下throw和throws的用法以及区别1. throw:throw是语句抛出一个异常,一般是在代码块的内部,当程序出现某种逻辑错误时由程序员主动抛出特定类型的异常2. throws:throws是方法可能抛出异常的声明,用在声明方法时,表示该方法可能抛出异常,然后交给上层调用它的方法处理3. throw和...原创 2019-03-19 20:13:12 · 2281 阅读 · 1 评论 -
算法的几个特征
算法所具备的介个特征1.有穷性:算法的有穷性是指算法必须能在执行有限个步骤之后终止2.确切性:算法的每一步骤必须有确切的定义3.输入项:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件4.输出项:一个算法有一个或多个输出,以反映对输入数据加工后的结果,没有输出的算法是毫无意义的5.可行性:算法中执行的任何计算步骤都是可以被分解为基本的可...原创 2019-03-19 19:03:49 · 1091 阅读 · 0 评论 -
关于抽象类和接口
平时经常看到关于抽象类和接口的问题,下面整理了一张表格,看完就明白了特点抽象类接口构造方法有无普通成员变量有无普通方法可以有非抽象的必须是抽象的抽象方法的访问类型public,protected,默认只能是public的,默认的是public abstarct静态方法可以有无静态成员变量有有public static f...原创 2019-03-19 18:06:32 · 334 阅读 · 0 评论 -
关于数据库多表关联查询时出现重复的记录应该怎样合并
(整理不易,参考使用,记得点赞)今天在写多表关联查询的sql语句时,出现了查询出的记录有重复的现象,尽管更改了内联,左右外连接,还是会出现重复的记录,查询出的结果就像下面这样:下面是我原来的sql语句:SELECT * FROM `students` a left join clazz b on a.stuclazz = b.cidinner join clazztime c on b...原创 2019-03-08 16:17:27 · 16023 阅读 · 0 评论 -
Address already in use: JVM_Bind <null>:8080错误:端口冲突问题解决
今天在运行之前的项目时遇到了这样一个报错:Address already in use: JVM_Bind :8080,是因为端口号被占用,这里不是因为我们的程序有什么问题,只需要把该端口号进程关掉即可,下面是操作步骤:(整理不易,参考使用,记得点赞)1.打开cmd进入到管理员页面,输入netstat -ano,在进程中找到端口号为8080地址,看后面对应的PID是多少:2.查到PID之后...原创 2019-03-05 20:22:42 · 4427 阅读 · 0 评论 -
Referenced file contains errors (http://www.springframework.org/schema/tx/sp错误异常解决方法
Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-4.3.xsd). For more information, right click on the message in the Problems View and select “Show Details…”在配置...原创 2019-03-02 16:04:10 · 22611 阅读 · 5 评论 -
Java中线程池的原理以及实现
1.为什么使用线程池,好处是什么:有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,而有了线程池,就可以通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销,还可以对线程进行一些维护和管理比如定时开始,周期执行,并发控制等等...原创 2019-03-24 23:45:49 · 107 阅读 · 0 评论 -
关于方法的重载与重写的区别
1.关于重载与重写:1.1.重载:是指一个类中的多个方法具有相同的名字,但这些方法的参数类型或参数的数量不能完全相同1.2.重写:方法重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型注意一点:子类中不能重写父类中final方法,子类必须重写父类中的abstract方法2.关于重载(Overload):方法重载就是在类中可以定义多个相同方...原创 2019-03-18 19:30:01 · 239 阅读 · 0 评论 -
事务的几个特性以及事务的隔离级别
事务是并发控制的单位,是用户定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位,例如转账,两个账户金额的变动必须同时成功事务的四个特性:1. 原子性(Atomicity)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。2. 一...原创 2019-03-23 23:59:18 · 141 阅读 · 0 评论 -
Java中的构造方法
1. 构造函数的特点:构造函数 ,主要用来在创建对象时初始化对象, 为对象成员变量赋初始值。一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们,这就是构造函数的重载构造函数的主要作用是完成对象的初始化工作,当创建一个对象进行初始化时,如果构造函数不为空,则会在创建对象时执行构造函数里面的代码构造函数的名称必须与类名相同,必须大小写,构造函数没有返回值,不能用voi...原创 2019-03-26 22:11:26 · 150 阅读 · 0 评论 -
关于JDK,JVM和JRE的区别
1.Java运行时环境(JRE):它包括Java虚拟机,Java核心类库和支持文件,JRE是Java运行环境,既然是运行,当然要包含jvm,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户2.Java开发工具包(JDK):是完整的Java软件开发包,包含了jre,编译器和其他的工具:JavaDoc,Java调试器,可以让开发者开发,编译...原创 2019-03-26 20:52:56 · 653 阅读 · 0 评论 -
java开发中打印日志的log4j插件所需配置
项目开发中我们会用到日志打印插件来在控制台打印程序运行的相关信息,有助于我们的开发过程中更方便直观的发现程序运行中的错误,下面是日志打印插件log4j 所需要用的几个配置:1. 在pom中添加log4j的相关依赖jar包: <!--打印日志 --> <dependency> <groupId>org.slf4j</groupId> ...原创 2019-03-22 20:21:10 · 734 阅读 · 0 评论 -
java中使用md5实现数据加密存储
在java项目中的一些数据存储操作时比如密码,使用加密后的字符串存储会更加安全,删除线格式1. 首先创建一个工具类,用来放md5加密方法方便其他地方可以调用:import org.apache.commons.codec.digest.DigestUtils;public class MyUtil { //字符串加密 public static String md5(String ...原创 2019-03-22 20:09:28 · 1878 阅读 · 0 评论 -
springboot+springcloud+Eureka 实现微服务系统架构
关于Spring Cloud:Spring cloud并不是一个项目,它是一套项目的组合,Spring cloud中存在很多的子项目,每一个子项目都是针对微服务系统架构存在的问题给出的一种解决方案,Springcloud是基于Springboot实现的,Springcloud并没有重复的造轮子,它只是将目前各家公司开发的比较成熟,经得起实际考验的服务组合起来使用Spring cloud搭建...原创 2019-03-29 17:31:14 · 1228 阅读 · 0 评论 -
static静态修饰符的用法和需要注意的地方
面向对象中static修饰的内容隶属于类而不是属于对象1. static用来修饰成员变量:被static修饰的成员变量叫静态成员变量,如果没有被修饰叫非静态成员变量定义变量后只运行一次代码的初始化操作,之后会跳过该初始化操作设置静态全局变量一般是为了解决数据共享问题静态变量是属于这个类,而不是属于某个对象的1.1. 静态成员变量的访问方式:用对象进行访问:对象名.变量名可以通...原创 2019-03-19 00:43:37 · 642 阅读 · 0 评论 -
java中关键字this和super的用法和区别
this和super的用法以及它们的区别在这里做了一些整理,大家可以参考使用1. this:this是自身的一个对象,以下是几种用法:1.1.当形参与成员变量重名时,用this来区分,this.name 代表类的成员变量1.2.引用构造函数,this(参数)是调用本类中另一种形式的构造函数,应该放在构造函数的第一条语句2. super:super是指向离自己最近的父类的一个指针,以下是几种...原创 2019-03-18 20:37:38 · 2248 阅读 · 0 评论 -
java中的四种访问修饰符
对于四种访问修饰符的作用范围以及用法等等,一直都是模模糊糊,在这里整理了一下分享出来,希望对大家也能有所帮助1.我们都知道java的面向对象思想之一就是封装细节公开接口,java通过访问控制修饰符来控制类及类的方法和变量的访问限制从而向外提供接口隐藏细节2.四种访问修饰符的作用范围排序:public > protected > default > private2.1.p...原创 2019-03-18 20:20:14 · 966 阅读 · 1 评论