自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Golang服务端对接Google Play结算系统订阅

Golang对接Google Play结算系统订阅

2023-04-03 18:21:30 3249 12

原创 模拟Docker为容器建立bridge网络

模拟Docker为容器建立bridge网络1. 安装docker2. 创建Nginx容器3. 手动为容器设置网络4. 验证网络在阅读本文之前,请先了解一下linux的namespace机制1. 安装dockerCentos下安装,执行yum install docker-ce -yUbuntu下安装,执行apt install docker.io2. 创建Nginx容器我们首先先执行docker run -d nginx正常创建一个nginx容器可以看到,此时的容器是已经建立了网络的,并且

2022-03-13 21:06:38 4100

原创 Golang中AK/SK认证的实现

Golang实现AK/SK认证一、AK/SK概述1. 什么是AKSK2. AK/SK认证过程二、AK/SK认证例子1. 设计ak/sk的请求参数2. 数据库中保存sk3. 客户端生成签名4. 服务端校验签名一、AK/SK概述1. 什么是AKSKak/sk是一种身份认证方式,常用于系统间接口调用时的身份验证,其中ak为Access Key ID,sk为Secret Access Key。客户端和服务端两者会协商保存一份相同的sk,其中sk必须保密。2. AK/SK认证过程客户端在调用的服务端接口时候

2021-12-26 13:46:59 5906

原创 如何在Golang中使用MongoDB的事务

如何在Golang中使用MongoDB的事务一、Mongo中的事务1.Mongo新特性2.基于会话的事务3.事务相关命令二、搭建Mongo副本集1. 安装MongoDB2. 环境变量配置3. 创建副本集目录3.1 创建主节点相关目录3.2 创建副节点相关目录3.3 创建仲裁节点相关目录4. 修改MongoDB配置文件4.1 主节点配置文件4.2 副节点配置文件4.3 仲裁节点配置文件5. 启动MongoDB服务5.1 启动主节点5.2 启动副节点5.3 启动仲裁节点6. 副本集初始化三、在Go代码中实现Mo

2021-10-23 23:14:17 3873 3

原创 字节码执行引擎

字节码执行引擎概述栈帧概述栈帧结构概述局部变量表操作数栈动态连接方法返回地址方法调用分派概述JVM的字节码执行引擎,功能基本就是输入字节码文件,然后对字节码进行解析并处理,最后输出执行的结果实现方式可能有通过解释器直接解释执行字节码,或者是通过即时编译器产生本地代码,也就是编译执行,当然也可能两者皆有栈帧概述栈帧是用于支持JVM进行方法调用和方法执行的数据结构栈帧随着方法调用而创建,随着方法结束而销毁栈帧里面存储了方法的局部变量、操作数栈、动态连接、方法返回地址等信息栈帧结构概述

2021-05-11 22:32:39 257

原创 内存分配

内存分配1. 运行时数据区1.1 PC寄存器1.2 Java栈1.3 Java堆1.4 方法区1.5 运行时常量池1.6 本地方法栈1.7 栈、堆、方法区交互关系2. Java堆内存概述2.1 Java堆的结构2.2 对象的内存布局2.3 对象的访问定位3. JVM相关参数3.1 Trace跟踪参数3.1.1 GC日志格式3.2 Java堆的参数3.3 Java栈的参数3.4 元空间的参数1. 运行时数据区包括:PC寄存器、Java虚拟机栈、Java堆、方法区、运行时常量池、本地方法栈等1.1 P

2021-05-09 22:36:31 454

原创 类加载、连接和初始化

类加载、连接和初始化1、类的生命周期过程2、类加载2.1 类加载要完成的功能2.2 加载类的方式2.3 类加载器2.3.1 类加载器的关系2.3.2 类加载器说明2.4 双亲委派模型2.4.1 双亲委派模型说明2.4.2 破坏双亲委派模型3、类连接3.1 类连接主要验证的内容3.2 类连接中的解析4、类初始化4.1 类的初始化4.2 类的初始化时机5、类的卸载1、类的生命周期过程加载:查找并加载类文件的二进制数据连接:就是将已经读入内存的类的二进制数据合并到JVM运行时环境中去,包含如下几个步骤:

2021-04-29 23:27:59 534

原创 编码技巧

编码技巧数学归纳法递归控制循环控制边界控制数据结构算法复杂度数学归纳法用于证明断言对所有自然数成立证明对于N=1(N=0)成立证明N>1时:如果对于N-1成,那么对于N成立求证:1 + 2 + 3 + … + n = n * (n + 1) / 21 = 1 * (1 + 1) / 2如果 1 + 2 + 3 + … + n - 1 = (n - 1) * n / 2那么 1 + 2 + 3 + … + n = 1 + 2 + 3 + … + (n - 1) + n =

2021-04-20 22:24:42 127 1

原创 单例模式要点

