linux内核需要c++
2011-12-03 17:56:18 greybeard 阅读数 14
1. Unix下文件结束符: Ctrl + d
2017-03-08 15:39:33 u014805066 阅读数 340

今天对智联招聘网站和前程无忧招聘网站对“任职要求"一栏进行了相关技术要求作了简要的统计,主要提取的是在任职要求中明确提到的信息,招聘城市针对长沙和深圳,招聘公司为随机抽取,列了以下技术要求出现的次数。希望在自己的学习中明确知道需要掌握的知识技术以及其重要性,以及该往哪些方面来扩展自己的知识面,提升自己的竞争力。


职位要求样本数:50
明确指出的技术要求:
1:多线程(thread)                                                  (1111111111111111111111111111)29
2:网络编程(socket,tcp/ip http)                           (1111111111111111111111111111)29
3:数据库(sql server,mysql,sqlite)                    (1111111111111111111111)23
4:opencv图像处理,识别                                     (111111)6
6:com组件(ATL开发)                                       (111)3
7:linux开发                                                           (1111111111111111111111111111111)32
8:数据结构与算法(STL)                                   (1111111111111111111111)23
9:开源网络库(libevent,boost:asio,libev )     (1111111)7
10:ffmpeg流媒体开发,协议(rtsp/rtp/hds)        (11111111)8
11:脚本开发(lua,perl,js,python)                        (111111)6
12:串口编程(RS232)                                        (111)3
13:MFC,QT                                                           (11111)5
14:svn/git                                                               (11)2
15:设计模式,重构,代码风格,框架设计等           (1111111111111111111111111111111111)35
16:redis                                                                 (111)3
17:xml,json文件格式                                             (111)3
18:Hadoop,Spark                                               (1)1
19:OpenDDS                                                        (1)1
20:MQTT,COAP(物联网通讯协议)                   (1)1

2016-04-10 10:34:12 tianya_team 阅读数 529

1.类的static成员初始化问题:

1)如果static成员是non-const成员变量,则只能在类外部初始化,且不必带static关键字;

2)如果是static-const成员变量,则既可以在类内部初始化,也可以在类外部初始化,如果在类外部初始化,则不能用该数来设置数组大小。

3)如果是non-const-non-static成员变量,只能在构造函数或初始化列表中初始化。


2.const对象调用const函数问题:

1)const对象只能调用const成员函数;

2)非const对象可以调用const成员函数和非const成员函数。


3.虚函数带默认参数问题:

1)如果基类的虚函数和继承类对应的虚函数都带有默认的参数,发生多态时,调用基类的默认值,但是调用继承类的函数。

2)原因是:虚函数是动态绑定的,而缺省参数是静态绑定的。


4.关于编译器拒绝生成默认赋值构造函数问题:

1)如果类有引用或者const成员变量,则编译器拒绝为class生出operator=。

2)如果基类的赋值构造函数为private,则继承类无法自动生成赋值构造函数。


5.构造函数和析构函数调用顺序问题:

构造函数的调用顺序如下:

1)基类构造函数,如果有多个基类,则按从左到右依次调用。

2)成员类对象的构造函数。

3)继承类构造函数。

析构顺序与构造顺序相反。


6.类的构造函数和析构函数不要调用虚函数问题:

1)构造函数调用虚函数,在基类构造期间,对象类型是基类而不是继承类,不会发生多态。

2)析构函数调用虚函数,由于继承类对象已经析构掉,进入基类析构的对象就会成为基类对象,也不会发生多态。


7.auto_ptr和shared_ptr析构问题:

auto_ptr和shared_ptr在其析构函数内做delete而不是delete[]动作,因此不要在动态分配的数组上使用auto_ptr和shared_ptr。可以用vecor代替。


8.需要返回值而不是引用问题:

1)当需要返回一个临时对象时,返回值而不能返回引用:

