中望一面凉经 25 min

先说下,面试官挺好的哈哈,调侃下,
忘记记录了😂....
25分钟,15分钟问C++和项目,10分钟闲聊....感觉是不是凉了,,,项目的很多东西没问,主要自己没引导好,而且八股没开始背,面试官问的几个问题答的都不好
(以下打乱顺序)

[1],
new 和 malloc 的区别

[2],
Windows下和Linux下,C++的区别,或者编译的区别

1,编译器差异:
1)Windows:主要有Visual C++编译器(MSVC),可以使用Visual Studio集成开发环境进行开发。也支持使用GNU编译器套件(如MinGW)或Clang进行编译
2)Linux:常用的是GNU编译器套件(GCC)和Clang。通常使用命令行进行编译,也可以使用各种集成开发环境(如Eclipse、Code::Blocks)

2,
系统调用差异:
1)Windows:通常使用Windows API进行系统调用,例如文件操作、进程管理等。
2)Linux:通常使用POSIX API进行系统调用,与UNIX系统兼容,例如fork()、exec()等。

3,
开发环境和工具链:
1)Windows:常用的集成开发环境有Visual Studio,也可以使用MinGW、Cygwin等工具链。
2)Linux:开发者可以选择使用命令行工具链、各种文本编辑器和集成开发环境。

4,
标准库和系统库:

[3],项目压测,每秒传输数据量 148万 bytes,为什么那么低

1,
实施负载均衡:
将数据流量均匀地分配到多个服务器上,避免单点故障,并提高数据传输速度和可靠性。
2,
优化数据结构:
使用数据库索引、缓存,加快数据查询速度

