新的一天开始啦,加油~
算法题(英雄哥九日集训-第二天)
1. 求1+2+…+n
这一题貌似使用等差数列求和公式的那一条公式就行,对哦,题目不给使用。还以为很简单,没想到,运用到了逻辑运算符的短板效应,第一次接触,长知识了。
代码详情:
class Solution {
public:
int ans = 0;
int sumNums(int n) {
bool x = (n > 1) && sumNums(n - 1); //当&&左边为false时就不会触发后一个
ans += n;
return ans;
}
};
通过情况:
2. 2 的幂
现在这种题一看,就大概知道是使用位运算符,2的幂转成二进制都是第一个数字为一其他都为零,类似,2的二进制10,4的二进制100,利用这个性质,将它与减一后进行与位运算,结果为零就是正确。
代码详情:
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && (n & (n-1)) == 0;
}
};
通过情况:
3. 3 的幂
还以为跟上一题一样,结果想了好久,都没想出来,看题解,使用了普通的数学运算,或是取巧的方法,这里用取巧的方法进行解题,int是4字节,最大的3的幂是1162261467,所以用这个数取余n等于零就代表,n是3的幂。
代码详情:
class Solution {
public:
bool isPowerOfThree(int n) {
return n > 0 && 1162261467 % n == 0;
}
};
通过情况:
4. 4的幂
我4的幂就是2的幂,直接用2的幂的代码,发现不对,知道2的幂不一定是4的幂,还有再多一个判断条件才行。
代码详情:
class Solution {
public:
bool isPowerOfFour(int n) {
return n > 0 && (n & (n - 1)) == 0 && n % 3 == 1;
}
};
通过情况:
面试题
1. const的用法
什么是const?名叫常量限定符,用来限定特定变量,使其不可被编译器修改。
怎么使用const:
1. const修饰基本数据类型,例如const int a = 1;
2. const修饰指针,分为const int* p(指针常量)、int* const p(常量指针)、const int* const p(既修饰常量又修饰指针)。
const修饰引用,无论怎么修饰都是一样的。
3. const修饰函数形参,const修饰函数返回值,const 修饰成员变量,而const放在函数后面,例如:T method() const{};意义为不能修改所在类的任何变量。
2. epoll、select、poll区别? / 什么是IO多路复用? / epoll 水平触发(LT)与 边缘触发(ET)的区别?
啥是epoll、select、poll?首先,要先解释啥是IO多路复用?一种同步IO模型,实现一个线程可以监视多个文件句柄。多路指网络连接,复用指同一个线程。
那为什么需要IO多路复用?这就要讲BIO(同步阻塞)、(同步非阻塞)NIO这两种实现方式了。
BIO(同步阻塞):服务端采用单线程,无法并发处理,采用多线程,占用大量资源。
NIO(同步非阻塞):服务端收到请求后,加入fds集合,每次轮询fds集合recv(非阻塞)数据,没有数据立即返回错误,但每次轮询会很浪费cpu。
以上两种存在一定的问题,从而产生IO多路复用。
IO多路复用:服务端采用单线程通过select/epoll等系统调用获取fd(文件描述符)列表,遍历有事件的fd进行accept/recv/send,使其能支持更多的并发连接请求。
所以epoll、select、poll是IO多路复用的系统调用。它们之间的区别:
epoll LT 与 ET模式:
LT是默认模式,而ET是高速模式,LT模式下,只有这个fd有数据可读,每次epoll_wait都返回它的事件。ET模式下,只会提示一次,直到下次再有数据流之前都不会再提示。
又到了23点30分,今天又松懈了,看了网易N星计划宣讲会,更加加大了我进网易的决心,决定要收收心,努力学习!!!明天加油~