文档库 最新最全的文档下载
当前位置:文档库 › BAT经典面试题汇总

BAT经典面试题汇总

BAT经典面试题汇总
BAT经典面试题汇总

STL中vector的实现原理(衍生:Map, Set等实现原理)

参考答案

vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必因为害怕空间不足而一开始要求一个大块头的array了,我们可以安心使用array,吃多少用多少。

vector的实现技术,关键在于其对大小的控制以及重新配置时的数据移动效率。一旦vector的旧有空间满载,如果客户端每新增一个元素,vector的内部只是扩充一个元素的空间,实为不智。因为所谓扩充空间(不论多大),一如稍早所说,是”配置新空间/数据移动/释还旧空间“的大工程,时间成本很高,应该加入某种未雨绸缪的考虑。稍后我们便可看到SGI vector的空间配置策略了。

另外,由于vector维护的是一个连续线性空间,所以vector支持随机存取。

注意:vector动态增加大小时,并不是在原空间之后持续新空间(因为无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间。因此,对vector 的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了。这是程序员易犯的一个错误,务需小心。

给定N张扑克牌和一个随机函数,设计一个洗牌算法

参考答案

1 2 3 4 5 6 7 8 9

10

11

12

13

14

15

16 void shuffle(int cards[],int n)

{

if(cards==NULL)

return ;

srand(time(0));

for(int i=0;i

{

//保证每次第i位的值不会涉及到第i位以前

int index=i+rand()%(n-i);

int temp=cards[i];

cards[i]=cards[index];

cards[index]=temp;

}

}

25匹马,5个跑道,每个跑道最多能有5匹马进行比赛,最少比多少次能比出前3名?前5名?

参考答案

找出前3名最少需要7场就可以确定。首先我们将25匹?马分成5组,分别为ABCDE,5

组分别进行比赛决出各小组名次;接着让各小组第一进行比赛决出冠军,我们假设各小组第一分别是A1, B1, C1, D1, E1,并且速度A1 > B1 > C1 > D1 > E1;接着2,3名可以在一场比赛内决出,分别由A2, A3, B1, B2, C1参赛;这样总共进行了5 + 1 + 1 = 7场;找出前5名的思路和这个类似。

100亿个整数,内存足够,如何找到中位数?内存不足,如何找到中位数?

参考答案

内存足够的情况:可以使?用类似quick sort的思想进行,均摊复杂度为O(n),算法思想

如下:

? 随机选取一个元素,将比它小的元素放在它左边,比它大的元素放在右边

? 如果它恰好在中位数的位置,那么它就是中位数,可以直接返回

? 如果小于它的数超过一半,那么中位数一定在左半边,递归到左边处理

? 否则,中位数一定在右半边,根据左半边的元素个数计算出中位数是右半边的第几大,然后递归到右半边处理

内存不?足的情况:

方法?:?分法

思路:一个重要的线索是,这些数都是整数。整数就有范围了,32位系统中就是[-2^32, 2^32-

1],有了范围我们就可以对这个范围进行二分,然后找有多少个数?于Mid,多少数大于mid,然后递归,和基于quicksort思想的第k大?方法类似

方法二:分桶法思路:化大为小,把所有数划分到各个小区间,把每个数映射到对应的区

间?里,对每个区间中数的个数进行计数,数一遍各个区间,看看中位数落在哪个区间,若够小,使?用基于内存的算法,否则继续划分

请简述智能指针原理,并实现一个简单的智能指针。

参考答案

智能指针是一种资源管理类,通过对原始指针进行封装,在资源管理对象进行析构时对指针指向的内存进行释放;通常使用引用计数方式进行管理,一个基本实现如下:

1 2 3 4 5 6 7 class Object;

class SmartPointer;

class Counter

{

friend class SmartPointer; public:

8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

Counter()

{

ptr = NULL;

cnt = 0;

}

Counter(Object* p)

{

ptr = p;

cnt = 1;

}

~Counter()

{

delete ptr;

}

private:

Object* ptr;

int cnt;

};

class SmartPointer

{

public:

SmartPointer(Object* p)

{

ptr_counter = new Counter(p);

}

SmartPointer(const SmartPointer &sp)

{

ptr_counter = sp.ptr_counter;

++ptr_count->cnt;

}

SmartPointer& operator=(const SmartPointer &sp) {

++sp.ptr_counter->cnt;

--ptr_counter->cnt;

if (ptr_counter->cnt == 0)

{

delete ptr_counter;

}

ptr_counter = sp.ptr_counter;

}

~SmartPointer()

{

- -ptr_counter->cnt;

52

53

54

55

56

57

58

59

60

if (ptr_counter->cnt == 0)

{

delete ptr_counter;

}

}

private:

Counter* ptr_counter;

};

如何处理循环引用问题?

参考答案

刚刚研究过这个问题。

何为循环引用

如果有两个或者以上的对象,它们彼此引用,就会造成循环引用。如下面的例子

class Node{

Node next;

}

Node a=new Node();

Node b=new Node();

a.next=b;

b.next=a;

代码中,a对象引用了b对象,b对象也引用了a对象,这种情况下a对象和b对象就形成了循环引用。

引用计数GC处理

什么是引用计数

引用计数是一种垃圾回收的形式,每一个对象都会有一个计数来记录有多少指向它的引用。

其引用计数会变换如下面的场景

?当对象增加一个引用,比如赋值给变量,属性或者传入一个方法,引用计数执行加1运算。?当对象减少一个引用,比如变量离开作用域,属性被赋值为另一个对象引用,属性所在的对象被回收或者之前传入参数的方法返回,引用计数执行减1操作。

?当引用计数变为0,代表该对象不被引用,可以标记成垃圾进行回收。

如何处理

实际上单纯的基于引用计数实现的计数器无法处理循环引用带来的问题。

CPython的垃圾回收就是采用引用计数,采用引用计数的主垃圾回收器会清理垃圾,对于那些因为循环引用无法清理的对象,CPython会不时启动一个辅助的基于引用遍历的垃圾回收器来清理它们。

引用遍历GC处理

什么是引用对象遍历

垃圾回收器从被称为GC Roots的点开始遍历遍历对象,凡是可以达到的点都会标记为存活,堆中不可到达的对象都会标记成垃圾,然后被清理掉。GC Roots有哪些

?类,由系统类加载器加载的类。这些类从不会被卸载,它们可以通过静态属性的方式持有对象的引用。注意,一般情况下由自定义的类加载器加载的类不能成为GC Roots

?线程,存活的线程

?Java方法栈中的局部变量或者参数

?JNI方法栈中的局部变量或者参数

?JNI全局引用

?用做同步监控的对象

?被JVM持有的对象,这些对象由于特殊的目的不被GC回收。这些对象可能是系统的类加载器,一些重要的异常处理类,一些为处理异常预留的对象,以及一些正在执行类加载的自定义的类加载器。但是具体有哪些前面提到的对象依赖于具体的JVM实现。

如何处理

基于引用对象遍历的垃圾回收器可以处理循环引用,只要是涉及到的对象不能从GC Roots 强引用可到达,垃圾回收器都会进行清理来释放内存。

总结

基于引用计数的垃圾回收器无法处理循环引用导致的内存泄露问题,但是其在主流的JVM 中很少,几乎所有的JVM都是采用引用对象遍历的方法,垃圾回收器都会处理循环引用潜在的问题。

请实现一个单例模式的类,要求线程安全

参考答案

在C++之后,下面的实现是个线程安全的单例模式实现:

1 2 3 4 5 6 7 8 9

10

11 class Singleton

{

private:

Singleton();

Singleton(const Singleton &s);

Singleton& operator=(const Singleton &s); public:

static Singleton* GetInstance()

{

static Singleton instance;

return &instance;

12

13

} };

下面的结构体大小分别是多大(假设32位机器)?

1 2 3 4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24 struct A {

char a;

char b;

char c;

};

struct B {

int a;

char b;

short c;

};

struct C {

char b;

int a;

short c;

};

#pragma pack(2) struct D {

char b;

int a;

short c;

};

参考答案

3,8,12,8

引用和指针有什么区别?

参考答案

本质:引用是别名,指针是地址,具体的:

? 指针可以在运行时改变其所指向的值,引用一旦和某个对象绑定就不再改变? 从内存上看,指针会分配内存区域,而引用不会,它仅仅是一个别名

? 在参数传递时,引?用会做类型检查,而指针不会

? 引用不能为空,指针可以为空

const和define有什么区别?

参考答案

本质:define只是字符串替换,const参与编译运行,具体的:

? define不会做类型检查,const拥有类型,会执行相应的类型检查

? define仅仅是宏替换,不占?用内存,?而const会占用内存

? const内存效率更高,编译器通常将const变量保存在符号表中,而不会分配存储空间,这使得它成为一个编译期间的常量,没有存储和读取的操作

define和inline有什么区别?

参考答案

本质:define只是字符串替换,inline由编译器控制,具体的:

? define只是简单的宏替换,通常会产生二义性;而inline会真正地编译到代码中

? inline函数是否展开由编译器决定,有时候当函数太大时,编译器可能选择不展开相应的函数

malloc和new有什么区别?

参考答案

C++中static关键字作用有哪些?

参考答案

1、隐藏:当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。

static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏.

2、static的第二个作用是保持变量内容的持久:存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。

共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static 可以控制变量的可见范围,

说到底static还是用来隐藏的。虽然这种用法不常见

3、static的第三个作用是默认初始化为0(static变量)

4、C++中的作用

1)不能将静态成员函数定义为虚函数。

