自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 golang面试题总结

go channel close后读写非阻塞读,panic写nil的channel,无论收发都会阻塞io多路复用,select/poll/epoll的区别select原则上是通过遍历fd句柄,查找到可读的句柄,所以时间复杂度为O(N),epoll是将已经就绪的fd推送给应用层,所以时间复杂度为O(1)select由于数据结构原因支持的句柄最大值为1024/2048个,poll为链表型结构,句柄无最大值。epoll存储fd为红黑树结构,fd就绪后存储在就绪链表中,调用回调函数唤醒epoll_wai

2021-08-24 23:50:53 229

原创 面试references

undo log/redo log理解https://zhuanlan.zhihu.com/p/35574452/checkout point理解https://www.cnblogs.com/lintong/p/4381578.html

2021-08-15 19:19:10 149

原创 对于golang,for...range的一个误解

一般情况下我们对于数组、slice、map和channel等类型可能会用到for…range进行遍历。写法通常如下。buf := []int{1,2,3}for k, v := range buf { fmt.Println(k,v)}我之前一度认为在每次循环遍历的时候都会在栈上创建k,v两个变量。以至于在代码中我更偏向于用for循环去实现一个数组的遍历。但其实并不是这样,k、v两个变量只创建一次。可以通过下面一段代码来进行验证。buf := []int{1,2,3}for k, v

2020-07-02 17:42:03 204

原创 ip地址转为整数

这道题主要考量了两个知识点。1)ip地址每个点分十进制数的值为0-255,转化为二进制就是 0000 0000 ~ 1111 1111。正好可以存储在一个八位的空间中,4个数正好是32位,和int32的长度是一样的。2)int32的第一位为正负位,所以取值范围是-2147483648 ~ 2147483647,不满足我们的需求,所以我们需要使用uint32来进行存储。func Ip2Num(ip string) (uint32, error) { var result uint32 var

2020-06-16 22:38:44 582

原创 黑帽子白帽子问题

问题在一次聚会中,所有人都戴着白色或者黑色的帽子,黑色的帽子不少于1顶,每个人都可以看到除了自己所有人的帽子的颜色。此时,主持人关上灯,说,认为自己是黑帽子的,请打自己一个耳光。第一次关灯,没有人打耳光;开灯后,第二次关灯,没有人打耳光;再次开灯后,第三次关灯,有了打耳光的声音。请问,在场的人中有几人戴的是黑帽子?结论我们可以从结论逆向推算出一些结果。1)如果有全场只有一个人带黑帽子,那么以这个人的视角来看,第一次关灯之前,他看到的其他人戴的都是白帽子,所以第一次关灯他就可以断定自己是黑帽

2020-06-09 14:21:58 3599

原创 条件变量和锁的配合用法

最近在看clamd的代码,其中thrmgr.c中多次使用了条件变量,写一小段代码来复习一下条件变量的用法。

2020-03-27 16:16:03 288

原创 rpm指令的基本用法

查询rpm都安装了哪些软件rpm -qa卸载软件rpm -e [name]安装软件rpm -i [name].rpm

2020-03-25 15:40:03 98

原创 //go:——go的一些编译指令

https://golang.org/cmd/compile/

2020-02-07 11:17:04 155

原创 几种加密方式的介绍

通常,为了保护网站的敏感数据,应用需要对这些信息进行加密处理,信息加密技术可分为三类:单向散列加密、对称加密和非对称加密。单向散列加密单向散列加密是指通过对不同输入长度的信息进行散列计算,得到固定长度的输出,这个散列计算过程是单向的,即不能对固定长度的输出进行计算从而获得输入信息。利用单向散列加密这个特性,可以进行密码加密保存,即用户注册时输入的密码不直接保存到数据库,而是对密码进行单向散列...

2020-01-12 23:36:27 1505

原创 C语言gethostbyname用法及使用inet_ntoa时的一个问题

