Java
文章平均质量分 79
木霖森77
这个作者很懒,什么都没留下…
展开
-
SpringBoot项目在IDEA中的热部署
##我就是想试试热部署是什么大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的Class文件,这个文件里记录着和代码等对应的各种信息,然后Class文件将被虚拟机的ClassLoader加载。而热部署正是利用了这个特点,它监听到如果有Class文件改动了,就会创建一个新的ClaassLoader进行加载该...原创 2018-10-10 15:01:13 · 1054 阅读 · 0 评论 -
Springboot结合mybatis和mybatis generator的插件,利用tk.mybatis的通用mapper实现逆向工程。
SpringBoot结合Mybatis的generator插件以及tk.mybatis的通用mapper实现逆向工程的生成1.首先在数据库中建好表。2.然后在pom中增加mybatis和通用mapper的依赖,以及generator的插件。3.需要自己在utils中的MyMapper中继承tk.mybatis中的通用模板。4.然后编辑generator.xml文件,注意和properti...原创 2019-01-24 16:05:17 · 3332 阅读 · 0 评论 -
IDEA中创建一个Web项目
之前从Eclipse转到IDEA是为了学习Springboot,所以一直没有用IDEA创建简单的Web项目或者简单的Java项目。现将使用IDEA创建Web项目的过程记录如下:1.打开IDEA,选择new project。2.选择创建module之后,就可以创建web下的classes文件夹和lib文件夹。打开project Structure的快捷键:alt+shift+ct...原创 2018-11-18 23:29:58 · 285 阅读 · 0 评论 -
深入理解java虚拟机之垃圾回收算法和垃圾回收器
Garbage Collection上一篇文章我们介绍了jvm中的内存模型,其中PCR、虚拟机栈(VM stack)、本地方法栈(Native Stack)是线程独立的,线程结束之后就会自动消失。java堆和方法区是线程共享的,所以需要在一个方法结束之后进行垃圾回收。首先,我们来学习一下如何判断对象已死:1.引用计数算法(Reference Counting) :给类的对象添加一个计数器,出...原创 2018-11-23 17:32:32 · 243 阅读 · 0 评论 -
java创建多线程两种方式&&定时器
多线程:创建线程的两种方式:Thread thread=new Thread(); thread.run();//直接创建一个Thread对象,在run方法中实现操作;Thread thread=new Thread(){@Overridepublic void run(){Thread.currentThread.getName();//该方法获取到当前线程}}//创建一个Thread...原创 2018-11-22 14:44:04 · 632 阅读 · 0 评论 -
线程之间同步互斥的通信问题之 同步
线程之间同步互斥的通信问题:同步内部类不可以在其外部类的main方法中直接new,因为内部类的实例化必须在外部类的实例化之后。当出现两个线程同步进行的时候,会出现小概率事件,那么我们就可以使用Synchronized修饰要被同步运行的方法。package martina.TraditionalThread;public class TraditionalThreadSynchron...原创 2018-11-22 14:44:31 · 576 阅读 · 0 评论 -
线程同步互斥通信问题之互斥
线程同步互斥通信问题之互斥使用wait()和notify()实现线程之间的通信。要用到同步锁、同一数据或者同一算法的方法都尽量放在同一个类中:程序的健壮性、高类聚实现代码如下:package martina.TraditionalThread;public class TraditionalThreadCommunication { final static Business...原创 2018-11-22 15:44:55 · 221 阅读 · 0 评论 -
线程范围内共享数据的作用和目的
线程范围内的共享变量其实就是用于转账入账等操作时,我们对同一个数据进行操作,但是有不同的执行者,那么我们就需要通过Map将不同的线程对数据的操作放在一起。例如A和B两个人同时对账户里的钱data进行操作,一个设置data一个是取出data(存钱、取钱),我们希望A和B他们的操作时独立的。线程范围内共享数据的作用和目的:线程范围内的共享变量就是在一个相同的线程内部,不同的模块可以对相同的数据进...原创 2018-11-22 17:07:58 · 382 阅读 · 1 评论 -
ThreadLocal实现线程范围内数据共享
线程范围内数据共享的作用和目的见我的上一篇文章。ThreadLocal其实就是相当于Map,可以set和get就好了。package martina.TraditionalThread;import java.util.Random;public class ThreadLocalTest { static ThreadLocal<Integer> threadLo...原创 2018-11-22 20:54:59 · 2031 阅读 · 0 评论 -
线程并发库的应用之线程池
在线程池的编程模式下,任务是提交给整个线程池,而不是直接交给某个线程,线程池在拿到任务之后,在内部找到空闲的线程去执行该任务。其实就是对线程的封装。任务是提交给线程池的,一个线程只能同时执行一个任务,但是可以同时向一个线程池提交多个任务。固定线程池:三个线程的固定线程池 public static void main(String[] args){ //新建含有三个线程的固...原创 2018-11-22 21:51:38 · 646 阅读 · 0 评论 -
线程范围内共享数据的例子
设计四个线程,其中两个线程每次给增加j增加一,另外两个给j减一。package martina.TraditionalThread;/** * 设计四个线程,其中两个线程每次给增加i增加一,另外两个给i减一。 * 方式一:调用两个继承了Runnable类的类进行数据的加减操作 */public class ThreadScopeDataTest{ public static...原创 2018-11-22 23:22:09 · 153 阅读 · 0 评论 -
深入理解java虚拟机之内存模型
完整:https://blog.csdn.net/FanceFu/article/details/79356803简单:https://www.cnblogs.com/jilodream/p/6147791.htmlRTSJ java的实时运行规范 Real Time Specification for Javajava虚拟机管理的内存包括几个运行时数据内存:方法区、虚拟机栈、堆、本地方法...原创 2018-11-23 10:16:43 · 9549 阅读 · 0 评论 -
深入了解java虚拟机之 初识JVM
java技术由java编程语言、java类文件、java虚拟机、java API四个部分组成。JVM的三种解释:对JVM规范的的比较抽象的说明; 对JVM的具体实现; 在程序运行期间所生成的一个JVM实例。JVM的作用:Java虚拟机(JVM) 处在核心的位置,是程序与底层操作系统和硬件无关的关键。它的下方是移植接口,移植接口由两部分组成:适配器和Java操作系统, 其中依赖于平...原创 2018-11-23 14:53:54 · 169 阅读 · 0 评论 -
深入理解java虚拟机之 内存分配和回收策略
上一篇我们学习了GC的 收集算法和七种收集器,今天我们来学习一下内存的分配和回收策略。1.优先在Eden中分配一般情况下 ,大多数的新对象都是在新生代中实例化的,当Eden区的空间不够的时候,发起Minor GC;2.大对象直接进入老年代-XX:PretenureSize Threshold参数,大于此值的对象直接在老年代分配,避免在Eden区和Survivor区之间的大量的内存复制。3...原创 2018-11-26 10:51:09 · 217 阅读 · 0 评论 -
深入理解java虚拟机之类加载机制
回顾我们《深入理解java虚拟机之初识JVM》这篇文章https://blog.csdn.net/mulinsen77/article/details/84391796,我们了解了类加载的过程,我们知道了类加载的生命周期有以下七个阶段:加载、验证、准备、解析、初始化、使用、卸载。其中解析和初始化交换顺序可以实现动态绑定。类初始化的时机:(类初始化的时候加载验证准备也会随着发生)JVM规范中严...原创 2018-11-26 21:01:06 · 352 阅读 · 0 评论 -
Memcached分布式缓存
memcached是一款高性能的分布式内存缓存服务器,一般目的是为了通过缓存数据库的查询命中减少数据库压力、提高应用响应速度、提高可扩展性。memcached缓存特点协议简单基于libevent的事件处理内置内存存储方式memcached不相互通信的分布式使用键值对存储,使用get put等方法。实现memcached有很多种方式,其中最常用的就是一致哈希思想****Cons...原创 2018-12-02 15:55:35 · 399 阅读 · 0 评论 -
String、StringBuffer和StringBuilder的区别
1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。private final char value[];StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种...原创 2018-11-27 10:09:23 · 93 阅读 · 0 评论 -
Lock与synchronized 的区别
https://www.cnblogs.com/jiaqingshareing/p/7598593.html‘https://www.cnblogs.com/bky-xiaogui/p/7652948.html’相关技术知识:wait()与sleep()的区别:wait和notify方法都是Object类的,sleep是Thread类的。sleep()方法其实就是让出cpu给其他线程,保...原创 2018-11-28 10:19:22 · 1350 阅读 · 0 评论 -
CAS (全 ) && concurrent包的实现
CAS:当多个线程使用CAS获取锁,只能有一个成功,其他线程返回失败,继续尝试获取锁;CAS操作中包含三个参数:V(需读写的内存位置)+A(准备用来比较的参数)+B(准备写入的新值):若A的参数与V的对应的值相匹配,就写入值B;若不匹配,就写入这个不匹配的值而非B;我们先拿AtomicInteger来研究在没有锁的情况下是如何做到数据正确性的。private volatile int va...原创 2018-11-28 10:21:13 · 553 阅读 · 0 评论 -
Atomic的介绍和使用(原子变量)
开始之前,我们来看一下上一篇文章中《CAS (全 ) &amp;&amp; concurrent包的实现》中提到了concurrent包的实现图。下图中的原子变量类就是Atomic类中的一部分。也就是说,atomic类首先是一个乐观锁,然后底层实现也是根据CAS操作和Volatile关键字实现的。Atomic在JDK1.5之后,JDK的(concurrent包)并发包里提供了一些类来支持...原创 2018-11-28 10:54:03 · 9637 阅读 · 0 评论 -
Volatile关键字以及java并发和锁的相关知识
volatile关键字可以说是Java虚拟机提供的最轻量级的同步机制,但是它并不容易完全被正确、完整地理解,以至于许多程序员都习惯不去使用它,遇到需要处理多线程数据竞争问题的时候一律使用synchronized来进行同步。本文我们来解释一下Volatile关键字修饰变量的意义。首先我们先简述一下内存模型的相关概念:1.高速缓存:解决CPU执行速度和内存读写速度不匹配的问题。也就是,当程序在...原创 2018-11-28 11:43:29 · 285 阅读 · 0 评论 -
AQS详解(面试)
AQS原理AQS:AbstractQuenedSynchronizer抽象的队列式同步器。AQS的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。CLH(Craig,Landi...转载 2018-11-28 14:51:57 · 195373 阅读 · 49 评论 -
分布式锁以及三种实现(包含测试代码)
分布式锁分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接...转载 2018-11-28 16:27:58 · 2295 阅读 · 0 评论 -
JUC介绍 以及JUC中的锁框架
Java JUC 简介在Java 5.0 提供了java.util.concurrent(简称JUC )包,在此包中增加了在并发编程中很常用的实用工具类。用于定义类似于线程的自定义子系统,包括线程池、异步IO 和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的Collection 实现(JUC集合)锁结构:下面这个图更方便理解:在本篇文章之前,我们已经对并发...转载 2018-11-28 17:33:20 · 1296 阅读 · 0 评论 -
RPC和 Java RMI的区别
Java RMI与RPC的区别一:RPC 远程过程调用RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用某种服务。一次RPC调用的过程大概有10步: 1.执行客户端调用语句,传送参数2.调用本地系统发送网络消息3.消息传送到远程主机4.服务器得到消息并取得参数5.根据调用请求以及参数执行远程过程(服务)6.执行...转载 2018-11-28 17:38:17 · 129 阅读 · 0 评论 -
Java 8中HashMap和LinkedHashMap如何解决冲突
什么时候会产生冲突??HashMap中调用hashCode()方法来计算hashCode。由于在Java中两个不同的对象可能有一样的hashCode,所以不同的键可能有一样hashCode,从而导致冲突的产生。解决:在Java 8 之前,HashMap和其他基于map的类都是通过链地址法解决冲突,它们使用单向链表来存储相同索引值的元素。从Java 8开始,HashMap,Concurr...转载 2018-12-07 17:02:34 · 961 阅读 · 0 评论 -
ThreadPoolExecutor 线程池源码解析以及相关理论
https://blog.csdn.net/sinat_35512245/article/details/59056120转载 2018-12-05 18:00:42 · 202 阅读 · 0 评论 -
Vector和ArrayList、LinkedList的区别
Vector和ArrayList的区别:http://www.cnblogs.com/wanlipeng/archive/2010/10/21/1857791.html转载 2018-12-05 19:47:25 · 920 阅读 · 0 评论 -
java中HashMap、CurrentHashMap 工作原理&&和HashTable、HashSet的区别 (划重点)
http://www.importnew.com/7099.htmlHashMap和HashTable的区别:http://www.importnew.com/7010.htmlCurrentHashMap的实现原理:http://www.cnblogs.com/ITtangtang/p/3948786.html原创 2018-12-05 21:28:07 · 2189 阅读 · 0 评论 -
java中的集合框架:Collection 和Map
集合:包含多个元素的对象,又称容器。集合框架:一个代表、操作集合的统一架构,所有的集合框架都包含:接口、实现类以及算法。**接口:**表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编程语言中,接口通常用来形成规范。**实现类:**集合接口的具体实现,是重用性很高的数据结构。**算法:**用来根据需要对实体类中的对象进行计算,比如查找,排序。 同...原创 2018-12-05 22:42:58 · 410 阅读 · 0 评论 -
java 8的新特性(全)
Lambda表达式–允许把函数作为一个方法的参数传递进去;方法引用--可以直接引用已有Java类或者对象(实例)的方法或者构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。函数式接口–函数式接口(FunctionalInterface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为lambda表达式。函数式接口可以现有的...原创 2018-12-06 00:58:25 · 237 阅读 · 0 评论 -
java创建对象之 反射
创建对象有哪几种:new工厂模式克隆反射什么是反射反射Reflection是能够让运行于JVM中的程序检测和修改运行时的行为。内省(Introspection):用于在运行时检测某一个对象的类型和其包含的属性;反射:用于在运行时检测和修改某一个对象的结构和行为。C++支持内省,不支持反射。内省示例:instanceof 运算符用于检测某个对象是否属于特定的类。if (obj ...转载 2018-12-09 12:09:50 · 113 阅读 · 0 评论 -
java 面向对象的四大特性
面向对象软件系统 OOPS的四大主要特征:封装 Encapsulation继承 Inheritance多态 Polymorphism抽象 Abstraction封装 Encapulation多态 Polymorphism多态指的是使用相同的接口来应对不同的底层形式的能力。其实就是多个类继承或者实现了同一个类或者接口,每个子类中都有实现某一个方法,Shape shape = ne...原创 2018-12-07 16:22:02 · 1031 阅读 · 0 评论 -
java创建对象之工厂模式 (2)
之前本人有一篇文章,在学习模式的时候有实现过一个工厂模式,有实现代码。今天这篇文章又重新对java中的工厂模式有一个完整的理解和学习。工厂模式的作用首先工厂模式有什么用呢?当出现聚合情况的时候,A类中有B类的对象作为成员变量,并且B类对象的创建和引用都是在A类中实现的,如果想要使用B类的子类对象的话就必须修改A类中的代码,违反了“开闭原则”。所以我们引入工厂类,将对象的创建和对象的使用分开。...原创 2018-12-09 20:25:52 · 1753 阅读 · 0 评论 -
java创建对象方式之clone以及序列化(总)
之前两篇,我们讲解了创建对象方式中的反射和工厂模式的方式, 本文我们来学习一下其他方式。上图中的和Class类和Constructor中的newInstance方法其实就是之前我们讲到的反射。Constructor<Employee> constructor = Employee.class.getConstructor();Employee emp3 = construct...原创 2018-12-09 21:35:02 · 719 阅读 · 0 评论 -
使用SpringMVC+Spring Security3.1.0
出错记录:1.Failed to evaluate expression ‘ROLE_USER’解决办法: 在security.xml文件中 ,对有权限的用户都设置了role<authentication-manager><!-- 权限提供者 --> <authentication-provider> <!-- 可提供登陆访问的...原创 2018-12-26 16:35:56 · 2056 阅读 · 1 评论 -
Can't resolve taglib with uri http://java.sun.com/jsp/jstl/core
问题如上,使用jsp的时候总是出现上述问题,解决办法:1.在pom.xml文件中加入jstl依赖; <!--配置jstl--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> ...原创 2019-01-03 16:59:07 · 2742 阅读 · 0 评论 -
报错:URI is not registered(Setting | Languages | Frameworks | Schemas and DTDs) MyBatis配置文件
打开项目之后,发现之前已经逆向生成好的文件报错:MyBatis配置文件报错:URI is not registered(Setting | Languages | Frameworks | Schemas and DTDs)解决办法:File-Setting-Shemas and DTDs:操作如下:...原创 2019-01-05 09:29:30 · 588 阅读 · 0 评论 -
Springboot中@RestController和@Controller的区别
简答来说:@RestController注解相当于@ResponseBody + @Controller合在一起的作用。@Controller在Springboot中一定要配置前端模板,Thymeleaf、bootStrap等。如下面代码所示,这样的如果没有对应的hello.jsp文件的话,就会报错,但是如果用@RestController注解的话,就会返回“hello”。@Control...原创 2019-01-05 15:21:33 · 1395 阅读 · 0 评论 -
有关SpringMVC乱码问题
http://blog.sina.com.cn/s/blog_489834c50101bfwo.html原创 2019-01-02 10:14:50 · 405 阅读 · 0 评论