IT面试经验:CC++程序员需要掌握哪些知识
发布时间:2025-05-23 04:39:05 发布人:远客网络
一、IT面试经验:C/C++程序员需要掌握哪些知识
概括来说,开发中常用到的功能:串口通信、网口通信、数据库访问、数据加解密处理等等。这些方面的知识都要掌握的,细说的话主要有以下几个方面:
(1)变量与基本类型:语言内置类型、常量、变量的初始化、变量的作用域、变量的限定符、变量引用、枚举;(2)typedef和#define;
(3)数值与指针:数组定义与初始化、多维数值、指针操作;
(4)表达式:算术/逻辑计算、位运算、优先级、类型转换;
(5)语句:简单语句、声明/定义语句、复合语句、条件/循环控制语句、异常处理语句;
(6)函数:函数声明、参数传递、堆栈概念、函数重载;
(7)标准IO:条件状态、缓冲区、文件流、字符流、本地化;
(8)类和数据抽象:类的定义与声明、类的构造函数、静态成员、拷贝构造函数、操作符重载、类型转换;
(9)面向对象编程:数据(封装)抽象、继承、多态(动态绑定);
(1)模板与泛型编程:模板定义、实例化、类模板成员、重载、特化;(2)智能指针:auto_ptr、shared_ptr、scoped_ptr;
(3)STL容器:顺序容器(vector、list、deque、queue、priority_queue、string)和关联容器(map、set、multimap、multiset);(4)STL算法:迭代器、算法;(5)常用复杂数据结构:hash_map、boost.any、boost. array、boost. regex、boost. variant、 boost. multi_array、boost. pointer_container;
(1)高级泛型编程:表达式模板、模板元编程、Concept编程;
(2)程序架构,内存池,线程池;
(3)高级抽象:boost.mpl、boost.lambda、boost.fusion、boost.proto;
(5)应用程序库:boost.asio、boost.graph、blitz++、Loki、CGAL、uBLAS;
(1)Windows API之基础服务:文件系统、注册表、内存管理、DLL、多媒体;
(2)Windows API之内核对象:句柄、信号、线程、进程、互斥、事件、文件映射、命名管道、邮槽、计时器、完成端口;
(3)Windows API之图形设备接口:设备上下文、打印、字体、笔/刷、路径、区域、位图;
(4)Windows API之图形用户界面:窗口、标题、菜单、状态栏、消息、图标、按钮、编辑框、组合框、列表框、滚动条、通用对话框;
(5)环境配置及Shell编程:环境变量、右键菜单、属性、关联;(6)Socket编程;(7)Web相关API; 2、进阶(Advance)
(1)MFC/ATL:文档视图结构、对话框、通用控件、OleDB、WinInet;(2)COM、自动化、ActiveX:Office开发、IE插件、VBA;(3)高级图形系统:OpenGL、DirectX;(4)二次开发:ObjectArx;
(1)向量:点积、叉积、求模、单位化、复合运算;(basic)
(2)矩阵:算术运算、平移/旋转/缩放/错切等变换、求逆、特征值;(basic)(3)四元组合欧拉角:与其他表示转换;(advance)(4)参数曲线/曲面:贝塞尔、(非)均匀有理样条;(advance)(5)三维几何体的构造与描述;(expert) 2、计算几何
(1)几何查找与判断:点与线、线与线、点与多边形;(basic)(2)多边形:简单多边形、凸多边形、多边形三角剖分;(advance)(3)凸壳及其应用;(advance)(4)Voronoi图/三角剖分及其应用;(advance)(5)多边形的交与并;(expert)(6)平面图;(expert) 3、数值计算
(1)数值计算的三大任务:求值、解方程(组)、函数逼近;(basic)(2)数值计算的误差、适定性、稳定性;(basic)
(3)解线性方程组直接方法:Gauss消元法、三角分解法;(basic)
(4)解线性方程组一般迭代方法:基本迭代、Jacobi迭代、G-S迭代、SOR/SSOR迭代;(advance)
(5)解线性方程组的变分迭代法:共轭梯度、预处理共轭梯度法;(expert)(6)解非线性方程组迭代方法:Newton迭代法、Newton-Raphson迭代法、同伦算法;(expert)
(7)求解矩阵特征值:乘幂法与反乘幂法、Rayleigh商迭代法、QR法、Krylov子空间法;(expert)
(8)插值:多项式插值、样条插值;(advance)(9)数值积分:Simpson公式、Gauss积分;(basic)(10)解常微分方程:欧拉法、Runge-Kutta法;(advance)(11)解椭圆方程:有限单元法、有限差分法、边界元法;(expert)
二、要成为一个C/C++程序员要学哪些东西
我们要成为一个程序员,学的东西会很多很杂,但是最开始一定要从语言开始学习,而学习语言最关键的莫过于选好一本书,学校的教材就算了,根本没有写得好的。在此隆重推荐《C++ Primer》,这本书很厚,内容也很丰富,对知识的讲解不仅仅停留在表面。如果这本书能有耐心看完,语言方面基本就没有什么大问题了,对以后的学习也打下了一个很好的基础。
C++方面的GUI库有很多种,比如MFC、WTL、wxWidgets、QT。这些GUI库都各有自己的特点,其实我们只要先了解一种就可以了,只要深入了解了一种GUI库,需要的时候再学习其他的就够了,本质上都差不多,很快就可以上手了。MFC虽然设计上有很多问题,但是作为入门还是不错的,而且学习资料很多,碰到问题也好解决。
很多人都忽视了数据结构和算法方面的知识,尤其是一些编程语言的库做得非常好,几乎不需要自己去实现一些数据结构和算法,导致现在很多程序员不重视甚至忽略这方面的知识。但是,当我们想让我们的程序跑的更快、内存占用更少的时候,这些知识就非常非常重要了。很多程序员都是刚开始的时候不重视这些,但是工作几年后又来补习这些知识。
最开始可能不需要学习的太深入,但是基本的数据结构和算法一定要知道。
推荐《数据结构(C语言版)》,在数据结构和算法的学习中,最好不要去关心面向对象方面的技巧,就用C语言来实现,这样能更关注于算法本身的内容。
学习数据库的基础知识,并且掌握一种数据库使用,推荐使用mysql,而且最好不要用一些封装好的接口,而应该直接用mysql提供的数据库api,可能对数据库了解的会更深入。
cpu主频已经不能遵循摩尔定律了,现在cpu发展的趋势是多核心。无论是多线程,还是多进程,都是为了更好的利用cpu的性能,提供更好的用户体验。这就要求我们如果要写出高效的应用程序,必然要涉及到并行计算。多花些精力在并行计算上吧,一定会有丰富的回报。
这里所指的网络编程是指socket编程。现在C++的应用很多都是在做服务器开发,如何开发一个高并发、大吞吐量、高稳定性的服务器就是我们要考虑的了。
设计模式不是具体的技术,更多的是如何让代码更容易阅读、更好扩展、更容易使用。
C++标准库仅仅提供了一些很基本的功能,所以我们经常会引入一些第三方库。最著名的恐怕就是被称为准标准库的boost库,它提供了我们编程中用到的各方面的技术,文本处理、算法、网络、多线程、图像处理等等,几乎无所不包。其它也有一些专著于某一方面的库,比如ACE是网络通信方面的,TinyXML是解析xml的,OGRE是图形渲染方面的。
程序员需要了解的操作系统知识和普通用户是不一样的,一个高手是需要深入了解操作系统的方方面面,而不是停留在使用层面。至于应该了解哪些知识,windows上的去看《windows核心编程》,linux的去看《深入理解linux内核》,应该可以知道自己应该学什么了。
三、2013毕业工作两年多的c/c++程序员的迷茫
1、首先一点,其实不单单是C++,很多其他语言类编程人员,也会有同样的迷惑。
2、比如我一个同事,原来是做java网站后台的,偏向某一类业务,写了两年代码,来来回回都是那些业务流程,基本的java架构,反复的使用,然后就开始疲惫,觉得java就那么回事,学不到什么东西。
3、我正好需要做一些java网站类的项目,就询问他,比如做一个在线的设计网站、一个在线地图网站,会不会?
4、他说,这些很多呀,去某某网站找源码,很多的。
5、交代一下背景,他现在转学C++,入门级别,很痛苦的感觉,因为真正的工作中,实际上更多的,还是涉及更多的所谓“业务”的东西。假如一个人,从来都是在做别人分配的任务,写一辈子类似的代码,那么,终究结果都是一样的。
6、首先,你要想着去改变。而不是像我上面描述的同事那样,从一个语言跳到另一个语言,就觉得自己改变了。你可以多一种选择,但请不要随意将你曾经抛弃的东西,认定为无用的东西。
7、 Linux C++可学的内容很多,基本的文件管理、多线程、IO以及网络编程等等,看题主的问题,很可能是受到项目的影响与局限,甚至于,题主可能不是那么主动愿意去探索新事物的人。那既然题主提出来了迷惑,证明题主还是有一定的自省能力的。
8、第一,尝试新的。题主说没做过界面编程,又说自己想做独立项目。那么一个完整的界面开发必不可少,为什么不去尝试写一写呢?QT、wxWidgets等等都是不错的界面开发库,你可以尝试去搭建这些环境,去写一点,说不定就会喜欢上。python,gtk等等等等,实在太多。
9、第二,不要刻意去抉择C还是C++。语言的东西,本质上共通,学语言,主要是思维方式。光针对一个语言,学语法、词法,不做其他尝试,和没学没什么区别。语言毕竟只是工具,真正培养的,是你的整体架构思维,是你对自己认知的清理、整理。
10、第三,其实题主的路很明确,只是缺乏执行力。
11、祝题主早日动起手来,写下自己独立项目的第一行代码。