第二次面试2023-8-21

news/2024/6/14 21:58:30 标签: 面试, jvm, 程序人生, c++, linux

上一次面试的自我介绍还是照着念的,这次心里有底了,自然就游刃有余了。面试官很好,很有耐心。自我介绍之后,主要就是讨论起来了项目,面试官很仔细的看了我的项目,一边看一边问,比如:threadcache、Centralcache都是怎么设计的?为什么要这样设计?… 这个项目为什么叫这个名字?(我的项目叫做极富韵律的内存空间,面试官的意思是为什么叫极富韵律。我回答的是:我觉得每一层互相调度,申请,释放,有一个联动的效果,此外我经常跳广场舞,感觉就像是跟着节奏来,所以叫这个名字)

面试官:为什么要做这个项目呢?
我:我听说C++很难,这个项目主要就是对于C++的一个掌控度,因此我想通过这个项目进一步强化自己对C++的学习。
我都回答完之后,感觉还不错。(谢谢面试官这么认真对待)
项目过后,看了看我的简历,说:嗯,Linux操作系统,简历上你这是把所有知识都写上了。我回答:这些都是自己学过的,虽然难免有忘记的,但是还是比较熟悉一些。然后面试官就要让我说说进程和线程之间的区别。我反问道:是把每一个都说然后再对比一下吗?面试官说:把你知道的都说出来(就是让自己随意发挥)于是乎,我就讲进程线程的都是说了一遍:(下面都是我自己说的,说了挺长时间的)

进程是操作系统控制的最小的单位,进程在被创建时会生成一个相应的进程地址空间,通过页表的映射,映射到物理内存之上,这样每一个被创建出来的进程的虚拟地址空间在物理内存之上都有属于自己的位置,操作系统管理进程的方法是先描述,再组织,即Linux底层是由C语言写的,因此我们描述进程的时候会通过一个结构体-PCB,即进程控制块将其管理起来,这样,进程优先级就可以通过这个结构体管理起来,从而进行CPU资源的按照顺序去使用。然后由于进程是具有独立性的,因此就比如一个fork出来的一个子进程,一旦子进程要更改对应的数据,由于父子进程之间具有独立性,那么,子进程就会在物理内存上进行写时拷贝,子进程的页表与物理内存的映射也发生改变,这样,改变子进程的数据,父进程的数据就不会发生改变。进程还具有统一性,对于一段代码来说,被加载到内存中调度时,其有一套属于自己的物理地址和逻辑地址,在执行main()函数时,会通过物理地址将main函数所在的地址加载到CPU中,通过pc指针调度,到了另一个函数,然后再通过物理地址原路返回,找到对应的内存的位置,然后在代码内部通过逻辑地址找到下一个函数,就这样,通过以物理地址的来回轮询的过程,再通过逻辑地址一点点的在内部查找,这样整个代码的逻辑就转起来了,因此,所谓的统一性就是在执行的时候,所有的进程中的代码都是这样被加载进来的。此外,我还举例了一些场景,比如常见的僵尸进程和孤儿进程,如何解决这些,可以通过进程等待的方式,或者将子进程再次fork一个孙子进程,这样让子进程被回收,孙子进程就变成了孤儿进程,这样其就会被操作系统领养,可以避免僵尸的问题。进程我当时回答的,我只记得这些,但是一些细节我现在还是有点忘记了,没有录音,只凭印象哈哈哈。
然后,我就说了线程:线程被操作系统管理与进程是一样的,或者说,操作系统中,对待所有的资源的管理都是一样的,即:先描述,再组织。线程与线程之间存在临界资源,这个时候就需要一定的方式去对这些资源进行一定的控制与管理,即要有原子性,为此,就产生了一系列的锁的形式,比如读写锁等等。此外线程被创建时,不会创建出进程地址空间,所以这样线程的创建与进程相比大大减少了负担,线程也可以被等待,这些操作都有一系列的函数去控制,但是线程也可以不用等待,即采用线程分离的方式:pthread_detach()函数,线程终止可以自己终止。最后,我还说了,线程也可以独享资源,因为我做的项目就是通过tls技术。让每一个线程都独享一份资源,这样,就可以减少加锁和解锁在性能上的开销。

进程和线程当时说的似乎要比这更多一些,最后还有一个对比,一个程序可以有多个进程,一个进程里可以有多个线程。但是我已经把我理解的并且认为最重要的写出来了。大概说了很长时间。(再次感谢面试官的耐心,让我自由发挥)其中我认为这里面最精华的就是对进程地址空间的理解,我以前写过进程地址空间的博客,想学习的可以看一下:
https://blog.csdn.net/NEFUT/article/details/128271455

然后,闲聊了一小会儿,问我平时怎么学习的。
答:我的学习方式就是写博客,因为我知道,知识是容易忘的,将自己理解的东西通过博客的形式输出出来,这样就能有一个自己给别人讲解的过程,自己的印象也会更深一些,此外以后也好复习。(我觉得此时博客真的加分)

后来,问了一些网络的知识,但是不多,感觉到问的最多的还是TCP的相关知识,这里没什么好说的了,和面试官说,这里用的比较少所以熟练度肯定不如上面的。
面试官说:一些知识不常用,确实很容易忘记。(所以在这里我想说,不要直接背八股文,自己将那些操作都经历一遍之后,才会真正的去理解它,只背八股,很容易忘记的)

