- 博客(382)
- 收藏
- 关注
原创 IM系统优秀文章
https://xie.infoq.cn/article/19e95a78e2f5389588debfb1c 《如何设计一个亿级消息量的 IM 系统》
2024-04-07 10:09:33
448
原创 IM文章学习记录
20240312http://www.52im.net/thread-3780-1-1.html 《探探的IM长连接技术实践:技术选型、架构设计、性能优化》
2024-03-12 09:43:19
462
原创 Bazel note
Bazel的学习摘自知乎https://zhuanlan.zhihu.com/p/262497747java_binary( name = "MyBinary", srcs = ["MyBinary.java"], deps = [":mylib", ],)java_library( name = "mylib", srcs = ["MyLibrary.java", "MyHelper.java"], visibility = ["//java/com/example/myproduc
2021-12-16 00:11:23
322
原创 git note
GitGit的学习以及笔记git config --global --list 查看用户配置信息git本地有三个工作区域:workspace:工作区,就是你平时存放项目代码的地方index/stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息reposity:本地仓库,就是安全存放数据的位置remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换git的工作流程在工作目录中添加,修改文件将需要进行版本管理
2021-12-16 00:11:07
158
原创 golang note
https://draveness.me/golang/docs/part1-prerequisite/ch02-compile/golang-compile-intro/ 学习笔记go的编译过程对输入的文件先进行词法分析形成token,然后再对token进行语法分析形成抽象语法树,得到抽象语法树后分九个阶段对抽象语法树进行更新和编译:检查常量、类型和函数的类型;处理变量的赋值;对函数的主体进行类型检查;决定如何捕获变量;检查内联函数的类型;进行逃逸分析;将闭包的主体转换成引.
2021-12-05 16:41:21
449
原创 Redis 笔记
RedisRedis数据结构为什么单线程还这么快第一,纯内存访问,Redis将所有数据放在内存中,内存的响应时长大约为100纳秒,这是Redis达到每秒万级别访问的重要基础。第二,非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间,如图26所示。...
2021-07-31 21:13:12
444
原创 机器学习 note
机器学习李宏毅老师的ML课程的笔记学习什么是机器学习机器学习就是让机器去寻找一个函数(Function),这个函数具备这样的能力,对于相对应地输入可以获得我们想要的输出,例如Speech Recognition语音辨识,我们把我们说的话作为输入,我们希望机器能找到一个Function,该Function可以输出这个说的话的文字内容。又比如Image Recognition图片辨识,我们希望机器能找到一个Function,对于输入的一张图片(比如猫),可以输出该图片是什么(猫)。机器学
2021-05-10 10:47:20
226
2
原创 shell学习
shell 学习#!/bin/bash 头文件sh/bash helloworld.sh 执行该sh文件chmod 777 helloworld.sh 修改该sh文件的权限,设置完了之后可以用./helloworld.sh 命令直接执行该sh文件echo "hello" >> text.txt 将“hello”追加到txt文件中系统变量echo $HOME 获取当前用户的home目录echo $PWD 获取当前目录echo $SHELL 获取默认的解析器是哪一个echo
2021-04-18 20:42:43
88
原创 Docker学习
docker 命令学习对于docker的学习以及一些命令的记录image 镜像常用image也就是镜像,可以理解为一个个安装包docker images 查看所有的镜像docker pull mysql 拉取镜像docker search mysql 搜索镜像docker rmi 镜像名:tag | 镜像id 后面加tag或者镜像id来删除镜像docker rmi -f 镜像名:tag | 镜像id 强制删除以及创建容器的镜像,会将容器和镜像一并删除docker images -
2021-04-14 21:05:12
142
原创 GO grpc
protoc ./person.proto --go_out=./将当前目录下的person.roto转译成go语言放在当前目录注意在person.proto中写上option go_package="./;firstpb";左边表示转译之后存放的位置,右边表示go语言的包名
2021-04-13 20:18:24
902
1
原创 Go 单元测试
新建Splitpackage splitimport "strings"//传入Split("a:b:c",":")返回("a","b","c")func Split(s,sep string) (result []string){ i := strings.Index(s,sep) for i > -1 { result = append(result,s[:i]) s = s[i+1:] i = strings.Index(s,sep) } result =
2021-04-10 21:17:25
210
原创 leetcode 14. 最长公共前缀 go实现
100%这题属于一类的二分查找问题,类似于最小值最大化,对于查找的区间,我们可以通过二分查找算法收敛于最优解复杂度O(n2logn)func longestCommonPrefix(strs []string) string { temp := 0x3f3f3f3f if len(strs) == 0 { return "" } for _,j := range strs { lens := len(j) if
2021-03-21 01:09:26
174
原创 go并发实现素数筛
先贴代码package mainimport ( "fmt")// Send the sequence 2, 3, 4, ... to channel 'ch'.func generate(ch chan int) { for i := 2; ; i++ { ch <- i // Send 'i' to channel 'ch'. }}// Copy the values from channel 'in' to channel 'out',// removing
2021-03-15 14:48:32
791
7
原创 图解HTTP笔记
客户端发送的请求报文 起始行开头的GET表示请求访问服务器的类型,称为方法(method)。随后的字符串/index.htm指明了请求访问的资源对象,也叫做请求URI(request-URI)。最后的HTTP/1.1,即HTTP的版本号,用来提示客户端使用的HTTP协议功能。请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。 GET:获取资源 GET方法用来请求访问已被URI识别的资源。指定的资源经服务器解析后返回响应内容。 POST:传输实..
2021-02-19 18:49:58
145
原创 mysql必知必会
SELECT prod_name FROM products LIMIT 5,5;(从行5开始选择5条数据,行是从0开始的) ORDER BY SELECT prod_name FROM product ORDER BY prod_name/ DESC;(将按照prod_name排序检索)/加DESC表示降序 SELECT prod_id,prod_price,prod_name FORM products ORDER BY prod_price,prod_name(先按照pri...
2021-02-12 21:08:13
1727
5
原创 重新认识fork
重新认识fork 当fork函数被当前进程调用时,内核为新进程创建各种数据结构,并分配给它一个唯一的PID。为了给这个进程创建虚拟内存,它创建了当前进程的mm_struct,区域结构和页表的原样副本。它将两个进程中的每个页都标记为只读,并将两个进程中的每个区域结构都标记为私有的写时复制。当fork在新进程返回时,新进程现在的虚拟内存刚好和调用fork时存在的虚拟内存相同。当这两个进程中的任一个进程进行写操作时,写时复制机制就会创建新的页面。(如图所示,当进程1调用fork创建进程2时候,他们的虚..
2021-02-04 22:05:06
231
原创 直接映射高速缓存中的冲突不命中
冲突不命中在真实的程序中很常见。当程序访问大小为2的幂的数组时,直接映射高速缓存会通常发生冲突不命中。float dotpord(float x[8],float y[8])//x与y向量的内积{ float sum = 0.0; int i; for(i = 0;i < 8;i++) sum+=x[i]*y[i]; return sum;}假设浮点数是4个字节,x被加载到从地址0开始的32字节的内存中,而y紧跟x之后,从地址32开始。这会
2021-01-22 18:49:03
2508
3
原创 第4章 流水线
流水线通过在组合逻辑后加入流水线寄存器实现流水线,有了流水线能在一个时钟周期中发射一条指令并完成一条指令流水线的断流叫做流水线冒险主要有1)数据冒险2)控制冒险数据冒险数据冒险是指下一条流水线用到上一条指令写入的数据,也就是写后读。处理方法用暂停来避免数据冒险 用转发来避免数据冒险:不写入寄存器,直接将结果作为下一条指令的输入控制冒险例如ret返回指令和call跳转指令会是流水线产生控制冒险处理方法暂停避免在第3个周期执行ret的时候我们在DEM三个阶段插入
2021-01-17 23:40:54
460
原创 内存越界引用和缓存区溢出
内存越界引用和缓存区溢出void echo(){ char buf[8]; gets(buf); puts(buf);}栈区如上图所示,echo会在栈顶区域分配8字节大小给buf,当输入的字节数量0-7时,不会对栈造成破坏,当输入9-23字节时,由于是空区域,所以也不会造成破坏,但是当输入>24字节时,会修改返回地址数据,对整个栈区造成破坏。对抗缓冲区溢出攻击 栈随机化 程序每次运行,就栈的地址都采用随机化处理。 栈破坏检测(金丝雀)
2021-01-12 18:49:07
437
原创 第三章 过程
过程 过程的调用底层实现上是用栈结构,当过程p调用过程q时,我们先将p入栈,再将q入栈,q执行结束之后将q出栈,然后在将p出栈。调用不同的过程,实质上修改的是程序计数器(PC,从高地址向低地址增长)的值,从底层汇编上看,采用的是call命令。 转移控制 当过程p调用过程q,q执行结束之后如何继续执行p之后的机器指令,我们称之为转移控制。实现原理是在p执行call汇编调用q时候,我们首先将call指令的下一条指令入栈,也就是图中的返回地...
2021-01-11 21:45:47
247
原创 leetcode 148. 排序链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode*...
2020-02-24 22:20:25
156
原创 leetcode 172. 阶乘后的零
/*对于一个数的阶乘,就如之前分析的,5 的因子一定是每隔 5 个数出现一次,也就是下边的样子。n! = 1 * 2 * 3 * 4 * (1 * 5) * ... * (2 * 5) * ... * (3 * 5) *... * n因为每隔 5 个数出现一个 5,所以计算出现了多少个 5,我们只需要用 n/5 就可以算出来。但还没有结束,继续分析。... * (1 * 5) * ...
2020-02-24 21:50:12
148
原创 leetcode 887. 鸡蛋掉落
O(knlogn)class Solution {public: int mp[110][11111]; int dp(int k,int n) { if(k==1) return n; if(n==0) return 0; //if(mp[make_pair(k,n)]) return mp[make_pair(k,n...
2020-02-24 21:45:53
469
原创 面试题51. 数组中的逆序对
class Solution {public: int lowbit(int x) {return x&(-x);} void update(int i,vector<int>& c) {//单点更新,更新这个点还要更新他的父亲所以是i+=lowbit(i) while(i <= c.size()) ...
2020-02-22 18:08:50
204
原创 leetcode 279. 完全平方数
class Solution {public: int numSquares(int n) { vector<int> dp(n+10); dp[1]=1; dp[2]=2; for(int i=3;i<=n;i++) { dp[i]=100000000; ...
2020-02-21 18:22:16
143
原创 leetcode 264. 丑数 II
/* 用三个指针分别对应2,3,5的乘机倍数*/class Solution {public: int nthUglyNumber(int n) { int dp[2222]; int i1=1; int i2=1; int i3=1; dp[1]=1; for(int i=...
2020-02-21 17:54:32
167
原创 leetcode 240. 搜索二维矩阵 II
class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int n=matrix.size()-1; int m=0; while(n>=0 && m<matri...
2020-02-21 17:45:10
136
原创 leetcode 227. 基本计算器 II
class Solution {public: typedef long long ll; int calculate(string s) { s += "+";//在末尾加一个+号运算符 if (s.empty()) return 0; stack<int> vals; stack<char...
2020-02-21 16:46:46
155
原创 leetcode 222. 完全二叉树的节点个数
/* 最底层的中间位置为根节点右儿子一直往左边遍历的点 我们每次判断这个点是否为空如果为空那就在左边否则在右边 */class Solution {public: int countNodes(TreeNode* root) { if(!root) return 0; int depth = f(root); ...
2020-02-21 16:29:39
162
原创 leetcode 221. 最大正方形
dp[i][j]表示这个点的最大正方形边长public class Solution { public int maximalSquare(char[][] matrix) { int rows = matrix.length, cols = rows > 0 ? matrix[0].length : 0; int[][] dp = new i...
2020-02-21 03:18:45
189
原创 leetcode 220. 存在重复元素 III
/* 用set.size()来控制整个窗口的大小如果在set中存在nums[j]这说明 i,j之间的绝对值差小于k 然后用lower_bound查询nums[i]-t,nums[i]+t的值是否存在*/class Solution {public: bool containsNearbyAlmostDuplicate(vector<int>&...
2020-02-21 02:03:22
137
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人