自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 Java多线程 死锁问题

死锁考考你写一个必然死锁的例子发生死锁必须满足哪些条件?如何定位死锁?有哪些解决死锁问题的策略?经典的哲学家就餐问题实际工作中如何避免死锁什么是活跃性问题?活锁,饥饿和死锁有什么区别死锁是什么发生在并发中互不相让:当两个或更多线程相互持有对方所需要的资源,有不主动释放,导致所有人都无法继续前进,导致程序陷入无尽的阻塞,这就是死锁。多个线程也可以造成死锁,当多个线程形成环...

2020-03-30 12:50:10 221

转载 Java对象模型

Java对象结构Java对象结构在内存中,一个Java对象包含三部分对象头、实例数据和对齐填充。对象头中又包含锁状态标志、线程持有锁等标志对象头oop-klass modeloopOOP指的是普通对象指针,而kalss用来描述对象实例的具体类型。//定义了oops共同基类typedef class oopDesc* oop...

2020-03-29 18:00:26 108

原创 Java多线程 Java内存模型

Java 内存模型从Java代码到CPU指令的变化过程在Java代码中,使用的控制并发手段例如synchronized关键字,最终也是要转化为CPU指令来生效的,我们来回顾以下Java代码到最终执行的CPU指令的流程最开始,我们编写Java代码,是*.java文件在编译(javac命令)后,从刚才的*.java文件会变出一个新的Java字节码文件(*.class)JVM会执行刚才生成的...

2020-03-29 17:51:16 158

转载 Java多线程 synchronized底层原理

synchronized底层实现本文转载 https://github.com/farmerjohngit/myblog/issues/12synchronized简介Java中提供了两种实现同步的基础语义:synchronized方法和synchronized块,public class SynTest{ public void syncBlock(){ sync...

2020-03-27 23:43:19 254

原创 Java多线程 并发安全问题简介

并发安全问题一共由哪几类线程安全问题哪些场景需要额外注意线程安全问题什么是多线程的上下文切换线程安全问题当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。什么情况下会出现线程安全问题运行结果错误:a++问题活跃性问题:死锁,...

2020-03-27 16:55:16 142

原创 Java异常

Java异常Java异常体系图Exception的子类有很多,主要可概括为运行时异常和非运行时异常Java异常体系结构Throwable类时是所有异常的错误的超类,两个直接子类为Error和Exception,分别表示错误和异常,其中异常类Exception又分为运行时异常和非运行时异常,这两种异常有很大区别。Error和ExceptionError是程序无法处理的错误,他是有JV...

2020-03-27 00:21:07 119

原创 Java多线程 线程的属性

线程的属性什么时候我们需要设置守护线程?我们应该如何应用优先级来帮助程序运行?不同的操作系统如何处理优先级问题?线程各属性纵览属性名称用途编号(ID)每个线程有自己的ID,用于标识不同的线程名称(Name)作用让程序员或用户再开发、调试或运行过程中,更容易区分每个不同线程、定位问题等。是否是守护线程(isDaemon)true代表该线程是守护线程...

2020-03-26 22:15:28 133

原创 java多线程 sleep方法与join方法

Sleep方法相关wait与sleep方法的异同相同点:wait和sleep方法都可以使线程阻塞,对应线程状态时Waiting或Timed waiting。wait和sleep方法都可以使用中断Thread.interrupt().不同点wait方法的执行不许再同步方法块中进行,而sleep不需要再同步方法块中使用sleep方法时,不会释放monitor锁,但是wait方法会释...

2020-03-26 21:36:58 367

原创 Java多线程 wait(),notify(),notifyAll()

多线程中的常见方法面试中的常见问题为什么线程通信的方法wait(),notify(),和notifyAll()被定义在Object类中,sleep定义在Thread类里?用3种方法实现生产者模式JavaSE8和Java1.8和JDK8是什么关系,是同一个东西吗?join,sleep和wait期间线程的状态分别是什么,为什么?Thread与Object中与多线程常见的方法Thre...

2020-03-26 14:56:46 160

原创 java多线程 synchronized关键字

synchronized课程主要内容synchronized简介:作用、地位、不控制并发的后果两种用法:对象锁和类锁多线程访问同步方法的7种情况,是否是static,synchronized方法等。synchronized的性质:可重入、不可中断原理:加解锁原理,可重入原理、可见性原理synchronized的缺陷:效率低,不够灵活,无法预判是否成功获取到锁。常见面试问题:使用注...

2020-03-26 09:44:28 95

