把这些背下来,面试妥妥嘚

12 篇文章 0 订阅
11 篇文章 0 订阅

一、 引用和指针有什么区别?(描黑重点)

1.指针是取地址的方式,大小为4字节
引用是取别名的机制,大小取决于被引用对象的数据类型大小
1、指针可以为空,引用不可以为空
2、指针可以不初始化,引用必须初始化
3、指针可以改变指向,引用不能引用其他对象

4、可以定义指针的指针,不能定义引用的引用
5、可以定义指针的引用,不能定义引用的指针
6、可以定义指针的数组,不能定引用的数组,但是可以定义数组的引用

二、tcp,udp的区别?

               **TCP**      				      

1.传输控制协议,面向连接的服务(打电话)
2.安全、可靠(三次握手、响应+重传、四次挥手)
3.速度相对较慢。
4.一般应用在对安全性、完整性有严格要求的场景:FTP、SMTP、HTTP。
UDP

  1. 用户数据报文协议,面向无连接的服务(发短信)
  2. 不保证安全、可靠,但大多数情况下是可靠的
  3. 相对较快
  4. 流媒体(在线的视频、音频)。

c++与c的不同点

1.扩展名.cpp 和.c
2.编译器g++和gcc
3.面向过程思想和对象编程思想
4.支持运算符,函数重载(只看参数个数和参数类型)(C++函数在编译期间经历了换名的过程)
5.C++void* 不能给其他类型的指针赋值,必须强制类转换,但是其他类型的指针可以自动给 void*赋值
6.C++支持默认参数
7.C++struct的区别(有成员函数,能继承)
8.枚举类型检查更严格
9.C++bool是数据类型 C语言是stdbool.h头文件定义的
10.C++多了名字空间
11.C++多了支持泛型编程,模板
12.C++多了 支持异常处理(抛出异常)
13.多了new delete运算符(仍然支持malloc和free)
14.多了引用
面向过程编程:
关注的是问题解决的过程步骤(事情是如何解决的),算法
面向对象编程:
关注的是谁能解决问题(类),具备什么样的技能(成员函数)才能解决问题
1、虚函数
类的成员函数前加 virtual 这种函数就叫做虚函数。

**覆盖**
在子类会覆盖父类的虚函数。

**多态**
当子类覆盖了父类的虚函数时,通过父类指针指向子类对象时,调用虚函数,会根据具体的对象是谁来决定执行谁的函数,这就是多态。

覆盖的条件
必须虚函数
必须是父子类之间
函数签名必须相同(参数列表完全一致,const属性也会影响覆盖的结果)。
返回值必须是同类或父子类类(子类的返回什要能向父类隐式转换)。
访问属性不会影响覆盖
常函数属性也会影响覆盖

重载、隐藏、覆盖(重写)的区别

	**重载**:同一作用域下的同名函数,函数签名不同,构成重载关系。
	**覆盖**:符合一系列条件。(上面的条件)
	**隐藏**:父子类之间的同名成员如果没有形成覆盖,且成通过编译,必定构成隐藏。

指针的看法

	**一、**指针是一种数据类型(无符号整数,代表内存的标号),4|8字节大小
	**二、**指针用到的地方
	1、函数之间共享变量,把地址在函数之间传递(传参)
	2、堆内存无法取名字,只能与指针配合
	3、函数传参当要大于4字节是,可以把地址传过去(只需要4字节)
	**三、**指针危险
	野指针:指向内存不明确
	空指针:=NULL
	 内存泄漏:
   	我们把由于业务逻辑的错误导致无法释放的内存叫泄漏的内存。

C语言的优势和劣势

优势
1.C语言有指针,可以访问硬件,java没有,所以不能访问
2.速度快,(举例:windows,unix.linux系统都是C编写的)
3.代码量小
劣势
1.危险性高。
2.开发周期长。没有分装好的库
3.可移植性不强。

如何提高UDP的可靠性

1 提供超时重传,能避免数据报丢失。

2 提供确认序列号,可以对数据报进行确认和排序。

线程同步的方式

1.互斥量 2.信号量 3.条件变量

进程同步的机制及优缺点

1.信号量机制:
一个信号量只能置一次初值,以后只能对之进行p操作或v操作。
由此也可以看到,信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点。
2.自旋锁:
旋锁是为了保护共享资源提出的一种锁机制。
调用者申请的资源如果被占用,即自旋锁被已经被别的执行单元保持,则调用者一直循环在那里看是否该自旋锁的保持着已经释放了锁
自旋锁是一种比较低级的保护数据结构和代码片段的原始方式,可能会引起以下两个问题;
(1)死锁
(2)过多地占用CPU资源
3.管程:
信号量机制功能强大,但使用时对信号量的操作分散,而且难以控制,读写和维护都很困难。因此后来又提出了一种集中式同步进程——管程。其基本思想是将共享变量和对它们的操作集中在一个模块中,操作系统或并发程序就由这样的模块构成。这样模块之间联系清晰,便于维护和修改,易于保证正确性。
4.会合:
进程直接进行相互作用
5.分布式系统:
由于在分布式操作系统中没有公共内存,因此参数全为值参,
而且不可为指针。

宏函数与内联函数的区别(优缺点)?

   1. 宏函数不是真正的函数,只是代码替换,不会有参数压栈,出栈以及返回值,也不会检查参数类型,因此所有类型都可以使用,但这样会有安全隐患。
   2. 内联函数是真正的函数,被函数调用时会进行传参,会进行压栈、出栈,可以有返回值,并会严格检查参数类型但这样就不能同用,如果想被多种类

线程和进程的区别
1.线程就是进程中的执行路线,即进程内部的控制序列,或者说是进程的子任务****执行单位(进程就是正在运行的程序,它一个资源单位)。
2.线程不拥有自己的资源(唯一拥有的就是自己的栈空间),只拥有从属于进程的全部资源,所有资源分配都是面向进程的。
3.一个线程属于一个进程,一个进程可以有多个线程
4.多线程系统资源开销小,多进程资源开销大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值