自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 接口幂等性的理解

幂等、接口幂等性、

2023-08-29 21:00:00 297

原创 helm 制作应用的离线安装包

到helm下载对应的压缩包:https://github.com/helm/helm/releases解压,将helm文件cp到/usr/local/bin/ 文件夹下,查看helm版本;不同的k8s对应不同的helm版本,下载时留心注意;

2023-08-12 08:00:00 1452

原创 k8s-shell脚本判断pod状态并进入pod执行sql语句

k8s 运维操作

2023-08-04 16:59:58 902

原创 sql语句总结

公司使用的flyway来管理项目数据库,因此每个版本开发,都会牵涉到表、字段、索引的修改、删除、增加;需要在flyway文件中使用原生的sql语句;

2023-03-23 08:00:00 341 1

原创 mysql时区问题

msyql时区

2023-03-11 08:00:00 635

原创 springBoot健康检查与k8s探针

健康检查、k8s探针

2023-03-07 15:29:01 1363

原创 ubantu中apt-get安装的依赖全部打包

apt-get打包所有依赖

2023-02-21 19:08:14 3212

原创 java电商项目搭建-------支付模块(对接支付宝)

努力好了,时间会给你答案。--------magic_guo支付模块是电商项目的核心,毕竟电商是属于B2C的,最终的盈利才是最重要的,第三方支付平台有很多,而且第三方支付平台对于商家接入都会有一些开发文档和demo作为指引,因此这部分虽然重要,但是开发相对简单;下面我们来了解一下对接支付宝的一些流程:1、首先我们对接支付宝需要到支付宝开放平台2、然后选择自己的支付能力,我这里选择的是“电脑网站支付”;电脑网站支付点击电脑网站支付的基础功能,便可以看到一些基础的参数和接口描述以及代码示例、流程图

2021-10-17 22:19:20 3891 2

原创 java电商项目搭建-------分库分表(动态数据源)

努力好了,时间会给你答案。--------magic_guo对于分库分表的概念,现在一搜一大堆,这里不做过多的赘述,只将分库分表的思路拿出来和大家分享一下;我所整合的是spring + mybatis-plus,值得注意的是,我们既然要分库,意味着数据库肯定有很多个,所以数据源是动态的;数据具体要插入那个数据库的那张表,是通过规则计算得来的;我使用的是很普通的分库分表规则:即平均分配数据:要插入的数据库编号 = 用户id后四位 % 数据库的数量;要插入的数据表编号 = 用户id后四位 / 数据库

2021-10-16 16:02:55 999 2

原创 java电商项目搭建-------订单模块

努力好了,时间会给你答案。--------magic_guo订单模块的流程以及用户操作如下:1.当用户选定购物车需要结算的商品并单击结算按钮时,会跳转到订单页面,此时会将选定的购物车信息展示在订单界面,并且还会显示用户的地址信息以供用户选择;2.用户选择了地址,点击提交订单按钮,此时生成订单数据,并将插入数据库,同时清除购物车信息,然后跳转到支付页面;3.根据订单id查询订单5.根据用户id查询所有订单;6.更新订单状态的操作;7.取消订单,用户跳转到支付页面而未支付;此时订单处于待支付状态;

2021-10-14 22:12:53 3191

原创 java电商项目搭建-------地址模块

努力好了,时间会给你答案。--------magic_guo对于地址模块的搭建就比较简单了,以下我梳理了地址模块的一些信息;直接看图:地址模块展示栏:从上图中可以看地址模块的一些操作:功能分析:值得注意的是,添加地址是有两种操作:1、添加的地址是否设为默认地址;这就意味我们要做一个判断,这里牵涉了两个sql语句:①.插入这条地址信息;②.将该用户的其他默认地址设置为非默认地址;2、不判断地址是否设置为默认地址,添加进来的都为非默认地址直接添加地址,不用考虑用户传进来的是否是默认的,都设

2021-09-27 23:11:06 801 2

原创 java电商项目搭建-------商品详情页模块