2)静态数据成员是静态存储的,所以必须对它进行初始化。(程序员手动初始化,否则编译时一般不会报错,但是在Link时会报错误)

3)静态数据成员在<定义或说明>时前面加关键字static。

C++中const关键字作用有哪些??

参考答案

? 修饰变量

? 修饰成员函数,表示该成员函数不会修改成员变量

C++中成员函数能够同时用static和const进行修饰?

参考答案

否,因为static表?示该函数为静态成员函数,为类所有;而const是用于修饰成员函数的,两者相矛盾

下面三个变量分别代表什么含义?

const int* ptr;

int const* ptr;

int* const ptr;

参考答案

前两个代表指向const变量的指针,即指针所指向的对象是const的,不能使用指针修改;最后一个代表const指针,即指针本身是const的,不能指向其他地址

C++中包含哪几种强制类型转换?他们有什么区别和联系?

参考答案

? reinterpret_cast: 转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型,反之亦然. 这个操作符能够在非相关的类型之间转换. 操作结果只是简单的从一个指针到别的指针的值的二进制拷贝. 在类型之间指向的内容不做任何类型的检查和转换?

class A{};

class B{};

A* a = new A;

B* b = reinterpret_cast(a);

? static_cast: 允许执行任意的隐式转换和相反转换动作(即使它是不允许隐式的),例如:应用到类的指针上, 意思是说它允许子类类型的指针转换为父类类型的指针(这是一个有

效的隐式转换), 同时, 也能够执行相反动作: 转换父类为它的子类

class Base {};

class Derive:public Base{};

Base* a = new Base;

Derive *b = static_cast(a);

? dynamic_cast: 只用于对象的指针和引用. 当用于多态类型时,它允许任意的隐式类型转换以及相反过程. 不过,与static_cast不同,在后一种情况里(注:即隐式转换的相反过程),dynamic_cast 会检查操作是否有效. 也就是说, 它会检查转换是否会返回一个被请求的有效的完整对象。检测在运行时进行. 如果被转换的指针不是一个被请求的有效完整的对象指针,返回值为NULL. 对于引用类型,会抛出bad_cast异常

? const_cast: 这个转换类型操纵传递对象的const属性,或者是设置或者是移除,例如:class C{};

const C* a = new C;

C *b = const_cast(a);

下面两段代码的输出分别是什么?

1 2 3 4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23 class Base{

public:

virtual void Print() const{

cout << "Print in Base" << endl;

}

};

class Derive::public base

{

public:

void Print() const{

cout << "Print in Derive" << endl;

}

};

void Print(const Base* base){

base->Print();

}

int main(){

Base b;

Derive d;

print(&b);

print(&d);

return 0;

}

1 2 3 4 5 6 7 8 9 10 class Base{

public:

void Print() const{

cout << "Print in Base" << endl;

}

};

class Derive::public base

{

public:

void Print() const{

11

12

13

14

15

16

17

18

19

20

21

22

23

cout << "Print in Derive" << endl;

}

};

void Print(const Base* base){

base->Print();

}

int main(){

Base b;

Derive d;

print(&b);

print(&d);

return 0;

}

参考答案

考察对虚函数的基本理解

第一个:Print in Base, Print in Derive

第二哥:Print in Base, Print in Base

简述C++虚函数作用及底层实现原理

参考答案

要点是要答出虚函数表和虚函数表指针的作用。C++中虚函数使用虚函数表和虚函数表指针实现,虚函数表是一个类的虚函数的地址表,用于索引类本身以及父类的虚函数的地址,假如子类的虚函数重写了父类的虚函数,则对应在虚函数表中会把对应的虚函数替换为子类的虚函数的地址;虚函数表指针存在于每个对象中(通常出于效率考虑,会放在对象的开始地址处),它指向对象所在类的虚函数表的地址;在多继承环境下,会存在多个虚函数表指针,分别指向对应不同基类的虚函数表。

一个对象访问普通成员函数和虚函数哪个更快?

参考答案

访问普通成员函数更快,因为普通成员函数的地址在编译阶段就已确定,因此在访问时直接调用对应地址的函数,而虚函数在调用时,需要首先在虚函数表中寻找虚函数所在地址,因此相比普通成员函数速度要慢一些

在什么情况下,析构函数需要是虚函数?

参考答案

若存在类继承关系并且析构函数中需要析构某些资源时,析构函数需要是虚函数,否则当使用父类指针指向子类对象,在delete时只会调用父类的析构函数,而不能调用子类的析构函数,造成内存泄露等问题

内联函数、构造函数、静态成员函数可以是虚函数吗?

参考答案

都不可以。内联函数需要在编译阶段展开,而虚函数是运行时动态绑定的,编译时无法展开;构造函数在进行调用时还不存在父类和子类的概念,父类只会调用父类的构造函数,子类调用子类的,因此不存在动态绑定的概念;静态成员函数是以类为单位的函数,与具体对象无关,虚函数是与对象动态绑定的,因此是两个不冲突的概念;

构造函数中可以调用虚函数吗?

参考答案

可以,但是没有动态绑定的效果,父类构造函数中调用的仍然是父类版本的函数,子类中调用的仍然是子类版本的函数

简述C++中虚继承的作用及底层实现原理?

参考答案

虚继承用于解决多继承条件下的菱形继承问题,底层实现原理与编译器相关,一般通过虚基类指针实现,即各对象中只保存一份父类的对象,多继承时通过虚基类指针引用该公共对象,从而避免菱形继承中的二义性问题。

1000个灯围成一个环,初始状态是熄灭的,按一个灯,它以及它的左右两盏灯的状态会改变,问如何让所有灯都亮?

参考答案

挨个按一遍。思路是每个灯只会被3个位置改变状态,挨个按一遍恰好每个位置被改变了奇数次状态

n条直线最多能将一个平面分成多少部分?

参考答案

num[n] = num[n - 1] + n 思路:第n条直线总能和前?面n-1条直线形成n-1个交点,将第

n条直线分成n份,每一份会多分出一个平?面;num[n] = 1 + n*(n+1)/2;

n个平面最多能将一个空间切成多少部分?

参考答案

显然,当这n个平面满足以下条件时,所分割的部分数是最多的。1、这n个平面两两相交;2、没有三个以上的平面交于一点;3、这n个平面的交线任两条都不平行。对于一般情况一下子不易考虑,我们不妨试着从简单的,特殊的情况入手来寻找规律。设n个平面分空间的部分数为an,易知当n=1时,an=2 ;当n=2时,an=4 当n=3时,an=8 当n=4 时,情况有些复杂,我们以一个四面体为模型来观察,可知an=15 ;从以上几种情况,很难找出一个一般性的规律,而且当n的值继续增大时,情况更复杂,看来这样不行。那么,我们把问题在进一步简单化,将空间问题退化到平面问题:n条直线最多可将平面分割成多少个部分?(这n条直线中,任两条不平行,任三条不交于同一点),设n条直线最多可将平面分割成bn个部分,那么当n=1,2,3时,易知平面最多被分为2,4,7个部分。当n=k 时,设k条直线将平面分成了bk个部分,接着当添加上第k+1 条直线时,这条直线与前k 条直线相交有k个交点,这k个交点将第k+1条直线分割成k段,而每

