浙江华睿科技

岗位:算法优化工程师。浙江滨江区,大小周,有固定加班。电话面试,所以也没问什么,自我介绍都不用,询问主要用到语言是什么,然后就是八股。

1. 线程和进程的区别

(1)资源隔离:进程有独立的地址空间和系统资源;线程共享所属进程资源(如内存、文件描述符),仅拥有独立的栈和寄存器。

(2)创建与切换开销:创建进程、销毁和上下文切换开销大;线程开销小

(3)通信方式:进程间通信需要通过IPC机制(如管道、共享内存);线程可以直接读写共享内存、但需要同步(互斥锁)

(4)健壮性:一个进程崩溃不会影响其他进程;一个线程崩溃可能导致整个进程终止

(5)并发粒度:进程是粗粒度并发,适合强隔离场景;线程是细粒度并发,适合高效率协作场景。

2.C++类和结构体的区别

C++类和结构体在功能上几乎完全相同,都可以包含成员变量、成员函数、支持继承和多态。核心区别有两点:

(1)默认访问权限不一样:class成员默认private,struct默认属性为public

(2)默认继承方式不一样:class继承默认是private,struct继承默认public

3.在使用vector容器的时候需要一次性加入很多元素,有什么方法可以使加入元素的速度更快

当需要加入大量元素的时候,最有效的方法是提前调用reserve()预分配足够的容量,然后使用push_back() 或者emplace_back()插入元素。因为vector底层是动态数组,当容量不足的时:(1)申请一块更大的内存;(2)将原有元素逐个拷贝或者移动到新的内存(3)释放旧内存。这个过程称为重新分配,时间复杂度为O(n),如果频繁触发会导致:多次内存分配/释放(系统调用开销);大量不必要的元素拷贝,迭代器,指针,引用失效。

4.如果程序发生了内存泄漏,应该怎么判断是哪里发生了内存泄漏

使用 Valgrind 或 AddressSanitizer 运行程序,它们能精确报告内存泄漏的位置和调用栈;同时应遵循 RAII 原则,尽量避免手动管理内存。

5.内存碎片有哪几种,怎么解决内存碎片问题

主要分为外部碎片和内部碎片

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 16:59
已编辑
科大讯飞 后端工程师 n×14 其他
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务