[4],压测数据,环境,具体的过程是
[5],常规算法都懂吗,说一下
[6],实习最早什么时候可以到岗,学校/家离公司远吗
[7],了解中望吗,CAD和CAx的区别,为什么想来中望
[8],大一大二学了什么课程
[9],为什么要投中望,对卷的定义是
[10],学校课程怎么办
[11],入伍经历
[12],公司氛围
[13],反问
#中望##一面##面经##实习##C++##日常实习#
全部评论
谢谢你
点赞 回复 分享
发布于 04-15 17:11 湖北
面试不过的原因(第 2 次反思): 项目不够熟悉,虽然自己花了实打实的100个小时,源码也手撕了2遍,也写了10多万字文字来分析记录总结,画了20~30个流程图来梳理,,,但是,没有说真正系统背过,很多东西只是有个印象,离在面试官面前侃侃而谈,还有段距离。。。。。加上八股没背,因为项目中的很多知识点,其实都可以联系到八股的,,,,如果八股背了,那么项目也会说的流畅很多
1 回复 分享
发布于 04-21 14:49 广东
兄弟哪投的呀,为啥我一直没进度
点赞 回复 分享
发布于 04-12 22:17 重庆
[1]new和malloc区别(详解): 1)异常处理:new分配内存失败抛出 bad_alloc 异常;malloc分配内存失败返回 NULL 2)内存块:new不需要指定内存块大小,编译器会根据类型自动确认;malloc 需要显式指定内存块大小 3)初始化:new 是 C++运算符,调用构造函数初始化;malloc 是C语言库函数,不会调用构造函数,需要手动初始化 4)内存分配为止:new 在自由存储区,malloc 在堆区,当然自由存储区本质也是堆区,但是前者是逻辑概念,后者是物理概念 5)内存释放:delete 调用析构函数,并将指针设置为 nullptr;free 不会调用析构,不会将指针设为 nullptr,可能产生野指针 6)数组释放:delete 可正确释放 new[] 分配的数组;free 不了解数组大小,不能释放 malloc 分配的数组
点赞 回复 分享
发布于 04-14 10:54 广东
关于 [3] 的补充(压测的 148万 bytes 每秒)(大写的 B 是 bytes,小写的 b 是 bit,也就是比特) 1)首先,这里的 1bytes = 8bit,所以 148万bytes/s = 1.48M/s = 1.48MB/s = 11.8Mb/s = 11.8Mbps 2)原因: a. 传输协议:有些协议包含较大的控制信息头,会降低效率;高并发连接也会增加协议握手,保持连接,重传等机制带来的开销(措施:可以优化传输协议,比如TCP/IP协议栈窗口大小的调整,快速重传和恢复机制的优化) b. 硬件:可以从增加带宽(千兆万兆网络或Wi-Fi 6),升级硬件(高速网卡,高性能存储设备SSD)两方面考虑 c. 并发模型:异步I/O,多线程,负载均衡,数据压缩等方向 d. 网络拥塞和流量控制 e. 服务器本身的处理能力:数据库连接池不足,线程池饱和,I/O瓶颈等
点赞 回复 分享
发布于 04-18 20:19 广东
补充(虽然Mysql数据库和Linux,都学过,但是都快一年没碰了,所以面试时答得很差。。。还是得好好背下八股,回头复习下) 【14】Linux常用命令 ls:列出目录内容。 cd:改变当前工作目录。 pwd:显示当前工作目录的路径。 mkdir:创建新目录。 rm:删除文件或目录。 cp:复制文件或目录。 mv:移动文件或目录,也可用于重命名文件或目录。 cat:连接文件并打印到标准输出设备。 grep:在文件中搜索指定模式。 sudo:以超级用户权限执行命令。
点赞 回复 分享
发布于 04-19 22:42 广东
面试不过的原因: 你简历写了熟悉C++,结果new和malloc的区别不懂,Linux和Windows下C++的区别也不懂。 写了熟悉Linux基本命令,结果问了你支支吾吾半天说不上来 (边面边记吧,争取上一次面试出现的问题,以后都能答上来)
点赞 回复 分享
发布于 04-20 13:29 广东
【15】介绍下你的项目(之前答的很差,明明总结过两遍,还细细研究过,一个多月不看又忘的七七八八了,这里重新整理下): 1) 首先,最外层是线程池,是半同步/半反应堆线程池,这里的半同步/半反应堆的具体工作流程是,以 Proactor 为例: 主线程充当异步线程,如果 socket 上有事件发生,主线程读取后将数据封装成请求对象插入请求队列,然后请求队列上的工作线程,通过竞争获得任务接管权 这里通过一个工作队列,解除了主线程和工作线程的耦合关系 具体实现呢,有 5 部分,类定义,线程池的创建和回收,向请求队列添加任务,线程处理函数 work() 和 执行任务函数 run() 5 部分结合起来,就是常考的手撕线程池 2) 第二个呢,就是日志系统,项目中的日志系统是异步实现的,为什么不用同步呢,因为同步时,写入函数和工作线程是 串行的,当单条日志比较大,或者峰值的时候,写日志就会成为性能瓶颈。 而异步会将日志内容先存入阻塞队列,写线程先从阻塞队列取出内容,再写入,就可以避免阻塞。这里实际就是并发编程中经典的生产者/消费者模型,生产者线程和消费者线程共享同一个缓冲区,缓冲区底层是循环数组实现的阻塞队列。 3) 第三个就是定时器模块,可以定期检测非活跃连接,及时释放连接资源。 项目中,具体就是,服务器为每个连接创建一个定时器,定时器放在升序链表中,按超时时间升序排列,到期的定时器会从链表中删除,这里插入定时器的时间复杂度是O(n),删除的复杂度是O(1) 4) 第四个,http 连接的处理,也是本项目最复杂的一部分,整个项目约3000行代码,其中 http 的 .h 和 .cpp 两个文件,就占了800行 分 3 部分请求报文的读取,接收和响应 请求报文接收,涉及到对 http 报文格式和状态码的处理 解析部分,主要是主从状态机这个抽象模型 通过从状态机读取一行,然后由主状态机解析,分别对请求行,请求头和请求内容进行处理,其中解析请求头包含对GET的解析,解析请求内容,包含对POST的解析 响应部分,调用了sys/stat等多个头文件 5) 最后就是数据库连接池,类似前面提到的线程池,本质都是空间换时间,对资源的复用 项目中,使用局部静态变量的懒汉模式,来创建连接池 连接池的释放,通过 RAII 机制封装,避免了手动释放
点赞 回复 分享
发布于 04-21 20:11 广东
【16】项目中让你印象最深刻的部分(3分钟)(实际就是,HR给机会你发挥,讲一下你最熟悉的部分,最好可以手撕,,比如线程池的5个部分,各种细节都能讲出来,然后触类旁通一下) (第一次面试讲不出来情有可原,,,慢慢进步吧,每次面试,实际也是对项目的打磨,,,从支支吾吾到侃侃而谈/旁征博引
点赞 回复 分享
发布于 04-21 20:32 广东
发现一个面试前比较好的备考方法: 根据关键词,在B站,Youtube检索,看2个相关视频,效果还不错 比如“C++智能指针”“设计测试用例”“黑盒白盒”
点赞 回复 分享
发布于 04-22 11:31 广东
谢谢
点赞 回复 分享
发布于 04-22 19:19 江苏
评论区的解答可以看出感觉的能力肯定没有问题,只是面试准备不够充分,不过方便问一下学历背景吗
点赞 回复 分享
发布于 04-24 11:18 河北
日常实习吗
点赞 回复 分享
发布于 05-09 13:14 广东

相关推荐

11-04 18:02
已编辑
门头沟学院 Java
一笑而过2222:一、Redis 数据类型 1. 字符串(string):可以存储任何类型的字符串,如文本、数字等。可以进行自增自减等操作。 2. 哈希(hash):类似于 Python 的字典,存储键值对集合。适合存储对象信息。 3. 列表(list):按照插入顺序排序的字符串元素集合。可以进行从两端的插入和弹出操作。 4. 集合(set):无序的、不重复的字符串元素集合。支持交集、并集、差集等操作。 5. 有序集合(sorted set):每个元素都关联一个分数,可以按照分数进行排序。常用于排行榜等场景。 二、Redis 跳表 Redis 的有序集合(sorted set)是通过跳表实现的。跳表是一种可以替代平衡树的数据结构,具有以下特点: 1. 插入、删除、查找操作的时间复杂度均为 O(log n),与平衡树相当。 2. 实现相对简单,比起平衡树更易于理解和实现。 3. 可以在不同层次进行快速的遍历和查找,提高了查找效率。 三、抽象类和接口类区别 1. 定义: - 抽象类是用 abstract 关键字修饰的类,可以包含抽象方法和具体方法。 - 接口是用 interface 关键字定义的,只包含抽象方法和常量。 2. 继承: - 类只能单继承抽象类,但可以实现多个接口。 3. 方法实现: - 抽象类可以有部分方法的具体实现,子类可以继承这些实现或者重写它们。 - 接口中的方法都是抽象的,实现接口的类必须实现所有的方法。 4. 变量: - 抽象类可以包含成员变量,既可以是普通变量也可以是静态变量。 - 接口中只能定义静态常量。 四、重载和重写,子类能否对父类重载重写 1. 重载(Overload):是在同一个类中,方法名相同,但参数列表不同(参数类型、参数个数、参数顺序不同)。子类不能对父类进行重载,因为重载是在同一个类中的概念。 2. 重写(Override):子类继承父类,子类中的方法与父类中的方法具有相同的方法名、参数列表和返回类型,并且子类方法的访问权限不能小于父类方法的访问权限。子类可以对父类进行重写。
查看30道真题和解析
点赞 评论 收藏
分享
14 39 评论
分享
牛客网
牛客企业服务