获得徽章 0
#青训营 x 字节后端训练营# Linux中:查看系统负载:uptime、top
、sysstat;系统平均负载
是指处于运行或不可打扰状态的进程的平均数。处于运行,表示运行态,占用CPU,或就绪态,等待CPU调度;不可打扰,表示阻塞,正在等待I/O。
linux系统中查看负载情况一般使用uptime命令(w命令和top命令)
展开
评论
#青训营 x 字节后端训练营# 一、进程
进程是操作系统资源分配的最小单元。一个进程拥有的资源有⾃⼰的堆、栈、虚存空间(页表)、文件描述符等信息。 从编程的角度来理解进程,可以把它看作是⼀个类或一个 PCB
(Process Control Block)进程控制块的结构体
线程是操作系统能够进行运算调度的最小单元。它被包含在进程中,是进程中实际运行的单位。一个进程中可以并发多个线程,每个线程执行不同的任务 。
虽然多进程也能实现并发编程,但是线程比进程更轻量
展开
评论
#青训营 x 字节后端训练营#
由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。
哈希冲突解决方法:开放地址法、链地址法(拉链法)、再哈希法、建立公共溢出区;
1、线性探查法,平方探查法,伪随机探查法、双散列函数探查法
2、将哈希值相同的元素构成一个同义词的单向链表,并将单向链表的头指针存放在哈希表的第 i 个单元中,查找、插入和删除主要在同义词链表中进行。
3、使用多个哈希函数,一个冲突后,使用其他hash,这种方法不易产生聚集,但是增加了计算时间
4、将哈希表分为公共表和溢出表,当溢出发生时,将所有溢出数据统一放到溢出区。
展开
评论
#青训营 x 字节后端训练营# 性能优化建议:
使用空结构体节省内存:struct{}实例不占据任何的内存空间
可作为各种场景下的占位符使用

尽量减少内存分配次数,尽量在初始化时分配内存空间
评论
#青训营 x 字节后端训练营# Git
tree .git :目录结构
--bare 创建一个裸仓库
--templae 可以通过创建模板来创建预先构建好的自定义git目录
--initial-branch 初始化的分支

用户名配置:
git config --global user.name “”
git config --global user.email “”

instead of配置:
git config --global url.git@ ..insteadOf ..

git命令别名配置:
git config --global alias.(命令别名) “命令”

remote:
查看:git remote -v
添加:git remote add

提交:
git commit :提交相关
git add 文件名
git status 查看当前文件夹提交信息

git log :日志

查看:
git cat-file -p 文件id

新建分支:
git cheakout -b 分支名字

res相当于一个指针,指向commit

git tag 创建标签:tag表示稳定版本
git tag -a "":附注标签,加了一些信息
如:git tag -a v0.0.3 -m “add 1”
-m选项表示附注的信息
设置过期时间:
git gc :垃圾回收,删掉不需要的东西

多人合作:
git clone:克隆到本地,可以指定分支,深度
fetch:将某些分支最新代码拉取到本地,不会执行merge(合并)操作,会修改refs/remote内的分支信息,如果需要和本地代码合并,需要手动操作
pull:拉取远端分支,并进行合并,操作相当于git fech+git merge ;也可通过git pull --rebase完成git fetch+git rebase操作,可能存在冲突,需要解决冲突

git push :同步至远端