单例模式要点破坏单例模式的方法饿汉式 & 内部类懒汉式单例模式最佳方案:枚举类破坏单例模式的方法序列化反射攻击clone方法饿汉式 & 内部类解决序列化的办法:重写public Object readResolve()方法,返回单例instance对象,当JVM从内存中反序列化地“组装”一个新对象时,会调用readResolve()方法进行返回。解决反射攻击的办法:在私有构造器处判断instance是否为空,不为空即抛出异常,禁止通过反射创建对象解决clone方法的办法

2021-04-15 13:04:51 134

原创 实现Iterable接口,优雅的使用foreach进行遍历

首先要有一个自己的Node类,如下:public class Node { private final int value; private Node next; public Node(int value) { this.value = value; this.next = null; } public int getValue() { return value; } public Node g

2021-04-15 10:32:20 849

Dubbo介绍

dubbo介绍1.初识Dubbo2.RPC介绍3.Duboo工作原理4.整合Dubbo和Zookeeper5.实现服务间调用1.初识DubboDubbo是什么轻量级,高性能的RPC框架并不是要成为一个微服务的全面解决方案以Java语言而出名Dubbo现状全程是Apache Dubbo微店,网易云音乐,考拉,滴滴,中国电信,人寿start有30K+个,fork有20K+个Dubbo的故事:主要历程09年开始做,做的第1个版本10年初的时候,架构升级,Dubbo 2.0

2021-04-13 23:51:53 216

原创 Zookeeper介绍与使用

Zookeeper介绍与使用一、为什么需要Zookeeper二、Zookeeper诞生历史三、Zookeeper是什么四、Zookeeper的五大特点五、Zookeeper和CAP的关系六、Zookeeper的作用七、Zookeeper的安装(Centos8下)八、znode节点九、常用命令十、Watcher机制十一、ACL十二、原生Java的API的缺点十三、利用Apache Curator一、为什么需要Zookeeper用起来像单机但是又比单机可靠的东西Leader在团队里的协调作用内存、单机

2021-04-10 00:06:56 506

原创 微服务介绍

微服务介绍一、什么是微服务单体应用的痛点部署效率低下团队协作开发成本高系统高可用性差什么是服务化把传统的单机应用从本地方法调用,改造成通过RPC、HTTP产生的远程方法调用把模块从单体应用中拆分出来,独立成一个服务部署微服务是一种架构风格开发单个应用作为一系列小型服务的套件,其中每个服务都运行在自己的进程中,并且通过轻量级的机制实现彼此间的通信,这通常是HTTP资源API这些服务是围绕着业务功能构建的,并且可以通过完全自动化的部署机制进行独立部署这些服务的集中式管理做到

2021-04-08 23:41:59 235

原创 RabbitMQ介绍

一、初识RabbitMQ核心思想:接收并转发消息。类似于现实生活中的邮局。producer:生产者、消息发送者,相当于现实生活中的寄件人,通常用P来表示。queue:相当于现实生活中的邮箱。消息发送到RabbitMQ之后,会被保存到这个队列里- 面,这个队列是可以无限延长的。queue可以对多个消费者。consumer:消费者。通常用C表示。consumer会从queue中获取消息。相当于现实生活中的收件人。producer、queue和consumer不必在同一台机器上,它们可以是分散的,这意

2021-04-06 16:37:57 320

原创 集群、分布式、微服务的区别

集群、分布式、微服务的区别集群和分布式的区别分布式:一个业务分拆多个子业务,部署在不同的服务器上集群:同一个业务,部署在多个服务器上集群和微服务的区别集群:分散压力微服务:分散能力微服务和分布式的区别微服务是一种架构设计方式分布式是一种系统部署方式...

2021-04-05 20:14:19 116

原创 ThreadLocal的注意点

内存泄漏:Key的泄漏:ThreadLocalMap中的Entry继承自WeakReference,是弱引用。弱引用特点:如果这个对象只被弱引用关联(没有任何强引用关联),那么这个对象就可以被回收。Value的泄漏:ThreadLocalMap的每个Entry都是一个对key 的弱引用,同时,每个Entry都包含了一个对value的强引用。正常情况下,当线程终止,保存在ThreadLocal里的value会被垃圾回收,因为没有任何强引用了。但是,如果线程不终止(比如线程需要保持很久.

2021-04-04 20:45:10 126

原创 常见的线程池及其特点

常见的线程池及其特点Executors.newFixedThreadPool(nThreads):固定容量的线程池。corePoolSize为nThreads,maximumPoolsize为nThreads,keepAliveTime为0ms,采用了无界队列。缺点在于容易造成大量内存占用,可能会导致OOM。Executors.newSingleThreadExecutor():单个线程的线程池。corePoolSize为1,maximumPoolsize为1,keepAliveTime为0ms,采用

2021-04-03 13:22:14 227

原创 JVM中内存泄漏的场景

内存泄漏:内存泄漏是指一个不再需要被程序使用的对象或者变量还在内存中占有着他的空间。虽然在Java中有着垃圾回收机制可以极大程度上降低内存泄漏的情况,但是这并不意味着Java不会出现内存泄漏的场景。内存泄漏的场景:静态集合类:对于静态的对象来说,它存储在我们的方法区中,作为垃圾回收器几乎不会对方法区里面的东西进行高频度的回收。而如果用static描述了一个集合,而存放的数据量又比较大,就会导致这些数据无法被及时的回收以及内存释放,久而久之数据一点点累积,而方法区的内存往往来说是比较小的,到时候就会产

2021-04-02 07:56:23 311 2

原创 JVM的内存组成

JVM的内存组成首先JVM的组成是分为了共享区和私有区:共享区:包含了方法区和堆。私有区:包含了程序计数器PC、虚拟机栈和本地方法栈。方法区(Method Area):方法区存放了静态变量、常量、虚拟机加载的类的信息。垃圾回收器是很少对方法区的内容进行垃圾回收的,垃圾回收器在方法区主要回收的内容是常量以及类型卸载的信息,对于静态变量是不进行回收的,但是如果我们定义的静态变量是一个引用类型的话,被引用的对象是有可能被回收的。堆(Heap):存放的是程序运行时所创建的对象实例,堆是垃圾回收的主要区

2021-04-01 00:02:45 109

原创 本地上运行正常,但是部署到了服务器却一直验证码错误(Nginx反向代理导致的session丢失问题)

最近做一个课程项目,在本地开发完后部署到服务器上,一切都比较顺利。但是在登录用户的时候却一直显示验证码错误!!!排错纠错过程如下:1. 代码检查首先,我是在本地上先测试了一遍,发现没有问题。2. 参数检查本地代码没有问题。于是我就在生成验证码的地方,输出打印了一下生成的验证码,然后在检验验证码的地方也输出了一下输入的验证码和生成的图片验证码,本地上测试无误,重新部署到服务器。部署完毕后,cd到tomcat根目录的logs目录下,输入tail -f catalina.out按回车,查看tomcat

2021-03-30 00:03:30 2687 2

原创 SpringBoot中使用Redis进行缓存加速响应

SpringBoot中使用Redis进行缓存加速响应首先在maven的pom.xml添加如下依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency> <groupI

2021-03-27 22:55:39 318

原创 SpringBoot中的service报空指针异常

SpringBoot中的service报空指针异常异常排查:1. 检查Service是否加了@Service注解2. Controller中的属性service是否加了@Autowired注解3. 检查所写的对外接口方法是否是使用public进行修饰的我遇到的是第三种,这里一定要注意对外的接口方法一定是要用public修饰的,否则在调用service的时候会导致出现service空指针异常...

2021-03-26 21:21:24 3404

原创 PUT、DELETE非简单请求相关问题及解决方法

PUT、DELETE非简单请求相关问题及解决方法首先要说一下什么是简单请求和非简单请求。简单请求:简单请求为GET和POST,当客户端给服务器发送者两种请求时,服务器可以直接处理。非简单请求:非简单请求指的是PUT、DELETE以及其他扩展标准请求,当客户端给服务器发送者两种请求时,会先发送一次预检请求,确认服务器是否能处理这种请求,然后再决定是否要发送该次请求,预检请求可以减轻服务器的压力。对于PUT请求,要想对其支持,有几种办法:Tomcat默认是不支持PUT、DELETE请求的,我们可以在

2021-03-25 23:07:16 1272

原创 SpringJDBC中的事务

SpringJDBC中的事务Spring中事务分为三种类型 :编程式事务声明式事务注解形式事务一、编程式事务在需要执行事务的类中,声明一个DataSourceTransactionManager事务管理器transactionManager,在需要使用事务的方法中要做三个步骤 :定义一个DefaultTransactionDefinition事务默认的标准配置definition,其父类为TransactionDefinition;开始一个事务,执行transactionManager

2021-03-25 08:27:03 194

原创 SpringMVC中解决请求响应乱码问题

对于一般的请求响应乱码,我们要分为请求和响应两个部分来讲。对于请求乱码,我们要分为GET请求和POST请求两部分来讲。请求乱码:GET请求:在Tomcat服务器的service.xml配置文件中的Connector添加属性URIEncoding=“utf-8”。POST请求:在项目的web.xml中设置过滤器,如下即可:<filter> <filter-name>characterFilter</filter-name> <filter

2021-03-19 15:52:58 237

原创 跨域问题产生的原因及SpringMVC中的解决办法

跨域问题产生的原因及SpringMVC中的解决方法跨域问题产生的根加粗样式本原因是浏览器的同源策略同源策略:同源策略阻止从一个域加载的脚本去获取另一个域上的资源。只要协议、域名、端口有任何一个不同,都被当做不同的域。浏览器Console看到Access-Control-Allow-Origin就代表跨域了特殊情况——HTML中允许跨域的标签:<img> - 显示远程图片<script> - 加载远程JS<link> - 加载远程CSSSprin

2021-03-19 15:27:59 178

空空如也

空空如也

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

TA关注的人

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