自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 M2芯片Mac电脑使用docker搭建lnmp环境

m2芯片电脑docker安装lnmp环境

2023-04-12 09:34:53 1599

原创 go merge --ff --no-ff --ff-only三种模式的区别

git merge应该是开发者最常用的 git 指令之一,默认情况下你直接使用git merge命令,没有附加任何选项命令的话,那么应该是交给 git 来判断使用哪种 merge 模式,实际上 git 默认执行的指令是指令(默认值)对于专业的开发者来说,你可能无须每次合并都指定合并模式(如果需要的话还是要指定的),但是你可能需要知道 git 在背后为你默认做了什么事情,这样才能保证你的代码万无一失。

2023-03-20 16:23:17 514

转载 ChatGPT为啥这么强:万字长文详解 by WolframAlpha之父

ChatGPT 能够自动生成类似于人类撰写的文本,这一点非常引人注目,也是出乎意料的。那么,它是如何实现的?为什么它能够如此出色地生成有意义的文本呢?

2023-02-23 16:54:41 498 1

原创 git hook搭建简易版本控制系统

搭建一个简易的版本控制系统

2023-02-21 16:40:59 189

原创 swoole入门

Worker进程 其实就是处理各种业务工作的进程,Manager将数据包转交给Worker进程,然后Worker进程进行具体的处理,并根据实际情况将结果反馈给客户端。Manager进程还负责监控Worker进程,如果Worker进程因为某些意外挂了,Manager进程会重新拉起新的Worker进程。所以,一个最基础的Swoole Server,至少需要有3个进程,分别是Master进程、Manager进程和Worker进程。Swoole支持AsyncTask,消息队列,毫秒定时器,异步文件读写等功能。

2023-02-14 15:49:25 824

原创 MySQL的14个小技巧

我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。

2023-01-29 11:03:46 459

转载 如何让shell支持自动提示

shell命令添加自动提示功能

2022-11-04 13:28:05 838

原创 软件开发生命周期

软件开发岗工作手册

2022-10-24 11:24:42 1269

转载 CentOS使用yum安装jdk

CentOS使用yum安装jdkCentOS安装tomcatCentOS安装NginxCentOS安装MySql

2022-09-23 17:28:48 1074

转载 CentOS安装Tomcat

CentOS使用yum安装jdkCentOS安装tomcatCentOS安装NginxCentOS安装MySql

2022-09-23 17:24:03 294

原创 CentOS安装Nginx

CentOS使用yum安装jdkCentOS安装tomcatCentOS安装NginxCentOS安装MySql

2022-09-23 17:18:41 231

原创 mysql的DISTINCT

实际上返回的是 id与type同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得id与tyoe都相同的才被排除了,与我们期望的结果不一样 // 但这里是我希望的。返回的结果是 只有id不同的所有结果和上面的4类型可以互补使用,就是看你需要什么样的数据了。虽然这样的返回结果多了一列无用的count数据(或许你就需要这个我说的无用数据)mysql的DISTINCT的关键字有很多你想不到的用处。2,在需要返回记录不同的id的具体值的时候可以用。返回talbebname表中不同的id的具体的值。..

2022-08-26 09:30:38 280

转载 高效查看Linux日志文件

日常分析问题时,会频繁地查看分析日志,但如果蛮力去查看日志,耗时费力还不一定有效果,因此我总结了在Linux常用的一些日志查看技巧,提升日志阅读效率

2022-07-14 10:43:58 1779

原创 flock命令实现命令串行化

除了多种语言提供 flock 系统调用或函数,linux shell 中也提供了 flock 命令。flock 命令最大的用途就是实现对 crontab 任务的串行化。在 crontab 任务中,有可能出现某个任务的执行时间超过了 crontab 中为此任务设定的执行周期,这就导致了当前的任务实例还未执行完成,crontab 又启动了同一任务的另外一个实例,这通常不是用户所期望的行为。极端情况下,如果某个任务执行异常一直未返回,crontab 不会处理这种情形,会继续启动新的实例,而新的实例很可能又会异

2022-05-09 14:31:59 387

转载 SQL调优及定位慢查询

一.开启慢查询日志MySQL 中与慢 SQL 有关的几个重要系统变量如下:执行如下语句看是否启用了慢查询日志,ON 为启用,OFF 为未启用,默认为 OFF。SHOW VARIABLES LIKE '%slow_query_log%';可以看到,我这里是已经开启了的。如果你的没有开启,可以使用如下两种方式来开启慢查询。2.1 修改配置文件修改配置文件 vim /etc/my.cnf,在 [mysqld] 段落在加入如下配置:[mysqld] slow_quer...

2022-04-22 15:56:36 246

原创 Charles手机抓包

