- 博客(27)
- 资源 (12)
- 收藏
- 关注
原创 乐优商城最终篇
目录一、总结1.1 架构图1.2 包含的微服务1.2.1 网关微服务1.2.2 授权中心微服务1.2.3 购物车微服务1.2.4 评论微服务(新增)1.2.5 配置中心微服务1.2.6 页面详情微服务1.2.7 后台管理微服务1.2.8 订单微服务1.2.9 Eureak注册中心1.2.10 搜索微服务1.2.11 秒杀微服务(新增)1....
2018-12-12 21:56:49 16476 43
原创 乐优商城(填坑)——后台登录
后台管理模块增加登录验证,与门户网站一样都是采用无状态登录。一、新增全局函数在main.js中新增用户验证:二、修改路由先显示登录页面效果:三、解决cookie写入问题在http.js中新增配置:四、登录Login.vue<template> <v-app> <v-content> ...
2018-12-30 16:07:26 5258 6
原创 阿里云部署Maven项目
一、安装Java1.1 安装命令:yum -y install java-1.8.0-openjdk.x86_64结果:1.2 运行java -version二、安装MYSQL2.1 下载yum上mysql的资源有问题,所以不能仅仅之用yum。在使用yum之前还需要用其他命令获取mysql社区版cd /tempwget http://repo.mysql.com/mysql...
2018-12-28 20:57:25 3311 2
原创 字节转换
一、byte数组转16进制字符串 public static String bytesToHexString(byte[] src){ StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { retu...
2018-12-28 12:51:16 2845
原创 红黑树
一、BT二叉树,略。二、BST2.1 定义若它的左子树不空,则左子树上的关键字的值均小于根关键字的值。若它的右子树不空,则右子树上的关键字的值均大于根关键字的值。左右子树又各是一棵二叉排序树2.2 查找二叉排序树的查找从根节点开始,沿着某一个分支逐层向下比较。先和根节点比较,大于的话在又子树继续查找,小于的话在左子树查找。2.3 插入在查找过程中,当树中不存在关键字等于给定...
2018-12-26 17:10:50 2209 3
原创 JUC锁——Semaphore
一、什么是SemaphoreSemaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的事情后释放许可信号,超过阈值后,线程申请许可信号将会被阻塞。Semaphore可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两种互斥状态。它的用法如下:...
2018-12-20 23:31:28 418
原创 JUC锁——CyclicBarrier
一、什么是CyclicBarrierCyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。 CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。 CyclicBarrier初始时还可带一个Runnable的参数...
2018-12-20 22:19:30 183
原创 JUC锁——CountDownLatch
一、什么是CountDownLatchCountDownLatch 类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他2个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值...
2018-12-20 21:39:19 271
原创 乐优商城(五十二)服务鉴权
一、用户鉴权客户端请求服务时,根据提交的token获取用户信息,看是否有用户信息及用户信息是否正确,这个在乐优商城中已经实现。二、服务鉴权微服务中,一般有多个服务,服务与服务之间相互调用时,有的服务接口比较敏感,比如资金服务,不允许其他服务随便调用,所以要进行服务调用的权限鉴定认证。其实原理是一样的,服务调用的时候携带token,然后在被调服务中对token进行解析,判断是否满足既定的...
2018-12-20 16:39:33 1949 2
原创 伪共享(False Sharing)
目录一、计算机的基本结构二、缓存行三、伪共享四、如何避免伪共享缓存系统中是以缓存行(cache line)为单位存储的,当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。一、计算机的基本结构下图是计算的基本结构。L1、L2、L3分别表示一级缓存、二级缓存、三级缓存,越靠近CPU的缓存,速度越快,容量也越小。所以L1缓存很...
2018-12-19 23:35:01 522
原创 并发框架——Distruptor
目录一、什么是Disruptor二、Disruptor的设计方案三、Disruptor实现特征四、Disruptor实现生产者-消费者模式4.1 依赖4.2 声明Event4.3 创建EventFactory4.4 消费者4.5 生产者4.6 调用五、Disryptor的核心概念5.1 RingBuffer5.1.1 什么是RingBuffer...
2018-12-19 17:48:45 5411 1
原创 Docker入门
Docker学习目标:掌握Docker基础知识,能够理解Docker镜像与容器的概念完成Docker安装与启动掌握Docker镜像与容器相关命令掌握Tomcat Nginx 等软件的常用应用的安装掌握docker迁移与备份相关命令能够运用Dockerfile编写创建容器的脚本能够搭建与使用docker私有仓库1 Docker简介1.1 什么是...
2018-12-16 20:59:54 318
原创 整数拆分
通过证明可以得到,尽可能多的拆出3,就可以得到乘积最大。 public static int integerBreak2(int n) { if (n <= 3){ return n-1; } int result = 1; while (n > 4 ){ r...
2018-12-15 12:53:14 198 1
原创 Java锁的深入
一、重入锁重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的权限。ReentrantLock 和synchronized 都是 可重入锁。锁可以传递~。主要就是用来避免死锁的,假设一个类中的所有方法都加锁,当方法之间进行调用时,如果锁是不可重入的,那么就永远调用不了其它方法,因为锁没有释放(都用同一把锁)轻量级锁(Lock)重量级锁(synchr...
2018-12-13 17:01:50 174
原创 三角形最小路径和
动态规划,最后路径和最小,那么每一步必须最小一、求解 求出到达最后一层的所有最小路径,然后再求出其中最小的即可。初始化二维数组用来存放结果final int size = triangle.get(triangle.size() - 1).size();int[][] result = new int[size][size];result[0][0] = triang...
2018-12-13 15:17:57 152
原创 Callable和并行设计模式——Future模式
目录一、Callable1.1 介绍1.2 Future常用方法1.3 Demo1.4 Runnable和Callable的区别二、Future模式2.1 介绍2.2 实现2.2.1 公共数据接口2.2.2 RealData2.2.3 FutureData2.2.4 FutureClient2.2.5 调用者2.2.6 结果三、Java内...
2018-12-07 21:02:21 326
原创 LOCK锁
LOCK锁1. synchronized的缺陷synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢?如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况: 1)获取锁的线程执行完了该代码块,然后线程...
2018-12-07 14:24:35 950
原创 线程池
目录一、什么是线程池二、线程池的作用三、线程池的分类3.1 newCachedThreadPool3.2 newFixedThreadPool3.3 newSingleThreadExecutor3.4 newScheduleThreadPool3.5 newSingleThreadScheduledExecutor四、ThreadPoolExecutor类...
2018-12-07 10:52:25 198
原创 并发队列
并发队列1.ArrayDeque, (数组双端队列) 2.PriorityQueue, (优先级队列) 3.ConcurrentLinkedQueue, (基于链表的并发队列) 4.DelayQueue, (延期阻塞队列)(阻塞队列实现了BlockingQueue接口) 5.ArrayBlockingQueue, (基于数组的并发阻塞队列) 6.LinkedBlockingQueue...
2018-12-06 23:29:49 200
原创 线程之间的通讯
一、经典问题:生产者与消费者1.1 共享资源class Res{ public String name; public String sex;}1.2 生产者class InThread extends Thread { private Res res; public InThread(Res res) { this.res = res; }...
2018-12-05 23:31:53 201
原创 0-1背包、完全背包、多重背包、零钱兑换
目录一、0-1背包问题1.1 问题描述1.2 动态规划过程1.3 状态转移方程1.4 填表1.5 代码1.6 回溯法求解1.7 优化二、完全背包问题2.1 问题描述2.2 分析2.3 填表2.4 代码2.5 回溯法求解2.6 优化三、多重背包3.1 问题描述3.2 分析3.3 填表3.4 代码3.5 回溯法求解...
2018-12-04 23:25:14 708
原创 线程安全
目录1. 如何产生线程安全问题?2.线程安全解决方法3.内置锁4.同步代码块 synchronized5.同步方法5.1 静态同步方法5.2 非静态同步方法6.synchronized7.多线程死锁 8.ThreadLocal9.多线程的三大特性9.1 原子性9.2 可见性9.3 有序性10.Java内存模型11. Volatile关...
2018-12-03 22:45:45 265
原创 多线程基础
1.线程和进程的区别每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输...
2018-12-03 20:46:48 154
原创 单词拆分 II
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入:s = "catsanddog"wordDict =["cat", "cats", "and", "sand", "dog&qu
2018-12-03 16:25:35 803
原创 乐优商城(五十一)延时消息队列
目录一、需求1.1 常见方案1.2 缺点二、高效延时消息设计与实现三、RabbitMQ延时队列3.1 Per-Queue Message TTL3.2 Dead Letter Exchanges3.3 小结3.4 在队列上设置TTL3.4.1 建立delay.exchange3.4.2 建立延时队列(delay queue)3.4.3 配置延时路由规...
2018-12-01 23:31:23 1924 3
原创 二维区域和检索 - 矩阵不可变
思路和一维的一样:首先计算result,求出每一行的所有区间和。然后累加【row1,row2】区间内每一行的和。class NumMatrix { private int[][] result; public NumMatrix(int[][] matrix) { int row = matrix.length; if(row ...
2018-12-01 23:10:32 320
原创 区域和检索 - 数组不可变
注意需要多次调用sumRange方法,所以不能简单的进行区间遍历求和,动态规划一下,记录一下 每个区间的和,然后根据索引直接求出结果。class NumArray { private int[] sums; public NumArray(int[] nums) { final int length = nums.length; i...
2018-12-01 11:23:08 230
乐优商城前端
2018-10-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人