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;

b=a++;

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),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

综上所述:

static全局变量与普通的全局变量有什么区别:

static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:

static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:

static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

6、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。 __________________________________________________

__________________________________________________ 7、设有以下说明和定义:

typedef union

{

long i;

int k[5];

char c;

} DATE;

struct data

{

int cat;

DATE cow;

double dog;

} too;

DATE max;

则语句 printf("%d",sizeof(struct data)+sizeof(max));的执行结果是:___52____

考点:区别struct与union.(一般假定在32位机器上)

答:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20. data是一个struct,

每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32. 所以结果是 20 + 32 = 52.

当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 +

DATE10 + double8 = 20 __________________________________________________

__________________________________________________

8、队列和栈有什么区别?

队列先进先出,栈后进先出

9、写出下列代码的输出内容

#include

int inc(int a)

{ return(++a); }

int multi(int*a,int*b,int*c)

{ return(*c=*a**b); }

typedef int(FUNC1)(int in);

typedef int(FUNC2) (int*,int*,int*);

void show(FUNC2 fun,int arg1, int*arg2)

{

FUNC1 p=&inc;

int temp =p(arg1);

fun(&temp,&arg1, arg2);

printf("%dn",*arg2);

}

main()

{

int a; //局部变量a为0;

show(multi,10,&a);

return 0; __________________________________________________

__________________________________________________ }

答:110

10、请找出下面代码中的所有错误 (题目不错,值得一看)

说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

#include"string.h"

main()

{

char*src="hello,world";

char* dest=NULL;

int len=strlen(src);

dest=(char*)malloc(len);

char* d=dest;

char* s=src[len];

while(len--!=0)

d++=s--;

printf("%s",dest);

return 0;

}

答:

方法1:一共有4个错误;

int main()

{ __________________________________________________

__________________________________________________ char* src = "hello,world";

int len = strlen(src);

char* dest = (char*)malloc(len+1);//要为分配一个空间

char* d = dest;

char* s = &src[len-1]; //指向最后一个字符

while( len-- != 0 )

*d++=*s--;

*d = 0; //尾部要加’\0’

printf("%sn",dest);

free(dest); // 使用完,应当释放空间,以免造成内存汇泄露

dest = NULL; //防止产生野指针

return 0;

}

方法2: (方法一需要额外的存储空间,效率不高.) 不错的想法

#include

#include

main()

{

char str[]="hello,world";

int len=strlen(str);

char t;

for(int i=0; i

__________________________________________________ {

t=str;

str=str[len-i-1]; //小心一点

str[len-i-1]=t;

}

printf("%s",str);

return 0;

}

11.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?

c用宏定义,c++用inline

12.直接链接两个信令点的一组链路称作什么?

PPP点到点连接

13.接入网用的是什么接口?

V5接口

14.voip都用了那些协议?

H.323协议簇、SIP协议、Skype协议、H.248和MGCP协议

15.软件测试都有那些种类?

黑盒:针对系统功能的测试

白盒:测试函数功能,各函数接口

16.确定模块的功能和模块的接口是在软件设计的那个队段完成的?

概要设计阶段

17.

合集下载

C语言面试题(经典全)

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

8.软件测试都有那些种类?

微软的面试题及答案(超变态但很经典)

微软的面试题及答案(超变态但很经典)

第⼀组题答案:

1)三根绳,第⼀根点燃两端,第⼆根点燃⼀端,第三根不点,第⼀根绳烧完(30分钟)后,点燃第⼆根绳的另⼀端,第

⼆根绳烧完(45分钟)后,点燃第三根绳⼦两端,第三根绳烧完(1⼩时15分)后,计时完成

2)根据抽屉原理,4个

3)3升装满;3升-〉5升(全注⼊);3升装满;3升-〉5升(剩1升);5升倒掉;3升-〉5升(注⼊1升);3升装满;3

升-〉5升;完成(另:可⽤回溯法编程求解)

4)问其中⼀⼈:另外⼀个⼈会说哪⼀条路是通往诚实国的?回答者所指的那条路必然是通往说谎国的。

5)12个球:

第⼀次:4,4 如果平了:那么剩下的球中取3放左边,取3个好球放右边,称:如果左边重,那么取两个球称⼀下,哪个重

哪个是次品,平的话第三个重,是次品,轻的话同理,如果平了,那么剩下⼀个次品,还可根据需要称出次品⽐正品轻或者

重,如果不平:那么不妨设左边重右边轻,为了便于说明,将左边4颗称为重球,右边4颗称为轻球,剩下4颗称为好球,取重

