- 博客(17)
- 收藏
- 关注
原创 go语言函数传递问题(map、切片、接口、chan)
一句话总结:map、切片、接口、函数类型、chan都是引用类型,作为函数参数传递不会复制一个副本。package mainimport ( "fmt")func change(a int) { a = 10}func changeMap(m map[int]string) { _, ok := m[1] if ok { m[1] = "ja
2017-11-26 23:00:04 2452 2
原创 go语言中select与switch的区别
一句话总结:switch主要用于表达式的比较判断,select主要用于通信即IO。package mainimport ( "fmt")func main() { key := 10 switch key { case 7: fmt.Println("7") case 10: fmt.Println("10") default
2017-11-26 22:52:10 651
原创 muduo小结
1、构想:非阻塞IO复用+每个线程负责一个事件循环+线程池2、简化类图(来源于作者):Buffer是TCPConnection成员,其设计用vector,包括预留+可读+可写三个部分。
2017-11-26 10:17:05 301
原创 go:*handler is pointer to interface, not interface
一句话总结:不能声明一个接口的指针,如同不能在C++中不能声明一个指向引用的指针。type handler interface { Do()}var h *handler //errorC++中不能声明一个指向引用的指针int&* p; //error
2017-11-24 23:25:38 2900
原创 go语言中的value receiver和pointer receiver
一句话总结:方法的接收者receiver是t T时,值可以是T活着*T;如果接收者是t *T时,值只能是*T。
2017-11-24 23:18:12 694
原创 找出字符数组中出现次数最多的字符
一道面试题,当时状态不太好,今天重新实现一下。1、暂不考虑最多出现的字符有多个的情况2、用map实现zhaojunyandeMacBook-Pro:~ zhaojunyan$ vim map.cpp zhaojunyandeMacBook-Pro:~ zhaojunyan$ g++ -o map map.cpp zhaojunyandeMacBook
2017-11-19 10:41:14 1389 1
原创 用10只小白鼠找出1000瓶液体中有毒的一瓶
一句话总结:用二进制排列的方法,2^10=1024>1000。想到这个方法后实现还是蛮简单的,1表示喝,0表示不喝0000 0000 0001:第一瓶药0000 0000 0010:第二瓶药0000 0000 0011:第三瓶药。。。。。。0011 1110 1000:第1000瓶药喝完之后,死去的小白鼠表示喝过这瓶毒药,为1,活着的为0。二进制组合代表的数字就
2017-11-19 09:28:59 7296 1
原创 static_cast与强制类型转换的区别
一句话总结:static_cast在编译时会进行类型检查,而强制转换不会。zhaojunyandeMacBook-Pro:~ zhaojunyan$ g++ -o sc sc.cpp sc.cpp:19:9: error:static_cast from 'A *' to 'B *', which are not related by inheri
2017-11-19 09:20:39 10003 1
原创 线程池的核心实现
一句话总结:用队列实现,生产者添加任务,消费者执行任务;注意原子性操作。#include #include #include #include #include using namespace std;#define THREAD_NUM 3#define QUEUE_SIZE 3typedef boost::function Task;queue queueTask
2017-11-14 20:43:29 276
原创 二叉树三种遍历的非递归算法
一句话总结:借用栈,注意后序遍历确认右子树遍历后才能遍历根。void preorderWithoutRecursion(BTNode* root){ if (NULL == root) { return; } BTNode* p = root; stack s; while (!s.empty() || p) { if (p) { cout data
2017-11-14 20:20:11 272
原创 go——奇怪的iota
一句话总结:const语句块的行索引,从0开始累加。注意与C++中枚举类的区分。1、iota从0开始,b、c依次等于累加的索引2、a1=13、d、e、f、g会等于上面的值,不累加,与枚举类不同。package mainimport "fmt"func main() { const ( a = iota b c a1 = 1 << iota b1 c
2017-11-12 11:46:20 424
原创 总结下进程间通信的方式
类别说明无名管道pipe仅能用于亲缘关系进程间通信,pipe函数可以创建读写管道,当父子进程可以相互收发消息时,注意自己发的消息不要被自己接收到了有名管道fifo以fifo文件作为通信媒介,与普通文件最大的不同在于fifo文件中的内容被读取后就没了,且只能以只读或者只写方式打开。信号可以通过
2017-11-04 17:49:00 367
原创 阻塞模式下socket连接connect超时后长达75秒,如何避免
一句话总结:设置非阻塞,用select等待一段时间看是否连接成功,连接成功再设回阻塞模式。注意select第一个参数一定要加1,否则描述符刚好不在集合当中,会出现超时返回0不可读不可写但send、recv正常的情况。server:#include #include #include #include #include #include #include #incl
2017-11-04 16:02:40 2893
原创 二分查找的递归和非递归实现
#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); } else if (a[mid] < val) { return bfind(a, val, mi
2017-11-04 14:32:38 236
原创 多线程死锁的产生原因及避免
一句话总结:资源竞争造成的无限等待,可通过加锁时效、死锁检测来避免资源竞争造成的无限等待:1、互斥条件:该进程拥有的资源,其他进程只能等待其释放2、不剥夺条件:该进程拥有的资源只能由其自己释放3、请求和保持条件:请求其他资源,同时自己拥有的资源又不放手4、循环等待:A等待B持有的资源,B等待A持有的资源,一直等待
2017-11-04 10:08:56 551
原创 聊聊epoll的水平触发和边缘触发
一句话总结:水平触发下epoll_wait在文件描述符没有读写完会一直触发,而边缘触发是可读写时触发一次。类别情况水平触发的非阻塞监听sockfd高并发情况下,fd一个一个取,不会漏掉边缘触发的非阻塞监听sockfd高并发情况下可能会有漏掉的情况水平触发的阻塞连接connfd
2017-11-04 09:50:47 1323 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人