跳至主要內容
pptg

pptg

费大厨辣椒炒肉真是太好吃了!

ppNginx
nginx命令行工具 by Golang
youi
个人todo软件 by Flutter
ppMenu
个人Mac的便捷菜单栏 by Swift
pp宇宙
无聊画画
Vue的Jenkins自动构建配置

1. 配置步骤

  1. 配置项目地址,这个地址用于在构建时选择需要构建项目分支,请填写真实的项目地址。
项目地址
  1. 配置脚本地址,这里会从远程的jenkins-file中读取构建的过程,所以写jenkins-file的地址,Credentials写可以正常拉这个jenkins-file的git账户、密码

  2. 配置脚本路径,配置jenkins-file项目下的文件路径


pptg大约 2 分钟
Git日志过多问题

真是"善战者无赫赫之功",以前自己只负责写代码的时候,远远没想到自建研发环境这么难维护

1. 问题描述

自从老学长离职 + 合作方撤退之后,自建的Gitlab三天两头出故障,起初docker logsdf -h排查之后一直是手动去删除git的日志,现在有时间来彻底解决一下。

Gitlab日志过多

2. 解决方法

一路du -sh *之后,发现是一个application_json.log文件过大,网上搜了搜原因是prometheus需要使用这个文件,最后采用的方法是给文件加一个轮转。


pptg小于 1 分钟
网络系统

1. 零拷贝

磁盘是计算机中最慢的硬件之一,零拷贝、直接I/O、异步I/O等技术的目的都是为了提高系统的吞吐量。此外,操作系统内核中的磁盘高速缓冲区可以有效减少磁盘的访问次数。

1.1 DMA


pptg小于 1 分钟
一致性哈希算法

1. 哈希算法

哈希算法用来将一系列的值映射到一个区间内,在负载均衡、HashMap、数据库分库分表等场景经常使用。

然而该算法的应用在数据库等系统扩容时,具有严重缺陷:如果节点的数量发生了变化,而节点持久化了响应的数据,则必须对进行数据迁移。如果数据量较大则会带来极高的迁移成本。

使用一致性哈希算法则可以有效的解决上述问题。

2. 一致性哈希算法

2.1 介绍

一致性哈希算法和哈希算法的不同是:一致性哈希算法对2^32取模,而非节点的个数。取模的结果即为哈希环。这样节点就是环上的一个点,而数据映射的结果只需要按照顺时针的顺序找到第一个节点进行映射即可。


pptg大约 2 分钟
调度算法

1. 进程调度算法

进程调度算法用来将空闲的CPU时间片分配到进程上执行,常见的进程调度算法有:

  1. 先来先服务调度算法:每次从就绪队列选择最先进入队列的进程,直到进程退出或被阻塞再重新选择,适用于CPU繁忙型作业

  2. 最短作业优先调度算法:每次从就绪队列选择运行时间最短的进程,直到进程退出或被阻塞再重新选择,有利于提高系统的吞吐量

  3. 高响应比优先调度算法:每次从就绪队列选择优先级 = (等待时间 + 要求服务时间)/要求服务时间最大的进程,权衡了短作业和长作业

  4. 时间片轮转调度算法:每个进程被分配时间片一般20ms-50ms,允许进程在时间片内运行,未运行完则会切换下一进程,时间片太长会导致短作业进程响应时间变长,太短会导致进程上下文切换频繁,降低CPU效率

  5. 最高优先级调度算法:每次从就绪队列选择优先级最高的进程,具有抢占式(出现高优先级进程立刻切换)和非抢占式(当前进程必须运行完)两种处理方法

    • 静态优先级:优先级分配后不会改变
    • 动态优先级:随着等待时间增加进程优先级
  6. 多级反馈队列调度算法时间片轮转算法最高优先级算法的结合,兼顾了长短作业,同时有较好的响应时间


pptg大约 5 分钟
Java设计模式

六大原则

  1. 单一职责原则
  2. 开闭原则: 开放扩展, 关闭修改(相同功能的if-else, 封装成接口)
  3. 里氏替换原则
  4. 依赖倒置: 抽象/接口不依赖实现类
  5. 接口隔离: 最小化接口
  6. 迪米特原则: 只和最直接的类通信

1. 创建型

1.1 单例模式

单例模式保证每次获取一个类的实例时,都是同一个实例,防止重复性的创建一些资源。单例模式的实现方式有很多,主要的区别体现在是否支持懒加载、是否线程安全等方面。

注意

需要注意反序列化、线程安全、clone、反射可以破坏单例


pptg大约 8 分钟
内存管理

最近在测试MySQL的性能时,遇到了有趣的问题

docker stats里面明明显示MySQL已经占用了16G的内存,但是top显示仅仅占用了1G的内存

最后找到了问题的原因:Buffer Pool的内存被分配在了Cache/Buff中,top显示的内存并不包括这一区域

使用free -h可以看到Cache/Buff的使用 于是就想着来梳理一下计算机的内存体系

1. 虚拟内存

1.1 介绍

对于单片机这类没有操作系统的硬件来说,运行的程序是直接跑在内存的物理地址上的,也就是说同时运行两个程序是不可能的,因为两个程序的地址很有可能冲突,进而导致相互覆盖


pptg大约 5 分钟
MySQL 事务

1. 事务的特性

MySQL实现事务的4个特性分别如下:

  • 原子性(Atomicity):一个事务的操作要么都成功要么都失败并回滚,通过 undo log(回滚日志) 保证
  • 隔离性(Isolation):允许多个并发事务同时对数据进行修改,通过 MVCC(多版本并发控制) 保证
  • 持久性(Durability):事务的修改是永久性的,通过 redo log(重做日志) 保证
  • 一致性(Consistency):事务操作前和操作后,满足完整性约束,数据库保持一致性状态(比如转账,要增加和减少同样的金额)。通过原子+持久+隔离保证

pptg大约 2 分钟
MySQL 锁

1. 锁的种类

MySQL中根据加锁的范围,分为:全局锁表级锁行锁三类

1.1 全局锁

在加锁后,数据库将变为只读状态,任何增删改或者对表结构进行调整的语句都会阻塞。需要手动释放或者断开会话才会解开锁,MySQL通过以下方式使用全局锁:

-- 加锁
flush tables with read lock
-- 释放锁
unlock tables

pptg大约 4 分钟
表设计及测试

1. 需求

项目需要存储对接的第三方接口数据。对应每个用户每天会产生50个分类的日、周、月、年三种统计,也就是每个用户每天会产生200条记录。如果是1w用户的话,那么每天就是150w条

项目原表如下,已经过脱敏处理:

create table record
(
    id                  bigint auto_increment primary key,
    user_id             varchar(100)     not null comment '用户id',
    type                varchar(30)      not null comment '分类的标签',
    cycle               int(8)           not null comment '统计周期日、周、月',
    value               int(8)           not null comment '统计值',
    -- 其他字段(创建、修改时间等)
)

pptg大约 5 分钟