avatar-decorate
不会code的菜鸡 level
获赞
1245
粉丝
950
关注
2
看过 TA
4400
北京大学
2024
嵌入式软件开发
IP属地:北京
暂未填写个人简介
私信
关注
下面就根据我的实际情况,来和大家分享一下技术方面的经验吧。对于Linux方面的知识,就很遗憾没办法帮助到各位了(我就是个小菜鸡/(ㄒoㄒ)/~~)在这里我就只简单提一下需要准备哪些方面的知识,因为把所有内容都写在同一个帖子里太长了。C语言无论是嵌入式单片机还是嵌入式Linux,C语言都是必考的内容,可以说C语言是嵌入式软件工程师吃饭的家伙,相信C语言的重要性不用多说。C语言这块的话,随着不断复习,自己的一个熟练程度也会越来越高,所以最重要的就是多看多练。对于嵌入式工程师来说C语言基本上是要完全掌握并且熟练使用的,下面就先列出在笔试面试中C语言需要掌握的/比较重要的知识点:运算符优先级输入输出操作原码、反码、补码预处理关键字堆栈数组指针函数字符串结构体、联合体内存分配主要是这几个大的方向,输入输出是必须要熟练的,因为在笔试编程题里面是几乎必须要用到的,这个部分可以去刷算法题来熟悉一下。关键字所有的关键字都要了解,像是static、volatile、extern、sizeof都是比较常考的。堆栈和指针都是重中之重,一定要全面完整地学习。像是大题的话往往是考算法、数据结构以及对字符串的一系列操作。C++如果有时间的话最好去学一下,就封装、继承、多态之类的,所以推荐把其他部分内容复习完以后还有多时间的话可以学一学C++方面的一些知识。单片机单片机这部分主要是针对你在项目中常用的芯片,一般来说大部分人是以STM32为主。我就针对STM32来说说有哪些重要的知识点:GPIO中断定时器通信接口在这些里面最常被问到的就是中断和通信接口。其中通信接口主要就是IIC、SPI、UART。数据结构与算法数据结构对于嵌入式软件岗位来说,数据结构相对没有互联网行业的招聘那么重要,但还是属于必考的知识点。对于嵌入式岗位,数据结构可以选择性地学习,不用全部都学会,毕竟准备的时间是有限的,当然有充足的时间的话,当然建议都学会了,因为对于顶级大厂来说,数据结构是考核的相对重点。数据结构对于大多数不冲顶级大厂的同学来说,主要学数组、链表、队列、堆栈就可以了,至于二叉树之类的,在我整个秋招的过程中,几乎没有被问到。可能像是华为这种公司会考到。算法算法这部分建议去********或者牛客网刷一下题,起码刷个20道简单题,熟练一下做题的方法,输入输出这些,对字符串的操作这些,因为后面笔试基本上都会考两题大题,基本上刷个20题,稍微总结一下,然后加上平时的积累就问题不大了,如果想进华为这样的大厂,就要刷中等甚至困难的算法题了,这个看各位自己的取舍,也可以在牛客网上看看你想投的那家公司的笔试面试侧重点在哪里,比如说华为笔试就是考3道算法大题。网络网络这部分考得还是比较少的,有些公司会问,有些公司不问,如果是涂鸦智能这样做物联网的公司那肯定是会问的。这部分就需要知道一些基础,如果项目中有用到的话就需要将项目中用到的协议了解清楚,以及你在做这个项目的时候为什么要选择这个协议而不是另一个协议。我就在一个物联网项目中有使用到MQTT协议,那我就去单独学了这部分的知识,如果并没有项目涉及网络这一块的话就掌握一点基础知识就好了,即使不理解也死记硬背背下来,但是还是建议大家能在理解的基础上记忆,不然面试官稍微往深入问一点就答不出来了,最经典的两个问题:tcp和udp的区别三次握手四次挥手这部分内容比较少,就不单独展开来讲了,主要就是上面提到的两个问题,把那两个问题理解了去面试非网络领域的公司就没什么大问题了。操作系统操作系统这部分的基础知识是肯定要会的,尽管你可能像我这样在大学阶段只用过单片机,并且没在上面跑过uCOS或者FreeRTOS之类的实时操作系统的话强烈建议要去学一下这方面的知识,因为尽管是投的嵌入式单片机的岗位,往往也是要求会实时操作系统的。所以建议可以去学一下FreeRTOS或者RT-Thread之类的实时操作系统,有时间的话最好能够在自己的项目中实践一下,时间不够的情况下就把基础知识系统地先学一下。其次就是Linux,尽管投的是嵌入式单片机岗位,但嵌入式在广泛的一个定义里,大家还是默认是以Linux为主,所以Linux的基础知识也要会,因为有些公司在笔试的时候就会涉及到,这方面的话主要是要理解一些理论知识,知道线程进程,知道一些基础的指令,最好可以在ubuntu上写一个代码出来gcc编译一下。会这些Linux相关内容基本上就可以让你在笔试阶段不那么吃亏,当然只会这些是不足以支撑你去找一个纯Linux岗位的工作的。找工作流程对于大部分公司来说,招聘流程是这样的:投递简历→测评→技术笔试→技术一面(初试)→技术二面(复试)→HR面(终面)→offer谈薪。有部分公司是没有单独的HR面的,就是技术二面会换成综合面,前半段聊技术问题,后半段聊一些其他东西。一般来说技术一面的面试官是你将来入职后的同事,技术二面或者综合面试的面试官就是你将来入职后的主管。主要的流程就是这样,不同的公司会有不同的招聘流程,不过都是大差不差的。其他面经题目可以看这个牛油的总结,链接在下边https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
0 点赞 评论 收藏
分享
 CPU、寄存器、缓存、内存概述- CPU:中央处理器,执行指令的核心组件。- 寄存器:CPU内部的临时存储空间,存放快速访问的数据。- 缓存(Cache):在寄存器和内存之间的高速存储,分为三级(L1、L2、L3),速度和价格依次降低。- 内存:主要存储程序和数据的地方。数据访问流程1. CPU首先在寄存器中查找数据。2. 如果寄存器未命中,则检查缓存。3. 如果缓存未命中,则从内存中获取数据。内存区域- 栈区:  - 存放函数参数和局部变量。  - 由编译器自动分配和释放,效率高,但内存量有限(如iOS中为2M)。- 堆区:  - 通过`new`、`malloc`等动态分配的内存。  - 需要程序员手动释放,可能导致内存泄漏。- 静态区:  - 存放全局变量和静态变量。  - 程序结束时由系统释放。- 常量区:  - 存放常量,不允许修改。  - 代码区:  - 存放函数体的二进制代码。类型说明符- 基本类型:`void`、`char`、`short`、`int`、`long`、`signed`、`unsigned`、`float`、`double`、`struct`、`enum`、`union`。- 存储类型:`extern`、`static`、`register`、`auto`、`typedef`。- 类型限制符:`const`(只读)、`volatile`。变量理解- extern:指示变量在其他文件中定义。- static:  - 限制变量作用域。  - 局部变量存入静态存储区,延长生存周期。- register:将频繁使用的变量放入寄存器以提高效率。- auto:C语言默认存储类型。- typedef:给类型或变量表达式起别名。- const:只读变量。- volatile:  - 防止编译器优化。  - 适用于中断和多线程环境。C程序内存分配- 堆、栈、静态存储区、文件分配区(常量字符串)、程序分配区(二进制代码)。 sizeof与strlen- sizeof:关键字,返回类型或数组的字节大小。- strlen:计算字符串长度,直到遇到`\0`。 函数参数传递- 值传递、引用传递、指针传递、数组地址传递。Const、指针、基本类型组合的意义- const int x:只读变量。- const char *x:指向常量的指针,指针内容可变,指向内容不可变。- char *const x:常量指针,指针内容不可变,指向内容可变。- const char *const x:指针和内容均不可变。 数组与指针- 物理地址:内存单元的真实地址。- 逻辑地址:CPU生成的地址。 Linux进程间通信- 管道(pipe)、信号量、消息队列、信号、共享内存、套接字。 strcpy与memcpy区别- strcpy:复制字符串。- memcpy:复制指定长度的内存内容。 内存泄漏与内存溢出- 内存泄漏:未释放的内存,导致可用内存减少。- 内存溢出:程序请求的内存大于可用内存。 switch的变量类型限制- 允许:整形、布尔、字符、枚举。- 不允许:字符串等非基本类型。 防止头文件重复调用- 使用#ifndef和#pragma once。 实时操作系统- 示例:FreeRTOS、Ucos。 指针数组与数组指针- 指针数组:数组元素为指针。- 数组指针:指向数组的指针。 结构体自增与双重指针自增- 自增从右向左进行。 寄存器的使用- 存储频繁调用的数据,减少内存访问。 获取全局变量与局部变量地址(gdb)- 使用backtrace或bt命令。 进程中的同步与异步- 同步:通过锁实现。- 自旋锁:忙等待,不阻塞线程。- 互斥锁:阻塞线程,等待资源释放。进程与线程的关系与区别- 进程:资源分配的基本单位,包含一个或多个线程。- 线程:进程中的执行单位,最小调度单位。树的遍历(递归与非递归)- 中序遍历:左子树 - 根节点 - 右子树,利用堆栈进行进栈和出栈操作。剩余的大佬面经总结了  链接在下边https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