friend const Rational operator*(const Rational& lhs, const Rational& rhs)  
    {  
        Rational temp;  
        temp.n = lhs.n * rhs.n;  
        temp.d = lhs.d * rhs.d;  
        return temp;  
    }  
2)当需要返回一个局部static变量时,返回值而不能返回引用。这回造成多线程安全问题。


9.private,protected和public封装性问题:

1)只有private提供封装,protected和public不提供封装。

2)protected的封装性不比public好。取消一个public成员变量,所有使用他的客户码都会破坏。取消一个protected成员变量,所有使用它的继承类都会被破坏。


10.一个二维数组,按行寻址和按列寻址比较。

CPU访问数据的时候,是以块进行访问的,将取出的块放到缓冲区。

按行寻址的时候,因为是顺序访问,所以缓冲区的数据可以直接使用,无需访问内存,效率高;

按列寻址的时候,下一个访问的位置,不在CPU缓冲区,需要重新将下一个元素所在的块调入缓冲区,效率低。


11.怎样提高一个程序性能?

1)不要将函数作为循环判断条件。

while(i<sizeof(arr)*N){}
2)减少内存访问次数。

a++;
a=a+1;  //内存访问次数要多
3)去除不必要的分支。

if... else if...   //比较好
if...  if....
4)间接寻址比基地址寻址慢,所以结构体中常用的成员放前面。(将数据放在同一内存页中,减少页面置换,增加缓存的命中率)


12.什么是堆栈溢出?堆有没有溢出,如果溢出怎么解决?
堆栈溢出就是不顾堆栈中分配的局部数据块的大小,向该数据块中写入过多的数据,导致数据越界,结果覆盖了别的数据。

堆也有溢出。堆溢出比栈溢出要复杂,不是简单的覆盖:

char *buff1=(char *)malloc(16);
char *buff2=(char *)malloc(16);
鲜网buff2里写入16个A,之后往buff1里写入32个B。通常认为往buff1里写32个字符,肯定会导致buff1溢出,从而将相邻的buff2覆盖,但实际并非如此,有可能写到内部保留的8个字节中。
堆溢出攻击:

1)通过溢出堆,从而覆盖保存的某个指针值。

2)堆溢出可以改变函数返回地址等,从而改变程序的执行流程。

解决方法:
1)能够监视malloc,memset,memcpy,free这四个函数的行为。

2)如果发现越界操作,打印出来,继续执行(检测不影响程序行为)。

13.野指针

野指针指向一个已经删除的对象或者未申请访问受限内存区域的指针。

1)指针所指区域已经free掉,但没有将该指针指向空。

2)堆栈溢出造成指针指向的内容被篡改。


14.内存泄漏了怎么办?

1.智能指针代替。

2.在程序的最后加上:

_CrtDumpMemoryLeaks(); //检测是否有内存泄漏 
来定位到内存泄漏的地方。

15.多重继承下,不同基类指针指向同一子类对象地址问题

#include <iostream>

using namespace std;

class ClassA{
public:
	virtual ~ClassA(){}
	virtual void FuncA(){}
};

class ClassB{
public:
	virtual void FuncB(){}
};

class ClassC :public ClassA, public ClassB{
public:
};

int main()
{
	ClassC aObject;
	ClassA * pA = &aObject;
	ClassB * pB = &aObject;
	ClassC * pC = &aObject;
	cout << pA << endl;
	cout << pB << endl;
	cout << pC << endl;
	return 0;
}
结果:

pA和pC的值相同,pB和pA不相同。

原因:

两个基类均含有虚函数,故其大小至少有一个虚函数表的指针大小,ClassC的内存大概如下:

ClassA类数据成员

ClassB类数据成员

ClassC类其他数据成员
可以看出对象aObject以ClassA子对象开头,然后是ClassB子对象部分,最后的部分来自ClassC类本身。

