自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 [重识多线程] 01- java多线程创建

一、什么是线程进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。操作系统在分配资源时是把资源分配给进程的,但是CPU资源比较特殊,它是被分配到线程的,因为真正要占用CPU运行的是线程,所以也说线程是CPU分配的基本单位。以Java 为例,我们启动一个main函数时,实际上就是启动了一个JVM 的进程,main函数所在的线程就是这个进程的一个线程,也称为主线程。一个JVM进程中有多个线程,多个线

2020-06-14 20:21:42 68

原创 IDEA-Debug高级技巧

IDEA-Debug技巧idea 至于介绍就看官网就ok了,https://www.jetbrains.com/idea/download/other.html一、基本用法&快捷键Debug主要对应的是横向的一条和纵向的一条:1、首先说第一组按钮,共8个按钮,从左到右依次如下:Show Execution Point (Alt + F10):如果光标在其它行或其它页面,点击这个按钮可跳转到当前代码执行的行。Step Over (F8):步过,一行一行地往下走,如果这一行上有方法不会

2020-06-14 11:00:18 140

原创 PicGo + 阿里云oss搭建个人图床工具

取代 七牛云+Mpic 方案/ PicGo + GitHub其实我之前是一个资深的Typora用户,逐步的见证了Typora做的越来越好,之前使用Typora进行记录的时候,发现了几个痛点,其中之一最让人头疼的就是图床,最早的时候使用的是七牛云+Mpic的解决方法搞定了图床的问题,奈何七牛云的测试空间收回导致了我很多的图片的链接失效,哎,很头疼,后来为了使用七牛云存放图片,还专门的去申请了自己的域名,花了不少的代价,域名的备案,服务器的申请,当时还是学生有1折的优惠,奈何还是承受不住经济的压力。直到今天

2020-06-14 09:50:47 118

原创 移动web-01

文章目录第1章基础知识1.1 屏幕1.2 长度单位1.3 像素密度1.4 设备独立像素1.5 像素第2章远程调试2.1 模拟调试2.2 真机调试第3章 视口3.1 PC设备1.2 移动设备1.3 移动浏览器第1章基础知识1.1 屏幕移动设备与PC设备最大的差异在于屏幕,这主要体现在屏幕尺寸和屏幕分辨率两个方面。通常我们所指的屏幕尺寸,实际上指的是...

2019-05-11 20:47:02 108

转载 CentOS7安装docker 启动失败:Job for docker.service failed... 解决办法

https://blog.csdn.net/lixiaoyaoboy/article/details/82667510

2018-10-27 19:56:02 3374

转载 主机找不到vmnet1和vmnet8,主机vmnet1vmnet8解决方法

https://blog.csdn.net/sinat_25306771/article/details/52761926

2018-10-25 17:26:11 438

转载 @PathVariable出现点号"."时导致路径参数截断获取不全的解决办法

当使用@PathVariable传递路径参数时,竟然神奇的发现,后面一位参数的小数点后面部分竟然不见啦,如下代码:Controller方法注解如下:@RequestMapping(value = "/user/findPassword/{email}", method = RequestMethod.GET, produces="application/json")我这里是想传递个邮箱过来...

2018-10-22 16:08:27 302

原创 Spring问题集:@value放在Spring基于java的配置文件中取不到值

在测试Spring的事务的时候需要连接数据库,但是发现@Value的值一直就是“{${jdbc.url}}”,并没有从配置文件中获取到值, 配置文件的代码如下:@Configuration@ComponentScan(basePackages = {"com.huanghe.*"})@PropertySource("classpath:jdbc.properties")public...

2018-07-26 16:48:02 479

原创 字符串常量池深入解析

字符串常量池字符串常量池概述一、Java中两种创建字符串对象的方式的分析。二、Intern的实现原理(JDK1.8)三、JDK1.7的Intern的执行四:几种特殊的情况的代码参考的部分文章概述  在分析字符串常量池之前,先来分析一下java的内存区域,然后再各种的情况分析一下各种情况下的情况;在《深入理解java虚拟机》这本书上是这样写的:对于H...

