概念题整理

本文详细解析了SSH服务在网络中断时中断的原因,介绍了如何通过使用screen或disown命令来避免程序中断,并解释了静态链接库与动态链接库的区别。此外,文章还对比了指针与引用、进程与线程的区别,并提供了海量数据处理和解决Hash冲突的方法。最后,文章探讨了C++ STL中vector的实现机制,包括push_back和clear成员函数的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

11、linux/unix远程登陆都用到了ssh服务,当网络出现错误时服务会中断,linux/unix端的程序会停止。为什么会这样?说下ssh的原理,解释中断的原理。

答案一:
可以ssh到服务器上,然后pstree一下。
    ssh会启动一个bash,然后在bash中,所有程序都是bash fork()然后exec()出来的,也就是说父进程都是这个bash,如果ssh断了,ssh会向所有子进程发送SIGTERM信号,然后所有子进程退出。
    如果不想ssh断了之后程序不中断,要不然就用screen,要不就disown一下使所有background的进程的父进程变为init。
    如何使用screen:ssh上去,然后screen,想要退出ssh之前,先detach screen ctrl-a ctrl-d,然后screen的父进程变成了init,而不是现在的sshd,下次ssh上去,screen -r,又重新变成当前bash的子进程了,screen的子进程一直在运行,原因是screen一直没有退出 。
答案二:
网络中断相当于跑程序的控制台关闭。这时控制台里的程序会被关闭。你可以用nohup 程序名 &,这样即使控制台关闭程序照样在后台运行。例如:nohup home/root/run.sh &


14、动态链接库与静态链接库的区别
静态链接库是.lib格式的文件,一般在工程的设置界面加入工程中,程序编译时会把lib文件的代码加入你的程序中因此会增加代码大小,你的程序一运行 lib代码强制被装入你程序的运行空间,不能手动移除lib代码。
动态链接库是程序运行时动态装入内存的模块,格式*.dll,在程序运行时可以随意加载和移除,节省内存空间。
  在大型的软件项目中一般要实现很多功能,如果把所有单独的功能写成一个个lib文件的话,程序运行的时候要占用很大的内存空间,导致运行缓慢;但是如果将功能写成dll文件,就可以在用到该功能的时候调用功能对应的dll文件,不用这个功能时将dll文件移除内存,这样可以节省内存空间。


15、指针与引用的区别
相同点:
1. 都是地址的概念;

指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
区别:
1). 指针是一个实体,而引用仅是个别名;
2). 引用使用时无需解引用(*),指针需要解引用;
3). 引用只能在定义时被初始化一次,之后不可变;指针可变;
4). 引用没有 const,指针有 const;
5). 引用不能为空,指针可以为空;
6). “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
7). 指针和引用的自增(++)运算意义不一样;
8).从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。


16、进程与线程的区别
①从概念上:
进程:一个程序对一个数据集的动态执行过程,是分配资源的基本单位。
线程:一个进程内的基本调度单位。
线程的划分尺度小于进程,一个进程包含一个或者更多的线程。
②从执行过程中来看:
进程:拥有独立的内存单元,而多个线程共享内存,从而提高了应用程序的运行效率。
线程:每一个独立的线程,都有一个程序运行的入口、顺序执行序列、和程序的出口。但是线程不能够独立的执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
③从逻辑角度来看:(重要区别)
多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但是,操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理及资源分配。

17、函数调用入栈出栈的过程。
18、c++对象模型与虚表。
19、海量数据处理,以及如何解决Hash冲突等问题。
23、C++中虚拟函数的实现机制。
26、tcp/ip的那几层协议,IP是否是可靠的?为什么? 
27、进程和线程的区别和联系,什么情况下用多线程,什么时候用多进程?
28、指针数组和数组指针的区别。
30、最近在实验室课题研究或工作中遇到的技术难点,怎么解决的?
31、sizeof和strlen的区别。
32、malloc-free和new-delete的区别
31、sizeof和strlen的区别。
32、malloc-free和new-delete的区别

34、堆和栈的区别。

35、描述函数调用的整个过程。

假设有一台迷你计算机,1KB的内存,1MHZ的cpu,已知该计算机执行的程序可出现确定性终止(非死循环),问如何求得这台计算机上程序运行的最长时间,可以做出任何大胆的假设。

38、C++ STL里面的vector的实现机制,
1).当调用push_back成员函数时,怎么实现?
(粗略的说@owen,内存足则直接 placement new构造对象,否则扩充内存,转移对象,新对象placement new上去。具体的参见此文:http://blog.youkuaiyun.com/v_july_v/ ... 81522
2).当调用clear成员函数时,做什么操作,如果要释放内存该怎么做。
(调用析构函数,内存不释放。 clear没有释放内存,只是将数组中的元素置为空了,释放内存需要delete。)

44、C++ STL中vector的相关问题:
    (1)、调用push_back时,其内部的内存分配是如何进行的?
    (2)、调用clear时,内部是如何具体实现的?若想将其内存释放,该如何操作?

45、正常用户端每分钟最多发一个请求至服务端,服务端需做一个异常客户端行为的过滤系统,设服务器在某一刻收到客户端A的一个请求,则1分钟内的客户端任何其它请求都需要被过滤,现知每一客户端都有一个IPv6地址可作为其ID,客户端个数太多,以至于无法全部放到单台服务器的内存hash表中,现需简单设计一个系统,使用支持高效的过滤,可使用多台机器,但要求使用的机器越少越好,请将关键的设计和思想用图表和代码表现出来。

47、如何快速访问ipv6地址呢?ipv6地址如何存放?

48、正常用户端每分钟最多发一个请求至服务端,服务端需做一个异常客户端行为的过滤系统,设服务器在某一刻收到客户端A的一个请求,则1分钟内的客户端任何其它请求都需要被过滤,现知每一客户端都有一个IPv6地址可作为其ID,客户端个数太多,以至于无法全部放到单台服务器的内存hash表中,现需简单设计一个系统,使用支持高效的过滤,可使用多台机器,但要求使用的机器越少越好,请将关键的设计和思想用图表和代码表现出来。

50、线程和进程区别和联系。什么是“线程安全”

51、C和C++怎样分配和释放内存,区别是什么





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值