面试问答:
- 为什么需要设计内存池?和系统自带的内存分配器相比有什么区别和优势?
- 内存对齐的意义是什么?一般如何实现内存对齐?
- 如何避免内容池内的内容碎片化
- 如何实现线程安全的内存池?在项目中使用了什么同步机制?
- 无锁队列的实现原理是什么?项目中的无锁结构如何工作?
- 项目中的自旋锁和
std::this_thread::yield的作用和使用场景是什么? - 伪共享问题是什么?如何避免伪共享?
- 为什么选择三重架构(threadcache,centralcache,pagecache)?每一层的职责是什么?
- 动态批量分配策略是如何设计的?他又是如何根据使用模式调整的?
- 智能预取机制的实现原理是什么?如何优化内存分配延迟?
- 如何测试内存池的性能?测试中发现了哪些瓶颈?又是如何解决的?
- 高并发场景下,如何保证内存池的性能优于系统内存分配器?
- 项目中用到了哪些c++特性?
- 原子操作和互斥锁的区别是什么?二者分别在什么时候使用?
- 高并发场景下,
compare_exchange_weak和compare_exchange_strong的区别是什么?为什么要选择前者? - 内存池如何支持不同大小的对象的内存分配?
项目框架
该项目是基于哈希映射的多种定长内存分配器: 预先向系统申请一大片内存,之后内存的申请和释放都由应用层的内存池管理,从而减少内存调用。
本质上是一个哈希桶,内含多个block,block内又有不定长的slot,block固定长度4096B,slot是2 8 16字节不定,最大不超过512B,当系统需要多个小暂用的内存空间时对内存池发送请求,内存池根据需求大小在block里找寻对应的slot,这样可以避免大量内存碎片的出现。当需求超过512B时还是要new和malloc。
每个内存池主要有三个对象:Slot FirstBlock Slot FreeSlot Slot currentSlot。
FirstSlot是指向第一个block的指针
FreeSlot存储着所有被释放的slot空间,当占用结束不会回归系统,而是放入内存池中的这个链表,插入最前,需要申请新的slot时优先从中查找
CurrentSlot是还未使用的保留内存资源。需要空间时优先在Freeslot内找,若为空再向block内的currentslot申请。如果没有了再向系统申请block。
对外有两个重要的接口:
1 | template<typename T, typename... Args> |
添加“我如何用AI快速开发提升公司的效率,增加效果+减少成本”
具体:
1.擅长使用vscode+某插件、Claude code开发。例:开发xx程序。
2.调用coze、glm-5 agent等多种智能体。例:利用AI工作流让AI自动开发xx程序。
3.对主流的人工智能模型的应用都有涉猎,如影刀、n8n编程、秒哒等。例:类似内容同上。
相较于传统开发,运用以上方法只需要z天,节省了xxx的开发时间/增加了xxx种功能。
【ps】参考b站的glm-5一站封神视频,还了解一些这些AI模型该怎么用相关的事情。
作为程序员,要与时俱进了解最新的思想,大多数HR都很好奇AI是怎么用的,想要更多的了解AI的更多的应用场景,单凭你对AI的很多技术有了解就足以吸引HR让你参加面试。此时你再展示出你本身有一定的编程能力,尤其是通过CTF-RE中训练的逆向调试技术,展示出你对于作问题是很有耐心和方法的,展示出你的兜底能力。
另外,你还应当在简历当中惜字如金,不要写“套话、废话”,比如我是一个乐观的人(x),谁都是乐观的人。
我会用python(x),谁都会用python。正确做法:我用python开发了xx程序,上线在某某域名,使用人数:xxx/代码量:xxx,开发时间:x天,其中遇到的关键问题是:xxx性能不足/xxx无法正常运行。
惜字如金的关键和本质是信息量。面试简历非常多,HR没有时间仔细去阅读,此时“差异化”就成为了重点。在确保每个句子都惜字如金传递有效信息的前提之下,尽可能选用那些“你有别人没有”的关键优势,你不需要成为100分战士,你需要做到的是展示你在x方面具有优势就可以了。企业需要的不是全能战士(虽然他很想要),他只需要对接他这个缺口/需求的尖兵,所以务必好好罗列一下自己的优势,一定有。
目前最难的部分还是没有实习经历,简历的项目包装还能靠这个月剩下的时间,但是代码能力的提升和实际工作经验的缺失我觉得才是难被选中的直接原因。尤其是很多厂商面试时禁止使用本地ide,几乎封死了使用ai辅助工具的路径。当然会使用ai工具确实是一个亮点,我也准备添加,但是简历被筛选中的一个重要部分还是缺失。
这是一个“错误”的观点。实习经历的意义在于降低企业用人时选择人员的成本。
作为一个HR,在筛选用户时,首先摔出所有非985的。。。所以如果说硬性门槛的话,绝对不是实习经历,而是学历和院校层次。所以我们不讨论这个硬性条件,因为都已经校招了,所以“实习经历”只是加分项,减少企业的筛人成本。有没有比“实习经历”更重要的加分项呢?答案是有的,就是你能帮企业挣到更多的钱。
这是个很简单的问题,谁能为企业创造更多的价值,企业自然就会选择谁,而不是简单的通过有无实习经历来判断。那一个企业是怎么挣钱的呢?通过合理的组合,产品经理发现需求+设计,程序员进行开发,测试工程师测试,上市后宣传部负责各种渠道的宣传,最后用户使用或者付费企业赚到了钱。
所以如果你要针对开发岗来说,挣到钱的本质就是你开发的效率更快。所以你刚才说“面试禁止使用IDE “是因为他们不想要找到不能开发的水货,因为HR没有能力区分用AI开发时你是真懂还是假懂。关键在于你能不能把AI给的东西弄到实际项目来,如果能,即使你不懂代码为什么这样写也没关系,企业只是想挣钱。因此你可以对标企业的实际需求开发项目。比如,面试爱奇艺,就开发视频管理软件;面试微信,就开发通讯软件;面试steam,就开发游戏平台。你就直直地做你面试部门让你去工作时会做的事情,通过这种方式展示出我是适合这个岗位的,即使我可能不会背八股文,但是我能够帮企业挣到更多钱。你抓住这个本质,任何一个聪明的HR都会选择你。
理想的情况是这样,也许进面之后这个点更重要?现在更紧迫的是要先让HR选中我的简历——这点就决定了实习已经八股的必要性,当然这也不算讨论的重点,因为时间条件不再允许。你考虑的确实很有意思,我想想我接下来得在简历里添加那种内容?
- 熟练使用各类ai开发工具?太宽泛了,改成实现一个ai agent,负责实时搜索回答国内旅游信息(因为确实做了这个,只需要免费的token便行),目前的智能体经历不知道是否够用。
- 熟悉c++和java开发?因为目前的就业环境java占据了百分之三十/四十,偏偏我的java开发经验最少,只有一个简单的增删改查的小数据库,但是校招其实我感觉不会太过刁难,毕竟和社招区别很大,会开发ai相关产品几乎就默认熟悉python,不过这不是重点,与其写熟悉语言完全不如写上某个项目。当前我开发的项目除开前几年的课设,就没多少能拿得出手的,关于aiagent,最能看的就是hello——agent的最终项目;c++的还能在后续写上卡哥提供的,数目不少。所以目前需要做的还是通过数个项目包装简历?
- 关于投递简历的部分,在没有参与正式的生产活动时,我觉得通过完全符合某个部门的要求来想获得工作不是特别准确,因为开发的过程是通用的,并非是不可逾越的部分,况且校招的话,能给HR展示自己做好的几个”轮子“,应该就足够了。
你的这些想法完全合理,但是太”naive“了,甚至有点让我觉得你没抓到本质。
本质是:HR到大学挑选一个适合工作岗位的人。你的做法是:成为”通用型“人才,这样你的就业概率最大,比如你迁就就业环境弄Java,但这简直是暴殄天物!
你要找的不是一万份工作,你要找的是1份工作。你能,且仅能有1份正式工作!
这就意味着,通用->平庸/一般化->无亮点。除非你是通用型no.1工人,否则HR为什么要选你呢?
但是作为特长匹配工人,你虽然不是通用no.1,但是这个岗位,你最熟悉、相关经验最丰富,是匹配no.1。
匹配no.1>通用no.1。这是一个简单的不等式。最坏也应该是约等于。
所以你要做的不是迁就这个就业环境,而是全力找出自己的最佳特长,然后把这个特长放到一个合适的岗位当中去。再次强调,你不需要为一万份工作准备简历。你只需要为一份工作准备简历。
这就意味着你需要对标一个具体的工作(而非抽象的就业环境),比如某游戏公司的python开发。
假如你最熟悉python->拒绝一切非python的工作
假如你的特长是x->只做与x有关的工作
所以你不是现在去拿自己的短处以卵击石,或者kuku补短板,这是错的。
你要做的是找到自己的所有长处,然后找到最匹配你的工作岗位,这才是你”找工作“的意义,否则直接给你分配一个就完了。”找“才是最有含金量的操作。
因此,你需要做的是2步:
1.我到底在哪些方面有优势
2.有哪些岗位就需要这些优势
有一句话,叫做没有垃圾,只有放错地方的宝藏。
所以你本身是非常优秀的,只是你一直拿别人的优势丈量自己。
你的看法确实和我差别很大,我一直没有去寻找自身的长处,所做的准备都是为了广撒网。但目前的形势给我的感觉是寻找一份适合自己的工作困难重重,我了解到的一个方法就是放低自己的姿态,尽量包装自己的简历,当然也不是说要适配所有人,只是要尽量适配当前求职环境下HR最希望出现的那类人,前面提到java就是处于这个原因。目前我是没打算去华为od这种外包,宁愿去个中小厂商,先待几年再跳槽跑路,这是我工作的初衷。校招的难度显著小于社招——没有空窗期这个绝对致命的弱点,不会太看你开发能力,岗位开放不在少数。但是我并不觉得这能成为“寻找一份工作”,因为找到”匹配“一份工作的概率也许并不会高于“适配”一份工作的概率。不过你说的确实很有道理,优先展示自己的长处,自己能做什么才是最重要的。虽然前面提到要多补充短板,但时间看起来并不允许,所以确实你提到的“找到自己的长处”才是当下最需要着重的地方。
现在思路已经理清,“找到自己的长处”才是当下最需要着重的地方。
推荐你从以下角度梳理:
1.我开发的最自豪的项目是什么?
2.我解决的最困难的问题是什么?
3.我最习惯用什么语言解决问题?
4.我最喜欢解决什么类型的问题?
5.什么样的事情让我着迷以至于忘记了吃饭或者睡觉?
6.哪个地方是我早就想要去工作的?
将以上内容回答,然后就可以整理你的简历。而后将简历发给每一个你能找到的工作入口:
包括但不限于
①微信公众号、各类招聘软件
②学长/学姐、辅导员等人脉进行内推
③发朋友圈寻找潜在工作机会
顺势而为,抓住你的所有机会和可能,你身边的机会远超你想象。中国有1.3 +billion人口,即使你只在x地工作,也有millions of的工作岗位,抓住一切可以投递的机会去投递,走向更高的更好的平台(当然也是更合适的)。而后你在此基础上提升自己的实际工作能力,走向更广阔的世界。
确实,这就是我想说的,没想到你替我说出来了。目前大概也就这条路还有机会,三月还是中旬,还有大把企业的校招入口还开着,纠结有没有实习是没有结果的,优先要做的是完成春招,内推也许有机会,但是纠结实习这个心病的来源就是一个互联网公司工作的学长因为我没有实习而拒绝了我的投递请求。不过这都不算是matters的内容,这几天要干的除了包装项目和提升代码能力,最重要的就是找出能写在简历里的“特殊亮点”了,目前看来,aiagent的开发看起来是最有特点的,无论有无作用都得写上去点。大概就是这么多吧,顺便说一句,感觉你做自媒体会很有一套啊。
人类是个很聪明的生物,“抱歉,你没有实习经历”的含义是,真抱歉学弟我们不太熟,我不太想帮你但是我这样说显得我很冷漠,这样吧,我找一个你肯定不可能完成的指标拒绝你让你和我都不那么尴尬。
如果我是和你关系很好的学长,我会帮助你发掘你的亮点,在公司里找到一个合适你的岗位内推,如果没有,我也会告诉你how to成为一个合适于公司某岗位的前进方法。
至于你说“有无作用都要写上去的 ai agent”,这是错的。因为AI agent写上去的目标是展示你的与时俱进。仍旧是老话,简历里的内容必须言之有物,惜字如金。你甚至可以不写满(比如我保研的时候简历只有半页A4),但是要保证每一个字都能与目标严格对齐或者相关。
另外,我感受到你因为投递被拒绝后就产生了恐惧心理,不敢于再投递,这也是严重错误的。首先在校招,被拒绝简历或者不给内推没什么的,我们又不是king of the ncepu,本来被拒绝就是常态。只有在被拒绝中才能找到合适,每次被拒绝都是让你走向更加合适的道路。因此你要做的是直面投递,疯狂投递。
强烈建议你现在梳理你的特长,哪怕梳理的很糟糕很垃圾,今天开始投递5封简历,要成功,先发疯(x),先疯狂投递简历。一个合格的投递者至少应该目标投递100+简历(并且每过几天都有改变,因为对工作越发清晰,能力越强)。最低的一个要求是每天5封,投30天,投150封。投过了的也可以再投因为你发现他根本不记得他拒绝过你,不要把自己太当回事。在投递的过程中,免费投递就是0成本,你拿0成本博取一份大几千的工作,请问还有比这更划算的活动吗?所以这种薅羊毛的机会不要让我求你疯狂投了哈哈哈哈。
特长吗?让我想想。。。。大概这就是一份合格简历出现的最关键一步。
- 丰富的c++开发经验?附带卡哥手里的数份预制项目。
我怎么想来这便是最重要的一步也是仅需的一步?钻之弥坚,一个需要用c++开发的公司为什么需要一个不知道熟练开发神经网络或者智能体的人?HR准备问这方面的问题,或者说他需要这方面的人才吗似乎全面是个伪命题,或者是我之前理解的全面是完全自我曲解的。我既然大部分时间都用来开发c相关的项目,我何必要自讨苦吃,在自己的简历上添油加醋,弄得不伦不类,或者说,他们为什么一定要出现在一份简历里呢?当然目前的侧重点必须要分清楚。话说回来,你谈论的投递相关问题确实有道理,之前我子啊这方面有点幼稚的幻想,不过你一语中的,多投才是唯一正确的做法,虽然目前项目还没完全完成,但是在面试前,或者说得到面试前,包装这方面得尽可能做到最好。大概这才是正确的做法。
你已经进步巨大。首先你愿意购买卡哥的课程来学习,这是非常值得肯定的。(因为你是一个与时俱进敢于投资自己的人)。其次你能够更新你的思想,听取别人的建议,这说明你是一个擅长吸收别人的经验的人。而且你还开始思考多投的意义和到底什么内容才该出现在简历上。
把你所有已经做的项目都列出来,无论大小,做一个排序,把最重要的一个展开说说,做一份简历拿出去投呢。你最最骄傲的项目(最熟悉的那个项目),不要觉得这个项目很简单,和xx的yy项目比差远了。这是错的。你做的项目很好,哪怕就是最最最垃圾的大一图书管理项目,也可以获取一份月薪3k的程序员工作,因为你做的是一个完整可运行的项目。项目普通不等于没有工作,项目普通工作不过是工资低一点,你可以通过这个项目了解到你的真实水平,比如可能是月薪w。而后,你再此基础上,每天一半时间面试,一半时间精进自己,不断提高自己能够拿到的offer等级。不要刚开始就否定自己。你去投一投,3k,5k,7k,9k,11k,13k,15k,不断投,不断定位自己。行动是比思考更重要的,直面问题的行动比盲目的行动更加重要。你做卡哥的项目,其实是在逃避面对真实的自己,害怕自己什么都拿不出手,害怕自己四年的努力被别人的一句”抱歉,拒绝“所否定。但你其实很优秀,你不需要包装(编造)自己,你不需要给自己添油加醋,展现最真实的你不仅能找到最合适的工作,而且能让你在工作中发挥出自己的真实水平,过的愉快。希望你成功,如有问题欢迎你随时微信/电话联系我。18612523133。加油好兄弟!待会把对话微信发我一份,谢谢!嘻嘻
现在思路已经理清,“找到自己的长处”才是当下最需要着重的地方。
推荐你从以下角度梳理:
1.我开发的最自豪的项目是什么?
2.我解决的最困难的问题是什么?
3.我最习惯用什么语言解决问题?
4.我最喜欢解决什么类型的问题?
5.什么样的事情让我着迷以至于忘记了吃饭或者睡觉?
6.哪个地方是我早就想要去工作的?
将以上内容回答,然后就可以整理你的简历。而后将简历发给每一个你能找到的工作入口:
包括但不限于
①微信公众号、各类招聘软件
②学长/学姐、辅导员等人脉进行内推
③发朋友圈寻找潜在工作机会
顺势而为,抓住你的所有机会和可能,你身边的机会远超你想象。中国有1.3 +billion人口,即使你只在x地工作,也有millions of的工作岗位,抓住一切可以投递的机会去投递,走向更高的更好的平台(当然也是更合适的)。而后你在此基础上提升自己的实际工作能力,走向更广阔的世界。