线上面试,HR和一位技术的面试官
我:不知道
这个项目的框架总结还是要单独总结出来讲稿,因为讲和写区别还是很大的。
我:有学过,但是忘记了,没复习,这个地方确实是可以改进的点。
我:没有了解过。
面试官:因为你的任务和线程是1:n的关系(多个线程争抢一个任务),线程现在还没有考虑它的优先级,所以我们对线程分扇区去处理,就是分cluster去处理。因为有执行能力高和执行能力的线程所以任务调度是不一样的,这样的话,我的任务就会出现请求和投递的过程,这样就能解决扇区内能够做无锁的操作,这样你的任务也就不需要上锁再读取。如果你的任务多线程少,那么加锁没有问题。但是如果你的任务少线程多,此时加锁就会导致效率很低。
我:是的,之前实习的时候是用QT的,然后后面写服务器代码的时候,也有用到C++11的相关新特性。
注:我回答偏了,重点应该是落在面向对象技术,类怎么设计,我给答到C++新特性这方面去了,后面面试官也有和我提到这个问题。
我:通过功能上来进行区分,比如http请求类和线程池的类
面试官:这里有点问题,你通过面向对象思想设计一个程序,可能通过对象的思维去做的。如你刚刚所说的http是一个类,那么如果我做的是ws呢,那我不是又要写一个ws(websocket)的类,这肯定是不好的。
**类是多个具有相同属性和相似操作的控制数据的集合。**类与类之间区分就是通过属性来分界的,比如说人和动物为什么分成不同的类呢,但是它们有一个总类,除了属性以外,每一个类都有相似的行为,这个行为也是区分的参考标准之一。而在我们对类进行区分的时候不仅仅是依赖于属性和行为。有时我们对于某个实例情况来分解的时候,有的时候是以行为为主,有的时候是以属性为主。
对于这些基本概念的话你可能后面需要去了解一下,因为我们长期用C++的话,你最后写出来的代码可能会有大量的重复或者逻辑条理不清晰的问题。
3-6个月
面试官:可能你现在还是学生,编程语言对于你们来说还是一个入门的东西,对于实际工作中只是一个工具.工具就是指针对我们不同的行业以及不同的技术应用方向我们选择对应的技术栈,像如果做机器人那么会使用ROS 系统 和 C++。像我们做自动驾驶,边缘计算平台这些C++用的比较多;但是像如果数学应用则matlab用的多一些。但是如果做敏捷开发那么JAVA、C#用的多一些,它其实没有固定的技术方向,所有的这些语言都只是提供给你的一个工具,工具只是为了解决问题。我们更多还是在边缘计算、分布式架构体系、高并发应用程序多一些,我们C++用的多一些,但我们做边缘计算,我们可能用go语言。
你这边可能更需要关注对于事物的整体认知。从研究生开始,可能大部分的工作都是学习怎么样去提升我们对这个世界的认知以及我们怎么训练自己的抽象能力。你作为研究生,所以我们对你的面向对象程序设计思想有要求,目的也是为了想要了解你想在对于系统结构体系的认知水平以及你怎么看待事物的方法和思维。
可以先在决定方向上去看一看,比如我自己要做哪个方向,然后在这个方向上去选择对应的技术,了解完这个技术之后,考虑可以用什么工具来解决我所要去面对的问题。应该是分三层去考虑,而不是我先决定我要用C语言,然后我要用C语言去做什么,这样你看到的范围就会相对较窄。这个最好是反的。因为在我们现有的系统中都是属于互联网、物联网这样的时代,我们要去了解这么一个体系,以及我们去面对产品化的东西,都不是一个孤岛,大部分都是一个相互有交互的,是一个网状的体系结构。怎么去抽象出这些体系结构才是你后面要去深入理解,如果你不理解它,你就会仅仅只限于语言本身给你带来的一点进步的过程,这个过程是没有办法应付你后期的成长需要的。