一段将它所在的区域一分为二,从而增加了K+1 个区域,故得递推关系式

b(k+1)=b(k)+(k+1) ,即b(k+1)-b(k)=k+1 显然当k=1 时, b(1) =2,当k=1,2,3.....n-1 时,我们得到个式子:b(2)-b(1)=2; b(3)-b(2)=3; b(4)-b(3)=4; b(5)-b(4)=5; …… b(n)-b(n-1)=n; 将这n-1个式子相加,得b(n)=1/2*(n^2+n+2),即n条直线最多可将平面分割成

1/2*(n^2+n+2) 个部分。我们来归纳一下解决这个问题的思路:从简单情形入手,确定b(k) 与b(k+1)的递推关系,最后得出结论。现在,我们回到原问题,用刚才的思路来解决空间的问题,设k个平面将空间分割成a(k)个部分,再添加上第k+1个平面,这个平面与前k 个平面相交有k条交线,这k条交线,任意三条不共点,任意两条不平行,因此这第k+1个平面就被这k条直线分割成b(k)个部分。而这b(k)个部分平面中的每一个,都把它所通过的那一部分空间分割成两个较小的空间。所以,添加上这第k+1个平面后就把原有的空间数增加了b(k)个部分。由此的递推关系式a(k+1)=a(k)+b(k),即a(k-1)-a(k)=b(k) 当

k=1,2,3........n-1时,我们得到如下n-1个关系式a(2)-a(1)=b(1); a(3)-a(2)=b(2); ……

a(n)-a(n-1)=b(n-1); 将这n-1个式子相加,得a(n)=a(1)+(b(1)+b(2)+b(3)+.......+b(n-1)) 因为b(n)= 1/2*(n^2+n+2),a(1)=2 所以

a(n)=2+{1/2*(1^2+1+2)+(2^2+2+2)+(3^2+3+2)+........+((n-1^2)+(n-1)+2)} =(n^3+5*n+6)/6 问题的解:由上述分析和推导可知,n个平面最多可将平面分割成=(n^3+5*n+6)/6

两个机器人,初始时位于数轴上的不同位置。给这两个机器人输入一段相同的程序,使得这两个机器人保证可以相遇。程序只能包含“左移n 个单位”、“右移n 个单位”,条件判断语句If,循环语句while, 以及两个返回Boolean 值的函数“在自己的起点处”和“在对方的起点处”。你不能使用其它的变量和计数器,请写出该程序

参考答案

答案合理即可,下面是一个参考:

1 2 3 4 while (!at_other_robot_start()) move_right(1);

while (true)

move_right(2)

有n 个人互相比赛(n已知), 一个人输掉 4 次就出局(不能继续比赛),赢7 次通过(可以继续比赛), 问最多通过人数?

参考答案

方程法,无人出局条件下,每个人最多送3次助攻,设a个胜者,b个败者

7a <= 3n + b; a + b = n;

两个软硬程度一样的鸡蛋,它们在某一层摔下会碎,有个100层的建筑,要求最多用两个鸡蛋确定鸡蛋安全下落的临界位置,给出临界位置?如果是n层楼,m个鸡蛋,请给出确定临界位置的算法

参考答案

动态规划方法

100层楼2个鸡蛋:f[n] = min(1 + max(i - 1, f[n - i])) i = 1……n

