自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Cloud Alibaba 微服务商城系统

mall-cloud-alibaba微服务学习教程Spring Cloud Alibaba (Nacos,Sentinel,Feign,Gateway,RabbitMQ,Ribbon等)微服务教程项目介绍mall-cloud-alibaba 是一套基于开源商城 mall 改造的 spring cloud alibaba 体系微服务商城系统。采用了spring cloud alibaba 、 Spring Cloud Greenwich、Spring Boot 2、MyBatis、Docker、Ela

2020-06-09 20:48:08 889 1

原创 【系】微信小程序云开发实战坚果商城-目录

【系】微信小程序云开发实战坚果商城目录开篇【系】微信小程序云开发实战坚果商城-开篇基础篇【系】微信小程序云开发实战坚果商城-弹性盒子【系】微信小程序云开发实战坚果商城-ES6 简单入门【系】微信小程序云开发实战坚果商城-官方案例先运行前端篇【系】微信小程序云开发实战坚果商城-商城项目搭建【系】微信小程序云开发实战坚果商城-前端之首页实现【系】微信小程序云...

2019-11-19 12:18:35 19569 62

原创 【Java面试系列】Java 基础常问面试题

1、面向对象和面向过程的区别面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一一调用则可。性能较高,所以单片机、嵌入式开发等一般采用面向过程开发。面向对象:是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。面向对象有封装、继承、多态的特性,所以易维护、易复用、易扩展。可以设计出低耦合的系统。 但是性能上来说,比面向过程要低。2、 普通类和抽象类的区别普通类可以去实例化调用;抽象

2020-12-21 09:24:33 270

原创 【JVM系统学习之路】常见垃圾回收器

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial目录GC 分类与性能指标不同的垃圾回收器概述Serial 回收器: 串行回收ParNew 回收器:并行回收Parallel 回收器:吞吐量优先CMS 回收器:低延迟G1 回收器G1 回收器:区域化分代式垃圾回收器总结GC 分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的 JVM 来实现。由于 JDK 的版本处于高速迭代过.

2020-12-02 09:33:24 255

原创 【JVM系统学习之路】垃圾回收相关概念

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial目录System.gc() 的理解内存溢出与内存泄漏Stop the world垃圾回收的并行与并发安全点与安全区域再谈引用再谈引用:强引用再谈引用:软引用再谈引用:弱引用再谈引用:虚引用再谈引用:终结器引用System.gc() 的理解在默认情况下,通过 system.gc() 或者 Runtime.getRuntime().gc() 的调用,会.

2020-11-30 09:06:37 242

原创 【JVM系统学习之路】垃圾回收相关算法

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial目录标记阶段:引用计数算法标记阶段:可达性分析算法对象的 finalization 机制MAT 与 Jprofilter 的 GC Roots 溯源清除阶段: 标记-清除算法清除阶段:复制算法清除阶段:标记-压缩算法小结分代收集算法标记阶段:引用计数算法垃圾标记阶段:对象存活判断在堆里存放着几乎所有的 Java 对象实例,在 GC 执行垃圾回收之前,.

2020-11-27 09:10:11 136

原创 【JVM系统学习之路】StringTable

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorialString 的基本特性String:字符串,使用一对 ”” 引起来表示String s1 = "str"; // 字面量的定义方式String s2 = new String("str");string 声明为 final 的,不可被继承String 实现了 Serializable 接口:表示字符串是支持序列化的。实现了 Comparable 接口:表示 s.

2020-11-26 09:04:46 87

原创 【JVM系统学习之路】对象的实例化内存布局与访问定位

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial前言对象在JVM中是怎么存储的?对象头信息里面有哪些东西?Java对象头有什么?对象的实例化对象创建方式new:最常见的方式、单例类中调用变形1: getInstance的静态类方法变形2 : XXXBuilder/XXXFactory 的静态方法Class 的 newInstance 方法:在 JDK9 里面被标记为过时的方法,因为只能调用空参构.

2020-11-24 09:00:25 109

原创 【JVM系统学习之路】看懂方法区

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial方法区(Method Area) 与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。虽然《Java虚拟机规范》中把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫作“非堆”(Non-Heap),目的是与Java堆区分开来。目录栈、堆、方法区的交互关系方法区的理解设置方法区大小与 OOM方.

2020-11-23 09:03:04 131 3