球2颗,轻球2颗放在左侧,右侧放3颗好球和⼀颗轻球,如果左边重,称那两颗重球,重的⼀个次品,平的话右边轻球次品。

如果右边重,称左边两颗轻球,轻的⼀个次品。如果平,称剩下两颗重球,重的⼀个次品,平的话剩下那颗轻球次品

13个球:

第⼀次:4,4,如果平了。剩5颗球⽤上⾯的⽅法仍旧能找出次品,只是不能知道次品是重是轻。如果不平,同上

6)

o o o

o o o

o o o

7)

23次,因为分针要转24圈,时针才能转1圈,⽽分针和时针重合两次之间的间隔显然>1⼩时,它们有23次重合机会,每

次重合中秒针有⼀次重合机会,所以是23次

重合时间可以对照⼿表求出,也可列⽅程求出

8)

在地球表⾯种树,做⼀个地球内接的正四⾯体,内接点即为所求

第⼆组 ⽆标准答案

第三组

1. 分成1,2,4三段,第⼀天给1,第⼆天给2取回1,第3天给1,第4天给4取回1、2,第5天给1,第6天给2取回1,第七天

Spark经典常见面试题

Spark经典常见面试题

问题1 ★★★

var、val、def三个关键字之间的区别;伴生类与伴生对象;

(1)问题分析:主要考察Scala中的基本概念,这些是应该熟练掌握的

(2)核心问题回答

var是变量声明关键字,类似于Java中的变量,变量值可以更改,但是变量类型不能更改

val常量声明关键字

def 关键字用于创建方法(注意方法和函数的区别)

还有一个lazy val(惰性val)声明,意思是当需要计算时才使用,避免重复计算

类和它的伴生对象同名且存在于同一个文件中,二者互为伴生;可以相互访问私有成员(字段和方

法);

问题2 ★★★

case class 是什么,与case object的区别是什么

(1)问题分析:主要考察样例类的理解,样例类在 Scala、Spark 的开发中使用的非常频繁,对其应该

熟练掌握

(2)核心问题回答

样例类是scala中特殊的类。当声明样例类时,如下事情会自动发生:

构造器中每一个参数都成为val。除非它被显示的声明为var(不建议这样做)

提供apply方法。不用new关键字就能够构造出相应的对象

提供unapply方法。让模式匹配可以工作

将生成toString、equals、hashCode和copy方法。除非你显示的给出这些方法的定义

继承了Product和Serializable,即已实现序列化方法和可以应用Product的方法

case class是多例的,后面要跟构造参数,case object是单例的

此外,case class和其他类型完全一样,可以添加方法和字段,扩展它们;

case class最大的用处是用于模式匹配。

(3)问题扩展

模式匹配的相关问题

问题3 ★★★

Spark为什么快,Spark SQL 一定比 Hive 快吗

(1)问题分析:常见问题,但是并不好答,因为只有对两个计算框架有一定程度的理解才能准确回

答。(2)核心问题回答

通常大家只是说Spark是基于内存计算的,速度比MapReduce要快。或者说内存中迭代计算。其实没有

12个经典性能测试面试题

12个经典性能测试面试题

12个经典性能测试⾯试题

1、性能测试包含了哪些软件测试(⾄少举出3种)?

负载测试(Load Testing):负载测试是⼀种主要为了测试软件系统是否达到需求⽂档设计的⽬标,譬如软件在⼀定时期内,最⼤⽀持多少并发⽤户数,软件请求出错率等,测试的主要是软件系统的性能。

压⼒测试(Stress Testing):强度测试也就是压⼒测试,压⼒测试主要是为了测试硬件系统是否达到需求⽂档设计的性能⽬标,譬如在⼀定时期内,系统的cpu利⽤率,内存使⽤率,磁盘I/O吞吐率,⽹络吞吐量等,压⼒测试和负载测试最⼤的差别在于测试⽬的不同。

容量测试(Volume Testing):确定系统最⼤承受量,譬如系统最⼤⽤户数,最⼤存储量,最多处理的数据流量等。

或者在下⾯选择⼏项:

并发测试 - 测试多⽤户并发访问同⼀个应⽤、模块、数据时是否产⽣隐藏的并发问题

基准测试 - ⽐较新的或未知测试对象与已知参照标准(如现有软件或评测标准)的性能。

争⽤测试:- 核实测试对象对于多个主⾓对相同资源(数据记录、内存等)的请求的处理是否可以接受。

