问题
汉诺塔问题,条件如下:
1、这里有A、B、C和D四座塔。
2、这里有n个圆盘,n的数量是恒定的。
3、每个圆盘的尺寸都不相同。
4、所有的圆盘在开始时都堆叠在塔A上,且圆盘尺寸从塔顶到塔底逐渐增大。
5、我们需要将所有的圆盘都从塔A转移到塔D上。
6、每次可以移动一个圆盘,当塔为空塔或者塔顶圆盘尺寸大于被移动圆盘时,可将圆盘移至这座塔上。
请你求出将所有圆盘从塔A移动到塔D,所需的最小移动次数是多少。
不希望服务器超载,file descriptor是稀缺资源,如果出现file descriptor不足,问题很严重。
对于reactor模式,listening socket是一种特殊的IO对象。当有新连接到来时,此socket变为可读,epoll_wait会返回这一事件,然后在事件处理器中调用accept获得新连接的socket,但是如果本机的file descriptor已经用尽,则accept会返回EMFILE,标志accept调用失败
,新连接依旧在listen的连接池中没有取出来。既然没有socket文件描述符来表示这个连接,所以也不能close它。程序继续执行,调用epoll_wait。但是epoll_wait会立刻返回,因为前面的新连接还在连接池中等待处理,listening fd还是可读的,这样程序就陷入了busy loop中
。CPU占用率会达到100%,影响了服务器的性能。
面向对象的三大特点(封装,继承,多态)缺一不可。通常“基于对象”是使用对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说“基于对象”没有继承的特点
。没有了继承的概念也就无从谈论“多态”。所以当你判断一个新的技术是否是面向对象的时候,通常可以使用后两个特性来加以判断。
一种线程间同步的情形:线程A需要等某个条件成立才能继续往下执行,现在这个条件不成立,线程A就阻塞等待,而线程B在执行过程中使这个条件成立了,就唤醒线程A继续执行。
pthread_cond_wait(&pcond_, mutex_.getPthreadMutex());
一个Condition Variable总是和一个Mutex搭配使用的。一个线程可以调用pthread_cond_wait在一个Condition Variable上阻塞等待,这个函数做以下三步操作:
1. 解锁;如果没有解锁,`其他线程,没法进入临界区`,修改条件,条件将始终没法成立。
2. 等待通知;
3. 得到通知返回前重新加锁; 重新加锁,是`下面的解锁操作对应起来`
Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution and you may not use the same element twice.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2