前几天阿里的电话初面,面的是基础平台开发
不仅问了获奖项的含金量如何,队伍中承担的角色,发挥了什么作用,获奖是因为什么?
项目经历中技术比较精彩的部分,有什么可以改进的点?
如何快速了解一个课题,用什么方式?
这些简历面之外,还问了一些相关的问题
C++和C有什么核心区别,有什么重要的特性?
- 两种语言都有相似的语法。
- 两种语言的代码结构相同。
- 两种语言的编译是相似的。
- 它们共享相同的基本语法。几乎所有 C 的运算符和关键字也出现在 C++ 中并且做同样的事情。
- C++的语法比C稍有扩展,但基本语法是一样的。
- 两者的基本内存模型都非常接近硬件。
- 两种语言中都存在相同的堆栈、堆、文件范围和静态变量的概念。
C和C++的区别在于:
C++ 可以说是 C 的超集。C++ 的主要新增特性是面向对象编程、异常处理和丰富的 C++ 库。
下面是 C 和 C++ 之间的差异表:
C | C++ |
---|---|
C 由 Dennis Ritchie 于 1969 年至 1973 年间在 AT&T 贝尔实验室开发。 | C++ 由 Bjarne Stroustrup 于 1979 年开发。 |
C 不支持多态、封装和继承,这意味着 C 不支持面向对象的编程。 | C++ 支持多态、封装和继承,因为它是一种面向对象的编程语言。 |
C 是 C++ 的子集。 | C++ 是 C 的超集。 |
C 包含 32 个关键字。 | C++ 包含 63 个关键字。 |
对于代码的开发,C 支持过程式编程。 | C++ 被称为混合语言,因为 C++ 支持过程和面向对象的编程范式。 |
数据和函数在 C 中是分开的,因为它是一种过程编程语言。 | 数据和函数在 C++ 中以对象的形式封装在一起。 |
C 不支持信息隐藏。 | 封装隐藏数据,以确保按预期使用数据结构和运算符。 |
C 支持内置数据类型。 | C++ 支持内置和用户定义的数据类型。 |
C 是一种函数驱动语言,因为 C 是一种过程编程语言。 | C++ 是一种对象驱动语言,因为它是一种面向对象的编程。 |
C 不支持函数和运算符重载。 | C++ 支持函数和运算符重载。 |
C 是一种函数驱动的语言。 | C++ 是一种对象驱动的语言 |
C 中的函数未在结构内部定义。 | 函数可以在 C++ 的结构中使用。 |
C 中不存在命名空间功能。 | C++ 使用命名空间,以避免名称冲突。 |
C 使用的头文件是stdio.h。 | C++ 使用的头文件是iostream.h。 |
C 不支持引用变量。 | C++ 支持引用变量。 |
C 不支持虚函数和友元函数。 | C++ 支持虚函数和友元函数。 |
C 不支持继承。 | C++ 支持继承。 |
C 不关注数据,而是关注方法或过程。 | C++ 专注于数据,而不是专注于方法或过程。 |
C 提供malloc()和calloc()函数用于动态内存分配,以及free()用于内存释放。 | C++为内存分配提供了new操作符,为内存释放提供了delete操作符。 |
C 不支持对异常处理的直接支持。 | C++ 支持异常处理。 |
scanf()和 printf() 函数用于 C 中的输入/输出。 | cin 和 cout用于C++ 中的输入/输出。 |
C++的重要特性
C++是一种通用编程语言,它是作为C 语言的增强而开发的,包括面向对象的范例。它是一种命令式和编译型语言。
面向对象编程
C++ 是一种面向对象的编程语言,不像 C 是一种过程编程语言。这是C++最重要的特性。它可以在编程时创建/销毁对象。此外,它可以创建可以创建对象的蓝图。我们在本文中讨论了 C++ 中的面向对象编程概念。
面向对象编程语言的概念:
机器独立
C++ 可执行文件不是平台独立的(Linux 上的编译程序不会在 Windows 上运行),但是它们是机器独立的。
让我们借助一个示例来了解 C++ 的这一特性。假设您编写了一段可以在 Linux/Windows/Mac OSx 上运行的代码,这使得 C++ 机器独立,但 C++ 的可执行文件不能在不同的操作系统上运行。
简单的
从某种意义上说,它是一种简单的语言,可以将程序分解为逻辑单元和部分,具有丰富的库支持和多种数据类型。此外,C++ 的自动关键字使生活更轻松。
自动关键字
auto 的想法是让 C++ 编译器在编译时推断数据类型,而不是让你每次都声明数据类型。请记住,您不能在没有初始化程序的情况下声明某些内容。编译器必须有某种方法来推断您的类型。
- C++
// C++ program for using auto keyword
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
// Variables
auto an_int = 26;
auto a_bool = false ;
auto a_float = 26.24;
auto ptr = &a_float;
// Print typeid
cout << typeid (a_bool).name() << "\n" ;
cout << typeid (an_int).name() << "\n" ;
return 0;
}
|
b
i
高级语言
C++ 是一种高级语言,不像 C 是一种中级编程语言。它使使用 C++ 工作变得更容易,因为它是一种高级语言,因为它与人类可理解的英语密切相关。
受欢迎的
C++ 可以成为许多其他支持面向对象编程特性的编程语言的基础语言。Bjarne Stroustrup发现 Simula 67 是有史以来第一个面向对象的语言,它缺乏模拟并决定开发 C++。
区分大小写
很明显,C++ 是一种区分大小写的编程语言。例如,cin用于从输入流中获取输入。但如果“Cin”不起作用。HTML 和 MySQL 等其他语言不是区分大小写的语言。
基于编译器
C++ 是一种基于编译器的语言,与 Python 不同。那就是用于编译的 C++ 程序,并使用它们的可执行文件来运行它。由于C++ 是一种比 Java 和 Python 相对更快的语言。
动态内存分配
当程序在 C++ 中执行时,变量被分配到动态堆空间。在函数内部,变量被分配在堆栈空间中。很多时候,我们事先并不知道在定义的变量中存储特定信息需要多少内存,并且可以在运行时确定所需内存的大小。
内存管理
- C++ 允许我们在运行时分配变量或数组的内存。这称为动态内存分配。
- 在Java和Python等其他编程语言中,编译器会自动管理分配给变量的内存。但在 C++ 中情况并非如此。
- 在 C++ 中,内存没有用后必须手动取消分配动态分配的内存。
- 内存的分配和释放可以分别使用new 和 delete 操作符来完成。
下面是说明 C++ 中的内存管理的程序:
- C++
// C++ implementation to illustrate
// the Memory Management
#include <cstring>
#include <iostream>
using namespace std;
// Driver Code
int main()
{
int num = 5;
float * ptr;
// Memory allocation of
// num number of floats
ptr = new float [num];
for ( int i = 0; i < num; ++i) {
*(ptr + i) = i;
}
cout << "Display the GPA of students:"
<< endl;
for ( int i = 0; i < num; ++i) {
cout << "Student" << i + 1
<< ": " << *(ptr + i)
<< endl;
}
// Ptr memory is released
delete [] ptr;
return 0;
}
|
Display the GPA of students: Student1: 0 Student2: 1 Student3: 2 Student4: 3 Student5: 4
多线程
- 多线程是多任务处理的一种特殊形式,多任务处理是一种允许您的系统同时执行两个或多个程序的功能。一般来说,有两种多任务处理方式:基于进程的和基于线程的。
- 基于进程的多任务处理程序的并发执行。基于线程的多任务处理处理等效程序的多道程序。
- 多线程程序包含两个或多个将同时运行的部分。这样一个程序的每个部分都称为一个线程,每个线程都定义了一个单独的执行路径。
- C++ 不包含对多线程应用程序的任何内置支持。相反,它完全依赖操作系统来提供此功能。
下面是说明C++ 中的多线程的程序:
- C++
// C++ implementation to illustrate
// the working of Multi-threading
#include <cstdlib>
#include <iostream>
#include <pthread.h>
using namespace std;
#define NUM_THREADS 5
// Function to print Hello with
// the thread id
void * PrintHello( void * threadid)
{
// Thread ID
long tid;
tid = ( long )threadid;
// Print the thread ID
cout << "Hello World! Thread ID, "
<< tid << endl;
pthread_exit(NULL);
}
// Driver Code
int main()
{
// Create thread
pthread_t threads[NUM_THREADS];
int rc;
int i;
for (i = 0; i < NUM_THREADS; i++) {
cout << "main() : creating thread, "
<< i << endl;
rc = pthread_create(&threads[i],
NULL,
PrintHello,
( void *)&i);
// If thread is not created
if (rc) {
cout << "Error:unable to"
<< " create thread, "
<< rc << endl;
exit (-1);
}
}
pthread_exit(NULL);
}
|
输出:
本教程假设您在 Linux 操作系统上工作,我们将使用 POSIX 编写一个多线程 C++ 程序。POSIX Threads 或 Pthreads 提供的 API 可用于许多类 Unix POSIX 系统,例如 FreeBSD、NetBSD、GNU/Linux、Mac OS X 和 Solaris。