大家想看的话,我觉得这篇博客写的很好,大家可以借鉴一下(这是厚渝老铁的博客):
https://xuexitongxue.blog.csdn.net/article/details/130474982

然后,到了尾声,面试官说,做道题吧。
我当时的心理活动是:上次空指针的阴影算是走出来了,刷了几道题手感也回来了,试试又何妨。
然后,当题目发给我的时候,我愣了一下,这是…字符串相乘!哦,好吧,这个我大一的时候特意做过,并且写过博客,虽然没什么印象,心理慌的一批,这要是做不出来,那得多尴尬。。。
于是,我就开始做了。由于我简历上以C++为主,但是为了证明一下自己,我特意将语言改成C语言,用C语言写了一遍。当然,这个过程中,出了很多差错,我一直用printf来debug,面试官也很有耐心的说,我大概懂你的意思,慢慢debug,最后要出来的时候,我这里看不到结果。我手足无措。这个时候,面试官说:我这里可以看到你的结果,你再换一个值试试:比如 123*456,最后面试官那边得到的也是正确的结果。后来和面试官研究了一下,应该是输出缓冲区有点小,后面的值出不来了,因为我debug时,输出的结果太多了,最后也很圆满。(厚礼谢)
这是我之前写过的字符串相乘的博客:https://blog.csdn.net/NEFUT/article/details/123814634
在这个过程中,其实个人认为,最后的结果虽然重要,但与此同时伴随的是面试官对你思维的考验,如果没有做出来是因为一些细节的问题,虽然不圆满,但是面试官在理解你的思路时,目的就已经达到了,所以不要怕出错。(第一次面试就是紧张,出了错)
然后,面试官说,之后的工作中,可能用到python和go,主要go居多,C++也有,但是会用go写一些高并发的内容。
我回答:
我觉得所有的开发都是面向业务的,不能因为自己是学C++的,就不去接触新的语言,我觉得这是不现实的,并且我开学大三,我自认为我还有很多的时间去接触其他的新的语言和知识,所以我很想学习。

此次面试大概用一个半小时,最终的表现对于我来说,我是很满意的。uu们一起加油!


http://www.niftyadmin.cn/n/4960324.html

相关文章

IPEmotion交流电功率分析计算

一 应用背景 随着国内电动汽车行业的快速发展,在相同的道路环境和行驶状态下,增加电动车的整体续航里程和提升乘员对于行驶途中用电需求的满意度尤为重要。对此,需要采集试验过程中交直流电压电流信号,以计算出车辆各种部件输出和…

【OpenCV】OpenCV环境搭建,Mac系统,C++开发环境

OpenCV环境搭建,Mac系统,C开发环境 一、步骤VSCode C环境安装运行CMake安装运行OpenCV 安装CMakeList 一、步骤 VSCode C环境安装CMake 安装OpenCV 安装CmakeList.txt VSCode C环境安装运行 访问官网 CMake安装运行 CMake官网 参考文档 OpenCV 安…

c++关键字 =delete和=default

在C的类中,有四类特殊的成员函数:① 默认构造函数;② 拷贝构造函数;③ 拷贝赋值函数(operator);④ 析构函数;它们控制着类的实例的创建、初始化、拷贝以及销毁。 (1&…

【计算机网络】日志与守护进程

文章目录 日志日志的创建logmessage 函数日志左边部分实现日志右边部分实现 完整代码log.hpp(整体实现)err.hpp (错误信息枚举) 守护进程PGID SID TTY 的介绍shell中控制进程组的方式结论 为什么要有守护进程存在?守护进程的创建使用守护进程的条件守护进…

【unity小技巧】Unity2D TileMap+柏林噪声生成随机地图(附源码)

文章目录 前言柏林噪声素材导入Rule Tile配置生成随机地图问题扩展问题添加植被源码参考完结 前言 我的上一篇文章介绍了TileMap的使用,主要是为我这篇做一个铺垫,看过上一篇文章的人,应该已经很好的理解TileMap的使用了,这里我就…

numpy与matplotlib 常用日常代码

matplotlab 和 numpy 可能是python 数据处理工作中用的最多的库了, 官网的文档十分详细,但是就是因为数量庞大,很多时候常用的功能和生僻冷门的功能混在一起,找不到重点。按照二八原则,掌握20%的功能就已经能应付绝大多…

【Python原创设计】基于Python Flask的全国气象数据采集及可视化系统-附下载方式以及项目参考论文,原创项目其他均为抄袭

基于Python Flask的全国气象数据采集及可视化系统 一、项目简介二、项目技术三、项目功能四、运行截图五、分类说明六、实现代码七、数据库结构八、源码下载 一、项目简介 本项目是一个基于Web技术的实时气象数据可视化系统。通过爬取中国天气网的各个城市气象数据&#xff0c…

线程池的实现v2.0(可伸缩线程池)

目录 前言 可伸缩线程池原理 可伸缩线程池实现 完整程序 前言 本篇可伸缩线程池的实现是在静态线程池上拓展而来,对于静态线程池的实现,请参考: 线程池的实现全过程v1.0版本(手把手创建,看完必掌握!&…