原创 【JVM系统学习之路】 神奇的 JAVA 堆,难学会?

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial前言面试中是否遇到如下与堆相关问题?JVM 内存为什么要分成新生代,老年代,持久代?新生代中为什么要分为 Eden 和 Survivor?JVM 有哪些调优参数?怎样调优?…目录堆的核心概述设置堆内存大小与OOM年轻代与老年代图解对象分配过程Minor GC 、Major GC、 Full GC堆空间分代思想内存分配策略为对象分配内存:TLAB.

2020-11-17 08:55:34 160

原创 【JVM系统学习之路】初步了解本地方法接口和本地方法栈

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial本地方法接口什么是本地方法本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别只是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地(Native)方法服务。《Java虚拟机规范》对本地方法栈中方法使用的语言、使用方式与数据结构并没有任何强制规定,因此具体的虚拟机可以根据需要自由实现它,甚至.

2020-11-11 09:49:37 132

原创 【JVM系统学习之路】JAVA 虚拟机栈

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial虚拟机栈概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台 CPU 架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。有不少 Java 开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有 Java 堆(heap)和 Java 栈(stack)?为什么?首先栈.

2020-11-04 09:11:32 266 1

原创 【JVM系统学习之路】运行时数据区概述和程序计数器

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial本篇将 运行时数据区概述及线程 和 程序计数器 的知识点由于不是很多所以就一起梳理,也是为后续学习的知识点做一个铺垫。运行时数据区概述运行时数据区,它是在类加载完成后的阶段,如果对类加载不是很熟悉的小伙伴,可以看我上一篇文章。当我们通过前面的: 类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们的类.

2020-11-02 09:10:55 104

原创 【JVM系统学习之路】一篇看懂类加载

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial嗨喽,小伙伴大家好,我是小春哥,今天是打卡 【JVM系统学习之路】 的第二篇文章 类加载子系统 ,在学习本章节首先回顾 上一章节【JVM系统学习之路】JVM与Java体系结构的JVM整体结构。此图一定牢记于心,在接下来的 JVM 知识点都是从此图展开进行的,如果了解看过JVM 面试题,大家对此图应该还是比较熟悉,小春哥此图我都了解了,想要一个更完整的 JVM 架构图,有吗?有.

2020-10-30 11:27:05 426 1

原创 【JVM系统学习之路系列】 JVM 概述篇

JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial前言大家好,我是小春哥,前面我用了10多个章节对并发编程 JUC 相关知识进行梳理,如果对 JUC知识还不了解的同学,关注我的公众号【山间木匠】从菜单底部可直达,从本篇文章开始更新 JVM 相关知识点,每一个JAVA 开发者应该都能深刻体会,多线程、并发、JVM 是难点也是痛点。国内学习 JVM 虚拟机的人几乎是人手一本,周志明大神的“深入理解Java虚拟机”书籍。我第一次看.

2020-10-28 09:10:35 1027 1

原创 突击并发编程JUC系列-万字长文解密 JUC 面试题

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial什么是 CAS 吗?CAS(Compare And Swap)指比较并交换。CAS算法CAS(V, E, N)包含 3 个参数,V 表示要更新的变量,E 表示预期的值,N 表示新值。在且仅在 V 值等于 E值时,才会将 V 值设为 N,如果 V 值和 E 值不同,则说明已经有其他线程做了更新,当前线程什么都不做。最后,CAS 返回当前 V 的真实值。Concurrent包下所有.

2020-10-26 09:20:04 337 1

原创 突击并发编程JUC系列-阻塞队列 BlockingQueue

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial什么是阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线.

2020-10-23 09:35:36 141

原创 突击并发编程JUC系列-并发容器ConcurrentHashMap

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial本节让我们一起研究一下该容器是如何在保证线程安全的同时又能保证高效的操作。ConcurrentHashMap是线程安全且高效的HashMap。为什么要使用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。线程不安全的Has.

2020-10-16 09:26:15 482

原创 突击并发编程JUC系列-Locksupport 与 Condition

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorialLocksupportJDK 中的 rt.jar 包里面的 LockSupport 是个工具类,当需要阻塞或唤醒一个线程的时候,都可以使用 LockSupport 工具类来完成相应工作。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,而LockSupport 也成为构建同步组件的基础工具。LockSupport定义了一组以 park 开.

2020-10-15 09:17:46 346

原创 突击并发编程JUC系列-ReentrantReadWriteLock

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial本章节将学习 ReentrantReadWriteLock(读写锁),ReadWriteLock 也是 java 5之后引入的,之前提到锁(如Mutex和ReentrantLock)基本都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离.

2020-10-13 09:10:41 135 1

