首页 > 面试复盘 | 8.5~诺瓦科技~牛客sp专场~一面
头像
helloRachel
编辑于 2021-10-13 17:28
+ 关注

面试复盘 | 8.5~诺瓦科技~牛客sp专场~一面

诺瓦科技

牛客SP专场-提前批;base:西安

投递:2021-07-16

公司介绍:LED显示领域独角兽,服务全球超过10000家客户,拥有基于互联网和大数据的云发布和云监控服务平台、全球领先的逐点校正和画质显示技术、LED显示控制软硬件系统级解决方案、优质的视频处理、和操控软硬件系统级解决方案

岗位要求:【主要是C++;Java岗位很少】

1、2022届毕业生,硕士及以上学历;

2、具备良好的软件思维,熟悉==面向对象编程语言==,具备一定的面向对象分析设计能力;

3、全面、扎实的软件知识结构,掌握==操作系统==、==软件工程==、==设计模式==、==数据结构==、==数据库系统==、==网络安全==等专业知识;

4、有良好的自学能力,独立思考能力,能够在短时间内学习并应用新技术;

5、有强烈的责任心,易于沟通,具有良好的团队合作精神,踏实认真、热衷于软件开发技术。

笔试题

笔试:2021-07-20

1. HTTP、TCP区别

2. TCP和UDP的区别和连接过程

TCP/IP协议模型位于传输层,主要由TCP,UDP协议组成

  • TCP:面向连接的,可靠的,字节流服务,TCP服务器必须给每个连接分配资源
  • UDP:无连接,不可靠的,数据报服务,UDP不需要给每个连接分配资源

三次握手、四次挥手、保证可靠性

3. FTP的主动模式和被动模式

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP
协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

默认情况下FTP协议使用TCP端口中的
20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive(也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT
命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。

Port: FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。
PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

Passive
在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,通过三次握手建立通道,然后FTP服务器将通过这个端口进行数据的传送。

很多***在设置的时候都是不允许接受外部发起的连接的,所以许多位于***后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过***打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP
20无法和内部网络的客户端建立一个新的连接,造成无法工作。

4. 静态编译和动态编译的优缺点

1.动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。

2.静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补。

5. CAS无锁机制原理,利用CAS技术实现无锁队列

https://blog.csdn.net/yishizuofei/article/details/78353722

6. 拷贝构造函数的作用,个人理解,和常见的形式

7. 简述纯虚方法和虚方法的区别和联系

8. 进程和线程的区别

1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)

2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此 CPU
切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

3、线程之间的通信相对于进程更方便。

4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

9. socket listen参数中的backlog

简而言之,该参数就是控制多个请求连接的客户端进入等待队列的个数。

服务器监听时,在每次处理一个客户端的连接时是需要一定时间的,这个时间非常的短(也许只有1ms 或者还不到),但这个时间还是存在的。而这个backlog
存在的意义就是:在这段时间里面除了第一个连接请求是正在进行处理以外,其他的连接请求都在请求队列中等待,而如果超过了队列的最大等待个数时,其他的请求将被忽略或者将不会被处理。这个backlog的值就是影响这个队列的大小的。

/proc/sys/net/core/somaxconn跟listen参数的最小值作为backlog的值。

10.什么是线性安全?

什么是线程安全?

“线程安全”也不是指线程的安全,而是指内存的安全。目前主流操作系统都是多任务的,即多个进程同时运行。为了保证安全,每个进程只能访问分配给自己的内存空间,而不能访问别的进程的,这是由操作系统保障的。在每个进程的内存空间中都会有一块特殊的公共区域,通常称为堆(内存)。进程内的所有线程都可以访问到该区域,这就是造成问题的潜在原因。当多个线程同时访问同一块内存资源时,会出现操作冲突。

如何保证线程安全呢?

