8、socket常用的API?客户端需不需要调用bind?
socket,bind,listen,accept四个API函数,客户端只需要socket和conncect,不需要bind
9、三次握手的过程?序号是什么?发送方和接收方如何确定序号?丢包了会怎么样?
滑动窗口机制
10、Linux内核中的一些和网络相关的定时器你了解吗?(完全不了解)
这个比较深和难
11、你说你熟练使用gdb,常用指令有哪些?如何调试多线程?、
gdb调试
12、对那些安全技术比较理解?(答:对汇编比较了解,反汇编分析得比较快)
13、printf和sprintf的区别?strcpy和strncpy的区别?栈溢出和堆溢出的区别?
sprintf将格式化数据写入字符串中,strcpy不完全,空间可能会不够,strncpy更完全
2、远程共享桌面写代码:将由数字组成的字符串转化为数字
实现atoi函数
7、gdb常用的指令?n和s的区别?
8、Linux终端打开了一个很大的文件占满了屏幕,如何获取你想要看到的内容?(我回答的用grep搜出来,面试官说把它重定位到一个文件里即可)
9、硬链接和软链接的区别
10、输入URL到显示网页的过程
11、三次握手的过程
第一次
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
12、说一下快排的思想?如何优化?平均情况?最坏情况?
最环情况时间复杂为O(N^2), 优化的方法是使用随机数优化pivot
1、多核情形下的中断(问项目)
2、你觉得中断有什么用?为什么需要中断?Linux中的中断是怎么回事?
3、多个中断到来时,如何判断其优先级?
4、网卡上的硬中断和软中断是怎么回事?如何查看软中断?(完全懵逼)
5、CPU接收硬中断和软中断的过程?(懵逼)
6、Linux下如何查看CPU的使用情况?
top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲 q 键一次)。
7、内存泄漏和内存溢出的区别?
1.1内存溢出:(Out Of Memory---OOM)
系统已经不能再分配出你所需要的空间,比如你需要100M的空间,系统只剩90M了,这就叫内存溢出
例子:一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出。比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出。说白了就是我承受不了那么多,那我就报错,
1.2内存泄漏: (Memory Leak)----》强引用所指向的对象不会被回收,可能导致内存泄漏,虚拟机宁愿抛出OOM也不会去回收他指向的对象
意思就是你用资源的时候为他开辟了一段空间,当你用完时忘记释放资源了,这时内存还被占用着,一次没关系,但是内存泄漏次数多了就会导致内存溢出
8、哈希是什么?哈希冲突是什么?如何解决?
散列函数,两个值被映射到同一个位置,开链法,开放寻址法
9、进程间同步方式有哪些?
10、如何检查上亿条URL中是否有重复的URL?
通过Hash函数进行Map reduce
- 用过什么设计模式?手写一个工厂模式吧(基础不扎实,写出了工厂,忘了怎么进行多态调用)
- 如果我用txt写个Python程序,第一行需要写什么(这个真是知识盲区,刚才在网上查是要写出解释器路径,但是面试官提到了头文件什么的,还请会的大佬赐教)
- OSI参考模型分为几层?每层都有什么协议(就问到传输层协议)
- TCP和UDP的特点与不同,各自的应用场景
2.linux熟悉的命令
3.linux中查询一个文件第三列并按顺序显示
4.说下const,static,typeof,violiate
最后一个是防止编译器优化
5.说下const int * a;int const *a;int *const a;const int *const a;
前两个都是a指向一个常量
第三个是a指针本身是一个常量,a不可以修改
最后一个是a本身也是常量,指向的也是常量
6.对内存对齐的理解,为什么要内存对齐
提高读取速度
7.给了一个结构体,问占多少内存
8.vector是怎么扩展内存的,用一个clear()能不能释放掉所有内存
找到另外一块两倍大小的地址,拷贝过去,clear()并没有释放掉内存。
9.模板的编译过程,模板是什么时候实例化的
10.说下多线程常用的函数
11.线程同步信号量,线程锁是怎么工作的
12.如何保证多线程的读写安全
13.访问vivo官网背后发生了什么
14.说一下TCP超时重传
15.TCP快重传机制了不了解
16.单例模式会不会写
17.你在平时工作中如何与人合作的,领导能力怎么样
18.一道算法题,给了几个小孩,每个小孩满足需要的度不同,给了几块饼干,每个饼干可以提供的满足度不同,求能满足最多小孩的分配方式
1 C++的内存分配有哪些?
内存的三种分配方式:
1. 从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储。
2. 在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限。
3. 在堆区分配:动态分配内存。用new/malloc时开辟,delete/free时释放。生存期由用户指定,灵活。但有内存泄露等问题。
2 对线程池有什么了解?
线程池,简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用,当线程池中的线程都在处理任务时,就没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行,下面是线程池的工作原理图:
3 对哈希有什么了解,讲一下实现?
4 讲一下三次握手,四次挥手?
5 场景题:一台服务器大量连接变成close_wait状态,这是什么问题?
6 场景题:有两个场景,一个是计算密集型服务,一个是I/O密集型服务,分别设计两个线程池,哪个要设计线程池更大些?线程池设计多大合适?
7 你了解哪些数据结构?
8 你了解哪些排序?手写下快排?
9 nginx服务器多进程模式下采用单线程是为什么?
10 mysql的内联接和外联接的区别?
11 linux查看占用某个端口的进程号的命令?
netstat -tunpl |grep 端口号
12 linux中tar -zxvf中zxvf各代表什么含义?
分别是四个参数
x : 从 tar 包中把文件提取出来
z : 表示 tar 包是被 gzip 压缩过的,所以解压时需要用 gunzip 解压
v : 显示详细信息