C语言+Java程序员经典面试题及详细答案(企业真实版)_第1页
C语言+Java程序员经典面试题及详细答案(企业真实版)_第2页
C语言+Java程序员经典面试题及详细答案(企业真实版)_第3页
C语言+Java程序员经典面试题及详细答案(企业真实版)_第4页
C语言+Java程序员经典面试题及详细答案(企业真实版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言+Java程序员经典面试题及详细答案(企业真实版)第一部分C语言经典面试题(含详细答案)一、选择题(基础核心)1、C语言中局部变量和全局变量的存储类别分别是?()A、栈区、堆区

B、栈区、静态全局区

C、堆区、静态全局区

D、全局区、栈区答案:B详细解析:局部变量(非static)存储在栈区,函数执行结束后自动释放内存;全局变量和static静态变量存储在静态全局区,程序整个运行周期都不会释放;堆区是手动malloc、free管理的内存区域。2、sizeof和strlen的区别,以下代码输出结果是?()PlainText

charstr[]="hello";

printf("%d%d",sizeof(str),strlen(str));A、55

B、65

C、66

D、56答案:B详细解析:sizeof统计数组整体内存大小,字符串末尾自带结束符\0,占1个字节,总共6字节;strlen只统计有效字符长度,不包含\0,结果为5。3、指针变量*p和&p的含义说法正确的是?()A、*p是指针地址,&p是变量值

B、*p是指针指向的变量值,&p是指针变量自身的地址

C、两者含义完全相同

D、*p是指针地址,&p是指针自身地址答案:B详细解析:*是解引用符,代表取出指针指向内存的数据值;&是取地址符,&p获取的是指针变量p本身的内存地址,而p存储的是它指向变量的地址。二、填空题1、C语言中动态内存分配的三个函数是________、________、________。答案:malloc、calloc、realloc解析:malloc:开辟指定大小未初始化内存;calloc:开辟内存并初始化为0;realloc:重新调整已开辟堆内存的大小。2、结构体struct的内存对齐原则是________。答案:成员变量偏移量为自身大小的整数倍,结构体整体大小为最大成员大小的整数倍3、const修饰指针char*constp代表________不可修改,charconst*p代表________不可修改。答案:指针变量p的地址、指针指向的内容三、简答题(高频面试)1、简述栈、堆、静态全局区的区别?详细答案:1.栈区:由系统自动分配释放,存放局部变量、函数参数、返回地址。空间固定、读写速度快,内存有限,容易出现栈溢出。2.堆区:由程序员手动malloc分配、free释放,程序结束未释放会造成内存泄漏。空间大、灵活,可动态扩容,读写速度慢于栈。3.静态全局区:存放全局变量、static静态变量,程序启动分配、程序结束释放,生命周期贯穿整个程序运行过程。2、什么是野指针?如何避免野指针?详细答案:野指针是指向未知、非法内存地址的指针,没有合法的指向空间。常见成因:指针未初始化、指针指向的内存已释放、指针越界访问。避免方式:1.指针定义时初始化为NULL;2.动态内存释放后立即置空;3.严格控制指针访问范围,避免越界;4.使用指针前先判断是否为NULL。3、结构体和联合体的区别?详细答案:1.内存占用:结构体成员独立占用内存,总大小遵循内存对齐;联合体所有成员共用同一块内存,整体大小为最大成员的大小。2.使用场景:结构体用于存储一组不同类型、同时有效的数据;联合体用于同一时间只需要存储一个成员数据的场景,节省内存。3.访问特性:结构体所有成员可同时赋值访问;联合体同一时间只有一个成员有效。四、编程题(实操必考)题目:手写字符串反转函数,不使用库函数参考答案代码:PlainText

#include<stdio.h>

voidreverseStr(char*str){

if(str==NULL){

return;

}

//计算字符串长度

intlen=0;

char*p=str;

while(*p!='\0'){

len++;

p++;

}

//首尾交换反转

inti,j;

chartemp;

for(i=0,j=len-1;i<j;i++,j--){

temp=str[i];

str[i]=str[j];

str[j]=temp;

}

}

intmain(){

charbuf[]="interviewtest";

reverseStr(buf);

printf("%s\n",buf);

return0;

}代码解析:先判空避免空指针报错,手动遍历获取字符串长度,通过双指针首尾交换实现反转,不依赖任何字符串库函数,适配所有C语言编译环境。第二部分Java程序员经典面试题(含详细答案)一、选择题(基础核心)1、以下关于final、finally、finalize说法正确的是?()A、finally一定执行

B、final修饰的变量不可修改,方法不可重写,类不可继承

C、finalize可以手动调用,能保证资源释放

D、三者都是Java关键字答案:B详细解析:A错误,虚拟机退出时finally不会执行;C错误,finalize是Object方法,由垃圾回收器调用,无法保证执行;D错误,finalize不是关键字。2、String、StringBuilder、StringBuffer的区别,说法错误的是?()A、String是不可变字符串

B、StringBuffer线程安全,效率低

C、StringBuilder线程不安全,效率高

D、三者底层都是数组,可随意扩容答案:D详细解析:String底层是不可变char数组(JDK9后为byte数组),每次修改都会生成新对象,无法原地扩容;StringBuilder、StringBuffer底层是可变数组,支持动态扩容。3、ArrayList和LinkedList的区别,以下说法正确的是?()A、ArrayList查询慢、增删快

B、LinkedList基于数组实现

C、ArrayList基于动态数组,查询快,中间增删慢

D、两者性能无差异答案:C详细解析:ArrayList底层动态数组,随机访问查询效率极高,中间/头部增删需要移动元素,效率低;LinkedList底层双向链表,查询需要遍历,增删只需要修改指针,效率高。二、填空题1、Java基本数据类型有8种,分别是byte、short、int、long、________、________、________、________。答案:float、double、char、boolean2、Java中异常分为两大类,分别是________、________。答案:编译时异常(受检异常)、运行时异常(非受检异常)3、HashMap底层数据结构在JDK1.8及以后是________+________,链表长度超过________会转为红黑树。答案:数组、链表、8三、简答题(面试高频)1、==和equals的区别?详细答案:1.==是运算符:对于基本数据类型,比较的是数值是否相等;对于引用类型,比较的是对象的内存地址是否相同。2.equals是Object类方法:默认实现和==一致,比较地址;String、Integer等包装类重写了equals方法,用于比较对象的内容值是否相等。日常开发中,字符串、对象内容对比统一使用equals,基本类型使用==。2、简述Java重写和重载的区别?详细答案:重载(Overload):发生在同一个类中,方法名相同,参数个数、类型、顺序不同,和返回值、访问修饰符无关,属于编译期多态。重写(Override):发生在父子类中,方法名、参数列表、返回值必须完全一致;子类访问权限大于等于父类,抛出异常范围小于等于父类,属于运行期多态。3、HashMap的工作原理?为什么线程不安全?详细答案:1.工作原理:基于哈希表实现,通过hash算法计算key的哈希值,定位数组下标存储数据。发生哈希冲突时,采用链表存储;链表长度大于8且数组容量大于64,转为红黑树提升查询效率。2.线程不安全原因:多线程环境下,扩容、插入元素时会出现链表闭环、数据覆盖问题,导致数据丢失、死循环。线程安全场景推荐使用ConcurrentHashMap。4、Java垃圾回收机制简述,哪些对象会被回收?详细答案:Java垃圾回收(GC)由JVM自动执行,用于回收堆中无引用的对象内存,避免内存泄漏。会被回收的对象:1.没有任何引用指向的对象;2.引用赋值为null的对象;3.局部变量对象,方法执行结束后引用失效;4.弱引用、虚引用关联的对象。常用GC算法:标记清除、标记整理、复制算法,分代回收是JVM核心回收策略。四、编程题(基础实操)题目:手写冒泡排序,对数组进行升序排序参考答案代码:PlainText

publicclassBubbleSort{

publicstaticvoidmain(String[]args){

int[]arr={9,5,1,8,2,7,3,6,4};

bubbleSort(arr);

//遍历输出结果

for(intnum:arr){

System.out.print(num+"");

}

}

publicstaticvoidbubbleSort(int[]arr){

if(arr==null||arr.length<=1){

return;

}

//外层控制排序轮数

for(inti=0;i<arr.length-1;i++){

//内层两两比较,每轮结束最大值沉底

for(intj=0;j<arr.length-1-i;j++){

if(arr[j]>arr[j+1]){

//交换位置

inttemp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

}

}代码解析:通过双层循环实现相邻元素对比交换,每一轮排序都会将当前未排序部分的最大值移至末尾,时间复杂度O(n²),逻辑简单,是面试基础排序必考题型。五、进阶面试题(开发常用)1、SpringMVC的执行流程?详细答案:1.客户端发起请求,前端控制器DispatcherServlet接收所有请求;2.DispatcherServlet调用HandlerMapping,根据URL匹配对应的处理器Controll

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论