1. 每一个线程都有自己的内存空间,一般称为栈内存,该部分内存是线程独有的,如局部变量一般在栈中存储。【自己的变量存到自己的栈中】
2.
按照主流编程语言的规定,类的成员变量不能再分配在线程的栈内存中,而应该分配在公共的堆内存中。要让公共区域堆内存中的数据对于每个线程都是安全的,那就每个线程都拷贝它一份,每个线程只处理自己的这一份拷贝而不去影响别的线程的,这不就安全了嘛,这个方法就是ThreadLocalThreadLocal getName = new ThreadLocal();【共有的变量复制一份到自己的栈中】
3. 常量,只能用,不能改,一定是线程安全的。
4. (互斥)锁,当多个线程访问同一块共享资源时,为了保证数据一致性,先访问到该资源的线程发现该资源的锁是空闲的,就占有锁。其余线程发现锁已经被占有,就无权再访问,只能等待。
5. 当只有一个线程时,一定是安全的;随着线程数增多,数据不安全的概率会增大。锁的获取和释放是要花费一定代价的,当并发量不是很高时,采用CAS锁(Compare and swap)
。CAS锁在线程暂时不用资源时,记录当前的状态和版本号,之后重新使用资源时,比较状态和版本号是否更改(只要修改资源,版本号加一,防止ABA问题,即改变之后又改回来,无法发现数据被更改的情况),如果被修改,就重头再来执行。其实CAS就是乐观锁

11. 【编程】树的遍历

12. 【编程】给出数组中重复数字出现的次数

13. 【编程】找到一段英语中出现最多的字母

14. 【编程】C++找错题


一面

2021-08-05

1. 自我介绍-主要是项目介绍【面试官会根据项目来问一些相应的问题,比较近期的项目是深度学习相关的,因此着重问我算法方面的难点及工作,面试官也不太懂,就过了~~8min】

2. 操作系统中线程和进程的区别,一个服务是一个进程吗?

3. Java基础:线程的创建方式、Runnable和thread的区别、线程池的参数(核心线程数等)根据什么情况决定;锁相关知识、什么时候需要加锁、可重入锁、同步锁(主要是自己说,顺着问的哈哈哈哈哈);面向对象特征、接口抽象类的区别(接口都是声明式吗)

4. TCP的协议、socket是否用过简单介绍

5. Java中用过的集合类,ArrayList和LinkedList区别

6. 大学的竞赛都是小组赛?

7. 反问:业务:C++、C#图像处理;硬件上的安卓应用;硬件

历史笔试题:

Windows进程的要素(5个)

死锁

反转链表

冒泡排序

判断两个数据相等的方法(不能用逻辑运算符)

【面试】

  • 你大概说一下自己的职业生涯规划,未来的发展目标。

  • 你觉得企业后端和大数据有什么关系么?

  • 假设公司需要转其他语言是否愿意?

  • 你对Java的理解?觉得自己对Java的理解程度如何?

  • if if if 和 if else if else if 你觉得有什么区别?

  • 你觉得switch case 和if else if 有什么区别?

  • 如果只有四个逻辑分支,用哪种?

  • 在使用上两者是可以互相替代的么?

  • For while 递归这三种循环的区别

  • Int 用来存储年龄合适么?不合适应该用什么?除了short呢?

  • Java 中是否有无符号类型?Java 如何实现无符号类型?

  • 是否在项目中尝试用到过无符号?现在你的项目的什么地方能使用无符号去优化一些东西。

  • 在写代码的时候,Python 有没有办法去实现去减少这种弱类型语言所产生的判断。

  • 在python中能否实现一些自定义类型?在传输参数的时候能否限定传入的参数类型。

  • 在做项目的时候是以什么样的心态和目的去完成的。

  • Java 有没有对自己的业务做过封装。

  • 是否愿意对自己的代码进行封装。

  • C 和 Java 的区别是什么?

  • C 语言里面开多线程很麻烦,在Java 里面有没有用过多线程。

  • 使用多线程引入了什么问题?

  • 你知道的锁有几种?

  • 进程间的通信、多PC之间的通信方式有哪些?

  • 项目过程中的不足与收获

  • redis是什么,怎么用

  • 面向对象的特征,与面向过程的区别

  • 快排与冒泡排序区别

  • get和post区别

  • tcp和udp区别

  • 8.动态库与静态库?

  • 9.进程与线程区别

  • 10.线程同步的方法

  • 谈一下自己简历里面的项目,自己哪里做得好?写了多少行代码?

  • MVC模型是什么?有什么优点?有什么缺点?

  • TCP/IP模型有几层?TCP处在哪一层?TCP/UDP的报文端口号,长度

  • HTTP在哪一层?HTTP的post和get的区别

  • 多线程多进程了解吗?多线程的同步方式?

  • 多线程的话每个线程有自己的堆栈吗?

  • 谈谈你面向对象的理解,谈一谈封装继承多态的理解

更多模拟面试

全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