技术分享

收录了 30 篇文章

Screenshot-to-code 原理分析

screenshot-to-code 这个项目可以将屏幕截图转换为 HTML/Tailwind CSS 代码。它使用 GPT-4 Vision 生成代码,使用 DALL-E 3 生成图片。项目地址:github.com/abi/screenshot-to-code这个项目最近爆火,短短几天时间,在 Github 上已经有 14.9K 的 Star。花了 5 分钟看了下项目的源码,没想到...

Back-of-the-envelope Calculations 粗略估算

时间单位时间单位秒(second),毫秒(millisecond),微秒(microsecond),纳秒(nanosecond)换算1s = 1000ms (秒 -> 毫秒)1ms = 1000μs (毫秒 -> 微秒)1μs = 1000ns (微秒 -> 纳秒)数据单位数据的表示常用的有两种标准:IEC:国际电工委员会(International Elec...

Java 字符串 split 的一个反直觉陷阱

最近生产环境遇到一个奇怪的数组下标越界报错,如下图代码所示,我们可以肯定的是 fieldName 变量不为空(不是空字符串,也不是 null),但是代码执行到读取 names[0] 变量的时候,抛出了一个 数组下标越界 (java.lang.ArrayIndexOutOfBoundsException) 的异常。异常信息如下图所示问题很简单,我们对一个字符串执行 split 方法之后,以过...

MySQL 数据库索引技术原理初探

概述什么是索引一本书 500 页的书,如果没有目录,直接去找某个知识点,可能需要找一会儿,但是借助前面的目录,就可以快速找到对应知识点在书的哪一页。这里的目录就是索引。所以,为什么会有索引?为了提高数据查询效率。常见索引算法最简单也最容易想到的索引算法就是有序数组了,我们创建一个数组,数组按照顺序排列,我们要查找某一条记录,使用二分法就可以快速得到(log N),从图中我们可以看出,...

数据库分库分表策略

垂直切分垂直分表是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。优点:解决业务系统层面的耦合,业务清晰与微服务的治理类似,也能对不同业务的数据进行分级管理、维护、监控、扩展等高并发场景下,垂直切分一定程度的提升IO、数据库连接数、单机硬件资源的瓶颈缺点:部分表无法join,只能通过接口聚合方式...

Keepalived & LVS 高可用

在本文中,我将会讲述如何在Centos 7下基于Keepalived和LVS技术,实现Web服务的高可用和负载均衡,我们的目标拓扑结构如下图所示本文将会持续修正和更新,最新内容请参考我的 GITHUB 上的 程序猿成长计划 项目,欢迎 Star,更多精彩内容请 follow me。准备如果你觉得一步一步按照下面的操作来搭建太过麻烦,可以直接下载 mylxsw/keepalived-exa...

Linux 实现端口转发

本文讲述了如何在Linux下实现端口转发,以实现通过VPN连接至远端开放给VPN连接的计算机后,如何通过该计算机代理访问远端内网中其它计算机。情景是这样的,A公司给B公司开发了项目,之后需要对B公司的项目进行维护,而该项目是在B公司内网中才能访问的,A公司需要有办法能够连接到B公司才能对项目进行维护,因此,B公司管理员给A公司开放了VPN,但是限制只能访问项目所在服务器,而不能访问其他服务器,现...

实用的 Linux 命令集锦

网络管理捕获指定端口的所有流量复制tcpdump -tttt -s0 -X -vv tcp port 8080 -w captcha.cap查看本机的公网 IP复制curl http://members.3322.org/dyndns/getipTCP 连接数统计(状态维度)复制netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a i...

为什么你的命令行程序没有输出

问题描述为什么你的程序没有输出?请看下面的命令复制tail -f logfile | grep 'foo bar' | awk...执行上述命令,你会发现你的程序没有产生任何输出,只有当logfile的内容足够多的时候才会产生输出,这是怎么回事呢?原因在非交互模式下,大多数的UNIX命令行程序都会缓冲它们的输出,这就意味着程序会缓冲一定数量(通常是4kilobytes...

MySQL 间隙锁引发的血案

现象表结构索引情况执行更新的 SQL复制UPDATE material_checkup_operation_itemsSET id = id,enterprise_id = 1866,biz_code = '86',entity_id = 'd0fd94e7-df33-4e04-b020-24bedcf10a57'WHERE ...

中小团队日志集中式处理方案-ELK架构

环境安装为了方便演示,我使用 vagrant 创建了两个 centos/7 的虚拟机进行演示。虚拟机 10.100.100.10 安装整个ELK服务,这里只安装单机版,集群扩展以后再做介绍虚拟机 10.100.100.11 作为演示用的应用服务器,安装Filebeat进行日志收集应用服务这一步也可以忽略,在自己的电脑上安装 filebeat 收集本地日志发送到ELK服务器也可以。...

MongoDB 新手入门 - 索引

索引可以有效的提高 MongoDB 的查询效率,如果没有索引,在匹配指定条件的文档时,MongoDB 必须执行全集合的扫描,对每一个文档进行判断是否满足查询条件。如果有合适的索引,那 MongoDB 就可以利用该索引来减少需要遍历的文档数量。简介索引是一种特殊的数据结构,它存储了集合数据集的一部分,用于快速的对集合进行遍历。索引中存储了指定字段或者一组字段的值,并且按照字段的值有序存储。索引记...

MongoDB 新手入门 - CRUD

本文是 MongoDB 新手入门 系列的第一篇,在本文中,我们将会讲解 MongoDB 基本的增删改查操作,在学习完本文后,读者将会掌握对 MongoDB 的集合文档进行基本的新增,修改,删除以及基于多种条件的查询操作。本文将会持续修正和更新,最新内容请参考我的 GITHUB 上的 程序猿成长计划 项目,欢迎 Star,更多精彩内容请 follow me。插入文档在 MongoDB shel...

MongoDB 新手入门 - Aggregation

本文是 MongoDB 新手入门 系列的第二篇,在本文中,我们将会讲解 MongoDB 的聚合框架,在看完本文后,读者可以掌握使用 MongoDB 进行常用的数据统计分析方法。本文将会持续修正和更新,最新内容请参考我的 GITHUB 上的 程序猿成长计划 项目,欢迎 Star,更多精彩内容请 follow me。简介聚合管道(Aggregation Pipelines)中包含一个或多个用于...

MySQL & MariaDB Online DDL 参考指南

概述在早期的 MySQL 版本中,DDL 操作(如创建索引等)通常都需要对数据表加锁,操作过程中 DML 操作都会被阻塞,影响正常业务。MySQL 5.6 和 MariaDB 10.0 开始支持 Online DDL,可以在执行 DDL 操作的同时,不影响 DML 的正常执行,线上直接执行 DDL 操作对用户基本无感知(部分操作对性能有影响)。不同版本的数据库对各种 DDL 语句的支持存在...

根据 MTBF & MTTR 评估系统可用性

MTBF (Mean Time Between Failure) 是平均无故障工作时间,单位是小时,表示相邻两次故障的时间间隔平均值,它是一种对系统可靠性的度量指标,这个值越大,说明系统越可靠。比如 数据库两次发生故障之间的时间间隔。MTTR (Mean Time To Repair) 是指平均修复时间,是指从故障发生到修复的时间间隔平均值,它是对系统维护性的一种度量指标,这个值越小,说明系统维...

MySQL 进阶:INFORMATION_SCHEMA

在使用命令行连接 MySQL 的时候,我们在执行 SHOW DATABASES 命令时,会发现除了自己拥有权限的数据库之外,还有另外一个名为 INFORMATION_SCHEMA 的表,这个表示用来做什么用的呢?在 MySQL 中, INFORMATION_SCHEMA 是用来访问数据库的元数据(比如数据库,表的名称,列的数据类型或者访问权限等)的,在每个 MySQL 的实例中,INFORMA...

MongoDB 部署 Replica Set

架构三台Server:A 192.168.100.10 Primary/SecondaryB 192.168.100.11 Primary/SecondaryC 192.168.100.12 Arbiter安装MongoDB创建复制集访问控制密钥复制openssl rand -base64 756 > mongodb.keychmod 400 mongodb.key以...

Linux 服务器下的 HTTP 抓包分析

说到抓包分析,最简单的办法莫过于在客户端直接安装一个Wireshark或者Fiddler了,但是有时候由于客户端开发人员(可能是第三方)知识欠缺或者其它一些原因,无法顺利的在客户端进行抓包分析,这种情况下怎么办呢?本文中,我们将给大家介绍在服务端进行抓包分析的方法,使用tcpdump抓包,配合Wireshark对HTTP请求进行分析,非常简单有效。本文将会持续修正和更新,最新内容请参考我的 G...

Gor 网络抓包和流量镜像

项目地址 :https://github.com/buger/goreplay流量抓包下面的命令实现了监听 88 端口的HTTP请求,过滤出请求路径为 /app/noticex 的请求,输出到标准输出复制/usr/local/bin/gor --input-raw :88 --output-stdout --http-allow-url /app/noticex流量镜像以下命令实现将所有...

TCPDUMP 简明教程

本文翻译自 A tcpdump Tutorial and Primer with Examples 一文,在使用Linux系统进行网络抓包分析的时候,一直没有找到比较简便的非图形界面的方法,在Linux系统下tcpdump命令确实是一柄利器,但是一直苦于学习成本较高,迟迟没有下手。看了 A tcpdump Tutorial and Primer with Examples 这篇文章之后,发现其实使...

RabbitMQ发布订阅实战-实现延时重试队列

RabbitMQ是一款使用Erlang开发的开源消息队列。本文假设读者对RabbitMQ是什么已经有了基本的了解,如果你还不知道它是什么以及可以用来做什么,建议先从官网的 RabbitMQ Tutorials 入门教程开始学习。本文将会讲解如何使用RabbitMQ实现延时重试和失败消息队列,实现可靠的消息消费,消费失败后,自动延时将消息重新投递,当达到一定的重试次数后,将消息投递到失败消息队列,...

理解 Linux 中的 free 命令

本文详细介绍了Linux系统中的free命令的使用方法以及关键参数的含义,这可能是你见过的关于free命令最详细的一篇文章了,绝对值得你收藏。free命令显示了Linux系统中物理内存、交换分区的使用统计信息。指标说明使用free命令查看内存信息,最重要的是理解当前系统的可用内存并不是直接看 free 字段就可以看出来的,应该参考的是复制可用内存 = free + buffers + c...

防范 CSRF 跨站请求伪造攻击

CSRF(Cross-site request forgery,中文为跨站请求伪造)是一种利用网站可信用户的权限去执行未授权的命令的一种恶意攻击。通过伪装可信用户的请求来利用信任该用户的网站,这种攻击方式虽然不是很流行,但是却难以防范,其危害也不比其他安全漏洞小。本文将简要介绍CSRF产生的原因以及利用方式,然后对如何避免这种攻击方式提供一些可供参考的方案,希望广大程序猿们都能够对这种攻击方式有...

GIT 开发流程新人学习指南

本文定位于为使用GIT标准分支开发流程的开发团队新人提供一份参考指南,其中的内容都是我们公司在研发团队初创时所遵循的一些开发流程标准,经过近一年的实践,虽说还有很多不足,但是随着团队经验的丰富和人员的扩张,我会适时地更新本文,分享我们在使用GIT开发流程中遇到的问题和解决方案。本文将会持续修正和更新,最新内容请参考我的 GITHUB 上的 程序猿成长计划 项目,欢迎 Star,更多精彩内容请 f...

MySQL 之 ROUND 函数四舍五入的陷阱

在MySQL中,ROUND函数用于对查询结果进行四舍五入,不过最近使用ROUND函数四舍五入时意外发现并没有预期的那样,本文将这一问题记录下来,以免大家跟我一样犯同样的错误。问题描述假如我们有如下一个数据表test,建表语句如下复制CREATE TABLE test (id int(11) NOT NULL AUTO_INCREMENT,field1 bigint(10)...

三十分钟学会 SED

本文承接之前写的 三十分钟学会AWK 一文,在学习完AWK之后,趁热打铁又学习了一下SED,不得不说这两个工具真的堪称文本处理神器,谁用谁知道!本文大部分内容依旧是翻译自Tutorialspoint上的入门教程,这次是 Sed Tutorial 一文,内容做了一些删减和补充,增加了一些原文中没有提及到的语法和命令的讲解,并且对原文所有的示例都一一进行了验证,希望本文对大家学习和了解Sed有所帮助。...

三十分钟学会 AWK

本文大部分内容翻译自我开始学习AWK时看到的一篇英文文章 AWK Tutorial ,觉得对AWK入门非常有帮助,所以对其进行了粗略的翻译,并对其中部分内容进行了删减或者补充,希望能为对AWK感兴趣的小伙伴提供一份快速入门的教程,帮助小伙伴们快速掌握AWK的基本使用方式,当然,我也是刚开始学习AWK,本文在翻译或者补充的过程中肯定会有很多疏漏或者错误,希望大家能够帮忙指正。本文将会持续修正和更新...