n层楼m个鸡蛋:f[i, 0] = 0; f[n,m] = min(1 + max(f[i - 1, m - 1], f[n - i, m]) i = 1…n

n个人,只有1个人是明星,明星所有人都认识,但明星不认识其他任何人,如何找到该明星?如果n很大很大,如果改进你的算法?

参考答案

线性扫描一遍,两两比较,每次比较都会排出一个人:若a认识b,则a一定不是明星;若a不认识b,则b一定不是明星;n很大的情况下可以采用分布式方法,每个机器处理一部分数据,最后每个机器选出一个候选,归并

给50个硬币,面值可以不同,排成一排,两个人轮流取,只能从两端取,先取的人如何保证取到的币值大于等于另一个人

参考答案

看奇数位的数的和以及偶数位的数的和哪个大,若奇数位的大选第一个,否则选最后面的(这里假设奇数位和偶数位的和不同)若出现相同,可以采用动态规划的思路来做

一个绳子从一头开始烧是1小时,要求想办法测出45分钟。

参考答案

用甲乙两根绳.先同时点燃甲的两端以及乙的一端,当甲烧完后过去了30分钟,因为是两头烧,所以就是30分钟.而乙已经烧了30分钟,还有30分钟的量,此时再点燃乙的另一端.双管齐下,剩下的30分钟只烧了15分钟,加上一开始已经烧了30分钟,共45分钟

100个囚犯从前往后坐成一列。坐在最后面的那个囚犯能够看到其余99个囚犯,坐在最前面的那个囚犯啥也看不见。看守给每个囚犯戴上一顶黑色的或者白色的帽子。然后,看守会从后往前依次叫这些囚犯猜测自己头顶上的帽子的颜色。如果哪个囚犯猜对了,他就自由了。坐在前面的每一个囚犯都可以听到后面的囚犯的猜测。如果这100个囚犯事先可以商量好一种策略,那么最理想的策略是什么?

参考答案

100个囚犯从前往后坐成一列。坐在最后面的那个囚犯能够看到其余99个囚犯,坐在最前面的那个囚犯啥也看不见。看守给每个囚犯戴上一顶黑色的或者白色的帽子。然后,看守会从后往前依次叫这些囚犯猜测自己头顶上的帽子的颜色。如果哪个囚犯猜对了,他就自由了。坐在前面的每一个囚犯都可以听到后面的囚犯的猜测。如果这100个囚犯事先可以商量好一种策略,那么最理想的策略是什么?

囚犯们可以乱猜一通,最坏情况下所有人都猜错,平均下来则会有50个人猜对。这个题有趣的地方就在于,100个囚犯事先可以商量一种策略,也就是说坐在后面的囚犯可以用他的猜测给坐在前面的囚犯透露一些信息。很显然,坐在最后面的囚犯是不可能保证自己猜对的,他猜黑猜白都只有一半的几率猜对,似乎没什么区别;但囚犯可以事先约定好一种暗号,即最后一个囚犯猜黑表示什么意思,猜白表示什么意思。比如,最后一个囚犯可以猜测和他前面的囚犯的帽子一样的颜色,这就相当于用他的猜测告诉了他前面那个囚犯该猜什么,于是坐倒数第二的囚犯可以保证被释放;此时,坐在倒数第三个位置上的囚犯面对与刚才坐最后的囚犯相同的处境,他同样可以用他的猜测提示出他前面那个人的帽子颜色。这样下去,可以保证至少50个人猜对,平均情况则有75个人猜对。这不是最佳的策略。

不可思议的是,最佳策略可以保证,除了坐在最后面的囚犯以外,其余99个囚犯都能猜对。你能想出这样的策略是什么吗?继续看下去前不妨先想一下。

前面那种策略的问题在于,坐在最后面的那个人透露出的信息不多。他完全可以透露出与全局相关的一些信息,因此以后所有的人都可以用这条信息。比如,他可以数一数他前面99个人一共有多少顶白帽子,并约定他猜“黑”表示他前面共有偶数顶白帽,他猜“白”表示他前面共有奇数顶白帽。坐倒数第二的那个人也数一数他前面98个人的白帽子个数:如果他数出来的个数与先前透露出的个数一奇一偶,则他自己肯定戴的是白帽子;如果他数出来的和先前透露的结果奇偶性相同,则他自己戴的肯定是黑帽子。这样,坐倒数第二的保证可以猜对了。那接下来咋办呢?不要忘了,其他囚犯能听到刚才那人猜的是什么,并且知道他的猜测保证是对的。这相当于每个人不仅能看到坐他前面的所有人的帽子颜色,还知道他背后那些人的帽子颜色,结合最初的那个奇偶性信息,接下来的每一个人都可以猜出自己脑袋上的帽子颜色。这样下去,至少99个囚犯可以保证被释放。这种策略显然是最佳的,不可能再有什么策略能保证所有人都被释放,因为至少坐最后的那个人不可能保证自己猜对。

如何等概率地从n个数中随机抽出m个数?

上题中如果n的大小不确定(可以认为是?个数据流),如何做?

参考答案

每个位置i以(m - k)/(n - i + 1)的概率决定当前数是否选,k为前面已经抽出的数的个数

蓄水池采样法

给定一个能够生成0,1两个数的等概率随机数生成器”,如何生成?个产生

0,1,2,3的等概率随机数生成器?

和上题类似,如何用rand7生成rand9?

参考答案

将两个0,1随机生成器级联,每次产生两个数,则可能的结果有(0,0), (0,1), (1,0), (1,1),分别映射到0, 1, 2, 3即可

两个rand7可以产生49种可能,扔掉后面的4种,保留前45个,并平均分成9份,每次产生一个结果时,假如没落在对应区间中就扔掉,否则根据落在哪个区间判断是0--8中哪个

有一枚硬币,以p的概率产生正面,以1-p的概率产生背面,如何利用它产生个0.5概率的生成器?

参考答案

将两枚硬币级联,只保留“正反”,“反正”两种结果,其他两种结果扔掉

A,B,C三人轮流扔硬币,第一个扔到正面的人算赢,问三个人赢的概率分别为多大?

参考答案

P(B) = 1/2*P(A); P(C) = 1/4 * P(A); P(A) + P(B) + P(C) = 1;

得P(A) = 4/7, P(B) = 2/7, P(C) = 1/7

A 有n 个硬币,

B 有n+1 个硬币,谁丢的正面多谁赢,问A 不输的概率?

可前n轮,有3种情况,设P(A>B) = x, P(A == B) = y,由对称性P(A

现在来看B扔最后一个硬币的情况:

? 假如之前A>B,则无论怎么扔,A都不会输,最多平

? 如果A==B,则B扔了正面,A才会输,这是0.5y

? 如果A

所以A输的概率是:x + 0.5y = 0.5 * (2x + y) = 0.5,A不输的概率是1 - 0.5 = 0.5

一个机器人在原点,右边有一个距离为k的点,机器人以p的概率右移一步,1-p概率左移一步,问经过M步机器人处于k点的概率?

参考答案

k步右移,剩下的M - k步一半左移一半右移,所以M

扔硬币直到连续两次出现正面,求扔的期望次数

参考答案

假设期望次数是E,我们开始扔,有如下几种情况:

? 扔到的是反面,那么就要重新仍,所以是0.5*(1 + E)

? 扔到的是正面,再扔一次又反面了,则是0.25*(2 + E)

? 扔到两次,都是正面,结束,则是0.25*2

所以递归来看E = 0.5*(1 + E) + 0.25*(2 + E) + 0.25*2,解得E = 6

同样可以实现互斥,互斥锁和信号量有什么区别?

参考答案

信号量是一种同步机制,可以当作锁来用,但也可以当做进程/线程之间通信使用,作为通信使用时不一定有锁的概念;互斥锁是为了锁住一些资源,是为了对临界区做保护

请用普通的互斥锁编程实现一个读写锁

参考答案

下面是可参考的伪代码:

1 2 3 4 5 6 7 8 9

10

11 count_mutex = mutex_init(); write_mutex = mutex_init(); read_count = 0;

void read_lock {

lock(count_mutex);

read_count++;

if (read_count == 1) { lock(write_mutex);

}

unlock(count_mutex);

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29 void read_unlock {

lock(count_mutex);

read_count--;

if (read_count == 0) { unlock(write_mutex);

}

unlock(count_mutex);

}

void write_lock {

lock(write_mutex);

}

void write_unlock {

unlock(write_mutex);

}

编程实现三个线程ABC,并让它们顺次打印ABC

参考答案

思路:设置三个信号量:S1, S2, S3,S2由S1 post,S3由S2post, S1由S3 post,由A 线程先开始打印,其他线程必然在等待信号量,所以三个线程?一定会按照信号量的顺序来打印

简述Linux进程内存空间分为哪几个段?作用分别是什么?

参考答案

参考这个图?

简述Linux内存分配--伙伴系统原理

参考答案

伙伴系统,其思想是:把内存块分成不同的组(1,2,4,8,16,32....);分配内存时找到能够满足条件的最小的块;如果找不到,就找大的块,然后一分为2,分配一块,留一块;回收时:如果有相邻的同样大小的块,则合并

简述Malloc实现原理

参考答案

可以基于伙伴系统实现,也可以使用基于链表的实现

? 将所有空闲内存块连成链表,每个节点记录空闲内存块的地址、大小等信息

? 分配内存时,找到大小合适的块,切成两份,一分给用户,一份放回空闲链表

? free时,直接把内存块返回链表

? 解决外部碎片:将能够合并的内存块进行合并

使用mmap读写文件为什么比普通读写函数要快?

参考答案

mmap函数:可以将文件映射到内存中的一段区域,普通函数读写文件:用户空间buffer 内核空间buffer磁盘;mmap映射之后:用户空间buffer进程内存空间,省掉了拷贝到内核空间的时间?

Linux中如何实现Signal?

参考答案

基于软中断,不同Signal对应不同中断处理函数

设计一个抽象类,使得它可以完成有序数组归并的任务

参考答案

设计合理即可,下?面是一个参考代码

1 2 3 4 5 6 7 8 9

10

11

12 class Sequence {

public:

virtual Object* next() = 0;

virtual bool hasNext() = 0;

virtual Object* top() = 0;

virtual add(Object* obj) = 0;

};

class Object {

public:

virtual bool lessThan(Object* another); };

设计一个多终端日志打印的接口,使得它可以动态支持不同终端的日志打印参考答案

设计合理即可,关键点是利用动态绑定实现接口与实现的分离,下面是一个参考答案:

1 2 3 4 5 6 7 8 9

10

11 class BaseTerminal {

public:

virtual void PrintLog(const string& message) const = 0; };

class Screen: public BaseTerminal {

public:

void PrintLog(const string& message) const = 0;

};

class Network: public BaseTerminal {

12

13

14

15

16 public:

void PrintLog(const string& message) const = 0; };

void LogPrint(const BaseTerminal &terminal);

设计并实现一个LRU Cache

参考答案

下面是一个参考思路

? 重要数据结构:key-value存储、LRU存储;

? key-value存储:hash_table/map,LRU:链表,因为可以快速实现增加、删除

? 如何更新Cache: 找到key在链表中的位置,删除并将它插到表头,同时更新key到链表位置的映射

? 快速找到最不常访问的元素:链表尾

设计一个数据结构,能够支持插入、删除、返回最大值、最小值、随机返回一个数的操作

参考答案

设计合理即可,下面是一个参考思路:

? 插入、删除、最大、最小:使用set实现,复杂度O(logn)

? 如何实现random 使用数组,将所有数据放入数组中,random时随机返回数组元素? 记录每个元素在数组中的下标? 删除时首先将对应元素和最后一个元素交换,删除最后一个元素复杂度O(1)

设计一个Query suggestion的服务

参考答案

设计合理即可,下面是一个参考思路:

? 使用Trie树记录每个Query出现的频次(或其他权值)

? 在每个Trie树的节点设置一个最小堆,记录以当前节点的字符串为前缀的query中出现topK次数的query

? 更新query频次时,沿着trie树中的路径更新路径上节点中的最小堆

? 用户输入query时,直接返回对应trie树节点的最小堆中topK的query即可

什么是双数组Trie树?它的实现原理是什么??

参考答案

可参考这篇介绍文章:https://www.wendangku.net/doc/cd3306969.html,/~thep/datrie/datrie.html

设计qps (query per sec)函数,用它控制api调用,使得api n毫秒内只能被调用m次?

参考答案

设计合理即可,下面是一个参考思路:

? 维护一个窗口,窗口有左右两个边界;窗口内为从最后一次访问开始向前n毫秒所有的访

问?

? 当新来一个访问,更新窗口右边界,打新的时间戳;向右移动窗口左边界,将距当前n毫秒外的访问删除

? 统计次数看是否满足<= m次?

如何设计一个短网址服务系统?

参考答案

设计合理即可,实现思路:将url哈希到一个唯一的数值,将这个数值转化为一个字符串;另外还需要考虑系统负载等因素

如何设计一个网页爬虫系统?

参考答案

设计合理即可,实现思路:使用bfs算法进行网站爬取;使用master节点作为控制节点控制work 节点进行网站爬取;使用分布式队列做任务调度;使用key-value存储(如redis)做网页判重

给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?

与上题条件相同,如何找到top K的IP?如何直接用Linux系统命令实现?

参考答案

Hash分桶法:

? 将100G文件分成1000份,将每个IP地址映射到相应文件中:file_id = hash(ip) % 1000 ? 在每个文件中分别求出最高频的IP,再合并Hash分桶法:

? 使用Hash分桶法把数据分发到不同文件

? 各个文件分别统计top K

? 最后Top K汇总

Linux命令,假设top 10:sort log_file | uniq -c | sort -nr k1,1 | head -10

给定100亿个整数,设计算法找到只出现一次的整数

参考答案

Hash分桶法,将100亿个整数映射到不同的区间,在每个区间中分别找只出现一次的整数

给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集参考答案

关键点:扫描每个整数是否出现过,如何节省内存?使用bitmap

1个文件有100亿个int,1G内存,设计算法找到出现次数不超过2次的所有整数?

参考答案

Bitmap扩展:?用2个bit表?示状态,0未出现过,1出现过1次,2出现了2次或以上

公司常见面试试题及答案

常见面试试题及答案 1、请你自我介绍一下你自己, 回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,求职者要尊重考官,在回答每个问题之后都说一句“谢谢”。企业喜欢有礼貌的求职者。 2、你觉得你个性上最大的优点是什么 回答提示:沉着冷静、条理清楚、立场坚定、顽强向上。 乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在北大青鸟经过一到两年的培训及项目实战,加上实习工作,使我适合这份工作。我相信我能成功。 3、说说你最大的缺点 回答提示:这个问题企业问的概率很大,通常不希望听到直接回答的缺点是什么等,如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低,企业肯定不会录用你。绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,有的人以为这样回答会显得自己比较出色,但事实上,他已经岌芨可危了。企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分。企业喜欢聪明的求职者。 4、你对加班的看法 回答提示:实际上好多公司问这个问题,并不证明一定要加班。只是想测试你是否愿意为公司奉献。 回答样本:如果是工作需要我会义不容辞加班。我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班 5、你对薪资的要求

批处理的一些简单应用

内容:批处理应用的几个例子 作者:e哥(eaggle_wei) 时间:2011.3.6-2011.6.22 1.刷BIOS 我们在做测试工作时,经常要刷BIOS,而且BIOS时常更新,为了方便我们通常会把同一个机种的BIOS放在U盘中那个机种的文件名下,例如我做的P4LJ0的案子,里面BIOS 的版本从P4LJ0001一直更新到P4LJ0017,也就是文件名P4LJ0里面有17个关于BIOS的子文件,那么我们在刷BIOS时(比如我们刷P4LJ0001的bios)在dos下就会输入:C:\>cd P4LJ0 C:\P4LJ0>cd P4LJ0001 C:\ P4LJ0\P4LJ0001>bios.bat 这样一步一步来很麻烦,尤其是要刷新几十台机器的时候,所以我们就想到写个批处理放到根目录下,这样就不会每次按键按得手疼了。 例: cd P4LJ0 cd P4LJ0001 bios.bat 我们把以上内容放到一个简单字母或者数字命名的批处理中,保存下来存到U盘根目录下,例如保存到1.bat中。这样刷新时直接在提示符C:\>下输入1,然后回车就OK了,是不是很省事?当然有没有全自动化的,就是只需要插U盘,然后设置从U盘启动就OK了的?当然有了,比如我们把这个批处理命名为autoexec.bat就可以实现了,因为批处理默认这个批处理文件自动执行,但本人不建议这样做,即使你这样做了在工作结束后一定要记得把它删掉,否则可能图一时方便为以后制造不必要的麻烦。比如你把U盘插到另一个不共用的BIOS的机种上启动,这时刷完BIOS你就悲剧了,开不了机。 当然像我这种菜鸟,在刚开始看批处理的时候,连如何生成.bat文件都不懂,还以为是个高科技的东西,每次都是把一个现成的批处理文档换个位置重命名后,把要修改的内容从UltraEdit编辑器里面拷贝进去。后来找到一种新方法,先保存到一个txt文档中,然后重命名时强制修改后缀,如把1.txt重命名为1.bat后回车,当然电脑会提示你“如果更改扩展名,可能会导致文件不可用,确实要更改吗?不理会它,点是就可以了。不过使用这种方法时要注意不能把文件设为隐藏文件名,否则你找不到扩展名。至于怎么修改,哥好人做到底,知道的就跳过。打开我的电脑/计算机→在最上面的标题栏点“工具”→文件夹选项→查看→勾选“隐藏已知文件类型的扩展名”。 2.打开工作时要用到一天的东西 批处理在windows操作系统出现以后,很少有人问津了,像我们干BIOS的能够有幸知道一些,已经成为批处理的有生力量了,但一个编程高手如果不懂批处理,顶多只能算有点小成绩,像我等菜鸟懂一点批处理,毕竟还是有好处的,凡是病毒大多都包含有批处理,因为它太强大了,只要你轻轻双击一下鼠标,其他的工作就不用你做了,所以其实有时候不是病毒厉害,是你不懂病毒而打开了它,当然现在很多病毒是繁殖能力极强的,只要你插了U盘,就会被感染,这样子你就会防不胜防,所以瑞星,金山毒霸等这些杀毒软件还是需要的。不过要知道,杀毒软件永远滞后于病毒,所以你懂点批处理的小常识,就可以尽量避免打开某些恶意软件,增强你的防范能力。陈冠希的艳照门据说就是不懂照相机有备份恢复删除的知识而传出来的,所以建议大家没事多学点东西。 言归正传,比如我们要打开工作时常用的OUTLOOK,lingoes,Skype等东西,每次双击再打开,这样其实也不麻烦,但有没有办法一次性把他们都打开呢?答案是肯定的,那

BI常见面试问题总结

一、 现在是否在项目上? 1、刚出项目,目前在看机会; 2、还在项目上,大概XX时间出项目。 二十二、你最快可以什么时候到位? 1、如果前面回答不在项目上,就可说拿到OFFER后随时都可以; 2、如果前面回答是在项目上,可回答项目结束后马上到位; 3、也可以反问下这个项目最迟要求什么时候进?等他回答后,就说时间OK,没问题。 二十三、你的简历上的项目都是外部的吗? 1、根据自己的简历回答。要注意的是入行的逻辑。这其实是考察你的真实性,最好简 历上有一个符合逻辑的入行轨迹。如:KEY USER—内部顾问—外部顾问。 二十四、你在项目上主要负责哪一块? 1、BW建模、数据抽取、建一般数据源、建信息对象; 2、BO报表、UNI创建; 3、写些技术文档、业务蓝图、测试文档; 4、参与业务需求调研、讨论业务方案、模型设计。 二十五、列举一些你做过的报表。 1、财务:资产负债表、增值税商品明细表。。。 2、业务:销售多维分析表、采购多维分析表、库存及逾期情况表、库龄情况分析表。。。 3、人资:人员异动分析表、入职统计表、离职统计表、离职原因分析统计表。。。 二十六、你最近的一个项目上有几个人? 1、5个人:3个BW,1个BO,1个PM; 2、7个人:3个BW,2个BO,1个ABAP,1个PM。 二十七、你项目上人员是怎样分工的? 1、3个BW按FICO\MM\SD每人负责一个模块,2个BO一个主要做FICO的报表、一个 主要做业务的报表,也就是MM\SD,PM负责沟通、协调; 2、总共60多张报表,我们三个BW顾问平均每人背20张左右,BO他们每人30张左 右,有一些需要开发的ABAP做。 二十八、你英语怎么样? 1、没问题; 2、文档没问题,沟通会差一点。 二十九、你希望入职还是FREE? 1、都可以。优先考虑入职吧。主要看他们优先考虑入职还是FREE。 三十、你目前RATE多少?期望是多少? 1、以2-3年为例:8K,期望10K。其他待遇一般为:一天100补助,一月一到两次FLYBACK.

校园招聘经典面试问题汇编(含答案)

校园招聘系列校园招聘系列之 校招经典面试问题汇编(含答案) 一、认识自我类 1、自我评价一下你自己,最大的优点以及最大的缺点,另外你的人生规划是什么? 答:我热爱生活,积极看待人生,对于很多东西都有旺盛的求知欲,愿意从任何人身上学习我不懂的东西,我也非常喜欢交朋友,乐于在一个团结友好的大团队之中开展工作。总的来说,热情,好学,以及良好的沟通协调能力是我的最大优势。当然我也有很多缺点,由于年龄的关系,我看一些问题不够深入,有时候未免做事情未免急躁,不过我能够虚心听取意见,相信在开展工作之时,能够发挥我的特长并且出色完成任务。 2、如果本单位无法给你解决户口问题,但是其他条件都能满足你,你是否还会来本公司工作? 答:我很喜欢贵单位,对于单位能够在各个方面最大程度的证明我的价值表示衷心的感谢。户口是我比较关注的问题,如果单位能够尽可能的帮助我解决这个后顾之忧,那么我就能够保证全心全意的投入到工作之中来,如果单位暂时有困难,我也表示理解。毕竟事业的发展空间对于我来说才是最重要的。我会好好权衡。

3、看你的简历中得知你有在大公司作intern的经历,为什么你在找正式工作的时候来我们这样一家小公司? 答:大公司有大公司的优势,小公司也有小公司的好处。对于一个刚毕业的学生来说,我需要学习的地方很多,而最最急需掌握的是独立处理问题的能力和承担一个项目的经验.在大公司中由于人员组织结构的复杂庞大以及井然有序,每个人各司其职,往往长年累月做的都是重复性的相同工作,难以接触到自己职责之外的事情,而小公司因为部门少,人事关系相对简单,每个人在挽成自己的本职工作之外,还有很多机会接触别人做的东西,这样只需要在短时间内就可以锻炼成为一个"多面手".有了在小公司的工作经验,不需要很长时间,我想我就可以独立策划一个项目并且出色的完成它.还有一点,大公司创造利润之后?配到每个员工头上的红利其实并不多;而小公司的利益都会切实的落实到每个职工身上,是那种所谓你能看得到摸的着的好处,这一点也是相当吸引我的。 4、请问你是否有男友?他/她和你不在一个城市工作,你如何解决这个问题? 答:是的,我有一个感情很稳定的男友,并且确实我们暂时不在一个地方。从我个人来讲,我确实很希望能有机会两个人在一个地方,不过我不认为这将是我事业前途的羁绊。如果我为了这份感情放弃一份我十分满意的工作,那将会令我和男友之间的?系变得非常沉重。这不是我所希望看到的,也不是我男友所希望看到的。我们希望能够各自拥有各自事业的发展空间,双方都是独立出色的个体,这将会使我们更加欣赏对方。

十分经典的excel批处理教程

十分经典的批处理教程 这是一篇技术教程,真心诚意会用很简单的文字表达清楚自己的意思,只要你识字就能看懂,就能学到知识。写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人、一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到了眼前。. 先概述一下批处理是个什么东东。批处理的定义,至今我也没能给出一个合适的----众多高手们也都没给出----反正我不知道----看了我也不一定信服----我是个菜鸟,当然就更不用说了;但我想总结出一个"比较合适的",而且我也相信自己可以把它解释的很清楚,让更多的菜鸟都知道这是个什么东东,你用这个东东可以干什么事情。或许你会因为这篇文章而"无条件爱上批处理",那么我的目的就达到了----我就是要让你爱上它,我就这么拽,你能怎么着??真的,爱有时候就这么拽,就是这么没理由,就是这么不要脸!真的! 按照我的理解,批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。 OK,never claver and get to business(闲话少说言归正传)。批处理,也称为批处理脚本,英文译为BA TCH,批处理文件后缀BA T就取的前三个字母。它的构成没有固定格式,只要遵守以下这条就ok了:每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的平台是DOS。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。我不想让自己写的教程枯燥无味,因为牵缠到代码(批处理的内容算是代码吧?)的问题本来就是枯燥的,很少有人能面对满屏幕的代码而静下心来。所以我会用很多简单实用的例子让读这篇教程的朋友去体会批处理的那四射的魅力,感受它那古灵精怪的性格,不知不觉中爱上批处理(晕,怎么又是爱?到底批处理和爱有什么关系?答案:没有!)。再说句"闲话":要学好批处理,DOS基础一定要牢!当然脑子灵活也是很重要的一方面。 例一、先给出一个最easy的批处理脚本让大家和它混个脸熟,将下面的几行命令保存为name.bat然后执行(以后文中只给出代码,保存和执行方式类似): ping https://www.wendangku.net/doc/cd3306969.html, > a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt exit 是不是都能看的懂?是不是很easy?但它的作用却是很实用的,执行这个批处理后,可以在你的当前盘建立一个名为a.txt的文件,它里面记录的信息可以帮助你迅速找到速度最快的QQ服务器,从而远离"从服务器中转"那一痛苦的过程。这里>的意思,是把前面命令得到的东西放到后面所给的地方,>>的作用,和>的相同,区别是把结果追加到前一行得出的结果的后面,具体的说是下一行,而前面一行命令得出的结果将保留,这样可以使这个a.txt文件越来越大(想到如何搞破坏了??)。By the way,这个批处理还可以和其他命令结合,搞成完全自动化判断服务器速度的东东,执行后直接显示速度最快的服务器IP,是不是很爽?后面还将详细介绍。 例二、再给出一个已经过时的例子(a.bat):

嵌入式C语言面试题汇总(超经典)

第一部分:基本概念及其它问答题 1、关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。 2、“引用”与指针的区别是什么? 答、1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。 流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。 3、.h头文件中的ifndef/define/endif 的作用? 答:防止该头文件被重复引用。 4、#include 与#include “file.h”的区别? 答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。 5、描述实时系统的基本特性 答:在特定时间内完成特定的任务,实时性与可靠性。 6、全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 答:全局变量储存在静态数据区,局部变量在堆栈中。 7、什么是平衡二叉树? 答:左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。 8、堆栈溢出一般是由什么原因导致的? 答:1.没有回收垃圾资源 2.层次太深的递归调用

hr常见面试问题总结

软件测试常见面试问题(偏HR方向) 1、自我介绍及工作经验介绍? 2、为什么要来学习或做测试工作?为什么要离职? 3、你爱好是什么特长是什么?优点缺点是什么? 4、假如你面试上了有两个人,另外一个人是组长,你会怎么做?假如你的组长在某些方面不如你,你会怎么做? 5、你三到五年的职业发展方向或职业规划是什么? 6、假如你来公司工作,你认为你能为公司作出什么贡献? 7、你希望的薪资待遇是? 8、你对公司加班的问题怎么看?周六日也加班呢? 9、你大学生活是什么?你大学课程是什么?什么给你留下的印象最深? 10、工作中出现不同意见了,如何与开发人员进行沟通?你认为如何才能与客户进行良好的沟通? 11、测试与开发沟通如何提高效率和改善沟通效果?测试工程师的素质和技能? 12、软件测试是一个什么样的行业?你希望以后的软件测试是怎么样的一个行业? 13、谈谈软件测试在企业的地位,也可以结合软件生命周期来谈 14、通常你对于别人批评你会有什么样的反应? 15、你的好友是如何评价你的?你的项目组长是如何评价你的? 16、谈谈自己对软件测试的理解,包括测试的流程和应注意的地方是什么。 17、为什么要在一个团队中开展软件测试工作? 18、你找工作时,最重要的考虑因素为何? 19、你对我们公司了解有多少? 20、居住在哪里?离公司远不远? 21、在即将完成这次笔试前,您是否愿意谈一些自己在以往的学习和工作中获得的工作经验和心得体会?(可以包括软件测试、过程改进、软件开发或者与此无关的其他方面) 22、测一个三角形是普通三角形、等腰三角形、等边三角形的流程图,测试用例。 23、你觉得什么样的人最难相处? 24、你觉得你来应聘有哪些优势?

医院招聘面试真题:卫生类典型面试题汇总及解析(1)

中公卫生人才网https://www.wendangku.net/doc/cd3306969.html,/医院招聘面试真题:卫生类典型面试题汇总及解析(1) 【经典话题一】 一个医生给国王看病,看病的时候,国王问医生:“你给我看病,和给别人看病,有什么不一样吗?”医生说:“在我眼里,只有病人,没有国王”请你对这个故事谈一谈自己的看法。 【答案参考】 这个故事体现的核心思想是一个人要具有基本的职业素养和操守。点出寓意。病人代表被服务对象,国王代表权势,故事寓意即为在服务上,服务者对服务对象应一视同仁,没有特权的存在。 在医生眼里,国王和普通人都是患者,不会区别对待。这个医生遵守医疗行业最基本的职业操守和道德。在现实社会中,病人代表被服务的对象,国王代表权势,故事寓意即服务者对服务对象应一视同仁,没有特权的存在。 如果说职业规定着人们的社会角色,职业道德则是这种角色必须遵循的最基本的道德底线。每一个人在从事某项工作的时候,都必须信奉和遵守职业道德,这是人们的天职,也是社会秩序的需要。 从服务对象角度来讲,应恪守职业纪律,不能以权谋私。我们每个人都要立足于自己的角色,遵守自己的职业操守,切实做好自己该做的事情。 【经典话题二】 手术后护士发现,只剩下六块纱布,而她记得明明是七块,医生却说我是主任还是你是主任,谈谈你的看法? 【答案参考】 首先应该肯定护士这种认真负责的态度是正确的,如果一块纱布真的被遗忘在病人体内,后果将是不堪设想的。而对病人负责的态度就是医生应该具备的基本医德。对于医生来

中公卫生人才网https://www.wendangku.net/doc/cd3306969.html,/说在自己没有十分把握的情况下要验证护士所说的话的正确性,本着为病人着想的态度。医生和护士的关系就相当于领导和下属的关系,由此引申出作为领导,对下属提出的建议要认真分析,正确的建议要予以采纳,而作为下属对于领导的不同意见要冷静对待,正确分析。非原则性问题上服从领导,重大原则性问题要向上级反映。如果自己正确的意见未得到采纳,也不因此消极工作。 【经典话题三】 对于终生学习,你怎么理解? 【答案参考】 首先,终生学习可以温故而知新。通过理论学习,可以很好地与临床病症相结合,有利于全面分析病情,有效防止漏诊误诊。 其次,终生学习可以更新知识。现代医学知识日新月异,不断有新的技术和新的研究出现,终生学习可以使自身不断发展,站在科学的前沿,更好地为病人服务。 另外,我们常说“活到老学到老”。终身学习是一种积极的生活态度。学习使人不断成长,如果终身学习,我们就会时刻完善自己。 查看更多医院招聘面试备考指导,尽在医疗人才网

c语言经典面试题

C语言面试题大汇总之华为面试题 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错. 4、请写出下列代码的输出内容 #include int main(void) { int a,b,c,d; a=10;

c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答:10,12,120 5、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。3) static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对

java经典面试题汇总

Java基础方面: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域当前类同一package 子孙类其他package public √√√√ protected √√√ × friendly √√ × × private √ × × × 不写时默认为friendly 2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JA V A的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注:静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 6、什么时候用assert 答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的 7、String s = new String("xyz");创建了几个String Object 答:两个,一个字符对象,一个字符对象引用对象 8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少 答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor 9、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错 答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译) 10、Java有没有goto 答:java中的保留字,现在没有在java中使用 11、数组有没有length()这个方法? String有没有length()这个方法 答:数组没有length()这个方法,有length的属性。String有有length()这个方法 12、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型

各大公司面试题目

微软十五道面试题 1、有一个整数数组,请求出两两之差绝对值最小的值, 记住,只要得出最小值即可,不需要求出是哪两个数。 2、写一个函数,检查字符是否是整数,如果是,返回其整数值。 (或者:怎样只用4行代码编写出一个从字符串到长整形的函数?) 3、给出一个函数来输出一个字符串的所有排列。 4、请编写实现malloc()内存分配函数功能一样的代码。 给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。 5、怎样编写一个程序,把一个有序整数数组放到二叉树中? 6、怎样从顶部开始逐层打印二叉树结点数据?请编程。 7、怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)? 8、请编写能直接实现int atoi(const char * pstr)函数功能的代码。 9、编程实现两个正整数的除法 编程实现两个正整数的除法,当然不能用除法操作符。 // return x/y. int div(const int x, const int y) { .... } 10、在排序数组中,找出给定数字的出现次数 比如[1, 2, 2, 2, 3] 中2的出现次数是3次。 11、平面上N个点,每两个点都确定一条直线, 求出斜率最大的那条直线所通过的两个点(斜率不存在的情况不考虑)。时间效率越高越好。 12、一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。 注意: - 5个数值允许是乱序的。比如:8 7 5 0 6 - 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4 - 0可以多次出现。 - 复杂度如果是O(n2)则不得分。 13、设计一个算法,找出二叉树上任意两个结点的最近共同父结点。 复杂度如果是O(n2)则不得分。 14、一棵排序二叉树,令f=(最大值+最小值)/2, 设计一个算法,找出距离f值最近、大于f值的结点。 复杂度如果是O(n2)则不得分。 15、一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。 设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。 复杂度最好是O(n),如果是O(n2)则不得分。 谷歌八道面试题 16、正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12 (1)、设计一个函数void generate(int a,int b,int N ,int * Q)计算Q的前几项 (2)、设计测试数据来验证函数程序在各种输入下的正确性。 17、有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在答谢字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法c语言函数原型void proc(char *str)也可以采用你自己熟悉的语言 18、如何随机选取1000个关键字 给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字)。如何才能从这个

