自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 用Wireshark抓包QQ的到对方的IP地址

在电脑上打开QQ,选择你想要得到IP地址的好友,拨通QQ电话(这里不管接不接通你都可以在wireshark中抓到他(她)的IP地址)在字符串左边的框里输入020048(因为020048就是QQ UDP72字节的报文头)通过字段判断所需对象的IP地址 :123.138.132.202。你需要抓那个机器的就选择那张网卡,我这里选的是WLAN。再通过创建表达式-data.len == 72。1.打开wireshark选择自己的网卡。按CTRL+f,如下图进行配置。2 抓取好友qq的ip。

2023-05-24 15:57:55 4614 5

原创 DNS 解析过程

7、本地域名服务器查询三级域名服务器(即mail.baidu.com服务器),此时已经是最后一级了,如果有则返回映射关系,则本地域名服务器加入自身的映射表中,方便下次查询或其他用户查找,同时返回给该用户的计算机,没有找到则网页报错。像该过程中的第1、2、3点,仅限于在本地域名服务器中查找,如果有则直接返回映射关系,否则就去其他DNS服务器中查询,这种查询方式我们叫做递归查询。4、本地域名服务器查询根域名服务器,该过程并不会返回映射关系,只会告诉你去下级服务器(顶级域名服务器)查询。...

2022-07-25 14:45:50 239

原创 【MYSQL】 三大范式 表的关系 外键 ER图

每一列属性都是不可再分的属性值,确保每一列的原子性两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。通俗点说就一张表只干一件事,每一列都要和主键有关例如创建一个信息表在这个表中,age只依赖于student_id,score(学分)只依赖于,所以说和和。....

2022-07-20 17:10:13 4495

原创 代码丢失 记录一次失误经历

今天在写完需求后,代码执行完Git add,但是没有执行git commit。然后执行git reset --hard,导致辛辛苦苦写了两天的代码丢失了。。。(为什么手贱😭)之后也是在各种搜索怎么恢复代码,记录一下我了解的方法。利用ide的local history恢复(很不幸,我没有用ide)代码执行完Git add,但是,没有执行git commit ,没有代码提交到本地仓库,但是代码在本地仓库的缓存区(我就是这种)执行git fsck --lost-found,然后到.git/lost-foun.

2022-07-14 12:24:05 215

原创 【golang必备算法】动态规划 子数组与子序列问题

两个字符串求最长重复子数组和最长子序列两道题不同之处在于 子数组要求连续,而子序列不一定都是连续的,只要前面有相同的子序列,哪怕当前比较的字符不一样,那么当前字符串之前的子序列也不会为 0。而子串(子数组)是连续的,若当前比较的字符不相同,则当前位置的最长公共子数组(子串)的长度为 0,即 dp[i][j] = 0(就是没有)。所以DP里不同之处在于两点:dp的定义。1143题定义dp[i][j]为截止到nums1[:i-1]和n...

2022-06-04 03:09:27 286

原创 Go语言性能优化建议

slice预分配内存尽可能在使用make()初始化切片时提供容量信息如果在后续使用过程中切片容量不够了,会重新用一个新的数组做底层数组,造成性能开销。另一个陷阱:大内存未释放使用切片表达式(类似:arr[low:high]),在已有切片基础上创建切片,不会创建新的底层数组而是会复用原来切片的底层数组。会出现两个问题:原切片较大,代码在原切片的基础上新建小切片。之后使用这个小切片实际上还是使用原先大切片底层数组,性能不高原底层数组在内存中有引用,得不到释放解决方法就是可以使用copy函数

2022-05-29 23:00:46 524

原创 微服务初学

RPC远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。 接口定义语言 (IDL) - 用于描述软件组件的应用程序编程接口 (API) 的规范语言 - 常用于远程过程调

2022-05-26 13:55:46 108

原创 【golang必备算法】二叉树构造篇