性能配置 - 核实在操作条件保持不变的情况下,测试对象在使⽤不同配置时其性能⾏为的可接受性。

负载测试- 核实在保持配置不变的情况下,测试对象在不同操作条件(如不同⽤户数、事务数等)下性能⾏为的可接受性。

强度测试- 核实测试对象性能⾏为在异常或极端条件(如资源减少或⽤户数过多)之下的可接受性。

容量测试- 核实测试⽤户同时使⽤软件程序的最⼤数量

2、请问什么是性能测试、负载测试、压⼒测试?

性能测试是通过⾃动化的测试⼯具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进⾏测试。

负载测试、压⼒测试参考答案如上题。3、在给定的测试环境下进⾏,考虑被测系统的业务压⼒量和典型场景?

负载测试

负载测试是⽤来测定系统饱和状态、确定阀值。其特点有:1) 这种⽅法的⽬的是找到系统处理能⼒的极限;通过“检测、加压、阀值”⼿段找到如“响应时间不超过10秒”,“平均cpu利⽤率低于65%”等指标。2) 这种性能测试⽅法需要在给定的测试环境下进⾏,通常也需要考虑被测系统的业务压⼒量和典型场景、另外HP Mercury LoadRuner在使⽤该⽅法进⾏“加压”的时候必须选择典型场景。3) 这种性能测试⽅法⼀般⽤来了解系统的性能容量,或者是配合性能调优的时候来使⽤。特别是该的Weblogic 和库的性能调优。

嵌入式软件工程师经典面试题(附答案)(二)

嵌入式软件工程师经典面试题(附答案)(二)

嵌⼊式软件⼯程师经典⾯试题(附答案)(⼆)

⼀、基本介绍

嵌⼊式系统是以应⽤为中⼼,以计算机技术为基础,并且软硬件可裁剪,适⽤于应⽤系统对功能、可靠性、成本、体积、功耗有严格要求的专⽤计算机系统。它⼀般由、外围硬件设备、以及⽤户的应⽤程序等四个部分组成,⽤于实现对其他设备的控制、监视或管理等功能。

嵌⼊式软件⼯程师就是编写嵌⼊式系统的⼯程师。

⼆、职业要求

应具备哪些能⼒

1.最重要的是C语⾔编程,以及C++,这个与你读程,应⽤,开发项⽬,做系统移植息息相关;

2.操作系统: LINUX,WINCE等,⾄少学习过⼀种,并且还需要对些基础知识有蛮多的了解;

3.对ARM,FPGA,DSP等这些硬件⽐较了解。

这是最常规的条件

当然,⼀些基本素质,像英语能⼒,团队协作能管理,也很重要。三、经典⾯试题

1.嵌⼊式系统中经常要⽤到⽆限循环,如何⽤C编写死循环?

while(1){}或者for(;;)

2.程序的局部变量存在于哪⾥,全局变量存在于哪⾥,动态申请数据存在于哪⾥?

程序的局部变量存在于栈区;全局变量存在于静态区;动态申请数据存在于堆区

3.关键字const有什么含义?

1)只读。

2)使⽤关键字const也许能产⽣更紧凑的代码。

3)使编译器很⾃然地保护那些不希望被改变的参数,防⽌其被⽆意的代码修改

4.请问以下代码有什么问题?

int main() {char a;char *str=&a;strcpy(str,"hello");printf(str);return 0;}

没有为str分配内存空间,将会发⽣异常,问题出在将⼀个字符串复制进⼀个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进⾏内在读写⽽导致程序崩溃5.已知⼀个数组table,⽤⼀个宏定义,求出数据的元素个数?

#define NTBL (sizeof(table)/sizeof(table[0]))

6.写⼀个"标准"宏MIN ,这个宏输⼊两个参数并返回较⼩的⼀个?

运维经典面试题

运维经典面试题

运维经典⾯试题

1、为什么我们要使⽤tomcat,类似的软件有哪些?

因为Apache仅⽀持静态⽹站,不能解析Java、Jsp,它们服务端⼝也不同Apache端⼝80 tomcat端⼝8080

类似的软件有Weblogic (收费)Jboss(免费)Resin、Jetty

2、tomcat优化

内存优化:JAVA_OPTS='-Xms=256m -Xmx=1024m -Xmn=512m'

并发优化:maxProcessors=2000,最⼤处理线程数

maxSpareThreads=2000,tomcat连接器的最⼤空闲socket线程数

缓存优化:compressionMinSize=2048,启动压缩的输出内容⼤⼩,默认2048