原创 突击并发编程JUC系列-ReentrantLock

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial锁是用来控制多个线程访问共享资源的方式,通过锁可以防止多个线程同时访问共享资源。在 Java1.5之前实现锁只能使用 synchronized关键字实现,但是synchronized隐式获取释放锁,在 1.5之后官方新增了 lock 接口也是用来实现锁的功能,,它具备与synchronized关键字类似的同步功能,显式的获取和释放锁。lock拥有了锁获取与释放的可操作性、可中断的.

2020-10-10 08:54:18 137

原创 突击并发编程JUC系列-并发工具 Semaphore

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial前面两个章节学习了 CountDownLatch 和 CyclicBarrier ,他们都是递减同步器,今天学习递增同步器 Semaphore。Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。看到这个信号量我的脑海中就出现了红绿灯,为了保证学生的安全,学校的十字路口一般都设有红绿灯,车流量控制,每一次绿灯同时能通.

2020-09-30 09:12:55 1489

原创 突击并发编程JUC系列-并发工具 CyclicBarrier

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial俗话说趁热要打铁,上篇中介绍的 CountDownLatch 的基本用法, CountDownLatch 计数器是一次性的,也就是等到计数器值变为0后,再调用CountDownLatch的await和countdown方法都会立刻返回,这就起不到线程同步的效果了。对于部分业务需要多次循环使用,就可以使用本章节的 CyclicBarrier,CyclicBarrier的字面意思是.

2020-09-29 09:34:33 202

原创 突击并发编程JUC系列-并发工具 CountDownLatch

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial小伙伴们,大家好,我们又见面了,突击并发编程JUC系列实战并发工具发车了。新的章节还是新的故事讲解,不知各位小伙伴们在面试遇到CountDownLatch、CyclicBarrier、Semaphore和Exchanger工具类灵魂拷问。本章节提供一种并发流程控制的手段CountDownLatch。基本介绍CountDownLatch允许一个或多个线程等待其他线程完成操作。在.

2020-09-28 09:35:20 170

原创 突击并发编程JUC系列-​JDK1.8 扩展类型LongAdder

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial小伙伴们,大家好,我们又见面了,突击并发编程JUC系列实战JDK1.8 扩展类型马上就要发车了。JDK 1.8 扩展类型如下初步了解前面在讲解AtomicLong,跟大家提到过longAdder , AtomicLong通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是JDK开发组并不满足于此。使用AtomicLong时,在高并发下大.

2020-09-27 14:25:48 263

原创 突击并发编程JUC系列-原子更新字段类AtomicStampedReference

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial他来了,他来了,他带着 ABA 问题走来了,小伙伴们,大家好,我们又见面了,突击并发编程 JUC 系列实战原子更新数组类马上就要发车了。字段类型如果需要原子地更新某个类里的某个字段时,就需要使用原子更新字段类,Atomic包提供了以下3个类进行原子字段更新。小试牛刀AtomicIntegerFieldUpdater案例演示原子地更新整形字段类,还是那个懵懂少年,在修改.

2020-09-25 09:40:55 165

原创 突击并发编程JUC系列-原子引用AtomicReference

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial小伙伴们,大家好,我们又见面了,突击并发编程 JUC 系列实战原子引用马上就要发车了。原子引用AtomicReference 类提供了对象引用的非阻塞原子性读写操作,对比原子更新基本类型的 AtomicInteger ,只能更新一个变量,如果要原子更新多个变量,就需要使用这个原子更新引用类型提供的类。Atomic 包提供了以下 3 个类。原子类型常用方法如下.

2020-09-24 12:25:40 240

原创 突击并发编程JUC系列-数组类型AtomicLongArray

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial上一个章节我们学习原子更新基本类型类,如果没有印象的小伙伴可以通过底部的链接回头看下,本章节主要介绍原子更新数组类型。数组类型数组类型就是通过原子的方式更新数组里的某个元素,Atomic包提供了以下4个类。AtomicLongArray 常用方法如下方法名说明long getAndIncrement(int i)以原子方式将位置i处的元素原子设置为.

2020-09-23 20:39:07 156

原创 突击并发编程JUC系列-原子更新AtomicLong

突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorialJava 从JDK 1.5开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。原子类通过 CAS (compare and swap) 、 volatile和native方法实现,比 synchronized 开销更小,执行效率更高,在多线程环境下,无锁的进行.

2020-09-22 09:58:48 211

原创 突击并发编程JUC系列-启航篇