努力好了,时间会给你答案。--------magic_guo在一个电商项目中,访问频率最高的是商品详情页页面,而且商品详情页的变化评率不会太高(除非是搞活动的时候);那么访问频率高,然后再使用数据库来查询,频繁访问数据库,性能肯定达不到要求。因此另外一套解决方案就应用而生:nginx+静态的商品详情页;nginx:处理静态数据没秒钟可以到达10W次(官方数据);在项目上线的时候,搭建一台nginx服务器,专门来处理静态页面的请求;需要考虑的是,页面生成的时机,如果用户要访问商品的时候,再去生成页面

2021-09-12 15:55:24 1147 1

原创 java电商项目搭建-------购物车模块

努力好了,时间会给你答案。--------magic_guo购物车模块的设计方式有很多种:1、用户登录或者未登录① 登录将购物车放入redis,未登录将购物车放入Cookie中② 登录将购物车放入mysql,未登录将购物车存入redis2、强制用户登录除了首页和商品详情页,其他的模块访问都会做限制,以达到用户登录的效果;但无论如何,购物车信息只是一个暂存的信息,创建订单后,会将购物车的信息删除,而且购物车访问的频率会很大,对于性能也有一定的要求,这是购物车数据库的设计的两个重要因素;一般来说

2021-09-11 13:34:38 2439 3

原创 java电商项目搭建-------单点登录模块SSO

努力好了,时间会给你答案。--------magic_guo在微服务项目中,基于session的登录系统逐渐的被摒弃,随之代替的是单点登录;session登录将session保存在服务器端,但是微服务系统中有很多服务米快,不能保证每个模块都同步用户的session,而且同步了session也使得系统的开销很大;在单点登录中,令牌token保存在客户端,用户登录时携带token,并统一由路由网关做验证(通过JWT实现),然后再转发到其他模块,免去了系统保存session的步骤;总的来说,登录模块包括三个

2021-08-29 12:17:01 894 2

原创 java电商项目搭建-------使用JavaMailSender实现邮件发送

让学习成为一种习惯!--------magic_guo在微服务项目中一般关于用户的隐私的验证方式有两种:1、邮件服务2、短信验证服务现在稍微大点儿的平台将两种服务都结合在一起,手机短信验证作为常用的验证服务,而邮件服务则是被用作保底的一种手段;短信服务相比于邮件服务还是比较方便快捷,至少来说手机已成为人们生活中不可或缺的一部分;短信服务有很多平台都已实现,例如阿里云,腾讯云、百度云等都以结合运营商实现了自己的短信服务,但是对于个人用户来说,申请短信服务仍是比较困难,他主要是针对公司和企业;因此这里

2021-08-21 11:08:31 1100 1

原创 java电商项目搭建-------ES搜索模块实现

让学习成为一种习惯!--------magic_guo之前的文章搭建了rabbitMq、es、ik和kibana环境,这次实现es的搜索模块;在一个电商项目中数据量和并发量很大,如果直接去数据库查询数据,会给数据库造成很大的压力,有可能导致数据库的宕机;当然解决办法也有很多,其中最典型的两种解决办法就是使用缓存和搜索引擎:1、数据库 + redis2、数据库 + 搜索引擎此模块的业务构架:es模块的maven依赖:需要注意的是,es依赖版本要和服务器的es版本要一致; <depen

2021-08-09 20:21:38 1721 1

原创 docker安装es和kibana

让学习成为一种习惯!--------magic_guo最近在学习为服务项目,免不了要接触一些第三方组件,如:es、rabbitMq、fastDFS等,如果在服务器中安装这些单一组件或者将这些组件搭建成集群的话,我认为使用docker服务会方便管理;另外docker中的docker-compose也可以很方便的管理这些项目;今天记录一下搜索引擎elasticsearch和kibana:elasticsearch简写es,es是一个高扩展、开源的全文检索和分析引擎,它可以准实时地快速存储、搜索、分析海量的

2021-08-08 21:43:40 2043 4

原创 docker安装rabbitmq

人之所以痛苦,那是因为你在成长。--------magic_guo搜索镜像:docker search rabbitmq直接拉取最新镜像:docker pull rabbitmq启动并制作容器:docker run -d --name rabbitmq --restart always --hostname rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq创建容器时添加参数 --restart=always 后,当 docker 重启时,

2021-08-01 12:52:40 99 1

