Simon的博客

专注于互联网后台架构开发

go语言函数传递问题(map、切片、接口、chan)

一句话总结:map、切片、接口、函数类型、chan都是引用类型,作为函数参数传递不会复制一个副本。 package main import ( "fmt" ) func change(a int) { a = 10 } func changeMa...

2017-11-26 23:00:04

阅读数 908

评论数 0

go语言中select与switch的区别

一句话总结:switch主要用于表达式的比较判断,select主要用于通信即IO。 package main import ( "fmt" ) func main() { key := 10 switch key { case 7: ...

2017-11-26 22:52:10

阅读数 118

评论数 0

muduo小结

1、构想:非阻塞IO复用+每个线程负责一个事件循环+线程池 2、简化类图(来源于作者): Buffer是TCPConnection成员,其设计用vector,包括预留+可读+可写三个部分。

2017-11-26 10:17:05

阅读数 110

评论数 0

go:chan分为阻塞和非阻塞

一句话总结:

2017-11-25 22:45:47

阅读数 3968

评论数 0

go:*handler is pointer to interface, not interface

一句话总结:不能声明一个接口的指针,如同不能在C++中不能声明一个指向引用的指针。 type handler interface { Do() } var h *handler //error C++中不能声明一个指向引用的指针 int&* p; //error

2017-11-24 23:25:38

阅读数 892

评论数 0

go语言中的value receiver和pointer receiver

一句话总结:方法的接收者receiver是t T时,值可以是T活着*T;如果接收者是t *T时,值只能是*T。

2017-11-24 23:18:12

阅读数 100

评论数 0

找出字符数组中出现次数最多的字符

一道面试题,当时状态不太好,今天重新实现一下。 1、暂不考虑最多出现的字符有多个的情况 2、用map实现 zhaojunyandeMacBook-Pro:~ zhaojunyan$ vim map.cpp  zhaojunyandeMacBook-Pro:~ zhaojunyan$ g+...

2017-11-19 10:41:14

阅读数 549

评论数 0

用10只小白鼠找出1000瓶液体中有毒的一瓶

一句话总结:用二进制排列的方法,2^10=1024>1000。 想到这个方法后实现还是蛮简单的,1表示喝,0表示不喝 0000 0000 0001:第一瓶药 0000 0000 0010:第二瓶药 0000 0000 0011:第三瓶药 。。。。。。 0011 1110 1000...

2017-11-19 09:28:59

阅读数 801

评论数 0

static_cast与强制类型转换的区别

一句话总结:static_cast在编译时会进行类型检查,而强制转换不会。 zhaojunyandeMacBook-Pro:~ zhaojunyan$ g++ -o sc sc.cpp  sc.cpp:19:9: error: static_cast from 'A *'...

2017-11-19 09:20:39

阅读数 1645

评论数 1

线程池的核心实现

一句话总结:用队列实现,生产者添加任务,消费者执行任务;注意原子性操作。 #include #include #include #include #include using namespace std; #define THREAD_NUM 3 #define QUEUE_S...

2017-11-14 20:43:29

阅读数 121

评论数 0

二叉树三种遍历的非递归算法

一句话总结:借用栈,注意后序遍历确认右子树遍历后才能遍历根。 void preorderWithoutRecursion(BTNode* root) { if (NULL == root) { return; } BTNode* p = root; stack s; w...

2017-11-14 20:20:11

阅读数 101

评论数 0

go——奇怪的iota

一句话总结:const语句块的行索引,从0开始累加。注意与C++中枚举类的区分。 1、iota从0开始,b、c依次等于累加的索引 2、a1=1 3、d、e、f、g会等于上面的值,不累加,与枚举类不同。 package main import "fmt" func main(...

2017-11-12 11:46:20

阅读数 197

评论数 0

Mac下安装、配置Go语言开发环境

一句话总结:关键是配置环境变量GOPATH、GOBIN。 1、官网下载安装包,需用VPN翻墙。 https://storage.googleapis.com/golang/go1.7.darwin-amd64.pkg 2、在主目录下配置GO环境变量GOPATH、GOBIN,没有.bash_pro...

2017-11-10 23:11:50

阅读数 166

评论数 0

总结下进程间通信的方式

类别 说明 无名管道pipe 仅能用于亲缘关系进程间通信,pipe函数可以创建读写管道,当父子进程可以相互收发消息时,注意自己发的消息不要被自己接收到了 有名管道fifo 以fifo文件作为通信媒介,与普通文件最大的不同在于fifo...

2017-11-04 17:49:00

阅读数 111

评论数 0

阻塞模式下socket连接connect超时后长达75秒,如何避免

一句话总结:设置非阻塞,用select等待一段时间看是否连接成功,连接成功再设回阻塞模式。 注意select第一个参数一定要加1,否则描述符刚好不在集合当中,会出现超时返回0不可读不可写但send、recv正常的情况。 server: #include #include #include ...

2017-11-04 16:02:40

阅读数 930

评论数 0

二分查找的递归和非递归实现

#include int bfind(int a[], int val, int start, int end) { int mid = (start+end)/2; if (a[mid] > val) { return bfind(a, val, start, mid); ...

2017-11-04 14:32:38

阅读数 95

评论数 0

多线程死锁的产生原因及避免

一句话总结:资源竞争造成的无限等待,可通过加锁时效、死锁检测来避免 资源竞争造成的无限等待: 1、互斥条件:该进程拥有的资源,其他进程只能等待其释放 2、不剥夺条件:该进程拥有的资源只能由其自己释放 3、请求和保持条件:请求其他资源,同时自己拥有的资源又不放手 4、循环等待:A等待B...

2017-11-04 10:08:56

阅读数 265

评论数 0

聊聊epoll的水平触发和边缘触发

一句话总结:水平触发下epoll_wait在文件描述符没有读写完会一直触发,而边缘触发是可读写时触发一次。 类别 情况 水平触发的非阻塞监听sockfd 高并发情况下,fd一个一个取,不会漏掉 边缘触发的非阻塞监听soc...

2017-11-04 09:50:47

阅读数 565

评论数 1

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