2012亲身的面试题目
一、前言
(1)2012年经济不景气,身为软件工程师这次我体会到了找工作的难。
炎热的七月,找工作真是件费劲的事情;一个下午接到好几个电话,问到的问题真的另人头疼。
(2)由于从车载行业转到互联网行业,且想拿高工资,我经历了转行的困境;
(3)上一次找工作时的容易,和这次找工作的困难使我更加体会到了什么是失败和落魄;
(4)如果正在进行网络营销的培训,而又重新入职,这让我力不重心;
(5)有的公司先HR,等HR花了1小时,HR面完再推给技术主管,又是等半个小时,我等不及了,撇下走人好几次;
4.、熟悉opencv编程。 
线程池的使用
1、COM中的类型库 typeLib
2、COM的双向机制 COM的调度解决答案请看我的文章: <<http://blog.csdn.net/chenyujing1234/article/details/7753863>>
3、Direct UI 无窗口
4、反编译
5、COM与ATL的关系解决答案请看我的文章:<<http://blog.csdn.net/chenyujing1234/article/details/7753930>>
6、COM中分发机制 dispatch
7、COM在电脑上的用例
8、COM做过什么东西
9、vector、list、map之间区别?(1)vector 动态数组,多用于容器,增加删除操最好在结尾处使用;
中的元素是顺序存放的,所以随机访问很快,但是要插入和删除,这个时间复杂度就很高了,vector初始化时有一个capacity,如果元素个数超出capacity,那vector就会重新分配一个新的空间,并把旧值复制到新的空间中,释法原空间,这个也要耗费很多时间,所以如果你知道元素的最大值,最好用reserve()函数初始最大空间,避免重新分配空间造成的时间。
(2)list 双向链表, 多用于从中间增加删除的操作,可以随机访问;
元素在内存中是分散的不连续的,它使用指针left,right,指向前一个元素和后一个元素。所以要删除和添加只要动动指针,所以很快,但是因为是不连续的所以要访问一个元素,你只能遍历序列。
(3)map 二路平衡查找树,哈希结构,用来映射;
元素是一个pair类型,具有public成员first和second,第一个的类型是key_type,第二个的类型是mapped_type,
两个的类型可以相同,
map用来当做关联式数组.索引操作会创建新元素然后再对数值部分赋值.make_pair是用来构造该map中的元素的,insert操作,如果是具有同样键的map,
那么只会在map中存在一个这样的键,因为map不允许重复键,并且元素是自动排序好的,默认是用一个less_than函数对象来排序的,还有一个默认存储器allocator吧.
window 下的套接字以来两种方式执行I/O操作,阻塞IO 非阻塞IO,一般默认使用的是阻塞IO 即线程会等待不会把控制权利立刻返回给程序,这就意为一个线程在某一个时候只能够去执行一个IO操作。
如果服务端想和多个客户端同时进行通信的话就要使用多线程编程,但是会增加开销,如果采用非阻塞IO程序不会等待,会立刻返回结果但是在大部分情况下返回的结果是错误的,并返回一个WSAEWOULDBLOCK的错误,所以程序员要不断的检测函数返回的代码以判断一个套接字何时可供读写。
为了避免麻烦 winsock 提供了不同的套接字模型对IO进行管理 select (),WSAAsyncSelect(),WSAEventSelect(),Overlapped()。
Windows操作系统提供了选择模型、异步选择模型、事件选择模型、重叠I/O模型和完成端口共五种I/O模型。每一种模型均适用于一种特定的应用场景。编程人员应综合考虑到程序的扩展性和可移植性等因素,做出自己的选择。
(1)选择模式(Select)选择模型是Winsock中最常见的I/O模型。之所以称其为“select模型”,是由于它的“中心思想”便是利用select函数,实现对I/O的管理!最初设计该模型时,主要面向的是某些使用Unix操作系统的计算机,它们采用的是 Berkeley套接字方案。select模型已集成到Winsock 1.1中,它使那些想避免在套接字调用过程中被无辜“锁定”的应用程序,采取一种有序的方式,同时进行对多个套接字的管理。
(2 ) 异步选择模式(WSAAsyncSelect)使用异步选择模型,应用程序可在一个套接字上,接收以Windows消息为基础的网络事件通知。具体的做法是在建好一个套接字后,调用WSAAsyncSelect函数。
(3 )事件选择模式(WSAEventSelect)WSAEventSelect和WSAAsyncSelect模型类似,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知。对于WSAAsyncSelect模型采用的网络事件来说,它们均可原封不动地移植到事件选择模型上。在用事件选择模型开发的应用程序中,也能接收和处理所有那些事件。该模型最主要的差别在于网络事件会投递至一个事件对象句柄,而非投递至一个窗口例程。
(4 ) 重叠I/O模式(Overlapped I/O)在Winsock中,相比我们迄今为止解释过的其他所有I/O模型,重叠I/O模型使应用程序能达到更佳的系统性能。重叠模型的基本设计原理便是让应用程序使用一个重叠的数据结构,一次投递一个或多个Winsock I/O请求。针对那些提交的请求,在它们完成之后,应用程序可为它们提供服务。该模型适用于除Windows CE之外的各种Windows平台。模型的总体设计以Win32重叠I/O机制为基础。那个机制可通过ReadFile和WriteFile两个函数,针对设备执行I/O操作。
(5 ) 完成端口模式(Completion Port)“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!但不幸的是,该模型只适用于Windows NT和Windows 2000操作系统。
因其设计的复杂性,只有在你的应用程序需要同时管理数百乃至上千个套接字的时候,而且希望随着系统内安装的CPU数量的增多,应用程序的性能也可以线性提升,才应考虑采用“完成端口”模型。要记住的一个基本准则是,假如要为Windows NT或Windows 2000开发高性能的服务器应用,同时希望为大量套接字I/O请求提供服务(Web服务器便是这方面的典型例子),那么I/O完成端口模型便是最佳选择!
11、IRQL、可分页内存这些基础要熟悉
12、熟悉OD/WINDBG/IDA等反编译或调试工具
13、Window XP的开机过程
参考<<class Obj{public : Obj(void){ cout << “Initialization” << endl; } ~Obj(void){ cout << “Destroy” << endl; } void Initialize(void){ cout << “Initialization” << endl; } void Destroy(void){ cout << “Destroy” << endl; }};void UseMallocFree(void){ Obj *a = (obj *)malloc(sizeof(obj)); // 申请动态内存 a->Initialize(); // 初始化 //… a->Destroy(); // 清除工作 free(a); // 释放内存}void UseNewDelete(void){ Obj *a = new Obj; // 申请动态内存并且初始化 //… delete a; // 清除并且释放内存}
malloc/free和new/delete是等价的。
malloc/free管理动态内存。
如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。---(还没用过)
如果用delete释放“malloc申请的动态内存”,理论上讲
程序不会出错,但是该程序的可读性很差。所以new/delete必须配对使用,malloc/free也一样。
*********************************************************************************************
总之:
new 是个操作符,和什么"+","-","="...有一样的地位.
malloc是个分配内存的函数,供你调用的.
new是保留字,不需要头文件支持.
malloc需要头文件库函数支持.
new 建立的是一个对象,
malloc分配的是一块内存.
new建立的对象你可以把它当成一个普通的对象,用成员函数访问,不要直接访问它的地址空间
malloc分配的是一块内存区域,就用指针访问好了,而且还可以在里面移动指针.
-精通 c/c++,熟悉 linux下的编程,计算机基础知识扎实;熟悉常用开源软件,热爱技术研究;
-具有较大型软件构架设计和实现经验优先;研读过常用开源软件源代码优先。
18、熟悉网络通讯底层的开发,有完成端口应用于大规模人数在线的实际项目经验;
19、熟悉TCP/IP协议;
20、熟悉P2P/P2SP软件工作原理者优先;
21、用驱动去禁止某个进程启动;禁止访问某个IP地址;
22、用驱动分析网络数据。参考文章:<<NDIS网络数据监控程序NDISMonitor(1)-----驱动程序(编译过程与源码讲解)>>
23、NDIS驱动有做过吗?参考文章:<<NDIS网络数据监控程序NDISMonitor(1)-----驱动程序(编译过程与源码讲解)>>
24、Win7驱动开发与XP驱动开发的区别?
25、设备驱动与非设备驱动的区别?
26、线程A与线程B共享一块共同的堆区内存,防止A把内存释放了,而B还去访问它的机制是什么?采用COM的引用计数方法。
例子(1)原理以下是一个引用计数的类IReferenceCounted,请注意在Drop()里有delete this;这里的this指从IReferenceCounted继承的类,
说明在从IReferenceCounted继承的类当计数减为0时会把自己销毁掉。
class IReferenceCounted{public://! Constructor.IReferenceCounted():ReferenceCounter(1){}//! Destructor.virtual ~IReferenceCounted(){}unsigned int GetReferenceCount() const{return ReferenceCounter;}virtual void Grab() { ++ReferenceCounter; }virtual bool Drop(){--ReferenceCounter;if (!ReferenceCounter){delete this;return true;}return false;}protected://! The reference counter. Mutable to do reference counting on const objects.unsigned int ReferenceCounter;};(2)继承方法class GUI_EXPORTS_CLASS IObject : public IReferenceCounted{protected:IObject();virtual ~IObject();public:/** @brief 获取GUI的类标识名. */const char * GetClassName() const;protected:char m_strClassName[64]; ///< 类名称};
class GUI_EXPORTS_CLASS IGUIBase : public IEventReceiver,public IObject{};(3)使用方法(3、1)在赋值时
void GUIFrameAnimator::SetImageList(ImageList * pImgList){SAFECALL(m_pImageList)->Drop();m_pImageList = pImgList;SAFECALL(m_pImageList)->Grab();}
(3、2)刚生成一个对象时
pWndPage3 = FrameWork::PushWndPageFromXml(".\\page3.xml", true); pWndPage3->Grab();(3、3)在操作时,进行保护
void UIManage::ParseEventHandlerNodeAndSetEventCallBackToGUI(IGUIBase * pGUI, TiXmlNode * pGUIXmlNode){if (pGUI && pGUIXmlNode){pGUI->Grab();//.....pGUI->Drop();}}
27、捕获数据包的接收比发送复杂,什么原理?
28、两年前做的网络TCP/IP,能不能说一说?
29、VS上的汇编调试方法及必要性?
30、USB驱动里的等待是等待什么?
等待上一个IRP发出后的执行返回。
31、CodeCproject上的RDP源码。
32、win7下的凭据验证都是用com做的。http://msdn.microsoft.com/zh-cn/magazine/cc163489.aspx
33、DLL注入参考:<<class Clock{public:void SetTime(int NewH,int NewM,int NewS);void SetTime();private:int Hour,Minute,Second;};
将时钟的数据和功能封装起来,构成一个时钟类
(3)、继承
C++语言提供了继承机制,允许程序员在保持原有类特征的基础上,进行更具体,更详细的说明。
eg:
class 学生 :public 人{……};(4)、多态
在c++语言中,这种多态性可以通过强制多态、重载多态、类型参数多态、包含多态4种形式来实现。
eg:2中的两个SetTime()函数
47、继承类?一个CBase、CDerice
48、
3、熟练使用windows和linux开发工具,可以在windows和linux进行软件开发;
5、熟悉TCP/IP,Http等协议,能利用Socket API进行编程,熟悉ACE或者Boost::asio者优先,
具有网络编程经验和大规模并发服务器编程经验者优先。
SD4-FPS客户端开发工程师(深圳)SNG01-视频内核技术高级研发工程师(深圳)ECC05-移动电商后台C++高级开发工程师OMG10-腾讯视频Windows客户端研发(深圳)工作要求:
2、熟练掌握C/C++,熟练使用STL容器和算法;
3、熟悉usb传输协议,mfc编程;
4.、熟悉opencv编程。
3、 深入了解windows内核。
4、有驱动开发相关经验.,熟悉DDK开发,熟练使用windbg、softice调试驱动。
5、责任心强,承受压力能力强,具有良好的沟通能力及团队精神 。
1、虚拟串口怎么实现,如果真实的串口有数据,那么内存共享怎么做?
参考我的文章<<winCE中实现虚拟串口的方法>>
2、TCPMP的音频与视频的同步方法;
3、做的东西很多,但都不深入;
4、camera经7180出来的视频数据是什么格式的?
5、WCE的启动过程是什么?
6、用什么样的GPS