丢了100块钱
昨天去做核酸,做完核酸然后买了两瓶芬达,结果超时收营员收银机收走我 100 元。最后她给我 100 现金,我又扫码付钱 6 块钱给他。完事我就把 100 元放口袋,走那会还想着别丢了,口袋浅,手上有拎着袋子没地方拿。回家后把东西一放,100 元现金抛脑后忘记了。第二天也就是今早我才想起来。God,一摸口袋咋没了捏…… Fuck,现在这社会,经常性无现金支付,身上打猛地有个现金还给整丢了,唉……😭
昨天去做核酸,做完核酸然后买了两瓶芬达,结果超时收营员收银机收走我 100 元。最后她给我 100 现金,我又扫码付钱 6 块钱给他。完事我就把 100 元放口袋,走那会还想着别丢了,口袋浅,手上有拎着袋子没地方拿。回家后把东西一放,100 元现金抛脑后忘记了。第二天也就是今早我才想起来。God,一摸口袋咋没了捏…… Fuck,现在这社会,经常性无现金支付,身上打猛地有个现金还给整丢了,唉……😭
Linux 磁盘分区 问题一: 如果遇到下述问题: [root@ostack-228-32 ~]# mount /dev/sdb /data/ mount: /dev/sdb is already mounted or /data busy 可以用此方式: [root@ostack-228-32 ~]# dmsetup status VMDATA--node9-VMDATA--node9: 0 46816583680 thin-pool 0 15633/4145152 0/182877280 - rw no_discard_passdown queue_if_no_space - 1024 VMDATA--node9-VMDATA--node9_tdata: 0 46816583680 linear VMDATA--node9-VMDATA--node9_tmeta: 0 33161216 linear centos-swap: 0 268435456 linear centos-root: 0 629145600 linear [root@ostack-228-32 ~]# dmse....
交换机与 Linux 服务器多网卡 bond 模式对接 交换机多端口和服务器对接时,需要确定是否需要配置聚合或者不配置聚合,并且配置聚合的时候还需要确认是静态聚合还是动态聚合,当然这和当前服务器网卡的 bond 模式有关。下面我们了解下 Linux 服务器的 7 种 bond 模式,说明如下: 第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略) 特点:传输数据包顺序是依次传输(即:第 1 个包走 eth0,下一个包就走 eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。这种模式需要接入交换机配置静态链路聚合配置。 V5/V7 交换机侧的静态典型配置 [DeviceA] interface Bridge-Aggregation 1 //默认静态 [DeviceA-Bridge-Aggregation1] quit [DeviceA] inter....
RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。它的并发最高可以支持一万并发,且它出身于金融行业。 RabbitMQ 核心概念 Producer:生产者 Consumer:消费者 Broker:消息中间件的服务节点 。 Virtual Host:等同于 namespace Channel:频道或信道,是建立在 Connection 连接之上的一种轻量级的连接。 RoutingKey:路由键。生产者将消息发给交换器的时候,一般会指定一个 RoutingKey,用来指定这个消息的路由规则。 Exchange:交换器,生产者将消息发送到 Exchange (交换器,通常也可以用大写的“X”来表示),由交换器将消息路由到一个或者多个队列中。如果路由不到,或返回给生产者,或直接丢弃。 Queue:队列,是 RabbitMQ 的内部对象,用于存储消息。 Binding:绑定,RabbitMQ 中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键( BindingKey ) ,这样....
相信每个人都写过这样的的 MyBatis 的 SQL 代码: SELECT * FROM user WHERE NAME LIKE concat('%', concat( '小', '%' )) 查询结果如下: 那么如果将'小'换成 % 呢? 再换成''呢? 没错,它会查询出所有数据,说来惭愧,这也是我一个 5 年 Java 开发程序员才注意到的事情!!!GOD 问题出现了就要解决它,有大佬推荐说 MySQL 可以使用 ngram 进行分词,我不知道是啥也没用过,而且我用的数据库是 Oracle 不过我找到了另外一种既可以在 Oracle 用的也可以在 MySQL 用的解决办法: 首先我们在代码中进行字符串替换: String name = user.getUserName(); if(null!=name && !"".equals(name)){ user.setName(name.replaceAll("\%","\\%").replaceAll("\","\\_")); } 然后修改查询 sql: 为什么图中用的 @?因为 MySQL 用\会报错,只能用两个斜杠\ \ ,但是在 Oracle 中....
Java 常见线上问题总结 绝⼤多数 Java 线上问题从表象来看通常可以归纳为 4 个方面:CPU、内存、磁盘、网络。比如,应用上线 后突然 CPU 使用率 99%、内存泄漏、STW 时间过长,这些问题通常可以分为两大类: 系统异常 (CPU 占用率过高、磁盘使用率 100%、系统可用内存低等) 业务异常 (服务运⾏⼀段时间⾃动退出、服务间调⽤时间过⻓、多线程并发异常、死锁等) 1.如何去定位问题 解决问题的第⼀步是定位问题,排查手段⼀般包括以下⼏项,也可以将此理解为排查顺序: 业务⽇志分析排查 APM 分析排查 物理环境排查 应⽤服务排查 云⼚商或运营商问题排查 1.1 业务⽇志分析排查 这个没啥说的,看日志不会吗? 1.2 APM 分析排查 APM,全称 Application Performance Management,应⽤性能管理 在分布式系统中,需要用到 APM 进行全链路分析 ⽬前市场上使⽤较多的链路跟踪⼯具有如下⼏个: Apache Skywalking:https://skywalking.apache.org Pinpoint:https://pinpoint.com/product/for-e....
在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。也就是说在 Linux 系统中有一个重要的概念:一切都是文件。其实这是 UNIX 哲学的一个体现,而 Linux 是重写 UNIX 而来,所以这个概念也就传承了下来。在 UNIX 系统中,把一切资源都看作是文件,包括硬件设备。UNIX 系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。 Linux 目录树 所有可操作的计算机资源都存在于目录树这个结构中,对计算资源的访问,可以看做是对这棵目录树的访问 Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录: 常见目录说明: /bin: 存放二进制可执行文件(ls、cat、mkdir 等),常用命令一般都在这里; /etc: 存放系统管理和配置文件; /home: 存放所有用户文件的根目录,是用户主目录的基点,比如用户 user 的主目录就是/home/user,可以用~user 表示; /usr : 用于存放系统应用程序; /opt: 额外安装的可选应用程序包所放置的位置。....
TCP 三次握手 在后端相关岗位的入职面试中,三次握手的出场频率非常的高。其实在三次握手的过程中,不仅仅是一个握手包的发送 和 TCP 状态的流转。还包含了端口选择,连接队列创建与处理等很多关键技术点。通过今天一篇文章,我们深度去了解了三次握手过程中内核中的这些内部操作。 全文洋洋洒洒上万字字,其实可以用一幅图总结起来。 服务器 listen 时,计算了全/半连接队列的长度,还申请了相关内存并初始化。 客户端 connect 时,把本地 socket 状态设置成了 TCP_SYN_SENT,选则一个可用的端口,发出 SYN 握手请求并启动重传定时器。 服务器响应 ack 时,会判断下接收队列是否满了,满的话可能会丢弃该请求。否则发出 synack,申请 request_sock 添加到半连接队列中,同时启动定时器。 客户端响应 synack 时,清除了 connect 时设置的重传定时器,把当前 socket 状态设置为 ESTABLISHED,开启保活计时器后发出第三次握手的 ack 确认。 服务器响应 ack 时,把对应半连接对象删除,创建了新的 sock 后加入到全连接队列中,最后....
#先参考我之前的一篇文章在服务器进行一个死锁的情景重现# 检测死锁的文章 查看 Java 进程 ps -ef|grep Java 针对进程 id 生成 dump 文件 jmap -dump:format=b,file=serviceDump.dat 14640 使用 jvisualvm.exe 对 dump 进行分析(如果 JDK 的 bin 目录下没有,需要自行下载) https://visualvm.github.io/index.html 修改 visualvm.conf 加入 JDK 路径 visualvm_jdkhome="C:/Users/JavaCoder/.jdks/corretto-1.8.0_312" 双击 bin 目录下的 visualvm.exe 打开 导入 dump 文件后查看死锁的线程 还有另外一种使用方式 jhat : jhat 用于分析 heapdump 文件,它会建立一个 HTTP/HTML 服务器,让用户可以在浏览器上查看分析结果 C:\Users\SnailClimb>jhat C:\Users\SnailClimb\Desktop\heap.hprof Reading from C:....
#!/bin/bash hostname=hostname
old_hostname=grep -Ev '^$|^#' /etc/zabbix/zabbix_agentd.conf | grep Hostname
sed -i "s#old_hostname#Hostname=hostname#g" /etc/zabbix/zabbix_agentd.conf systemctl restart zabbix-agent 下发: ansible -i hosts.work new-openstack -m shell -a "netstat -lntup | grep 10050" ansible -i hosts.work new-openstack-ceph -m shell -a "cat /etc/zabbix/zabbix_agentd.conf | grep 172.24.15.122" ansible -i hosts.work new-openstack -m copy -a "src=/root/test.sh dest=/tmp/test.sh" a....
[root@system-wiki ~]# cat /usr/lib/systemd/system/wiki.service [Unit] Description=Wiki [Service] Type=simple PIDFile=/usr/local/atlassian/confluence/work/catalina.pid ExecStartPre=rm -rf /usr/local/atlassian/confluence/work/catalina.pid ExecStart=/usr/local/atlassian/confluence/bin/startup.sh ExecStop=/usr/local/atlassian/confluence/bin/shutdown.sh PrivateTmp=true Restart=always User=confluence Group=confluence [Install] WantedBy=multi-user.target pid 设置文件:/usr/local/atlassian/confluence/bin/s....
添加硬盘后,输入如下命令可识别: echo '- - -' > /sys/class/scsi_host/host0/scan #vm 虚拟机扫描硬盘并识别硬盘
拉取最新镜像 docker pull mysql:latest ^ 也可以去 https://hub.docker.com/_/mysql?tab=tags 安装指定版本号的镜像 ^ 运行 MySQL 容器 docker run -itd --name mysql8.0 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.27 (注:-p 3306:3306 左边的是容器的端口号,右边的是服务器的端口号。服务器的端口可以直接映射到容器的端口号上) (注:123456 是数据库的密码可自行修改) (注:8.0.27 是数据库的版本根据自己的版本进行更改,如何输入错误可能会导致在次拉取镜像) 查看容器状态 docker ps 进入 MySQL 容器登录 MySQL docker exec -it mysql8.0 bash 登录 MySQL MySQL -u root -p 然后开启阿里云服务器的 3306 端口 连接成功!
第一种方式:在容器内部修改配置文件实现代理 拉取镜像 docker pull nginx 启动容器 docker run --name nginxweb -p 8080:80 -d nginx 此时可以打开网站 ip:8080 访问 nginx 首页 进入容器 docker exec -it nginxweb /bin/bash 更新源的索引,这样才能获取到最新的软件包 apt-get update 安装 VIM apt-get install VIM 如果是将 80 映射为其他端口,需要注释掉最下面的那句默认的配置 #include /etc/nginx/conf.d/*.conf; 新增一个 server 配置如下,其他地方都不用动: server{ listen 80; server_name localhost; location /MerryChristmas/ { proxy_pass http://ip:63302/index/v1; proxy_redirect default; } } 访问代理的地址(:80 可省略) ip:80/MerryChristmas 修改后校....
运行 SQL 建表加数据 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId --课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 --4.成绩表 SC(SId,CId,score) --SId 学生编号,CId 课程编号,score 分数 测试数据 create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values('01' , '赵雷' , '1990-01-01' , '男'); insert into Student values('02' , '钱电' , '1990-12-21' , '男'); insert into Student value....