面试题演练

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到显示网页的过程

  • 1、输入网址
  • 2、DNS解析
  • 3、建立tcp连接
  • 4、客户端发送HTPP请求
  • 5、服务器处理请求 
  • 6、服务器响应请求
  • 7、浏览器展示HTML
  • 8、浏览器发送请求获取其他在HTML中的资源。

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官网背后发生了什么

  • 1、输入网址
  • 2、DNS解析
  • 3、建立tcp连接
  • 4、客户端发送HTPP请求
  • 5、服务器处理请求 
  • 6、服务器响应请求
  • 7、浏览器展示HTML
  • 8、浏览器发送请求获取其他在HTML中的资源。

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 : 显示详细信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值