复睿智行中间层软件实习生面经

我这次面试的岗位是:中间层软件实习生昨天问了一下hr已经凉凉,上次也面了一次。感觉是kpi面

hr先问了现在在哪里,家是在哪里,只考虑上海的实习吗?可以实习几个月?然后说实习工资统一 180 一天

首先是常规的自我介绍, 然后面试官介绍了一下岗位的工作,主要是相关的调试和测试的工作,编程这边大概工作量占到三分之一。

Q1:C++11新的特性有哪些你有了解过吗?

自动类型推断(auto关键字):允许编译器根据变量的初始化表达式推断出变量的类型,减少冗余的类型声明。

Lambda表达式:允许在代码中定义匿名的函数对象,简化了函数对象的创建和使用。

列表初始化语法:提供了更简洁、直观的初始化语法,支持使用花括号初始化各种数据结构,如数组、结构体、容器等。

智能指针(shared_ptrunique_ptrweak_ptr):引入了更安全、更方便的内存管理机制,帮助避免内存泄漏和悬空指针的问题。

右值引用(&&)和移动语义:引入了右值引用的概念,使得移动语义成为可能,可以高效地转移资源的所有权,提升性能。

并发编程支持:引入了std::thread和std::mutex等多线程库,使得编写多线程程序更加方便和安全。

强类型枚举(enum class):引入了一种更严格、更类型安全的枚举类型,避免了传统枚举的一些问题,如命名冲突和不明确的转换。

移动语义和右值引用:引入了std::move和std::forward等函数和语法,支持对右值的有效转移和使用,提升性能。

这只是C++11引入的一些重要特性,还有其他特性如nullptr、constexpr、静态断言(static_assert)等。

Q2:你这里项目上集群聊天服务器上第四点,使用redis的发布订阅功能来实现跨服务器聊天,你能简要的描述一下吗

Redis是一个开源的高性能键值存储系统,具备发布订阅功能。我们可以利用这个功能来实现跨服务器的实时消息传递。

首先,每个聊天服务器都会订阅一个或多个特定的频道(channel),例如"chat"频道。

当一个用户发送一条聊天消息时,服务器会将消息发布到该频道上,这样所有订阅了该频道的服务器都能收到这条消息。

订阅的服务器接收到消息后,可以将消息推送给与该服务器连接的在线用户,以实现实时聊天的效果。

为了确保跨服务器的聊天消息同步,可以使用Redis的主从复制或集群模式,将消息同步到其他服务器,以保持数据的一致性。

这种基于Redis发布订阅的跨服务器聊天实现具有良好的可扩展性和高效性,因为Redis的发布订阅机制可以轻松处理大量的消息传递,并且可以在服务器之间进行消息同步,以保持聊天的一致性。

当然,这只是一个简要的描述,实际的实现过程还需要考虑一些细节和边界情况,如消息的序列化与反序列化、消息订阅和取消订阅的管理、连接和断连处理等。

Q3:能简单说一下Redis吗?

Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,也被称为键值存储或缓存数据库。以下是关于Redis的简要描述:

数据模型:Redis使用键值对(Key-Value)的数据模型。每个键都与一个值相关联,这个值可以是字符串、哈希、列表、集合、有序集合等不同的数据结构。

内存存储:Redis主要将数据存储在内存中,因此具有非常高的读写性能。它使用持久化机制将内存中的数据定期写入磁盘,以实现数据持久化。

快速访问:Redis以低延迟提供数据访问,因为它的数据存储在内存中,并且使用了高效的数据结构和算法。这使得Redis非常适合作为缓存层,提供快速的读写操作。

数据结构多样性:Redis支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。每种数据结构都有对应的操作命令,可以方便地对数据进行增删改查操作。

功能丰富:Redis提供了许多附加功能,例如发布订阅(Pub/Sub)机制、事务支持、持久化选项、复制和集群模式等。这些功能使得Redis在各种场景下都具备强大的应用能力。

客户端库支持:Redis有许多官方和第三方的客户端库,可以在各种编程语言中使用Redis。这使得开发者可以方便地与Redis进行交互和操作。

Q4:你能讲一下什么是Nginx,然后它是怎么配置做到负载均衡的呢?

Q5:那如果某个连接的信息量比较大,对服务器占用比较大,会导致你其中某台服务器的负载比较大,有考虑过这个问题吗?要怎么解决

我的想法是按业务再进行分类,然后再进行动态调整

Q6:介绍一下服务器中间件有哪些作用?

负载均衡:负载均衡中间件可以在多台服务器之间分发负载,确保请求在服务器集群中均匀分布,以提高系统的整体性能可伸缩性

缓存:缓存中间件(如Redis、Memcached)可以将频繁访问的数据存储在内存中,提供快速的读取操作,减轻数据库或其他后端服务的负载,加快应用程序的响应速度。

反向代理:反向代理中间件(如Nginx、Apache)接收来自客户端的请求,并将请求转发给后端的应用服务器。它可以实现负载均衡、缓存、SSL终止、静态文件服务等功能。

安全性和认证:安全中间件(如Firewall、Web Application Firewall)用于保护应用程序免受恶意攻击,提供访问控制、防火墙、攻击检测和预防等功能。身份验证和授权中间件(如OAuth、OpenID Connect)用于验证用户身份和授权访问受保护的资源。

日志和监控:日志中间件(如ELK Stack、Splunk)用于收集、存储和分析应用程序的日志,以帮助排查问题和监控应用程序的运行状况。监控中间件(如Prometheus、Grafana)用于实时监控应用程序的性能指标、系统资源使用情况和错误率等。

