自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 资源 (1)
  • 收藏
  • 关注

原创 SpringCloud H版、SpringCloud Alibaba整合电商项目(谷粒商城2020)技术总结

目录一、初级篇1. docker的使用1.1 安装mysql1.2 docker安装redis2. 人人开源 搭建后台管理系统2.1 配置2.2. 逆向工程2.3 跨域资源共享2.4 阿里云对象存储(OSS)2.5 JSR303后端校验2.6 设计错误状态码二、高级篇1. ELASTICSEARCH1.1 概述1.2 商品上架一、初级篇1. docker的使用1.1 安装mysql每个容器,相当于在linux内开辟一个小型的linux,通过docker exec -it mysql bin.

2021-01-12 17:11:34 19259 34

原创 RPC 框架架构设计

RPC 又称远程过程调用(Remote Procedure Call),用于解决分布式系统中服务之间的调用问题。通俗地讲,就是开发者能够像调用本地方法一样调用远程的服务。下面我们通过一幅图来说说 RPC 框架的基本架构。RPC 框架包含三个最重要的组件,分别是客户端、服务端和注册中心。

2023-06-23 22:12:42 3662 2

原创 synchronized原理

重量级锁用到monitor对象,而偏向锁则在Mark Word记录线程ID进行比对,轻量级锁则是拷贝Mark Word到Lock Record,用CAS+自旋的方式获取。在JDK 1.6之前是重量级锁,线程进入同步代码块/方法时,monitor对象就会把当前进入线程的id进行存储,设置Mark Word的monitor对象地址,并把阻塞的线程存储到monitor的等待线程队列中,的逻辑,不依赖底层操作系统,就没有切换的消耗。引入了偏向锁和轻量级锁,就是为了在不同的使用场景使用不同的锁,进而提高效率。

2023-06-23 18:16:55 538

原创 Linux程序的加载过程

程序加载过程

2022-08-01 17:13:11 1406 2

原创 QLExpress 规则引擎

根据KeyWordDefine4Java.java定义的推导文法匹配成一棵AST(抽象语法树)ExpressNode。编译得到的指令集就会以Map的形式,被缓存在ExpressRunner实例的内部对象里。每一个word变得有意义常量、变量、符号、分割符号。...............

2022-07-29 13:27:27 2325

原创 分布式事务

又称CAP定理,指的是在一个分布式系统中CAP原则指的是,这三个要素最多只能同时实现两点,,故C和A二选一大多数情况应保障服务可用(A、P),而舍弃C。

2022-07-26 15:26:59 389

原创 在浏览器中输入 URL 地址

各种协议

2022-07-18 20:16:13 324

原创 ElasticSearch集群原理

当主节点负载压力过大,或者集中环境中的网络问题,导致其他节点与主节点通讯的时候,主节点没来的及响应,这样的话,某些节点就认为主节点宕机,重新选择新的主节点,这样的话整个集群的工作就有问题了,比如我们集群中有10个节点,其中7个候选主节点,1个候选主节点成为了主节点,这种情况是正常的情况。elasticsearch是允许一个节点既做候选主节点也做数据节点的,但是数据节点的负载较重,所以需要考虑将二者分离开,设置专用的候选主节点和数据节点,避免因数据节点负载重导致主节点不响应。5、脑裂问题成因与解决方案。...

2022-07-18 15:47:29 2772

原创 Linux进程间通信方式

函数用法:2. 命名管道FIFO命名管道函数:mkfifo一个写fifo,一个读fifo,操作起来就像文件一样信号相关的概念:3. mmap映射:非血缘关系进程间mmap函数:

2022-07-10 22:20:48 1089 1

原创 NIO与零拷贝

1. 传统IO三次用户态与核心态的转换2. mmap3. sendFile3. mmap sendFile区别

2021-08-22 10:50:27 90

原创 线程池、CompletableFuture

1. 线程池1.1 线程池创建1.2 核心线程池的内部实现(1) 内部实现public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS,

2021-08-07 14:58:43 672

原创 如何设计缓存