Charles 很早之前用过,后来一直不用都忘记怎么使用了。近期公司叫我去测试一个小程序的安全性,第一时间想到了用 Charles 抓包分析,这里记录一下过程方便后续查阅安装这里有一个 Charles 4.2 的版本 下载后将 .jar 文件拷贝到 Contents/Java 里面。简介Charles 是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问.

2021-11-26 16:56:00 2765

原创 linux基础知识

知识点1、在Linux系统中,以文件方式访问设备。2、Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统3、Linux文件系统中每个文件用i节点来标识4、全部磁盘块由四个部分组成,分别为:引导块、专用块、i节点块、数据存储块5、前台起动的进程使用:ctrl+c禁止6、安装Linux系统对硬盘分区时,必须有两种分区类型:文件系统 和 交换分区。7、网络管理的重要任务是监控 和 控制8、内核分为文件管理系统、I/O管理系统 、内存管理系统 和进程管理系统等四个子系统。

2021-09-28 08:58:52 986 1

原创 go语言将要支持泛型啦

早晨浏览公众号,说预计GO将在1.18版本支持泛型,虽然编程多年,但对什么是泛型没什么认识,今天就整理一下什么是泛型,希望对大家也有帮助。在计算机程序设计领域,为了避免因数据类型的不同,而被迫重复编写大量相同业务逻辑的代码,人们发展的泛型及泛型编程技术。那么,什么是泛型呢?本节就带领读者深度剖析一下这个问题。所以泛型,实质上就是不使用具体数据类型(例如 int、double、float 等),而是使用一种通用类型来进行程序设计的方法,该方法可以大规模的减少程序代码的编写量,让程序员可以集中精力用于业务

2021-08-26 09:04:17 297

转载 秒杀系统要如何设计