3、影响mysql主从不同步的因素可能有哪些?

⽹络延迟

主从两台机器的负载不⼀样(单位时间内活跃的进程)mysql异常宕机情况下,如果未设置sync_binlog=1或者innodb_flush_log_at_trx_commit=1很有可能出现binlog或者relaylog⽂件出现损坏,导致主从不⼀致mysql本⾝的bug引起的主从不同步

mysql版本不⼀致

mysql的最⼤连接数⽤完了

4、MySQL主从同步的原理是什么?MySQL是通过什么来保证主从数据的同步?

同步原理:从服务器的IO线程从主服务器获取bin-log⼆进制⽇志,并在本地保存为relay-log中继⽇志,然后通过SQL线程来在从服务器上执⾏中继⽇志中的内容,从⽽使从库和主库保持⼀致。

在slave上修改配置,通过binlog⽇志保证主从数据同步。

在master上修改配置参数:Innodb_flush_log_at_trx_commit = 1;Sync_binlog = 1

在slave上修改配置参数:Master_info_replication = “table”;

Relay_log_info_replication = “table”;Relay_log_recovery = 1

最全多线程经典面试题和答案

最全多线程经典⾯试题和答案

Java实现线程有哪⼏种⽅式?

1、继承Thread类实现多线程

2、实现Runnable接⼝⽅式实现多线程

3、使⽤ExecutorService、Callable、Future实现有返回结果的多线程

多线程同步有哪⼏种⽅法?

Synchronized关键字,Lock锁实现,分布式锁等。

Runnable和Thread⽤哪个好?

Java不⽀持类的多重继承,但允许你实现多个接⼝。所以如果你要继承其他类,也为了减少类之间的耦合性,Runnable会更好。

Java中notify和notifyAll有什么区别?

notify()⽅法不能唤醒某个具体的线程,所以只有⼀个线程在等待的时候它才有⽤武之地。⽽notifyAll()唤醒所有线程并允许他们争夺锁确保了

⾄少有⼀个线程能继续运⾏。

为什么wait/notify/notifyAll这些⽅法不在thread类⾥⾯?

这是个设计相关的问题,它考察的是⾯试者对现有系统和⼀些普遍存在但看起来不合理的事物的看法。回答这些问题的时候,你要说明为什

么把这些⽅法放在Object类⾥是有意义的,还有不把它放在Thread类⾥的原因。⼀个很明显的原因是JAVA提供的锁是对象级的⽽不是线程

级的,每个对象都有锁,通过线程获得。如果线程需要等待某些锁那么调⽤对象中的wait()⽅法就有意义了。如果wait()⽅法定义在Thread类

中,线程正在等待的是哪个锁就不明显了。简单的说,由于wait,notify和notifyAll都是锁级别的操作,所以把他们定义在Object类中因为锁

属于对象。

为什么wait和notify⽅法要在同步块中调⽤?

主要是因为Java API强制要求这样做,如果你不这么做,你的代码会抛出IllegalMonitorStateException异常。还有⼀个原因是为了避免wait

和notify之间产⽣竞态条件。

什么是死锁?如何避免死锁?

死锁就是两个线程相互等待对⽅释放对象锁。

C++经典知识点面试题

C++经典知识点⾯试题1、指针的优点和缺点优点:灵活⾼效(1)提⾼程序的编译效率和执⾏速度(数组下标往下移时,需要使⽤乘法和加法,⽽指针直接使⽤++即可)(2)通过指针可使⽤主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯。(3)可以实现动态的存储分配。(4)便于表⽰各种数据结构,如结构体,编写⾼质量的程序。缺点:容易出错(1)可能变成野指针,导致程序崩溃(2)内存泄露(3)可读性差2、指针和引⽤的定义和区别(1)指针和引⽤的定义1)指针:指针是⼀个变量,存储⼀个地址,指向内存的⼀个存储单元;2)引⽤跟原来的变量实质上是同⼀个东西,只不过是原变量的⼀个别名⽽已。(2)指针和引⽤的区别<1> 从内存分配上来说:1)指针是⼀个实体,⽽引⽤仅是个别名,即为指针分配内存,⽽不为引⽤分配内存空间;<2> 从指向的内容来说:2)引⽤只能在定义时被初始化⼀次,之后不可变;指针可变;3)引⽤不能为空,指针可以为空;4)const与指针搭配可以表⽰指针指向和指针指向内容是否可变。const与引⽤搭配只有⼀种,即来修饰其内容的可读性。由于引⽤从⼀⽽终,不⽤修饰其指向。5)指针可以有多级,但是引⽤只能是⼀级(int **p;合法,⽽int &&a是不合法的)<3> 其他⽅⾯6)"sizeof引⽤"得到的是所指向的变量(对象)的⼤⼩,⽽"sizeof指针"得到的是指针本⾝的⼤⼩;7)指针和引⽤的⾃增(++)运算意义不⼀样;指针和引⽤在符号表中的形式:程序在编译时分别将指针和引⽤添加到符号表上。在符号表上记录的是变量名及变量所对应地址。在符号表上,指针变量对应的地址值为指针变量的地址值,⽽引⽤对应的地址值是引⽤对象的地址值。符号表⽣成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),⽽引⽤对象不能改。3、malloc/free 和 new/delete相关的⾯试题