消息队列和异步通信:消息队列中间件(如RabbitMQKafka)用于实现应用程序之间的解耦异步通信,将请求或消息进行缓冲、分发和处理,提高系统的可伸缩性和容错性。

API管理:API管理中间件(如API Gateway)提供了对API的统一管理、认证、访问控制和监控等功能,简化了API的开发、部署和管理。

Q7:git会用多少

基本的使用

Q8:线程间的通信你了解多少

共享内存:多个线程可以通过访问共享内存来进行通信和数据共享。这需要保证对共享数据的访问是线程安全的,通常需要使用同步机制(如互斥锁、信号量、读写锁)来保护共享数据的访问。

消息传递:线程之间可以通过消息传递来进行通信。每个线程都有自己的消息队列,可以将消息发送到其他线程的队列中,接收线程从队列中读取消息并进行处理。消息传递可以是同步的(阻塞式)或异步的(非阻塞式)。

条件变量:条件变量是一种线程间同步的机制,用于线程之间的通知和等待。一个线程可以通过条件变量等待某个条件满足,而其他线程可以通过条件变量发送信号来通知等待的线程条件已经满足,从而唤醒等待的线程继续执行。

信号量:信号量是一种计数器,用于控制对资源的访问。线程可以通过对信号量的操作来申请和释放资源。当资源不可用时,线程可以等待信号量,直到资源可用时才能继续执行。

屏障(Barrier):屏障是一种同步机制,它能够确保在多个线程中的所有线程都达到某个点之前,所有线程都被阻塞。一旦所有线程都到达屏障点,它们将同时被释放继续执行。

事件(Event):事件是一种线程间同步的机制,用于线程之间的通知和等待。一个线程可以等待一个事件发生,而其他线程可以通过设置事件来通知等待的线程事件已经发生。

#C++暑期实习##实习面试#
全部评论
老哥一二月就看到你发的面经了,你还没实习吗
点赞 回复 分享
发布于 2023-06-12 22:54 湖南

相关推荐

09-28 17:40
黑龙江大学 Java
#牛客创作赏金赛# 编写页面这个程序设计工程师嘴上的口头禅是  2016 年 建行刚开始最开发的时候听到的, 因为大学的时候学习的程序设计语言是一 C++为主,对于前端页面这种能看到效果 是一种很难体会的概念。学习 C 语言程序设计的时候显示 眼前的是一个命令行黑屏,学 C++, C#都是。作为大学生初学程序设计开发,黑屏可以设置为白屏, 是要坚持练习编写编译代码。 大学同学总是说 大学四年中如果能够写出一个图书管理系统,毕业才能叫开发会编程。一   直 尝试,发现延修一年才能够设计一套图书借阅系统。不会写算法,但是知道编程是怎么   回事,那是 跟着市面上培训班的视频来学习一年之后的效果。 大学中, 是学习到一些   基础技能,还是学得很认学得很认真。 毕业之后 广州,找工作找了一个月,终于找到一个初级开发 银行开发后端。 学校,写完   毕业论文之后就离开,一路向南。 刚开始开发开发的时候,没有经历过漫长的实习过程,不管没有编程开发经验,都是 特大的高压之下开发开发任务。使用建设银行的前端框架编写页面,同时写后台接口,联调,解决开发的业务 bug,测试成功提交代码。这个过程很快,但是也会让成长很快。没有一定的抗压能力,都会被退出。没有参加过编程实习, 黑龙江念书的时候,面试过一家公司,开发了一套前端编程测试题,实习就实习,就是可能会让打酱油也可能让学到点什么。 广州,   开发过一些公司的后端实习测试题,开出来的工资就是 2k-3k,但是这个过程也会很长。  建设银行退出来之后,过完国庆节日,去了一家小型的公司,遇到一个也是建设银行的高   管。前后端分离开发,新型的开发概念,2017 年元月初的时候接触了 bootstrap 前端技术框架。有前端工程师编写页面,后端开发 需要编写提供数据的接口,进行前后端联调。这种开   发模式效率更高,程序员的分工明确,压力没这么大,开发出来的系统软件用户体验也有很大   的改善。Java 开发之前是使用 JSP 和前端页面进行数据渲染,现 使用 JS 框架,更轻量级的开发。  后来的几年的开发过程中,接触的前端 js 框架虽然不多,但是更新得很快。前端工程师和后端工程师的技术技能分离得更清晰,分工明确。前端工程师虽然不是一个新的开发技   能职位,  Java 开发领域,使用 JavaScript 框架集成项目的前端页面展示效果,效率性能和用户体验都有很大的提升。 项目前后端分离之后模块开发,开发后台的开发压力减小,开发前台的 需要编写好页面和后端联   调测试数据正确性,分工明确的一种很好的配合。前端开发的工作压力肯定是有,每个职位   都有它存 的必要性,作为后端开发没有评价的必要性。建筑开发,记得小的时候是有些主   要的瓦匠什么活都可以干,但是建的都是些农村的小洋楼。 大城市,建高楼大厦,很多工   作都分得很细,效率会更高,时间就是金钱。大城市人口密度高,对人口红利要求大,质量   也高,事情不能一个人可以完成。
投递中国建设银行等公司10个岗位 牛客创作赏金赛
点赞 评论 收藏
分享
2 19 评论
分享
牛客网
牛客企业服务