新加坡 瑞昱 社招面试记录
一开始就是40分钟的笔试,可以上网查,不会计分,面试官会根据笔试问问题,但是量不小,很多都需要查的话做不完的,以下纪录并不完全(因为隔了一段时间,有些内容不记得了,记得的大多数为面试官有引申问题的),欢迎各位大神指正答案方面的错误
内容包括:
C语言基础知识
- 定义变量,指针,定义数组,数组指针,指针数组
- 一道改错题,在字符串初始化之后又试图更改字符串,这是不允许的
引申问题:
1.字符串为什么不可以更改
没有为其分配内存空间的字符串都是常量字符串,不可以修改
2.这些字符串储存在什么地方
静态存储区
附两个相关的链接:
常见c语言笔试题嵌入式软件开发1
C语言:字符串内容的修改
字符串指针直接赋值,字符串数组用strcpy - 悬挂指针和野指针区别
悬挂指针:指针所指向的对象被释放,但是该指针没有任何改变,以至于其仍然指向已经被回收的内存地址
野指针:未初始化的指针被称为野指针。 - 什么是内训泄露
内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果
python基础知识
- 浅拷贝和深拷贝的区别
浅拷贝只是复制了原变量的地址,一旦原变量改变,拷贝的值也会改变
深拷贝新创建了一个资源去储存同样的值,改变原变量的值对深拷贝没有影响 - C语言和python谁快,为什么
C更快,python是解释型语言,逐行执行命令,C是编译型语言,直接将代码转换成机器码,比解释性语言更快更高效 - 字典和元组的区别
列表中的元素可以进行任意修改,而元组中的元素无法修改 - 说说垃圾回收机制
python 采用的是引用计数机制为主,标记 - 清除和分代收集两种机制为辅的策略。(网上的讲解很多很详细,这里我只大概写一点)
引用计数(Reference Counting):用一个结构体去维护对象被引用的次数,当引用次数为0时释放他
“标记-清除”(Mark and Sweep):用以解决循环引用问题,对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边。从根对象(root object)出发,沿着有向边遍历对象,可达的(reachable)对象标记为活动对象,不可达的对象就是要被清除的非活动对象。(只有容器对象才会产生循环引用的情况,比如列表、字典、用户自定义类的对象、元组等)
“分代回收”(Generational Collection):对象存在时间越长,越可能不是垃圾,应该越少去收集。这样在执行标记-清除算法时可以有效减小遍历的对象数,从而提高垃圾回收的速度。根据自动回收阈值来决定代数检查
参考链接:
记一次面试问题——Python 垃圾回收机制
Python垃圾回收机制!非常实用
计算机网络基础知识(没有任何引申问题)
- 画出三次握手过程
- OSI 七层协议及功能
Linux基础知识
考了几个基础场景,不是单纯的问删除指令、移动指令是什么,因为我之前的工作不涉及Linux,所以这一块我没有写,面试官了解过我没用过之后就没有问问题了
常规计算机知识
这一块问了不少,而且我基本都没怎么答上,以下纪录包含引申问题和笔试题目
- 为什么C语言需要编译,之前工作用的编译器是什么,解释一下编译的过程
这个我没答上,此处引用一下CSDN上一位大佬的我觉得比较好的答案
c程序编译全过程解析 - 动态库和静态库的区别
答案包含在上面链接的文章末尾 - 线程和进程的区别
有个知乎的火车比喻我觉得还蛮形象的,分享在这里
线程和进程的区别是什么? - git reset和git rebase的区别
git reset 是回滚到某次提交
git rebase:
1.合并多个commit为一个完整commit
2.将某一段commit粘贴到另一个分支上 - 最后还有两道算法题,我来不及做了,只记得一道
n个数中查找缺失的一个数
白板代码问题
- 写个函数反转长度为4的数组
- 怎么判断链表循环了
- 写了一个简单的函数问输出是什么,指针相关,需要判断输出的是值还是地址还是什么别的
其他
- git相关操作指令,怎么merge,pull request之类
- 简历上的内容没问
基本上就是以上这些内容,还有一些遗漏的如果想到之后会再加上去。
说实话这次面试准备的不好,很多应该答上的问题都没有答上,在计算机网络方面准备的东西也全都没有问到,算法题更是一塌糊涂,用这篇文章记录一下自己欠缺的知识点,希望以后至少不要再在基础的问题上犯错误。