前言高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(比如:10个)的商品(比如:手机),以极低的价格(比如:0.1元),让大量用户参与活动,但只有极少数用户能够购买成功。这类活动商家绝大部分是不赚钱的,说白了是找个噱头宣传自己。虽说秒杀只是一个促销活动,但对技术要求不低。下面给大家总结一下设计秒杀系统需要注意的9个细节。1 瞬时高并发一般在秒杀时间点(比如:12点.

2021-08-02 17:28:30 270

原创 redis应用系列一:分布式锁正确实现姿势

实现分布式锁常见有三种实现方式:基于数据库基于缓存(redis)分布式锁,基于 Zookeeper 实现分布式锁以下是他们在可靠性、性能、复杂性三个维度的对比评判维度 比较评判维度比较可靠性Zookeeper > 缓存 > 数据库性能缓存 > Zookeeper >= 数据库复杂性Zookeeper >= 缓存 > 数据库由于 redis 高性能,在许多密集型的业务场景中是运用最多,因此以下介绍基于 redis

2021-07-30 16:28:22 295

原创 使用laravel解决库存超出的几个方案

数据库字段1. 错误的示范 /** * 错误示范 * Create by Peter Yang * 2021-06-08 10:57:59 * @return string */ function test1() { //商品id $id = request()->input('id'); $product = Product::where('id', $id)->f

2021-07-30 15:47:28 491 1

原创 go接口理解

一:接口的定义interface类型可以定义一组方法,但这些方法不需要实现。且interface不能包含任何字段,某个自定义类型(如结构体),需要用到时再具体实现该方法。type 接口名 interface{ method1(参数列表) 返回值列表 method2(参数列表) 返回值列表}func(t 自定义类型)method1(参数列表,返回值列表){ //方法实现}func(t 自定义类型)method2(参数列表,返回值列表){ //方法实现}二:简单使用举例ty

2021-07-30 11:15:56 102

原创 使用PHP的http请求客户端guzzle如何添加请求头

一.目录遇到的问题guzzle基础知识添加请求头的两种方式二.遇到的问题我们的一个yii的项目,需要调用一个第三方的接口,这个接口需要请求头需要携带token信息,因此,在发送http请求时,需要在请求头上对应的token。如下图:我们的项目请求第三方,使用的是guzzle组件,做了记录,以防以后查询使用三.guzzle基础知识Guzzle是一个使得利用PHP实现发送HTTP 请求,方便和web service集成的PHP 客户端模拟组件。Guzzle介绍简单的接口构建query

2021-07-27 15:59:10 6653

原创 config,make,make install

.config/ .configure (查看该目录下是否有这个文件,如果有makefile,可直接make) 配置config是一个shell脚本,根据平台的特性生成Makefile文件,为下一步的编译做准备,可以通过在 configure 后加上参数来对安装进行控制,比如:./configure --prefix=/usr (将该软件安装在 /usr 下面)可以通过 ./configure --help 查看详细的说明帮助如果有需要,会进行 make depend(一种mak

2021-07-09 15:23:42 360

转载 mysql MVCC+间隙锁解决幻读理解

mysql的隔离级别?读未提交 -》 读提交 -》 可重复读 -》 串行化InnoDB默认级别为可重复读,可重复读会产生问题 就是幻读。什么是幻读?不可重复读侧重于update这种操作,同一条数据前后读起来不一样的情况,幻读侧重于insert delete这种操作,前后两次select 数据的数量会发生变化举个例子:事务A 第一步 select * 第二步 update 所有字段 第三步 再次select *事务B 执行了insert 一条语句幻读第一

2021-06-09 23:07:31 763

原创 服务降级与服务熔断区别

服务降级:系统有限的资源的合理协调概念:服务降级一般是指在服务器压力剧增的时候,根据实际业务使用情况以及流量,对一些服务和页面有策略的不处理或者用一种简单的方式进行处理,从而释放服务器资源的资源以保证核心业务的正常高效运行。原因:服务器的资源是有限的,而请求是无限的。在用户使用即并发高峰期,会影响整体服务的性能,严重的话会导致宕机,以至于某些重要服务不可用。故高峰期为了保证核心功能服务的可用性,就需要对某些服务降级处理。可以理解为舍小保大应用场景:多用于微服务架构中,一般当整个微服务架构整体的负

2021-06-09 22:52:44 6917

转载 解决Hash冲突四种方法

Hash算法只是一个定义,并没有规定具体的实现简述把任意长度的输入,通过Hash算法变换成固定长度的输出,这个输出就是Hash值。哈希值的空间远小于输入的空间,所以可能会发生“哈希碰撞”,即两个不同的输入,产生了同一个输出。Hash算法常用于消息摘要的场景 MD5、SHA都属于Hash算法的实现。简单使用凡是涉及到分布式的系统,就会有负载均衡和数据分布的问题。为了让连接(或者数据)能够分布得更均匀,很多时候会使用到Hash算法Hash取模 (hash(request) % n)假设我们现在有3

2021-06-09 22:27:13 2346

原创 CLI和CGI的区别

CGI :“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。以CGI方式运行时,web server将用户请求以消息的方式转交给PHP独立进程,PHP与web服务之间无从属关系。纯粹调用–返回结果的形式通讯。而模块方式,则是将PHP做为web-server的子进程控制,两者之间有从属关系。最明显的例子就是在CGI模式下,如果修改了PHP.INI的配置文件,不用重启web服务便可生效,而模块模式下则需

2021-06-09 22:05:52 305

原创 new和make的区别

new这是一个用来分配内存的内建函数,但是与C++不一样的是,它并不初始化内存,只是将其置零。也就是说,new(T)会为T类型的新项目,分配被置零的存储,并且返回它的地址,一个类型为*T的值。在Go的术语中,其返回一个指向新分配的类型为T的指针,这个指针指向的内容的值为零(zero value)。注意并不是指针为零。Go语言中的对象没有C++中的构造函数,如果用C来描述,Go中的new大概相当于:T *t = (T*)malloc(sizeof(T))memset(t, 0, sizeof(T))

2021-06-08 15:37:52 229

原创 两个nil比较结果是什么

背景哈喽,大家好,我是asong。前几天在一个交流群里看到了一道非常有意思的面试题,今天把它分享出来,我们先来看一下这个道题:fmt.Println(nil== nil)两个nil的比较结果是什么?true、false、还是无法编译?大家先思考着,文中揭晓答案。Go中nil的定义在Go官方文档中,对nil的定义如下:// nil is a predeclared identifier representing the zero value for a// pointer, channel,

2021-06-07 08:30:24 368 1

转载 go 打印 %v %+v %#v 的区别

总结%v 只输出所有的值%+v 先输出字段类型,再输出该字段的值%#v 先输出结构体名字值,再输出结构体(字段类型+字段的值)package mainimport “fmt”type student struct {id int32name string}func main() {a := &student{id: 1, name: “xiaoming”}fmt.Printf("a=%v \n", a)fmt.Printf("a=%+v \n",

2021-06-06 16:37:14 808

原创 golang中range在slice和map遍历中的注意事项

package main import ( "fmt") func main() { slice := []int{0, 1, 2, 3} myMap := make(map[int]*int) for _,v :=range slice{ if v==1 { v=100 } } for k,v :=range slice{ fmt.Println("k:",k,"v:",v) }}预想的结果应该是:k: 0 v: 0k: 1 v: 100k: 2

2021-06-06 16:35:46 728 2

原创 go struct{} 空结构体的特点和作用

空结构体的特点和作用参考代码package main import ( "fmt" "unsafe") func main() { empStruct()} //空结构体的实例和作用func empStruct(){ //空结构体的特点:1、不占用内存;2、地址不变 var s struct{} var s1 struct{} fmt.Println("空结构体占用内存的情况:",unsafe.Sizeof(s))

2021-06-06 15:59:04 136

转载 Golang结构体中Tag的使用

Golang中可以为结构体的字段添加tag,这类似于Java中为类的属性添加的注解,Golang本身的encoding/json包解析json使用了tag,一些开源的ORM框架,也广泛使用了tag,那么,我们如何通过代码自己实现tag的解析,从而简化结构体字段的使用方式呢?下面看一个例子。假设有一个Person结构体定义如下type Person struct { Name string `label:"Person Name: " uppercase:"true"` Age

2021-06-06 15:18:56 917

转载 MySQL到底是如何解决幻读问题

要知道什么是幻读,首先要知道以下四点:一、幻读定义幻读是指在同一个事务中,存在前后两次查询同一个范围的数据,但是第二次查询却看到了第一次查询没看到的行,一般情况下特指事务执行中新增的其他行。二、幻读示例测试表数据:mysql> select * from LOL;+----+--------------+--------------+-------+| id | hero_title | hero_name | price |+----+--------------+----

2021-06-04 09:43:33 240

转载 深入理解PHP数组底层实现

PHP数组是一个神奇而强大的数据结构,数组既可以是连续的数组,也可以是存储K-V映射的map。而在PHP7中,相比于PHP5,对数组进行了很大的修改。数组的语义数组的概念PHP5数组的实现PHP7数组的实现基本结构初始化packed array 和 hash array的区别插入、更新、查找、删除哈希冲突的解决扩容和rehash操作数组的递归保护一、数组的语义本质上,PHP数组是一个有序的字典,它需要同时满足一下两个语义。语义一:PHP数组是一个字典,存储着键—值(key—v

2021-06-02 09:42:34 704 1

原创 海量数据排序

今天要给100亿个数字排序,100亿个 int 型数字放在文件里面大概有 37.2GB,非常大,内存一次装不下了。那么肯定是要拆分成小的文件一个一个来处理,最终在合并成一个排好序的大文件。实现思路1.把这个37GB的大文件,用哈希分成1000个小文件,每个小文件平均38MB左右(理想情况),把100亿个数字对1000取模,模出来的结果在0到999之间,每个结果对应一个文件,所以我这里取的哈希函数是 h = x % 1000,哈希函数取得"好",能使冲突减小,结果分布均匀。2.拆分完了之后,得到一些几十

2021-06-01 14:54:32 170

原创 PHP底层数组如何实现元素的有序性

PHP 数组的基本实现散列表主要由两部分组成:存储元素数组、散列函数。散列表的基本实现前面已经探讨过,PHP 中的数组除了具备散列表的基本特点之外,还有一个特别的地方,那就是它是有序的(与Java中的HashMap的无序有所不同):数组中各元素的顺序和插入顺序一致。这个是怎么实现的呢?为了实现 PHP 数组的有序性,PHP 底层的散列表在散列函数与元素数组之间加了一层映射表,这个映射表也是一个数组,大小和存储元素的数组相同,存储元素的类型为整型,用于保存元素在实际存储的有序数组中的下标 —— 元素按照先

2021-05-31 15:36:03 407 3

转载 领域驱动设计(DDD)-基础思想

一、序言领域驱动设计是一种解决业务复杂性的设计思想,不是一种标准规则的解决方法。在领域驱动设计理念上,各路大侠的观点也是各有不同,能力有限、欢迎留言讨论。二、领域驱动设计DDD是什么wiki释义:领域驱动设计(英语:Domain-driven design,缩写 DDD)是一种通过将实现连接到持续进化的模型[1]来满足复杂需求的软件开发方法。领域驱动设计的前提是:把项目的主要重点放在核心领域(core domain)和域逻辑把复杂的设计放在有界域(bounded context)的模型上发

2021-05-27 16:54:26 415

转载 聚合(根)、实体、值对象精炼思考总结

1. 聚合根、实体、值对象的区别?从标识的角度:聚合根具有全局的唯一标识,而实体只有在聚合内部有唯一的本地标识,值对象没有唯一标识,不存在这个值对象或那个值对象的说法;从是否只读的角度:聚合根除了唯一标识外,其他所有状态信息都理论上可变;实体是可变的;值对象是只读的;从生命周期的角度:聚合根有独立的生命周期,实体的生命周期从属于其所属的聚合,实体完全由其所属的聚合根负责管理维护;值对象无生命周期可言,因为只是一个值;2. 聚合根、实体、值对象对象之间如何建立关联?聚合根到

2021-05-27 15:54:53 440

空空如也

空空如也

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

TA关注的人

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