gethostbyname 用法众所周知我们可以使用gethostbyname方法通过域名获取目标地址。struct hostent { char *h_name; /* official name of host */ char **h_aliases; /* alias list */ int h_addrtype; ...

2020-01-09 17:58:05 885

原创 深入理解虚拟内存

文章目录1 物理和虚拟寻址2 地址空间的概念3 虚拟内存作为缓存的工具3.1 页表3.2 页命中3.3 缺页4 虚拟内存作为内存管理的工具5 虚拟内存作为内存保护的工具一个系统中的进程是与其他进程共享CPU和主存资源的,如果太多进程需要太多的内存,那么他们中的一些根本就无法运行。当一个程序没有空间可用时,就会无法运行;当某个进程不小心写了其他进程使用的内存时,他就可能以令人迷惑的方式挂掉。为了...

2020-01-08 16:51:23 281

原创 golang切片删除元素

删除一段元素package mainimport ( "fmt" "unsafe")type sliceType struct{ pdata unsafe.Pointer len int cap int}func main() { var a []byte = []byte("helloworld\n") fmt.Println((*sliceType)(u...

2020-01-07 14:48:26 1294

原创 查看golang编译出的汇编代码

执行命令go tool compile -S file.go

2020-01-06 11:12:53 3929

原创 golang的强制类型转换

C语言的类型转换很简单,直接在变量名前加其他的类型就可以,相当于给一段数据换了一个模子进行读取,只需要注意指针对应指针,数据对应数据即可。但是golang的安全性限制了它不允许这样做。下面一段简单的代码,说明一下golang强转的方式。package mainimport ( "fmt" "unsafe")type sliceType struct{ pdata unsafe....

2020-01-06 10:42:16 3419

原创 C语言知识点复习(1)

阅读《C语言深度解剖》总结一些已经生疏的知识点。定义和声明的区别:定义,创建一个对象,并为这个对象分配一块内存,并定义一个变量名;声明,告诉编译器变量名已经被匹配到一块内存上了或预定变量名,使其不能被其他的内存绑定。他们的区别就在于,定义创建了对象并为这个对象分配了内存,声明没有分配内存。原码反码补码:(以8位2进制为例)原码,首位代表正负,其余位代表数值,如1000 0001为-1,000...

2019-12-26 17:55:33 85

原创 C语言知识点复习

最近一直在写go的代码,C语言有些生疏,复读了一遍《高质量C编程指南》,将其中有些遗忘的知识点总结如下。1、头文件功能:调用库功能、类型安全检查2、声明*int x,y,x为int指针,y为int值3、浮点变量和0比较时应与SPSINON比较4、多重循环嵌套时,长的循环应放在内层,以减少cpu切换循环层的次数5、switch内部不应该声明或赋值变量6、return会销毁栈内存7、内存...

2019-12-25 11:53:26 94

原创 C语言alloc函数总结

下面对用户态的内存分配函数进行一个总结。/* 分配SIZE字节的内存 *//* Allocate SIZE bytes of memory. */void *malloc(size_t size);/* 分配NMEMB个元素,每个元素SIZE字节的内存,并全部初始化为0 *//* Allocate NMEMB elements of SIZE bytes each, all initi...

2019-12-19 23:08:21 3613

转载 图解Go语言内存分配

一篇go内存分配讲解很清楚的文章。https://cloud.tencent.com/developer/article/1444288

2019-12-18 15:58:23 84

原创 gomemcache源码阅读

今天想学习一下代码是如何调用memcache的,就阅读了一下gomemcache(memcached的一个驱动库)的源码,原理还是很简单的,主要就是通过net/dial.go的方法来实现连接。使用方法import ( "github.com/bradfitz/gomemcache/memcache")func main() { mc := memcache.Ne...

2019-12-16 14:37:49 257

原创 golang调C的基本方法和类型转换

本文主要记录一些之前在项目中使用cgo调用C语言的方法和遇到的一些问题。在go文件中写c代码使用cgo时需要先import “C”,然后在上面的注释部分内(/…/)写C代码。其中可以通过CFLAGS和LDFLAGS来指定编译参数。如下代码。package main/*#cgo CFLAGS: -I.#cgo LDFLAGS: -L.#include <stdio.h>...

2019-12-11 16:54:04 954

原创 golang net/http源码阅读

Server结构体type Server struct{ addr string //监听的tcp地址,如果为nil,则默认为”:http” Handler Handler //被引用的句柄,如果为nil,则默认为http.DefaultServeMux TLSConfig *tls.Config //可选,该参数供ServeTLS和ListenAndServeTLS使用。注意:该...

2019-08-13 17:04:43 206

原创 ubuntu14.04环境下Python/Redis环境搭建

ubuntu14.04环境下Python/Redis环境搭建本文主要总结一下,在个人搭建学习环境时的基本步骤和所遇到的相关问题。Python环境搭建第一步是python软件包的下载,可通过wget在以下链接上直接进行下载wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz下载完成后执行如下命令,即可安装完成。./co...

2018-11-04 21:18:59 210

空空如也

空空如也

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

TA关注的人

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