1. 分布式缓存?进程缓存?进程内缓存:ConcurrentHashMap、LRUMap、Ehcache、Guava Cache、Caffeine分布式缓存:Memcache、Redis1.1 一致性① 进程内缓存:当使用进程内缓存时,缓存元素是特定应用程序实例本地的。然而,许多中到大型应用通常会做负载均衡,从而不存在一个作为整体的独立应用。在这种情况下,很可能会构建出一个有多少应用实例就有多少缓存的解决方案,每个缓存都有各自的状态,这就导致了不一致性。随着缓存元素的过期或被逐出,所有缓存实例间可能

2021-07-29 16:01:40 436

原创 Redis底层数据结构

五种基本类型Redis是一个键值对数据库,而键都是字符串(Redis内部实现的简单动态字符串)类型,值有5种基本类型,分别是:STRING(字符串)LIST(列表)SET(集合)ZSET(有序集合)HASH(哈希)1. String存储的字符串是一个字符串值并且长度大于32个字节就使用SDS(simple dynamic string)方式进行存储,并且encoding设置为raw;若字符串长度小于等于32个字节就将encoding改为embstr来保存字符串。SDS称为简单动态

2021-07-26 21:03:01 190 3

原创 Java之NIO、主从Reactor

1. NIO 基本介绍① Java NIO 全称java non-blocking IO,是同步非阻塞的② NIO有三大核心部分: Channel(通道),Buffer(缓冲区), Selector(选择器)③ NIO是面向缓冲区编程的。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性,使用它可以提供非阻塞式的高伸缩性网络④ Java NIO 的非阻塞模式,使一个线程从某通道发送请求或者读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都

2021-07-26 17:57:14 288

原创 MySQL 乐观锁、悲观锁应用场景

使用场景乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。特点乐观锁:乐观锁的特点先进行业务操作,不到万不得已不去拿锁。即“乐观”的认为拿锁多半是会成功的,因此在进行完业务操作需要实际更新数据的最后一步再去拿

2021-07-24 15:36:14 793

原创 DNS是TCP or UDP & 本地DNS服务器是啥

DNS占用53号端口,DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议。① DNS区域传输的时候使用TCP协议:辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,会执行一次区域传送,进行数据同步。区域传送使用TCP而不是UDP,因为数据同步传送的数据量比一个请求应答的数据量要多得多。2.TCP是一种可靠连接,保证了数据的准确性。② 域名解析时使用UDP协议:客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即

2021-07-23 22:05:02 546 1

原创 Elasticsearch——索引

如何快速检索?Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型数据库的b-tree索引快在哪里?到底为什么快呢?笼统的来说,b-tree索引是为写入优化的索引结构。当我们不需要支持快速的更新的时候,可以用预先排序等方式换取更小的存储空间,更快的检索速度等好处,其代价就是更新慢。要进一步深入的化,还是要看一下Lucene的倒排索引是怎么构成的

2021-07-10 16:32:57 1629 2

原创 进程间通信

进程间通信(Interprocess Communication, IPC):管道、FIFO、消息队列、信号量、共享存储、套接字1. 管道1.1 创建:#include <unistd.h> int pipe(int fd[2]);// 返回值:若成功,返回0,若出错,返回-1.// 函数调用成功返回r/w两个文件描述符。无需open,但需手动close。// 规定:fd[0] → r; fd[1] → w,就像0对应标准输入,1对应标准输出一样// 向管道文件读写数据其实是

2021-07-01 18:19:12 127

原创 链表合集(Java版本)