原创 java电商项目搭建-------分布式文件存储系统(OSS)

人之所以痛苦,那是因为你在成长。--------magic_guo上一篇写了fastDFS,这一片就来就写一下阿里云的OSS文件存储;相比于fastDFS,OSS的好处不用多说,只需配置即可,无需担心搭建与后期维护问题;怎么注册OSS和开通OSS服务一起怎么获取AK与ASK这里不在进行叙述,可以根据官网的指引或者网上的教程来搞,一搜一大堆;在分布式系统中,一般上传图片和文件的流程是:前端带着文件----->调用文件上传服务的接口将文件转化成流的形式----->调用存储系统的接口;上述流

2021-07-31 15:05:47 967

原创 java电商项目搭建-------分布式文件存储系统(fastDFS)

人之所以痛苦,那是因为你在成长。--------magic_guo微服务项目,由于访问量和系统的高可用性能,会将上传的文件图片等存放在搭建的分布式文件存储系统;现在比较流行的文件存储系统有fastDFS和OSS(在下一篇描述);但是两者各有利弊:1、fastDFS的搭建需要更多的资源,搭建步骤繁琐,还要考虑到后期的维护成本;2、OSS是阿里云的存储服务,只需要一些配置就可以乱传乱滋溜,也不用考虑后期维护问题,等项目的访问量上来以后,只管拿钱配置就可以了;毕竟钱这东西,谁说不香呢?!!!!今天我们两个

2021-07-28 22:21:10 1485 2

原创 java电商项目搭建-------业务模块(商品模块)和全局异常

人之所以痛苦,那是因为你在成长。--------magic_guo在分布式系统中,数据库的设计尤为重要,关系着系统性能;在高可用的概念中,数据库的设计和优化被单独划分为一个模块来叙述,由此可见其重要性;其中有分库分表、字段设计、索引选择、数据库引擎、主键策略、表之间的关联等,都属于这一范畴;商品模块数据库搭建:阐述:商品的基本信息:id、价格、描述、类型、商品图片等;在一些真实业务场景中,商品图片是一个表(一般商品图片都存放于分布式文件存储系统中,如fastFDS和OSS)、商品描述是一个表;三

2021-07-25 21:07:29 915 12

原创 java电商项目搭建-------openfeign的服务调用(熔断机制和负载均衡)

人之所以痛苦,那是因为你在成长。--------magic_guo在微服务项目中,各个服务都部署在不同的服务器上,业务线上服务之间相互调用;话说回来,现在流行的几个服务调用工具openfeign、RPC、dubbo;RPC—Remote Produce Call(远程过程调用),主要是通过自定义通信规则,自定义数据格式来实现通信。其实这要求通信两端都需要统一通信规则,必须约定好数据传输格式;在我看来最流行的是:zookeeper+dubbo和eureka+openfeign两种注册中心和服务调用;d

2021-07-24 17:25:02 408

原创 java电商项目搭建-------业务模块搭建(shop-user)