实用批处理(bat)教程

目录 第一章批处理基础 第一节常用批处理内部命令简介 1、REM 和:: 2、ECHO 和@ 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和: 9、FIND 10、START 11、assoc 和ftype 12、pushd 和popd 13、CALL 14、shift 15、IF 16、setlocal 与变量延迟(ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION 启动或停用延缓环境变量扩展名。) 17、ATTRIB显示或更改文件属性 第二节常用特殊符号 1、@命令行回显屏蔽符 2、%批处理变量引导符 3、> 重定向符 4、>>重定向符 5、<、>、<& 重定向符 6、|命令管道符 7、^转义字符 8、组合命令 9、& 组合命令 10、||组合命令 11、\"\"字符串界定符 12、, 逗号 13、; 分号 14、() 括号 15、! 感叹号 第二章FOR命令详解 一、基本格式 二、参数/d仅为目录 三、参数/R递归(文件名) 四、参数/L迭代数值范围 五、参数/F迭代及文件解析 第三章FOR命令中的变量

一、~I- 删除任何引号(\"),扩展%I 二、%~fI- 将%I 扩展到一个完全合格的路径名 三、%~dI- 仅将%I 扩展到一个驱动器号 四、%~pI- 仅将%I 扩展到一个路径 五、%~nI- 仅将%I 扩展到一个文件名 六、%~xI- 仅将%I 扩展到一个文件扩展名 七、%~sI- 扩展的路径只含有短名 八、%~aI- 将%I 扩展到文件的文件属性 九、%~tI- 将%I 扩展到文件的日期/时间 十、%~zI- 将%I 扩展到文件的大小 十一、%~$PATH:I 第四章批处理中的变量 一、系统变量 二、自定义变量 第五章set命令详解 一、用set命令设置自定义变量 二、用set命令进行简单计算 三、用set命令进行字符串处理 1、字符串替换 2、字符串截取 第六章if命令讲解 第一种用法:IF [NOT] ERRORLEVEL number command 第二种用法:IF [NOT] string1==string2 command 第三种用法:IF [NOT] EXIST filename command 第四种用法:IF增强的用法 第七章DOS编程高级技巧 一、界面设计 二、if…else…条件语句 三、循环语句 四、子程序 五、用ftp命令实现自动下载 六、用7-ZIP实现命令行压缩和解压功能 七、调用VBScript程序 八、将批处理转化为可执行文件 九、时间延迟 1、利用ping命令延时 2、利用for命令延时 3、利用vbs延迟函数,精确度毫秒,误差1000毫秒内 4、仅用批处理命令实现任意时间延迟,精确度10毫秒,误差50毫秒内 十、模拟进度条 十一、特殊字符的输入及应用 十二、随机数(%random%)的应用技巧 十三、变量嵌套与命令嵌套 1、更正了所有的错别字,适当排版,增加条理性。

C语言面试题(经典全)

1.static有什么用途?(请至少说明两种) 1)限制变量的作用域 2)设置变量的存储域(堆,主动分配内存也是堆) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在栈 6.堆栈溢出一般是由什么原因导致的? 堆栈溢出一般是循环的递归调用导致的,如果使用的大数据结构的局部变量,也可能导致堆栈溢出。没有回收垃圾资源导致的是内存泄露最后内存耗尽。 20.不能做switch()的参数类型是: switch的参数不能为实型。(只能是int char) 9.写出float x 与“零值”比较的if语句。 if(x<0.000001&&x>-0.000001)