2018-07-16 21:21:12 18070 32

转载 Compareable和Comparator的用法

Comparable和Comparator的用法Comparable和Comparator的用法一、Comparable 自然排序二、Comparator 定制排序三、两者之间的差别Java 中为我们提供了两种比较机制:Comparable 和 Comparator 一、Comparable 自然排序Comparable 是排序接口。若一个类实现了Com...

2018-07-15 16:20:01 3215

原创 TreeMap的深入剖析

TreeMap的深入剖析TreeMap的深入剖析一、简介二、概览2.1、属性三、源码分析3.1构造函数3.2 查找3.3 遍历3.3、插入3.4 删除总结参考文献一、简介TreeMap最早出现在JDK 1.2中,是 Java 集合框架中比较重要一个的实现。TreeMap 底层基于红黑树实现,可保证在log(n)时间复杂度内完成 conta...

2018-06-26 21:06:56 340

原创 HashMap的深入剖析

HashMap的深入剖析HashMap的深入剖析前沿一、HashMap的顶部注释二、HashMap的依赖关系三、HashMap的数据结构五、HashMap 构造函数六、put()方法6.1、 hash(Object key)6.2、putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict)6....

2018-06-26 16:40:12 201

原创 Map集合、散列表

Map集合、散列表Map集合、散列表一、Map1.1、为什么需要map1.2、Map与Collection的区别1.3、Map的大家庭1.4、简单的介绍一下Map的常用的功能二、散列表介绍2.1、散列表工作原理2.2、哈希函数2.3、hash冲突2.4、哈希函数构造方法2.5、处理冲突2.6、查找及分析参考文献一、Map1.1、为...

2018-06-25 16:50:53 1076

原创 List集合之LinkedList深度解析