1. 反转链表Leetcode 传送门:反转链表public static ListNode reverseList(ListNode head) { if (head == null) return head; ListNode g = new ListNode(-1); ListNode p = head; g.next = p; while (p.next != null) { ListNod

2021-06-30 16:13:29 86

原创 Java 快速排序 递归版

public class quicksort { //找基准分区 public static int getMiddle(int[] array, int low, int high) { int tmp = array[low]; while (low < high) { while (low < high && array[high] > tmp) { high--;

2021-06-30 10:48:10 136

原创 Nginx的配置详解(以反向代理为例)

nginx.conf文件user nginx;worker_processes 1;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream;

2021-01-28 15:10:24 207

原创 java——代理(Proxy)设计模式的理解

概述代理模式是Java开发中使用较多的一种设计模式。代理设计就是为其他对象提供一种代理以控制对这个对象的访问代理设计模式的原理:使用一个代理将对象包装起来, 然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。静态代理的特征是代理类和目标对象的类都是在编译期间确定下来,不利于程序的扩展。此外,每一个代理类只能为一个接口服务,这样一来程序开发中必然产生过多的代理。最好可以通过一个代理类完成全部的代理功能。应用场景安全代理:屏蔽对真

2021-01-12 21:25:04 201

原创 网站多级缓存的分层架构

参考:大型网站多级缓存的分层架构假设一个网站,需要提高性能,缓存可以放在浏览器,可以放在反向代理服务器,还可以放在应用程序进程内,同时可以放在分布式缓存系统中。从用户请求数据到数据返回,数据经过了浏览器,CDN,代理服务器,应用服务器,以及数据库各个环节。每个环节都可以运用缓存技术。从浏览器/客户端开始请求数据,通过 HTTP 配合 CDN 获取数据的变更情况,到达代理服务器(Nginx)可以通过反向代理获取静态资源。再往下来到应用服务器可以通过进程内(堆内)缓存,分布式缓存等递进的方式获取数据

2021-01-12 14:21:29 185

原创 Java 之垃圾收集器

1.概述收集算法是内存回收的方法论,垃圾收集器是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别。这里讨论的收集器基于JDK 1.7 Update 14之后的 HotSpot 虚拟机(在这个版本中正式提供了商用的G1收集器,之前G1仍处于实验状态)。(A)图3-5展示了7种作用于不同分代的收集器:Serial、ParNew、Parallel Scavenge、Serial Old、Paralle

2021-01-12 10:29:42 121

原创 为什么 BigDecimal 的 add 结果为 0

先看个例子: // 输出结果为 0 public void testBigDecimal() { BigDecimal decimal = BigDecimal.ZERO; String x = "5"; for (int i = 0; i < 3; i++) { decimal.add(new BigDecimal(x)); } System.out.println(decima

2020-12-16 15:35:51 3536

原创 windows查看端口被占用、杀进程

windows系统如何查看端口被占用、杀进程

2020-12-16 15:30:20 209

原创 LeetCode刷题笔记——排序(插入排序、归并排序、桶排序)

1. 插入排序(链表)来源:147题使用插入排序的方法对链表进行排序,其时间复杂度是 O(n2)O(n^2)O(n2),nnn是链表的长度:class Solution { public ListNode insertionSortList(ListNode head) { if (head == null) { return head; } //创建哑节点 dummyHead //引入哑节点是为了便于在

2020-12-02 11:24:28 128

原创 frp 和 nginx 搭建一个内网穿透服务器(穿透校园网)

项目场景:记录:最近在做的科大商城项目时,想用nginx做反向代理给宿舍笔记本电脑上的微服务,但是发现自己的腾讯云服务器ping不通宿舍的电脑问题描述:因为科大商场的微服务端用得上宿舍的笔记本电脑,宿舍得到的 IP 地址是校园网的私有 IP 地址,所有无法在公网上直接ping通。解决方案:使用 frp 配合 nginx 搭建一个内网穿透服务器1. 腾讯云(CentOs 7)Server端将下载好的frp拷贝到 /usr/local/ 目录下接着,进入到 frp_0.34.2_linux

2020-11-14 13:48:54 3009 5

原创 Java——java8新特性(Lambda、函数式接口、方法引用、Stream API、Optional类)

1. Lambda1.1 概述① Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。② Lambda 表达式:->”操作符被称为箭头操作符。它将 Lambda 分为两个部分:左侧: 指定了 Lambda 表达式需要的形参列表;其的参数类型可以省略(类型推断);如果lambda形参列表只有一个参数,其一对()也可以省略右侧: 指定了 Lambda 体, 是抽象方法的实现逻辑,也即Lamb

2020-09-20 20:42:29 342

原创 LeetCode刷题笔记——堆(Arrays、PriorityQueue、HashMap)

1. 数组排序Arrays.sort()Arrays中的sort()方法主要是针对各种数据类型(基本数据类型和引用对象类型)的数组元素排序引用对象类型数组的排序sort()方法要用到接口Comparator<T>,对其排序内部的比较函数compare()进行重写,以便于我们按照我们的排序要求对引用对象数组极性排序,默认是升序排序,但可以自己自定义成降序排序。2. 优先队列PriorityQueueJava优先队列详解class KthLargest { //优先队列:每次取出的

2020-09-20 12:06:39 172

原创 LeetCode刷题笔记——栈(Stack、ArrayList、LinkedList、StringBuilder)

1. Stack 类栈是Vector的一个子类,它实现了一个标准的后进先出的栈。堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。2. ArrayList类get()方法用于检索Arraylist中给定索引处的元素...

2020-09-20 12:03:36 228

原创 Java——JVM学习(周阳)

橙色区域:所有线程共享,存在GC(垃圾回收)灰色区域:线程私有什么是沙箱?Java安全模型的核心就是Java沙箱(sandbox),沙箱是一个限制程序运行的环境。沙箱机制就是将 Java 代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统资源访问,通过这样的措施来保证对代码的有效隔离,防止对本地系统造成破坏。沙箱主要限制系统资源访问,那系统资源包括——CPU、内存、文件系统、网络。不同级别的沙箱对这些资源访问的限制也可以不一样。  native关键字主要用于方法上一个.

2020-09-08 16:44:35 514

原创 Java——网络编程(TCP/IP三次握手、TCP编程、UDP编程)

1. 概述①网络编程的目的:直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯②网络编程中有两个主要的问题:如何准确地定位网络的主机、定位主机上的特定的应用找到主机后如何可靠高效地进行数据传输2. 网络通信要素............

2020-08-14 10:55:06 343

原创 (Linux)Centos7——grep和管道命令

grepgrep 全称是Global Regular ExpressionPrint,表示全局正则表达式版本grep用于过滤/搜索特定字符(串),常配合管道命令使用语法:grep -i或—ignore-case #忽略字符大小写例如:查看/root下install.log中带有“info“字符串的行grep info install.log管道命令管道命令用于链接多个命令命令1 | 命令2 | 命令3 | …将命令1的结果交给命令2处理,处理完之后再交给命令3处理…例如:查看所有r

2020-08-12 20:42:58 814

原创 Java——I/O流(File类、节点流、缓冲流、转换流、对象流)

1. File类的使用1.1 概述java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用 输入/输出流。想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。File对象可以作为参数传递给流的构造器创建File类的实例//相对路径,相对于当前moduleF

2020-08-12 20:41:36 178

原创 Java——位运算符、逻辑运算符

1. 位运算符&、|、^运算的细节:2. 逻辑运算符其中,判断 &、|、^是位运算符还是逻辑运算符,依据是运算对象是int型还是boolean型。

2020-08-06 14:06:04 128

原创 Leetcode/剑指Offer 刷题记录(2)

题目描述有效的字母异位词:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false题解哈希表法:为了检查 ttt 是否是 sss 的重新排列,我们可以计算两个字符串中每个字母的出现次数并进行比较。因为 SSS 和 TTT 都只包含 A−ZA-ZA−Z 的字母,所以一个简单的 26 位计数器表

2020-08-05 11:39:00 102

原创 Leetcode/剑指Offer 刷题记录(1)

题目描述给定一个长度为n的数组A,求数组B,B[i] = A[0]A[1]…A[i-1]*A[i+1]…A[n-1]。要求不能使用除法。题解假设:left[i] = A[0]*…A[i-1]right[i] = A[i+1]…A[n-1]所以:B[i] = left[i] * right[i]如图:可知:left[i+1] = A[0]…A[i-1]A[i]right[i+1] = A{i+2]…*A[n-1]于是,left[i+1] = left[i] * A[i]righ

2020-07-25 14:02:47 132

原创 SpringBoot中注解@Controller和@RestController的区别

@RestController = @Controller + @ResponseBody如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp或html页面,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是 Return 的内容。如果需要返回JSON格式的数据到页面,则需要在对应的方法上加上@ResponseBody注解。...

2020-07-16 17:29:57 208

原创 Spring Boot 配置嵌入式servlet容器(1.x与2.x区别)

//SpringBoot1.5.x@Beanpublic EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer(){ return new EmbeddedServletContainerCustomizer() { @Override public void customize(ConfigurableEmbeddedServletContainer container) {

2020-07-14 14:39:50 104

CoLight: Learning Network-level Cooperation for Traffic Signal Control

CoLight: Learning Network-level Cooperation for Traffic Signal Control

2020-06-03

空空如也

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

TA关注的人

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