常见问题:配置了git,但无法拉取代码:
1、ssh没配置
2、instead of没配置,还是使用http访问
fetch了,但本地记录未改变:
fetch是把代码拉取到远端分支,不会合并到本地
展开
评论
#青训营 x 字节后端训练营# 缓存穿透
是指查询一个缓存中和数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查库,最后返回空。当用户使用这条不存在的数据疯狂发起查询请求的时候,对数据库造成的压力就非常大,甚至可能直接挂掉
解决方法:第一种是缓存空对象,第二种是使用布隆过滤器。
缓存空对象:当数据库中查不到数据的时候,我缓存一个空对象,然后给这个空对象的缓存设置一个过期时间,这样下次再查询该数据的时候,就可以直接从缓存中拿到,从而达到了减小数据库压力的目的。但这种解决方式有两个缺点:(1)需要缓存层提供更多的内存空间来缓存这些空对象,当这种空对象很多的时候,就会浪费更多的内存;(2)会导致缓存层和存储层的数据不一致,即使在缓存空对象时给它设置了一个很短的过期时间,那也会导致这一段时间内的数据不一致问题。
二、布隆过滤器:
由m长度的位数组和n个hash函数组成的数据结构;
开始时,所有元素的值都为0;初始化时,对每个key进行hash运算,将相应位置的元素改为1。查询数据时,对数据进行hash位置,判断相应位置的key,都为1则代表数据在库中存在,则继续向下查询,为0则表示不存在,返回客户端0就行。
优缺点:可以解决缓存控制不足的问题
但是可能会误判,key都为1,数据可能在库中也不存在。还有删除key值比较困难,会影响其他key的判断
展开
评论
#青训营 x 字节后端训练营# 原子操作就是并发编程中“最小的且不可并行化”的操作。通常,如果多个并发体对同一个共享资源进行的操作是原子的话,那么同一时刻最多只能有一个并发体对该资源进行操作;从线程角度看,在当前线程修改共享资源期间,其它的线程是不能访问该资源的。原子操作对于多线程并发编程模型来说,不会发生有别于单线程的意外情况,共享资源的完整性可以得到保证。
atomic.AddUint64 函数调用保证了 total 的读取、更新和保存是一个原子操作,因此在多线程中访问也是安全的。

原子操作配合互斥锁可以实现非常高效的单件模式。互斥锁的代价比普通整数的原子读写高很多,在性能敏感的地方可以增加一个数字型的标志位,通过原子检测标志位状态降低互斥锁的使用次数来提高性能。
展开
评论
#青训营 x 字节后端训练营# 不要通过共享内存来通信,而应通过通信来共享内存;
可以使用 sync.WaitGroup 来等待一组事件:
其中 wg.Add(1) 用于增加等待事件的个数,必须确保在后台线程启动之前执行(如果放到后台线程之中执行则不能保证被正常执行到)。当后台线程完成打印工作之后,调用 wg.Done() 表示完成一个事件。main 函数的 wg.Wait() 是等待全部的事件完成。
展开
评论
#青训营 x 字节后端训练营# HTML4和HTML5的区别:HTML5是应用超文本标记语言(HTML)的第五次修改,HTML4是应用超文本标记语言(HTML)的第四次修改;
1、取消了一些过时的 HTML4的标签:
2、添加了一些新的元素;比如:更加智能的表单标签:date, email, url 等;更加合理的标签:section, video, progress, nav, meter, time, aside, canvas等。
3、新的全局属性:contentEditable designMode hidden spellcheck tabindex
4、标记方法: 文件类型声明(<!DOCTYPE>)仅有一型:<!DOCTYPE HTML>。
指定字符编码 <meta charset="UTF-8">
5、新的JS API
6、保证了兼容性
展开
评论
#青训营 x 字节后端训练营# 一般的Map会包含两个主要结构:数组:数组里的值指向一个链表,链表:目的解决hash冲突的问题,并存放键值
评论
#青训营 x 字节后端训练营# 啊啊啊啊,接下来几个周都是专业课,还要设计两个大作业,好烦啊,都没学习时间了;开学的时候是这样,才休息了两个星期,又继续这种日子了
评论
#青训营 x 字节后端训练营# day03,今天是母亲节哇,差点忘了,还以为星期一才是;呜呜呜呜,才想起来论文还没写,明天就要交了
评论
#青训营 x 字节后端训练营# 今天把socks5代理服务学了,虽然只有几十分钟,但是弄了一天,好多标准库都不知道啥意思,要一个一个去查用法
评论
下一页
个人成就
文章被阅读 413
掘力值 71
收藏集
0
关注标签
3
加入于