List集合之LinkedList深度解析List集合之LinkedList深度解析1.1、结构图1.3、LinkedList 构造函数1.3.1、LinkedList()1.3.2、LinkedList(Collection1.3.3、小结1.4.1、添加方法(Add)概览1.4.2、 add(E e) & addLast(E e) & offer(E e...

2018-06-25 11:17:47 696

原创 Vector

List集合之Vector深度解析List集合之Vector深度解析一、Vector解析1.1、概览1.2、Vector的属性1.3、Vector的 构造函数1.4、Vector的 方法1.4.1、Vector添加方法1.5、Vector线程安全问题的研究总结参考文献现在还是把Lits中重要的知识点回顾一遍,现在这篇主要讲List集合的三个子类:...

2018-06-24 16:54:22 919

原创 List集合之ArrayList

List集合之ArrayList深度解析List集合之ArrayList深度解析一、ArrayList解析1.1、概览1.1.1、java.io.Serializable接口的作用1.1.2、讨论 RandomAccess 的作用。1.1.3、 Cloneable接口的作用:1.1.4、数组的默认大小1.2、ArrayList的属性1.3、ArrayList构造函数1...

2018-06-24 11:43:19 27584 4

转载 对象序列化为何要定义serialVersionUID的来龙去脉

对象序列化为何要定义serialVersionUID的来龙去脉在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到内存,等要用了,再还原到对象中,说白了,就是能将一个2进制文件变成内...

2018-06-23 16:12:48 845

原创 容器中的设计模式

容器中的设计模式容器中的设计模式一、 迭代器模式二、迭代器模式的详细介绍四、适配器模式详解4.1、现实生活中的适配器4.2、实现电源适配器五:参考文献一、 迭代器模式Collection 实现了 Iterable 接口,其中的 iterator() 方法能够产生一个 Iterator 对象,通过这个对象就可以迭代遍历 Collection&nbsp...

2018-06-23 15:45:59 135

原创 容器中的设计模式

容器中的设计模式容器中的设计模式一、 迭代器模式二、迭代器模式的详细介绍三、适配器模式四、适配器模式详解4.1、现实生活中的适配器4.2、实现电源适配器五:参考文献一、 迭代器模式Collection 实现了 Iterable 接口,其中的 iterator() 方法能够产生一个 Iterator 对象,通过这个对象就可以迭代遍历 Collec...

2018-06-23 11:58:28 446

原创 容器概览

容器概览容器概览一、前言:二、概览:Collection2.1、先来谈一谈为什么需要Collection2.2、Collection的由来以及功能三、概览:Map四、概览:Iterator五、参考文献一、前言:由于在找工作的过程中,java容器的知识被问的频率是相当的高的,所以今天借此机会,写一系列的Collection的相关知识,深入到 源码进行...

2018-06-23 10:44:36 85

转载 散列表(hash)

Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于Hash表设计的特殊性,它采用了函数映射的思想将记录的存储位置与记录的关键字关联起来,从而能够很快速地进行查找。 1.Hash表的设计思想  对于一般的线性表,比如链表,如果要存...

2018-06-23 09:53:35 61

转载 Java 中的 ==, equals 与 hashCode 的区别与联系

一、概述1、概念== : 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系equals : Object 的 实例方法,比较两个对象的content是否相同hashCode : Object 的 native方法 , 获取对象的哈希值,用于确定该对象在哈希表中的...

2018-06-19 16:15:51 164

原创 字符串常量池

字符串常量池字符串常量池1、创建字符串的方式1、创建字符串的方式在Java中有两种方法可以创建一个字符串对象:使用new运算符。例如: java String str = new String("Hello");使用字符串常量或者是常量表达式 java String str="Hello"; //(字符串常量) 或者 Strin

2018-06-19 16:11:11 556

转载 红黑树

1、R-B Tree简介2、红黑树的应用3、红黑树的时间复杂度和相关证明4、红黑树的基本操作:左旋和右旋5、红黑树的基本操作(二) 添加5.1、(Case 1)叔叔是红色5.2、 现象说明3. (Case 3)叔叔是黑色,且当前节点是左孩子6、红黑树的基本操作(三) 删除1、R-B Tree简介R-B Tree,全称是Red-Black Tree,又称...

2018-06-17 21:10:55 102

原创 消息中间件-RabbitMQ简单实现和工作队列(2)

1、简单队列”Hello RabbitMQ”2、项目的创建2.1、引入jar包2.2、创建连接2.3、生产者2.3、消费者3、简单队列的不足4、work queue(工作队列)4.1、生产者4.2、消费者14.3、消费者24.4、现象消息队列的使用过程大概如下:(1)客户端连接到消息队列服务器,打开一个channel。 (2)客户端声明一个...

2018-06-09 18:19:06 164

原创 消息中间件-RabbitMQ介绍(1)

1.RabbitMQ历史2.应用的场景2.1、异步处理2.2、应用解耦2.3、流量削峰一般在秒杀活动中应用广泛3、RabbitMQ 基本概念4. 进一步的细节阐明4.1 使用ack确认Message的正确传递4.2 Reject a message4.3 Creating a queue4.4 Exchanges4.5 Virtual hosts...

2018-06-09 11:24:49 136

原创 String, StringBuffer,StringBuilder的区别

java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题。现在总结一下,看看他们的不同与相同。1.可变与不可变String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。 private final char value[]; ...

2018-06-07 20:23:10 52

原创 java中类的加载顺序

1.首先,需要明白类的加载顺序。 (1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法) (2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 ) (3) 父类非静态代码块( 包括非静态初始化块,非静态属性 ) (4) 父类构造函数 (5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 ) (6) 子类构造函数静态块:用static申明,JV...

2018-06-07 19:39:32 65

原创 Java 并发编程:深入理解 ThreadLocal

摘要:  ThreadLocal 又名线程局部变量,是 Java 中一种较为特殊的线程绑定机制,用于保证变量在不同线程间的隔离性,以方便每个线程处理自己的状态。进一步地,本文以ThreadLocal类的源码为切入点,深入分析了ThreadLocal类的作用原理,并给出应用场景和一般使用步骤。...

2018-06-05 10:48:08 84

转载 单例设计模式

摘要:      本文首先概述了单例模式产生动机,揭示了单例模式的本质和应用场景。紧接着,我们给出了单例模式在单线程环境下的两种经典实现:饿汉式 和 懒汉式,但是饿汉式是线程安全的,而懒汉式是非线程安全的。在多线程环境下,我们特别介绍了五种方式来在多线程环境下创建线程安全的单例,即分别使用 sy...

2018-06-05 10:10:02 51

转载 Java并发编程:volatile关键字解析

摘要:  在 Java 并发编程中,要想使并发程序能够正确地执行,必须要保证三条原则,即:原子性、可见性和有序性。只要有一条原则没有被保证,就有可能会导致程序运行不正确。volatile关键字 被用来保证可见性,即保证共享变量的内存可见性以解决缓存一致性问题。一旦一个共享变量被 volatile关键字 修饰,那么就具备了两层语义:内存可见性和禁止进行指令重排序。在多线程环境下,volatile关键...

2018-06-04 22:29:52 203

转载 接口和抽象类的区别

很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。另外,接口和抽象类在方法上有区别:    1.抽象类可以...

2018-06-04 16:38:40 85

原创 java并发编程:wait和sleep的区别

1:wait()可以指定时间也可以不指定时间,sleep必须指定时间2:在同步中时,对CPU的执行权和锁的处理不同:wait()释放CPU的执行权,释放锁;sleep()释放CPU的执行权,但是不释放锁...

2018-06-04 16:01:27 84

原创 java并发编程:线程间通信

摘要:线程与线程之间不是相互独立的个体,它们彼此之间需要相互通信和协作,最典型的例子就是生产者-消费者问题。本文首先介绍 wait/notify 机制,并对实现该机制的两种方式——synchronized+wait-notify模式和Lock+Condition模式进行详细剖析,以作为线程间通信与协作的基础。进一步地,以经典的生产者-消费者问题为背景,熟练对 wait/notify 机制的使用。最...

2018-06-04 15:22:05 186

原创 Java并发编程:内置锁 Synchronized

    在多线程编程中,线程安全问题是一个最为关键的问题,其核心概念就在于正确性,即当多个线程访问某一共享、可变数据时,始终都不会导致数据破坏以及其他不该出现的结果。而所有的并发模式在解决这个问题时,采用的方案都是序列化访问临界资源 。在 Java 中,提供了两种方式来实现同步互斥访问:synchronized 和 Lock。本文针对 synchronized 内置锁 详细讨论了其在 Java 并...

2018-05-31 22:16:57 117

转载 Java并发编程:Lock

    在面中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synchronized的缺陷讲起,然后再讲述...

2018-05-31 17:56:28 56

转载 Java并发编程: ThreadFactory接口用法

线程工厂(ThreadFactory接口)在创建线程的时候,我们当然也能使用工厂模式来生产线程,ThreadFactory是用来实现创建线程的工厂接口,其实它只有一个方法Thread newThread(Runnable r),所以这个接口没多大用,可以自己编写新接口。使用ThreadFactory工厂能替代默认的new Thread,而且在自定义工厂里面,我们能创建自定义化的Thread,并且计...

2018-05-31 10:01:42 348

转载 从零搭建自己的SpringBoot后台框架(一)

Hello大家好,本章我们搭建项目基础框架结构和整合mybatis;项目所需环境jdk1.8,maven,mysql数据库;开发工具IDEA。有问题可以联系我。另求各路大神指点,感谢!一:通过idea工具构建基础框架 1.  打开idea,左上角File→New→Project,看到如下图的页面 2.  点击Next,配置如下图3.  点击Next,配置如下图,这里我们选择数据库MySQL和持久层...

2018-05-31 09:21:21 2474 1

原创 java并发编程:Executor、Executors、ExecutorService

Executors    在Java 5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java 5之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好...

2018-05-30 22:34:17 30596 4

转载 java并发编程:之守护线程(Daemon)

在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比喻,任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾...

2018-05-30 11:13:23 1844

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