10 2018 档案

摘要:第一步:备份你的原镜像文件,以免出错后可以恢复。 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 第二步:下载新的CentOS-Base.repo 到/etc/yum.repos.d/ wge 阅读全文
posted @ 2018-10-31 23:40 toov5 阅读(1773) 评论(0) 推荐(0) 编辑
摘要:首先要有 wget yum -y install wget gcc yum install gcc 1、下载Redis安装包 wget http://download.redis.io/releases/redis-3.2.9.tar.gz 2、解压Redis安装包 tar -zxvf redis- 阅读全文
posted @ 2018-10-31 16:59 toov5 阅读(159) 评论(0) 推荐(0) 编辑
摘要:概念 什么是Redis Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富 阅读全文
posted @ 2018-10-31 16:41 toov5 阅读(154) 评论(0) 推荐(0) 编辑
摘要:首先了解下RedisCluster集群原理 RedisCluster集群原理 搭建方案介绍 安装部署任何一个应用其实都很简单,只要安装步骤一步一步来就行了。下面说一下 Redis 集群搭建规划,由于集群至少需要6个节点(3主3从模式),所以,没有这么多机器给我玩,我本地也起不了那么多虚拟机(电脑太烂 阅读全文
posted @ 2018-10-31 15:19 toov5 阅读(933) 评论(0) 推荐(0) 编辑
摘要:单点缓存框架 只能针对单个jvm中,缓存容器存放jvm中,每个缓存互不影响 Ehcache gauva chache 内置缓存框架 jvm缓存框架 分布式缓存框架(共享缓存数据) Redis Meacache example: mybatis、hibernate地城都使用了Ehcache 本地缓存E 阅读全文
posted @ 2018-10-31 14:47 toov5 阅读(543) 评论(0) 推荐(0) 编辑
摘要:聊聊缓存: 缓存最终的目的是为减轻服务端压力,减少网络传输请求 比如: 浏览器访问自带缓存。 App客户端底层都有缓存技术的。注: (移动端登录 用token 本地是有个文件的) 案例: 如果一旦请求到服务器端之后,会在本地缓存一份,快速响应给用户。 常见的缓存方案: 网络缓存 代理缓存(Nginx 阅读全文
posted @ 2018-10-31 01:36 toov5 阅读(1098) 评论(0) 推荐(0) 编辑
摘要:热部署 对于Java应用程序来说,热部署就是在运行时更新Java类文件。 热部署的原理是什么 想要知道热部署的原理,必须要了解java类的加载过程。一个java类文件到虚拟机里的对象,要经过如下过程。 首先通过java编译器,将java文件编译成class字节码,类加载器读取class字节码,再将类 阅读全文
posted @ 2018-10-30 19:28 toov5 阅读(910) 评论(0) 推荐(0) 编辑
摘要:类加载器 类加载的机制的层次结构 每个编写的”.java”拓展名类文件都存储着需要执行的程序逻辑,这些”.java”文件经过Java编译器编译成拓展名为”.class”的文件,”.class”文件中保存着Java代码经转换后的虚拟机指令,当需要使用某个类时,虚拟机将会加载它的”.class”文件,并 阅读全文
posted @ 2018-10-30 15:47 toov5 阅读(166) 评论(0) 推荐(0) 编辑
摘要:AOP技术 Lombok去除重复代码插件 动态修改class文件等 Java字节码增强指的是在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修改。Java字节码增强主要是为了减少冗余代码,提高性能等。 方法一: 自定义ClassLoader来加载修改后的字 阅读全文
posted @ 2018-10-30 13:36 toov5 阅读(972) 评论(0) 推荐(0) 编辑
摘要:Jconsole,Java写的程序检测。 GUI,直接点击 MAC: /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/bin/jconsole 当分析工具弹出时(取决于正在运行的 Java 版本以及正在运行的 Java 阅读全文
posted @ 2018-10-30 11:51 toov5 阅读(914) 评论(0) 推荐(0) 编辑
摘要:装饰器模式,也成为包装模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。其结构图如下: Component为统一接口,也是装饰类和被装饰类的基本类型。 ConcreteComponent为具体实现类,也是被装饰类,他本身是个具有一些功能的完整的类。 Decorator是装饰类,实现 阅读全文
posted @ 2018-10-30 01:12 toov5 阅读(851) 评论(0) 推荐(0) 编辑
摘要:什么是观察者模式 观察者模式(Observer),是一种行为性模型,行为型模式关注的是系统中对象之间的相互交互,解决系统在运行时对象之间的相互通信和协作,进一步明确对象的职责。相比来说,创建型模式关注对象的创建过程,结构型模式关注对象和类的组合关系。 模式的职责 观察者模式主要用于1对N的通知。当一 阅读全文
posted @ 2018-10-30 01:12 toov5 阅读(146) 评论(0) 推荐(0) 编辑
摘要:前言: 串行回收,Serial回收器,单线程回收,全程stw; 缺点是只有一个线程,执行垃圾回收时程序停止的时间比较长 并行回收,名称以Parallel开头的回收器,多线程回收,全程stw; 指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 多个线程执行垃圾回收适合于吞吐量的系统,回收时 阅读全文
posted @ 2018-10-30 00:51 toov5 阅读(950) 评论(0) 推荐(0) 编辑
摘要:Java内存泄漏就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源(内存资源耗尽); 而Java内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。 内存溢出,这个好理解,说明存储空间不够大。就像倒水倒多了,从杯子上面溢出了来了一样。 内存泄漏,原理是,使用过的内存 阅读全文
posted @ 2018-10-30 00:34 toov5 阅读(502) 评论(0) 推荐(0) 编辑
摘要:递归调用,栈深度。 错误原因: java.lang.StackOverflowError 栈内存溢出 栈溢出 产生于递归调用,循环遍历是不会的,但是循环方法里面产生递归调用, 也会发生栈溢出。 解决办法:设置线程最大调用深度 -Xss5m 设置最大调用深度 小伙伴,玩个好玩的,最大默认深度: 结果: 阅读全文
posted @ 2018-10-30 00:18 toov5 阅读(975) 评论(0) 推荐(0) 编辑
摘要:Java堆溢出 错误原因: java.lang.OutOfMemoryError: Java heap space 堆内存溢出 解决办法:设置堆内存大小 // -Xms1m -Xmx10m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError 下面这 阅读全文
posted @ 2018-10-30 00:09 toov5 阅读(179) 评论(0) 推荐(0) 编辑
摘要:JVM参数配置 JVM提供了诸多的参数进行JVM各个方面内存大小的设置,为Java应用进行优化提供了诸多的工具,本文将会详细分析各个参数的功能与使用。 常见参数配置 -XX:+PrintGC 每次触发GC的时候打印相关日志 -XX:+UseSerialGC 串行回收 -XX:+PrintGCDeta 阅读全文
posted @ 2018-10-29 23:45 toov5 阅读(398) 评论(0) 推荐(0) 编辑
摘要:1.标记清除算法 概念 该算法有两个阶段。 1. 标记阶段:找到所有可访问的对象,做个标记 2. 清除阶段:遍历堆,把未被标记的对象回收 应用场景 该算法一般应用于老年代,因为老年代的对象生命周期比较长。 优缺点 标记清除算法的优点和缺点 1. 优点 - 是可以解决循环引用的问题 - 必要时才回收( 阅读全文
posted @ 2018-10-29 21:58 toov5 阅读(292) 评论(0) 推荐(0) 编辑
摘要:如何判断对象是否存活 引用计数法 概念 引用计数法就是如果一个对象没有被任何引用指向,则可视之为垃圾。这种方法的缺点就是不能检测到环的存在。 首先需要声明,至少主流的Java虚拟机里面都没有选用引用计数算法来管理内存。 什么是引用计数算法: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器 阅读全文
posted @ 2018-10-29 19:31 toov5 阅读(3664) 评论(0) 推荐(1) 编辑
摘要:JVM内存结构图: 1.Java堆 Java堆是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。[垃圾收集算法] 堆是垃圾收集器管理的主要区域 阅读全文
posted @ 2018-10-29 18:51 toov5 阅读(179) 评论(0) 推荐(0) 编辑
摘要:什么是策略模式 定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 策略模式由三种角色组成 策略模式应用场景 策略模式的用意是针对一组算法或逻辑,将每一个算法或逻辑封装到具有共同接口的独立的类中,从而使得它们之间可以相互替换。策略模式使 阅读全文
posted @ 2018-10-29 16:24 toov5 阅读(151) 评论(0) 推荐(0) 编辑
摘要:什么是原型模式 克隆 原型模式是一个创建型的模式。原型二字表明了改模式应该有一个样板实例,用户从这个样板对象中复制一个内部属性一致的对象,这个过程也就是我们称的“克隆”。被复制的实例就是我们所称的“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存 阅读全文
posted @ 2018-10-29 15:40 toov5 阅读(1074) 评论(0) 推荐(1) 编辑
摘要:什么是外观模式 外观模式(Facade Pattern)门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用 阅读全文
posted @ 2018-10-29 11:54 toov5 阅读(174) 评论(0) 推荐(0) 编辑
摘要:什么是适配器 在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 适配器分类 适配器分为,类适配器、对象适 阅读全文
posted @ 2018-10-29 00:21 toov5 阅读(152) 评论(0) 推荐(0) 编辑
摘要:什么是模板方法 模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的 重复代码全部在父类里面,不同业务的,抽取给子类进行实现。抽取过程 抽象方法。 某些特定步骤。 核心:处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不 阅读全文
posted @ 2018-10-28 22:30 toov5 阅读(166) 评论(0) 推荐(0) 编辑
摘要:自己越来越喜欢写代码,安静的时候,敲一敲。出来想要的结果。有时候有灵感了,赶紧实现以下。好惬意! 想做一辈子的程序员 人要有信念支撑 感觉分布式的东西太美了 感觉开发太舒服了 我有责任和义务 学好 整理好它 我就是要赢!没有别的 阅读全文
posted @ 2018-10-28 02:54 toov5 阅读(174) 评论(1) 推荐(1) 编辑
摘要:StringBuilder底层用的建造者模式 拼接字符串~~ 数组(可以扩容) 存放单个字符 字符整合在一起时候 形成字符串 什么是建造者模式 建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集 阅读全文
posted @ 2018-10-28 01:54 toov5 阅读(184) 评论(0) 推荐(0) 编辑
摘要:面向切面编程 事务 很多框架地层用到 可以重构重复代码 AOP 的底层的实现也是代理模式 了解事务需要了解代理模式 包装代理设计模式 什么是代理模式 通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理。既(AOP微实现) ,AOP核心技术面向切面编程。 代理模式应用 阅读全文
posted @ 2018-10-27 22:43 toov5 阅读(204) 评论(0) 推荐(0) 编辑
摘要:抽象工厂模式 什么是抽象工厂模式 抽象工厂简单地说是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品。 抽象工厂,工厂的工厂。 与工厂方法的区别是一组。 具体细分到某个产品的领域 抽象工厂 生产不同的产品族 简单工厂 工厂方法 都是同一个产品族 抽象工厂 不是相同类型产品的 最后拼接成 阅读全文
posted @ 2018-10-27 21:45 toov5 阅读(120) 评论(0) 推荐(0) 编辑
摘要:之前的那个简单工厂 只有一个工厂啊 如果类型很多不利于扩展 因为类型多 责任重大啊 工厂方法模式,相当于 根据产品做了分类 比如 比亚迪 里面有很多 比亚迪系列的 这样有了个分类,大家看看代码,自己手动敲一敲: 需要什么汽车就要去对应的厂家(后者说是4S店) 工厂方法模式 什么是工厂方法模式 工厂方 阅读全文
posted @ 2018-10-27 20:19 toov5 阅读(253) 评论(0) 推荐(0) 编辑
摘要:什么是工厂模式 实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象工厂模式 工厂模式好处 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。 利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。 将选择实现类、创建对象统一管理和控制。从而将调用 阅读全文
posted @ 2018-10-27 19:39 toov5 阅读(121) 评论(0) 推荐(0) 编辑
摘要:一个jvm中,只能有一个实例,保证对象唯一 应用场景: windows的任务管理器就是呀,小伙伴们不信可以点击下试试,看看能创建几次 servlet 连接池 线程池 spring(默认单例)枚举 常量 为啥设置单例? 优点? 保证对象的唯一性 节约内存 方便管理 重复利用 缺点? 线程安全问题 单例 阅读全文
posted @ 2018-10-27 01:26 toov5 阅读(148) 评论(0) 推荐(0) 编辑
摘要:反射机制 什么是Java反射 就是正在运行,动态获取这个类的所有信息。 反射机制的作用 1,反编译:.class-->.java 2.通过反射机制访问java对象的属性,方法,构造方法等; 反射机制的应用场景 Jdbc 加载驱动 Spring IOC 框架 反射机制获取类有三种方法 //第一种方式: 阅读全文
posted @ 2018-10-26 23:35 toov5 阅读(386) 评论(0) 推荐(0) 编辑
摘要:互斥锁,就是悲观锁,保证一个线程进去。线程会从sleep(加锁)--》runng(解锁) ,过程中有上下文的切换,cpu的抢占,信号的发送等开销。 自旋锁:线程一直都是running(加锁--》解锁),死循环检测锁位的标志位,机制不复杂。 自旋锁:由于自旋锁使用者一般保持锁时间非常短,因此选择自旋锁 阅读全文
posted @ 2018-10-26 21:17 toov5 阅读(284) 评论(0) 推荐(0) 编辑
摘要:原子类 java.util.concurrent.atomic包:原子类的小工具包,支持在单个变量上解除锁的线程安全编程 原子变量类相当于一种泛化的 volatile 变量,能够支持原子的和有条件的读-改-写操作。AtomicInteger 表示一个int类型的值,并提供了 get 和 set 方法 阅读全文
posted @ 2018-10-26 18:41 toov5 阅读(6970) 评论(2) 推荐(0) 编辑
摘要:悲观锁和乐观锁与CAS无锁机制很相关 乐观锁本质是无锁的 所以没有阻塞等待嘛 效率比较高 重试 --CAS无所机制 乐观锁 总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CA 阅读全文
posted @ 2018-10-26 17:23 toov5 阅读(184) 评论(0) 推荐(0) 编辑
摘要:相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些。假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应 阅读全文
posted @ 2018-10-26 16:49 toov5 阅读(223) 评论(0) 推荐(0) 编辑
摘要:锁的种类: 读写锁 悲观锁 乐观锁 CSA无锁 自旋锁 AQS 非公平锁 公平锁 互斥锁 排它锁 分布式锁(redis实现 和 zk实现) 轻量级锁(lock),重量级锁(synchronize) 重入锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 阅读全文
posted @ 2018-10-26 15:34 toov5 阅读(1725) 评论(0) 推荐(0) 编辑
摘要:根据前面我所说的Futrue模式,手写一个: 分别对应的Java代码,大家拿来参考: 启动类主函数: 结果: 大家对应着上一篇博客好好研究下,这个模式的应用场景还是蛮多的。代码挺有趣的。 当要获取资源的时候,data.getResult() ,如果资源没有准备好false;那么就会阻塞该线程。直到资 阅读全文
posted @ 2018-10-26 14:32 toov5 阅读(345) 评论(0) 推荐(0) 编辑
摘要:submit 和 excute是有啥区别 如果有这样的需求: 多线程实现下载,提高效率。 不论是Thread类还是Runnable接口重写run方法,有个特点就是没有返回值~~~~~~ 我都主线程 如何知道子线程程序执行完毕呢? 子线程执行完毕 立马告诉主线程 可以wait 和 notify 在Ja 阅读全文
posted @ 2018-10-25 18:30 toov5 阅读(3373) 评论(0) 推荐(0) 编辑
摘要:今天看到一个很不错的this使用demo: this 代表当前对象的引用 成员对象 应该又对象去调用 this代表当前的对象地址 如果不用this 就近原则的话 就是给自己复制了 name 给 name赋值 (区分成员变量 和 局部变量了 重名情况) num 已经被私有了,不能到别的类里面去调用 然 阅读全文
posted @ 2018-10-25 02:53 toov5 阅读(168) 评论(0) 推荐(0) 编辑
摘要:Java的特性之一 多态 很多小伙伴搞不懂,问这个问题。尤其是很多初学者,觉得别扭。我总结个例子,大家看一看吧~ 看看向上转型: 向上转型描述的是一些公共特征。而向下描述的是子类自己特殊的定义环境。向下转型不一定是安全的啊,因为在进行向下转型之前一定要首先发生向上转型 这样必然报错 所以注意了啊。只 阅读全文
posted @ 2018-10-24 16:51 toov5 阅读(129) 评论(0) 推荐(0) 编辑
只有注册用户登录后才能阅读该文。
posted @ 2018-10-24 00:19 toov5 阅读(33) 评论(0) 推荐(0) 编辑
摘要:在 jdk1.5 之后,并发包中新增了 Lock 接口(以及相关实现类)用来实现锁功能,Lock 接口提供了与 synchronized 关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。 lock锁 也叫显示锁 大家看下这个lock锁: lock是个接口 这个接口下面很多锁: 对于lock锁 阅读全文
posted @ 2018-10-23 18:41 toov5 阅读(316) 评论(0) 推荐(0) 编辑
摘要:从https://www.cnblogs.com/toov5/p/9837373.html 可以看到他的打印是一片一片的,这边博客介绍怎么避免掉 使用notify 和 wait的时候 要注意 是在synchronize进行的,持有同一把锁 1.因为涉及到对象锁,他们必须都放在synchronized 阅读全文
posted @ 2018-10-23 17:56 toov5 阅读(1006) 评论(0) 推荐(0) 编辑
摘要:多线程之间如何实现通讯 什么是多线程之间通讯? 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。 画图演示 多线程之间通讯需求 需求:第一个线程写入(input)用户,另一个线程取读取(out)用户.实现读一个,写一个操作。 代码实现基本实现 下面我们看个例子 生产者 消费者 阅读全文
posted @ 2018-10-23 16:21 toov5 阅读(506) 评论(0) 推荐(0) 编辑
摘要:线程池里面的submit 先来说下这个函数submit() 如果有个需求,实现下载 每个线程都会http请求 进行下载操作 run方法的缺点之一就是 没有返回值!! 多线程下载,实现下载时候 会有下载进度。 主线程如何知道子线程执行完毕? run() 里面的业务实现完毕后 可以用notify wai 阅读全文
posted @ 2018-10-23 14:19 toov5 阅读(439) 评论(0) 推荐(0) 编辑
摘要:CPU密集 CPU密集的意思是该任务需要大量的运算,而没有阻塞,CPU一直全速运行。 CPU密集任务只有在真正的多核CPU上才可能得到加速(通过多线程),而在单核CPU上,无论你开几个模拟的多线程,该任务都不可能得到加速,因为CPU总的运算能力就那些。 IO密集 IO密集型,即该任务需要大量的IO, 阅读全文
posted @ 2018-10-23 13:50 toov5 阅读(1328) 评论(0) 推荐(2) 编辑
摘要:如果当前线程池中的线程数目小于corePoolSize,则每来一个任务,就会创建一个线程去执行这个任务; 如果当前线程池中的线程数目>=corePoolSize,则每来一个任务,会尝试将其添加到任务缓存队列当中,若添加成功,则该任务会等待空闲线程将其取出去执行;若添加失败(一般来说是任务缓存队列已满 阅读全文
posted @ 2018-10-23 12:49 toov5 阅读(439) 评论(0) 推荐(0) 编辑
摘要:前面的我那几个源码截图,大家可以自己点进去看看,共同点都是封装了 ThreadPoolExcutor这构造函数 无非就是传递的参数不一样~~ 比如 SingleThreadExecutor 就是这个构造函数: 下面我就介绍些这个构造函数: 提交一个任务到线程池中,线程池的处理流程如下: 1、判断线程 阅读全文
posted @ 2018-10-23 11:50 toov5 阅读(200) 评论(0) 推荐(0) 编辑
摘要:线程池 什么是线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序 都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到 阅读全文
posted @ 2018-10-22 23:07 toov5 阅读(248) 评论(1) 推荐(1) 编辑
摘要:完全利用了阻塞队列的特性,实现了消费者生产者的关系,非常好玩! 大家赶紧看看代码,然后动手默写一个吧~~ 看到运行结果 消费者获取不到什么的话 等待等待 再获取不到就退出了 阅读全文
posted @ 2018-10-22 22:43 toov5 阅读(556) 评论(0) 推荐(0) 编辑
摘要:1、我建议大家 先理解并发队列再去理解线程池原理 并发队列,有两个大家务必要会的,并且以这俩为代表的队列都是继承自Queue。 ConcurrentLinkedQueue(非阻塞) BlockingQueue(阻塞) (说白了就是 等待 与 非等待) 阻塞式队列与非阻塞式队列的区别: 在于 入队 和 阅读全文
posted @ 2018-10-22 19:43 toov5 阅读(989) 评论(0) 推荐(0) 编辑
摘要:volitile和synchronize volitile可以保证可见性,不能保证原子性,禁止重排序 synchronize:既然可以保证可见性又能 保证原子性 重排序: cpu对代码实现优化,不会对有依赖关系的做重排序(多线程情况下) 多线程情况下是没有影响的 数据依赖性 如果两个操作访问同一个变 阅读全文
posted @ 2018-10-22 18:13 toov5 阅读(877) 评论(0) 推荐(0) 编辑
只有注册用户登录后才能阅读该文。
posted @ 2018-10-22 17:48 toov5 阅读(19) 评论(0) 推荐(0) 编辑
摘要:什么是Volatile 可见性也就是说一旦某个线程修改了该被volatile修饰的变量,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,可以立即获取修改之后的值。 在Java中为了加快程序的运行效率,对一些变量的操作通常是在该线程的寄存器或是CPU缓存上进行的,之后才会同步到主存中,而加 阅读全文
posted @ 2018-10-22 15:48 toov5 阅读(133) 评论(0) 推荐(0) 编辑
摘要:多线程有三大特性 原子性、可见性、有序性 什么是原子性 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 一个很经典的例子就是银行账户转账问题: 比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。这2个操作必 阅读全文
posted @ 2018-10-22 15:18 toov5 阅读(158) 评论(0) 推荐(0) 编辑
摘要:ThreadLocal提高一个线程的局部变量,访问某个线程拥有自己局部变量。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 ThreadLocal的接口方法 Thre 阅读全文
posted @ 2018-10-22 14:54 toov5 阅读(164) 评论(0) 推荐(0) 编辑
摘要:同步中嵌套同步,导致锁无法释放 t1先获取oj锁,然后this锁,才能把程序执行完毕 t2现货区this锁,再获取oj锁,才能把程序执行完毕 结果: 阅读全文
posted @ 2018-10-22 03:35 toov5 阅读(138) 评论(0) 推荐(0) 编辑
摘要:什么是静态同步函数? 方法上加上static关键字,使用synchronized 关键字修饰 或者使用类.class文件。 静态的同步函数使用的锁是 该函数所属字节码文件对象 可以用 getClass方法获取,也可以用当前 类名.class 表示。 总结: synchronized 修饰方法使用锁是 阅读全文
posted @ 2018-10-22 01:56 toov5 阅读(446) 评论(0) 推荐(0) 编辑
摘要:什么是线程安全? 为什么有线程安全问题? 当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。 案例: 现在有100张火车票,有两个窗口同时抢火车票,请使用多线程模拟抢票效果。 代码运行结果是有问题的 一号窗口和 阅读全文
posted @ 2018-10-21 21:44 toov5 阅读(174) 评论(0) 推荐(0) 编辑
摘要:共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存 阅读全文
posted @ 2018-10-21 21:15 toov5 阅读(491) 评论(0) 推荐(0) 编辑
摘要:现代操作系统基本采用时分的形式调度运行的线程,线程分配得到的时间片的多少决定了线程使用处理器资源的多少,也对应了线程优先级这个概念。在JAVA线程中,通过一个int priority来控制优先级,范围为1-10,其中10最高,默认值为5。下面是源码(基于1.8)中关于priority的一些量和方法。 阅读全文
posted @ 2018-10-21 20:51 toov5 阅读(295) 评论(0) 推荐(0) 编辑
摘要:当在主线程当中执行到t1.join()方法时,就认为主线程应该把执行权让给t1 废话不多说看代码: 如果先调用join的方法在执行 启动线程 结果分别: 和 其实质就是类似于一个加入线程 join(), 当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续 join(int), 可以等待指定的 阅读全文
posted @ 2018-10-21 19:57 toov5 阅读(1755) 评论(0) 推荐(0) 编辑
摘要:多线程运行状态 线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。 新建状态 当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码 就绪状 阅读全文
posted @ 2018-10-21 19:38 toov5 阅读(596) 评论(0) 推荐(0) 编辑
摘要:直觉上来讲,守护线程和main相关 Java中有两种线程,一种是用户线程,另一种是守护线程。 用户线程是指用户自定义创建的线程,主线程停止,用户线程不会停止(另一条执行路径) 守护线程当进程不存在或主线程停止,守护线程也会被停止。 我们自己创建的线程叫 用户线程 如果主线程停止掉 不会影响用户线程( 阅读全文
posted @ 2018-10-21 19:37 toov5 阅读(2311) 评论(0) 推荐(0) 编辑
摘要:线程与进程区别 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。 使用线程可以把占据 阅读全文
posted @ 2018-10-21 16:27 toov5 阅读(252) 评论(0) 推荐(0) 编辑
摘要:回顾下springmvc原理图: DispatcherServlet是Spring MVC的核心,每当应用接受一个HTTP请求,由DispatcherServlet负责将请求分发给应用的其他组件。 在旧版本中,DispatcherServlet之类的servlet一般在web.xml文件中配置,该文 阅读全文
posted @ 2018-10-21 14:57 toov5 阅读(6149) 评论(0) 推荐(1) 编辑
摘要:前面所述的https://www.cnblogs.com/toov5/p/9823728.html 中的第一条先不赘述了,就是玩了maven 重点介绍后两条 首先内置Tomcat: SpringBoot中内置tomcat服务器 Java操作创建tomcat 我们点击pom中的 持续点击到 继续点击会 阅读全文
posted @ 2018-10-21 03:38 toov5 阅读(3152) 评论(0) 推荐(0) 编辑
摘要:框架部分重点在于实现原理,懂原理! 废话不多说,动手干起来! SpringMVC程序入口? 没有配置文件,Spring 容器是如何加载? 回顾我们之前搭建Spring Boot项目使用的pom 引入的依赖需要parent,其作用是支持依赖 快速整合框架 不需要写版本号 还有就是web组件,自动引入s 阅读全文
posted @ 2018-10-21 02:25 toov5 阅读(873) 评论(0) 推荐(0) 编辑
摘要:PageHelper 是一款好用的开源免费的 Mybatis 第三方物理分页插件 物理分页 支持常见的 12 种数据库。Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等 支持多种分页方式 支持常见的 RowBounds(PageRowBou 阅读全文
posted @ 2018-10-21 01:17 toov5 阅读(988) 评论(0) 推荐(0) 编辑
摘要:前面https://www.cnblogs.com/toov5/p/9823353.html 说的很不好用哈哈 还需要json格式化 我们可以用Admin-UI 比较爽歪歪 原理: 将所有服务的监控中心管理存放在admin ui平台上 JSON数据放到注册中心去,用于展示。 下面我们创建如图所示的这 阅读全文
posted @ 2018-10-21 00:08 toov5 阅读(4800) 评论(0) 推荐(0) 编辑
摘要:Spring boot监控中心: 针对微服务的服务状态,服务器的内存变化(内存、线程、日志管理等)检测服务配置连接地址是否有用(有些懒加载的情况下,用的时候发现卧槽不能用)模拟访问,懒加载。统计有多少个bean(Spring 容器中的bean)、统计Spring MVC 中@RequestMappi 阅读全文
posted @ 2018-10-20 22:43 toov5 阅读(4229) 评论(0) 推荐(0) 编辑
摘要:1、JVM参数调优 针对运行效果 吞吐量 初始堆内存与最大堆尽量相同 减少垃圾回收次数 2、扫包优化: 启动优化 默认Tomcat容器改为Undertow Tomcat的吞吐量5000左右 Undertow 8000左右 底层优化的好 Tomcat 参数调优 下面聊一聊 扫包优化 @SpringBo 阅读全文
posted @ 2018-10-20 21:03 toov5 阅读(7067) 评论(0) 推荐(0) 编辑
摘要:所谓的热部署:比如项目的热部署,就是在应用程序在不停止的情况下,实现新的部署 原理: 实用类加载器(classloader重新读取字节码文件到jvm内存) 如何纯手写一个热部署功能: 1、监听 class文件是否发生改变 版本号、修改时间 作对比 2、如果发生改变就用classloader进行重新读 阅读全文
posted @ 2018-10-20 17:04 toov5 阅读(994) 评论(0) 推荐(0) 编辑
摘要:很入门的知识,大家了解下就OK maven配置文件pom: service层 controller 启动类: 访问结果: 数据库: 阅读全文
posted @ 2018-10-20 16:10 toov5 阅读(591) 评论(0) 推荐(0) 编辑
摘要:内置tomcat8.5.28 外置的要高于此版本才OK spring boot1.5是访问不了jsp页面的 以后要以2.0版本为主流的 阅读全文
posted @ 2018-10-20 14:34 toov5 阅读(592) 评论(0) 推荐(0) 编辑
摘要:Jar类型打包方式 1.使用mvn celan package 打包 2.使用java –jar 包名 war类型打包方式 1.使用mvn celan package 打包 2.使用java –jar 包名 外部Tomcat运行 1.使用mvn celan package 打包 2.2.0将war包 阅读全文
posted @ 2018-10-20 14:19 toov5 阅读(651) 评论(0) 推荐(0) 编辑
摘要:yml Spring Boot 默认读取 .yml .properties 结尾的 yml非常好的作用,比properties更节约 结构清晰 server: port: 8090 context-path: /toov5 父级是公用的 一定要注意啊啊啊 空格! port: 8090 中间空格! 启 阅读全文
posted @ 2018-10-20 05:05 toov5 阅读(3326) 评论(0) 推荐(0) 编辑
摘要:经常使用mac和linux 这次使用window开发了一些小项目 废话不多说: git init git add . git commit -m 'note' git remote add origin 你的远程库地址 比如 git remote add origin https://github. 阅读全文
posted @ 2018-10-20 03:53 toov5 阅读(463) 评论(0) 推荐(0) 编辑
摘要:分布式事务解决方案的问题, 分布式事务产生的原因: 多个不同的服务连接不同的数据源 ,做分布式事务的管理。 这种情况是连接两个数据源的情况,然后事务管理器是这样的 只管理了test02的这端业务代码。所以test02的这个会回滚! 但是test01会入库哦 这属于传统的分布式事务解决方案 使用spr 阅读全文
posted @ 2018-10-20 02:55 toov5 阅读(7169) 评论(0) 推荐(0) 编辑
摘要:结合前面做的小项目,如果我把test01 test02下面的 service 都加了 事务的注解 这样启动时候会报错! 事务管理器里面不能有两个事务!!!! 这时候需要用 @Transactional(transactionManager="test1TransactionManager") 指定事 阅读全文
posted @ 2018-10-20 01:24 toov5 阅读(1415) 评论(0) 推荐(0) 编辑
摘要:一般公司分两个数据库: 一个放共同配置文件, 一个数据库垂直业务数据库 垂直拆分和水平拆分: 垂直是根据业务划分具体数据库 在一个项目中有多个数据源(不同库jdbc) 无限个的哈~ 根据包名 或者 注解方式 划分多个数据源 本博客讲解的是分包情况下的: 首先创建两个包 数据库也是如此: 当前的目录结 阅读全文
posted @ 2018-10-20 01:02 toov5 阅读(874) 评论(0) 推荐(0) 编辑
摘要:首先Spring 事务分类 1、声明事务 原理:基于编程事务的 2、编程事务 指定范围 扫包去解决 3、事务原理:AOP技术 通过环绕通知进行了拦截 使用Spring 事务注意事项: 不要try catch , 因为要将异常抛给外层 Spring Boot 已经默认开启了事务了~ Springboo 阅读全文
posted @ 2018-10-19 21:54 toov5 阅读(321) 评论(0) 推荐(0) 编辑
摘要:本地开发环境 测试环境 实际项目中 区分不同的环境配置文件信息 首先创建三种不同场景下的配置文件: 内容分别是: ###dev http_url="dev" ###prdhttp_url="prd" ###testhttp_url="test" Spring.profiles.active=test 阅读全文
posted @ 2018-10-19 21:33 toov5 阅读(224) 评论(0) 推荐(0) 编辑
摘要:自定义参数,把不同环境的配置放到配置文件中去。 不同环境,如何区分配置文件信息,自定义配置文件信息 比如在 application.properties定义个参数 name=toov5 Spring Boot如何去取值呢: 通过value这个注解 @Value("${name}") private 阅读全文
posted @ 2018-10-19 21:08 toov5 阅读(709) 评论(0) 推荐(0) 编辑
摘要:补充一个知识点: lombok底层原理使用的是: 字节码技术ASM修改字节码文件,生成比如类似于get() set( )方法 一定要在开发工具安装 在编译时候修改字节码文件(底层使用字节码技术),线上环境使用编译好的文件 下面我们学习 Spring Boot 异步调用技术: 启动加上@EnableA 阅读全文
posted @ 2018-10-19 20:56 toov5 阅读(586) 评论(0) 推荐(0) 编辑
摘要:试问,你的项目中,如果有几万个方法,你还这么写log.info("name"+name+",age"+age )日志么?low~ 所以用AOP呀 1、首先创建个aop的包(aop的依赖jar包要在pom中搞定),把下面类,贴进去: 2、后端业务逻辑代码: 3、启动类我做了一个小修改哈: 扩大了一下扫 阅读全文
posted @ 2018-10-19 17:46 toov5 阅读(232) 评论(0) 推荐(0) 编辑
摘要:传统方式打印日志比较复杂, 每次打印需要定义全局变量 private static final Logger logger = LoggerFactory.getLogger(SjpController.class) 这里我将介绍的是用lombok去简化的方式,只需要加个注解~~~~ 1、首先pom 阅读全文
posted @ 2018-10-19 16:49 toov5 阅读(2395) 评论(0) 推荐(0) 编辑
摘要:我在写这个教程时候,踩了个坑,一下子折腾到了凌晨两点半。 坑: Spring Boot对于Mysql8.1的驱动支持不好啊 我本地安装的是Mysql8.1版本,在开发时候。pom提示不需要输入驱动版本(因为Spring Boot会自动匹配),毛啊。根本就没有匹配成功。然后我尝试了各种办法。没有解决。 阅读全文
posted @ 2018-10-19 02:51 toov5 阅读(419) 评论(0) 推荐(0) 编辑
摘要:1.备份原来的源sudo cp /etc/apt/sources.list /etc/apt/sources_init.list将以前的源备份一下,以防以后可以用的。 2.更换源 /etc/apt/sources.list使用gedit或者vim打开文档,将下边的阿里源复制进去,然后点击保存关闭。 阅读全文
posted @ 2018-10-18 21:26 toov5 阅读(13026) 评论(1) 推荐(1) 编辑
摘要:全局捕获异常,很明显的错误404返回给客户,很不好呀。整个web请求项目全局捕获异常,比如空指针直接返回给客户啊,那多操蛋呀~ 看这几个常用的注解: @ExceptionHandler 表示拦截异常 @ControllerAdvice 是 controller 的一个辅助类,最常用的就是作为全局异常 阅读全文
posted @ 2018-10-18 21:11 toov5 阅读(4854) 评论(0) 推荐(0) 编辑
摘要:首先不建议整合JSP哈,spring boot 对jsp的支持力度不大。 内置tomcat不支持jsp。 注意:在创建项目时候一定是war类型的,而不是跟之前那个freemarker那种jar类型。 废话不多说,直接动手。 pom依赖如下: application.properties配置文件: 这 阅读全文
posted @ 2018-10-18 20:05 toov5 阅读(2110) 评论(0) 推荐(0) 编辑
摘要:1、关于静态资源的访问 在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /static /public /resources /META-INF/resources 比如:我们 阅读全文
posted @ 2018-10-18 18:03 toov5 阅读(766) 评论(0) 推荐(0) 编辑
摘要:Springboot目前已经得到了很广泛的应用,why这么牛逼? Springboot让你更容易上手,简单快捷的构建Spring的应用 Spring Boot让我们的Spring应用变的更轻量化。比如:你可以仅仅依靠一个Java类来运行一个Spring引用。你也可以打包你的应用为jar并通过使用ja 阅读全文
posted @ 2018-10-18 16:35 toov5 阅读(301) 评论(0) 推荐(0) 编辑