- 博客(50)
- 资源 (1)
- 收藏
- 关注
原创 SkyWalking 为所有的API接口增加 tag
线上接口报错,接着被 SkyWalking 抓到,然后 SkyWalking 触发告警,最后老板@你,让你辛苦一下,在明早上班前把这个bug 改了,并告诉你你是全公司的希望。谁说不是呢?为公司业务保驾护航,我辈责无旁贷。
2024-04-15 18:05:55 520
原创 Stripe Android 购买集成
如果用户使用卡来支付,那体验还行,如果是需要调用支付宝支付这种,那体验是极差的。他会打开一个页面显示二维码,用手机打开一个二维码,还需要手机来扫码,这操作差点闪到我的老腰。用户本来给钱就肉痛了,你给了他一点冷静的时间,他直接就不买了。所以这次我们使用更适合移动客户端体质的方式来进行集成,也就是自定义支付流程。用户付款完成后,客户端会接收到回调,然后进一步调用后端接口完成收银。客户端集成和 Web 端集成有挺大的区别,客户端一般不会选择。用户付款完成后,Stripe 的后台还会将对应的事件通过。
2024-03-18 18:23:41 749
原创 Stripe Web 购买集成
价格:价格有定期和一次性两种收费方式,定期其实就是订阅。价格实体非常灵活,适合多种场景,一般就使用固定费率的一次性付款和定期付款。:指的是收费的时候跳转到 Stripe 提供的一个收银台页面进行付款。本地测试的方式不是很友好,可以使用内网穿透工具将请求转到本地来进行调试。用户付款完成后,Stripe 的后台还会将对应的事件通过。用户付款完成后,Stripe 会将页面重定向到创建。:则是需要高度自定义页面的产品使用,或者是客户端。Stripe 中有两种方式能进行收款,配置 Stripe Webhook。
2024-03-15 17:16:21 887
原创 Skywalking(9.7.0) 告警配置
period: 5message: '服务 SLA 低于 100%'实际测试下来,直接配置飞书会出现只有首次才会通知的情况。自己提供个Webhook在透传到飞书正常。猜测是Skywalking中集成飞书通知的模块有问题,这个待验证。
2024-03-11 10:31:14 1242
原创 在K8S集群中部署SkyWalking
咦,好像可以看到服务的各项指标,像SLA,Apdex这些,主要是能够进行请求的链路追踪,bug排查的利器。底层的存储组件使用 单节点ES,存储卷我用的是hdd的,因为是测试的,就省着用。对性能有要求的同学可以使用多节点,挂载SSD类型的磁盘。这样配置之后,启动 deployment 时,会先初始化一个 initContainer,然后在启动核心的 container pod。注意调整这两个参数,SW_CORE_RECORD_DATA_TTL和SW_CORE_METRICS_DATA_TTL。
2024-03-05 09:07:31 1422
原创 App 集成苹果三方登录
接上次 苹果 Web 登录,这次来肝一个更加常用的场景:App 集成苹果三方登录图片被吞了,去这里看吧: App 集成苹果三方登录这部分随便找个教程去看,要截太多的图了。所以,这些全部都交给产品。让他最后给个bundle_id就行。步骤:所以服务端需要提供一个接口,接收客户端提交的identifyToken,解析完成后,将用户登录上系统。我只提供服务端的代码,毕竟要我开发客户端是不可能的。绝对不可能如果你不只要开发服务端还要开发客户端。哈哈哈哈哈哈哈哈哈哈哈哈哈哈…
2024-02-28 11:25:34 884
原创 Google Play 内购实现
接上一次苹果内购记录,我又接了一把 Google Play 内购。Google Play 内购有啥好说的?一般人都不用。
2024-02-01 11:16:54 486
原创 Linux 和Windows 怎么查看端口占用
如何查看端口占用1. Linux1.1 使用 lsof 命令lsof -i:8080COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnginx 2444354 root 6u IPv4 146652114 0t0 TCP *:http (LISTEN)nginx 3160464 www-data 6u IPv4 146652114 0t0 TCP *:htt
2021-06-22 09:31:31 177
原创 Goland 支持打开 proto 文件
Goland 支持打开 proto 文件不少同学直接打开 proto 文件会是这样的吧?如果手残点了 install plugins 并装上这个插件更是直接飘红解决方法:github下载 JetBrains 的 proto 插件:https://github.com/ksprojects/protobuf-jetbrains-plugin/releases/tag/v0.13.0下载完成之后直接将 zip 压缩包拖进 Goland,Goland会提示你插件已经安装成功并需要重启 Golan
2021-04-16 00:01:23 1248
原创 使用代码生成工具truss创建一个go-kit项目
1. 安装 protobuf 工具https://github.com/protocolbuffers/protobuf/releases下载解压并将解压后的 bin 目录加入 path 环境变量2. 安装 truss 工具Github:https://github.com/metaverse/truss下载包go get -u -d github.com/metaverse/truss-u 和 -d表示什么可以看:https://go-zh.org/cmd/go/编译出二进制
2021-04-06 14:45:08 1515 8
原创 Docker启动2个mysql容器
Docker 启动另一个Mysql容器目的启动2个 Mysql 容器,一个用于 A,一个用于 B背景docker 目前已有Mysql镜像docker imagesdocker 目前已启动一个 Mysq 容器(用于 A,端口 3306)docker ps第一个 MySQL 容器暂时忽略(成功后的结果)操作1. 基于已有MySQL镜像创建一个容器docker run --name self_mysql -e MYSQL_ROOT_PASSWORD=123456 -p 1
2021-04-02 18:26:48 1749
原创 Nginx 初学者实践
Nginx 初学者实践1. Nginx 配置编排对于 Nginx初学者(比如我)来说,习惯了在 nginx.conf 的文件中直接写配置文件。这样会让所有的配置都混在一起,非常不好管理Nginx推荐的配置编排方式在ubuntu中装好 Nginx 之后,目录结构如下推荐配置编排方式1. nginx.conf这个 Nginx 的默认配置文件。建议用来保存全局的配置。例如:全局限制下载文件大小设置2. sites-available这是一个配置目录。建议用来保存对应域名的配置。例如,我
2021-03-31 18:53:48 1032
原创 域名的https证书申请并自动续期
使用Acme做https证书申请Github:https://github.com/acmesh-official/acme.sh1. 安装acme.sh# 安装curl https://get.acme.sh | sh# 给脚本起别名alias acme.sh=~/.acme.sh/acme.sh# 验证是否安装成功,出现版本号表示安装成功acme.sh -v2. 生成证书2.1 原理机制运行生成证书的命令之前需要先了解他的原理机制:先在 webroot 下创建目录:.
2021-03-31 18:38:47 1653
原创 Go中Array和Slice的基本使用
Go中Array和Slice的基本使用Go中Array和Slice的基本使用Array 数组1. 声明数组2. 声明数组并赋值3. 查看元素4. 赋值5. 遍历Slice 切片1. 切片声明2. 切片初始化3. 从数组初始化4. 添加元素5. 修改元素6. 遍历7. 删除元素8. 重置切片9. 复制切片Go中Array和Slice的基本使用Array 数组1. 声明数组var arr [2]intfmt.Println("arr -> len: ", len(arr), "cap: ", c
2021-01-12 21:54:02 205
原创 golang操作excel
golang操作excel1. 引入依赖github.com/tealeg/xlsx2. 结构体主体type ExportXlsx struct { Excel *xlsx.File}func NewExportXlsx() *ExportXlsx{ return &ExportXlsx{Excel:xlsx.NewFile()}}func (ex *ExportXlsx) AddSheet(name string) *xlsx.Sheet { sheet, _ := e
2020-12-29 10:04:12 818
原创 golang 发送邮件
引入依赖gopkg.in/gomail.v2查看邮箱配置这里使用腾讯企业邮演示我们需要这些参数:type SendEmail struct { Username string `json:"username"` // 发送者用户名 Password string `json:"password"` // 邮箱密码 Host string `json:"host"` // 邮件服务器 Port int `json:"port"` // 邮件服务器端
2020-12-25 09:30:46 351
原创 使用postman发送http请求,springboot怎么获取数据
GetGet请求方式主要使用的是params传递参数,即使用url。格式:接口地址+"?"+参数名+"="+参数值[+"&"+参数名+"="+参数值][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G3WEwJa3-1608705424914)(https://gitee.com/mkii/md-image/raw/master/image-20201219235946687.png)]后端接收代码:@RestController@RequestMappin
2020-12-23 14:37:46 1835 4
原创 在本地使用SQLite
在本地使用SQLite有没有同学有这样的需求,我想把数据存储到本地,还要求本地的数据能像DB一样查询出来,我的项目到哪都能跑起来,但又不想部署一个MySQL。SQLite官网下面介绍如何在Java中内置使用SQLite1.引入依赖<dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version
2020-12-13 11:29:35 461
原创 idea连接数据库,出现Server returns invalid timezone
问题如图解决点击 Advanced 标签页,设置 serverTimezone 为 Asia/Shanghai再重新连接就行了明明我的MySQL里有多个数据库,却只显示1个解决点击连接名右边的 schema 显示个数,选择 All schemas完成...
2020-07-05 21:52:50 381
翻译 原生JS如何发送POST请求?XMLHttpRequest来帮忙
平常用 jQuery 的 Ajax 请求习惯了,忘记了原生 JS 发送请求的方式,复习一下var url = "http://localhost:8080/login";var httpRequest = new XMLHttpRequest();httpRequest.open('POST', url, true);httpRequest.setRequestHeader("Content-type", "application/json");var obj = { "usernam.
2020-05-26 09:10:50 6364 3
原创 Maven 项目中引入本地 jar 包
最近使用 Spring Boot 做一些小东西,需要引入本地的 jar,而且要求打包时将这些本地 jar 一起打包。Maven 项目中引入本地 jar 包的常用方式1. 将 jar 打包到本地 Maven 仓库mvn install:install-file -Dfile=D://xxx.jar -DgroupId=com.xxx -DartifactId=xxx -Dversion=0.0.1 -Dpackaging=jar缺点是 install 之后,依赖只存在本地的 Maven 仓库中,如
2020-05-19 22:28:26 1212
原创 Gitee / Github 中如何协作
本文示例基于码云,GitHub 用法相似。前置条件:了解并能基本使用Git1. 新建一个代码仓库一般由组长这个角色在码云上新建一个代码仓库2. 创建分支模型一般组长创建完代码仓库,就要考虑代码仓库的分支模型。我这里创建了一个devlop分支,总的就是一个master主分支用于存储稳定的代码,devlop分支用于组员提交开发代码。3. 邀请组员仓库和分支模型创建完成后,需要邀请组员参与协作,免费版码云提供两种角色(管理员 / 开发者)选择。我这里选择邀请开发者,具体权限如...
2020-05-19 22:17:59 469
原创 Java 调用 web 接口的方式:Http Client的简单使用
Http Client 的用法上次介绍了 Java 中使用 HttpUrlConnection 调用 web 接口。这次带来更方便的一种方式本文只介绍 Http Client 库的一般用法。详细的使用可以查看官方文档,英文不好的同学可以查看翻译版。官方文档:https://hc.apache.org/httpcomponents-client-ga/tutorial/html/index.html翻译版:https://blog.csdn.net/zhongzh86/article/details/
2020-05-17 23:06:17 512
原创 Spring Boot中获取配置文件的值
前段时间使用 Spring Boot 在开发一个需求,要求将一些参数做成可配置化的,于是顺理成章地将参数放入 application.properties 文件中。YD.APP_ID=app20要获取 application.properties 中的属性值,最简单的方式是使用 @Value 注解@Value("${YD.APP_ID}")private String appId;这个时候我有一个类 App,它有一个构造方法会初始化一些东西,并使用到 appId 这个属性值@Reposito
2020-05-16 03:27:14 258
翻译 Java 调用 web 接口的方式 HttpUrlConnection
直接上代码唠叨两句:建议使用 httpclient 库调用 web 接口,因为 HttpUrlConnection 写起来非常容易出错import com.google.gson.Gson;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConne
2020-05-16 03:06:25 241
原创 Java 中 Boolean 和 boolean的区别
上次一个同学问,Boolean 类型的值不是只有 true 和 false 两种吗?为什么他定义的属性出现了 null 值?我们应该先明确一点,boolean 是 Java 的基本数据类型,Boolean 是 Java 的一个类。boolean 类型会在“赋零值”阶段给属性赋 false。而 Boolean 是一个类,会在“赋零值”阶段给对象赋 null。如果是静态属性,会在类加载时被赋值。如果是普通类属性,会在实例化对象时赋值。这两点可以了解一下“类加载机制”和“对象创建过程”。类加载机制:
2020-05-13 23:36:06 23829 1
原创 静态代理与动态代理的实现
静态代理类图动态代理类图:代码实现:/** * 委托类的上层接口 * 在静态代理中是委托类和代理类的上层接口 * */public interface Sell { void sell();}/** * 委托类,被代理类 * */public class Principal implements Sell { @Override publi...
2019-08-03 12:05:05 84
原创 LinkedList源码分析
LinkedList源码分析1.概述2.源码常用属性:常用构造方法:核心内部类:核心方法:参考1.概述高效插入和删除的有序序列线程不安全,非同步数据结构:链表(双向链表)继承了AbstractSequentialList,可以作为栈和队列使用实现了Deque,可以做双向链表遍历时推荐使用iterater关系图:public class LinkedList<E>...
2019-08-02 20:36:16 67
原创 ArrayList源码分析
ArrayList源码分析1.概述2.源码常用属性:常用构造方法:核心方法:参考1.概述动态增长和缩减的索引序列,基于数组实现的List线程不安全,可以存放null数据结构:数组(查询快,插入删除慢)实现了RandomAccess,遍历时推荐使用for循环RandomAccess一个标记接口(mark interface:),表示是否支持快速随机访问,即能否通过index直接定位...
2019-08-02 20:16:38 84
原创 线性表的链式实现-java
线性表的链式实现,只包含一些简单的操作,缺少严谨。只做思路参考。/** * 线性表的简单链式实现 * * @author mkii */public class LinList { // 头结点 private Node nodes; /** * 结点实际的内容结构 * */ class Node { ...
2019-07-24 23:16:38 318
原创 线性表的顺序实现-java
java的实现相对C语言,只是分配内存的方式不同。C语言用malloc,而java用new。这里只是使用int数组做一个简单的实现,并没有太严谨。废话不多说,直接上代码:/** * 线性表的顺序实现 * * @author mkii */public class SeqList { // 默认数组容量 private final static int DEFA...
2019-07-23 23:18:16 445
原创 javaIO分类以及具体实现
Java IOBIO:Block-IO,同步且阻塞Block-IO是一种同步且阻塞的通信模式。是一个比较传统的通信方式,模式简单,使用方便。但并发处理能力低,依赖网速。NIO:Non-Block-IO,同步非阻塞Java SE1.4版以后,针对网络传输效能优化的新功能。AIO:Asynchronous-IO,异步非阻塞在NIO的基础上引入了新的异步通信概念,并提供了异步文件通...
2019-07-21 21:29:04 107
原创 冒泡排序的实现与复杂度分析
冒泡排序的实现与复杂度分析冒泡排序实现冒泡排序改进冒泡排序实现public int[] bubble(int[] arr) { int i, j, len = arr.length; // 总共需要走n-1轮 for (i = 0; i < len - 1; i++) { // 每一轮确定一个元素,j < len - 1 - i表示i轮之...
2019-07-21 14:40:43 217
原创 Spring集成Quartz
Spring集成Quartz1.引入依赖2.Quartz配置文件`spring-quartz.xml`3.执行类`NoticeServiceImpl`4.执行效果.5参考1.引入依赖<!-- 定时作业调度quartz --><dependency> <groupId>org.quartz-scheduler</groupId> &l...
2019-05-27 15:40:52 130
原创 Springboot整合rabbitmq
Springboot整合rabbitmq引入依赖增加rabbitmq配置rabbitmq配置生产消费测试类参考引入依赖这里只是展示两者的整合,更多关于rabbitMQ的使用请访问https://www.rabbitmq.com/ <!-- 引入rabbitmq jar--> <dependency> <groupId>org.spr...
2019-05-26 23:25:03 72
原创 Spring中使用Junit,测试类中对象自动装配失败
测试类中对象自动装配失败1.实例2.异常3.解决方法1.实例测试类代码:public class NoticeTest { // 这里自动装配失败 @Autowired NoticeService noticeService; @Test public void getListTest(){ // 这里可以正常实例化 ...
2019-05-23 09:30:32 2014 3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人