1. 进程间通信的方法有哪些(高频出现)

  • 匿名管道
    半双工 单向流动 一般多用于父子进程之间通信

步骤:
[1] 父进程创建管道,得到两个⽂件描述符指向管道的两端
[2] 父进程fork出子进程,⼦进程也有两个⽂件描述符指向同⼀管道。
[3] 父进程关闭fd[0],子进程关闭fd[1],即⽗进程关闭管道读端,⼦进程关闭管道写端(因为管道只支持单向通信)。⽗进程可以往管道⾥写,⼦进程可以从管道⾥读,管道是⽤环形队列实现的,数据从写端流⼊从读端流出,这样就实现了进程间通信。

  • 有名管道
    半双工通信方式 但是允许无血缘关系的进程之间进行通信

  • socket
    同一主机内可以通信, 不同主机间也是可以的(网络通信)

  • 信号
    接收事件发生的信号

  • 信号量
    锁机制,进程同步

  • 消息队列

  • 共享内存
    多个进程访问同一片内存,效率高

2. 进程与线程的区别(高频出现)

[1] 进程是操作系统资源管理的最小单位。进程有单独的地址空间
[2] 线程是进程的一条执行路径,没有自己的地址空间。线程还是有自己的局部变量和堆栈的
[3] 简言之,一个程序至少有一个进程进程,一个进程至少有一个线程。
[4] 线程不能够独立执行

3. 同一个进程的线程有哪些资源是可以共用的,有哪些是独占的(重中之重)

  • 共享的
    进程的代码段、进程的公有数据、进程打开的文件描述符、信号的处理器、进程的当前目录、用户id和进程组id

  • 独占的
    线程id、 寄存器组的值、线程堆栈、错误返回码、线程的信号屏蔽码、线程优先级

4. TCP三次握手分别发送了哪些数据(三次握手高频出现)

戴知行和钱巨头的腾讯面试
戴知行和钱巨头的腾讯面试

5. hash函数处理冲突的方法有哪两种(高频出现)

6. 信号和信号量的区别在哪

1.信号:(signal)是一种处理异步事件的方式。信号时比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程外,还可以发送信号给进程本身。linux除了支持unix早期的信号语义函数,还支持语义符合posix.1标准的信号函数sigaction。

2.信号量:(Semaphore)进程间通信处理同步互斥的机制。是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。

7. 最大堆的实现原理

https://128kj.iteye.com/blog/1728555

8. 冒泡排序的实现(各种排序重中之重,高频出现)

    public static void bubbleSort(int[] a ,int n)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=1;j<n-i;j++)
            {
                if(a[j-1] > a[j])
                {
                    int temp = a[j-1];
                    a[j-1] = a[j];
                    a[j] = temp;
                }
            }
        }
    }

9. 寻找范围在0-100000的数中有哪些重复(腾讯贼喜欢问这种海量数据处理的问题)

位图法

10. 哪些方法监控磁盘(我之前也被问过)

iostat命令

11. iostat中的svctm和wait time分别表示什么(我之前也被问过)

https://www.jianshu.com/p/bc1713ca8d18

await    I/O 请求的平均等待时间,单位为毫秒。这个时间包括请求队列(这个概念很重要)消耗的时间和为每个请求服务的时间
svctm    I/O 请求的平均服务时间,单位为毫秒(这个数据不可信!)
%util    处理 I/O 请求所占用的时间的百分比,即设备利用率。I/O请求期间CPU时间的百分比(即设备的带宽利用率)。当这个值接近100%时,表示磁盘I/O已经饱和

12. 除了上课和书籍,获取知识的途径还有哪些(我也被问过,开放性题目)

13. 然后问我有什么想问的(肯定会被问的一个问题,我也不知道这里应该问什么)

14. RDMA的最大带宽

https://zhuanlan.zhihu.com/p/37669618

15. RDMA与TCP之间的区别在哪,分别少了哪几次拷贝。

16. RDMA write的实现原理。

17. 磁盘IOPS达到多少。

18. c++内存管理的5种方法,分别用来干什么

19. 多态的实现原理,关键字

20. 虚函数的虚函数表在什么时候创建。

21. 虚函数和纯虚函数的区别

定义一个函数为虚函数,不代表函数为不被实现的函数。
定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
定义一个函数为纯虚函数,才代表函数没有被实现。

总结:
1、纯虚函数声明如下: virtual void funtion1()=0; 纯虚函数一定没有定义,纯虚函数用来规范派生类的行为,即接口。包含纯虚函数的类是抽象类,抽象类不能定义实例,但可以声明指向实现该抽象类的具体类的指针或引用。
2、虚函数声明如下:virtual ReturnType FunctionName(Parameter);虚函数必须实现,如果不实现,编译器将报错,错误提示为:
error LNK****: unresolved external symbol “public: virtual void __thiscall ClassName::virtualFunctionName(void)”
3、对于虚函数来说,父类和子类都有各自的版本。由多态方式调用的时候动态绑定。
4、实现了纯虚函数的子类,该纯虚函数在子类中就编程了虚函数,子类的子类即孙子类可以覆盖该虚函数,由多态方式调用的时候动态绑定。
5、虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。
6、在有动态分配堆上内存的时候,析构函数必须是虚函数,但没有必要是纯虚的。
7、友元不是成员函数,只有成员函数才可以是虚拟的,因此友元不能是虚拟函数。但可以通过让友元函数调用虚拟成员函数来解决友元的虚拟问题。
8、析构函数应当是虚函数,将调用相应对象类型的析构函数,因此,如果指针指向的是子类对象,将调用子类的析构函数,然后自动调用基类的析构函数。

有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。
定义纯虚函数就是为了让基类不可实例化化
因为实例化这样的抽象数据结构本身并没有意义。
或者给出实现也没有意义
实际上我个人认为纯虚函数的引入,是出于两个目的
1、为了安全,因为避免任何需要明确但是因为不小心而导致的未知的结果,提醒子类去做应做的实现。
2、为了效率,不是程序执行的效率,而是为了编码的效率。

22. 了解云服务吗,对云服务了解多少。

23. 讲讲Docker

24. 拥塞控制

戴知行和钱巨头的腾讯面试

25. linux的操作,查看进程状态,写一个100的循环读取文件的末尾

26. 网络,三次握手以及四次挥手的详细过程,然后SYCN网络攻击,怎么解决

27. 平衡二叉树 插入之后会发生什么 怎么维持平衡

28. 算法 归并排序 0-20的数大概1000个,O(n)排序 100M的数据 20M的内存 怎么找中位数(这个好像是剑指offer里面的,懵逼了) 50个1-50的不同的数(实际就是1,2,3…50打乱),不许新建数组,不许直接写结果1,2,3…50,O(n)的时间完成

29. 数据库索引和b+树,b-树和b树。

(心中完全没有b树(逼数))

相关文章:

  • 2021-06-24
  • 2022-01-21
  • 2021-07-09
  • 2021-12-07
  • 2022-01-21
  • 2021-08-11
猜你喜欢
  • 2021-10-25
  • 2021-06-10
  • 2021-04-16
  • 2021-09-02
相关资源
相似解决方案