06 2015 档案

摘要:unp27章节中的27.12中,我们的子线程是通过操作共享任务缓冲区,得到task的,也就是通过线程间共享的clifd[]数组,这个数组其实就是我们的任务数组,得到其中的connfd资源。我们对这个任务数组的操作,需要互斥量+条件变量达到同步的目的。。每个线程是无规律的从clifd得到任务,然后执行... 阅读全文
posted @ 2015-06-28 21:13 kkshaq 阅读(296) 评论(0) 推荐(0)
摘要:僵尸进程:本质是进程描述符task_struct;维护子进程的状态,包括子进程ID,终止状态以及进程的资源利用情况(cpu时间,内存)int wait(int*stat_loc):成功之后返回终止子进程的pid,失败返回-1,并设置errno1、wait调用堵塞进程直到有任一一个子进程终止,则立刻返... 阅读全文
posted @ 2015-06-25 21:48 kkshaq 阅读(1632) 评论(0) 推荐(1)
摘要:子进程不产生僵尸进程的方法:方法一:signal(SIGCHLD, SIG_IGN);父进程不必等待子进程结束,子进程由init进程负责回收因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源。如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给init进程去处... 阅读全文
posted @ 2015-06-25 20:54 kkshaq 阅读(910) 评论(0) 推荐(0)
摘要:父子进程共享文件描述符:此说法,其实是父子进程共享文件表项(父进程和子进程共享同一个filetableentry)由于子进程是父进程的拷贝,子进程会拷贝父进程的进程描述符中的文件描述符表,可以说继承父进程的文件描述字(files_struct中的structfile*fd_array[NR_OPEN... 阅读全文
posted @ 2015-06-25 20:05 kkshaq 阅读(2778) 评论(0) 推荐(0)
摘要:对于server端:以端口为通配符方式bind:对于服务器,bind(0,ip),则调用bind函数之后,就可以调用getsockname获取服务器得到的本地端口号以ip地址为通配地址bind,只有accept返回之后,调用getsockname(connfd,......)才会返回服务器得到的本地... 阅读全文
posted @ 2015-06-25 19:28 kkshaq 阅读(335) 评论(0) 推荐(0)
摘要:apue中:其中进程表项内部的数组又称为 进程打开文件表 另外一个角度:从linux内核角度开:task_struct是进程描述符对应上面的进程表项,在task_struct描述符中有struct file_struct*类型的变量file,指向struct file_struct结构。1.file... 阅读全文
posted @ 2015-06-25 17:03 kkshaq 阅读(394) 评论(0) 推荐(0)
摘要:deque supports const time insert and erase operations at the beginning or the end, insert or erase in the middle take linear time.vector在中间位置插入和删除操作时间... 阅读全文
posted @ 2015-06-24 21:20 kkshaq 阅读(3044) 评论(0) 推荐(0)
摘要:所谓的适配器就是底层利用仿函数,然后修改仿函数的接口,达到自己的目的;例如:templateclass binder1st的适配器,其本质是一个类,它的模板参数operation其实是仿函数类(仿函数其实是struct类),内部函数调用operator()(const typename Operat... 阅读全文
posted @ 2015-06-23 22:16 kkshaq 阅读(555) 评论(0) 推荐(0)
摘要:中断和异常:中断只代表异步中断,异常代表同步中断,这样系统调用是异常处理,不是中断处理。这里异常处理是可以休眠block的,因为异常处理所需的数据是存储在异常栈中,而每个进程都有一个异常栈,所以异常处理和进程是相关联的,这样异常处理可以block,被调度出去???同步的中断(比如系统调用、缺页异常)... 阅读全文
posted @ 2015-06-19 17:00 kkshaq 阅读(454) 评论(0) 推荐(0)
摘要:umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读(4)+写(2)+执行(1),同组的和其它用户有读写权限)基本都是说目录权限就用777-umask,文件权限就用666-uma... 阅读全文
posted @ 2015-06-18 10:16 kkshaq 阅读(375) 评论(0) 推荐(0)
摘要:class Solution {public: vector twoSum(vector &numbers, int target) { vector ret(2,-1); unordered_map m; //value->index map ... 阅读全文
posted @ 2015-06-15 20:50 kkshaq 阅读(126) 评论(0) 推荐(0)
摘要:map.find(key)获取map容器中指定键值x的元素,如果找到,返回此元素的迭代器,否则返回map::end()的迭代器(即查找到容器的末尾都没有找到此元素)。 阅读全文
posted @ 2015-06-15 20:25 kkshaq 阅读(130) 评论(0) 推荐(0)
摘要:阅读提示:如果有赶着去撸代码,玩dota/lol,把妹纸,内急……时间捉急又想吃快餐的同志,可以在直接跳过下面所有黑体字部分(因为黑体字部分都是写给我自己和个别基友看的)面经百度百科定义:面试经验。求职者把面试经验写下来发布在BBS上供他人参考。而我个人觉得解释为:面试经历更为恰当,毕竟自己仍是弱菜... 阅读全文
posted @ 2015-06-03 22:27 kkshaq 阅读(266) 评论(0) 推荐(0)
摘要:刚投简历的时候,能不能进腾讯是没多大把握,毕竟还有很多研究生,大神存在,听说腾讯需要自信乐观的人,面试的时候我也是抬头挺胸,整个面试都是微笑着说话的,尽管二面面试官很严肃.腾讯的面试地点在916公交的尽头,有点无语,但是应该是最豪的一个公司,几乎把整个酒店包了下来,还提供矿泉水。刚开始在大厅坐着等候... 阅读全文
posted @ 2015-06-03 22:15 kkshaq 阅读(1170) 评论(0) 推荐(0)
摘要:今年腾讯出手确实很早,足足比阿里校招实习生面试早了一个月(当然排除内推的)。我报的上海IEG后台开发,下面就来讲讲自己的实习面试经历。 3.22号腾讯在nd笔试,还好在市区,屁颠屁颠和同学都去了,之前看过腾讯的实习生招聘题目,感觉是很难的,不过这次选择题确没有历届那么难,倒是很基础,题型和之前差不多... 阅读全文
posted @ 2015-06-03 22:13 kkshaq 阅读(347) 评论(0) 推荐(0)
摘要:2015年3月开学开始就听说阿里会有内推,果不其然在师兄的引荐下推了菜鸟网络,但是在学校的BBS上看到了阿里云部门,而且要会C++,这使我更感兴趣,重新选择了方向,当然最后选择了阿里云。在此分享一下三面面试经历。一面:首先自我介绍,他会根据你的自我介绍问你东西,比如我自己说了自己数学建模竞赛情况还有... 阅读全文
posted @ 2015-06-03 22:08 kkshaq 阅读(259) 评论(0) 推荐(0)
摘要:第一轮:笔试。qq 的笔试题还是很有特色的,考察重点是数据结构,Unix,IQ,数据结构部分都是很基本的知识,如果你不会,那你就该检讨自己了。Unix部分,相对而言比较陌生,但也不是很难,是Unix方面很基本的东西。这些东西在面试中又一再提到。IQ,比较难了,尤其是最后一个选做题,题目大家应该都知道... 阅读全文
posted @ 2015-06-03 21:57 kkshaq 阅读(220) 评论(0) 推荐(0)
摘要:由于子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束. 那么会不会因为父进程太忙来不及wait子进程,或者说不知道子进程什么时候结束,而丢失子进程结束时的状态信息呢? 不会。因为UNIX提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息,就可以得到。这种... 阅读全文
posted @ 2015-06-03 21:36 kkshaq 阅读(210) 评论(0) 推荐(0)
摘要:内核态和用户态的切换:用户态到内核态的转换:1、进行系统调用,2、异步中断,3、外部硬件中断检查特权级别的变化:当异常发生在用户态,而异常处理函数则必须运行在内核态,则此时必须调用内核态的堆栈(系统调用必然是发生特权级的变化),步骤是,将进程的TSS段中的esp0和ss0赋值给esp,ss寄存器于是... 阅读全文
posted @ 2015-06-02 22:43 kkshaq 阅读(4546) 评论(0) 推荐(0)
摘要:进程切换分两步:1.切换页目录以使用新的地址空间2.切换内核栈和硬件上下文对于linux来说,线程和进程的最大区别就在于地址空间,对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。切换的性能消耗:1、线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但... 阅读全文
posted @ 2015-06-02 21:29 kkshaq 阅读(7296) 评论(0) 推荐(1)
摘要:#define switch_to(prev,next,last) do { \ unsigned long esi,edi; \ asm volatile("pushfl\n\t" \ "pushl %%ebp\n\t" \ ... 阅读全文
posted @ 2015-06-02 16:26 kkshaq 阅读(721) 评论(0) 推荐(0)
摘要:中断门和陷阱门在使用上的区别不在于中断是外部产生的或是由CPU本身产生的,而是在于通过中断门进入中断服务程序时CPU会自动将中断关闭,也就是将CPU中EFLAGS寄存器的IF标志位清成0,以防嵌套中断的发生;而在通过陷阱门进入服务程序时则维持IF标志位不变。这就是中断门和陷阱门的惟一区别。系统调用用... 阅读全文
posted @ 2015-06-01 22:53 kkshaq 阅读(1827) 评论(0) 推荐(0)
摘要:linux线程私有的部分:每个线程都拥有一个独立的程序计数器,进程栈和一组进程寄存器linux进程切换时通过TSS段,TSS中的esp0和ss0都是系统初始化设置的,指向进程创建时候,分配的栈空间。当进程切换的时候,在内核态下才进行进程切换,在0.11版本中,当前进程的寄存器被压入当前进程的TSS中... 阅读全文
posted @ 2015-06-01 22:10 kkshaq 阅读(183) 评论(0) 推荐(0)
摘要:处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;3、用户态,运行于用户空间;一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。用户级上下文: 正文、数据、用户堆栈以及共享存储... 阅读全文
posted @ 2015-06-01 17:22 kkshaq 阅读(6272) 评论(0) 推荐(0)
摘要:题目:有一个数组 int array[100];本来应该存放的数为1~100,但是有两个数据a,b丢失了,值变成了0。问如何找出丢失的那两个数?附带条件不能开辟额外的空间。解题思路:常见的两种解法有:1.计算a+b和a*b的值,然后在解方程求解(但是这样会使得中间某个变量过大)。2.使用bit位来标... 阅读全文
posted @ 2015-06-01 16:42 kkshaq 阅读(1516) 评论(0) 推荐(0)
摘要:int write(intfd, const void *buf, size_tcount);如果是堵塞fd,则返回值是count,或者是0,-1;如果是非堵塞fd,则返回值是写入的字节数,或者是0,-1;非堵塞fd,在缓冲区大小小于count时候,不堵塞直接返回写入的字节数。无论是是read还是w... 阅读全文
posted @ 2015-06-01 11:20 kkshaq 阅读(209) 评论(0) 推荐(0)