3.在c语言库函数中将一个字符转换成整型的函数是atol()吗,这个函数的原型是什么? 函数名: atol 功能: 把字符串转换成长整型数 函数的原型: long atol(const char *nptr); 程序例: #include #include int main(void) { long l; char *str = "98765432"; l = atol(lstr); printf("string = %s integer = %ld\n", str, l); return(0); } 1.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline

2019最新Java面试题,常见面试题及答案汇总

ava最新常见面试题+ 答案汇总 1、面试题模块汇总 面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示: 可能对于初学者不需要后面的框架和JVM 模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。 适宜阅读人群 需要面试的初/中/高级java 程序员 想要查漏补缺的人 想要不断完善和扩充自己java 技术栈的人 java 面试官 具体面试题 下面一起来看208 道面试题,具体的内容。 一、Java 基础 1.JDK 和JRE 有什么区别? 2.== 和equals 的区别是什么? 3.两个对象的hashCode()相同,则equals()也一定为true,对吗? 4.final 在java 中有什么作用? 5.java 中的Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些区别? 13.抽象类能使用final 修饰吗?

14.接口和抽象类有什么区别? 15.java 中IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap 和Hashtable 有什么区别? 22.如何决定使用HashMap 还是TreeMap? 23.说一下HashMap 的实现原理? 24.说一下HashSet 的实现原理? 25.ArrayList 和LinkedList 的区别是什么? 26.如何实现数组和List 之间的转换? 27.ArrayList 和Vector 的区别是什么? 28.Array 和ArrayList 有何区别? 29.在Queue 中poll()和remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器Iterator 是什么? 32.Iterator 怎么使用?有什么特点? 33.Iterator 和ListIterator 有什么区别? 34.怎么确保一个集合不能被修改?

