c++11的新特性
1、新增基于范围的for循环
类似Java中foreach语句,为遍历数组提供了很大方便。
int nArr[5] = {1,2,3,4,5}; for(int &x : nArr) { x *=2; //数组中每个元素倍乘 }
2、自动类型推断 auto
它的作用就是当编译器在一个变量声明的时候,能够根据变量赋的值推断该变量的数据类型。这样就有些逼近Python中定义变量的功能,无需提前声明定义的变量的数据类型。例如:
auto i = 1; //编译器自动推断i为int类型
3、匿名函数 Lambda
如果代码里面存在大量的小函数,而这些函数一般只被一两处调用,那么不妨将它们重构成Lambda表达式,也就是匿名函数。作用就是当你想用一个函数,但是又不想费神去命名一个函数。 该功能函数实际上在其他面向对象语言中早就存在,例如Java,Python都定义了该功能。C++中Lambda表达式格式如下: [capture](params)->ret { body};
4、显示重写(覆盖)override和final
C++11引入了新的语法来解决这个问题:
struct Base { virtual void some_func(float); }; struct Derived : Base { virtual void some_func(int) override; // 病态的,不会重写基类的方法 };
override 这个特殊的标识符意味编译器将去检查基类中有没有一个具有相同签名的虚函数,如果没有,编译器就会报错!
C++11还增加了防止基类被继承和防止子类重写函数的能力。这是由特殊的标识符final来完成的,例如:
struct Base1 final { }; struct Derived1 : Base1 { }; // 病态的, 因为类Base1被标记为final了 struct Base2 { virtual void f() final; }; struct Derived2 : Base2 { void f(); // 病态的, 因为虚函数Base2::f 被标记为final了. };
8、模板的别名
在进入这个主题前,先弄清楚“模板”和“类型”的区别。类型,是具体的数据类型,可以直接用来定义变量。 模板,是类型的模板,根据这个模板可以产生具体的类型;模板是不能直接定义变量的;当指定了所有的模板参数后,就产生了一个具体的类型,就可以用来定义变量了。
在C++03中,只能为类型(包括完全特化的模板,也是一种类型)定义别名,而不能为模板定义别名:
template <typename First, typename Second, int Third> class SomeType; template <typename Second> typedef SomeType<OtherType, Second, 5> TypedefName; // 在C++03中, 这是非法的.
C++11增加为模板定义别名的能力,用下面这样的语法:
template <typename First, typename Second, int Third> class SomeType; template <typename Second> using TypedefName = SomeType<OtherType, Second, 5>; //这种using语法也可以用来定义类型的别名: typedef void (*FunctionType)(double); // 老式语法 using FunctionType = void (*)(double); // 新式语法
9、允许sizeof运算符可以再类型数据成员上使用,无需明确对象。
struct p {otherClass member;};
sizeof(p::member);
10、线程支持
C++11虽然从语言上提供了支持线程的内存模型,但主要的支持还是来自标准库。
新的标准库提供了一个线程类(std::thread)来运行一个新线程,它带有一个函数对象参数和一系列可选的传递给函数对象的参数。通过std::thread::join()支持的线程连接操作可以让一个线程直到另一个线程执行完毕才停止。std:thread::native_handle()成员函数提供了对底层本地线程对象的可能且合理的平台相关的操作。
单例模式的特点?如何保护临界资源?互斥锁、原子操作、线程安全的函数。
UML的特点?类和类之间的关系?
软件设计的七大原则:
1.开-闭原则
2.里氏代换原则
3.依赖倒置原则
4.接口隔离原则
5.合成/聚合复用原则
6.迪米特法则
7.单一职责原则
Netstar是一个工具集、包含设计、规划、模拟等模块。最终都是通过微服务包部署到分布式集群环境中,然后启动各自进程完成特定功能。华为用的是SpringCloud微服务架构。
设计是通过配置子架参数类型、单板类型(包括光放OA、支路板和线路板、中继单板、合波分波板)、光参系数等完成网元配置。将多个网元用光纤连接起来形成组网。可以对你网元路由进行预置路径规划和重路由规划。
故障模拟是通过手动设置光纤断裂、OMS断裂、SRLG断裂来模拟现实场景出现的故障,用来检测软件的健壮性以显示问题的分析定位。