人之所以痛苦,那是因为你在成长。--------magic_guo由于第一次实际搭建这些模块,深深体会到“小伙子,这里面水很深,你把握不住啊!”这句话的含义;其中出现了很多bug,但最后还是一一解决,文章后面会把遇到的问题都写是哪个,以供参考;搭建shop-user模块:基础模块搭建好以后,后面的模块搭建,千篇一律,模式一样,不同的是各个模块所需要的功能和依赖不同;总结搭建思路:创建一个spring initializr模块,选择好Group和Artifact后,选择依赖;整理pom文件(选择父po

2021-07-19 22:37:20 465 1

原创 java电商项目搭建-------基础模块搭建(config,eureka,zuul)

人之所以痛苦,那是因为你在成长。--------magic_guo最近一直在看java微服务电商项目视频,看的时候总觉得自己学会了,但是过了一段时间就会淡忘;尤其是一些配置问题;致力于此困扰,想按照视频的思路自己来搭建一套spring-cloud微服务环境;话不多说,开始吧!说到微服务,肯定少不了一些组件:配置中心:config server,nacos等注册中心:eureka,zookeeper,nacos等…服务调用:feign,rpc,dubbo等降级熔断:Hystix,sentinel等

2021-07-15 22:33:32 366 9

原创 虚拟机网关配置,解决ping百度问题

人之所以痛苦,那是因为你在成长。--------magic_guo在安装虚拟机后,今天想安装个docker来玩玩,没想到连接不上外网,ping 了一下百度,国人是网络不通的问题。搞了半天,其实还是网关设置的问题,谨以此记录一下;网关配置 vim /etc/sysconfig/network-scripts/ifcfg-eno16777736wq 保存命令,保存后重新启动下(service network restart重启网络命令)测试连接查看是否能上网:解决问题,参考文档:https://

2021-06-01 21:52:01 769

原创 关于maven父工程子工程和子模块之间的创建关系

有目标、有计划、有方向的去学习!今天看到一个微服务项目,在关于管快管理方面,吃了大亏,对于idea的功能还是太过于生疏,而且我的眼睛好像瞎了似的看不到,以此谨记;模块架构:其中guli_project为父工程,common为子工程,common_utils、service_base和spring_security为子模块;三者的管理关系为:层层管理父工程guli_project的pom文件: <modelVersion>4.0.0</modelVersion>

2021-03-25 00:27:01 773

原创 python xml与json之间的相互转化

人之所以痛苦,那是因为你在成长。--------magic_guo今天被一个需求搞得头大,接收的数据是xml报文,通过解析xml获取参数,另外响应数据也得是xml数据;经过一番的查找终于找到了python强大的第三方库:1.xmltodict2.dicttoxml还是python大法好啊,这么强大的第三方库!跪拜!虽然与xml相互转换的是dict,但我们可以以使用json模块的json.dumps()方法来进行转换:import xmltodictimport dicttoxmlimport

2020-12-08 21:44:02 404

原创 java实现Callable接口创建多线程的方式

人之所以痛苦,那是因为你在成长。--------magic_guo在java中面向对象多态的形式无处不在,把握好几处关键慢慢去推理,总能水落石出;以此告诫自己,切不可急躁;殊不知慢慢来才是最快的方法。/** 创建线程的方式三:实现Callable接口的方式 ----> JDK 5.0新增* 个人理解:* 以压栈的方式理解“实现Callable接口的方式来创建线程”* 1. Thread t1 = new Thread(futureTask);*

2020-12-07 21:50:19 110

原创 java多线程的创建方式

人之所以痛苦,那是因为你在成长。--------magic_guojava创建多线程的两种方式:1.继承Thread类2.实现Runnable接口方式一:/** 创建线程的方式一:* 继承Thread类* 1.创建一个继承Thread类的子类* 2.重写run方法* 3.创建子类对象* 4.调用Thread类的start()方法:①开启一个线程 ②执行子类重写的run()方法** 线程常用方法:* 1.start():开启一个线程,子类重写的run()方法* 2.run():重

2020-12-02 21:41:41 59

原创 java基本数据类型、包装类与String之间的相互转换

人之所以痛苦,那是因为你在成长。--------magic_guo基本数据类型、包装类与String之间的相互转换:因为在一些方法中只接收类对象,此时就显得三者之间的相互转换变得尤为重要:代码:public class WrapperTest { public static void main(String[] args) { // 基本数据类型转换成包装类:调用对应包装类的构造器 int num = 10; Integer in1 = new

2020-11-22 21:10:14 119

原创 java中==与equals()方法的比较

人之所以痛苦,那是因为你在成长。--------magic_guo“==” 与 equals()方法都是对两个对象进行比较,但是它们的使用方法又不相同,下面来看具体的区别:/** ==:* 是一个运算符* 可以使用在基本数据类型中和有引用数据类型中;* 在基本数据类型中比较的是对象的数据值(不一定要类型相同,但是不能与boolean型作比较)* 在引用数据类型中比较的是两个对象的地址是否相同、即两个在栈中引用在是否指向堆中同一个对象实体** equals():* Ob

2020-11-21 13:08:38 142

原创 java构造器与封装思想

构造器与封装:代码:Person类:/** 面向对象的思想:以类的形式组织代码,以对象的形式封装数据。* 构造器:* 1.创建对象* 2.初始化对象* 如果没有定义构造器,则系统默认有一个无参构造器,如果显式的定义了有参构造器,则系统不再提供无参构造器,需要自己定义无参构造器;* 在有一个类中,多个构造器形成构造器的重载。* 封装:* 将属性封装成私有化,只有在本类中或本类的方法中才能使用,外部想要使用,通过set/get方法来访问;可以在set方法中,限定非法的设

2020-11-17 21:49:26 142

原创 java值传递机制个人理解

人之所以痛苦,那是因为你在成长。--------magic_guojava值传递机制:规则:java基本数据类型的值传递,传递的是变量的类型的值;java引用数据类型值传递,传递的是地址值或者null;1.基本数据类型:代码:public class ValueTransTest02 { public static void main(String[] args) { int m = 10; int n = 20; System.out.

2020-11-17 21:14:27 116 1

原创 java赋值的个人理解

##人之所以痛苦,那是因为你在成长。--------magic_guojava关于赋值的理解:1.基本数据类型的赋值 public static void main(String[] args) { System.out.println("*******************基本数据类型*****************************************"); int m = 10; int n = m; Syste

2020-11-16 22:12:30 326

原创 java给定一个int型数组,数组内的每个元素都不同

人之所以痛苦,那是因为你在成长。--------magic_guo难点:判断数组内各个元素的不同;解决:每一次赋值,都与前边的每一个数相比较,如果有相同的,则重新赋值,再进行比较,直到没有相同的数,再进行下一个位置的赋值。代码:// 给定一个长度为6的int型数组,要求数组的每个元素都在0~30之内,且数组内的每个元素都不同public class ArrayTest02 { public static void main(String[] args) { method2(

2020-11-12 21:52:04 662

原创 对于java前后++ --的个人理解

人之所以痛苦,那是因为你在成长。--------magic_guojava ++ – 运算符的理解:一直以来,对于“++”和“–”这两个运算符都很迷,没有一个正确的观念,好好理解一下,希望以后会不会再犯类似的错误。个人理解:public class Demo01 { public static void main(String[] args) { // ++a :先计算++,再运算(赋值、比较等) // a++ :先赋值(赋值、比较等),再计算++

2020-11-06 21:53:24 102

原创 python实现排序Nb三人组:快排、堆排序、归并排序

代码:排序中的Nb三人组:快排、归并排序、堆排序li = [5, 7, 3, 1, 9, 4, 6, 13, 11, 16, 15, 19]快排def partition(li, left, right):tmp = li[left]while left < right:while left < right and li[right] >= tmp:right -= 1li[left] = li[right]while left < right and li[le

2020-07-24 18:21:57 152

原创 python实现排序的lowB三人组:冒泡、插入、选择

为什么称之为lowB三人组:因为时间复杂度都是O(n*2)话不多说,直接上代码:排序中的lowB三人组#1.冒泡排序li = [5, 7, 3, 1, 9, 4, 6]def bubble_sort(li):l = len(li)for i in range(l-1):for j in range(l-i-1):if li[j] > li[j+1]:li[j], li[j+1] = li[j+1], li[j]return li冒泡排序改进def bubble_sort1(l

2020-07-24 18:17:04 141

原创 mysql--检索数据(一)

人之所以痛苦,那是因为你在成长。--------magic_guo数据库:一个以某种有组织的方式存储的数据集合(保存有组织的数据的容器)。sql检索数据的语法:想选择什么 + 从什么地方选择 + 怎么样选择使用关键字select:select 数据 from 表 + 选择条件;检索的单个列:select goods_id from goods;检索多个列:select goods_id,goods_name,goods_price from goods;检索所有列:select * fro

2020-07-11 15:06:49 108

原创 C语言--对于指针数组与多重指针的理解

人之所以痛苦,那是因为你在成长。--------magic_guo1.指针数组数组是存放一批同类型数据的容器,其中的元素可以是整型、浮点型、字符,也可以是指针型等,存放内存地址的数组叫做指针数组,就像返回指针类型的函数一样(被称为指针函数)。定义指针数组的方式:类型名 * 数组名 [数组长度]例如:int * num[4]这个定义的理解:根据运算符先后等级,括号优先级高,num先于中括...

2020-04-06 10:36:05 768

空空如也

空空如也

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

TA关注的人

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