【最全最详细】批处理经典入门教程

批处理经典入门教程!(从不懂到高手) 例一、先给出一个最easy的批处理脚本让大家和它混个脸熟,将下面的几行命令保存为name.bat然后执行(以后文中只给出代码,保存和执行方式类似): 代码如下: ping https://www.wendangku.net/doc/cd3306969.html, > a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt ping https://www.wendangku.net/doc/cd3306969.html, >> a.txt exit 是不是都能看的懂?是不是很easy?但它的作用却是很实用的,执行这个批处理后,可以在你的当前盘建立一个名为a.txt的文件,它里面记录的信息可以帮助你迅速找到速度最快的QQ服务器,从而远离“从服务器中转”那一痛苦的过程。这里>的意思,是把前面命令得到的东西放到后面所给的地方,>>的作用,和>的相同,区别是把结果追加到前一行得出的结果的后面,具体的说是下一行,而前面一行命令得出的结果将保留,这样可以使这个a.txt 文件越来越大(想到如何搞破坏了??)。By the way,这个批处理还可以和其他命令结合,搞成完全自动化判断服务器速度的东东,执行后直接显示速度最快的服务器IP,是不是很爽?后面还将详细介绍。 例二、再给出一个已经过时的例子(a.bat): @echo off if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif a.bat 为什么说这是个过时的例子呢?很简单,因为现在已经几乎没有人用带广告的QQ了(KAO,我的QQ还显示好友三围呢!!),所以它几乎用不上了。但曾经它的作用是不可小窥的:删除QQ的广告,让对话框干干净净。这里用的地址是QQ的默认安装地址,默认批处理文件名为a.bat,你当然可以根据情况自行修改。在这个脚本中使用了if命令,使得它可以达到适时判断和删除广告图片的效果,你只需要不关闭命令执行后的DOS窗口,不按CTRL+C强行终止命令,它就一直监视是否有广告图片(QQ也再不断查看自己的广告是否被删除)。当然这个脚本占用你一点点内存,呵呵。 例三,使用批处理脚本查是否中冰河。脚本内容如下: 复制代码代码如下: @echo off

