
面试笔试
文章平均质量分 62
iloveyin
这个作者很懒,什么都没留下…
展开
-
大端模式与小端模式、网络字节顺序与主机字节顺序
大端模式与小端模式一、概念及详解 在各种体系的计算机中通常采用的字节存储机制主要有两种: big-endian和little-endian,即大端模式和小端模式。 先回顾两个关键词,MSB和LSB: MSB:Most Significant Bit ------- 最高有效位 LSB:Least Significant Bit ------- 最低有效位原创 2012-04-02 15:21:01 · 1830 阅读 · 0 评论 -
浅析类的const成员函数,类的const对象
1.const数据成员:跟const常量一样,只是一个在类里,一个在类外而已,都必须初始化。2.const成员函数:即普通成员函数后再加const。它可以读取数据成员的值,但不能修改它们。若要修改时,数据成员前必须加mutable。以指定其可被任意更改。mutable是ANSI C++考虑到实际编程时,可能一定要修改const对象中的某个数据成员而设的。3.普通对象:可以调用任意成转载 2012-09-21 20:45:25 · 663 阅读 · 0 评论 -
模板函数和模板类
定义3个参数,第3个参数用于表示返回值类型template typename T1,typename T2,typename T3>inline T3 const& max (T1 const& a, T2 const& b){ // if a < b then use b else use a return a < b ? b : a;}原创 2012-09-21 21:01:06 · 672 阅读 · 0 评论 -
C++运算符优先级
优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .原创 2012-09-21 21:25:07 · 721 阅读 · 0 评论 -
各种排序算法的稳定性和时间复杂度小结
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。直接插入排序:O(n*n)选择排序:O(n*n)快速排序:平均时间复原创 2012-03-30 22:23:24 · 1425 阅读 · 0 评论 -
0/1背包问题--Dynamic Programming
DP问题的特征:重复子问题存在最优子集背包问题属于经典的DP问题,而0/1背包问题是属于最简单的情况。0/1的意思是每种物品只有一件,要么放入背包中,要么不放问题定义:有N个物品,要放入容量为W的背包中,第i件物品重量为w(i),价值为v(i),问要怎样放才能在不超过背包容量的基础上,获得最大的价值。算法描述:需要转载 2012-09-25 22:28:15 · 988 阅读 · 0 评论 -
等概率产生0和1(延伸)
1.有一个随机数发生器,能以概率p生成0,以概率1-p生成1,问如何做一个随机数发生器 使得生成0和1的概率相等。 2.用上面那个生成0和1的概率相等的随机数发生器,怎样做一个随机数发生器使得它生成 的数在1...N之间均匀分布。 第一题比较简单,可以用原发生器周期性地产生2个数,直到生成01或者10。 由于生成01和10的概率均为p(1-p),故预先任意指定01为0原创 2012-10-28 21:29:08 · 3146 阅读 · 0 评论 -
Effective C++总结
条款1:View C++ as a federation of languages。视C++为一个语言联邦。分为四个部分:C、Object-Oriented C++(Class)、Template C++、STL条款2:Prefer consts, enums, inlines to #defines。尽量以const, enum, inline替代#define。记住原创 2012-10-30 17:04:38 · 1409 阅读 · 0 评论 -
继承和组合的区别
首先它们都是实现系统功能重用,代码复用的最常用的有效的设计技巧,都是在设计模式中的基础结构。相信大家已了解的,类继承允许我们根据自己的实现来覆盖重写父类的实现细节,父类的实现对于子类是可见的,所以我们一般称之为白盒复用。对象持有(其实就是组合)要求建立一个号的接口,但是整体类和部分类之间不会去关心各自的实现细节,即它们之间的实现细节是不可见的,故成为黑盒复用。 继承是在编译时刻静态转载 2012-10-21 22:02:00 · 5061 阅读 · 0 评论 -
定义一个宏获取结构体中变量相对结构体开始的偏移量
#include using namespace std;struct test{ int a; char b; int c; char d;};#define find(type, var) (unsigned int)(&(((type *)(0))->var))int main(){ int a = find(test, a); //0 int b = fin原创 2012-10-22 14:26:11 · 1367 阅读 · 0 评论 -
C++中的空类,默认产生哪些类成员函数?
class Empty{public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造函数 ~Empty(); // 析构函数 Empty& operator=( const Empty& )原创 2012-10-23 17:44:16 · 1023 阅读 · 0 评论 -
socket的read和recv函数的区别
1、recv和send recv和send函数提供了和read和write差不多的功能.但是他们提供了第四个参数来控制读写操作。int recv(int sockfd,void *buf,int len,int flags)int send(int sockfd,void *buf,int len,int flags)前面的三个参数和read,write相同,第四个参数能够是0或转载 2012-10-26 19:31:00 · 1189 阅读 · 0 评论 -
二分查找及其变形
二分查找常用来查找指定有序集合中元素的位置,思路和代码都比较简单,所以大家都很熟练。二分查找貌似很多公司在面试或笔试的时候都会多少涉及到,经常会让你在纸上直接写代码,所以平常只知道原理而从来不自己写的人,可能不会太快写出来,或是代码有点小漏洞,所以经常敲敲常见的数据结构和代码还是很必要的。经典二分查找的代码:int Find(int arr[], int key,int length)转载 2012-10-26 19:59:22 · 864 阅读 · 0 评论 -
linux的tcp服务端、客户端例子
TCP编程的服务器端一般步骤是:1、创建一个socket,用函数socket();2、设置socket属性,用函数setsockopt(); * 可选3、绑定IP地址、端口等信息到socket上,用函数bind();4、开启监听,用函数listen();5、接收客户端上来的连接,用函数accept();6、收发数据,用函数send()和recv(),转载 2012-10-26 19:18:50 · 1090 阅读 · 0 评论 -
螺旋数组
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213转载 2012-10-26 22:24:47 · 892 阅读 · 0 评论 -
自己实现memcpy/strcpy/strcmp/strcat/strlen/strstr
字节拷贝函数:void * memcpy1(void *dest, const void *src, size_t n){ assert(dest!=NULL&&src!=NULL); //有效性检测 if(dest == src) return dest; else if(dest原创 2012-10-23 18:10:37 · 931 阅读 · 0 评论 -
常见端口号
21/tcp FTP文件传输协议22/tcp SSH 安全登录、文件传送(SCP)和端口重定向23/tcp Telnet 不安全的文本传送25/tcp SMTP Simple Mail Transfer Protocol (E-mail)53/UDP DNS 域名解析服务69/udp TFTP Trivial File Transfer Protocol79/t原创 2012-11-10 13:59:12 · 1159 阅读 · 0 评论 -
C++关键字
C++考试用到的关键字是预先保留的标识符,每个关键字都有特殊的含义。我们不能在程序中使用与关键字同名的标识符。以下是C++所保留的关键C++关键字全集(这个是从C++ Primer copy过来的,有一些补充,也有一些已经被替代):(1)asmasm已经被__asm替代了,用于汇编语言嵌入在C/C++程序里编程,从而在某些方面优化代码.虽然用转载 2012-04-04 16:28:50 · 1864 阅读 · 0 评论 -
百度2013校园招聘笔试题(含自己整理的答案)
一:简答题(30)1:数据库以及线程发生死锁的原理及必要条件,如何避免死锁答:产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。产生死锁的四个必要条件:(1)互斥条件:一个资源每次只能被一个进程使用。(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3)不剥夺条件:原创 2012-10-07 17:35:16 · 7775 阅读 · 2 评论 -
数组名和数组名取地址的区别
以下代码会打印出什么样的日志呢?[cpp] view plaincopy#include int a[2] = {1,2}; int main(){ printf("a = %p\n", a); // I printf("&a = %p\n", &a); // II原创 2012-04-03 19:37:41 · 668 阅读 · 0 评论 -
一个微软面试题--关于位结构体
含位域结构体的sizeof:前面已经说过,位域成员不能单独被取sizeof值,我们这里要讨论的是含有位域的结构体的sizeof,只是考虑到其特殊性而将其专门列了出来。C99规定int、unsigned int和bool可以作为位域类型,但编译器几乎都对此作了扩展,允许其它类型类型的存在。使用位域的主要目的是压缩存储,其大致规则为:1) 如果相邻位域字段的类型相同,且其位宽之和小于类原创 2012-04-02 15:06:30 · 1966 阅读 · 0 评论 -
typedef和define的详细区别
对于都可以用来给对象取一个别名的Typedef和define来说,是有区别的。本文通过对typedef和define的介绍,来给读者详细的讲解它们存在的本质区别,供参考。AD:typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。 #define是预处理指令。下面让我们一起来看。typ转载 2012-04-04 16:22:05 · 730 阅读 · 0 评论 -
reinterpret_cast,const_cast,static_cast,dynamic_cast 总结
#includeint main(void){//reinterpret_cast//将一个类型指针转换为另一个类型指针,这种在转换不修改指针变量值数据存放格式//只需在编译时重新解释指针的类型,他可以将指针转化为一个整型数但不能用于非指针的转换 double d=9.3;double* pd = &d;int* pi = reinterpret_cast (p原创 2012-04-04 16:59:39 · 1416 阅读 · 0 评论 -
memcpy() 和 memmove() 有什么区别?
如果源和目的参数有重叠, memmove() 提供有保证的行为。而 memcpy() 则不能提供这样的保证, 因此可以实现得更加有效率。如果有疑问, 最好使用 memmove()。参考资料: [K&R2, Sec. B3 p. 250]; [ISO, Sec. 7.11.2.1, Sec. 7.11.2.2]; [Rationale, Sec. 4.11.2]; [H&S, Sec. 1转载 2012-04-07 10:37:54 · 815 阅读 · 0 评论 -
临界区、互斥、信号量、事件区别
四种进程或线程同步互斥的控制方法 1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。 临界区(Critical Section)原创 2012-04-09 21:09:07 · 975 阅读 · 0 评论 -
Trie树|字典树的简介及实现
Trie,又称字典树、单词查找树,是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。相对来说,Trie树是一种比较简单的数据结构.理解起来比较简单,正所谓简单的东西也得付出代价.故Trie树也有它的缺点,Trie树的内存消耗非常大.当然,或许用左儿子右兄弟的方法建树的话,可能会好点.其基本性质可以归纳为:1. 根节点不包含字符,除根节点外每一个节转载 2012-05-04 21:20:38 · 692 阅读 · 0 评论 -
数据结构:TRIE树
Trie树就是字符树,其核心思想就是空间换时间。举个简单的例子。给你100000个长度不超过10的单词。对于每一个单词,我们要判断他出没出现过,如果出现了,第一次出现第几个位置。这题当然可以用hash来,但是我要介绍的是trie树。在某些方面它的用途更大。比如说对于某一个单词,我要询问它的前缀是否出现过。这样hash就不好搞了,而用trie还是很简单。现在回到例子中转载 2012-05-04 21:32:31 · 819 阅读 · 0 评论 -
布隆过滤器 bloom filter
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。基本概念如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路转载 2012-05-04 21:04:01 · 2096 阅读 · 0 评论 -
c++ 虚函数的实现机制
1、c++实现多态的方法其实很多人都知道,虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?从more effecive c++其中一篇文章里面可以知道:是每个类用了一个虚表,每个类的对象用了一个虚指针。具体的用法如下:class A{public: virtual void f(); virtual void g();private原创 2012-04-21 19:45:49 · 806 阅读 · 0 评论 -
Hash和Bloom Filter
这几天的“科研”中涉及到了一个概念,Bloom Filter(有的中文翻译为布隆过滤器,不知道正确否),今天看了下相关的资料,发现这东西和Hash还挺有关系的,在这里一并讲下。Hash(函数/表)Hash (中译为哈希,或者散列)函数在计算机领域,尤其是数据快速查找领域,加密领域用的极广。其作用是将一个大的数据集映射到一个小的数据集上面(这些小的数据集叫做哈希值,或者散列值)。Ha转载 2012-05-04 21:12:16 · 796 阅读 · 0 评论 -
最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。其基本思想是,设转载 2012-05-05 20:44:15 · 1405 阅读 · 0 评论 -
海量数据处理常见方法
所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小:分而治之/hash映射,你不转载 2012-09-05 23:17:49 · 1317 阅读 · 0 评论 -
典型递归算法例子-------Python实现
#!/usr/bin/python#coding=utf-8'''Created on 2012-9-25@author: linzuxin'''status = {}def factorial(n): ''' 输入一个数字,求其阶乘。status是一个hash,用来存储中间结果,避免重复计算 @param n: 要求的数字 @r原创 2012-09-26 16:56:37 · 9646 阅读 · 1 评论 -
深入研究Java类加载机制
类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行。研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性。 一、简单过程 Java程序运行的场所是内存,当在命令行下执行:java HelloWorld命令的时候,JVM会将HelloWorld.class加载到内存中,并转载 2012-09-10 23:41:17 · 977 阅读 · 0 评论 -
Java中new和newInstance的区别
1、类的加载方式不同 在执行Class.forName("a.class.Name")时,JVM会在classapth中去找对应的类并加载,这时JVM会执行该类的静态代码段。在使用newInstance()方法的时候,必须保证这个类已经加载并且已经连接了,而这可以通过Class的静态方法forName()来完成的。 使用关键字new创建一个类的时候,这个类可以没有被加载,一般也转载 2012-09-10 23:47:51 · 4207 阅读 · 0 评论 -
判断两个矩形是否相交的4个方法
最近在用opencv寫一個文本定位的程序,獲取到字符輪廓之後需要進行合並,涉及到判斷矩形是否相交的問題,記得去年去三星通信研究院面試同樣問到了這個問題,如何判斷兩條線段是否相交,如何判斷兩個矩形是否相交。以前寫過一篇如何判斷線段相交的問題,上網查了一些方法,在這裡做一下後一個問題的總結:方法一:假定矩形是用一對點表達的(minx,miny)(maxx, maxy) ,那麼兩個矩形rec转载 2015-09-11 14:48:09 · 17198 阅读 · 1 评论