![pexels-photo-373076.jpeg](https://img-blog.csdnimg.cn/img_convert/9c2b7b6e67689b45f4e41bb483199702.png#align=left&display=inline&height=333&margin=[object Object]&name=pexels-photo-373076.jpeg&originHeight=333&originWidth=500&

2020-09-21 13:12:25 343

原创 【Spring Data 系列学习】Spring Data JPA @Query 注解查询

【Spring Data 系列学习】Spring Data JPA @Query 注解查询前面的章节讲述了 Spring Data Jpa 通过声明式对数据库进行操作,上手速度快简单易操作。但同时 JPA 还提供通过注解的方式实现,通过将 @Query 注解在继承 repository 的接口类方法上 。Query 源码讲解public @interface Query { /**...

2020-03-15 20:28:20 2699

原创 【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询

Spring Boot Jpa 默认提供 CURD 的方法等方法,在日常中往往时无法满足我们业务的要求,本章节通过自定义简单查询案例进行讲解。快速上手项目中的pom.xml、application.properties与 Chapter1 相同实体类映射数据库表user 实体类@Entitypublic class User implements Serializable { ...

2020-03-08 18:54:58 1544

原创 【Spring Data 系列学习】Spring Data JPA 基础查询

【Spring Data 系列学习】Spring Data JPA 基础查询前面的章节简单讲解了 了解 Spring Data JPA 、 Jpa 和 Hibernate ,本章节开始通过案例上手 Spring boot Jpa 。spring dataSpring Data 库的核心接口是 Repository。首先需要定义实体类的接口,接口必须继承 repository 并且输入实体类型...

2020-03-06 14:00:14 918

原创 【Spring Data 系列学习】了解 Spring Data JPA 、 Jpa 和 Hibernate

在开始学习 Spring Data JPA 之前,首先讨论下 Spring Data Jpa、JPA 和 Hibernate 之前的关系。JPAJPA 是 Java Persistence API 的简称,中文名 Java 持久层 API,是 JDK 5.0 注解或 XML 描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。Sun 引入新的 JPA ORM 规范出于两个原因...

2020-02-28 13:59:05 965

原创 【系】微信小程序云开发实战坚果商城-扩展篇

第 5-1 课:扩展篇1 定时触发器如果云函数需要定时 / 定期执行,也就是定时触发,我们可以使用云函数定时触发器。配置了定时触发器的云函数,会在相应时间点被自动触发,函数的返回结果不会返回给调用方,详情进入官方网址,比如:两小时后取消订单、定点定时推送商品信息等。右击 cloud 选择 新建 Node.js 云函数 命名为 triggers云函数创建触发器,必须建一个 config....

2019-11-19 10:01:52 3180 3

原创 【系】微信小程序云开发实战坚果商城-前后端交互之个人中心实现

第 4-8 课:前后端交互之个人中心实现1 逻辑处理打开 client 新建 models/OrdelModel.js ,新增import { CloudRequest } from '../utils/cloud-request.js'class OrderModel extends CloudRequest { /** * 查询订单 * @param {*...

2019-11-19 10:00:53 3126

原创 【系】微信小程序云开发实战坚果商城-前后端交互之订单实现

第 4-7 课:前后端交互之订单实现1 逻辑处理打开 client 新建 models/orderModel.js ,新增import { CloudRequest } from '../utils/cloud-request.js'class OrderModel extends CloudRequest { /** * 生成订单 * @param {*} ...

2019-11-19 10:00:20 2832 2

原创 【系】微信小程序云开发实战坚果商城-前后端交互之商品详情实现

第 4-6 课:前后端交互之商品详情实现1 逻辑处理打开 client 新建 models/productModel.js ,新增import { CloudRequest } from '../utils/cloud-request.js'class ProductModel extends CloudRequest { /*********** 新增 *********/ ...

2019-11-19 09:58:39 2776 13

原创 【系】微信小程序云开发实战坚果商城-前后端交互之购物车实现

第 4-5 课:前后端交互之购物车实现1 逻辑处理client 新建 models/CartModel.jsimport { CloudRequest } from '../utils/cloud-request.js'class CartModel extends CloudRequest { _storageKeyName = 'cart'; constructor()...

2019-11-19 09:57:53 3753

原创 【系】微信小程序云开发实战坚果商城-前后端交互之主题实现

第 4-4 课:前后端交互之主题实现在这里我为了和底部的菜单栏区分,我把首页轮播下面的四个菜单称为主题,在日常的开发中我们商品有分类是必不可少的。为了展示数据这里我新建的集合 productTheme 随机关联几条商品信息。1 逻辑处理client 新建 models/productModel.jsimport { CloudRequest } from '../utils/cloud...

2019-11-19 09:57:18 1154

空空如也

空空如也

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

TA关注的人

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