1):C++有了malloc/free 为什么还要new/delete?

50个C语言C++常见面试题及答案

C/C++经典面试题

面试题1:变量的声明和定义有什么区别

为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,

但是只在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分

定义。

说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,

如外部变量。

面试题2:写出bool 、int、 float、指针变量与“零值”比较的if语句 bool型数据:

if( flag )

{

A;

}

else

{ B;

} int型数据:

if( 0 != flag )

{

A;

}

else

{ B; }

指针型数:

if( NULL == flag )

{

A;

}

else

{ B;

}

float型数据:

if ( ( flag >= NORM ) && ( flag <= NORM ) )

{ A;

2

}

注意:应特别注意在int、指针型变量和“零值”比较的时候,把“零值”放在左边,这样当把“==”

误写成“=”时,编译器可以报错,否则这种逻辑错误不容易发现,并且可能导致很严重的后果。

面试题3:sizeof和strlen的区别

sizeof和strlen有以下区别:

 sizeof是一个操作符,strlen是库函数。

 sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0‘的字符串作参数。

 编译器在编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来。并且sizeof

计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。

 数组做sizeof的参数不退化,传递给strlen就退化为指针了。

注意:有些是操作符看起来像是函数,而有些函数名看起来又像操作符,这类容易混淆的名称一定

要加以区分,否则遇到数组名这类特殊数据类型作参数时就很容易出错。最容易混淆为函数的操作符就

SpringBoot面试题(史上最全、持续更新、吐血推荐)

SpringBoot⾯试题(史上最全、持续更新、吐⾎推荐)

⽂章很长,建议收藏起来,慢慢读! 奉上以下珍贵的学习资源:免费赠送 经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备 加尼恩免费领免费赠送 经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备 加尼恩免费领免费赠送 经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备 加尼恩免费领免费赠送 经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备 加尼恩免费领免费赠送 资源宝库: Java 必备 百度⽹盘资源⼤合集 价值>10000元推荐: 疯狂创客圈 ⾼质量 博⽂史上最全 Java ⾯试题 28 专题 总⽬录

史上最全 Java ⾯试题: SpringBoot 篇

SpringBoot 概述

什么是 Spring Boot?

Spring Boot 是 Spring 开源组织下的⼦项⽬,是 Spring 组件⼀站式解决⽅案,主要是简化了使⽤ Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上⼿。

Spring Boot、Spring MVC 和 Spring 有什么区别?

SpringFrame

SpringFramework 最重要的特征是依赖注⼊。所有 SpringModules 不是依赖注⼊就是 IOC 控制反转。

当我们恰当的使⽤ DI 或者是 IOC 的时候,我们可以开发松耦合应⽤。松耦合应⽤的单元测试可以很容易的进⾏。

SpringMVC

Spring MVC 提供了⼀种分离式的⽅法来开发 Web 应⽤。通过运⽤像 DispatcherServelet,MoudlAndView 和 ViewResolver 等⼀些简单的概念,开发 Web 应⽤将会变的⾮常简单。

SpringBoot

Spring 和 SpringMVC 的问题在于:需要配置⼤量的参数。

Spring Boot 有哪些优点?

Spring Boot 主要有如下优点:容易上⼿,提升开发效率,为 Spring 开发提供⼀个更快、更⼴泛的⼊门体验。开箱即⽤,远离繁琐的配置。提供了⼀系列⼤型项⽬通⽤的⾮业务性功能,例如:内嵌服务器、安全管理、运⾏数据监控、运⾏状况检查和外部化配置等。没有代码⽣成,也不需要XML配置。避免⼤量的 Maven 导⼊和各种版本冲突。为什么要⽤SpringBoot?⾼并发 必读 的精彩博⽂

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档