当向上类型转换为ClassA时,结果指针指向ClassA子对象部分,刚好在ClassC对象的开始位置,所以pA和pC是相同的。

当向上类型转换到ClassB时,结果指针必须指向ClassB子对象所在实际位置。

注意:如果改成

class ClassC :public ClassB, public ClassA{
则pC与pB相同。

16.整数的截断

#include <iostream>

using namespace std;


int main()
{
	char p[1];
	p[0] = -130;
	printf("%d", p[0]);
	return 0;
}
//输出:126
-130存下来为1111 1111 0111 1110(负数用补码存)

然后取低八位0111 1110赋给char变量,为126

2019-05-27 14:23:35 weixin_40012419 阅读数 4

虚幻C++需要固态硬盘


机械硬盘:(公司电脑测试):
1.新建项目且第一次打开visual studio :57分钟。
2.打开已有项目: 60秒
3.新建C++类文件:11分钟
4.编译一次代码:40秒 到 120秒。编译出现unreal崩溃。

固态硬盘:(家里电脑测试):
1.新建项目且第一次打开visual studio :10分钟。
2.打开已有项目: 30秒
3.新建C++类文件:0.5分钟
4.编译一次代码: 20秒

2012-09-26 10:01:46 19800824 阅读数 815

1、通过CBitmap* m_Bitmap = CBitmap::FromHandle(hBitmap)返回获取的CBitmap*对象,实际上是 CBitmap::FromHandle(hBitmap)在内存中New了一个CBitmap*对象,所以必须在相应的地方释放内存,否则会有内存泄露。

释放内存方法:

if(m_Bitmap .m_hObject!=NULL)

m_Bitmap .DeleteObject();

 

2、在查找硬盘文件后,要关闭被查找的文件是获得的句柄,否则该文件所在文件夹将不能被访问。

API:
 WIN32_FIND_DATA lpFindFileData;
Handle hFindFile = ::FindFirstFile(lpFileName, &lpFindFileData);

用完后一定要关闭句柄:FindClose(hFindFile);

MFC:

CFileFind finder;
 BOOL working = finder.FindFile(path + _T("\\*.PNG"));

用完后一定要关闭:finder.Close();

为什么C++需要虚继承

阅读数 409

先看个编译多继承带来的编译错误/*************************************************************************>FileName:muti_inherit.cpp>Author:guoqingyao>Mail:stepbystepto@163.com>CreatedTime

博文 来自: StepByStepTo

C++需要注意点

阅读数 314

list链表vector数组set二叉树,仅存储Keymap二叉树,Key-Value  首先,vector是序列式容器而set是关联式容器。set包含0个或多个不重复不排序的元素。也就是说set能够保证它里面所有的元素都是不重复的。另外对set容器进行插入时可以  指定插入位置或者不指定插入位置。如insert(v.begin(),1),也可以

博文 来自: helloworldprogram

C++需要注意的地方

阅读数 51

1、当一个函数返回引用时,实际返回了一个变量的内存地址2、setw(只对其紧跟的起作用)3、setwsetfill(‘+’)4、setprecision()5、setprecision()setiosflags(ios::fixed)//小数点右边有几位小数;6、setiosflags(ios::showpos)//强制显示符号;7、setiosflags(ios::...

博文 来自: fighting123678

需要的看的书C++

阅读数 183

effectivec++moreeffectivec++effectivestlthinkinginc++insidec++objectmodel

博文 来自: yagemoxin

C++需要记住的一些点

阅读数 529

常引用声明方式:constint&ra=a;在使用虚函数的类,析构函数也声明成虚函数explicit的作用:当一个类的构造函数像这样时A(inti),可以这样构造一个对象Aa;a=10;这一语句调用了默认的单参数构造函数,而explicit则是用来禁止这种行为的。应该使用extern”C”来引用C代码,因为C没有重载,可以只用函数名来标识一个函数,而C

博文 来自: BusyLuo
没有更多推荐了,返回首页