0 点赞 评论 收藏
分享
公司的面试流程一般是笔试—>技术面试—>hr面试,在大部分应聘测试工程师这种技术岗的应聘者理解中,通常认为通过技术面试了,后面的hr面试基本就是走流程过形式。也正因如此,我们习惯性地把精力投入到技术面试,而忽略了人事面试。  为什么面试感觉不错,可后来一直没有回音?也许这就是问题所在。  以下凭个人经验给大家总结一下人事面试的一些技巧,希望对于你的求职之路能有帮助。——HR面试基础问题准备——  大部分的HR不会问你岗位专业问题,有一句话是说技术面试看你做事,人事面试看你做人。无非是看你的沟通能力、性格、企业忠贞度、对岗位的热情等。以下列举一些常见的面试问题及回答指导。1、上家公司为什么离职?   离职原因无外乎就是薪酬不满意或者心里受了委屈。虽然大家都心知肚明,但却真的不能太过诚实!切记不要说任何伤害到上家公司及公司同事的话,比如薪资结构不合理、工作压力大加班多、领导喜欢开会、同事难相处。建议最好是说自身原因且能让HR信服的,比如说觉得目前个人发展已经没有什么空间,想要在技术上再多历练提升下自己。回答是积极正面的就好。2、对我们公司业务了解吗?   面试官主要看你对这一份工作的渴望程度,如果说没有了解,HR肯定会觉得你没有很重视这次的面试机会。建议大家一定要提前百度查看下公司的介绍及主营业务。问道这个问题的时候可以说自己有去官网了解公司的产品,可以对产品进行简单的概述。如果你对产品有个人正面的见解,绝壁是让面试官对你好感倍增的亮点。但见解之类的少说,言多必失。3、说一下你个人优缺点?   测试岗位相关的素质要求,例如耐心、细心、责任心、抗压能力强都可以说成自己的优点。但切记对于说的每一个优点都要想好具体的实例体现。以免HR继续问你”能举一个抗压能力强的例子么”,那么你可以列举公司赶项目连着加班半个月,每晚10点后下班的情况(软件公司一般都会有加班,侧面也体现你能适应加班)。   说缺点的话,要有技术含量地说一些小缺点,深究这个小缺点其实还是优点来的。比如可以说自己有点爱钻牛角尖。 下一章讲讲谈薪。附录: 下边是大佬总结的全网最全嵌入式面经。https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
0 点赞 评论 收藏
分享
头像
01-20 13:32
已编辑
北京大学 嵌入式软件开发
我遍览群书,发现关于程序员的面试技巧,好的建议其实并不多。1.给自己写一份非常专业的简历我的建议是,如果你想增加自己的入选机会,那最好还是花点钱制作一份专业的简历。相较于你将来可能得到的巨大收获,这真的只是一个小小的投资。2.研究面试官当我联系程序员来面试的时候,我总是会事先发电子邮件给他,并附上我的名字和博客地址。但是让我惊讶的是,当我给他面试的时候,他竟然对我还是一无所知。再举个正面的例子,我在面试时也碰到过这类开发人员,甚至能对我以前写的一篇博客或者做的教学视频上面的内容侃侃而谈。你说我会推荐哪个?面试官也是人,也会有人性的弱点和特点。Dale Carnegie曾说过,要让别人对你感兴趣,最简单的方法就是你先表达出对对方的兴趣。不管这种方法是否有欠公正,但是如果你想面试成功,那么我建议你事先最好先好好研究一下你应聘的这家公司和面试官(如果知道的话)。当今社会的信息是如此的发达,我们完全可以在Facebook、Twitter、微博、博客上找到任何人的资料。即使你只是大致浏览一番,也会让你受益良多。3.获得内部推荐知道找工作最简单的方法是什么吗?那就是获得内部推荐。这不但可以增加面试机会,还能提升40%的录用几率。前阵子,我找到了一家心仪的公司。然后直接投简历?NONO,猜猜我是怎么做的吧?首先我找到一名和我有共同想法和意见的开发人员,然后开始关注他的博客。接着我在他的博客中留言、发表建议,并且表现出对他的工作和公司非常感兴趣的想法。最后我成功拿到了这个宝贵的内部推荐资格。很多程序员会说,“可是,某某某公司里面的人我一个也不认识啊”。如果你想就此放弃,那当我什么也没说,如果你愿意试试,我敢打赌,你总能想出一种方法达到你的目的。不过这有个秘诀,那就是首先你得在网上创建自己的“名片”——让别人有了解你的机会,所以do it now吧。4. 写好算法这是每一个开发人员都应该具备的重要技能,而且真要掌握起来也并非那么难。在很多面试中,都会有这样的问题,要求你在白板或者电脑上解决编程问题,但是许多程序员,即使是那些非常优秀的程序员,都会一下子大脑一片空白,完全理不出思路来。如果你能花时间学会如何解决这种类型的面试问题,那么下次再碰到这种场景,就不会这么紧张了。我们会紧张其实和怯场无关,主要是因为我们不熟悉这些问题,也没有自信能解决这种问题。在这方面建立起自信之后,你就再也不会紧张了。5.活力洋溢地回答问题只用一个字或者一句话,照本宣科平平无奇地回答问题,或许在技术上是正确的,但是你忘了应该借此机会好好展示自己的激情——这才是一个开发人员能带给团队的最大正能量。举个例子说,如果我问你什么是多态性,我不是要你按照课本中的定义重复给我听,我希望你能就这个主题阐述一下,然后我们可以更深入地聊一聊。6.小心“陷阱”问题你为什么换工作?说说你最大的优点和缺点。最近一次你是如何解决和同事之间发生的技术分歧的?在回答问题之前,你最好明白面试官问这些问题的目的,掌握如何回答这类问题的技巧。就先说说第一个问题吧“你为什么换工作?”在大多数情况下,面试官想知道的是你是否是一个爱说三道四、惯于诽谤抨击雇主的人。所以千万不要上当。7.永远不要撒谎最糟糕的事就是在面试的时候撒谎。知之为知之,不知为不知,如果你确实不知道,千万不要自作聪明来编造问题的答案。相反,你应该诚实地说,你不知道或者你并不是100%肯定,但是你愿意尝试一下,然后再讲讲自己的想法。讲完之后也可以问面试官正确答案是什么,以显示你对此非常感兴趣。实话告诉你,大多数面试官问的问题都是他们知道的问题,不然如果你滥竽充数给你通过的话就会显得他们像个傻瓜。所以千万不要抱着侥幸心理,一旦发现你在撒谎,面试官马上就会质疑你的人品。8.不要太诚实很多程序员会过多地透露自己的信息,不要以为诚实和完全透明就是最好的政策,殊不知过犹不及。第7条所说的不可撒谎诚然不错,但是我们也没必要将自己所有生活的细节和所有缺点都告诉给面试官。有个性是好的,但是如果暴露了性格缺陷就坏事了。试想一下,要是你说自己喜欢赌博或者沉迷于魔兽世界,我敢打赌,面试官肯定会重新审视你。所以在说自己信息的时候一定要慎重,因为这不但会暴露你的缺陷,还会显得你缺乏应有的判断力。9.基础知识必须牢固是的,很多程序员在面试的时候,甚至理直气壮地说,他们不知道链表和堆栈,因为他们没有受到正规教育或者早就还给老师了。我也承认我们在工作的时候是用不到那些深层次的计算机科学概念的,但是作为一个专业的软件开发人员,你至少应该知道一些基本知识。最后呢祝各位同学工作顺利,关注我分享更多面试知识,嵌入式c++的同学可以看一下大佬总结的面经   http://daxprogram.com
0 点赞 评论 收藏
分享
头像
01-19 20:06
已编辑
北京大学 嵌入式软件开发
C++的上限非常高,但是分阶段性逐步学习是没有问题的,一步步的学,慢慢领悟,总有一天会熟练掌握的。C++ 语言的学习其实就三个阶段就好了:(1) 入门阶段这个阶段的学习主要是熟悉 C++ 语言的语法知识。在这个阶段要做到理解对象的思想方法,培养自己的编程思维能力。目标是可以开发一些像贪吃蛇这种简单的控制台小程序。(2) 进阶阶段进阶阶段的学习主要是要掌握 C++ 标准模板库(STL)、设计模式、数据结构基础以及 UI 界面开发、数据库开发等高级技能。在这个阶段是要达到可以开发复杂的程序,达到工作中 C++ 开发程序员的能力。(3) 应用阶段这个是实战阶段,要具备一定的综合性应用软件开发能力。这个阶段就是多观摩别人的项目,看人家的写法,模仿项目,学习其中的思想,一点点的积累,一步步形成自己的东西,厚积而薄发,慢慢你就会发现你也可以了。注意!下面都是超极干的干货一、入门阶段入门阶段的学习主要是熟悉 C++ 语言的语法知识。除了基础的变量、常量、关键字、数据类型、运算符、数组、函数、指针、结构体外,还要学习 C++ 的面向对象编程思想、命名空间 namespace、引用、函数扩展、类的封装、构造和析构、继承、多态、异常处理等内容。语言部分的学习建议不要拖太久,一定要规划好时间,一鼓作气,不然自己容易泄气!1.视频推荐此时同学们应该是毫无基础或者稍微有点 C 语言基础的小白。对于小白来说,不建议上来就看书,因为干看看不懂,容易劝退。可以先从视频教程开始,教材为辅。我当初 C++ 视频是在 b 站看的黑马程序员的 C++ 课程(我不是他们的托儿从 0 到 1 教 C++,三百多个小节,每个小节时间都不是很长,除了个别几个在二十多分钟,其余的基本上都在几分钟到十几分钟之间。每一个阶段都会有相应的小项目教学,对初学者来说是很友好的。看视频的时候不是看看就过去了,编程毕竟是门一门手艺活,孰能生巧。建议一边看,一边将视频中的示例或者小项目教学自己也实现一下,刚开始不会可以照着敲,比只看不动手强一百倍。此外,我最近发现深蓝学院出品的「C++ 基础与深度解析」课程也很不错,深入基础,讲解语法细节。从基础语法讲到 Modern C++,从面向过程开发到新编程范式,对大家学习 C++ 很有帮助。2.书籍推荐入门阶段的书籍为辅,怎么为辅呢?就是视频看完一个阶段,然后就可以去看书上对应阶段的内容,这样看书,一方面看书的时候会很快,容易理解,另一方面可以印证自己在看视频的时候一些不太理解的地方。入门阶段推荐两本书,一本薄的,一本厚的,都是超级经典的书籍。《Essential C++》《Essential C++》是一本内容不多但很实用的 C++ 入门书籍,这本书强调的是快速上手与理解 C++ 编程。主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到 C++ 的函数和结构,也会学习到它们的设计目的和基本原理。《C++ Primer Plus》&《C++ Primer》很多人 C++ 入门的时候会推荐《C++ Primer Plus》,很多人 C++ 入门的时候会推荐《C++ Primer Plus》,我当年先看的也是这本书,当年 C 语言除了学校的教材,我看的就是《C Primer Plus》。这本书怎么说的,讲的超级全面,甚至有点过于全面了,书中的例子和课后习题循序渐进,不夸张的讲所有的知识点可能都囊括进去了,作者可能为了怕大家学不明白,讲的巨细,甚至我感觉都有点啰嗦,造成这本书巨厚,字又巨小,看完感觉近视又加了几度。当时我学习的时候《C++ Primer》还是第 4 版,现在都到第 5 版了!《C++ Primer》堪称 C++ 语法学习的最权威书籍,非常全面地讲解了C++的语法以及C++11的各种新特性,看完之后真的帮助特别大!如果有时间建议至少看两遍以上!时面向 C++ 语言的初学者,是一本很友好的自学教材!而且例程和习题丰富,相信认真读过之后,可以完成 C++ 语言入门这个目标!!如果你在这个阶段觉得差不多了,可以尝试找一些在线的练习题做下,如果你不知道去哪找,那可以去下面这个初学者练习编程巩固语法的绝佳去处。它有专门的 C++ 入门编程练习题,专门练习语法和大家的编程逻辑,从变量、数据类型这些基础语法,到数组、字符串这种复合类型,再到函数、面向对象,以及在 C++ 中很重要的 STL,最后再来点综合练习,差不多 70 多道题,够你练的。除了编程练习以外,如果你想知道你自己的知识点掌握的如何,也可以做一下专项练习。以类似试卷的形式,可以很好的检验自己的学习成果,不管是对之后应对考试,或者应付笔试面试都很有帮助。二、进阶阶段在进阶阶段,你已经对 C++ 有一定的认知了。这个时候我们可以深入学习 C++ 标准模板库(STL)、设计模式、数据结构基础以及 UI 界面开发、数据库开发等高级技能。1.书籍推荐《C++标准程序库》关于 STL,可以先读这本侯捷老师翻译的《C++ 标准程序库》。通过这本书对STL有个基本认识,学会使用 STL。《STL源码剖析》读完 《C++ 标准程序库》,就可以来读这本侯捷老师编写的《STL源码剖析》了。这本书建议必读!这本书讲解了 C++ 底层实现,主要包括 C++ 底层内存管理、各种容器的数据结构实现、常见算法的实现等。可以帮助深入理解C++底层,同时也是对数据结构的复习和巩固。《Effective C++》《Effective C++》讲了 C++ 编程的 55 条准则,提高你的 C++ 编程质量,也是侯捷老师翻译的!这本书有助于梳理在编写 C++ 程序时的一些常见错误和注意事项,也是面试常考的。《深度探索C++对象模型》《深度探索C++对象模型》这本书讲解了C++面向对象特性的底层实现机制。侯捷老师翻译的,看完这本书,对C++面向对象的理解帮助极大,建议必读!2.视频推荐不知道大家注意了没,上面我推荐了四本书,都和一个人有关:侯捷老师。书要么是他翻译的,要么是他写的,C++ 领域 YYDS!同意吧?侯捷老师当然也有讲课,针对书都有对应内容的视频课程!三、应用阶段其实编程语言就是要多练,怎么多练,就是代码量。自己多写,然后多观摩别人的项目,看人家的写法,模仿项目,学习其中的思想,一点点的积累,一步步形成自己的东西,厚积而薄发,慢慢你就会发现你也可以了。面经可以参考c++面经 总结的很详细   https://daxprogram.com/
0 点赞 评论 收藏
分享
1. 识别欺诈迹象1.1 模糊不清的职位描述如果职位描述过于模糊,没有具体工作内容和职责,这可能是一个红旗。1.2 缺乏公司信息一个合法的公司通常会在其网站上提供详细的公司历史、团队成员和业务信息。如果这些信息难以找到,需要警惕。1.3 过度的隐私要求如果公司在面试过程中要求你提供过多的个人或财务信息,这可能是一个欺诈行为的迹象。1.4 不寻常的支付方式如果公司提出以现金或其他非传统方式支付薪水,而不是通过正规的银行转账,这可能是欺诈行为。1.5 压力销售如果面试官给你施加压力,要求你立即做出决定,而不是给你时间考虑,这可能是一个警告信号。2. 面试过程中的应对策略2.1 做好研究在面试前,对公司进行彻底的研究。查看其网站、社交媒体页面和在线评价。2.2 提问准备一些问题,询问公司的业务模式、公司文化、晋升机会等。2.3 观察面试官注意面试官的行为和回答。如果他们回避问题或给出模糊的答案,这可能是一个红旗。2.4 信任直觉如果你感觉某些事情不对劲,不要忽视你的直觉。信任你的直觉,继续寻找其他机会。3. 避免欺诈的实用技巧3.1 检查公司注册信息在面试前,检查公司的注册信息,确保它是一个合法的实体。3.2 了解行业标准了解你所在行业的薪资标准和工作条件,以识别任何异常的提议。3.3 咨询专业人士如果你对某个公司有疑问,可以咨询职业顾问或在该行业工作的朋友。3.4 记录面试过程记录面试过程中的关键信息,以备后续参考。4. 结语在寻找工作的过程中,保持警惕和批判性思维至关重要。通过仔细的准备和研究,你可以避免潜在的欺诈公司,并找到一个真正符合你职业目标的职位。记住,一个好的工作机会值得等待,不要因为急于就业而忽视了潜在的风险。嵌入式C++面经推荐大佬面经  链接在下边  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
0 点赞 评论 收藏
分享
从事嵌入式,纯技术涉及到的内容主要是C语言、arm、STM32驱动、FreeRTOS、Lwip等等。电子电气方向涉及到的主要是:485、232、串口、DCDC\ACDC、网络通信、数据处理。C语言:1.static 关键字的作用、使用方式:全局静态变量:全局静态变量使用范围是该.c文件所有位置。局部静态变量:局部静态变量使用范围是该函数,且只会在初始化时申明一次,后续变化只能通过赋值。静态函数:函数调用范围只限制于该.c。2.volatile关键字的作用:笼统的讲,volatile关键字就是让程序每次都去寄存器中获取该字段的值,保证了数据变量的准确性。什么时候用到该关键字?1.变量是全局变量,且多个线程同时操作该变量的时候。2.中断中处理的数据变量。3.硬件寄存器中的数据。3.const关键字的作用:4.main函数之前进行了什么操作?简单来说就是各种初始化操作。5.堆和栈有什么区别?什么是堆?什么是栈?他们之间有什么区别和联系? -STM32:1.串口数据接收是怎么处理的?串口数据处理有两种方式:1.通过串口中断接收到数据后,将数据放置环形缓存或队列中,待数据处理函数进行处理时进行处理。(RTOS)2.通过轮询,时间片方式调度串口寄存器判断是否有数据,有数据则放入缓存待处理。(裸机)FreeRTOS:1.简述一下什么是RTOS系统FreeRTOS为例,RTOS系统是以抢占优先级为主,时间片为辅实现任务调度的操作系统,主要核心上实现的是任务调度的功能,使任务具有实时性。2.在任务中怎么进行数据传输?什么方式?任务间数据传输一共有三种形式,用的最多的是消息队列,其次是全局变量和信号量。1.消息队列发送数据的方式可以是发送数据本身和发送数据的地址指针。2.全局变量使用供所有任务获取和处理,但全局变量占用内存较多,而且不好管理。3.信号量一般作为标志位使用。附面经  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
0 点赞 评论 收藏
分享
头像
01-14 23:11
已编辑
北京大学 嵌入式软件开发
1. 如何在嵌入式系统中实现蓝牙低功耗(BLE)通信?2. 在STM32中如何配置和使用ADC进行模拟信号采集?3. 嵌入式系统中如何实现PID控制算法?4. 如何在嵌入式系统中实现图像的边缘检测?5. 在FreeRTOS中如何实现任务的优先级调度?6. 嵌入式系统中如何实现动态内存管理?7. 如何在STM32中实现I2C通信?8. 在RT-Thread中如何实现定时器的使用?9. 嵌入式系统中如何实现数据加密与解密?10. 如何在STM32中配置和使用SPI接口?11. 嵌入式系统中如何实现音频信号的处理与分析?12. 在FreeRTOS中如何实现任务的挂起与恢复?13. 如何在嵌入式系统中实现RFID读写功能?14. 在STM32中如何实现CAN总线的接收与发送?15. 嵌入式系统中如何实现温湿度传感器的数据采集?16. 如何在RT-Thread中实现信号量的使用?17. 嵌入式系统中如何实现电池电量监测?18. 在STM32中如何实现USB主机模式的通信?19. 如何在嵌入式系统中实现数据压缩与解压缩?20. 在FreeRTOS中如何实现软件定时器的使用?21. 嵌入式系统中如何实现NFC通信?22. 如何在STM32中配置和使用RTC进行时间管理?23. 嵌入式系统中如何实现机器视觉算法?24. 在RT-Thread中如何实现消息邮箱的使用?25. 如何在嵌入式系统中实现数据的远程监控?26. 在STM32中如何实现PWM信号的调制与解调?27. 嵌入式系统中如何实现多线程的资源共享?28. 如何在FreeRTOS中实现任务的优先级动态调整?29. 嵌入式系统中如何实现环境光传感器的数据处理?30. 在STM32中如何实现LCD显示屏的图形绘制?答案附在面经中   https://daxprogram.com/
0 点赞 评论 收藏
分享
头像
01-13 21:42
已编辑
北京大学 嵌入式软件开发
一面自我介绍然后简历上写了用过gdb和git随口问了我几个gdb和git的用法。然后是提问Q1:Arm汇编中bl的意思A:抱歉,arm汇编我没深入研究过,我用的平台指令集是TI自研的,但我研究过X86的汇编我推测一下。B是跳转的意思,bl的意思可能是小于跳转等于X86汇编的jl,可也能是类似x86的long jump。这个题答案是小于跳转,没答出来但是面试官说还可以。Q2:static 修饰的C语言变量存放在哪里,有什么作用A:存放在data段,不会被重复初始化。Q3:C语言变量有几种储存方式A:存放在stack data heap bssQ4:变量未初始化值是多少A:stack是垃圾值,不确定,全局变量未初始化是0.Q5: 什么是野指针A:我认为是存放了一个不应该访问地址的指针,比如free之后的指针再次访问,访问了一个未进行初始化的指针,访问了一个函数返回的指向局部变量的指针。Q6:外设和处理器交互的方式A:中断,DMA,普遍嵌入式设备的外设会被映射到地址空间中,所以可以直接通过读写被映射的地址进行交互。Q7:使用gcc编译一个hello.c的程序使用什么指令A:gcc hello.c -o hello.out反问环节:Q:工作中会比较多的使用gdb吗?A:调试会用到,看你写了所以问你一下Q:还有有几轮面试A:一般就两轮,特别优秀的三轮。二面自我介绍然后:Q1:看你简历上写了使用fft进行信号处理,讲讲吧A:我们控制这边是用来获取对象的频率响应特性的,就是使用频率成分丰富的信号作为被控对象的输入然后获取被控对象的输出,对输入输出信号做fft分析。Q2:在线还是离线A:离线Q3 简历上写了解决了cache一致性维护讲讲这个A:实验室用的DSP是八核的一款DSP,测试读写的时候发现自读自写没有问题,但是0核写1核读读取不到正确的数据,查阅芯片手册发现可能是cache的原因,写没有写入下一级的内存,读没有无效化cache。去论坛看了一下相关的帖子,然后解决了这个问题。主要通过官方提供的两条指令cache_invalid cache_writeback。读的核需要无效化cache,写的核需要writeback写到下一级。Q4:你还写了解决了多核同步问题,怎么解决的A:我用的芯片没有像X86提供原子指令,转而提供了一种原子外设,官方叫做硬件信号量,访问这个外设的时候是原子的,我模拟实现了一把spinlock 访问临界区的时候上锁。Q5:了解linux吗A:了解,增加模仿linux写过一个简易版本的操作系统内核。Q6:我看你简历上没写啊,讲讲你这个内核吧,跑在什么平台上的,都实现了什么功能A:跑在i386平台,用qemu模拟器模拟的。可以实现内存管理、进程创建、Sytemcall、进程调度还有一个简易版本的内核调度Q7:从Boot开始吧,讲讲你的内核启动过程和你实现的功能。A:i386自导bios在启动之后会从0x7c80读取第一条指令执行,所以内核需要使用链接器来修改镜像的地址。启动后会跳转到镜像entry处的地址,这是一个初始化函数,首先会进行内存的初始化,探测剩余的内存大小,申请一块地址作为page directory,然后对剩余内存按照4kb进行分割,使用链表连接,实现内存池。需要时向内核申请。我的进程创建时模仿linux fork实现的,利用的是写时拷贝技术,只创建一个新的栈,拷贝父进程的page directory的映射,但是标记页表为只读不写,如果写会触发缺页中断,然后进行相应的拷贝。调度是就是在可以准备运行的进程中挑选一个可以准备运行的进程,简单的round-robin算法,后来加入了优先级调度,利用hash-map寻找优先级最高的进程。Q8:在内存初始化中,怎么探测剩余内存的。A:镜像在bss段的最后会创建的一个标记叫做end,可以探测一个cmos管知道总共的内存大小,可以间接知道剩余内存的大小。答案附在面经中   https://daxprogram.com/
查看13道真题和解析
0 点赞 评论 收藏
分享
我遍览群书,发现关于程序员的面试技巧,好的建议其实并不多。1.给自己写一份非常专业的简历我的建议是,如果你想增加自己的入选机会,那最好还是花点钱制作一份专业的简历。相较于你将来可能得到的巨大收获,这真的只是一个小小的投资。2.研究面试官当我联系程序员来面试的时候,我总是会事先发电子邮件给他,并附上我的名字和博客地址。但是让我惊讶的是,当我给他面试的时候,他竟然对我还是一无所知。再举个正面的例子,我在面试时也碰到过这类开发人员,甚至能对我以前写的一篇博客或者做的教学视频上面的内容侃侃而谈。你说我会推荐哪个?面试官也是人,也会有人性的弱点和特点。Dale Carnegie曾说过,要让别人对你感兴趣,最简单的方法就是你先表达出对对方的兴趣。不管这种方法是否有欠公正,但是如果你想面试成功,那么我建议你事先最好先好好研究一下你应聘的这家公司和面试官(如果知道的话)。当今社会的信息是如此的发达,我们完全可以在Facebook、Twitter、微博、博客上找到任何人的资料。即使你只是大致浏览一番,也会让你受益良多。3.获得内部推荐知道找工作最简单的方法是什么吗?那就是获得内部推荐。这不但可以增加面试机会,还能提升40%的录用几率。前阵子,我找到了一家心仪的公司。然后直接投简历?NONO,猜猜我是怎么做的吧?首先我找到一名和我有共同想法和意见的开发人员,然后开始关注他的博客。接着我在他的博客中留言、发表建议,并且表现出对他的工作和公司非常感兴趣的想法。最后我成功拿到了这个宝贵的内部推荐资格。很多程序员会说,“可是,某某某公司里面的人我一个也不认识啊”。如果你想就此放弃,那当我什么也没说,如果你愿意试试,我敢打赌,你总能想出一种方法达到你的目的。不过这有个秘诀,那就是首先你得在网上创建自己的“名片”——让别人有了解你的机会,所以do it now吧。4. 写好算法这是每一个开发人员都应该具备的重要技能,而且真要掌握起来也并非那么难。在很多面试中,都会有这样的问题,要求你在白板或者电脑上解决编程问题,但是许多程序员,即使是那些非常优秀的程序员,都会一下子大脑一片空白,完全理不出思路来。如果你能花时间学会如何解决这种类型的面试问题,那么下次再碰到这种场景,就不会这么紧张了。我们会紧张其实和怯场无关,主要是因为我们不熟悉这些问题,也没有自信能解决这种问题。在这方面建立起自信之后,你就再也不会紧张了。5.活力洋溢地回答问题只用一个字或者一句话,照本宣科平平无奇地回答问题,或许在技术上是正确的,但是你忘了应该借此机会好好展示自己的激情——这才是一个开发人员能带给团队的最大正能量。举个例子说,如果我问你什么是多态性,我不是要你按照课本中的定义重复给我听,我希望你能就这个主题阐述一下,然后我们可以更深入地聊一聊。6.小心“陷阱”问题你为什么换工作?说说你最大的优点和缺点。最近一次你是如何解决和同事之间发生的技术分歧的?在回答问题之前,你最好明白面试官问这些问题的目的,掌握如何回答这类问题的技巧。就先说说第一个问题吧“你为什么换工作?”在大多数情况下,面试官想知道的是你是否是一个爱说三道四、惯于诽谤抨击雇主的人。所以千万不要上当。7.永远不要撒谎最糟糕的事就是在面试的时候撒谎。知之为知之,不知为不知,如果你确实不知道,千万不要自作聪明来编造问题的答案。相反,你应该诚实地说,你不知道或者你并不是100%肯定,但是你愿意尝试一下,然后再讲讲自己的想法。讲完之后也可以问面试官正确答案是什么,以显示你对此非常感兴趣。实话告诉你,大多数面试官问的问题都是他们知道的问题,不然如果你滥竽充数给你通过的话就会显得他们像个傻瓜。所以千万不要抱着侥幸心理,一旦发现你在撒谎,面试官马上就会质疑你的人品。8.不要太诚实很多程序员会过多地透露自己的信息,不要以为诚实和完全透明就是最好的政策,殊不知过犹不及。第7条所说的不可撒谎诚然不错,但是我们也没必要将自己所有生活的细节和所有缺点都告诉给面试官。有个性是好的,但是如果暴露了性格缺陷就坏事了。试想一下,要是你说自己喜欢赌博或者沉迷于魔兽世界,我敢打赌,面试官肯定会重新审视你。所以在说自己信息的时候一定要慎重,因为这不但会暴露你的缺陷,还会显得你缺乏应有的判断力。9.基础知识必须牢固是的,很多程序员在面试的时候,甚至理直气壮地说,他们不知道链表和堆栈,因为他们没有受到正规教育或者早就还给老师了。我也承认我们在工作的时候是用不到那些深层次的计算机科学概念的,但是作为一个专业的软件开发人员,你至少应该知道一些基本知识。最后呢祝各位同学工作顺利,关注我分享更多面试知识,嵌入式c++的同学可以看一下大佬总结的面经  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
0 点赞 评论 收藏
分享
本人学习嵌入式6年之久,简单说一下我们学习的这些路径和参考书籍。1. C/C++ 编程   - 学习C语言的基本语法、数据结构和算法。   - 深入理解C++的面向对象编程特性,包括类、继承、多态等。   - 编写小项目或练习题,加深对语言的理解。2. STM32   - 学习STM32的基本架构和开发环境(如Keil、STM32CubeIDE)。   - 实践简单的GPIO控制、定时器、ADC等基础功能。3. Linux系统编程   - 学习Linux系统调用、进程管理、线程、文件操作等。   - 参考韦东山的《Linux高性能编程》进行快速学习。4. 算法题   - 刷********或其他在线编程平台上的基础算法题,重点关注排序、查找、动态规划等常见算法。5. 读书   - 阅读相关书籍,如《C程序设计语言》、《C++ Primer》、《深入理解计算机系统》等,积累理论知识。提升1. U-Boot移植   - 学习U-Boot的基本架构和配置,尝试将其移植到不同的硬件平台。   - 理解U-Boot与Linux内核的启动流程。2. Linux简单驱动   - 学习Linux设备驱动的基础知识,包括字符设备驱动和块设备驱动的编写。   - 实践编写简单的驱动程序,理解驱动与内核的交互。3. 读书   - 继续阅读相关书籍,如《Linux设备驱动开发》、《Linux内核设计与实现》等,深化对驱动开发的理解。熟练1. Linux内核子系统细节   - 深入学习Linux内核的各个子系统,如进程管理、内存管理、文件系统、网络等。   - 参与内核源代码的阅读和分析,理解其实现原理。2. 网卡驱动与相机驱动   - 学习网络设备驱动的编写与调试,了解网络协议栈的工作原理。   - 尝试编写简单的相机驱动,理解图像采集和处理的基本流程。3. 项目实践   - 选择一个综合性的项目,将前面的知识应用于实际开发中,例如开发一个基于Linux的嵌入式系统。   - 在项目中复习和巩固之前学过的知识。4. 读书   - 阅读更深入的书籍,如《Linux内核完全注释》、《Linux网络编程》等,提升自己的技术水平。最后呢祝各位同学工作顺利,关注我分享更多面试知识,嵌入式c++的同学可以看一下大佬总结的面经  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
0 点赞 评论 收藏
分享
头像
01-07 23:03
已编辑
北京大学 嵌入式软件开发
秋招拖延offer的3个实用话术金九银十的秋招季已经过去大半,有些同学可能已经收到了心仪的offer,而有些同学还在犹豫,想要再看看有没有更合适的。那么,如何措辞才能巧妙地拖延offer呢?以下是一些实用的话术:理由1:与父母沟通型话术1:您好,收到贵公司的offer非常荣幸,贵公司的发展前景和公司文化我都非常看好,与我的所学专业也很契合。目前我还没有和家里沟通,等我和家里沟通之后第一时间给您答复(这个时候一般可以拖2-5天,只要单位不催你,你就可以装死)。话术2:您好,这几天和家里沟通了贵单位的基本情况,家里各方面都挺满意的,但由于通勤较远(可替换其他原因)家里有点担心,想问问您公司有没有市内通勤车或者人才公寓呢(这里不管他回答什么,你都可以往下接)?我再和家里商量一下,三天内给您答复(这次如果催得紧最好说个时间,让公司感受到你的诚意)。理由2:系统故障型话术1:您好,我们学校的签约系统是网签。由于近期收到offer的同学还不是太多,所以我们学院的三方系统还没有开放,问过就业的老师,答复是近期会开放,开放之后第一时间联系您(中间不催你的话,可以装死,催的话就说联系老师问一下,基本可以拖一周—半个月)。话术2:您好,我们学校的签约系统是网签。但是就业处的老师说最近的系统出了点问题正在加急维护,维护好发通知后第一时间联系您(道理同上)。理由3:老师有事型话术1:您好,签约三方需要老师系统进行操作,学院老师说每个月的月中(月末)统一处理,处理好了之后联系您,您看看公司那边还有什么需要我注意的吗?话术2:您好,签约三方需要老师系统进行操作,负责就业的老师最近两周请了事假,再加上最近收到offer的同学并不太多,所以她回来到岗后才会统一处理。写在最后:拖延重在随机应变,每个环节都可以拖延。从公司给你发了offer的那一刻开始,主动权就已经到了各位同学的手中,只是各位同学要拿捏好尺度。举个不恰当的例子有点像钓鱼🎣,又不能让🐟跑了,又不要一下就钓上来。从工资待遇开始商量,到家里是否支持,到个人的其他考虑,从学校的三方合同拟定,到系统发放,再到学校审核,老师签字,这当中的每一个环节都至少可以拖2-3天。当然了,并不是让各位同学有意撒谎,只是希望各位同学都能签到最心仪的,最适合自己的offer。最后呢祝各位同学工作顺利,关注我分享更多面试知识,嵌入式c++的同学可以看一下大佬总结的面经   https://daxprogram.com/
0 点赞 评论 收藏
分享
头像
2024-12-30 08:25
已编辑
北京大学 嵌入式软件开发
我遍览群书,发现关于程序员的面试技巧,好的建议其实并不多。1.给自己写一份非常专业的简历我的建议是,如果你想增加自己的入选机会,那最好还是花点钱制作一份专业的简历。相较于你将来可能得到的巨大收获,这真的只是一个小小的投资。2.研究面试官当我联系程序员来面试的时候,我总是会事先发电子邮件给他,并附上我的名字和博客地址。但是让我惊讶的是,当我给他面试的时候,他竟然对我还是一无所知。再举个正面的例子,我在面试时也碰到过这类开发人员,甚至能对我以前写的一篇博客或者做的教学视频上面的内容侃侃而谈。你说我会推荐哪个?面试官也是人,也会有人性的弱点和特点。Dale Carnegie曾说过,要让别人对你感兴趣,最简单的方法就是你先表达出对对方的兴趣。不管这种方法是否有欠公正,但是如果你想面试成功,那么我建议你事先最好先好好研究一下你应聘的这家公司和面试官(如果知道的话)。当今社会的信息是如此的发达,我们完全可以在Facebook、Twitter、微博、博客上找到任何人的资料。即使你只是大致浏览一番,也会让你受益良多。3.获得内部推荐知道找工作最简单的方法是什么吗?那就是获得内部推荐。这不但可以增加面试机会,还能提升40%的录用几率。前阵子,我找到了一家心仪的公司。然后直接投简历?NONO,猜猜我是怎么做的吧?首先我找到一名和我有共同想法和意见的开发人员,然后开始关注他的博客。接着我在他的博客中留言、发表建议,并且表现出对他的工作和公司非常感兴趣的想法。最后我成功拿到了这个宝贵的内部推荐资格。很多程序员会说,“可是,某某某公司里面的人我一个也不认识啊”。如果你想就此放弃,那当我什么也没说,如果你愿意试试,我敢打赌,你总能想出一种方法达到你的目的。不过这有个秘诀,那就是首先你得在网上创建自己的“名片”——让别人有了解你的机会,所以do it now吧。4. 写好算法这是每一个开发人员都应该具备的重要技能,而且真要掌握起来也并非那么难。在很多面试中,都会有这样的问题,要求你在白板或者电脑上解决编程问题,但是许多程序员,即使是那些非常优秀的程序员,都会一下子大脑一片空白,完全理不出思路来。如果你能花时间学会如何解决这种类型的面试问题,那么下次再碰到这种场景,就不会这么紧张了。我们会紧张其实和怯场无关,主要是因为我们不熟悉这些问题,也没有自信能解决这种问题。在这方面建立起自信之后,你就再也不会紧张了。5.活力洋溢地回答问题只用一个字或者一句话,照本宣科平平无奇地回答问题,或许在技术上是正确的,但是你忘了应该借此机会好好展示自己的激情——这才是一个开发人员能带给团队的最大正能量。举个例子说,如果我问你什么是多态性,我不是要你按照课本中的定义重复给我听,我希望你能就这个主题阐述一下,然后我们可以更深入地聊一聊。6.小心“陷阱”问题你为什么换工作?说说你最大的优点和缺点。最近一次你是如何解决和同事之间发生的技术分歧的?在回答问题之前,你最好明白面试官问这些问题的目的,掌握如何回答这类问题的技巧。就先说说第一个问题吧“你为什么换工作?”在大多数情况下,面试官想知道的是你是否是一个爱说三道四、惯于诽谤抨击雇主的人。所以千万不要上当。7.永远不要撒谎最糟糕的事就是在面试的时候撒谎。知之为知之,不知为不知,如果你确实不知道,千万不要自作聪明来编造问题的答案。相反,你应该诚实地说,你不知道或者你并不是100%肯定,但是你愿意尝试一下,然后再讲讲自己的想法。讲完之后也可以问面试官正确答案是什么,以显示你对此非常感兴趣。实话告诉你,大多数面试官问的问题都是他们知道的问题,不然如果你滥竽充数给你通过的话就会显得他们像个傻瓜。所以千万不要抱着侥幸心理,一旦发现你在撒谎,面试官马上就会质疑你的人品。8.不要太诚实很多程序员会过多地透露自己的信息,不要以为诚实和完全透明就是最好的政策,殊不知过犹不及。第7条所说的不可撒谎诚然不错,但是我们也没必要将自己所有生活的细节和所有缺点都告诉给面试官。有个性是好的,但是如果暴露了性格缺陷就坏事了。试想一下,要是你说自己喜欢赌博或者沉迷于魔兽世界,我敢打赌,面试官肯定会重新审视你。所以在说自己信息的时候一定要慎重,因为这不但会暴露你的缺陷,还会显得你缺乏应有的判断力。9.基础知识必须牢固是的,很多程序员在面试的时候,甚至理直气壮地说,他们不知道链表和堆栈,因为他们没有受到正规教育或者早就还给老师了。我也承认我们在工作的时候是用不到那些深层次的计算机科学概念的,但是作为一个专业的软件开发人员,你至少应该知道一些基本知识。最后呢祝各位同学工作顺利,关注我分享更多面试知识,嵌入式c++的同学可以看一下大佬总结的面经   http://daxprogram.com
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务