基础知识
文章平均质量分 69
基础知识
Bel_Ami@
这个作者很懒,什么都没留下…
展开
-
Mac安装wget流程及异常解决(亲测有效)
Mac安装wget原创 2024-03-28 15:49:10 · 3751 阅读 · 0 评论 -
linux环境下常用的网络命令ping、telnet、traceroute、tcpdump
设备一旦接入网络很难“独善其身”ping命令可以测试目的IP是否可达telnet命令可以测试指定的tcp端口是否可达nc命令可以测试指定udp端口是否可达tracerout命令可以探测网络路径tcpdump命令可以收集所有经过网卡的数据包。原创 2023-03-06 15:40:13 · 2351 阅读 · 0 评论 -
Golang 并发 - 信道
信道是协程之间通信的管道,从一端发送数据,另一端接收数据。原创 2022-10-13 15:23:10 · 261 阅读 · 1 评论 -
Golang 并发 - 协程
并行其实很好理解,就是同时执行的意思,在某一时间点能够执行多个任务。想达到并行效果,最简单的方式就是借助多线程或多进程,这样才可在同一时刻执行多个任务。单线程是永远无法达到并行状态的。原创 2022-10-13 15:10:22 · 630 阅读 · 0 评论 -
Golang 并发 - Select
select 的用法有点类似 switch 语句,但 select 不会有输入值而且只用于信道操作。select 用于从多个发送或接收信道操作中进行选择,语句会阻塞直到其中有信道可以操作,如果有多个信道可以操作,会随机选择其中一个 case 执行。原创 2022-10-13 10:57:07 · 472 阅读 · 0 评论 -
golang截取字符串并拼接
golang截取数据并拼接。原创 2022-08-08 17:22:45 · 91 阅读 · 0 评论 -
【Redis】 大key和大value的危害
所以基本上来说,大key和大value带来的内存不均和网络IO压力都是一致的,只是key相较于value还多一个做hashcode和比较的过程(链表中进行遍历比较key),会有更多的内存相关开销。而哈希表本质上是一个DictEntry(哈希表节点)的数组,并且使用链表法解决哈希冲突问题(关于哈希冲突的解决方法可以参考大佬的文章解决哈希冲突的常用方法分析)。虽说答的是挺好的,但是我又随之产生了另一个疑惑,如果redis的key较长时,会产生什么样的影响呢?查了很多文章,说的都不是特别清楚。......原创 2022-07-22 16:43:53 · 73 阅读 · 0 评论 -
Golang Context 实战与源码分析
如果父节点context的deadline早于本次创建子节点的deadline,那就没必要给子节点创建一个timerCtx了,因为根据deadline来看,父节点肯定会早与这个子节点取消,而父节点取消后,子节点也会跟着被取消,所以没必要给子节点创建timer,直接创建一个cancelCtx将子节点挂到父节点上就行了,效果是一样的,还剩下一个timer。注这里的数据传递主要指全局数据,如链路追踪里的traceId之类的数据,并不是普通的参数传递(也非常不推荐用来传递参数)。...原创 2022-07-22 15:34:18 · 100 阅读 · 0 评论 -
为什么redis不适合存储大数据量数据和存储敏感数据?
看法:查阅后总结:redis更多的是作为一个缓存来使用,既然是缓存来使用那必然存储的时候热点、经常变动的数据,是用来减少关系型数据库的压力,用来快速响应一些经常修改使用的数据的,如果大数量都存入,势必会增加redis的压力,会在持久化方面频繁尔大量的同步,非常占用资源。...原创 2022-06-29 16:23:28 · 115 阅读 · 0 评论 -
Golang协程循环打印字符
需求: 模拟两个协程,分别循环打印字母A和B。分析: 要实现两个协程之间的交替协作,就必须用到channel通信机制,而channel正好是同步阻塞的。半开方式结果发现打印出了的效果。也就是我们控制了开始的次序,但没有控制结束的次序,发生了并发不安全的情况。其实半开模式也可以用于某些场景下,如: 两个,在条件控制下,交替打印奇偶数:封闭方式我们在循环体首尾都使用了阻塞独占模式,两个交替释放控制权,达到了安全的协程交互控制。再看看下面的Demo,同样的原理:缓冲模式...原创 2022-06-29 16:03:55 · 59 阅读 · 0 评论 -
Redis持久化
Redis的持久化有两种方式:RDB和AOF,redis默认采用的是RDB的方式。RDB在默认配置中,Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中。可以配置持久化策略:,让redis在“秒内至少有个改动”才会触发一次rdb持久化操作。例如redis的默认策略有:还可以手动执行命令生成RDB快照,进入redis客户端执行命令或可以生成文件,每次命令执行都会将所有redis内存快照到一个新的文件里,并覆盖原有快照文件。bgsave写时复制的(COW)机制借助了系统的写时.原创 2022-06-28 10:17:28 · 23 阅读 · 0 评论 -
Redis的持久化方式
Redis支持两种方式的持久化,一种是RDB方式、另一种是AOF(append-only-file)方式,两种持久化方式可以单独使用其中一种,也可以将这两种方式结合使用。RDB:根据指定的规则“定时”将内存中的数据存储在硬盘上,生成的快照AOF:每次执行命令后将命令本身记录下来,每次执行命令都会将命令写入到aof文件中RDB模式的持久化方式是通过快照(snapshotting)完成的,它是Redis默认的持久化方式,Redis允许用户自定义快照条件,当符合快照条件时,Redis会自动执行快照操作。快照的条件原创 2022-06-27 16:25:35 · 28 阅读 · 0 评论 -
什么是 MySQL 的“回表”?
1.索引结构要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构。这个其实很多小伙伴可能也都听说过,B+Tree 嘛!B+Tree 是什么?那你得先明白什么是 B-Tree,来看如下一张图:前面是 B-Tree,后面是 B+Tree,两者的区别在于:B-Tree 中,所有节点都会带有指向具体记录的指针;B+Tree 中只有叶子结点会带有指向具体记录的指针。B-Tree 中不同的叶子之间没有连在一起;B+Tree 中所有的叶子结点通过指针连接在一起。B-Tree 中可能在非叶子结原创 2022-05-14 18:25:20 · 89 阅读 · 0 评论 -
TCP握手/挥手协议过程(三次握手四次挥手)
TCP连接建立在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。服务器必须准备好接受外来的连接。这通过调用socket、 bind和listen函数来完成,称为被动打开(passive open)。第一次握手:客户通过调用connect进行主动打开(active open)。这引起客户TCP发送一个SYN(表示同步)分节(SYN=J),它告诉服务器客户将在连接中发送到数据的初始序列号。并进入SYN_SEND状态,等待服务器的确认。第二次握手:服务器必须确认客户的SYN,同原创 2022-03-08 18:33:10 · 164 阅读 · 0 评论 -
golang 面试题(从基础到高级)
Golang面试问题汇总:1.Golang中除了加Mutex锁以外还有哪些方式安全读写共享变量?Golang中Goroutine 可以通过 Channel 进行安全读写共享变量。2.无缓冲 Chan 的发送和接收是否同步?ch := make(chan int) 无缓冲的channel由于没有缓冲发送和接收需要同步。ch := make(chan int, 2) 有缓冲channel不要求发送和接收操作同步。channel无缓冲时,发送阻塞直到数据被接收原创 2022-03-08 15:51:16 · 18880 阅读 · 0 评论 -
go 进程 线程 协程的区别
进程、线程、协程对比通俗描述有一个老板想要开个工厂进行生产某件商品(例如剪子)他需要花一些财力物力制作一条生产线,这个生产线上有很多的器件以及材料这些所有的 为了能够生产剪子而准备的资源称之为:进程只有生产线是不能够进行生产的,所以老板的找个工人来进行生产,这个工人能够利用这些材料最终一步步的将剪子做出来,这个来做事情的工人称之为:线程这个老板为了提高生产率,想到3种办法:方式 1在这条生产线上多招些工人,一起来做剪子,这样效率是成倍増长,即单进程 多线程方式 2老板发现这条原创 2022-03-08 10:34:24 · 959 阅读 · 0 评论 -
golang 互斥锁和读写锁(Mutex和RWMutex)
虽然Golang提供channel来保证协程的通信,但是某些场景用锁来显示保证协程的安全更清晰易懂。Golang中主要有两种锁,互斥锁Mutex和读写锁RWMutex,下面分别介绍一下使用方法,以及出现死锁的常见场景。一、Mutex(互斥锁)Mutex是互斥锁的意思,也叫排他锁,同一时刻一段代码只能被一个线程运行,使用只需要关注方法Lock(加锁)和Unlock(解锁)即可。在Lock()和Unlock()之间的代码段称为资源的临界区(critical section),是线程安全的,任何一个时.原创 2022-03-07 11:45:03 · 1727 阅读 · 0 评论 -
golang 内置函数new()和make()的区别
Go语言中的内建函数new和make是两个用于内存分配的原语(allocation primitives),其功能相似,却有本质区别。new和make的定义// The new built-in function allocates memory. The first argument is a type,// not a value, and the value returned is a pointer to a newly// allocated zero value of that type原创 2022-03-03 09:55:04 · 153 阅读 · 0 评论 -
Go基础知识
go的编译为什么比c快https://blog.csdn.net/qq_34417408/article/details/109716015gc的频率slice容量扩容ctx withvaluego内存逃逸mysql gbk 拼音编码b+树为什么方便存储mysql为什么不用外键k8s service做什么deployment limit request排序算法 时间复杂度对比容器间的隔离 namespacedockerfile cmd agentpoint镜像压缩GMP 和c原创 2022-02-25 18:31:27 · 458 阅读 · 0 评论 -
基于Redis实现分布式锁
什么是分布式锁分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。我们先来看下,一把靠谱的分布式锁应该有哪些特征:「互斥性」: 任意时刻,只有一个客户端能持有锁。「锁超时释放」:持有锁超时,可以释放,防止不必要的资源浪费,也可以防止死锁。「可重入性」:一个线程如果获取了锁之后,可以再次对其请求加锁。「高性能和高可用」:加锁和解锁需要开销尽可原创 2022-02-25 16:32:49 · 260 阅读 · 0 评论 -
Go sync.WaitGroup的用法
介绍经常会看到以下的代码:package mainimport ( "fmt" "time")func main(){ for i := 0; i < 100 ; i++{ go fmt.Println(i) } time.Sleep(time.Second)}主线程为了等待goroutine都运行完毕,不得不在程序的末尾使用time.Sleep() 来睡眠一段时间,等待其他线程充分运行。对于简单的代码,100个for循环可以原创 2022-02-25 09:20:29 · 144 阅读 · 0 评论 -
Go面试题:channel的无缓存和有缓存区别
1.channel的无缓存:无缓存channel的创建//括号中要定义channel中数据的类型ch := make(chan string)无缓存表示发送者必须等待数据被接收者接收才会继续发送到channel中。func main() { var channel = make(chan int, 0) go func() { for i := 0; i <= 2; i++ { channel <- i fmt.Pri原创 2022-02-24 19:00:53 · 979 阅读 · 0 评论 -
Go语言面试题:交替打印数字和字母
问题描述使⽤两个goroutine交替打印序列,⼀个goroutine打印数字, 另外⼀个goroutine打印字⺟, 最终效果如下:12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728解题思路就像我们在操作系统中学到的用信号量来控制进程协作一样,我们可以用两个无缓冲的channel来控制goroutine的协作。一个叫做number的channel用来通知打印数字的goroutine。另一个叫做l原创 2022-02-24 18:38:15 · 1480 阅读 · 0 评论 -
HTTP1.0和HTTP1.1和HTTP2.0的区别
HTTP1.0和HTTP1.1和HTTP2.0的区别1 HTTP1.0和HTTP1.1的区别1.1 长连接(Persistent Connection) HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启长连接keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。HTTP1.0需要原创 2021-11-29 10:49:42 · 541 阅读 · 0 评论 -
varchar与char有什么区别?
区别一,定长和变长char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。因为其长度固定,char的存取速度还是要比varchar要快得多,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以会占据多余的空间,可谓是以空间换取时间效率。varchar则刚好相反,以时间换空间。区别之二,存储的容量不同对 char 来说,最多能存放的字符个数 25原创 2021-02-19 18:01:52 · 237 阅读 · 0 评论 -
redis与memcached的区别
1)、数据支持类型Memcache对数据类型支持相对简单。Redis不仅仅支持简单的k/v类型的数据,同时还提供 string,list,set,sorted set,hash等数据结构的存储。2)、可靠性(持久化)Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。3)、使用底层模型不同它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。Redis直接自己构建了VM原创 2021-02-19 17:58:56 · 156 阅读 · 0 评论 -
大数据量的分页查询优化方案
背景随着业务发展越来越快,原来的数据从几万突破到几百万,分页的查询策略是否需要调整一下?数据准备1、表名:order_history2、描述:某个业务的订单历史表3、主要字段:unsigned int id,tinyint(4) int type4、字段情况:该表一共37个字段,不包含text等大型数据,最大为varchar(500),id字段为索引,且为递增。5、数据量:57092946、MySQL版本:5.7.16select count(*) from orders_histor原创 2021-02-19 16:54:33 · 348 阅读 · 0 评论 -
LAMP和LNMP架构(介绍)
目录工作原理架构介绍LAMP架构介绍LNMP架构介绍LAMP LNMP差别工作原理LAMP浏览器向服务器发送http请求,服务器 (Apache) 接受请求,由于php作为Apache的组件模块也会一起启动,它们具有相同的生命周期。Apache会将一些静态资源保存,然后调用php去处理模块进行php脚本的处理。脚本处理完后,Apache将处理完的信息通过http response的方式发送给浏览器,浏览器解析,渲染等一系列操作后呈现整个网页。LNMP浏览器发送http request请求到服原创 2021-02-02 15:28:00 · 2101 阅读 · 0 评论 -
SQL 注入详解
SQL 注入原理SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。SQL 注入分类1. 数字型注入当输入的参数为整型时,则有可能存在数字型注入漏洞。假设存在一条 URL 为:HTTP://www.aaa.com/test.php?id=1可以对后台的 SQL 语句猜测为:SELECT * FROM table WHERE i原创 2021-02-02 11:46:28 · 544 阅读 · 0 评论 -
HTTP 返回码详解
目录1xx(临时响应)2xx (成功)3xx (重定向)4xx(请求错误)5xx(服务器错误)1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。100(继续)请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。2xx (成功)表示成功处理了请求的状态代码。200(成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。201(已创建)请求成功并且服务器创建了原创 2020-07-22 12:01:11 · 1339 阅读 · 0 评论 -
乐观锁与悲观锁基础详解
何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Jav原创 2021-01-29 10:30:49 · 300 阅读 · 1 评论 -
Redis常见问题总结
1. 简单介绍一下 Redis 呗!简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,Redis 也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。2. 分布式缓存常见的技术选型方案有哪些?分布式缓存的话,使用的比原创 2021-01-29 14:17:24 · 662 阅读 · 0 评论