- 博客(53)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 集合底层原理
Collection 单列集合List 集合List 集合的三个子类: ArrayList:底层是数组,查询快(地址连续)、增删慢、线程非安全。 LinkedList:底层是链表,查询慢、增删快、无索引、线程非安全。 Vector:底层是数组,线程安全。一、ArrayList 原理1.1 构造方法ArrayList 底层是一个数组结构,当指定初始容量为0时返回的是 EMPTY_ELEMENTDATA,不指定容量时返回 DEFAULTCAPACITY_EMPTY...
2020-07-01 12:53:43
5469
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Spring的IOC底层原理
基于注解的IOC容器流程Spring基于注解的开发方式,获取IOC容器。AnnotationConfigApplicationContext是一个用来管理注解bean的容器,继承GenericApplicationContext这个通用应用上下文。接下来我们就看看 AnnotationConfigApplicationContext 是怎么实现Bean的创建-初始化等一系列工作。...
2020-04-22 16:10:12
690
原创 volatile 原理
volatile 关键字是Java提供的一种轻量级同步机制。它能够保证可见性和有序性,但是不能保证原子性。可见性每个Java线程都有自己的工作内存。操作数据,首先从主内存中读取数据,得到一份拷贝,操作完毕后再写回到主内存。 这样某个线程对主内存内容的更改,立刻通知到其它线程。可见性测试:class MyData{ //保证多个线程对number的修改其他线程可见 volatile int number = 0; public void add60(){
2020-08-02 11:43:51
180
原创 Java锁
公平锁/非公平锁概念:所谓公平锁,就是多个线程按照申请锁的顺序来获取锁,类似排队,先到先得。而非公平锁,则是多个线程抢夺锁,会导致优先级反转或饥饿现象。区别:公平锁在获取锁时先查看此锁维护的等待队列,为空或者当前线程是等待队列的队首,则直接占有锁,否则插入到等待队列,FIFO原则。非公平锁比较粗鲁,上来直接先尝试占有锁,失败则采用公平锁方式。非公平锁的优点是吞吐量比公平锁更大。synchronized和juc.ReentrantLock默认都是非公平锁。ReentrantLock在构造的时候传入
2020-08-02 11:16:21
194
原创 多线程面试题
1.并发与并行并发:指两个或多个事件在同一时间段内发生的。(交替执行) 并行:指两个或多个事件在同一时刻发生。(同时执行)2.线程与进程进程:指正在运行中的应用程序,进程是程序的一次执行过程,是系统运行程序的基本单位。 线程:线程是进程中的一个执行单元,负责当前进程中任务的执行,一个进程中至少有一个线程。3.线程状态新建(New)可运行(Runnable)阻塞(Blocked)等待(Waiting)超时等待(Timed Waiting)死亡(Terminated)
2020-07-26 16:13:57
347
原创 Java基础面试题
JavaSE1.==与equals()的区别。==比较的是两个对象的地址是否一样,equals重写比的是两个对象的内容是不是一样1)对于==如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如Str
2020-07-26 16:08:12
331
原创 RabbitMQ
RabbitMQRabbitMQ是基于AMQP的消息管理系统五种消息模型一、基本消息模型P(producer/ publisher):生产者,一个发送消息的用户应用程序。C(consumer):消费者,消费和接收有类似的意思,消费者是一个主要用来等待接收消息的用户应用程序队列(红色区域) 生产者将消息发送到队列,消费者从队列中获取消息,队列是存储消息的缓冲区。二、work消息模型工作队列或者竞争消费者模式work模型:让多个消费者绑定到一个队列,共同消费队列中的消
2020-06-16 00:41:11
287
原创 Mysql添加数据失败 Cannot add or update a child row: a foreign key constraint fails
原因:1. 设置的外键与外键对应的表的主键值不匹配。2. 插入数据前要先确保外键对应的表包含数据,如果关联的表没有数据,此时该表的主键值作为另一表的外键值,插入数据就会报错。比如A表的主键id字段是B表的外键,给B表插入数据前必须保证A表的主键至少是有数据的。否则就会报Cannot add or update a child row: a foreign key constraint fails。...
2020-05-24 00:17:32
7923
4
原创 Redis面试题
Redis 持久化机制Redis是一个支持持久化的NoSQL数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。实现:单独创建fork()一个子进程,将当前父进程的数据库数据复制到子进程的内存中,然后由子进程写入到临时文件中,持久化的过程结束了,再用这个临时文件替换上次的快照文件,然后子进程退出,内存释放...
2020-05-04 12:15:43
323
原创 MySQL 优化,索引
一、MyISAM 和 InnoDB1. 对比:2. MyISAM适用于读操作多于写操作,写锁后其他线程不能做任何操作,会造成阻塞。不支持事务。支持Btree索引MyISAM 使用表锁:执行select语句前,会自动给涉及的表加读锁,执行增删改前给涉及的表自动加写锁。3. InnoDBMysql 默认InnoDB 存储引擎,部分支持事务,支持Btree和自适应Hash...
2020-05-04 10:28:09
235
原创 Shiro
Shiro 是什么?Apache Shiro 是 Java 的一个安全(权限)框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以完成:认证、授权、加密、会话管理、与Web 集成、缓存等。Shiro 功能简介Authentication:身份认证/登录,验证用户是不是拥有相应的身份。Aut...
2020-04-24 22:14:42
300
原创 Spring注解归纳
一、配置注解1. @Configuration 告诉Spring这是一个配置类,此注解等同于配置文件<bean></bean> (类上)2. @ComponentScan value属性:指定要扫描的包 (类上)excludeFilters = Filter[] ,指定扫描的时候按照什么规则排除哪些组件FilterType.ANNOTATION 按照注解扫描...
2020-04-20 22:56:10
190
原创 ssm整合
ssm整合整体流程一、整体环境搭建1. 创建数据库和表2.创建包domain:实体类 Accountdao:实体类接口,增删改查方法service:业务层 AccountService,impl:AccountServiceImplcontroller:SpringMVC框架控制器3.pom.xml文件中导入jar包依赖<properties> ...
2020-04-15 21:47:20
195
原创 SpringMVC
SpringMVC的组件一、前端控制器DispatcherServlet:前端控制器用户请求到达前端控制器,它就相当于 mvc 模式中的 c,dispatcherServlet 是整个流程控制的中心,由 它调用其它组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性。 <!-- 前端控制器 --> <servlet>...
2020-04-14 22:33:28
182
原创 Spring
一、基于 XML 的配置1. IOC 中 bean 标签和管理对象细节1.1 bean标签作用: 用于配置对象让 spring 来创建的。 默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。属性: id:给对象在容器中提供一个唯一标识。用于获取对象。 class:指定类的全限定...
2020-04-11 11:56:25
175
原创 Servlet的生命周期 AND forward和redirect区别
Servlet生命周期:Servlet程序加载 --> 初始化 --> 服务 -->销毁init():负责对Servlet程序进行初始化,当服务器执行Servlet程序时,读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将创建的ServletConfig对象作为init方法的参数,完成对Servlet对象的初始化。in...
2020-03-24 17:29:50
205
原创 Tomcat打开startup.bat失败
Tomcat服务器安装完毕后,点击startup.bat无法正常启动,命令窗口闪烁秒退,失败原因是因为没有配置JAVA_HOME环境变量。第一步:右键此电脑属性,找到高级系统设置,然后点击环境变量,配置JAVA_HOME环境变量 第二步:配置JAVA_HOME环境变量在系统变量中新建JAVA_HOME变量...
2020-03-22 22:28:35
3724
原创 JDBC数据库连接
使用JDBC进行数据库操作步骤:1. 加载驱动:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名。Class.forName(“com.mysql.jdbc.Driver”);通过配置文件获取连接必需的4个因素,实现代码和数据的分离,可直接在配置文件中修改配置信息。user=rootpassword=1214url...
2020-03-15 21:34:03
188
原创 反射
反射Java反射机制提供的功能 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时获取泛型信息 在运行时调用任意一个对象的成员变量和方法 在运行时处理注解 生成动态代理 反射相关的主要API java.lang.Class:代表一个类 jav...
2020-02-27 18:59:20
150
原创 IO流
IO流File类File类的使用1.File类的一个对象,代表一个文件或一个文件目录(文件夹)2.File类的声明在java.io包下3.File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。4.后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的"...
2020-02-23 16:20:51
131
原创 线程同步
一. 线程安全1.1 线程安全概念如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样 的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步, 否则...
2020-02-15 18:36:09
167
原创 线程
一. 线程和进程1.1 并发与并行并发:指两个或多个事件在同一时间段内发生的。(交替执行) 并行:指两个或多个事件在同一时刻发生。(同时执行)1.2 线程与进程进程:指正在运行中的应用程序,每个进程都有一个独立的内存空间,进程是程序的一次执行过程,是系统运行程序的基本单位。每当用户启动一个进程时,操作系统为该进程分配一个独立的内存空间,让进程在这个独立内存空间运行。 线程:线程是...
2020-02-15 17:07:25
133
原创 Map集合
一. Map集合1.1 概述上一篇博客提到了集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.Map单例集合在上一篇博客已经总结,现在对双列集合Map进行总结。java.util.Map<k,v>集合 Map集合的特点:1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个v...
2020-02-15 09:08:15
345
原创 Java异常
一. 异常1.1 异常的概念 异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行。1.2 异常体系异常的根类是java.lang.Th...
2020-02-09 11:58:32
877
2
原创 代理模式(Proxy)
代理模式:为一个对象提供一个替身,以控制对这个对象的访问,通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。一. 静态代理1. 静态代理使用时需要定义接口或者父类,被代理对象(目标对象)与代理对象一起实现相同的接口或者继承相同的父类。2. 代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法。3...
2020-02-08 17:42:58
318
原创 计算字符串中每个字符出现次数。
分析:1. 使用Scanner对象获取字符串2. 创建Map集合,key存储字符串中的字符,value存储字符出现的次数3. 遍历Map集合,获取每一个字符4. 判断获取的字符在Map集合中是否存在 key存在:通过get(key),获取value value++,put(key,value) 把新的value值存储到集合里 key不存...
2020-02-07 16:59:15
486
原创 List和Set集合
一. List集合1.1 List接口介绍java.util.List接口继承自Collection接口,是单列集合的一个重要分支。java.util.List接口 extends Collection接口List接口的特点: 1.有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123) 。 2.有索引,可通过索引操作集合,包含一些带索引的方法 。...
2020-02-04 21:48:44
291
原创 Collection集合,Iterator迭代器,泛型
一. Collection集合1.1 集合概述集合:集合是java中提供的一种容器,可以用来存储多个数据。集合和数组既然都是容器,我们为什么要引入集合呢?①数组的长度是固定的。集合的长度是可变的。②数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。当对象多的时候,使用集合进行存储。1.2 集合框架集合按照其存储结构可以分...
2020-02-04 18:50:04
294
原创 装箱拆箱
什么是装箱?什么是拆箱?装箱:基本类型转变为包装器类型的过程。拆箱:包装器类型转变为基本类型的过程。装箱和拆箱的执行过程装箱是通过调用包装器类的 valueOf 方法实现的list.add(3);将自动变换成list.add(Integer.valueOf(3));这种变换称为自动装箱拆箱是通过调用包装器类的 xxxValue 方法实现的,xxx代表对应的基本数据类...
2020-01-29 15:11:25
105
原创 StringBuilder
1.当我们需要由较短的字符串构建字符串时,采用字符串拼接每次都要创建一个新的String对象,耗时又浪费时间。使用StringBuilder类就可以避免这个问题。首先构建一个空的字符串构建器StringBuilder res = new StringBuilder();当每次需要添加内容时,调用append方法res.append("def");res.append('c')...
2019-12-19 21:09:32
200
原创 面向对象三大特征
面向对象三大特征:1.封装: 1)类:封装的是对象的属性和行为 2)方法:封装的是具体的逻辑功能实现 3)访问控制修饰符:封装的是访问的权限2.继承: 1)作用:避免代码重复,有利于代码的复用 2)父类:所有子类所共有的属性和行为 子类:子类所特有的属性和行为 3)子继承(extends)父类后,子具有:父+子 4)...
2019-12-03 17:06:25
195
原创 面向对象03
1.static:静态的静态不能直接调用非静态,非静态可以调用静态 1)静态变量:对象共有的属性可以定义为静态 1.1)由static修饰 1.2)属于类的,存在方法区中,只有一份,随着类加载而使用 1.3)常常通过类名.来访问 1.4)何时用:所有对象的数据一样时使用 2)静态方法: 2.1)由stati...
2019-12-03 17:04:36
131
原创 面向对象02
1.内存管理:由JVM来管理 1)堆: 1.1)用于存储所有new出来的对象(包括成员变量) 1.2)成员变量的生命周期: 创建对象时存在堆中,对象被GC回收时一并消失 1.3)垃圾回收器(GC)不定时到堆中查看,看到垃圾 自动回收:没有任何引用所指向的对象。回收...
2019-12-03 16:54:36
110
原创 ==和equals的区别
1. ==如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等。 int a=10; int b=10; System.out.println(a==b); //结果为true如果作用于引用类型的变量,则比较的是所指向的对象的地址。 String s1="abc"; //将abc放入字符串常量池 ...
2019-12-03 16:08:14
89
原创 LeetCode字符串
647 回文子串思路:回文子串是对字符串的子串进行判断,看是否为回文子串。子串分为奇数偶数的情况,抽出一个方法分别对奇偶情况进行判断。定义左右指针,对指针区间进行是否回文,奇数以一个元素为中心,偶数以两个元素为中心,判断中心两边是否相等。public int countSubstrings(String s) { int res=0; for(int i=...
2019-11-22 23:50:26
142
原创 用面向对象解决String例题
1. 检查社保号码思路:1. 首先判断长度是否满足要求 2. 其次号码的3 和 6位置是否为 - 3. 判断三段数字是否满足要求package day03;//判断格式 DDD-DD-DDDDimport java.util.Scanner;public class Class21 { public static void main(String[] args) { ...
2019-08-05 18:48:28
231
1
原创 面向对象01
1. 面向对象和面向过程的区别?面向过程就是分析出解决问题的步骤,然后用函数一步一步实现,在使用的时候调用即可;面向对象则是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。面向对象优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护缺点:性能比面向过程低2. 类和对象什...
2019-08-04 18:28:56
162
原创 二维数组
1. 二维数组的基本知识 1.1 声明二维数组变置并创建二维数组 下面是声明二维数组的语法: 数据类型[ ][ ]数组名 ; 例:声明 int 型的二维数组变量 matrix: int[ ][ ] matrix;警告: 使用 matrix[2,l] 访问行下标为 2、 列下标为1的元素是一种常见错误。 在 Java 中,每个下标...
2019-07-31 15:30:57
716
原创 LeetCode数组
66 加一问题思路: 加1之后变为两位数,则进行求余,将余数放进数组最后一位,然后两位数进行进位,当数组元素全是9时才出现进位扩容情况。判断是否需要扩容,需要则新数组第一位为1 其余元素为0。package arrayTest;public class AddOne66 { public static void main(String[] args) { } public i...
2019-07-29 09:11:54
178
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人