1. C++ 看过哪些书
2. 找到倒数第二个节点
3. 一个指针指向的内容经常变化 , 如何防止编译器去优化它
4. Static 的作用
答:1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可)
static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏.
2.static的第二个作用是保持变量内容的持久。(static变量中的记忆功能和全局生存期)
3.static的第三个作用是默认初始化为0(static变量)
4.static的第四个作用:C++中的类成员声明static(有些地方与以上作用重叠)
在类中声明static变量或者函数时,初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员,这样就出现以下作用:
(1)类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致 了它仅能访问类的静态数据和静态成员函数。
(2)不能将静态成员函数定义为虚函数。
(3)由于静态成员声明于类中,操作于其外,所以对其取地址操作,就多少有些特殊 ,变量地址是指向其数据类型的指针 ,函数地址类型是一个“nonmember函数指针”。
(4)由于静态成员函数没有this指针,所以就差不多等同于nonmember函数,结果就 产生了一个意想不到的好处:成为一个callback函数,使得我们得以将C++和C-based X W indow系统结合,同时也成功的应用于线程函数身上。 (这条没遇见过)
(5)static并没有增加程序的时空开销,相反她还缩短了子类对父类静态成员的访问 时间,节省了子类的内存空间。
(6)静态数据成员在<定义或说明>时前面加关键字static。
(7)静态数据成员是静态存储的,所以必须对它进行初始化。 (程序员手动初始化,否则编译时一般不会报错,但是在Link时会报错误)
(8)静态成员初始化与一般数据成员初始化不同:
初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆;
初始化时不加该成员的访问权限控制符private,public等;
初始化时使用作用域运算符来标明它所属类;
所以我们得出静态数据成员初始化的格式:
<数据类型><类名>::<静态数据成员名>=<值>
(9)为了防止父类的影响,可以在子类定义一个与父类相同的静态变量,以屏蔽父类的影响。这里有一点需要注意:我们说静态成员为父类和子类共享,但我们有重复定义了静态成员,这会不会引起错误呢?不会,我们的编译器采用了一种绝妙的手法:name-mangling 用以生成唯一的标志。
乐视二面 :
1. 服务器 A 有 10 个文件 , 在服务器 B 写一个脚本 , 传输这 10 个文件 , 并合并到一个文 件上
2. 项目相关
一点资讯一面 :
1. 写一个字符串转浮点型 .
2. 项目相关 .
一点资讯二面 ( 卒 ):
1. 线程和进程的区别以及理解 , 哪一个更好写 , 哪一个通信成本更低
2. 中序非递归遍历二叉树写代码 , 后序非递归遍历二叉树 , 的两个栈的实现
3. select 的描述符一次使用之后 , 下一次还会继续在描述符集里面吗 .
4. epoll 的两种触发方式 , 以及哪一种效率更高 ,
5. accept 的非阻塞返回链接的套接字 , 怎么知道此套接字准备好了 .
6. 项目相关
百度一面 :
1. 求序列的最大乘积子序列
2. 有大量的 URL 去重 ( 布隆过滤器 )
3. 写一个不能被继承的类
百度二面 :
1. 说一下这个项目干了什么事 ...
2. 网络分几层 , 每层存在的意义 , 为什么需要这一层 , 不要它会出现什么问题
3. 多线程和多进程的区别
4. TCP 三次握手 ( 如果两次怎么办 ), 四次挥手
5. 服务器重启的时候可能启动不了 , 是为什么 ( 考点 : 此时 fd 正在和客户释放链接 , 由 于关闭的套接字 2 分钟内不能使用 , 存在启动不了的问题 , 解决办法 , 设置一个 socket 选项 / 具体忘了 )
6. 网络编程的客户端和服务器的套接字结构 . 以及 accept() 返回的什么 , 以及如何使 服务器并发处理数据 ( 多线程 , 多进程 ,epoll/select)
7. Epoll/select 的区别
8. fork 的返回值是什么
9. 数据库了解吗 ,mysql 引擎 ,redis 的操作
10. 会哪些数据结构 , 我说得栈 , 队列 , 树 , 图 , 哈希表 , 跳跃表 .
11. 栈和队列的区别
12. 平衡二叉树是什么 , 它的查找复杂是多少 , 怎么插入 , 旋转以及平衡二叉树和跳跃 表相比的优劣 ,
13. 跳跃表的实现原理
14. 解决哈希冲突的办法
15. 解释一下多态 , 并写一个多态的例子 , 说明在一个类中的默认函数有哪些 , 以及复制构造函数和赋值函数 operate=() 的区别 , 以及什么时候用到 .
A a(b) 和 A a=b 都是复制构造函数 /A a=b 是用 operate=
16. 平时如何学习一个新技术
百度三面
1. 写一个 char* strcpy(char *s,int n) 函数 ,[ 考点 : 注意判断有效输入和 malloc 返回空 ]
2. 用数据说明 ,python 路由任务有什么优势
3. 论文中用到了什么算法 , 迪加斯科单源最短路径 , 详细讲讲此算法的核心思想
4. 在文件中每行都有时间戳 , 计算每秒输入了多少行 ( 当时说了 python 字典的方法和 grep ..|wc -l)
5. 讲一下项目中的服务器的后台架构 , 负载均衡使用的什么 (nginx), 以及我负责的模 块
6. 项目中最有成就的一件事
7. 平时喜欢干啥 , 能来实习吗 , 巴拉巴拉巴拉
美团一面 :
1. linux 的 TOP 命令
2. 改变文件权限的命令 chmod, 以及 chmod 755 代表的意义
***
*****
***
*
4. 一个村子 , 生孩子 , 直到生一个女孩才停止 , 问生出的男女比例
5. 进程和线程的区别
6. 进程间通信方式 , 以及它们什么时候使用
7. 线程的几种状态 , 以及画一个状态转换图 ,
8. linux 中如何打开一个文件 , 如何处理一个正在动态增长的文件
9. 造成死锁的条件 , 以及如何解决死锁问题
10. TCP3 次握手 , 为什么是 3 次 , 哪些协议简历在 TCP 上的
11. TCP 协议如何进行拥塞控制
12. inode 和 block
13. 找到数组第一个出现一次的值 ( 剑指 offer)
美团二面 :
1. 项目架构以及项目设计 , 是否有可以改进的地方
美团三面(卒):
1. 十进制 IP 地址转整形
华为一面 :
1. 软件路由器的程序架构
2. C/C++ 基础知识 , 如构造函数不能是虚函数 ,sendmes 和 postmes 分别是阻塞和非阻 塞 ,
1. 一个 python 相关的程序问输出 :
def fun(a=[]):
a.append(1)
print a
if __name__ == '__main__':
fun([])
fun([])
fun([])
fun()
fun()
fun()
2. 写一个程序 , 有两个有序数组 A,B, 找到第 k 大的数 ( 最后想到复杂度 lgn 的算法 )
3. 熟悉数据库吗 , 回答只是会用 , 以及知道 redis 的底层数据结构
4. 爬虫使用到什么程度 ( 只会抓取静态网页 ....)
今日头条二面 :
1. 说一下实习项目 , 巴拉巴拉巴拉
2. 写一个程序 , 给定一个数组 , 有正数负数 , 找到 X+Y+Z=0 的这样的组合 , 一个就 OK( 想 到了复杂度 O(n^2)+ 辅助空间 O(n) 的 , 以及复杂度 O(n^2*lgn) 的 ), 然后手写 O(n^2*lgn) 的算法
今日头条三面 :
1. 写一个程序 , 找到一个数组中所有数的最靠近它的第一个大于它的数 , 如 2,9,3,5,2 输出 0,9,9,5( 提示了很久 , 很久 , 很久才想到 O(n) 的方法 )
2. 设计一个系统 , 一个下拉动作可以拉出所关心的最近的 10 条信息 .( 核心是为每个 用户创建一个链表存储数据 )
3. 对 1 亿个被关注的主题 , 并发量 1000,5 亿用户接收 , 会存在什么问题 .( 如果对每个 用户的数据存储结构上锁 , 会有 5 亿个锁 , 太浪费资源 , 而并发量只有 1000, 所以 只用维护一个数据结构 , 如数组 , 长度 1000, 来管理被访问的数据结构 , 这样只需 要一个锁 )