二叉树构造篇889. 根据前序和后序遍历构造二叉树给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]func buildTree(preorder []int, inorder []int) *TreeNode {

2022-05-25 21:25:46 396

原创 【golang必备算法】二分查找

二分查找基本二分查找在无重复的有序数组中查找目标数下标 func search(nums []int,target int)int{ low,high := 0,len(nums)-1 mid := 0 for low <= high{ mid = low + (high-low)/2 if nums[mid] == target{ return mid }else if nums[m

2022-04-12 18:32:56 1685 5

原创 【计算机网络】HTTP 与 HTTPS

HTTP 与 HTTPSHTTP 与 HTTPS 有哪些区别?HTTP 是超文本传输协议,信息是明文传输,存在安全⻛险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。HTTP 的端口号是 80,HTTPS 的端口号是 443

2022-04-10 19:05:32 3141

原创 go实现两个协程交替打印

方法一:使用两个channel这里channel CA 必须要有缓冲区,否则最后会报错 fatal error: all goroutines are asleep - deadlock!这是因为无缓冲的通道只有在有接收方能够接收值的时候才能发送成功,否则会一直处于等待发送的阶段。因为最后交替运行完后没有协程可以接收CA通道中的数据,所以会一直阻塞发生死锁package mainimport ( "fmt" "sync")var wg sync.WaitGroupvar CA cha

2022-03-24 13:47:28 2095 1

原创 【golang必备算法】二叉树遍历(迭代)

二叉树遍历(迭代)144. 二叉树的前序遍历func preorderTraversal(root *TreeNode) []int { res := []int{} if root == nil{ return res } strack := []*TreeNode{} strack = append(strack,root) for len(strack)>0{ temp := strack[len(strack

2022-03-21 15:31:27 766

原创 【Golang必备算法】子序列问题

子序列问题子序列问题分为连续和不连续,不连续递增子序列的跟前0-i 个状态有关,连续递增的子序列只跟前一个状态有关,所以不连续的需要两层for循环300. 最长递增子序列(不连续)func lengthOfLIS(nums []int) int { if len(nums) == 1{ return 1 } res := 1 //dp[i] 表示i之前包括i的最长上升子序列的长度 dp := make([]int,len(nums)) /

2022-03-18 15:24:02 994

原创 数据库缓存一致性问题

数据库缓存一致性问题要保证缓存和数据库的强一致性,最好的方法就是加分布式锁,但是引入缓存的目的就是提高性能,而加分布式锁付出的的代价很可能超过引入缓存带来的性能提升现在 业内常用的是 Cache Aside Pattern + 延时双删 这种无锁的方案,只能在保证并发的前提下尽可能减少不一致的可能Cache Aside Pattern(边缘缓存模式)Cache Aside Pattern(边缘缓存模式),是最经典的缓存一致性处理模式查询操作:程序先从缓存中读取数据,如果命中,则直接返回,如果没有

2022-03-16 14:35:17 1233

原创 CSRF 攻击和防御

CSRF什么是 CSRF ?CSRF(跨站请求伪造),攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。CSRF 攻击主要是因为Web的身份验证机制虽然可以保证一个请求是来自某个用户的浏览器,但是无法保证该请求是用户批准发送的CSRF的特点攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生。攻击利用受害者在被攻击网站的登录凭证,冒充受害者

2022-03-15 17:40:11 959

原创 【Redis】集群

Redis 3.0 官方提供了一个方案用于实现集群。该方案采用哈希槽,来处理数据和实例之间的映射关系一个集群有16384个哈希槽,Reids会自动把这些哈希槽平均分布在集群的每一个实例上。例如,如果集群有N个实例,那么每个实例上的哈希槽个数为16384/N 个。也可以手动设置每个实例上的哈希槽个数。这样,通过哈希槽,集群就实现了数据到哈希槽,哈希槽再到实例的分配。客户端定位数据客户端定位数据时,所处的哈希槽是通过计算得到的,但是此时客户端还不知道数据在哪个实例上,这怎么解决?首先建立集群时,每个集

2022-01-20 19:53:22 941

原创 【MYSQL】MYSQL性能优化

MYSQL优化索引优化1、首先,为了提高查询效率,给常用的查询字段加上索引用explain命令检查sql语句有没有走索引,避免索引失效2、建立覆盖索引,因为辅助索引查询数据时会回表,但如果要查询的字段就在索引就不需要回表3、在设计索引时,尽可能使用同一个索引也可以满足排序又可以用于查找行数据。这样在生成有序结果时,效率会高sql语句的优化sql语句中,避免出现索引失效的情况尽量使用union all 来代替union,因为union会排除重复数据,比较耗时用连接查询代替子查询连接查询时

2022-01-19 12:32:07 660

原创 【MYSQL】JOIN优化

joinMYSQL 中并没有 full join 的语法,需要借助 union 关键字来实现:现在假设有两张表 用户表user,和 部门表depart select user.name, user.age, depart.department from user left join depart on user.name = depart.name union select user.name, user.age, depart.department from user righ

2022-01-18 14:39:03 1059 1

原创 【MYSQL】主从复制

MYSQL主从复制主从复制的原理其实就是把主服务器上的 binlog 日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。流程图:主要涉及到三个线程:主服务器的 binlog 线程、从服务器的 I/O线程 和 SQL线程binlog线程 :以二进制的形式记录修改了主服务器数据库的SQL语句I/O线程:主服务器上读取binlog日志,并写入到从服务器上的中继日志(Relay log)SQL线程:从服务器中的SQL线程读取中继日志,进行重放主从复制部署模式一

2022-01-13 02:09:35 236

原创 【操作系统】调度算法 进程调度/页面置换/磁盘调度 算法

进程调度算法先来先服务调度算法最短作业优先调度算法:它会优先选择运⾏时间最短的进程来运⾏高响应比优先调度算法:先计算响应比优先级,然后运行最高相应比的进程。时间片轮转调度算法:每个进程分配一个时间片,允许该进程在该时间段中运行。如果时间片用完,进程还在运行,则将CPU分配给另外一个进程最高优先级调度算法:在就绪队列中选择最高优先级的进程运行。优先级有静态优先级和动态优先级静态优先级:在创建进程的时候就确定了优先级动态优先级:优先级会动态调整多级反馈队列调度算

2022-01-12 10:22:19 466

原创 【Mysql】垂直切分 水平切分 分库分表

分库分表分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成 ,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。垂直分库/垂直分表垂直分库, 按业务拆分,每个库的结构不一样,专库专用。比如电商业务,拆分为商品库,会员库等。垂直分表,将一个表按照字段分成多个表,每个表存储其中一部分字段优点拆分后业务清晰数据维护简单,不同的业务放在不同机器上当表中字段少时,命中率更高,减少磁盘I/O

2022-01-11 16:23:43 520

原创 【Golang必备算法】动态规划

509. 斐波那契数方法一:递归func fib(n int) int {if n==0{ return 0}if n==1{ return 1}return fib(n-1)+fib(n-2)}方法二:动态规划func fib(n int) int { dp:=make([]int,n+2) dp[0]=0 dp[1]=1 if n < 2{ return dp[n] } for i:=2

2022-01-06 19:34:01 784

原创 【操作系统】I/O多路复用 select poll epoll

文章目录I/O模式I/O多路复用selectpollepoll事件触发模式I/O模式阻塞I/O非阻塞I/OI/O多路复用信号驱动I/O异步I/OI/O多路复用I/O 多路复用 相较于多进程多线程技术区别在于一个进程或线程可以处理多个事件。I/O多路复用通过一种机制,可以监视多个描述符,一旦某个描述符就绪,能够通知相应的进程/线程进行相应操作select、poll、epoll都是IO多路复用的机制,它们可以同时监控多个fd的操作文件描述符(fd):内核利用文件描述符来访问文件。文件

2022-01-05 18:22:46 523

原创 【操作系统】进程管理

进程管理进程是资源分配的最基本的单位进程状态在三态模型中,进程状态分为三个基本状态,即运行态,就绪态,阻塞态。在五态模型中,进程分为新建态、终止态,运行态,就绪态,阻塞态。PCBPCB主要包含下面几部分的内容:进程的描述信息,比如进程的名称,标识符,处理机的状态信息,当程序中断是保留此时的信息,以便 CPU 返回时能从断点执行进程调度信息,比如阻塞原因,状态,优先级等等进程控制和资源占用,同步通信机制,链接指针(指向队列中下一个进程的 PCB 地址)PCB 的作用P

2022-01-01 22:11:13 347 1

原创 Go语言 内存逃逸 内存溢出 内存泄漏

内存逃逸内存分配有两种方式 : 堆分配 和 栈分配内存逃逸 :Go中程序变量会携带一组校验数据,用来证明它的整个生命周期在程序运行时是否完全可知。如果变量通过了这些校验,它就可以在栈上分配,反之就可以说它逃逸了,这时就必须在堆上分配。这样做虽然浪费堆空间,但是有效避免了悬挂指针的出现,并且由于GC的存在也不会出现内存泄漏,权衡之下也是一种合理的做法。出现内存逃逸的情况:指针逃逸在方法内把局部变量指针返回时,会出现内存逃逸。因为局部变量原本应该在栈上分配,并且在栈中回收,但是由于在返回时被外

2021-12-28 19:51:21 2289

原创 Go语言力扣常用函数

Go语言力扣常用函数将字符串全部变成小写:s=strings.ToLower(arr)最大值:math.MaxInt32将字符串变成int数字 strconv.Atoi(res) 如:”2“ -> 2将int数字变成字符串 strconv.Itoa(res)

2021-12-26 23:48:35 550

原创 【Golang必备算法】回溯算法

77. 组合注意:使用切片表达式的得到的切片和原来的切片共用同一个底层数组剪枝操作:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uvNUUAKq-1640443748589)(https://gitee.com/CJ-cooper6/picgo/raw/master/image-20211130172501586(1)].png)代码var res [][]intvar ans []intfunc combine(n int, k int) [][]int {

2021-12-25 22:49:45 642

原创 Go语言 nil 切片和空切片解析

var a1 []int //nil切片a2 := []int{} //空切片,或者用 make([]int,0)空切片和nil切片指向的地址不一样nil切片引用数组指针地址为0(没有指向任何实际地址)空切片有引用数组指针地址,并且是固定的一个值func main() {var a []intb:=[]int{}c:=[]int{}fmt.Printf("%p %p %p",a,b,c)}//输出0x0 0x34ea90 0x34ea90...

2021-12-24 13:51:36 849

原创 【场景题】海量数据Top K问题?有一个包含 10 亿个搜索关键词的日志文件,如何快速获取到 Top 10 最热门的搜索关键词呢?

首先关键词肯定有很多重复的,所以我们要统计每个关键词出现的频率。可以通过散列表来记录关键词及其出现的次数。假设我们选用散列表。我们就顺序扫描这 10 亿个搜索关键词。当扫描到某个关键词时,我们去散列表中查询。如果存在,我们就将对应的次数加一;如果不存在,我们就将它插入到散列表,并记录次数为 1。以此类推,等遍历完这 10 亿个搜索关键词之后,散列表中就存储了不重复的搜索关键词以及出现的次数。然后我们再建立一个大小为10的小顶堆(堆顶是堆中出现频率最少的),遍历散列表,依次取出每个搜索关键词及对应出现的次

2021-12-19 19:26:21 551

原创 【Golang必备算法】各种排序

冒泡排序 、快速排序、归并排序、堆排序、快速排序稳定版

2021-12-19 19:00:44 436

原创 【操作系统】内存管理

虚拟内存虚拟内存是计算机系统内存管理的一种技术,它使应用程序认为它拥有连续的可用的内存,而实际上它通常被分隔成多个物理内存碎片,还有部分存储在外部磁盘存储器上,在需要时进行数据交换。程序使用的内存地址叫做虚拟内存地址,实际存在硬件的空间地址叫物理地址进程通过虚拟地址来访问实际的物理地址好处可以弥补物理内存大小的不足一定程度的提高反映速度为每个进程提供了一致的地址空间,简化内存管理分段程序根据逻辑划分成若干个段,如数据段、代码段等。目的是为了能更好的满足用户的需要。分段机制下虚拟地址由

2021-12-13 18:24:04 343

原创 【Redis】过期键删除策略和内存淘汰策略

Redis 过期键策略和内存淘汰策略设置Redis键过期时间Redis有四个不同的命令来设置生存时间(键可以存在多久)或过期时间(键什么时候会被删除)。EXPIRE <key> <ttl> :表示将键 key 的生存时间设置为 ttl 秒。PEXPIRE <key> <ttl> :表示将键 key 的生存时间设置为 ttl 毫秒。EXPIREAT <key> <timestamp> :表示将键 key 的生存时间设置为 t

2021-12-05 17:54:25 88

原创 【Redis】Sentinel 哨兵模式

Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个 Sentinel 实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新主服务器,然后由新的主服务器替代已下线的主服务器继续处理命令请求。

2021-12-05 15:53:36 489

原创 【Redis】主从复制

主从复制共有三种模式:全量复制、基于长连接的命令传播、增量复制。

2021-12-04 00:21:15 1014

原创 【Redis】缓存雪崩、缓存击穿、缓存穿透

缓存雪崩、击穿、穿透缓存雪崩当大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机时,如果此时有大量用户请求,都无法在Redis中处理,于是全部请求都直接访问数据库,从而导致数据库压力骤增,严重的会造成数据库宕(dang)机,从而形成一系列连锁反应,造成整个系统崩溃,这就是缓存雪崩发生 缓存雪崩 有两个原因:大量数据同时过期Redis故障宕机不同的诱因,应对的策略也不同。大量数据同时过期常见应对方法:均匀设置过期时间避免将大量数据设置成同一个过期时间。可以在对缓存数

2021-11-30 16:03:44 667

原创 【Mysql】深入理解 MVCC 多版本并发控制

MVCCMVCC(Multi-Version Concurrency Control),即多版本并发控制。是 innodb 实现事务并发与回滚的重要功能。锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销.具体实现是在数据库的每一行中,额外添加三个字段:DB_TRX_ID : 记录插入或更新该行的最后一个事务的事务IDDB_ROLL_PTR: 指向改行对应undolog 的指针DB_ROW_ID: 单调递增的ID,他就是AUTO_I

2021-11-27 01:27:25 634

原创 【golang必备算法】 Letecode 146. LRU 缓存机制

146. LRU 缓存机制思路:哈希表 + 双向链表为什么必须要用双向链表?因为我们需要删除操作。删除一个节点不光要得到该节点本身的指针,也需要操作其前驱节点的指针,而双向链表才能支持直接查找前驱,保证操作的时间复杂度 O(1)。为什么要在链表中同时存储 key 和 val,而不是只存储 val?当缓存容量已满,我们不仅仅要删除最后一个节点,还要把哈希表 中映射到该节点的 key 同时删除,而这个 key 只能由 节点得到。如果 节点结构中只存储 val,那么我们就无法得知 key 是什么,

2021-11-25 00:46:34 177

原创 【Mysql】三大日志 redo log、bin log、undo log

文章目录redo log(物理日志\重做日志)binlog(逻辑日志/归档日志)update语句执行流程Uodolog(回滚日志/重做日志)undo log+redo log保证持久性redo log(物理日志\重做日志)redo log是InnoDB存储引擎层的日志,又称重做日志文件,是物理日志。redo log记录数据修改后新数据的备份、冗杂的undo log、未提交的事务和回滚的事务,数据缓存到内存中,只是在事务提交前将redo log持久化到磁盘redo log 可以保证即使数据库发生异常重

2021-11-24 20:45:00 869

原创 【golang 必备算法】二叉树篇(一)

144. 二叉树的前序遍历方法一:递归func preorderTraversal(root *TreeNode) []int { arr:=[]int{} dfs(root,&arr) //传地址return arr}func dfs(root *TreeNode,arr *[]int){ if root==nil{ return } *arr=append(*arr,root.Val) dfs(root.Left,arr)

2021-11-19 17:33:33 320

原创 【Redis】redis中常见数据结构

redis中常见数据结构SDS(简单动态字符串)SDS结构:{int len;//记录buf数组中已使用字节的数量,等于SDS所保存字符串的长度int free;//记录buf数组中未使用字节的数量char buf[];//字节数组,用于保存字符串}比起C字符串,SDS优点:常数复杂度获取字符串长度杜绝缓冲区溢出减少修改字符串长度时所需的内存重分配次数二进制安全兼容部分C字符串函数链表Redis列表键的底层之一就是链表除了列表键之外,发布与订阅、慢查询、监视

2021-11-16 20:08:17 797

空空如也

空空如也

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

TA关注的人

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