C语言面试题大汇总,个人觉得还是比较全

4. static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性 9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈 10. 什么是平衡二叉树? 左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1 11. 堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源 12. 什么函数不能声明为虚函数? constructor 13. 冒泡排序算法的时间复杂度是什么? O(n^2) 14. 写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001) 16. Internet采用哪种网络协议?该协议的主要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17. Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議) 18.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出 C程序。 循环链表,用取余操作做 3.不能做switch()的参数类型是: switch的参数不能为实型。 華為 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

面试问题整理(经典版)讲解学习

大学生涯中最大的收获? A、知识和技能方面:通过对电子商务相关课程的学习,使我掌握了很多必要的工作技能如搜索信息、分析信息和独立思考等; B、提升了自己的综合素质,比如我当班长这件事,我觉得使自己提升很快。从开始的竞选,竞选成功后要策划组织有吸引人的班级活动,调动同学参与的积极性等,每一个环节都很锻炼人。 C、提高了自己的人际交往能力。我在学生会和社团工作过,期间要与不同的人交流,从学生到老师,使我学到了很多人际沟通的技巧。 为什么选择……公司? A、我十分看好……行业,认为贵公司十分重视人才,而且这项工作很适合我; B、我对……职位很感兴趣,在学校里学校了很多关于对产品进行管理和营销方面的知识,希望能够将其运用到实践中; C、价值观比较吻合(如:广东移动核心价值观的内涵实际上就两点“责任+卓越”,我比较认同); D、同学介绍,班上有很多……的同学。经常听他们说那里很漂亮,所以自己也十分向往; E、地理位置优越。(如:佛山位于珠江三角洲经济区中部,与广州相邻,交通便利) 你与竞争同一职位的其他人有什么区别? A、优势:我符合贵公司的招聘条件,以我目前所掌握的技能,高度的责任感,良好的学习能力和适应能力以及较高的执行力,我相信自己完全胜任这份工作。我也十分希望能够为贵公司服务,如果贵公司能够给我这个机会,我一定会加倍努力。 B、劣势:a、有时过分注意一些细节而忽略了一些宏观的东西; b、说话比较直接,容易在不经意间伤害到别人,我正在努力克服这一点; c、过分在意别人的感受; d、做事容易急于求成,刚接手一个任务时,我就想着快点作为,比如我在研一参与编写一本书中的两章,我总是希望自己能够在最短的时间里把事情做完,结果在追求效率的时候往往就会忽略质量。我也一直在强迫自己改掉这个缺点。 你是一个什么样的人? A、我是一个诚信的人,因为我答应别人的事就一定会做到,如果做不到那我决不会轻易许诺; B、我是一个做事有计划性、合理安排时间的人。大四我在贵州大学学生资助管理中心实习,由于工作比较杂乱,所以每天早上我去的第一件事就是先列一个事务清单,将事情按照轻重缓急排列,然后按照清单有条理的按个处理; C、我是一个持之以恒、坚持度高的人。本科期间我每天早上都坚持起来跑步,风雨无阻。当时学校要求我们早上起来打早操卡,每个星期至少要打三次,每个学期下来只有我一个是全部都打满了。 你能为我们做什么? 就我个人的能力而言,我可以作为一名优秀的员工在组织中发挥作用,给组织带来高效率和更多收益。 你的职业规划是什么?

相关文档
相关文档 最新文档