原创 Java 多线程 线程的在Java中的生命周期

线程的生命周期线程的一生–6个状态(Java)newrunnableblockedwaitingtimed waitingterminatednew状态当Thread类的对象被创建出来,还没有执行start()方法时,此时处于new状态。runnable状态对象一旦调用start()方法,线程进入runnable状态。该状态对应操作系统中的两种状态,ready和runni...

2020-03-25 17:27:27 161

原创 java多线程 线程的启动和停止

线程的启动和停止简介线程的启动方法一 实现Runnable接口,重写run()函数,运行start()方法Runnable run = new Runnable() { @Override public void run() { while(true && !Thread.currentThrea...

2020-03-25 12:25:48 1659

原创 AcWing 算法基础 dijkstra

dijkstra简介dijkstra算法是单源最短路径算法。单源即在一个有向图中,从一个节点出发,算法可求该节点至所有可到达节点的最短路径长度。与之相对的称为非单源最短路,即算法运行一次可求出任意节点至任意可到达节点的最短路长度,其代表是floyd算法。单源最短路有两种常见算法,dijkstra算法和bellman-ford算法。前者只能用于求路径权值全部为非负数的最短路,后者是可以求边权中...

2020-03-18 23:48:16 472 1

原创 AcWing 算法基础 拓扑排序

拓扑排序拓扑排序简介有序无环图有拓扑排序,拓扑排序是一个有向无环图的所有顶点的线性序列必须满足两个条件:每个顶点出钱且只出现一次若存在一条从顶点A到顶点B的路径,那么在序列中顶点A出现在顶点B前面有向无环图才有拓扑排序,非DAG没有拓扑排序如何得到拓扑排序从DAG图中选择一个没有前驱(入度为0)的顶点并输出从图中删除该顶点和所有以他为起点的有向边重复1,2,知道当前的DAG...

2020-03-18 21:35:07 181

原创 Java HashMap源码阅读

HashMapHashMap的默认属性//table默认初始化容量static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;//table最大容量static final int MAXIMUM_CAPACITY = 1 << 30;//加载因子,HashMap在其容量自动增加前可达到多满的尺度static fina...

2020-03-18 11:34:51 97

原创 MySQL45讲 索引(2)

MySQL索引MySQL为什么有时候会选错索引我们知道,MySQL是有很多索引的,但是我们在写SQL语句的时候,并没有主动指定使用哪个索引,也就是说,使用哪个索引是由MySQL来确定的。因此有时就会发生一种情况,由于MySQL选错了索引,导致本来应该执行的很快的语句执行的很慢。一个例子对于如下建表语句create table t( id int(11) not null, ...

2020-03-13 16:28:04 212

原创 MySQL实战45讲 索引(1)

MySQL索引总结索引的作用索引的出现其实就是为了提高数据查询的效率,就像书的目录一样,一本500页的树,如果想快速找到其中的某一个知识点,在不借助目录的情况下,是需要找很长时间的,同样,对于数据库的表而言,索引就是他的目录索引的常见模型索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,这里也就引入了索引模型的概念,可以用于提高读写效率的数据结构很多,这里主要有三种常见的,也比较...

2020-03-12 16:20:06 135

原创 AcWing 算法基础 并查集

并查集并查集解决的问题将两个集合合并询问两个元素是否在一个集合中基本原理用树的形式来维护每个集合,树根的编号就是整个集合的编号,每个节点存储他的父节点,p[x]表示x的父节点问题1,如何判断树根:if(p[x] == x);问题2,如何求x集合的编号: while(p[x] != x) x = p[x];问题3,如何合并两个集合,px是x集合的编号,py是y的集合编号,令p[x...

2020-03-11 12:07:04 283

原创 AcWing 算法基础 KMP字符串

KMPKMP解决了一个什么问题假设有两个字符串,一个长字符串,一个短字符串,我们想要知道在这个长字符串中是否包含这个短字符串,就需要在长字符串中搜索短字符串。那么我们最容易想到的方法是什么呢,就是暴力法:public void main(){ //a为长字符串 String a = "ababababaab"; //b为短字符串 String b = "bab...

2020-03-10 23:37:01 234

原创 Spring注解-Day3--自动注入

Day 3@Value@Value注解用于设置需要注入容器的Bean的值,使用方法有以下三种:基本数值可以写SpEL,#{}可以通过${}取出配置文件中的值(在运行环境变量里面的值)要读取配置文件,需要在配置类上方添加@PropertySource(value = {“classpath:/person.properties”},encoding = “gbk”)注解读取配置文件...

2020-03-10 12:51:17 202

原创 AcWing 算法基础 链表,栈与队列

链表,栈与队列的简单讲解单链表单链表是一种常见的数据结构,其包含自身所存储的值和指向下一个节点的指针如果该链表没有下一个节点,则指向null。链表的实现分为静态链表与动态链表,其中静态链表每个节点使用数组实现,动态链表的节点使用不连续的块内存(结构体或类)来实现。使用数组实现单链表数据结构单链表一般有三种操作,从头插入,从中间插入,删除操作AcWing 826单链表实现一个单链表,链表...

2020-03-09 17:42:41 143

原创 JavaWeb 监听器

ListenerListener简介Listener中文名为监听器,是javaWeb的三大组件之一,Servlet,Filter,Listener。监听器监听事件的发生,当事件发生时,触发相应的处理函数。监听器可以监听什么监听器监听以下三个对象ServletRequest,请求对象ServletContext,代表当前整个web应用。HttpSession,session对象...

2020-03-09 16:19:51 356

原创 AJAX学习

Ajaxajax介绍AJAX(Asynchronous Javascript And XML)(一部JS与XML)是一种无刷新页面与服务器的交互技术:页面不刷新就可以收到服务器的响应。原来的交互发送请求服务器收到请求,调用相对应的servlet进行处理,servlet处理完成会有响应信息生成浏览器收到的服务器的响应数据,把之前的页面清楚,展示新的数据。(效果就是页面刷新)现在的交...

2020-03-09 13:24:38 106

原创 Filter过滤器注意事项

FilterFilter简单介绍web 服务器的三大组件 Servlet Filter ListenerFilter是用来执行过滤任务的一个对象,他的作用范围:请求一个资源(动态资源Servlet,JSP,静态资源)来自一个资源的响应以上两个都可以filter过滤请求和响应filter可以拦截请求,可以修改请求头,请求内容filter可以拦截来自服务端的响应。(respon...

2020-03-09 09:01:36 421

原创 表单重复提交解决办法

表单重复提交表单重复提交的发生场景成功之后,直接刷新页面(每次刷新就是重复上一次请求)网速,服务器性能等原因导致处理请求很慢,导致用户狂点注册。用户成功以后点击后退,再次提交。表单重复提交的危害数据库多次保存相同数据;安全问题;服务器性能问题;表单重复提交的具体原因服务器不知到是否为同意请求,Http为无状态协议。因为每次Http请求过来都会创建一个新的tcp连接。...

2020-03-08 00:01:50 205

原创 请求转发与重定向相关知识总结

转发与重定向转发转发属于服务器端的定位,转发过程与浏览器没有关系,服务器接收到一个请求后,对相应的资源进行请求,并将相应的资源返回给浏览器。重定向重定向是依赖服务器与客户端浏览器一同实现的,服务器再接收到一个请求后,向客户端返回一个特殊的命令,该命令使得客户端取请求一个新的资源,该过程就是重定向。转发与重定向的区别转发重定向浏览器地址栏不会变化会变化...

2020-03-07 23:51:30 148

原创 AcWing 算法基础 位运算

位运算简介位运算一般为二进制的位运算,根据某一位是0还是1进行计算。例题 二进制中1的个数给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。import java.util.*;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import...

2020-03-06 11:53:54 250

原创 AcWing 算法基础 离散化

离散化简介离散化是指在一个很大的区间上,只有一些稀疏的数字对我们是有用的,我们就可以对这个大范围做离散化,将该大区间中对我们有用的数字抽出来,形成一个新的数组。如上图所示,在一个黑色的大区间内,只有几个红色的数据对我们来说是有用的,所以我们可以将这些红色的数据从大区间中抽出来,组成一个新的序列,新序列的下标位原序列的位置。新序列的值位原序列中的相应位置的值。例题 区间和假定有一个无限长...

2020-03-06 11:53:11 361

原创 ACwing 算法基础 区间合并

区间合并介绍区间合并是指有多个区间,其中某些区间是可以合并为一个区间的。如下图所示的两个区间,其左区间右端点和右区间的左端点是交叉的,所以这两个区间就可以合并。我们首先通过区间的左端点进行排序,这样两个区间一共有三种情况:如果1区间的右端点大于2区间的左端点,如果1区间的右端点大于2区间的右端点,则两个区间可以合并为1区间。如果1区间的右端点大于2区间的左端点,如果1区间的右端点小...

2020-03-06 11:51:57 396

原创 MySQL原子性与持久性的保证(undo log, redo log与binlog)

MySQL原子性与持久性的保证(undo log, redo log与binlog)MySQL的ACID特性原子性(Atomicity):原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做对于银行转账来所就是要么都做,要么都不做。一致性(Consistency):一致性是指事务执行前后,数据处于一种合法的状态,这种状态是语义上的而不是语法上的。隔离性(Isolat...

2020-03-05 15:27:53 3116 5

原创 双指针算法

双指针算法介绍双指针算法是指使用两个指针分别指向不同的位置,整个算法过程都维护这两指针,两个指针指向的位置有两类。如下图所示两个指针分别指向两个序列。两个指针指向同一个序列。//模板for(int i=0, j=0; i < n; i++){ if(j < i && check(i,j)) j++; //每道题的具体逻辑。}核心思...

2020-03-04 16:30:32 442

原创 Spring注解-Day2--初步认识Bean的生命周期

初步认识Bean的生命周期Bean实例的生命周期中的初始化和销毁阶段Bean大概有三个过程 创建–初始化–销毁,由IOC容器管理Bean的生命周期,我们可以自定义初始化和销毁的方法,对于单实例对象和多实例对象,初始化的时机都是在对象创建完成,并赋值之后,调用初始化方法。对于单实例对象,在IOC容器调用close方法之后,bean进入销毁过程;而对于多实例对象,IOC容器不对Bean的销毁做管...

2020-03-04 00:02:55 116

原创 MySQL实战45讲学习笔记--MySQL整体架构

MySQL基础架构首先MySQL的基础架构图如下图所示大体来说MySQL可以分为Server层和存储引擎层两部分。Server层包括连接器,查询缓存,分析器,优化器,执行器等,蕴含MySQL大多数核心服务功能,以及所有的内置函数,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等等。下面从上到下介绍每一个组件的作用。连接器我们如果想操作MySQL数据库,那么我们所操作的客...

2020-03-03 18:46:36 141

原创 大数运算

大数运算大数运算的概念大数运算指最特别大的数进行运算,一般超过计算机能表示的最大数字。核心思想是将这些数字放在一个集合或者数组中,在根据基本的加减乘除的计算规则对大数一位一位的进行计算。这里共整理的四个类型,均为ACwing上的算法基础课中的模板题Java自带大数类,所以这部分可以不是特别重要,但是也可以掌握一下。四种类型类:大数+大数大数-大数(答案可以为负数)大数*小数大数/...

2020-03-03 15:46:40 405

原创 Spring常用注解-学习Spring注解驱动开发--Day 1

Spring 注解驱动开发Day 1该课程主要讲述使用Spring注解来进行开发注解整理@Configuration该注解标注一个类为Spring配置类,表示该类代替原始的xml配置文件@ComponentScan该注解用于配置Spring将哪些类装进IOC容器中,在注解中,参数value填写所扫描的包名,includeFilters和excludeFilters用于配置装载...

2020-03-02 23:26:48 111

原创 二分法注意事项与具体实现(java)

二分法二分法主要有两种,一种是整数二分,一种是实数二分。整数二分整数二分有两种情况,求出的结果分别对应两种需求得到满足结果的最左侧下标。while(l < r){ int mid = (l+r)/2;//取中值 if(nums[mid] >= ans) r = mid;//这里有两种选择,两种选择的关键就是把等号划分到 > 这边还是 < 这边。...

2020-03-01 21:59:41 264

原创 逆序对--归并排序的具体应用

逆序对逆序对介绍对于数列 5,4,4,3,1,8。从其中选择两个数,如果第一个数比第二个数大,则该数对为逆序对。5,4 为逆序对5,3 为逆序对4,8 不是逆序对逆序对的计算流程大体流程使用归并排序的思想假设数组被分为左右两部分,左右两部分为排好序之后的情况以右侧数组为基准,在归并过程中,如果左侧的数字小于等于右侧的数字,则正常归并排序。如果右侧指针指向的数字小于...

2020-03-01 18:42:24 136

原创 java new一个对象的时候JVM做了什么

Java在new一个对象的时候,如果该对象所属的类没有被加载到内存,那么整体过程分为两步:类加载过程(第一次使用该类)创建对象过程类加载过程若对象所属的类是第一次使用,那么将会使用双亲委派模型来进行类的加载,有类加载器负责根据一个类的全限定名来读取此类的二进制字节流到JVM内部,并将其转换为一个与目标类型对应的java.lang.Class对象实例验证格式验证:验证是否符合cl...

2020-03-01 17:13:06 185

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除